From c1cb31a92847c3116714d35f3b4d82df2b1964df Mon Sep 17 00:00:00 2001 From: Pontus Abrahamsson Date: Sat, 7 Sep 2024 10:12:10 +0200 Subject: [PATCH 1/6] Create services --- apps/app/.env.example | 22 +------ apps/app/package.json | 5 -- apps/app/sentry.client.config.ts | 19 ------ apps/app/sentry.edge.config.ts | 8 --- apps/app/sentry.server.config.ts | 19 ------ apps/app/src/actions/post/schema.ts | 6 -- .../app/src/actions/post/share-link-action.ts | 18 ------ apps/app/src/actions/safe-action.ts | 58 ++----------------- .../src/actions/user/update-post-action.ts | 3 - apps/app/src/env.mjs | 12 ---- apps/app/src/lib/dub.ts | 3 - apps/app/src/services/.gitkeep | 0 apps/web/.env.example | 6 -- apps/web/package.json | 2 - apps/web/src/app/talk-to-us/page.tsx | 15 ----- apps/web/src/components/cal-embed.tsx | 32 ---------- 16 files changed, 7 insertions(+), 221 deletions(-) delete mode 100644 apps/app/sentry.client.config.ts delete mode 100644 apps/app/sentry.edge.config.ts delete mode 100644 apps/app/sentry.server.config.ts delete mode 100644 apps/app/src/actions/post/schema.ts delete mode 100644 apps/app/src/actions/post/share-link-action.ts delete mode 100644 apps/app/src/lib/dub.ts create mode 100644 apps/app/src/services/.gitkeep delete mode 100644 apps/web/src/app/talk-to-us/page.tsx delete mode 100644 apps/web/src/components/cal-embed.tsx diff --git a/apps/app/.env.example b/apps/app/.env.example index a31ad30a..9f6536c4 100644 --- a/apps/app/.env.example +++ b/apps/app/.env.example @@ -1,24 +1,4 @@ # Supabase NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321 NEXT_PUBLIC_SUPABASE_ANON_KEY= -SUPABASE_SERVICE_KEY= - -# Resend -RESEND_API_KEY= - -# Upstash -UPSTASH_REDIS_REST_URL= -UPSTASH_REDIS_REST_TOKEN= - -# Dub -DUB_API_KEY= - -# OpenPanel -NEXT_PUBLIC_OPENPANEL_CLIENT_ID= -OPENPANEL_SECRET_KEY= - -# Sentry -SENTRY_AUTH_TOKEN= -NEXT_PUBLIC_SENTRY_DSN= -SENTRY_ORG= -SENTRY_PROJECT= \ No newline at end of file +SUPABASE_SERVICE_KEY= \ No newline at end of file diff --git a/apps/app/package.json b/apps/app/package.json index b61853a9..b59d580b 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -12,11 +12,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@v1/analytics": "workspace:*", - "@v1/kv": "workspace:*", "@v1/supabase": "workspace:*", "@v1/ui": "workspace:*", - "dub": "^0.36.5", "geist": "^1.3.1", "next": "14.2.7", "next-international": "^1.2.4", @@ -28,8 +25,6 @@ "zod": "^3.23.8" }, "devDependencies": { - "@sentry/nextjs": "^8", - "@supabase/sentry-js-integration": "^0.2.0", "@types/node": "^22", "@types/react": "^18", "@types/react-dom": "^18", diff --git a/apps/app/sentry.client.config.ts b/apps/app/sentry.client.config.ts deleted file mode 100644 index 18f63c3b..00000000 --- a/apps/app/sentry.client.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; -import { supabaseIntegration } from "@supabase/sentry-js-integration"; -import { createClient } from "@v1/supabase/client"; - -const client = createClient(); - -Sentry.init({ - dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, - tracesSampleRate: 1, - debug: false, - enabled: process.env.NODE_ENV === "production", - integrations: [ - supabaseIntegration(client, Sentry, { - tracing: true, - breadcrumbs: true, - errors: true, - }), - ], -}); diff --git a/apps/app/sentry.edge.config.ts b/apps/app/sentry.edge.config.ts deleted file mode 100644 index e33dc67b..00000000 --- a/apps/app/sentry.edge.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, - enabled: process.env.NODE_ENV === "production", - tracesSampleRate: 1, - debug: false, -}); diff --git a/apps/app/sentry.server.config.ts b/apps/app/sentry.server.config.ts deleted file mode 100644 index 18f63c3b..00000000 --- a/apps/app/sentry.server.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; -import { supabaseIntegration } from "@supabase/sentry-js-integration"; -import { createClient } from "@v1/supabase/client"; - -const client = createClient(); - -Sentry.init({ - dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, - tracesSampleRate: 1, - debug: false, - enabled: process.env.NODE_ENV === "production", - integrations: [ - supabaseIntegration(client, Sentry, { - tracing: true, - breadcrumbs: true, - errors: true, - }), - ], -}); diff --git a/apps/app/src/actions/post/schema.ts b/apps/app/src/actions/post/schema.ts deleted file mode 100644 index beb13d5c..00000000 --- a/apps/app/src/actions/post/schema.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { z } from "zod"; - -export const shareLinkSchema = z.object({ - postId: z.string(), - baseUrl: z.string(), -}); diff --git a/apps/app/src/actions/post/share-link-action.ts b/apps/app/src/actions/post/share-link-action.ts deleted file mode 100644 index ae692a82..00000000 --- a/apps/app/src/actions/post/share-link-action.ts +++ /dev/null @@ -1,18 +0,0 @@ -"use server"; - -import { authActionClient } from "@/actions/safe-action"; -import { dub } from "@/lib/dub"; -import { shareLinkSchema } from "./schema"; - -export const shareLinkAction = authActionClient - .schema(shareLinkSchema) - .metadata({ - name: "share-link", - }) - .action(async ({ parsedInput: { postId, baseUrl } }) => { - const link = await dub.links.create({ - url: `${baseUrl}/post/${postId}`, - }); - - return link?.shortLink; - }); diff --git a/apps/app/src/actions/safe-action.ts b/apps/app/src/actions/safe-action.ts index 7365baf8..f567b1df 100644 --- a/apps/app/src/actions/safe-action.ts +++ b/apps/app/src/actions/safe-action.ts @@ -1,6 +1,3 @@ -import * as Sentry from "@sentry/nextjs"; -import { setupAnalytics } from "@v1/analytics/server"; -import { ratelimit } from "@v1/kv/ratelimit"; import { logger } from "@v1/logger"; import { getUser } from "@v1/supabase/queries"; import { createClient } from "@v1/supabase/server"; @@ -8,8 +5,6 @@ import { DEFAULT_SERVER_ERROR_MESSAGE, createSafeActionClient, } from "next-safe-action"; -import { headers } from "next/headers"; -import { z } from "zod"; const handleServerError = (e: Error) => { console.error("Action error:", e.message); @@ -27,17 +22,6 @@ export const actionClient = createSafeActionClient({ export const actionClientWithMeta = createSafeActionClient({ handleServerError, - defineMetadataSchema() { - return z.object({ - name: z.string(), - track: z - .object({ - event: z.string(), - channel: z.string(), - }) - .optional(), - }); - }, }); export const authActionClient = actionClientWithMeta @@ -54,26 +38,8 @@ export const authActionClient = actionClientWithMeta return result; }) - .use(async ({ next, metadata }) => { - const ip = headers().get("x-forwarded-for"); - - const { success, remaining } = await ratelimit.limit( - `${ip}-${metadata.name}`, - ); - - if (!success) { - throw new Error("Too many requests"); - } - return next({ - ctx: { - ratelimit: { - remaining, - }, - }, - }); - }) - .use(async ({ next, metadata }) => { + .use(async ({ next }) => { const { data: { user }, } = await getUser(); @@ -83,22 +49,10 @@ export const authActionClient = actionClientWithMeta throw new Error("Unauthorized"); } - if (metadata) { - const analytics = await setupAnalytics({ - userId: user.id, - }); - - if (metadata.track) { - analytics.track(metadata.track); - } - } - - return Sentry.withServerActionInstrumentation(metadata.name, async () => { - return next({ - ctx: { - supabase, - user, - }, - }); + return next({ + ctx: { + supabase, + user, + }, }); }); diff --git a/apps/app/src/actions/user/update-post-action.ts b/apps/app/src/actions/user/update-post-action.ts index e3e51c2f..76f7937c 100644 --- a/apps/app/src/actions/user/update-post-action.ts +++ b/apps/app/src/actions/user/update-post-action.ts @@ -6,9 +6,6 @@ import { updateUserSchema } from "./schema"; export const updateUserAction = authActionClient .schema(updateUserSchema) - .metadata({ - name: "update-user", - }) .action(async ({ parsedInput: input, ctx: { user } }) => { const result = await updateUser(user.id, input); diff --git a/apps/app/src/env.mjs b/apps/app/src/env.mjs index 00c22418..b5bf8cc3 100644 --- a/apps/app/src/env.mjs +++ b/apps/app/src/env.mjs @@ -10,29 +10,17 @@ export const env = createEnv({ PORT: z.coerce.number().default(3000), }, server: { - OPENPANEL_SECRET_KEY: z.string(), - RESEND_API_KEY: z.string(), SUPABASE_SERVICE_KEY: z.string(), - UPSTASH_REDIS_REST_TOKEN: z.string(), - UPSTASH_REDIS_REST_URL: z.string(), }, client: { - NEXT_PUBLIC_OPENPANEL_CLIENT_ID: z.string(), NEXT_PUBLIC_SUPABASE_ANON_KEY: z.string(), NEXT_PUBLIC_SUPABASE_URL: z.string(), }, runtimeEnv: { - NEXT_PUBLIC_OPENPANEL_CLIENT_ID: - process.env.NEXT_PUBLIC_OPENPANEL_CLIENT_ID, - NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN, NEXT_PUBLIC_SUPABASE_ANON_KEY: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY, NEXT_PUBLIC_SUPABASE_URL: process.env.NEXT_PUBLIC_SUPABASE_URL, - OPENPANEL_SECRET_KEY: process.env.OPENPANEL_SECRET_KEY, PORT: process.env.PORT, - RESEND_API_KEY: process.env.RESEND_API_KEY, SUPABASE_SERVICE_KEY: process.env.SUPABASE_SERVICE_KEY, - UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN, - UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL, VERCEL_URL: process.env.VERCEL_URL, }, skipValidation: !!process.env.CI || !!process.env.SKIP_ENV_VALIDATION, diff --git a/apps/app/src/lib/dub.ts b/apps/app/src/lib/dub.ts deleted file mode 100644 index 7f329035..00000000 --- a/apps/app/src/lib/dub.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Dub } from "dub"; - -export const dub = new Dub(); diff --git a/apps/app/src/services/.gitkeep b/apps/app/src/services/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/web/.env.example b/apps/web/.env.example index 8de760ef..e69de29b 100644 --- a/apps/web/.env.example +++ b/apps/web/.env.example @@ -1,6 +0,0 @@ -# OpenPanel -NEXT_PUBLIC_OPENPANEL_CLIENT_ID= -OPENPANEL_SECRET_KEY= - -# Cal.com -NEXT_PUBLIC_CAL_LINK= \ No newline at end of file diff --git a/apps/web/package.json b/apps/web/package.json index 3c38cfbd..f1d7eb81 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -12,8 +12,6 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@calcom/embed-react": "^1.5.0", - "@v1/analytics": "workspace:*", "@v1/ui": "workspace:*", "geist": "^1.3.1", "next": "14.2.7", diff --git a/apps/web/src/app/talk-to-us/page.tsx b/apps/web/src/app/talk-to-us/page.tsx deleted file mode 100644 index e25d5c87..00000000 --- a/apps/web/src/app/talk-to-us/page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { CalEmbed } from "@/components/cal-embed"; - -export const metadata = { - title: "Talk to us", -}; - -export default function Page() { - return ( -
-
- -
-
- ); -} diff --git a/apps/web/src/components/cal-embed.tsx b/apps/web/src/components/cal-embed.tsx deleted file mode 100644 index 1425469a..00000000 --- a/apps/web/src/components/cal-embed.tsx +++ /dev/null @@ -1,32 +0,0 @@ -"use client"; - -import Cal, { getCalApi } from "@calcom/embed-react"; -import { useEffect } from "react"; - -export function CalEmbed({ calLink }: { calLink: string }) { - if (!calLink) { - return null; - } - - useEffect(() => { - async function initializeCalendar() { - const cal = await getCalApi(); - - cal("ui", { - styles: { branding: { brandColor: "#000000" } }, - hideEventTypeDetails: false, - layout: "month_view", - }); - } - - initializeCalendar(); - }, []); - - return ( - - ); -} From 05112892e0cc363ab754203825d42aa6858e570d Mon Sep 17 00:00:00 2001 From: Pontus Abrahamsson Date: Sat, 7 Sep 2024 10:27:14 +0200 Subject: [PATCH 2/6] wip --- README.md | 49 +++++++----------- bun.lockb | Bin 303840 -> 236896 bytes services/dub/config.json | 1 + services/dub/src/index.ts | 3 ++ services/dub/src/package.json | 16 ++++++ services/dub/tsconfig.json | 5 ++ services/langbase/config.json | 1 + services/openpanel/config.json | 1 + .../openpanel}/package.json | 2 +- .../openpanel}/src/client.tsx | 0 .../openpanel}/src/server.ts | 0 .../openpanel}/tsconfig.json | 0 services/resend/config.json | 1 + services/trigger/config.json | 1 + services/upstash/config.json | 1 + .../kv => services/upstash}/package.json | 5 +- .../kv => services/upstash}/src/index.ts | 0 .../kv => services/upstash}/src/ratelimit.ts | 2 - .../kv => services/upstash}/tsconfig.json | 0 19 files changed, 52 insertions(+), 36 deletions(-) create mode 100644 services/dub/config.json create mode 100644 services/dub/src/index.ts create mode 100644 services/dub/src/package.json create mode 100644 services/dub/tsconfig.json create mode 100644 services/langbase/config.json create mode 100644 services/openpanel/config.json rename {packages/analytics => services/openpanel}/package.json (94%) rename {packages/analytics => services/openpanel}/src/client.tsx (100%) rename {packages/analytics => services/openpanel}/src/server.ts (100%) rename {packages/analytics => services/openpanel}/tsconfig.json (100%) create mode 100644 services/resend/config.json create mode 100644 services/trigger/config.json create mode 100644 services/upstash/config.json rename {packages/kv => services/upstash}/package.json (82%) rename {packages/kv => services/upstash}/src/index.ts (100%) rename {packages/kv => services/upstash}/src/ratelimit.ts (88%) rename {packages/kv => services/upstash}/tsconfig.json (100%) diff --git a/README.md b/README.md index 350c476a..d0ef3140 100644 --- a/README.md +++ b/README.md @@ -23,23 +23,27 @@ Everything you need to build a production ready SaaS, it's a opinionated stack b [Next.js](https://nextjs.org/) - Framework
[Turborepo](https://turbo.build) - Build system
[Biome](https://biomejs.dev) - Linter, formatter
+[Sherif](https://github.com/QuiiBz/sherif) - Linter for monorepos
[TailwindCSS](https://tailwindcss.com/) - Styling
[Shadcn](https://ui.shadcn.com/) - UI components
[TypeScript](https://www.typescriptlang.org/) - Type safety
[Supabase](https://supabase.com/) - Authentication, database, storage
-[Upstash](https://upstash.com/) - Cache and rate limiting
[React Email](https://react.email/) - Email templates
-[Resend](https://resend.com/) - Email delivery
[i18n](https://next-international.vercel.app/) - Internationalization
-[Sentry](https://sentry.io/) - Error handling/monitoring
[Dub](https://dub.sh/) - Sharable links
-[Trigger.dev](https://trigger.dev/) - Background jobs
-[OpenPanel](https://openpanel.dev/) - Analytics
-[Polar](https://polar.sh) - Billing (coming soon)
[react-safe-action](https://next-safe-action.dev) - Validated Server Actions
[nuqs](https://nuqs.47ng.com/) - Type-safe search params state manager
[next-themes](https://next-themes-example.vercel.app/) - Theme manager
+## Services directory (optional) +[Upstash](https://upstash.com/) - Cache and rate limiting
+[Trigger.dev](https://trigger.dev/) - Background jobs
+[Polar](https://polar.sh) - Billing (coming soon)
+[OpenPanel](https://openpanel.dev/) - Analytics
+[Sentry](https://sentry.io/) - Error handling/monitoring
+[Resend](https://resend.com/) - Email delivery
+ + ## Directory Structure ``` @@ -70,38 +74,17 @@ Everything you need to build a production ready SaaS, it's a opinionated stack b Bun
Docker
-Upstash
-Dub
-Trigger.dev
-Resend
Supabase
-Sentry
-OpenPanel
## Getting Started Clone this repo locally with the following command: ```bash -bunx degit midday-ai/v1 v1 -``` - -1. Install dependencies using bun: - -```sh -bun i -``` - -2. Copy `.env.example` to `.env` and update the variables. - -```sh -# Copy .env.example to .env for each app -cp apps/api/.env.example apps/api/.env -cp apps/app/.env.example apps/app/.env -cp apps/web/.env.example apps/web/.env +bunx v1-run@latest init ``` -4. Start the development server from either bun or turbo: +Start the development server from either bun or turbo: ```ts bun dev // starts everything in development mode (web, app, api, email) @@ -115,6 +98,12 @@ bun migrate // run migrations bun seed // run seed ``` +## Add services + +```bash +bunx v1-run@latest add service +``` + ## How to use This boilerplate is inspired by our work on Midday, and it's designed to serve as a reference for real-world apps. Feel free to dive into the code and see how we've tackled various features. Whether you're looking to understand authentication flows, database interactions, or UI components, you'll find practical, battle-tested implementations throughout the codebase. It's not just a starting point; it's a learning resource that can help you build your own applications. @@ -124,7 +113,7 @@ With this, you have a great starting point for your own project. Vercel deployment will guide you through creating a Supabase account and project. -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fmidday-ai%2Fv1&env=RESEND_API_KEY,UPSTASH_REDIS_REST_URL,UPSTASH_REDIS_REST_TOKEN,SENTRY_AUTH_TOKEN,NEXT_PUBLIC_SENTRY_DSN,SENTRY_ORG,SENTRY_PROJECT,DUB_API_KEY,NEXT_PUBLIC_OPENPANEL_CLIENT_ID,OPENPANEL_SECRET_KEY&project-name=create-v1&repository-name=create-v1&redirect-url=https%3A%2F%2Fv1.run&demo-title=Create%20v1&demo-description=An%20open-source%20starter%20kit%20based%20on%20Midday.&demo-url=https%3A%2F%2Fv1.run&demo-image=https%3A%2F%2Fv1.run%2Fopengraph-image.png&integration-ids=oac_VqOgBHqhEoFTPzGkPd7L0iH6) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fmidday-ai%2Fv1&project-name=create-v1&repository-name=create-v1&redirect-url=https%3A%2F%2Fv1.run&demo-title=Create%20v1&demo-description=An%20open-source%20starter%20kit%20based%20on%20Midday.&demo-url=https%3A%2F%2Fv1.run&demo-image=https%3A%2F%2Fv1.run%2Fopengraph-image.png&integration-ids=oac_VqOgBHqhEoFTPzGkPd7L0iH6) ## Recognition diff --git a/bun.lockb b/bun.lockb index de96de7468d5a75aca218af7830ca8508e4aa2e4..a21d532cde4ce349d3f3f84031887eb817da24ec 100755 GIT binary patch delta 44046 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 delta 86114 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 F{|}!4HLm~w diff --git a/services/dub/config.json b/services/dub/config.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/services/dub/config.json @@ -0,0 +1 @@ +{} diff --git a/services/dub/src/index.ts b/services/dub/src/index.ts new file mode 100644 index 00000000..7f329035 --- /dev/null +++ b/services/dub/src/index.ts @@ -0,0 +1,3 @@ +import { Dub } from "dub"; + +export const dub = new Dub(); diff --git a/services/dub/src/package.json b/services/dub/src/package.json new file mode 100644 index 00000000..20a7cf08 --- /dev/null +++ b/services/dub/src/package.json @@ -0,0 +1,16 @@ +{ + "name": "@v1/dub", + "version": "1.0.0", + "main": "src/index.ts", + "private": true, + "sideEffects": false, + "scripts": { + "clean": "rm -rf .turbo node_modules", + "lint": "biome check .", + "format": "biome --write .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "dub": "^0.36.5" + } +} diff --git a/services/dub/tsconfig.json b/services/dub/tsconfig.json new file mode 100644 index 00000000..90ab8a6b --- /dev/null +++ b/services/dub/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@v1/typescript/base.json", + "include": ["src", "."], + "exclude": ["node_modules"] +} diff --git a/services/langbase/config.json b/services/langbase/config.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/services/langbase/config.json @@ -0,0 +1 @@ +{} diff --git a/services/openpanel/config.json b/services/openpanel/config.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/services/openpanel/config.json @@ -0,0 +1 @@ +{} diff --git a/packages/analytics/package.json b/services/openpanel/package.json similarity index 94% rename from packages/analytics/package.json rename to services/openpanel/package.json index 25d31db5..fce3c05a 100644 --- a/packages/analytics/package.json +++ b/services/openpanel/package.json @@ -1,5 +1,5 @@ { - "name": "@v1/analytics", + "name": "@v1/openpanel", "version": "1.0.0", "main": "src/index.ts", "private": true, diff --git a/packages/analytics/src/client.tsx b/services/openpanel/src/client.tsx similarity index 100% rename from packages/analytics/src/client.tsx rename to services/openpanel/src/client.tsx diff --git a/packages/analytics/src/server.ts b/services/openpanel/src/server.ts similarity index 100% rename from packages/analytics/src/server.ts rename to services/openpanel/src/server.ts diff --git a/packages/analytics/tsconfig.json b/services/openpanel/tsconfig.json similarity index 100% rename from packages/analytics/tsconfig.json rename to services/openpanel/tsconfig.json diff --git a/services/resend/config.json b/services/resend/config.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/services/resend/config.json @@ -0,0 +1 @@ +{} diff --git a/services/trigger/config.json b/services/trigger/config.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/services/trigger/config.json @@ -0,0 +1 @@ +{} diff --git a/services/upstash/config.json b/services/upstash/config.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/services/upstash/config.json @@ -0,0 +1 @@ +{} diff --git a/packages/kv/package.json b/services/upstash/package.json similarity index 82% rename from packages/kv/package.json rename to services/upstash/package.json index bd4a4c9a..5d6e9638 100644 --- a/packages/kv/package.json +++ b/services/upstash/package.json @@ -1,5 +1,5 @@ { - "name": "@v1/kv", + "name": "@v1/upstash", "version": "1.0.0", "private": true, "main": "src/index.ts", @@ -15,7 +15,6 @@ }, "dependencies": { "@upstash/ratelimit": "^2.0.2", - "@upstash/redis": "^1.34.0", - "server-only": "^0.0.1" + "@upstash/redis": "^1.34.0" } } diff --git a/packages/kv/src/index.ts b/services/upstash/src/index.ts similarity index 100% rename from packages/kv/src/index.ts rename to services/upstash/src/index.ts diff --git a/packages/kv/src/ratelimit.ts b/services/upstash/src/ratelimit.ts similarity index 88% rename from packages/kv/src/ratelimit.ts rename to services/upstash/src/ratelimit.ts index cdbe6df7..efb37c61 100644 --- a/packages/kv/src/ratelimit.ts +++ b/services/upstash/src/ratelimit.ts @@ -1,5 +1,3 @@ -import "server-only"; - import { Ratelimit } from "@upstash/ratelimit"; import { client } from "."; diff --git a/packages/kv/tsconfig.json b/services/upstash/tsconfig.json similarity index 100% rename from packages/kv/tsconfig.json rename to services/upstash/tsconfig.json From ee1445fa50a141e520eba6fa428788d4040f8198 Mon Sep 17 00:00:00 2001 From: Pontus Abrahamsson Date: Sat, 7 Sep 2024 10:49:47 +0200 Subject: [PATCH 3/6] wip --- apps/app/next.config.mjs | 13 +------------ apps/app/src/instrumentation.ts | 9 --------- apps/web/src/app/layout.tsx | 3 --- bun.lockb | Bin 236896 -> 242536 bytes package.json | 2 +- services/cal/config.json | 6 ++++++ services/cal/package.json | 16 ++++++++++++++++ services/cal/src/example/index.tsx | 0 services/cal/tsconfig.json | 12 ++++++++++++ services/dub/config.json | 7 ++++++- services/dub/{src => }/package.json | 0 services/langbase/config.json | 1 - services/openpanel/config.json | 4 +++- services/resend/config.json | 4 +++- services/resend/package.json | 15 +++++++++++++++ services/resend/src/index.ts | 0 .../jobs => services/resend}/tsconfig.json | 0 services/trigger/config.json | 4 +++- .../jobs => services/trigger}/package.json | 2 +- .../trigger/src/action.ts | 2 +- .../trigger/src}/example.ts | 0 .../trigger}/trigger.config.ts | 0 services/trigger/tsconfig.json | 5 +++++ services/upstash/config.json | 4 +++- 24 files changed, 76 insertions(+), 33 deletions(-) delete mode 100644 apps/app/src/instrumentation.ts create mode 100644 services/cal/config.json create mode 100644 services/cal/package.json create mode 100644 services/cal/src/example/index.tsx create mode 100644 services/cal/tsconfig.json rename services/dub/{src => }/package.json (100%) delete mode 100644 services/langbase/config.json create mode 100644 services/resend/package.json create mode 100644 services/resend/src/index.ts rename {packages/jobs => services/resend}/tsconfig.json (100%) rename {packages/jobs => services/trigger}/package.json (92%) rename apps/app/src/app/api/actions.ts => services/trigger/src/action.ts (84%) rename {packages/jobs/trigger => services/trigger/src}/example.ts (100%) rename {packages/jobs => services/trigger}/trigger.config.ts (100%) create mode 100644 services/trigger/tsconfig.json diff --git a/apps/app/next.config.mjs b/apps/app/next.config.mjs index 15854529..45a5aa0b 100644 --- a/apps/app/next.config.mjs +++ b/apps/app/next.config.mjs @@ -1,19 +1,8 @@ import "./src/env.mjs"; -import { withSentryConfig } from "@sentry/nextjs"; /** @type {import('next').NextConfig} */ const nextConfig = { transpilePackages: ["@v1/supabase"], - experimental: { - instrumentationHook: process.env.NODE_ENV === "production", - }, }; -export default withSentryConfig(nextConfig, { - silent: !process.env.CI, - telemetry: false, - widenClientFileUpload: true, - hideSourceMaps: true, - disableLogger: true, - tunnelRoute: "/monitoring", -}); +export default nextConfig; diff --git a/apps/app/src/instrumentation.ts b/apps/app/src/instrumentation.ts deleted file mode 100644 index 10aaacea..00000000 --- a/apps/app/src/instrumentation.ts +++ /dev/null @@ -1,9 +0,0 @@ -export async function register() { - if (process.env.NEXT_RUNTIME === "nodejs") { - await import("../sentry.server.config"); - } - - if (process.env.NEXT_RUNTIME === "edge") { - await import("../sentry.edge.config"); - } -} diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index afa8bf35..94e149e2 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -1,7 +1,6 @@ import "@v1/ui/globals.css"; import { Footer } from "@/components/footer"; import { Header } from "@/components/header"; -import { Provider as AnalyticsProvider } from "@v1/analytics/client"; import { cn } from "@v1/ui/cn"; import { GeistMono } from "geist/font/mono"; import { GeistSans } from "geist/font/sans"; @@ -36,8 +35,6 @@ export default function RootLayout({
{children}