From 5804a9c4889d003a8184d7b135e598f265a94a93 Mon Sep 17 00:00:00 2001 From: Gerard Clos Date: Thu, 19 Sep 2024 12:41:53 +0200 Subject: [PATCH] feature: add posthog --- apps/infra/Pulumi.core.yaml | 2 + apps/infra/src/core/secrets.ts | 5 ++ apps/infra/src/deployments/shared.ts | 5 ++ apps/web/env.example | 2 - apps/web/package.json | 11 ++-- apps/web/src/app/(private)/layout.tsx | 18 ++++--- apps/web/src/app/providers.tsx | 17 ++++++ apps/web/src/env.ts | 2 +- apps/web/src/envClient.ts | 13 +++++ packages/env/src/index.ts | 2 +- pnpm-lock.yaml | 77 ++++++++++++++++++--------- 11 files changed, 113 insertions(+), 41 deletions(-) delete mode 100644 apps/web/env.example create mode 100644 apps/web/src/app/providers.tsx create mode 100644 apps/web/src/envClient.ts diff --git a/apps/infra/Pulumi.core.yaml b/apps/infra/Pulumi.core.yaml index 6443836ee..64e822af2 100644 --- a/apps/infra/Pulumi.core.yaml +++ b/apps/infra/Pulumi.core.yaml @@ -14,6 +14,8 @@ config: secure: v1:/+DMPM/zWsNsNHDg:JIlxC1v0ocfdfX1TsDXXTZClL8Uza74CMq5YSst7Ymu+CPulRNgUejrSQEFVW3F6BkXMA1QU3s4= infra:MAILER_API_KEY: secure: v1:Br02wGwX0UOAZiNp:wIzQFfWCzWygBRCVJNDs/ZP65EXEAIFhduPOOniN6EOeXPyJ4UHjOefPyO2bhOBkR5E3CWLmQBsVjIGrGwAHZYZCQg== + infra:NEXT_PUBLIC_POSTHOG_KEY: + secure: v1:cI6gi7pKYG9cQJDk:FYV6+v87vWFw+ikVdYQNqr3vY4vWpsB4D1YG5u1GowcTW7yrxOSa12HXPsWRkw8IIFEhqpXiaG00AF/G2pYm infra:SENTRY_DSN: secure: v1:TFAocHKQe31DxpAX:8+iplSLckN3i91KshS+8mab3s158nFkNyWD8JBZM8Ojtu2zstpna5N50ugkXuH9hdcuUv4db088pI9Dkvuc/84OJDEm47z/0bJgD803f4ZWqVtA7Yt8Z2pyTSGqGzsj9RErstG0N infra:SENTRY_ORG: diff --git a/apps/infra/src/core/secrets.ts b/apps/infra/src/core/secrets.ts index 2cfcbc212..905b5a4ca 100644 --- a/apps/infra/src/core/secrets.ts +++ b/apps/infra/src/core/secrets.ts @@ -66,6 +66,10 @@ const defaultProviderApiKey = createSecretWithVersion( 'DEFAULT_PROVIDER_API_KEY', 'Default provider API key', ) +const postHogApiKey = createSecretWithVersion( + 'NEXT_PUBLIC_POSTHOG_KEY', + 'Posthog API Key for product analytics', +) export const mailerApiKeyArn = mailerApiKey.arn export const sentryDsnArn = sentryDsn.arn @@ -78,3 +82,4 @@ export const websocketsSecretRefreshTokenArn = websocketsSecretRefreshToken.arn export const workersWebsocketsSecretTokenArn = workersWebsocketsSecretToken.arn export const defaultProjectIdArn = defaultProjectId.arn export const defaultProviderApiKeyArn = defaultProviderApiKey.arn +export const postHogApiKeyArn = postHogApiKey.arn diff --git a/apps/infra/src/deployments/shared.ts b/apps/infra/src/deployments/shared.ts index 2461d29e1..dbe813b1e 100644 --- a/apps/infra/src/deployments/shared.ts +++ b/apps/infra/src/deployments/shared.ts @@ -29,6 +29,7 @@ const defaultProjectIdArn = coreStack.requireOutput('defaultProjectIdArn') const defaultProviderApiKeyArn = coreStack.requireOutput( 'defaultProviderApiKeyArn', ) +const postHogApiKeyArn = coreStack.requireOutput('postHogApiKeyArn') const getSecretString = (arn: pulumi.Output) => { return arn.apply((secretId) => @@ -52,6 +53,7 @@ const workersWebsocketsSecretToken = getSecretString( workersWebsocketsSecretTokenArn, ) const defaultProjectId = getSecretString(defaultProjectIdArn) +const postHogApiKey = getSecretString(postHogApiKeyArn) export const sentryDsn = getSecretString(sentryDsnArn) export const sentryOrg = getSecretString(sentryOrgArn) @@ -72,6 +74,7 @@ export const environment = pulumi sentryProject, defaultProjectId, defaultProviderApiKey, + postHogApiKey, ]) .apply(() => { return [ @@ -110,5 +113,7 @@ export const environment = pulumi { name: 'AWS_ACCESS_SECRET', value: awsAccessSecret }, { name: 'DEFAULT_PROJECT_ID', value: defaultProjectId }, { name: 'DEFAULT_PROVIDER_API_KEY', value: defaultProviderApiKey }, + { name: 'NEXT_PUBLIC_POSTHOG_KEY', value: postHogApiKey }, + { name: 'NEXT_PUBLIC_POSTHOG_HOST', value: 'https://eu.i.posthog.com' }, ] }) diff --git a/apps/web/env.example b/apps/web/env.example deleted file mode 100644 index ff63aa2ee..000000000 --- a/apps/web/env.example +++ /dev/null @@ -1,2 +0,0 @@ -HOST='0.0.0.0' -PORT=3000 diff --git a/apps/web/package.json b/apps/web/package.json index e596453f6..759d80be2 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -15,7 +15,6 @@ "test:watch": "vitest" }, "dependencies": { - "yaml": "^2.4.5", "@latitude-data/compiler": "workspace:^", "@latitude-data/core": "workspace:*", "@latitude-data/env": "workspace:^", @@ -43,11 +42,13 @@ "next-themes": "^0.3.0", "nextjs-toploader": "^1.6.12", "nprogress": "^0.2.0", + "posthog-js": "^1.161.6", "react": "19.0.0-rc-f994737d14-20240522", "react-dom": "19.0.0-rc-f994737d14-20240522", "socket.io-react-hook": "^2.4.5", "swr": "^2.2.5", "use-debounce": "^10.0.1", + "yaml": "^2.4.5", "zod": "^3.23.8", "zsa": "^0.5.1", "zsa-react": "^0.2.2" @@ -57,6 +58,9 @@ "@latitude-data/eslint-config": "workspace:*", "@latitude-data/typescript-config": "workspace:*", "@next/eslint-plugin-next": "^14.2.4", + "@testing-library/dom": "^10.3.2", + "@testing-library/react": "^16.0.0", + "@testing-library/react-hooks": "^8.0.1", "@types/js-cookie": "^3.0.6", "@types/lodash-es": "^4.17.12", "@types/node": "^20.14.10", @@ -68,10 +72,7 @@ "node-mocks-http": "^1.15.0", "postcss": "^8.4.39", "tailwindcss": "^3.4.4", - "vitest": "^2.0.3", - "@testing-library/dom": "^10.3.2", - "@testing-library/react": "^16.0.0", - "@testing-library/react-hooks": "^8.0.1" + "vitest": "^2.0.3" }, "optionalDependencies": { "svelte": "^4.2.19", diff --git a/apps/web/src/app/(private)/layout.tsx b/apps/web/src/app/(private)/layout.tsx index 377ad096b..057817fc8 100644 --- a/apps/web/src/app/(private)/layout.tsx +++ b/apps/web/src/app/(private)/layout.tsx @@ -11,6 +11,8 @@ import { getSession } from '$/services/auth/getSession' import { ROUTES } from '$/services/routes' import { redirect } from 'next/navigation' +import { CSPostHogProvider } from '../providers' + export default async function PrivateLayout({ children, }: Readonly<{ @@ -22,12 +24,14 @@ export default async function PrivateLayout({ const { workspace, user } = await getCurrentUser() return ( - - - - {children} - - - + + + + + {children} + + + + ) } diff --git a/apps/web/src/app/providers.tsx b/apps/web/src/app/providers.tsx new file mode 100644 index 000000000..1058909d1 --- /dev/null +++ b/apps/web/src/app/providers.tsx @@ -0,0 +1,17 @@ +'use client' + +import { ReactNode } from 'react' + +import { envClient } from '$/envClient' +import posthog from 'posthog-js' +import { PostHogProvider } from 'posthog-js/react' + +if (typeof window !== 'undefined') { + posthog.init(envClient.NEXT_PUBLIC_POSTHOG_KEY, { + api_host: envClient.NEXT_PUBLIC_POSTHOG_HOST, + person_profiles: 'identified_only', // or 'always' to create profiles for anonymous users as well + }) +} +export function CSPostHogProvider({ children }: { children: ReactNode }) { + return {children} +} diff --git a/apps/web/src/env.ts b/apps/web/src/env.ts index 6888f6ea3..7f7b6bb79 100644 --- a/apps/web/src/env.ts +++ b/apps/web/src/env.ts @@ -10,8 +10,8 @@ export default createEnv({ NODE_ENV: z.string(), DATABASE_URL: z.string(), GATEWAY_HOSTNAME: z.string(), - GATEWAY_PORT: z.coerce.number().optional(), WEBSOCKETS_SERVER: z.string(), + GATEWAY_PORT: z.coerce.number().optional(), GATEWAY_SSL: z .enum(['true', 'false']) .transform((value) => value === 'true') diff --git a/apps/web/src/envClient.ts b/apps/web/src/envClient.ts new file mode 100644 index 000000000..71c97dfd8 --- /dev/null +++ b/apps/web/src/envClient.ts @@ -0,0 +1,13 @@ +import { createEnv } from '@t3-oss/env-nextjs' +import { z } from 'zod' + +export const envClient = createEnv({ + client: { + NEXT_PUBLIC_POSTHOG_KEY: z.string(), + NEXT_PUBLIC_POSTHOG_HOST: z.string(), + }, + runtimeEnv: { + NEXT_PUBLIC_POSTHOG_KEY: process.env.NEXT_PUBLIC_POSTHOG_KEY, + NEXT_PUBLIC_POSTHOG_HOST: process.env.NEXT_PUBLIC_POSTHOG_HOST, + }, +}) diff --git a/packages/env/src/index.ts b/packages/env/src/index.ts index 637060ce7..a4bb8f0b6 100644 --- a/packages/env/src/index.ts +++ b/packages/env/src/index.ts @@ -65,6 +65,7 @@ export const env = createEnv({ WEBSOCKET_REFRESH_SECRET_TOKEN_KEY: z.string(), WEBSOCKET_SECRET_TOKEN_KEY: z.string(), WORKERS_WEBSOCKET_SECRET_TOKEN: z.string(), + DEFAULT_PROVIDER_ID: z.string(), AWS_ACCESS_KEY: z.string().optional(), AWS_ACCESS_SECRET: z.string().optional(), AWS_REGION: z.string().optional(), @@ -79,7 +80,6 @@ export const env = createEnv({ SENTRY_DSN: z.string().optional(), SENTRY_ORG: z.string().optional(), SENTRY_PROJECT: z.string().optional(), - DEFAULT_PROVIDER_ID: z.string(), }, runtimeEnv: { ...process.env, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7c796a939..7a2cac2d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -326,7 +326,7 @@ importers: version: 4.6.0(monaco-editor@0.50.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) '@sentry/nextjs': specifier: ^8 - version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522)(webpack@5.94.0) + version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522)(webpack@5.94.0(esbuild@0.19.12)) '@sentry/utils': specifier: ^8.30.0 version: 8.30.0 @@ -368,16 +368,19 @@ importers: version: 5.0.7 next: specifier: ^14.3.0-canary.87 - version: 14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) + version: 14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) nextjs-toploader: specifier: ^1.6.12 - version: 1.6.12(next@14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) + version: 1.6.12(next@14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) nprogress: specifier: ^0.2.0 version: 0.2.0 + posthog-js: + specifier: ^1.161.6 + version: 1.161.6 react: specifier: 19.0.0-rc-f994737d14-20240522 version: 19.0.0-rc-f994737d14-20240522 @@ -2399,9 +2402,6 @@ packages: peerDependencies: drizzle-orm: '>= 0.29 <1' lucia: 3.x - peerDependenciesMeta: - drizzle-orm: - optional: true '@lukeed/ms@2.0.2': resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} @@ -6238,6 +6238,9 @@ packages: picomatch: optional: true + fflate@0.4.8: + resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -7874,6 +7877,12 @@ packages: postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + posthog-js@1.161.6: + resolution: {integrity: sha512-UO0z/YTuan55Kl5Yg9Xs5x1PKUkm2zGKUNPioznb4GLRcxFnLBkWoeKQXNro2YZsYJvK+MY8jlF3cdGa8BZ8/Q==} + + preact@10.24.0: + resolution: {integrity: sha512-aK8Cf+jkfyuZ0ZZRG9FbYqwmEiGQ4y/PUO4SuTWoyWL244nZZh7bd5h2APd4rSNDYTBNghg1L+5iJN3Skxtbsw==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -9194,6 +9203,9 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-vitals@4.2.3: + resolution: {integrity: sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -10891,9 +10903,8 @@ snapshots: '@lucia-auth/adapter-drizzle@1.1.0(drizzle-orm@0.33.0(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@18.3.0)(pg@8.12.0)(react@19.0.0-rc-f994737d14-20240522))(lucia@3.2.0)': dependencies: - lucia: 3.2.0 - optionalDependencies: drizzle-orm: 0.33.0(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@18.3.0)(pg@8.12.0)(react@19.0.0-rc-f994737d14-20240522) + lucia: 3.2.0 '@lukeed/ms@2.0.2': {} @@ -12839,7 +12850,7 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522)(webpack@5.94.0)': + '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522)(webpack@5.94.0(esbuild@0.19.12))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -12851,14 +12862,14 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 '@sentry/vercel-edge': 8.30.0 - '@sentry/webpack-plugin': 2.22.3(encoding@0.1.13)(webpack@5.94.0) + '@sentry/webpack-plugin': 2.22.3(encoding@0.1.13)(webpack@5.94.0(esbuild@0.19.12)) chalk: 3.0.0 - next: 14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) + next: 14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) resolve: 1.22.8 rollup: 3.29.4 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.94.0 + webpack: 5.94.0(esbuild@0.19.12) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -12937,12 +12948,12 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/webpack-plugin@2.22.3(encoding@0.1.13)(webpack@5.94.0)': + '@sentry/webpack-plugin@2.22.3(encoding@0.1.13)(webpack@5.94.0(esbuild@0.19.12))': dependencies: '@sentry/bundler-plugin-core': 2.22.3(encoding@0.1.13) unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.94.0 + webpack: 5.94.0(esbuild@0.19.12) transitivePeerDependencies: - encoding - supports-color @@ -13538,7 +13549,7 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.5.5 + '@types/node': 20.16.5 '@types/mysql@2.15.26': dependencies: @@ -15728,6 +15739,8 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fflate@0.4.8: {} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -16360,7 +16373,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.5.5 + '@types/node': 20.16.5 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -16839,7 +16852,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522): + next@14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522): dependencies: '@next/env': 14.3.0-canary.87 '@swc/helpers': 0.5.11 @@ -16849,7 +16862,7 @@ snapshots: postcss: 8.4.31 react: 19.0.0-rc-f994737d14-20240522 react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522) - styled-jsx: 5.1.6(react@19.0.0-rc-f994737d14-20240522) + styled-jsx: 5.1.6(@babel/core@7.25.2)(react@19.0.0-rc-f994737d14-20240522) optionalDependencies: '@next/swc-darwin-arm64': 14.3.0-canary.87 '@next/swc-darwin-x64': 14.3.0-canary.87 @@ -16866,9 +16879,9 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextjs-toploader@1.6.12(next@14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522): + nextjs-toploader@1.6.12(next@14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522))(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522): dependencies: - next: 14.3.0-canary.87(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) + next: 14.3.0-canary.87(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522))(react@19.0.0-rc-f994737d14-20240522) nprogress: 0.2.0 prop-types: 15.8.1 react: 19.0.0-rc-f994737d14-20240522 @@ -17450,6 +17463,14 @@ snapshots: postgres-range@1.1.4: {} + posthog-js@1.161.6: + dependencies: + fflate: 0.4.8 + preact: 10.24.0 + web-vitals: 4.2.3 + + preact@10.24.0: {} + prelude-ls@1.2.1: {} prettier-plugin-packagejson@2.5.2(prettier@3.3.3): @@ -18383,10 +18404,12 @@ snapshots: optionalDependencies: '@babel/core': 7.24.5 - styled-jsx@5.1.6(react@19.0.0-rc-f994737d14-20240522): + styled-jsx@5.1.6(@babel/core@7.25.2)(react@19.0.0-rc-f994737d14-20240522): dependencies: client-only: 0.0.1 react: 19.0.0-rc-f994737d14-20240522 + optionalDependencies: + '@babel/core': 7.25.2 sucrase@3.35.0: dependencies: @@ -18546,14 +18569,16 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - terser-webpack-plugin@5.3.10(webpack@5.94.0): + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.94.0(esbuild@0.19.12)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.32.0 - webpack: 5.94.0 + webpack: 5.94.0(esbuild@0.19.12) + optionalDependencies: + esbuild: 0.19.12 terser@5.32.0: dependencies: @@ -19228,6 +19253,8 @@ snapshots: dependencies: defaults: 1.0.4 + web-vitals@4.2.3: {} + webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {} @@ -19238,7 +19265,7 @@ snapshots: webpack-virtual-modules@0.5.0: {} - webpack@5.94.0: + webpack@5.94.0(esbuild@0.19.12): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -19260,7 +19287,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.94.0) + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.94.0(esbuild@0.19.12)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: