diff --git a/web/next.config.js b/web/next.config.js index 07bd3cab..d3cc0a34 100644 --- a/web/next.config.js +++ b/web/next.config.js @@ -13,7 +13,7 @@ module.exports = withSentryConfig( output: "export", images: { unoptimized: true }, env: { - GIT_HASH: gitHash, + NEXT_PUBLIC_GIT_HASH: gitHash, }, webpack(config) { if (process.env.NODE_V8_COVERAGE) { diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx index 7d8ad6ec..f2327458 100644 --- a/web/src/app/layout.tsx +++ b/web/src/app/layout.tsx @@ -62,7 +62,7 @@ export default async function RootLayout({ }: { children: React.ReactNode; }) { - const gitHash = process.env.GIT_HASH; + const gitHash = process.env.NEXT_PUBLIC_GIT_HASH; const featuresDataRequest = await fetch( "https://features.long.so/features.json", diff --git a/web/src/config/clientEnv.ts b/web/src/config/clientEnv.ts index b868b43d..e0ca54f8 100644 --- a/web/src/config/clientEnv.ts +++ b/web/src/config/clientEnv.ts @@ -5,6 +5,10 @@ const clientEnvSchema = z.object({ * Walletconnect project id. */ NEXT_PUBLIC_LONGTAIL_WALLETCONNECT_PROJECT_ID: z.string(), + /** + * Web app version as git commit hash. + */ + NEXT_PUBLIC_GIT_HASH: z.string(), }); type ClientEnvSchemaType = z.infer; @@ -18,6 +22,7 @@ declare global { const clientEnv = clientEnvSchema.safeParse({ NEXT_PUBLIC_LONGTAIL_WALLETCONNECT_PROJECT_ID: process.env.NEXT_PUBLIC_LONGTAIL_WALLETCONNECT_PROJECT_ID, + NEXT_PUBLIC_GIT_HASH: process.env.NEXT_PUBLIC_GIT_HASH, }); if (!clientEnv.success) { diff --git a/web/src/context/contextInjector.tsx b/web/src/context/contextInjector.tsx new file mode 100644 index 00000000..2be697de --- /dev/null +++ b/web/src/context/contextInjector.tsx @@ -0,0 +1,26 @@ +"use client"; + +import { useAccount, useChainId } from "wagmi"; +import { useEffect } from "react"; +import { setContext, setUser } from "@sentry/nextjs"; +import appConfig from "@/config"; +export default function ContextInjector() { + const account = useAccount(); + + useEffect(() => { + if (account?.address) { + // window.localStorage.setItem("walletAddress", account.address); // this one is going to be needed for GTM + setUser({ id: account.address }); + } else { + // window.localStorage.removeItem("walletAddress"); + setUser(null); + } + }, [account?.address]); + + useEffect(() => { + setContext("version", { commitHash: appConfig.NEXT_PUBLIC_GIT_HASH }); + setContext("chain", { id: account?.chainId }); + }, [account?.chainId]); + + return null; +} diff --git a/web/src/context/index.tsx b/web/src/context/index.tsx index d3f9199d..0d43dc75 100644 --- a/web/src/context/index.tsx +++ b/web/src/context/index.tsx @@ -8,6 +8,7 @@ import { createWeb3Modal } from "@web3modal/wagmi/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { State, WagmiProvider } from "wagmi"; +import ContextInjector from "./contextInjector"; // Setup queryClient export const queryClient = new QueryClient(); @@ -29,7 +30,10 @@ export default function Web3ModalProvider({ }) { return ( - {children} + + + {children} + ); }