diff --git a/packages/round-manager/.env.test b/packages/round-manager/.env.test index ea61df1c5..667987a9e 100644 --- a/packages/round-manager/.env.test +++ b/packages/round-manager/.env.test @@ -4,4 +4,6 @@ REACT_APP_PINATA_BASE_URL=http://localhost REACT_APP_PASSPORT_API_KEY="test-key" REACT_APP_PASSPORT_AVALANCHE_API_KEY="test-key" REACT_APP_PASSPORT_API_COMMUNITY_ID="0000" -REACT_APP_PASSPORT_API_COMMUNITY_ID_AVALANCHE="0000" \ No newline at end of file +REACT_APP_PASSPORT_API_COMMUNITY_ID_AVALANCHE="0000" +REACT_APP_POSTHOG_KEY="" +REACT_APP_POSTHOG_HOST="" \ No newline at end of file diff --git a/packages/round-manager/package.json b/packages/round-manager/package.json index 51bf9a576..76a5ee63b 100644 --- a/packages/round-manager/package.json +++ b/packages/round-manager/package.json @@ -72,6 +72,7 @@ "moment": "^2.29.3", "os-browserify": "^0.3.0", "papaparse": "^5.4.1", + "posthog-js": "^1.138.1", "process": "^0.11.10", "react": "^18.1.0", "react-datetime": "^3.1.1", diff --git a/packages/round-manager/src/index.tsx b/packages/round-manager/src/index.tsx index 6f1c4e245..3e85826a0 100644 --- a/packages/round-manager/src/index.tsx +++ b/packages/round-manager/src/index.tsx @@ -7,7 +7,7 @@ import { HashRouter, Route, Routes } from "react-router-dom"; import { WagmiConfig } from "wagmi"; import { initDatadog } from "./datadog"; import { initTagmanager } from "./tagmanager"; - +import { PostHogProvider } from "posthog-js/react"; import { chains, client as WagmiClient } from "./app/wagmi"; import reportWebVitals from "./reportWebVitals"; @@ -35,6 +35,7 @@ import { UpdateRolesProvider } from "./context/round/UpdateRolesContext"; import AlloWrapper from "./features/api/AlloWrapper"; import { DataLayer, DataLayerProvider } from "data-layer"; import { getConfig } from "common/src/config"; +import { initPosthog } from "./posthog"; // Initialize sentry initSentry(); @@ -45,6 +46,9 @@ initDatadog(); // Initialize tagmanager initTagmanager(); +// Initialize PostHog +const posthog = initPosthog(); + const root = ReactDOM.createRoot( document.getElementById("root") as HTMLElement ); @@ -63,89 +67,91 @@ const dataLayerConfig = new DataLayer({ root.render( - - - - - - - {/* Protected Routes */} - }> - {/* Default Route */} - - - - } - /> - - {/* Round Routes */} - - - - } - /> - - - - - - - - - - - - - - - - } - /> - - - - - - } - /> + + + + + + + + {/* Protected Routes */} + }> + {/* Default Route */} + + + + } + /> - {/* Program Routes */} - } /> - + {/* Round Routes */} + - + - - } - /> + } + /> + + + + + + + + + + + + + + + + } + /> + + + + + + } + /> + + {/* Program Routes */} + } /> + + + + + + } + /> - {/* Access Denied */} - } /> + {/* Access Denied */} + } /> - {/* 404 */} - } /> - - - - - - - + {/* 404 */} + } /> + + + + + + + + ); diff --git a/packages/round-manager/src/posthog.ts b/packages/round-manager/src/posthog.ts new file mode 100644 index 000000000..3cd6255d3 --- /dev/null +++ b/packages/round-manager/src/posthog.ts @@ -0,0 +1,21 @@ +import posthog from "posthog-js"; + +export const initPosthog = () => { + console.log("Initializing Posthog"); + if (process.env.REACT_APP_POSTHOG_KEY && process.env.REACT_APP_POSTHOG_HOST) { + posthog.init(process.env.REACT_APP_POSTHOG_KEY, { + api_host: process.env.REACT_APP_POSTHOG_HOST, + session_recording: { + maskTextSelector: '[data-testid="rk-account-button"]', + }, + }); + + console.log("Posthog initialized"); + + return posthog; + } + + console.log("Posthog not initialized"); + + return undefined; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f03c4bb4..29c27d549 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1095,6 +1095,9 @@ importers: papaparse: specifier: ^5.4.1 version: 5.4.1 + posthog-js: + specifier: ^1.138.1 + version: 1.138.1 process: specifier: ^0.11.10 version: 0.11.10 @@ -1523,6 +1526,10 @@ packages: resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils@7.24.7: + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + engines: {node: '>=6.9.0'} + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} @@ -1804,6 +1811,15 @@ packages: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.5 + /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} @@ -4247,7 +4263,7 @@ packages: cosmiconfig-typescript-loader: 1.0.9(@types/node@17.0.45)(typescript@5.4.5) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(react@18.3.1)(typescript@5.4.5) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.23.4)(@rspack/core@0.5.7)(esbuild@0.18.20)(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2)(typescript@5.4.5) semver: 7.6.2 webpack-merge: 5.10.0 transitivePeerDependencies: @@ -4256,7 +4272,6 @@ packages: - '@types/node' - postcss - typescript - dev: false /@craco/craco@7.1.0(@types/node@17.0.45)(postcss@8.4.38)(typescript@5.4.5): resolution: {integrity: sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==} @@ -4270,6 +4285,7 @@ packages: cosmiconfig-typescript-loader: 1.0.9(@types/node@17.0.45)(typescript@5.4.5) cross-spawn: 7.0.3 lodash: 4.17.21 + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.23.4)(@rspack/core@0.5.7)(esbuild@0.18.20)(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2)(typescript@5.4.5) semver: 7.6.2 webpack-merge: 5.10.0 transitivePeerDependencies: @@ -4278,7 +4294,6 @@ packages: - '@types/node' - postcss - typescript - dev: false /@craco/craco@7.1.0(@types/node@18.19.33)(postcss@8.4.38)(react-scripts@5.0.1)(typescript@5.4.5): resolution: {integrity: sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==} @@ -4301,6 +4316,7 @@ packages: - '@types/node' - postcss - typescript + dev: false /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -13808,7 +13824,6 @@ packages: transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - dev: false /cosmiconfig-typescript-loader@1.0.9(@types/node@18.19.33)(typescript@5.4.5): resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==} @@ -13824,6 +13839,7 @@ packages: transitivePeerDependencies: - '@swc/core' - '@swc/wasm' + dev: false /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.4.5): resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} @@ -13875,31 +13891,16 @@ packages: path-type: 4.0.0 typescript: 5.4.5 - /craco-esbuild@0.5.2(@craco/craco@7.1.0): - resolution: {integrity: sha512-5NCHz2gFT8MkVo36t22KOBL53JvDrw8R2PHmGxxfaTa8LFZNKmvOI6e8zCzPdY9LeKMdF3svBjMVyXG53pGO1Q==} - peerDependencies: - '@craco/craco': ^6.0.0 || ^7.0.0 || ^7.0.0-alpha - react-scripts: ^5.0.0 - dependencies: - '@craco/craco': 7.1.0(@types/node@17.0.45)(postcss@8.4.38)(typescript@5.4.5) - esbuild-jest: 0.5.0 - esbuild-loader: 2.21.0 - transitivePeerDependencies: - - esbuild - - supports-color - - webpack - dev: false - - /craco-esbuild@0.5.2(@craco/craco@7.1.0)(react-scripts@5.0.1): + /craco-esbuild@0.5.2(@craco/craco@7.1.0)(esbuild@0.18.20)(react-scripts@5.0.1)(webpack@5.91.0): resolution: {integrity: sha512-5NCHz2gFT8MkVo36t22KOBL53JvDrw8R2PHmGxxfaTa8LFZNKmvOI6e8zCzPdY9LeKMdF3svBjMVyXG53pGO1Q==} peerDependencies: '@craco/craco': ^6.0.0 || ^7.0.0 || ^7.0.0-alpha react-scripts: ^5.0.0 dependencies: - '@craco/craco': 7.1.0(@types/node@18.19.33)(postcss@8.4.38)(react-scripts@5.0.1)(typescript@5.4.5) - esbuild-jest: 0.5.0 - esbuild-loader: 2.21.0 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0)(react@18.3.1)(typescript@5.4.5) + '@craco/craco': 7.1.0(@types/node@17.0.45)(postcss@8.4.38)(react-scripts@5.0.1)(typescript@5.4.5) + esbuild-jest: 0.5.0(esbuild@0.18.20) + esbuild-loader: 2.21.0(webpack@5.91.0) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.23.4)(@rspack/core@0.5.7)(esbuild@0.18.20)(eslint@8.57.0)(react@18.3.1)(ts-node@10.9.2)(typescript@5.4.5) transitivePeerDependencies: - esbuild - supports-color @@ -15614,6 +15615,7 @@ packages: - eslint-import-resolver-webpack - jest - supports-color + dev: false /eslint-config-react-app@7.0.1(jest@27.5.1)(typescript@5.4.5): resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} @@ -15647,7 +15649,6 @@ packages: - eslint-import-resolver-webpack - jest - supports-color - dev: false /eslint-config-turbo@1.13.3(eslint@8.57.0): resolution: {integrity: sha512-if/QtwEiWZ5b7Bg8yZBPSvS0TeCG2Zvfa/+XBYANS7uSYucjmW+BBC8enJB0PqpB/YLGGOumeo3x7h1Nuba9iw==} @@ -15763,6 +15764,7 @@ packages: lodash: 4.17.21 string-natural-compare: 3.0.1 dev: false + dev: false /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.57.0): resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} @@ -15788,29 +15790,11 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + eslint: 8.57.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} @@ -23931,6 +23915,13 @@ packages: preact: 10.22.0 dev: false + /posthog-js@1.138.1: + resolution: {integrity: sha512-hLahTznM0/iSM3vl6QGcmdG/zgCcW2DaQqPf7OtXCoqxNdYCWTNp6/sqepd6CxtDmJfm1S5Cbu1tD9TSksOYcA==} + dependencies: + fflate: 0.4.8 + preact: 10.22.0 + dev: false + /preact@10.22.0: resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} dev: false @@ -24816,6 +24807,7 @@ packages: - webpack-cli - webpack-hot-middleware - webpack-plugin-serve + dev: false /react-scripts@5.0.1(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} @@ -24912,7 +24904,6 @@ packages: - webpack-cli - webpack-hot-middleware - webpack-plugin-serve - dev: false /react-style-singleton@2.2.1(@types/react@18.3.2)(react@18.3.1): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} @@ -27081,7 +27072,6 @@ packages: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false /ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} @@ -27112,6 +27102,7 @@ packages: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: false /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}