From ff31b2f9cab8a4a72ede86a0eb915883442a8bb7 Mon Sep 17 00:00:00 2001 From: ConnorYoh <40631091+ConnorYoh@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:13:09 +0000 Subject: [PATCH] Posthog-fixes (#5901) PostHog is now initialized with persistence: 'memory' so no cookies are written on first load. Consent is handled in a PostHogConsentSync component that switches to localStorage+cookie persistence only when the user accepts, using the official @posthog/react package (cherry-picked from 14aaf64) --------- Co-authored-by: James Brunton --- frontend/package-lock.json | 17 +++++++++++++++++ frontend/package.json | 1 + frontend/src/global.d.ts | 12 ------------ frontend/src/index.tsx | 11 ++++++----- frontend/tsconfig.core.json | 5 +---- frontend/tsconfig.desktop.json | 5 +---- frontend/tsconfig.proprietary.json | 5 +---- 7 files changed, 27 insertions(+), 29 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 02a124429a..7607a40def 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -44,6 +44,7 @@ "@mantine/hooks": "^8.3.1", "@mui/icons-material": "^7.3.2", "@mui/material": "^7.3.2", + "@posthog/react": "^1.8.2", "@reactour/tour": "^3.8.0", "@stripe/react-stripe-js": "^4.0.2", "@stripe/stripe-js": "^7.9.0", @@ -2871,6 +2872,22 @@ "cross-spawn": "^7.0.6" } }, + "node_modules/@posthog/react": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@posthog/react/-/react-1.8.2.tgz", + "integrity": "sha512-KzUuXIcAR8fAjU7IeDq+XfEcUTNvzgEGB381WRrFUUsu7jFTcKZZ6crx/ukHRCzTnoEuy5EJDkL7b7sJecPlCg==", + "license": "MIT", + "peerDependencies": { + "@types/react": ">=16.8.0", + "posthog-js": ">=1.257.2", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@posthog/types": { "version": "1.354.0", "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.354.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 9221e4706e..db2ec9f9f5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -61,6 +61,7 @@ "license-report": "^6.8.0", "pdfjs-dist": "^5.4.149", "peerjs": "^1.5.5", + "@posthog/react": "^1.8.2", "posthog-js": "^1.268.0", "qrcode.react": "^4.2.0", "react": "^19.1.1", diff --git a/frontend/src/global.d.ts b/frontend/src/global.d.ts index 37551f78a3..c09d1b3a9b 100644 --- a/frontend/src/global.d.ts +++ b/frontend/src/global.d.ts @@ -26,16 +26,4 @@ declare module 'axios' { } } -declare module 'posthog-js/react' { - import { ReactNode } from 'react'; - import posthogJs, { PostHogConfig } from 'posthog-js'; - - export const PostHogProvider: React.FC<{ - client?: typeof posthogJs; - options?: Partial; - apiKey?: string; - children?: ReactNode; - }>; -} - export { }; diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index e1eef3e3f5..c610427863 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -9,7 +9,7 @@ import { BrowserRouter } from 'react-router-dom'; import App from '@app/App'; import '@app/i18n'; // Initialize i18next import posthog from 'posthog-js'; -import { PostHogProvider } from 'posthog-js/react'; +import { PostHogProvider } from '@posthog/react'; import { BASE_PATH } from '@app/constants/app'; posthog.init('phc_VOdeYnlevc2T63m3myFGjeBlRcIusRgmhfx6XL5a1iz', { @@ -18,18 +18,19 @@ posthog.init('phc_VOdeYnlevc2T63m3myFGjeBlRcIusRgmhfx6XL5a1iz', { capture_exceptions: true, // This enables capturing exceptions using Error Tracking, set to false if you don't want this debug: false, opt_out_capturing_by_default: true, // Opt-out by default, controlled by cookie consent + persistence: 'memory', // No cookies/localStorage written until user opts in cross_subdomain_cookie: false, }); -function updatePosthogConsent(){ - if(typeof(posthog) == "undefined" || !posthog.__loaded) { - return; - } +function updatePosthogConsent() { + if (!posthog.__loaded) return; const optIn = (window.CookieConsent as any)?.acceptedService?.('posthog', 'analytics') || false; if (optIn) { + posthog.set_config({ persistence: 'localStorage+cookie' }); posthog.opt_in_capturing(); } else { posthog.opt_out_capturing(); + posthog.set_config({ persistence: 'memory' }); } console.log("Updated PostHog consent: ", optIn ? "opted in" : "opted out"); } diff --git a/frontend/tsconfig.core.json b/frontend/tsconfig.core.json index 5136effcff..8574561a09 100644 --- a/frontend/tsconfig.core.json +++ b/frontend/tsconfig.core.json @@ -10,9 +10,6 @@ ], "@proprietary/*": [ "src/core/*" - ], - "posthog-js/react": [ - "node_modules/posthog-js/react/dist/types/index.d.ts" ] } }, @@ -23,4 +20,4 @@ "src/*.tsx", "src/core" ] -} \ No newline at end of file +} diff --git a/frontend/tsconfig.desktop.json b/frontend/tsconfig.desktop.json index 2e7f5c768f..1d952b528a 100644 --- a/frontend/tsconfig.desktop.json +++ b/frontend/tsconfig.desktop.json @@ -12,9 +12,6 @@ ], "@core/*": [ "src/core/*" - ], - "posthog-js/react": [ - "node_modules/posthog-js/react/dist/types/index.d.ts" ] } }, @@ -26,4 +23,4 @@ "src/core/setupTests.ts", "src/desktop" ] -} \ No newline at end of file +} diff --git a/frontend/tsconfig.proprietary.json b/frontend/tsconfig.proprietary.json index 155b8b7fd9..45c1347f4a 100644 --- a/frontend/tsconfig.proprietary.json +++ b/frontend/tsconfig.proprietary.json @@ -11,9 +11,6 @@ ], "@proprietary/*": [ "src/proprietary/*" - ], - "posthog-js/react": [ - "node_modules/posthog-js/react/dist/types/index.d.ts" ] } }, @@ -25,4 +22,4 @@ "src/core/setupTests.ts", "src/proprietary" ] -} \ No newline at end of file +}