From a3bea3b7daf4d6321c70ee839b214fbcd000699b Mon Sep 17 00:00:00 2001 From: Johannes <72809645+jobenjada@users.noreply.github.com> Date: Fri, 29 Nov 2024 06:53:23 -0800 Subject: [PATCH] feat: add intercom (#4363) Co-authored-by: Piyush Gupta --- .env.example | 5 +- .../components/MainNavigation.tsx | 3 +- apps/web/app/(app)/layout.tsx | 7 + apps/web/app/(auth)/layout.tsx | 3 + apps/web/app/IntercomClient.tsx | 56 +++++ apps/web/app/middleware/responseHeaders.ts | 19 -- apps/web/middleware.ts | 2 +- apps/web/next.config.mjs | 6 +- apps/web/package.json | 92 ++++---- packages/lib/constants.ts | 4 + packages/lib/env.ts | 4 + pnpm-lock.yaml | 222 +++++++++++------- turbo.json | 2 + 13 files changed, 275 insertions(+), 150 deletions(-) create mode 100644 apps/web/app/IntercomClient.tsx delete mode 100644 apps/web/app/middleware/responseHeaders.ts diff --git a/.env.example b/.env.example index 16437ea93b..9ddca39f8e 100644 --- a/.env.example +++ b/.env.example @@ -185,4 +185,7 @@ UNSPLASH_ACCESS_KEY= # AI_AZURE_RESSOURCE_NAME= # AI_AZURE_API_KEY= # AI_AZURE_EMBEDDINGS_DEPLOYMENT_ID= -# AI_AZURE_LLM_DEPLOYMENT_ID= \ No newline at end of file +# AI_AZURE_LLM_DEPLOYMENT_ID= + +# NEXT_PUBLIC_INTERCOM_APP_ID= +# INTERCOM_SECRET_KEY= \ No newline at end of file diff --git a/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx b/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx index 2c0a336277..cc38428384 100644 --- a/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx @@ -481,7 +481,8 @@ export const MainNavigation = ({ { - await signOut({ callbackUrl: "/auth/login" }); + const route = await signOut({ redirect: false, callbackUrl: "/auth/login" }); + router.push(route.url); await formbricksLogout(); }} icon={}> diff --git a/apps/web/app/(app)/layout.tsx b/apps/web/app/(app)/layout.tsx index 9185cbd502..268ce89086 100644 --- a/apps/web/app/(app)/layout.tsx +++ b/apps/web/app/(app)/layout.tsx @@ -1,10 +1,12 @@ import { FormbricksClient } from "@/app/(app)/components/FormbricksClient"; +import { IntercomClient } from "@/app/IntercomClient"; import { authOptions } from "@/modules/auth/lib/authOptions"; import { NoMobileOverlay } from "@/modules/ui/components/no-mobile-overlay"; import { PHProvider, PostHogPageview } from "@/modules/ui/components/post-hog-client"; import { ToasterClient } from "@/modules/ui/components/toaster-client"; import { getServerSession } from "next-auth"; import { Suspense } from "react"; +import { INTERCOM_SECRET_KEY, IS_INTERCOM_CONFIGURED } from "@formbricks/lib/constants"; import { getUser } from "@formbricks/lib/user/service"; const AppLayout = async ({ children }) => { @@ -20,6 +22,11 @@ const AppLayout = async ({ children }) => { <> {session && user ? : null} + {children} diff --git a/apps/web/app/(auth)/layout.tsx b/apps/web/app/(auth)/layout.tsx index fe322623f6..4ee0062b1e 100644 --- a/apps/web/app/(auth)/layout.tsx +++ b/apps/web/app/(auth)/layout.tsx @@ -1,9 +1,12 @@ +import { IntercomClient } from "@/app/IntercomClient"; import { NoMobileOverlay } from "@/modules/ui/components/no-mobile-overlay"; +import { INTERCOM_SECRET_KEY, IS_INTERCOM_CONFIGURED } from "@formbricks/lib/constants"; const AppLayout = async ({ children }) => { return ( <> + {children} ); diff --git a/apps/web/app/IntercomClient.tsx b/apps/web/app/IntercomClient.tsx new file mode 100644 index 0000000000..9ac3e487bd --- /dev/null +++ b/apps/web/app/IntercomClient.tsx @@ -0,0 +1,56 @@ +"use client"; + +import Intercom from "@intercom/messenger-js-sdk"; +import { createHmac } from "crypto"; +import { useCallback, useEffect } from "react"; +import { env } from "@formbricks/lib/env"; +import { TUser } from "@formbricks/types/user"; + +const intercomAppId = env.NEXT_PUBLIC_INTERCOM_APP_ID; + +interface IntercomClientProps { + isIntercomConfigured: boolean; + intercomSecretKey?: string; + user?: TUser | null; +} + +export const IntercomClient = ({ user, intercomSecretKey, isIntercomConfigured }: IntercomClientProps) => { + const initializeIntercom = useCallback(() => { + let initParams = {}; + + if (user) { + const { id, name, email, createdAt } = user; + const hash = createHmac("sha256", intercomSecretKey!).update(user?.id).digest("hex"); + + initParams = { + user_id: id, + user_hash: hash, + name, + email, + created_at: createdAt ? Math.floor(createdAt.getTime() / 1000) : undefined, + }; + } + + Intercom({ + app_id: intercomAppId!, + ...initParams, + }); + }, [user]); + + useEffect(() => { + try { + if (isIntercomConfigured) initializeIntercom(); + + return () => { + // Shutdown Intercom when component unmounts + if (typeof window !== "undefined" && window.Intercom) { + window.Intercom("shutdown"); + } + }; + } catch (error) { + console.error("Failed to initialize Intercom:", error); + } + }, [isIntercomConfigured]); + + return null; +}; diff --git a/apps/web/app/middleware/responseHeaders.ts b/apps/web/app/middleware/responseHeaders.ts deleted file mode 100644 index a288451783..0000000000 --- a/apps/web/app/middleware/responseHeaders.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const getCSPHeaderValues = () => { - const nonce = Buffer.from(crypto.randomUUID()).toString("base64"); - const cspHeader = ` - default-src 'self'; - script-src 'self'; - style-src 'self'; - img-src 'self' blob: data:; - font-src 'self'; - object-src 'none'; - base-uri 'self'; - form-action 'self'; - frame-ancestors 'none'; - upgrade-insecure-requests; - ` - .replace(/\s{2,}/g, " ") - .trim(); - - return { nonce, cspHeader }; -}; diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts index 0549b346f4..05f944f659 100644 --- a/apps/web/middleware.ts +++ b/apps/web/middleware.ts @@ -19,8 +19,8 @@ import { } from "@/app/middleware/endpointValidator"; import { ipAddress } from "@vercel/functions"; import { getToken } from "next-auth/jwt"; -import { NextResponse } from "next/server"; import type { NextRequest } from "next/server"; +import { NextResponse } from "next/server"; import { RATE_LIMITING_DISABLED, WEBAPP_URL } from "@formbricks/lib/constants"; import { isValidCallbackUrl } from "@formbricks/lib/utils/url"; diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index b4d272b20d..9c272fad1c 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -58,6 +58,10 @@ const nextConfig = { protocol: "https", hostname: "images.unsplash.com", }, + { + protocol: "https", + hostname: "api-iam.eu.intercom.io", + }, ], }, async redirects() { @@ -163,7 +167,7 @@ const nextConfig = { { key: "Content-Security-Policy", value: - "default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; font-src 'self' https:; connect-src 'self' https:; frame-src 'self' https://app.cal.com; media-src 'self' https:; object-src 'none'; base-uri 'self'; form-action 'self';", + "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.intercom.io https://*.intercomcdn.com; style-src 'self' 'unsafe-inline' https://*.intercomcdn.com; img-src 'self' blob: data: https://*.intercom.io https://*.intercomcdn.com; font-src 'self' data: https://*.intercomcdn.com; connect-src 'self' https://*.intercom.io wss://*.intercom.io https://*.intercomcdn.com https:; frame-src 'self' https://*.intercom.io; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests;", }, ], }, diff --git a/apps/web/package.json b/apps/web/package.json index 88ab196aed..2019c83112 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -25,51 +25,8 @@ "@formbricks/surveys": "workspace:*", "@formbricks/types": "workspace:*", "@hookform/resolvers": "3.9.0", + "@intercom/messenger-js-sdk": "0.0.14", "@json2csv/node": "7.0.6", - "@opentelemetry/api-logs": "0.53.0", - "@opentelemetry/instrumentation": "0.53.0", - "@opentelemetry/sdk-logs": "0.53.0", - "@paralleldrive/cuid2": "2.2.2", - "@radix-ui/react-collapsible": "1.1.1", - "@react-email/components": "0.0.25", - "@sentry/nextjs": "8.34.0", - "@tanstack/react-table": "8.20.5", - "@vercel/functions": "1.5.0", - "@vercel/og": "0.6.3", - "@vercel/otel": "1.10.0", - "@vercel/speed-insights": "1.0.12", - "ai": "3.4.33", - "bcryptjs": "2.4.3", - "dotenv": "16.4.5", - "encoding": "0.1.13", - "file-loader": "6.2.0", - "framer-motion": "11.11.8", - "googleapis": "144.0.0", - "https-proxy-agent": "7.0.5", - "jiti": "2.3.3", - "jsonwebtoken": "9.0.2", - "langfuse-vercel": "3.27.0", - "lodash": "4.17.21", - "lru-cache": "11.0.1", - "next": "15.0.3", - "next-intl": "3.20.0", - "next-safe-action": "7.9.3", - "optional": "0.1.4", - "otplib": "12.0.1", - "papaparse": "5.4.1", - "posthog-js": "1.167.0", - "prismjs": "1.29.0", - "react": "19.0.0-rc-ed15d500-20241110", - "react-dom": "19.0.0-rc-ed15d500-20241110", - "react-hook-form": "7.53.0", - "react-hot-toast": "2.4.1", - "redis": "4.7.0", - "sharp": "0.33.5", - "stripe": "16.7.0", - "ua-parser-js": "1.0.39", - "webpack": "5.95.0", - "xlsx": "0.18.5", - "react-use": "17.5.1", "@lexical/code": "0.17.0", "@lexical/link": "0.17.0", "@lexical/list": "0.17.0", @@ -77,8 +34,13 @@ "@lexical/react": "0.17.0", "@lexical/rich-text": "0.17.0", "@lexical/table": "0.17.0", + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/instrumentation": "0.53.0", + "@opentelemetry/sdk-logs": "0.53.0", + "@paralleldrive/cuid2": "2.2.2", "@radix-ui/react-accordion": "1.2.0", "@radix-ui/react-checkbox": "1.1.1", + "@radix-ui/react-collapsible": "1.1.1", "@radix-ui/react-dialog": "1.1.1", "@radix-ui/react-dropdown-menu": "2.1.1", "@radix-ui/react-label": "2.1.0", @@ -93,22 +55,62 @@ "@radix-ui/react-toggle": "1.1.0", "@radix-ui/react-toggle-group": "1.1.0", "@radix-ui/react-tooltip": "1.1.2", + "@react-email/components": "0.0.25", + "@sentry/nextjs": "8.34.0", "@tailwindcss/forms": "0.5.9", "@tailwindcss/typography": "0.5.13", + "@tanstack/react-table": "8.20.5", + "@vercel/functions": "1.5.0", + "@vercel/og": "0.6.3", + "@vercel/otel": "1.10.0", + "@vercel/speed-insights": "1.0.12", + "ai": "3.4.33", "autoprefixer": "10.4.20", + "bcryptjs": "2.4.3", "boring-avatars": "1.10.2", "class-variance-authority": "0.7.0", "clsx": "2.1.1", "cmdk": "1.0.0", + "dotenv": "16.4.5", + "encoding": "0.1.13", + "file-loader": "6.2.0", + "framer-motion": "11.11.8", + "googleapis": "144.0.0", + "https-proxy-agent": "7.0.5", + "jiti": "2.3.3", + "jsonwebtoken": "9.0.2", + "langfuse-vercel": "3.27.0", "lexical": "0.17.0", + "lodash": "4.17.21", + "lru-cache": "11.0.1", "lucide-react": "0.452.0", "mime": "4.0.4", + "next": "15.0.3", + "next-intl": "3.20.0", + "next-safe-action": "7.9.3", + "optional": "0.1.4", + "otplib": "12.0.1", + "papaparse": "5.4.1", + "posthog-js": "1.167.0", + "prismjs": "1.29.0", + "react": "19.0.0-rc-ed15d500-20241110", "react-colorful": "5.6.1", "react-confetti": "6.1.0", "react-day-picker": "9.0.8", + "react-dom": "19.0.0-rc-ed15d500-20241110", + "react-hook-form": "7.53.0", + "react-hot-toast": "2.4.1", + "react-icons": "5.3.0", "react-radio-group": "3.0.3", + "react-use": "17.5.1", + "redis": "4.7.0", + "sharp": "0.33.5", + "stripe": "16.7.0", "tailwind-merge": "2.5.2", - "tailwindcss": "3.4.13" + "tailwindcss": "3.4.13", + "ua-parser-js": "1.0.39", + "webpack": "5.95.0", + "xlsx": "0.18.5" }, "devDependencies": { "@formbricks/config-typescript": "workspace:*", diff --git a/packages/lib/constants.ts b/packages/lib/constants.ts index f9889aad4a..eb3a9074f6 100644 --- a/packages/lib/constants.ts +++ b/packages/lib/constants.ts @@ -239,3 +239,7 @@ export const IS_AI_CONFIGURED = Boolean( env.AI_AZURE_LLM_DEPLOYMENT_ID && env.AI_AZURE_LLM_RESSOURCE_NAME ); + +export const INTERCOM_SECRET_KEY = env.INTERCOM_SECRET_KEY; + +export const IS_INTERCOM_CONFIGURED = Boolean(env.NEXT_PUBLIC_INTERCOM_APP_ID && INTERCOM_SECRET_KEY); diff --git a/packages/lib/env.ts b/packages/lib/env.ts index d4a3ca3687..7c6a029c81 100644 --- a/packages/lib/env.ts +++ b/packages/lib/env.ts @@ -45,6 +45,7 @@ export const env = createEnv({ .optional() .or(z.string().refine((str) => str === "")), INVITE_DISABLED: z.enum(["1", "0"]).optional(), + INTERCOM_SECRET_KEY: z.string().optional(), IS_FORMBRICKS_CLOUD: z.enum(["1", "0"]).optional(), MAIL_FROM: z.string().email().optional(), NEXTAUTH_SECRET: z.string().min(1), @@ -114,6 +115,7 @@ export const env = createEnv({ NEXT_PUBLIC_POSTHOG_API_KEY: z.string().optional(), NEXT_PUBLIC_POSTHOG_API_HOST: z.string().optional(), NEXT_PUBLIC_SENTRY_DSN: z.string().optional(), + NEXT_PUBLIC_INTERCOM_APP_ID: z.string().optional(), }, /* * Due to how Next.js bundles environment variables on Edge and Client, @@ -159,6 +161,7 @@ export const env = createEnv({ HTTPS_PROXY: process.env.HTTPS_PROXY, IMPRINT_URL: process.env.IMPRINT_URL, INVITE_DISABLED: process.env.INVITE_DISABLED, + INTERCOM_SECRET_KEY: process.env.INTERCOM_SECRET_KEY, IS_FORMBRICKS_CLOUD: process.env.IS_FORMBRICKS_CLOUD, MAIL_FROM: process.env.MAIL_FROM, NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, @@ -169,6 +172,7 @@ export const env = createEnv({ NEXT_PUBLIC_POSTHOG_API_KEY: process.env.NEXT_PUBLIC_POSTHOG_API_KEY, NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN, OPENTELEMETRY_LISTENER_URL: process.env.OPENTELEMETRY_LISTENER_URL, + NEXT_PUBLIC_INTERCOM_APP_ID: process.env.NEXT_PUBLIC_INTERCOM_APP_ID, NOTION_OAUTH_CLIENT_ID: process.env.NOTION_OAUTH_CLIENT_ID, NOTION_OAUTH_CLIENT_SECRET: process.env.NOTION_OAUTH_CLIENT_SECRET, OIDC_CLIENT_ID: process.env.OIDC_CLIENT_ID, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f14db9485e..79f1ae00b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,19 +124,19 @@ importers: version: 2.1.9(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) '@headlessui/tailwindcss': specifier: 0.2.1 - version: 0.2.1(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5))) + version: 0.2.1(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5))) '@mapbox/rehype-prism': specifier: 0.9.0 version: 0.9.0 '@mdx-js/loader': specifier: 3.0.1 - version: 3.0.1(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))) + version: 3.0.1(webpack@5.95.0) '@mdx-js/react': specifier: 3.0.1 version: 3.0.1(@types/react@18.3.11)(react@19.0.0-rc-ed15d500-20241110) '@next/mdx': specifier: 15.0.3 - version: 15.0.3(@mdx-js/loader@3.0.1(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))))(@mdx-js/react@3.0.1(@types/react@18.3.11)(react@19.0.0-rc-ed15d500-20241110)) + version: 15.0.3(@mdx-js/loader@3.0.1(webpack@5.95.0))(@mdx-js/react@3.0.1(@types/react@18.3.11)(react@19.0.0-rc-ed15d500-20241110)) '@paralleldrive/cuid2': specifier: 2.2.2 version: 2.2.2 @@ -145,7 +145,7 @@ importers: version: 2.2.1 '@tailwindcss/typography': specifier: 0.5.15 - version: 0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5))) + version: 0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5))) acorn: specifier: 8.12.1 version: 8.12.1 @@ -241,7 +241,7 @@ importers: version: 1.2.1 tailwindcss: specifier: 3.4.13 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + version: 3.4.13(ts-node@10.9.2(typescript@5.4.5)) unist-util-filter: specifier: 5.0.1 version: 5.0.1 @@ -306,7 +306,7 @@ importers: version: 8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(storybook@8.3.5)(typescript@5.4.5) '@storybook/react-vite': specifier: 8.3.5 - version: 8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(preact@10.23.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(rollup@4.24.0)(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3) + version: 8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(rollup@4.24.0)(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3) '@storybook/test': specifier: 8.3.5 version: 8.3.5(storybook@8.3.5) @@ -333,7 +333,7 @@ importers: version: 8.3.5 tsup: specifier: 8.3.0 - version: 8.3.0(@microsoft/api-extractor@7.43.0(@types/node@22.3.0))(@swc/core@1.3.101(@swc/helpers@0.5.13))(jiti@2.3.3)(postcss@8.4.47)(tsx@4.16.5)(typescript@5.4.5)(yaml@2.5.1) + version: 8.3.0(@microsoft/api-extractor@7.43.0(@types/node@22.3.0))(@swc/core@1.3.101)(jiti@2.3.3)(postcss@8.4.47)(tsx@4.16.5)(typescript@5.4.5)(yaml@2.5.1) vite: specifier: 5.4.8 version: 5.4.8(@types/node@22.3.0)(terser@5.31.6) @@ -379,6 +379,9 @@ importers: '@hookform/resolvers': specifier: 3.9.0 version: 3.9.0(react-hook-form@7.53.0(react@19.0.0-rc-ed15d500-20241110)) + '@intercom/messenger-js-sdk': + specifier: 0.0.14 + version: 0.0.14 '@json2csv/node': specifier: 7.0.6 version: 7.0.6 @@ -471,19 +474,19 @@ importers: version: 0.0.25(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) '@sentry/nextjs': specifier: 8.34.0 - version: 8.34.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@15.0.3(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))) + version: 8.34.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@15.0.3(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(webpack@5.95.0) '@tailwindcss/forms': specifier: 0.5.9 - version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5))) + version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5))) '@tailwindcss/typography': specifier: 0.5.13 - version: 0.5.13(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5))) + version: 0.5.13(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5))) '@tanstack/react-table': specifier: 8.20.5 version: 8.20.5(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) '@vercel/functions': specifier: 1.5.0 - version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.631.0(aws-crt@1.21.3))) + version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.621.0) '@vercel/og': specifier: 0.6.3 version: 0.6.3 @@ -522,7 +525,7 @@ importers: version: 0.1.13 file-loader: specifier: 6.2.0 - version: 6.2.0(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))) + version: 6.2.0(webpack@5.95.0) framer-motion: specifier: 11.11.8 version: 11.11.8(@emotion/is-prop-valid@0.8.8)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) @@ -601,6 +604,9 @@ importers: react-hot-toast: specifier: 2.4.1 version: 2.4.1(csstype@3.1.3)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + react-icons: + specifier: 5.3.0 + version: 5.3.0(react@19.0.0-rc-ed15d500-20241110) react-radio-group: specifier: 3.0.3 version: 3.0.3(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) @@ -621,13 +627,13 @@ importers: version: 2.5.2 tailwindcss: specifier: 3.4.13 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + version: 3.4.13(ts-node@10.9.2(typescript@5.4.5)) ua-parser-js: specifier: 1.0.39 version: 1.0.39 webpack: specifier: 5.95.0 - version: 5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)) + version: 5.95.0 xlsx: specifier: 0.18.5 version: 0.18.5 @@ -700,7 +706,7 @@ importers: version: 8.0.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/style-guide': specifier: 6.0.0 - version: 6.0.0(@next/eslint-plugin-next@14.2.5)(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5)(vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6)) + version: 6.0.0(@next/eslint-plugin-next@14.2.5)(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5)(vitest@2.0.5) eslint-config-next: specifier: 14.2.5 version: 14.2.5(eslint@8.57.0)(typescript@5.4.5) @@ -785,7 +791,7 @@ importers: version: 3.1.1(prisma@5.20.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.3.101)(@types/node@22.3.0)(typescript@5.4.5) zod: specifier: 3.23.8 version: 3.23.8 @@ -937,7 +943,7 @@ importers: version: 16.4.5 ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.3.101)(@types/node@22.3.0)(typescript@5.4.5) vitest: specifier: 2.0.5 version: 2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6) @@ -1032,7 +1038,7 @@ importers: version: 14.2.3 tailwindcss: specifier: 3.4.10 - version: 3.4.10(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + version: 3.4.10(ts-node@10.9.2(@types/node@22.3.0)(typescript@5.4.5)) terser: specifier: 5.31.6 version: 5.31.6 @@ -3011,6 +3017,9 @@ packages: cpu: [x64] os: [win32] + '@intercom/messenger-js-sdk@0.0.14': + resolution: {integrity: sha512-2dH4BDAh9EI90K7hUkAdZ76W79LM45Sd1OBX7t6Vzy8twpNiQ5X+7sH9G5hlJlkSGnf+vFWlFcy9TOYAyEs1hA==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -11297,6 +11306,11 @@ packages: react: '>=16' react-dom: '>=16' + react-icons@5.3.0: + resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==} + peerDependencies: + react: '*' + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -15917,9 +15931,9 @@ snapshots: react: 19.0.0-rc-ed15d500-20241110 react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)))': + '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5)))': dependencies: - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + tailwindcss: 3.4.13(ts-node@10.9.2(typescript@5.4.5)) '@hookform/resolvers@3.9.0(react-hook-form@7.53.0(react@19.0.0-rc-ed15d500-20241110))': dependencies: @@ -16026,6 +16040,8 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true + '@intercom/messenger-js-sdk@0.0.14': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -16299,11 +16315,11 @@ snapshots: refractor: 3.6.0 unist-util-visit: 2.0.3 - '@mdx-js/loader@3.0.1(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)))': + '@mdx-js/loader@3.0.1(webpack@5.95.0)': dependencies: '@mdx-js/mdx': 3.0.1 source-map: 0.7.4 - webpack: 5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)) + webpack: 5.95.0 transitivePeerDependencies: - supports-color @@ -16397,11 +16413,11 @@ snapshots: dependencies: glob: 10.3.10 - '@next/mdx@15.0.3(@mdx-js/loader@3.0.1(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))))(@mdx-js/react@3.0.1(@types/react@18.3.11)(react@19.0.0-rc-ed15d500-20241110))': + '@next/mdx@15.0.3(@mdx-js/loader@3.0.1(webpack@5.95.0))(@mdx-js/react@3.0.1(@types/react@18.3.11)(react@19.0.0-rc-ed15d500-20241110))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 3.0.1(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))) + '@mdx-js/loader': 3.0.1(webpack@5.95.0) '@mdx-js/react': 3.0.1(@types/react@18.3.11)(react@19.0.0-rc-ed15d500-20241110) '@next/swc-darwin-arm64@15.0.3': @@ -18533,7 +18549,7 @@ snapshots: '@sentry/types': 8.34.0 '@sentry/utils': 8.34.0 - '@sentry/nextjs@8.34.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@15.0.3(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)))': + '@sentry/nextjs@8.34.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@15.0.3(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(webpack@5.95.0)': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -18546,14 +18562,14 @@ snapshots: '@sentry/types': 8.34.0 '@sentry/utils': 8.34.0 '@sentry/vercel-edge': 8.34.0 - '@sentry/webpack-plugin': 2.22.3(encoding@0.1.13)(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))) + '@sentry/webpack-plugin': 2.22.3(encoding@0.1.13)(webpack@5.95.0) chalk: 3.0.0 next: 15.0.3(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) resolve: 1.22.8 rollup: 3.29.5 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)) + webpack: 5.95.0 transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -18635,12 +18651,12 @@ snapshots: '@sentry/types': 8.34.0 '@sentry/utils': 8.34.0 - '@sentry/webpack-plugin@2.22.3(encoding@0.1.13)(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)))': + '@sentry/webpack-plugin@2.22.3(encoding@0.1.13)(webpack@5.95.0)': dependencies: '@sentry/bundler-plugin-core': 2.22.3(encoding@0.1.13) unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)) + webpack: 5.95.0 transitivePeerDependencies: - encoding - supports-color @@ -19192,7 +19208,7 @@ snapshots: react: 19.0.0-rc-ed15d500-20241110 react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - '@storybook/builder-vite@8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(preact@10.23.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3)': + '@storybook/builder-vite@8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3)': dependencies: '@storybook/csf-plugin': 8.3.5(storybook@8.3.5)(webpack-sources@3.2.3) '@types/find-cache-dir': 3.2.1 @@ -19290,11 +19306,11 @@ snapshots: react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) storybook: 8.3.5 - '@storybook/react-vite@8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(preact@10.23.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(rollup@4.24.0)(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3)': + '@storybook/react-vite@8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(rollup@4.24.0)(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3)': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)) '@rollup/pluginutils': 5.1.2(rollup@4.24.0) - '@storybook/builder-vite': 8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(preact@10.23.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3) + '@storybook/builder-vite': 8.3.5(@preact/preset-vite@2.9.0(@babel/core@7.25.2)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6)))(storybook@8.3.5)(typescript@5.4.5)(vite@5.4.8(@types/node@22.3.0)(terser@5.31.6))(webpack-sources@3.2.3) '@storybook/react': 8.3.5(@storybook/test@8.3.5(storybook@8.3.5))(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(storybook@8.3.5)(typescript@5.4.5) find-up: 5.0.0 magic-string: 0.30.11 @@ -19392,7 +19408,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.3.101': optional: true - '@swc/core@1.3.101(@swc/helpers@0.5.13)': + '@swc/core@1.3.101': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -19407,7 +19423,6 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.3.101 '@swc/core-win32-ia32-msvc': 1.3.101 '@swc/core-win32-x64-msvc': 1.3.101 - '@swc/helpers': 0.5.13 optional: true '@swc/counter@0.1.3': {} @@ -19434,26 +19449,26 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)))': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + tailwindcss: 3.4.13(ts-node@10.9.2(typescript@5.4.5)) - '@tailwindcss/typography@0.5.13(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)))': + '@tailwindcss/typography@0.5.13(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + tailwindcss: 3.4.13(ts-node@10.9.2(typescript@5.4.5)) - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)))': + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + tailwindcss: 3.4.13(ts-node@10.9.2(typescript@5.4.5)) '@tanstack/react-table@8.20.5(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)': dependencies: @@ -20130,7 +20145,7 @@ snapshots: graphql: 15.8.0 wonka: 4.0.15 - '@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.631.0(aws-crt@1.21.3)))': + '@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.621.0)': optionalDependencies: '@aws-sdk/credential-provider-web-identity': 3.621.0(@aws-sdk/client-sts@3.631.0(aws-crt@1.21.3)) @@ -20157,7 +20172,7 @@ snapshots: svelte: 4.2.19 vue: 3.5.11(typescript@5.4.5) - '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@14.2.5)(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5)(vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6))': + '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@14.2.5)(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5)(vitest@2.0.5)': dependencies: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.8(@babel/core@7.25.2)(eslint@8.57.0) @@ -20165,7 +20180,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) @@ -20177,7 +20192,7 @@ snapshots: eslint-plugin-testing-library: 6.3.0(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 51.0.1(eslint@8.57.0) - eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6)) + eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5) prettier-plugin-packagejson: 2.5.3(prettier@3.3.3) optionalDependencies: '@next/eslint-plugin-next': 14.2.5 @@ -22192,9 +22207,9 @@ snapshots: eslint: 8.57.0 eslint-plugin-turbo: 2.0.14(eslint@8.57.0) - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -22210,13 +22225,13 @@ snapshots: debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -22229,7 +22244,7 @@ snapshots: debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 @@ -22242,7 +22257,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -22253,17 +22268,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -22317,7 +22322,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -22486,13 +22491,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6)): + eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - vitest: 2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6) + vitest: 2.0.5 transitivePeerDependencies: - supports-color - typescript @@ -22860,11 +22865,11 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))): + file-loader@6.2.0(webpack@5.95.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)) + webpack: 5.95.0 filesize@10.1.6: {} @@ -26047,13 +26052,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.41 - postcss-load-config@4.0.2(postcss@8.4.41)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.41)(ts-node@10.9.2(@types/node@22.3.0)(typescript@5.4.5)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: postcss: 8.4.41 - ts-node: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.3.101)(@types/node@22.3.0)(typescript@5.4.5) postcss-load-config@6.0.1(jiti@2.3.3)(postcss@8.4.47)(tsx@4.16.5)(yaml@2.5.1): dependencies: @@ -26466,6 +26471,10 @@ snapshots: transitivePeerDependencies: - csstype + react-icons@5.3.0(react@19.0.0-rc-ed15d500-20241110): + dependencies: + react: 19.0.0-rc-ed15d500-20241110 + react-is@16.13.1: {} react-is@17.0.2: {} @@ -27735,7 +27744,7 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss@3.4.10(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)): + tailwindcss@3.4.10(ts-node@10.9.2(@types/node@22.3.0)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -27754,7 +27763,7 @@ snapshots: postcss: 8.4.41 postcss-import: 15.1.0(postcss@8.4.41) postcss-js: 4.0.1(postcss@8.4.41) - postcss-load-config: 4.0.2(postcss@8.4.41)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.41)(ts-node@10.9.2(@types/node@22.3.0)(typescript@5.4.5)) postcss-nested: 6.2.0(postcss@8.4.41) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -27762,7 +27771,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)): + tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -27781,7 +27790,7 @@ snapshots: postcss: 8.4.41 postcss-import: 15.1.0(postcss@8.4.41) postcss-js: 4.0.1(postcss@8.4.41) - postcss-load-config: 4.0.2(postcss@8.4.41)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.41)(ts-node@10.9.2(@types/node@22.3.0)(typescript@5.4.5)) postcss-nested: 6.2.0(postcss@8.4.41) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -27857,16 +27866,14 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.3.101(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))): + terser-webpack-plugin@5.3.10(webpack@5.95.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)) - optionalDependencies: - '@swc/core': 1.3.101(@swc/helpers@0.5.13) + webpack: 5.95.0 terser@5.31.3: dependencies: @@ -27998,7 +28005,7 @@ snapshots: '@ts-morph/common': 0.12.3 code-block-writer: 11.0.3 - ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.13))(@types/node@22.3.0)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.3.101)(@types/node@22.3.0)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -28016,7 +28023,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.3.101(@swc/helpers@0.5.13) + '@swc/core': 1.3.101 ts-pattern@4.3.0: {} @@ -28041,7 +28048,7 @@ snapshots: tslib@2.7.0: {} - tsup@8.3.0(@microsoft/api-extractor@7.43.0(@types/node@22.3.0))(@swc/core@1.3.101(@swc/helpers@0.5.13))(jiti@2.3.3)(postcss@8.4.47)(tsx@4.16.5)(typescript@5.4.5)(yaml@2.5.1): + tsup@8.3.0(@microsoft/api-extractor@7.43.0(@types/node@22.3.0))(@swc/core@1.3.101)(jiti@2.3.3)(postcss@8.4.47)(tsx@4.16.5)(typescript@5.4.5)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -28061,7 +28068,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: '@microsoft/api-extractor': 7.43.0(@types/node@22.3.0) - '@swc/core': 1.3.101(@swc/helpers@0.5.13) + '@swc/core': 1.3.101 postcss: 8.4.47 typescript: 5.4.5 transitivePeerDependencies: @@ -28436,6 +28443,25 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 + vite-node@2.0.5: + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@22.3.0)(terser@5.31.3) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + optional: true + vite-node@2.0.5(@types/node@22.3.0)(terser@5.31.6): dependencies: cac: 6.7.14 @@ -28533,6 +28559,38 @@ snapshots: typescript: 5.4.5 vitest: 2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6) + vitest@2.0.5: + dependencies: + '@ampproject/remapping': 2.3.0 + '@vitest/expect': 2.0.5 + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.0.5 + '@vitest/snapshot': 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + debug: 4.3.7 + execa: 8.0.1 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@22.3.0)(terser@5.31.3) + vite-node: 2.0.5 + why-is-node-running: 2.3.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + optional: true + vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.3)(terser@5.31.6): dependencies: '@ampproject/remapping': 2.3.0 @@ -28632,7 +28690,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13)): + webpack@5.95.0: dependencies: '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 @@ -28654,7 +28712,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.101(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.3.101(@swc/helpers@0.5.13))) + terser-webpack-plugin: 5.3.10(webpack@5.95.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/turbo.json b/turbo.json index 0b55d310c0..b73f0293c9 100644 --- a/turbo.json +++ b/turbo.json @@ -107,6 +107,7 @@ "IMPRINT_URL", "INVITE_DISABLED", "IS_FORMBRICKS_CLOUD", + "INTERCOM_SECRET_KEY", "MAIL_FROM", "NEXT_PUBLIC_LAYER_API_KEY", "NEXT_PUBLIC_DOCSEARCH_APP_ID", @@ -119,6 +120,7 @@ "NEXT_PUBLIC_FORMBRICKS_URL", "NEXT_PUBLIC_SENTRY_DSN", "NEXT_PUBLIC_POSTHOG_API_HOST", + "NEXT_PUBLIC_INTERCOM_APP_ID", "NEXT_PUBLIC_POSTHOG_API_KEY", "NEXT_PUBLIC_FORMBRICKS_COM_API_HOST", "NEXT_PUBLIC_FORMBRICKS_COM_ENVIRONMENT_ID",