From 115d55d61d86b7b5d80871dd9a7eed8c34dff6ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Cerm=C3=A1k?= Date: Thu, 5 Dec 2024 10:47:55 +0100 Subject: [PATCH 1/6] =?UTF-8?q?=F0=9F=94=A7=20Enable=20sentry=20profilling?= =?UTF-8?q?=20integration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/webauthn-default/next.config.ts | 12 ++++++++++++ examples/webauthn-upgrade/next.config.ts | 12 ++++++++++++ packages/sentry/client.ts | 14 ++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/examples/webauthn-default/next.config.ts b/examples/webauthn-default/next.config.ts index 1b467eb..6c44494 100755 --- a/examples/webauthn-default/next.config.ts +++ b/examples/webauthn-default/next.config.ts @@ -22,6 +22,18 @@ const nextConfig: NextConfig = { transpilePackages: ['@workspace/common'] satisfies Dependency[], redirects: async () => [], + + headers: async () => [ + { + source: '/(.*)', + headers: [ + { + key: 'Document-Policy', + value: 'js-profiling', + }, + ], + }, + ], }; // Make sure adding Sentry options is the last code to run before exporting, to diff --git a/examples/webauthn-upgrade/next.config.ts b/examples/webauthn-upgrade/next.config.ts index 1b467eb..6c44494 100755 --- a/examples/webauthn-upgrade/next.config.ts +++ b/examples/webauthn-upgrade/next.config.ts @@ -22,6 +22,18 @@ const nextConfig: NextConfig = { transpilePackages: ['@workspace/common'] satisfies Dependency[], redirects: async () => [], + + headers: async () => [ + { + source: '/(.*)', + headers: [ + { + key: 'Document-Policy', + value: 'js-profiling', + }, + ], + }, + ], }; // Make sure adding Sentry options is the last code to run before exporting, to diff --git a/packages/sentry/client.ts b/packages/sentry/client.ts index d1e1b6b..a4d9c10 100644 --- a/packages/sentry/client.ts +++ b/packages/sentry/client.ts @@ -2,7 +2,13 @@ // The config you add here will be used whenever a users loads a page in their browser. // https://docs.sentry.io/platforms/javascript/guides/nextjs/ -import { feedbackIntegration, init, replayIntegration } from '@sentry/nextjs'; +import { + browserProfilingIntegration, + browserTracingIntegration, + feedbackIntegration, + init, + replayIntegration, +} from '@sentry/nextjs'; export function initSentryForClient(dsn: string) { init({ @@ -14,10 +20,14 @@ export function initSentryForClient(dsn: string) { feedbackIntegration({ colorScheme: 'system', }), + browserTracingIntegration(), + browserProfilingIntegration(), ], // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control. - tracesSampleRate: 1, + tracesSampleRate: 0.5, + + profilesSampleRate: 0.5, // Define how likely Replay events are sampled. // This sets the sample rate to be 10%. You may want this to be 100% while From 976e0c1379ef19194a04c9936df3b0b1fb438d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Cerm=C3=A1k?= Date: Thu, 5 Dec 2024 10:56:49 +0100 Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=92=84=20Fix=20font-family=20in=20sen?= =?UTF-8?q?try=20feedback=20form?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/sentry/client.ts | 2 ++ packages/sentry/styles/feedback-form.css | 7 +++++++ 2 files changed, 9 insertions(+) create mode 100644 packages/sentry/styles/feedback-form.css diff --git a/packages/sentry/client.ts b/packages/sentry/client.ts index a4d9c10..6eb1b48 100644 --- a/packages/sentry/client.ts +++ b/packages/sentry/client.ts @@ -10,6 +10,8 @@ import { replayIntegration, } from '@sentry/nextjs'; +import './styles/feedback-form.css'; + export function initSentryForClient(dsn: string) { init({ dsn, diff --git a/packages/sentry/styles/feedback-form.css b/packages/sentry/styles/feedback-form.css new file mode 100644 index 0000000..8f26500 --- /dev/null +++ b/packages/sentry/styles/feedback-form.css @@ -0,0 +1,7 @@ +:root { + --font-family: 'Montserrat'; +} + +#sentry-feedback { + font-family: var(--font-family); +} \ No newline at end of file From e4d717132188c15d45dabb0522e186ae8725eaff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Cerm=C3=A1k?= Date: Thu, 5 Dec 2024 11:18:39 +0100 Subject: [PATCH 3/6] =?UTF-8?q?=F0=9F=94=A7=20Update=20sentry=20intergrati?= =?UTF-8?q?ons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/webauthn-default/next.config.ts | 14 -------------- examples/webauthn-upgrade/next.config.ts | 14 -------------- packages/sentry/client.ts | 11 +---------- 3 files changed, 1 insertion(+), 38 deletions(-) diff --git a/examples/webauthn-default/next.config.ts b/examples/webauthn-default/next.config.ts index 6c44494..cebce8c 100755 --- a/examples/webauthn-default/next.config.ts +++ b/examples/webauthn-default/next.config.ts @@ -20,20 +20,6 @@ const nextConfig: NextConfig = { }, transpilePackages: ['@workspace/common'] satisfies Dependency[], - - redirects: async () => [], - - headers: async () => [ - { - source: '/(.*)', - headers: [ - { - key: 'Document-Policy', - value: 'js-profiling', - }, - ], - }, - ], }; // Make sure adding Sentry options is the last code to run before exporting, to diff --git a/examples/webauthn-upgrade/next.config.ts b/examples/webauthn-upgrade/next.config.ts index 6c44494..cebce8c 100755 --- a/examples/webauthn-upgrade/next.config.ts +++ b/examples/webauthn-upgrade/next.config.ts @@ -20,20 +20,6 @@ const nextConfig: NextConfig = { }, transpilePackages: ['@workspace/common'] satisfies Dependency[], - - redirects: async () => [], - - headers: async () => [ - { - source: '/(.*)', - headers: [ - { - key: 'Document-Policy', - value: 'js-profiling', - }, - ], - }, - ], }; // Make sure adding Sentry options is the last code to run before exporting, to diff --git a/packages/sentry/client.ts b/packages/sentry/client.ts index 6eb1b48..d2fbf78 100644 --- a/packages/sentry/client.ts +++ b/packages/sentry/client.ts @@ -2,13 +2,7 @@ // The config you add here will be used whenever a users loads a page in their browser. // https://docs.sentry.io/platforms/javascript/guides/nextjs/ -import { - browserProfilingIntegration, - browserTracingIntegration, - feedbackIntegration, - init, - replayIntegration, -} from '@sentry/nextjs'; +import { browserTracingIntegration, feedbackIntegration, init, replayIntegration } from '@sentry/nextjs'; import './styles/feedback-form.css'; @@ -23,14 +17,11 @@ export function initSentryForClient(dsn: string) { colorScheme: 'system', }), browserTracingIntegration(), - browserProfilingIntegration(), ], // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control. tracesSampleRate: 0.5, - profilesSampleRate: 0.5, - // Define how likely Replay events are sampled. // This sets the sample rate to be 10%. You may want this to be 100% while // in development and sample at a lower rate in production From e116773148a8a23be2d537139c4b3a27f3445594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Cerm=C3=A1k?= Date: Thu, 5 Dec 2024 12:04:25 +0100 Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=93=88=20Add=20anonymous=20important?= =?UTF-8?q?=20events=20tracking?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LoginWithPasskeyPage.tsx | 9 +++- .../hooks/useLoginWithPasskey.ts | 6 +++ .../PasskeysPage/hooks/useAddPasskey.ts | 5 ++ .../PasskeysPage/hooks/useRemovePasskey.ts | 7 +++ .../RegisterWithPasskeyPage.tsx | 7 ++- .../hooks/useRegisterWithPasskey.ts | 7 +++ .../EmailVerificationCode.tsx | 3 ++ .../hooks/useLoginWithEmailAndPassword.ts | 6 +++ .../hooks/useLoginWithPasskey.ts | 5 ++ .../PasskeysPage/hooks/useAddPasskey.ts | 4 ++ .../PasskeysPage/hooks/useRemovePasskey.ts | 4 ++ .../RegisterWithEmailAndPasswordPage.tsx | 7 ++- .../hooks/useRegisterWithEmailAndPassword.tsx | 7 +++ .../ExampleHeader/ExampleHeader.tsx | 4 ++ .../ExampleRouter/createExampleRouter.tsx | 19 ++++++- .../ExampleTopBar/ExampleTopBar.tsx | 9 +++- .../src/client/firebase/analytics/index.ts | 53 +++++++++++++++++++ .../src/client/firebase/config/index.ts | 6 +++ .../components/PageDrawer/PageDrawer.tsx | 15 +++++- .../components/PageHeader/PageHeader.tsx | 5 ++ 20 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 packages/common/src/client/firebase/analytics/index.ts diff --git a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx index 008be0a..90d3461 100644 --- a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx +++ b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx @@ -1,6 +1,7 @@ import Link from 'next/link'; import { queryClient } from '@workspace/common/client/api/components'; +import { track } from '@workspace/common/client/firebase/analytics'; import { EmailField, Form, FormError, SubmitButton } from '@workspace/common/client/form/components'; import { FieldsStack } from '@workspace/common/client/form/components/'; import { Alert, Box, Button, Divider, Words } from '@workspace/common/client/ui-kit'; @@ -58,7 +59,13 @@ export const LoginWithPasskeyPage = () => { /> - }> + } + onClick={() => { + track('example_default_login'); + }} + > Login with Passkey diff --git a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts index 5cc2961..6f4eda5 100644 --- a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts +++ b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts @@ -3,6 +3,7 @@ import { signInWithCustomToken } from 'firebase/auth'; import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; +import { track } from '@workspace/common/client/firebase/analytics'; import { auth } from '@workspace/common/client/firebase/config'; import type { FormProps } from '@workspace/common/client/form/components'; import { logger } from '@workspace/common/logger'; @@ -17,6 +18,7 @@ export function useLoginWithPasskey(): FormProps { + track('example_default_add_passkey_request'); + const { data: { publicKeyOptions }, } = await fetcher({ @@ -47,9 +50,11 @@ export function useAddPasskey() { logger.error(parsedError); snack('error', parsedError.message); + track('example_default_add_passkey_failure'); }, onSuccess() { snack('success', 'Passkey has been successfully added.'); + track('example_default_add_passkey_success'); }, }); } diff --git a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/PasskeysPage/hooks/useRemovePasskey.ts b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/PasskeysPage/hooks/useRemovePasskey.ts index e1326de..14b17a8 100644 --- a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/PasskeysPage/hooks/useRemovePasskey.ts +++ b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/PasskeysPage/hooks/useRemovePasskey.ts @@ -5,6 +5,7 @@ import { queryClient } from '@workspace/common/client/api/components'; import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; import { useAuthUser } from '@workspace/common/client/example/components'; +import { track } from '@workspace/common/client/firebase/analytics'; import type { PostRemovalDialogProps } from '@workspace/common/client/passkeys/components'; import { useSnack } from '@workspace/common/client/snackbar/hooks'; import { logger } from '@workspace/common/logger'; @@ -21,6 +22,8 @@ export function useRemovePasskey(openDialog: (data: PostRemovalDialogProps['data return useMutation({ mutationFn: async (passkeyId: string) => { + track('example_default_remove_passkey_request'); + try { const { data: { publicKeyOptions }, @@ -59,12 +62,16 @@ export function useRemovePasskey(openDialog: (data: PostRemovalDialogProps['data await queryClient.invalidateQueries({ queryKey: ['passkeys'], }); + + track('example_default_remove_passkey_success'); } catch (error) { const parsedError = await parseUnknownError(error); snack('error', parsedError.message); logger.error(error); + + track('example_default_remove_passkey_failure'); } }, }); diff --git a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/RegisterWithPasskeyPage.tsx b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/RegisterWithPasskeyPage.tsx index 5e4ded8..b7e18c8 100644 --- a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/RegisterWithPasskeyPage.tsx +++ b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/RegisterWithPasskeyPage.tsx @@ -36,7 +36,12 @@ export const RegisterWithPasskeyPage = () => { Already have an account? - diff --git a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/hooks/useRegisterWithPasskey.ts b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/hooks/useRegisterWithPasskey.ts index 25ce1f2..7d6ca67 100644 --- a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/hooks/useRegisterWithPasskey.ts +++ b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/RegisterWithPasskeyPage/hooks/useRegisterWithPasskey.ts @@ -3,6 +3,7 @@ import { signInWithCustomToken } from 'firebase/auth'; import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; +import { track } from '@workspace/common/client/firebase/analytics'; import { auth } from '@workspace/common/client/firebase/config'; import type { FormProps } from '@workspace/common/client/form/components'; import { logger } from '@workspace/common/logger'; @@ -20,6 +21,8 @@ export function useRegisterWithPasskey(): FormProps({ method: 'POST', @@ -61,6 +63,8 @@ export function useLoginWithEmailAndPassword({ onSuccess(); redirect('/passkeys'); + + track('example_upgrade_login_success'); } catch (error) { const parsedError = await parseUnknownError(error); @@ -69,6 +73,8 @@ export function useLoginWithEmailAndPassword({ }); logger.error(error); + + track('example_upgrade_login_failure'); } }; } diff --git a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts index 7caa101..88f9dd1 100644 --- a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts +++ b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/LoginWithPasskeyPage/hooks/useLoginWithPasskey.ts @@ -4,6 +4,7 @@ import { signInWithCustomToken } from 'firebase/auth'; import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; +import { track } from '@workspace/common/client/firebase/analytics'; import { auth } from '@workspace/common/client/firebase/config'; import { logger } from '@workspace/common/logger'; @@ -17,6 +18,7 @@ export function useLoginWithPasskey() { return useMutation>>({ mutationFn: async () => { + track('example_upgrade_login_passkey_request'); try { const { data: { publicKeyOptions }, @@ -47,7 +49,10 @@ export function useLoginWithPasskey() { // NOTE: The Authorization header with ID token is set in request inceptor in AuthProvider.tsx component. redirect('/passkeys'); + + track('example_upgrade_login_passkey_success'); } catch (error) { + track('example_upgrade_login_passkey_failure'); throw await parseUnknownError(error); } }, diff --git a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useAddPasskey.ts b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useAddPasskey.ts index 91fc056..1b7fe34 100644 --- a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useAddPasskey.ts +++ b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useAddPasskey.ts @@ -4,6 +4,7 @@ import { useMutation } from '@tanstack/react-query'; import { queryClient } from '@workspace/common/client/api/components'; import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; +import { track } from '@workspace/common/client/firebase/analytics'; import { useSnack } from '@workspace/common/client/snackbar/hooks'; import { logger } from '@workspace/common/logger'; @@ -17,6 +18,7 @@ export function useAddPasskey() { return useMutation({ mutationFn: async () => { + track('example_upgrade_add_passkey_request'); const { data: { publicKeyOptions }, } = await fetcher({ @@ -54,9 +56,11 @@ export function useAddPasskey() { logger.error(parsedError); snack('error', parsedError.message); + track('example_upgrade_add_passkey_failure'); }, onSuccess() { snack('success', 'Passkey has been successfully added.'); + track('example_upgrade_add_passkey_success'); }, }); } diff --git a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useRemovePasskey.ts b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useRemovePasskey.ts index 6b799a6..26b6463 100644 --- a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useRemovePasskey.ts +++ b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/PasskeysPage/hooks/useRemovePasskey.ts @@ -5,6 +5,7 @@ import { queryClient } from '@workspace/common/client/api/components'; import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; import { useAuthUser } from '@workspace/common/client/example/components'; +import { track } from '@workspace/common/client/firebase/analytics'; import type { PostRemovalDialogProps } from '@workspace/common/client/passkeys/components'; import { useSnack } from '@workspace/common/client/snackbar/hooks'; import { logger } from '@workspace/common/logger'; @@ -23,6 +24,7 @@ export function useRemovePasskey(openDialog: (data: PostRemovalDialogProps['data return useMutation({ mutationFn: async (passkeyId: string) => { + track('example_upgrade_remove_passkey_request'); try { const { data: { publicKeyOptions }, @@ -65,12 +67,14 @@ export function useRemovePasskey(openDialog: (data: PostRemovalDialogProps['data await queryClient.invalidateQueries({ queryKey: ['passkeys'], }); + track('example_upgrade_remove_passkey_success'); } catch (error) { const parsedError = await parseUnknownError(error); snack('error', parsedError.message); logger.error(error); + track('example_upgrade_remove_passkey_failure'); } }, }); diff --git a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/RegisterWithEmailAndPasswordPage.tsx b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/RegisterWithEmailAndPasswordPage.tsx index 9eb423e..88e3012 100644 --- a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/RegisterWithEmailAndPasswordPage.tsx +++ b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/RegisterWithEmailAndPasswordPage.tsx @@ -41,7 +41,12 @@ export const RegisterWithEmailAndPasswordPage = () => { Already have an account? - diff --git a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/hooks/useRegisterWithEmailAndPassword.tsx b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/hooks/useRegisterWithEmailAndPassword.tsx index 1a8364b..143c627 100644 --- a/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/hooks/useRegisterWithEmailAndPassword.tsx +++ b/examples/webauthn-upgrade/src/components/WebAuthnUpgradeExamplePage/UpgradeExample/RegisterWithEmailAndPasswordPage/hooks/useRegisterWithEmailAndPassword.tsx @@ -2,6 +2,7 @@ import { sendEmailVerification, signInWithCustomToken, signOut, type User } from import { fetcher } from '@workspace/common/client/api/fetcher'; import { parseUnknownError } from '@workspace/common/client/errors'; +import { track } from '@workspace/common/client/firebase/analytics'; import { auth } from '@workspace/common/client/firebase/config'; import type { FormProps } from '@workspace/common/client/form/components'; import { useSnack } from '@workspace/common/client/snackbar/hooks'; @@ -29,6 +30,8 @@ export function useRegisterWithEmailAndPassword(): FormProps, ); + + track('example_upgrade_register_success'); } catch (error) { const parsedError = await parseUnknownError(error); @@ -69,6 +74,8 @@ export function useRegisterWithEmailAndPassword(): FormProps} variant='text' + onClick={() => { + track('view_github_repo'); + }} sx={theme => ({ color: theme.palette.text.primary })} > View on Github diff --git a/packages/common/src/client/example/components/ExampleRouter/createExampleRouter.tsx b/packages/common/src/client/example/components/ExampleRouter/createExampleRouter.tsx index 4c73e2c..195e413 100644 --- a/packages/common/src/client/example/components/ExampleRouter/createExampleRouter.tsx +++ b/packages/common/src/client/example/components/ExampleRouter/createExampleRouter.tsx @@ -1,5 +1,14 @@ -import { createContext, createElement, useContext, useState, type ReactElement, type ReactNode } from 'react'; +import { + createContext, + createElement, + useContext, + useEffect, + useState, + type ReactElement, + type ReactNode, +} from 'react'; +import { track } from '~client/firebase/analytics'; import { Loader, LoaderContainer } from '~client/ui-kit'; export type Pathname = string; @@ -43,6 +52,14 @@ export function createExampleRouter() { function CurrentExampleRoute() { const { routes, currentRoute } = useExampleRouter(); + useEffect(() => { + if (!currentRoute) { + return; + } + + track('example_route_change', { route: currentRoute }); + }, [currentRoute]); + if (!currentRoute) { return ( diff --git a/packages/common/src/client/example/components/ExampleTopBar/ExampleTopBar.tsx b/packages/common/src/client/example/components/ExampleTopBar/ExampleTopBar.tsx index 48b3df1..21fe68b 100644 --- a/packages/common/src/client/example/components/ExampleTopBar/ExampleTopBar.tsx +++ b/packages/common/src/client/example/components/ExampleTopBar/ExampleTopBar.tsx @@ -1,6 +1,7 @@ import type { ReactNode } from 'react'; import { Fullscreen, FullscreenExit } from '@mui/icons-material'; +import { track } from '~client/firebase/analytics'; import { IconButton, Words } from '~client/ui-kit'; import { useExampleAuthSession } from '../ExampleAuth'; @@ -20,7 +21,13 @@ export const ExampleTopBar = ({ onToggleExpand, expanded, title, onLogout }: Exa return (
- onToggleExpand(!expanded)} sx={{ mr: 'auto' }}> + { + onToggleExpand(!expanded); + track('account_menu_open'); + }} + sx={{ mr: 'auto' }} + > {expanded ? : }
diff --git a/packages/common/src/client/firebase/analytics/index.ts b/packages/common/src/client/firebase/analytics/index.ts new file mode 100644 index 0000000..4a22aa1 --- /dev/null +++ b/packages/common/src/client/firebase/analytics/index.ts @@ -0,0 +1,53 @@ +import { logEvent, type EventParams } from 'firebase/analytics'; + +import { analytics } from '../config'; + +type AnalyticEvent = + // General + | 'hamburger_menu_open' + | 'view_github_repo' + | 'hamburger_default_example' + | 'hamburger_upgrade_example' + | 'account_menu_open' + | 'example_route_change' + + // Default example + | 'example_default_register_request' + | 'example_default_register_success' + | 'example_default_register_failure' + | 'example_default_login_request' + | 'example_default_login_success' + | 'example_default_login_failure' + | 'example_default_add_passkey_request' + | 'example_default_add_passkey_success' + | 'example_default_add_passkey_failure' + | 'example_default_remove_passkey_request' + | 'example_default_remove_passkey_success' + | 'example_default_remove_passkey_failure' + + // Upgrade example + | 'example_upgrade_register_request' + | 'example_upgrade_register_success' + | 'example_upgrade_register_email_verified' + | 'example_upgrade_register_failure' + | 'example_upgrade_login_request' + | 'example_upgrade_login_success' + | 'example_upgrade_login_failure' + | 'example_upgrade_login_passkey_request' + | 'example_upgrade_login_passkey_success' + | 'example_upgrade_login_passkey_failure' + | 'example_upgrade_add_passkey_request' + | 'example_upgrade_add_passkey_success' + | 'example_upgrade_add_passkey_failure' + | 'example_upgrade_remove_passkey_request' + | 'example_upgrade_remove_passkey_success' + | 'example_upgrade_remove_passkey_failure'; + +/** + * Disclaimer: + * All event tracking is anonymous and no personal data is collected. + * This is to help us understand how users are interacting with the app and to help us improve the user experience. + */ +export function track(type: AnalyticEvent, params?: EventParams) { + logEvent(analytics(), type, params); +} diff --git a/packages/common/src/client/firebase/config/index.ts b/packages/common/src/client/firebase/config/index.ts index e7c62e1..1571e31 100644 --- a/packages/common/src/client/firebase/config/index.ts +++ b/packages/common/src/client/firebase/config/index.ts @@ -36,7 +36,13 @@ export const auth = () => { return auth; }; + export const analytics = () => getAnalytics(getFirebaseApp()); + +if ('window' in globalThis) { + analytics().app.automaticDataCollectionEnabled = true; +} + export const db = () => { const app = getFirebaseApp(); const databaseId = env.NEXT_PUBLIC_FIREBASE_DB_ID; diff --git a/packages/common/src/client/layout/components/PageDrawer/PageDrawer.tsx b/packages/common/src/client/layout/components/PageDrawer/PageDrawer.tsx index 8781b98..5a743fa 100644 --- a/packages/common/src/client/layout/components/PageDrawer/PageDrawer.tsx +++ b/packages/common/src/client/layout/components/PageDrawer/PageDrawer.tsx @@ -4,6 +4,7 @@ import { Close, Menu } from '@mui/icons-material'; import { Divider, Drawer, IconButton, List, ListItem, ListItemButton, Stack } from '@mui/material'; import { env } from '~client/env'; +import { track } from '~client/firebase/analytics'; import { Words } from '~client/ui-kit'; import { DrawerContent } from './PageDrawer.styles'; @@ -13,7 +14,17 @@ export const PageDrawer = () => { return ( <> - setOpen(!open)} size='large' aria-label='menu'> + { + if (!open) { + track('hamburger_menu_open'); + } + + return setOpen(!open); + }} + size='large' + aria-label='menu' + > setOpen(false)}> @@ -35,6 +46,7 @@ export const PageDrawer = () => { href={env.NEXT_PUBLIC_DEFAULT_EXAMPLE_ORIGIN} onClick={() => { setOpen(false); + track('hamburger_default_example'); }} > Authenticate with passkeys @@ -46,6 +58,7 @@ export const PageDrawer = () => { href={env.NEXT_PUBLIC_UPGRADE_EXAMPLE_ORIGIN} onClick={() => { setOpen(false); + track('hamburger_upgrade_example'); }} > Upgrade to passkeys diff --git a/packages/common/src/client/layout/components/PageHeader/PageHeader.tsx b/packages/common/src/client/layout/components/PageHeader/PageHeader.tsx index e36a516..58071cb 100644 --- a/packages/common/src/client/layout/components/PageHeader/PageHeader.tsx +++ b/packages/common/src/client/layout/components/PageHeader/PageHeader.tsx @@ -2,6 +2,8 @@ import Head from 'next/head'; import Link from 'next/link'; import { GitHub } from '@mui/icons-material'; +import { track } from '~client/firebase/analytics'; + import { PageDrawer } from '../PageDrawer'; import { IconGithub, LeftSide, PageTitle, StyledContainer } from './PageHeader.styles'; @@ -28,6 +30,9 @@ export const PageHeader = ({ pageTitle }: PageHeaderProps) => { href='https://github.com/cermakjiri/with-webauthn' target='_blank' title='A repository with full stack WebAuthn API examples.' + onClick={() => { + track('view_github_repo'); + }} > From c72bce960f5a701c7b8c0df43fc8f14bcb1c365f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Cerm=C3=A1k?= Date: Thu, 5 Dec 2024 12:10:22 +0100 Subject: [PATCH 5/6] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgade=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- packages/common/package.json | 12 +- packages/logger/index.ts | 3 +- packages/sentry/package.json | 2 +- tooling/eslint/package.json | 10 +- tooling/prettier/package.json | 2 +- yarn.lock | 423 +++++++++++++++++++--------------- 7 files changed, 258 insertions(+), 196 deletions(-) diff --git a/package.json b/package.json index 23b2293..64a7694 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@tooling/eslint": "workspace:*", "@tooling/prettier": "workspace:*", "@tooling/typescript": "workspace:*", - "dotenv": "16.4.5", + "dotenv": "16.4.7", "husky": "9.1.7", "turbo": "2.3.3" }, diff --git a/packages/common/package.json b/packages/common/package.json index 224b8c0..82f6868 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -22,12 +22,12 @@ "@mui/lab": "6.0.0-beta.14", "@mui/material": "6.1.8", "@mui/system": "6.1.8", - "@sentry/nextjs": "8.41.0", - "@simplewebauthn/browser": "11.0.0", - "@simplewebauthn/server": "11.0.0", + "@sentry/nextjs": "8.42.0", + "@simplewebauthn/browser": "12.0.0", + "@simplewebauthn/server": "12.0.0", "@t3-oss/env-nextjs": "0.11.1", - "@tanstack/react-query": "5.61.5", - "@tanstack/react-query-devtools": "5.61.5", + "@tanstack/react-query": "5.62.2", + "@tanstack/react-query-devtools": "5.62.2", "@workspace/logger": "workspace:*", "cookie": "1.0.2", "core-js": "3.39.0", @@ -51,7 +51,7 @@ "@tooling/madge": "workspace:*", "@tooling/prettier": "workspace:*", "@tooling/typescript": "workspace:*", - "@types/react": "18.3.12", + "@types/react": "18.3.13", "@types/react-dom": "18.3.1", "tsc-alias": "1.8.10" } diff --git a/packages/logger/index.ts b/packages/logger/index.ts index 4d1c117..0a008c5 100644 --- a/packages/logger/index.ts +++ b/packages/logger/index.ts @@ -1,7 +1,8 @@ import { captureException, setExtras } from '@sentry/nextjs'; -import type { Extras } from '@sentry/types'; import { getLogger } from 'loglevel'; +type Extras = Parameters[0]; + export function createLogger( name: string, props: { diff --git a/packages/sentry/package.json b/packages/sentry/package.json index 10a886b..37a9de4 100644 --- a/packages/sentry/package.json +++ b/packages/sentry/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "type": "module", "dependencies": { - "@sentry/nextjs": "8.41.0", + "@sentry/nextjs": "8.42.0", "next": "15.0.3", "react": "18.3.1", "react-dom": "18.3.1" diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index 9f6be7b..0a3b77c 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -13,12 +13,12 @@ }, "dependencies": { "@eslint/eslintrc": "3.2.0", - "@eslint/js": "9.15.0", - "@tanstack/eslint-plugin-query": "5.61.4", + "@eslint/js": "9.16.0", + "@tanstack/eslint-plugin-query": "5.62.1", "@tooling/typescript": "workspace:*", "@types/eslint__eslintrc": "2.1.2", "@types/eslint__js": "8.42.3", - "eslint": "9.15.0", + "eslint": "9.16.0", "eslint-config-next": "15.0.3", "eslint-config-prettier": "9.1.0", "eslint-plugin-turbo": "2.3.3", @@ -26,10 +26,10 @@ "react": "18.3.1", "react-dom": "18.3.1", "typescript": "5.7.2", - "typescript-eslint": "8.16.0" + "typescript-eslint": "8.17.0" }, "devDependencies": { - "@eslint/compat": "1.2.3", + "@eslint/compat": "1.2.4", "@tooling/prettier": "workspace:*", "@tooling/staged": "workspace:^", "@types/eslint": "9.6.1" diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json index 45bca07..8defa06 100644 --- a/tooling/prettier/package.json +++ b/tooling/prettier/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@ianvs/prettier-plugin-sort-imports": "4.4.0", - "prettier": "3.4.1" + "prettier": "3.4.2" }, "devDependencies": { "@tooling/staged": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 45b928c..d8dbd36 100644 --- a/yarn.lock +++ b/yarn.lock @@ -437,15 +437,15 @@ __metadata: languageName: node linkType: hard -"@eslint/compat@npm:1.2.3": - version: 1.2.3 - resolution: "@eslint/compat@npm:1.2.3" +"@eslint/compat@npm:1.2.4": + version: 1.2.4 + resolution: "@eslint/compat@npm:1.2.4" peerDependencies: eslint: ^9.10.0 peerDependenciesMeta: eslint: optional: true - checksum: 10c0/b7439e62f73b9a05abea3b54ad8edc171e299171fc4673fc5a2c84d97a584bb9487a7f0bee397342f6574bd53597819a8abe52f1ca72184378cf387275b84e32 + checksum: 10c0/afea54435f0ae6b05f1b732132ae4a9d95ff106be0fc9988ac19f31037eb89b2a0e968212be4d2fbf757ff16923031825a27739d94a365559089dfd8269331e3 languageName: node linkType: hard @@ -484,10 +484,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.15.0": - version: 9.15.0 - resolution: "@eslint/js@npm:9.15.0" - checksum: 10c0/56552966ab1aa95332f70d0e006db5746b511c5f8b5e0c6a9b2d6764ff6d964e0b2622731877cbc4e3f0e74c5b39191290d5f48147be19175292575130d499ab +"@eslint/js@npm:9.16.0": + version: 9.16.0 + resolution: "@eslint/js@npm:9.16.0" + checksum: 10c0/a55846a4ddade720662d36682f3eaaf38eac06eeee12c83bb837bba2b7d550dadcb3445b104219f0bc1da2e09b4fe5fb5ba123b8338c8c787bcfbd540878df75 languageName: node linkType: hard @@ -2670,45 +2670,41 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/browser-utils@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry-internal/browser-utils@npm:8.41.0" +"@sentry-internal/browser-utils@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry-internal/browser-utils@npm:8.42.0" dependencies: - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - checksum: 10c0/287f5a900093ee6a41f6dd574761222db3cbf94591957b8b9146ee206ff461fb00647602656b78d2132c6b3362699c751c4f500ade0ccc16e2faea2cf7235b13 + "@sentry/core": "npm:8.42.0" + checksum: 10c0/a089594831ae956e3a27d32f6f6924f6fc6592ff91c1fb9f9e51b8d670f6a8515e043a1034ea929daaaa0cddd67c7c7043560c2b5bd9a95c325668d3d49d9f5e languageName: node linkType: hard -"@sentry-internal/feedback@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry-internal/feedback@npm:8.41.0" +"@sentry-internal/feedback@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry-internal/feedback@npm:8.42.0" dependencies: - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - checksum: 10c0/a6476b205fb5ce25dedcb19bf39273ed76d0026e17be9e4a1df43d3a91e395f76a0e47d8302ab3ecd176e7c9ed99893ffb2c759e57e59e326c9f4330bddda812 + "@sentry/core": "npm:8.42.0" + checksum: 10c0/6a3760cf238cfc376639b7bf07370541a53d03ca8c36b0deeb1fb1d36aea84bf5101eb558bab90d998d154646cd6ad143ab6b1cc455b02a71ebd42427de3609f languageName: node linkType: hard -"@sentry-internal/replay-canvas@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry-internal/replay-canvas@npm:8.41.0" +"@sentry-internal/replay-canvas@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry-internal/replay-canvas@npm:8.42.0" dependencies: - "@sentry-internal/replay": "npm:8.41.0" - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - checksum: 10c0/2ec23d499d81a465e8055705d177308d2ad02428b7b8c0b1aadb1a288e4e559270998d57ea1dd78e2c670cd347fa0dc9c6561c2bbf0c786a31d1cc9b02a2d1e8 + "@sentry-internal/replay": "npm:8.42.0" + "@sentry/core": "npm:8.42.0" + checksum: 10c0/77f1bafb92f9ed3839e0049da7916ddaebb48c9d1e4178ba616a89007095896bd767c4834f1a38864048f53a8f45ed88696096741b6971b48543c6c361ad6b14 languageName: node linkType: hard -"@sentry-internal/replay@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry-internal/replay@npm:8.41.0" +"@sentry-internal/replay@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry-internal/replay@npm:8.42.0" dependencies: - "@sentry-internal/browser-utils": "npm:8.41.0" - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - checksum: 10c0/0d7e0bb9f94157790d5137b274cd08e01c5b6f97890941e51502bc98896f8a26cbe32a4e25658f79ac594922c3c4d0bcb62e46c52f7dc361e1eb502ed2e769b8 + "@sentry-internal/browser-utils": "npm:8.42.0" + "@sentry/core": "npm:8.42.0" + checksum: 10c0/1e30ef7fcb5b034d4374f0571c044d7a31c3223b6a639f35887f6d3e507dc85ff0b451c1b3aad34b2f13e5cd10a8fe944e712b90e4225e63442d94d7575d3489 languageName: node linkType: hard @@ -2719,17 +2715,16 @@ __metadata: languageName: node linkType: hard -"@sentry/browser@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/browser@npm:8.41.0" +"@sentry/browser@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/browser@npm:8.42.0" dependencies: - "@sentry-internal/browser-utils": "npm:8.41.0" - "@sentry-internal/feedback": "npm:8.41.0" - "@sentry-internal/replay": "npm:8.41.0" - "@sentry-internal/replay-canvas": "npm:8.41.0" - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - checksum: 10c0/a0a8f263d6b2c0343af005f0f9415b5229e1024281e30f88c510ff802f9efc3052bd60ff010bf5645cd3ed67f00cbd5bb29191de493837c96bd33d7fd27efe8e + "@sentry-internal/browser-utils": "npm:8.42.0" + "@sentry-internal/feedback": "npm:8.42.0" + "@sentry-internal/replay": "npm:8.42.0" + "@sentry-internal/replay-canvas": "npm:8.42.0" + "@sentry/core": "npm:8.42.0" + checksum: 10c0/1ba92bd22ee6f06db24e2b0ecb12c4db4e1864dd9496853288e22006e4d1dda13cd31cf4fc7540e22477b6b4b331b6850b50aba4bcc4a43e6c3345079b19f91f languageName: node linkType: hard @@ -2835,30 +2830,27 @@ __metadata: languageName: node linkType: hard -"@sentry/core@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/core@npm:8.41.0" - dependencies: - "@sentry/types": "npm:8.41.0" - checksum: 10c0/915fc2b64deef6d54053830d86dbe46e00eb445c7e82da7d31915241aeb7cc4919430e91ef5e9f6c270d102911a692af1138d318fd4660fc65692fec92365100 +"@sentry/core@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/core@npm:8.42.0" + checksum: 10c0/dae94cbb278f9e6db8b93ebe5d9f0b6285bb20f90da42a0a96f35d996132c0e66c92a00ca8a6d6920a9f54460780320b8d4b9afa670b147b12bd9ea64a435793 languageName: node linkType: hard -"@sentry/nextjs@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/nextjs@npm:8.41.0" +"@sentry/nextjs@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/nextjs@npm:8.42.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" "@opentelemetry/instrumentation-http": "npm:0.53.0" "@opentelemetry/semantic-conventions": "npm:^1.27.0" "@rollup/plugin-commonjs": "npm:28.0.1" - "@sentry-internal/browser-utils": "npm:8.41.0" - "@sentry/core": "npm:8.41.0" - "@sentry/node": "npm:8.41.0" - "@sentry/opentelemetry": "npm:8.41.0" - "@sentry/react": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - "@sentry/vercel-edge": "npm:8.41.0" + "@sentry-internal/browser-utils": "npm:8.42.0" + "@sentry/core": "npm:8.42.0" + "@sentry/node": "npm:8.42.0" + "@sentry/opentelemetry": "npm:8.42.0" + "@sentry/react": "npm:8.42.0" + "@sentry/vercel-edge": "npm:8.42.0" "@sentry/webpack-plugin": "npm:2.22.6" chalk: "npm:3.0.0" resolve: "npm:1.22.8" @@ -2866,13 +2858,13 @@ __metadata: stacktrace-parser: "npm:^0.1.10" peerDependencies: next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 - checksum: 10c0/0366521ea6cedbc0b71198e97c44d4cb172ff00b9c7dab69b3513efe7e5bb1b5def927256bf02edfa4b0b65891e6b7a96042af1d6a9438850cc3be989047c3de + checksum: 10c0/27779e9b25e562eb0f75d70ed11ff8f1112024412bf0954493f47973199090f999040e3e64efd53a9fa15fb4e02547b6a3d031c32049947149d91c825cd5560e languageName: node linkType: hard -"@sentry/node@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/node@npm:8.41.0" +"@sentry/node@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/node@npm:8.42.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" "@opentelemetry/context-async-hooks": "npm:^1.25.1" @@ -2906,59 +2898,48 @@ __metadata: "@opentelemetry/sdk-trace-base": "npm:^1.26.0" "@opentelemetry/semantic-conventions": "npm:^1.27.0" "@prisma/instrumentation": "npm:5.19.1" - "@sentry/core": "npm:8.41.0" - "@sentry/opentelemetry": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" + "@sentry/core": "npm:8.42.0" + "@sentry/opentelemetry": "npm:8.42.0" import-in-the-middle: "npm:^1.11.2" - checksum: 10c0/df5e1b17eb03e8b60f3f35ce63da8d236e7bab0dd0482710e936ca0995caaa328e0d2da513c8442f60ac06b754c2bfbc5871fe1e0492f6cc12eb0e8163aaae31 + checksum: 10c0/8c18f7188d7204f7a8c92ec5738bfedcf61967f60e1c48db2964e23385010787576e89e00bb37e6468b338c1fc4f2b9c677c84ac1fc32ddeb24a3888e7084efc languageName: node linkType: hard -"@sentry/opentelemetry@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/opentelemetry@npm:8.41.0" +"@sentry/opentelemetry@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/opentelemetry@npm:8.42.0" dependencies: - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" + "@sentry/core": "npm:8.42.0" peerDependencies: "@opentelemetry/api": ^1.9.0 "@opentelemetry/core": ^1.25.1 "@opentelemetry/instrumentation": ^0.54.0 "@opentelemetry/sdk-trace-base": ^1.26.0 "@opentelemetry/semantic-conventions": ^1.27.0 - checksum: 10c0/d817dd977e4730d4a5fe7330f43bf8fae1c73e9879158ec97cd03c7e9eddafc4ac775c755f62002e8795812563ee7acb2a4ef3a9bee53613a1ca489df7562904 + checksum: 10c0/39c2ac0366975162adfde0be9d806783de38764d883f271df1dd9e606baeafc4bc159eb2661ee2ce40fd4aecdd3a4d7f6c837d0b78e4a81b4af789a9f7ac15cb languageName: node linkType: hard -"@sentry/react@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/react@npm:8.41.0" +"@sentry/react@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/react@npm:8.42.0" dependencies: - "@sentry/browser": "npm:8.41.0" - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" + "@sentry/browser": "npm:8.42.0" + "@sentry/core": "npm:8.42.0" hoist-non-react-statics: "npm:^3.3.2" peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - checksum: 10c0/8db67897f68c75b7ec03579bda06f7a418a617a5e29bc110a9ee9e6675d8c91395a8c381aab595753928c9f80fd44e19a0397613bc285f9fedd19956726bd279 + checksum: 10c0/fccc9b9c541901d861c1da833ac6715e9f836aa05b7bfc0c8523a9c9c5b5228b2e07e67176c6df35752ae3d960bc9b39a90cb51c34df453c531717d9f89991c7 languageName: node linkType: hard -"@sentry/types@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/types@npm:8.41.0" - checksum: 10c0/dd8643f63811802c8816fa9d6fbb495b646a4e271f66740dd95496a1f99278639298eb0c76dd555d7f6055516f9d7b4ad6aec447357748345a9b31373c87ce9f - languageName: node - linkType: hard - -"@sentry/vercel-edge@npm:8.41.0": - version: 8.41.0 - resolution: "@sentry/vercel-edge@npm:8.41.0" +"@sentry/vercel-edge@npm:8.42.0": + version: 8.42.0 + resolution: "@sentry/vercel-edge@npm:8.42.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" - "@sentry/core": "npm:8.41.0" - "@sentry/types": "npm:8.41.0" - checksum: 10c0/c88d3e3dc493c302fef853070f5a4792193265eb43f11a7cf7f60a305528ca75a71d8b33bc74d69296541d5426469d1343708a381a677bc0ee1c02e030a624c3 + "@sentry/core": "npm:8.42.0" + checksum: 10c0/d390fc43d19546f5578a0625b6e8950c769d876e10f10fc8478d81cf9746b1d59f8403040b04ed5bf42695cdc4f630b5897f731bdaf8cfa912e1179472e87ce8 languageName: node linkType: hard @@ -2975,18 +2956,18 @@ __metadata: languageName: node linkType: hard -"@simplewebauthn/browser@npm:11.0.0": - version: 11.0.0 - resolution: "@simplewebauthn/browser@npm:11.0.0" +"@simplewebauthn/browser@npm:12.0.0": + version: 12.0.0 + resolution: "@simplewebauthn/browser@npm:12.0.0" dependencies: - "@simplewebauthn/types": "npm:^11.0.0" - checksum: 10c0/c3d1886b971af38d1aebb883b7901e73aaf8b433750df7e00e5881e932431263d4a5862df70faae237acc519aeb6419ef2adda5c661596af1dacd153ad6633da + "@simplewebauthn/types": "npm:^12.0.0" + checksum: 10c0/bdf0086460b6274e5fc085139ddd092bf5da369868402e98b9eb1839a5fc507b18ede234ff9c51b651ba93101668faf602d5b7e5db2a58f69f84fc67c5a3d14d languageName: node linkType: hard -"@simplewebauthn/server@npm:11.0.0": - version: 11.0.0 - resolution: "@simplewebauthn/server@npm:11.0.0" +"@simplewebauthn/server@npm:12.0.0": + version: 12.0.0 + resolution: "@simplewebauthn/server@npm:12.0.0" dependencies: "@hexagon/base64": "npm:^1.1.27" "@levischuck/tiny-cbor": "npm:^0.2.2" @@ -2995,16 +2976,16 @@ __metadata: "@peculiar/asn1-rsa": "npm:^2.3.8" "@peculiar/asn1-schema": "npm:^2.3.8" "@peculiar/asn1-x509": "npm:^2.3.8" - "@simplewebauthn/types": "npm:^11.0.0" + "@simplewebauthn/types": "npm:^12.0.0" cross-fetch: "npm:^4.0.0" - checksum: 10c0/0bdd596626dc58da9132a61a4638a895c4f534b1883817549919c622f07deee0999d943c6917ce356469826cc05cf474129494fb685358e26369f0bf67d95dd2 + checksum: 10c0/960025efd268c71ac56ccef433f048806dd142ac5e96ef72f383e93902e9ad22964f16fe7d83fcc94f50cf6372e20e1e9a75d89a7a78d1f026dfab05a2501c35 languageName: node linkType: hard -"@simplewebauthn/types@npm:^11.0.0": - version: 11.0.0 - resolution: "@simplewebauthn/types@npm:11.0.0" - checksum: 10c0/ae2ef16ed62aaae51f1ce98d16c5a4b1f0939679ff2af4d70631138291f67ed285ed735d8dc6f163784d4e621ba5cd05badfb7b1ec8d96b47fe05dd7191027dd +"@simplewebauthn/types@npm:^12.0.0": + version: 12.0.0 + resolution: "@simplewebauthn/types@npm:12.0.0" + checksum: 10c0/b7ce0ae692ea1e069ad9cb028fc1ccfe3f37e0f197825ba9e468e60194f463e88f5db254ddea296019b470a465ffaffa96fe27bb5e1e5d5d14bfcd068b04abed languageName: node linkType: hard @@ -3052,21 +3033,21 @@ __metadata: languageName: node linkType: hard -"@tanstack/eslint-plugin-query@npm:5.61.4": - version: 5.61.4 - resolution: "@tanstack/eslint-plugin-query@npm:5.61.4" +"@tanstack/eslint-plugin-query@npm:5.62.1": + version: 5.62.1 + resolution: "@tanstack/eslint-plugin-query@npm:5.62.1" dependencies: "@typescript-eslint/utils": "npm:^8.15.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/1cd38fb6f534d277baffebb4893ddc246a2fb041d97a4bfc3be465313ad3d92e31d683e0ad0ccc16858b167b330b0d72bb1743ba5fb92babd584d7b011d77ae7 + checksum: 10c0/3c546ab85d9efcf41d82093ea6b9b3e5a5a474af5137e2c424eabd187621483d83030446d80496c2ea506f77b3bdcd26960f167dbaab634b93122c50e7d5fe1a languageName: node linkType: hard -"@tanstack/query-core@npm:5.61.5": - version: 5.61.5 - resolution: "@tanstack/query-core@npm:5.61.5" - checksum: 10c0/597af37641eb7e4123259f2f4244de977de98b1cab245a246f892b73bceac78d02e49f3368304e74691ab5ed74aa2b203b0a17045406f0303bbf962696856db9 +"@tanstack/query-core@npm:5.62.2": + version: 5.62.2 + resolution: "@tanstack/query-core@npm:5.62.2" + checksum: 10c0/5d271dbc43d780f1210140b4f4e82af4a773fb57c8d649897a1203e1478c99efed3249523f4073cb7c351a8ce7c0bab5f019b8955927c2f67d3a17dac6ad3947 languageName: node linkType: hard @@ -3077,26 +3058,26 @@ __metadata: languageName: node linkType: hard -"@tanstack/react-query-devtools@npm:5.61.5": - version: 5.61.5 - resolution: "@tanstack/react-query-devtools@npm:5.61.5" +"@tanstack/react-query-devtools@npm:5.62.2": + version: 5.62.2 + resolution: "@tanstack/react-query-devtools@npm:5.62.2" dependencies: "@tanstack/query-devtools": "npm:5.61.4" peerDependencies: - "@tanstack/react-query": ^5.61.5 + "@tanstack/react-query": ^5.62.2 react: ^18 || ^19 - checksum: 10c0/62c7d105e6d5bc635cd0545654ebf7b6d95856d51423a3db686b86abc1c102b0bbe4d9d83f2a7b5111dc8f07a83b32b821cc37562ee9c3e45d74d5d1b198a06c + checksum: 10c0/34a83eec53bfc14e1eac5a6dcc09e79e531a6246b476fa6737201ca42591118c936c25dfcd6d2e2d3881363a60928d35b9ca7d5b5b32b724f81c5f3e1f418abf languageName: node linkType: hard -"@tanstack/react-query@npm:5.61.5": - version: 5.61.5 - resolution: "@tanstack/react-query@npm:5.61.5" +"@tanstack/react-query@npm:5.62.2": + version: 5.62.2 + resolution: "@tanstack/react-query@npm:5.62.2" dependencies: - "@tanstack/query-core": "npm:5.61.5" + "@tanstack/query-core": "npm:5.62.2" peerDependencies: react: ^18 || ^19 - checksum: 10c0/1c535836025622a13f7a53947bc715147a34a5f98bcda32c0afd56f605073f21788b19f3e47e21876cad2cff7c9cd3b25cadd12eba5ddcc4c7e37f75d0742c32 + checksum: 10c0/3032d40af948781bbd2317766cc327326ae348bd3119d2e56ebb307f95da985b7063fa9a27efd172b5656734986ffd5b12232839ba631d867a540f2ec80f6746 languageName: node linkType: hard @@ -3104,17 +3085,17 @@ __metadata: version: 0.0.0-use.local resolution: "@tooling/eslint@workspace:tooling/eslint" dependencies: - "@eslint/compat": "npm:1.2.3" + "@eslint/compat": "npm:1.2.4" "@eslint/eslintrc": "npm:3.2.0" - "@eslint/js": "npm:9.15.0" - "@tanstack/eslint-plugin-query": "npm:5.61.4" + "@eslint/js": "npm:9.16.0" + "@tanstack/eslint-plugin-query": "npm:5.62.1" "@tooling/prettier": "workspace:*" "@tooling/staged": "workspace:^" "@tooling/typescript": "workspace:*" "@types/eslint": "npm:9.6.1" "@types/eslint__eslintrc": "npm:2.1.2" "@types/eslint__js": "npm:8.42.3" - eslint: "npm:9.15.0" + eslint: "npm:9.16.0" eslint-config-next: "npm:15.0.3" eslint-config-prettier: "npm:9.1.0" eslint-plugin-turbo: "npm:2.3.3" @@ -3122,7 +3103,7 @@ __metadata: react: "npm:18.3.1" react-dom: "npm:18.3.1" typescript: "npm:5.7.2" - typescript-eslint: "npm:8.16.0" + typescript-eslint: "npm:8.17.0" bin: eslint-lint: ./bin/cli.js languageName: unknown @@ -3146,7 +3127,7 @@ __metadata: "@ianvs/prettier-plugin-sort-imports": "npm:4.4.0" "@tooling/staged": "workspace:^" "@tooling/typescript": "workspace:*" - prettier: "npm:3.4.1" + prettier: "npm:3.4.2" bin: prettier-format: ./bin/cli.js languageName: unknown @@ -3481,7 +3462,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:18.3.12": +"@types/react@npm:*, @types/react@npm:16 || 17 || 18": version: 18.3.12 resolution: "@types/react@npm:18.3.12" dependencies: @@ -3491,6 +3472,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:18.3.13": + version: 18.3.13 + resolution: "@types/react@npm:18.3.13" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10c0/91815e00157deb179fa670aa2dfc491952698b7743ffddca0e3e0f16e7a18454f3f5ef72321a07386c49e721563b9d280dbbdfae039face764e2fdd8ad949d4b + languageName: node + linkType: hard + "@types/request@npm:^2.48.8": version: 2.48.12 resolution: "@types/request@npm:2.48.12" @@ -3547,15 +3538,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.16.0": - version: 8.16.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.16.0" +"@typescript-eslint/eslint-plugin@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.17.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.16.0" - "@typescript-eslint/type-utils": "npm:8.16.0" - "@typescript-eslint/utils": "npm:8.16.0" - "@typescript-eslint/visitor-keys": "npm:8.16.0" + "@typescript-eslint/scope-manager": "npm:8.17.0" + "@typescript-eslint/type-utils": "npm:8.17.0" + "@typescript-eslint/utils": "npm:8.17.0" + "@typescript-eslint/visitor-keys": "npm:8.17.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -3566,7 +3557,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/b03612b726ee5aff631cd50e05ceeb06a522e64465e4efdc134e3a27a09406b959ef7a05ec4acef1956b3674dc4fedb6d3a62ce69382f9e30c227bd4093003e5 + checksum: 10c0/d78778173571a9a1370345bc2aa3e850235a489d16b8a8b5ba3086b988bbef7549bdae38e509d7a679ba3179c688cc5a408376b158be402770836e94ffc9602d languageName: node linkType: hard @@ -3593,21 +3584,21 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.16.0": - version: 8.16.0 - resolution: "@typescript-eslint/parser@npm:8.16.0" +"@typescript-eslint/parser@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/parser@npm:8.17.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.16.0" - "@typescript-eslint/types": "npm:8.16.0" - "@typescript-eslint/typescript-estree": "npm:8.16.0" - "@typescript-eslint/visitor-keys": "npm:8.16.0" + "@typescript-eslint/scope-manager": "npm:8.17.0" + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/typescript-estree": "npm:8.17.0" + "@typescript-eslint/visitor-keys": "npm:8.17.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/e49c6640a7a863a16baecfbc5b99392a4731e9c7e9c9aaae4efbc354e305485fe0f39a28bf0acfae85bc01ce37fe0cc140fd315fdaca8b18f9b5e0addff8ceae + checksum: 10c0/2543deadf01302a92d3b6f58a4c14f98d8936c4d976e7da05e3bb65608f19d8de93b25282e343c304eca3e3f37f2ac23e97fa9c11c6edff36dd2d4f6b601a630 languageName: node linkType: hard @@ -3649,6 +3640,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/scope-manager@npm:8.17.0" + dependencies: + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/visitor-keys": "npm:8.17.0" + checksum: 10c0/0c08d14240bad4b3f6874f08ba80b29db1a6657437089a6f109db458c544d835bcdc06ba9140bb4f835233ba4326d9a86e6cf6bdb5209960d2f7025aa3191f4f + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:8.13.0": version: 8.13.0 resolution: "@typescript-eslint/type-utils@npm:8.13.0" @@ -3664,12 +3665,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.16.0": - version: 8.16.0 - resolution: "@typescript-eslint/type-utils@npm:8.16.0" +"@typescript-eslint/type-utils@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/type-utils@npm:8.17.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.16.0" - "@typescript-eslint/utils": "npm:8.16.0" + "@typescript-eslint/typescript-estree": "npm:8.17.0" + "@typescript-eslint/utils": "npm:8.17.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependencies: @@ -3677,7 +3678,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/24c0e815c8bdf99bf488c7528bd6a7c790e8b3b674cb7fb075663afc2ee26b48e6f4cf7c0d14bb21e2376ca62bd8525cbcb5688f36135b00b62b1d353d7235b9 + checksum: 10c0/6138ec71b5692d4b5e0bf3d7f66a6fa4e91ddea7031907b0ac45a7693df0a2f4cc5bca7218311e0639620d636ceb7efec83a137dfcd5938304d873b774fcc8bd languageName: node linkType: hard @@ -3702,6 +3703,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/types@npm:8.17.0" + checksum: 10c0/26b1bf9dfc3ee783c85c6f354b84c28706d5689d777f3ff2de2cb496e45f9d0189c0d561c03ccbc8b24712438be17cf63dd0871ff3ca2083e7f48749770d1893 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.13.0": version: 8.13.0 resolution: "@typescript-eslint/typescript-estree@npm:8.13.0" @@ -3740,6 +3748,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.17.0" + dependencies: + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/visitor-keys": "npm:8.17.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/523013f9b5cf2c58c566868e4c3b0b9ac1b4807223a6d64e2a7c58e01e53b6587ba61f1a8241eade361f3f426d6057657515473176141ef8aebb352bc0d223ce + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:^7.6.0": version: 7.18.0 resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" @@ -3773,7 +3800,24 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.16.0, @typescript-eslint/utils@npm:^8.15.0": +"@typescript-eslint/utils@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/utils@npm:8.17.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.17.0" + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/typescript-estree": "npm:8.17.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/a9785ae5f7e7b51d521dc3f48b15093948e4fcd03352c0b60f39bae366cbc935947d215f91e2ae3182d52fa6affb5ccbb50feff487bd1209011f3e0da02cdf07 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^8.15.0": version: 8.16.0 resolution: "@typescript-eslint/utils@npm:8.16.0" dependencies: @@ -3820,6 +3864,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.17.0" + dependencies: + "@typescript-eslint/types": "npm:8.17.0" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/9144c4e4a63034fb2031a0ee1fc77e80594f30cab3faafa9a1f7f83782695774dd32fac8986f260698b4e150b4dd52444f2611c07e4c101501f08353eb47c82c + languageName: node + linkType: hard + "@vue/compiler-core@npm:3.5.12": version: 3.5.12 resolution: "@vue/compiler-core@npm:3.5.12" @@ -3890,17 +3944,17 @@ __metadata: "@mui/lab": "npm:6.0.0-beta.14" "@mui/material": "npm:6.1.8" "@mui/system": "npm:6.1.8" - "@sentry/nextjs": "npm:8.41.0" - "@simplewebauthn/browser": "npm:11.0.0" - "@simplewebauthn/server": "npm:11.0.0" + "@sentry/nextjs": "npm:8.42.0" + "@simplewebauthn/browser": "npm:12.0.0" + "@simplewebauthn/server": "npm:12.0.0" "@t3-oss/env-nextjs": "npm:0.11.1" - "@tanstack/react-query": "npm:5.61.5" - "@tanstack/react-query-devtools": "npm:5.61.5" + "@tanstack/react-query": "npm:5.62.2" + "@tanstack/react-query-devtools": "npm:5.62.2" "@tooling/eslint": "workspace:*" "@tooling/madge": "workspace:*" "@tooling/prettier": "workspace:*" "@tooling/typescript": "workspace:*" - "@types/react": "npm:18.3.12" + "@types/react": "npm:18.3.13" "@types/react-dom": "npm:18.3.1" "@workspace/logger": "workspace:*" cookie: "npm:1.0.2" @@ -3942,7 +3996,7 @@ __metadata: version: 0.0.0-use.local resolution: "@workspace/sentry@workspace:packages/sentry" dependencies: - "@sentry/nextjs": "npm:8.41.0" + "@sentry/nextjs": "npm:8.42.0" "@tooling/eslint": "workspace:*" "@tooling/prettier": "workspace:*" "@tooling/typescript": "workspace:*" @@ -4998,7 +5052,14 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:16.4.5, dotenv@npm:^16.3.1": +"dotenv@npm:16.4.7": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": version: 16.4.5 resolution: "dotenv@npm:16.4.5" checksum: 10c0/48d92870076832af0418b13acd6e5a5a3e83bb00df690d9812e94b24aff62b88ade955ac99a05501305b8dc8f1b0ee7638b18493deb6fe93d680e5220936292f @@ -5495,16 +5556,16 @@ __metadata: languageName: node linkType: hard -"eslint@npm:9.15.0": - version: 9.15.0 - resolution: "eslint@npm:9.15.0" +"eslint@npm:9.16.0": + version: 9.16.0 + resolution: "eslint@npm:9.16.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" "@eslint/config-array": "npm:^0.19.0" "@eslint/core": "npm:^0.9.0" "@eslint/eslintrc": "npm:^3.2.0" - "@eslint/js": "npm:9.15.0" + "@eslint/js": "npm:9.16.0" "@eslint/plugin-kit": "npm:^0.2.3" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" @@ -5540,7 +5601,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/d0d7606f36bfcccb1c3703d0a24df32067b207a616f17efe5fb1765a91d13f085afffc4fc97ecde4ab9c9f4edd64d9b4ce750e13ff7937a25074b24bee15b20f + checksum: 10c0/f36d12652c6f20bab8a77375b8ad29a6af030c3840deb0a5f9dd4cee49d68a2d68d7dc73b0c25918df59d83cd686dd5712e11387e696e1f3842e8dde15cd3255 languageName: node linkType: hard @@ -8278,12 +8339,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.4.1": - version: 3.4.1 - resolution: "prettier@npm:3.4.1" +"prettier@npm:3.4.2": + version: 3.4.2 + resolution: "prettier@npm:3.4.2" bin: prettier: bin/prettier.cjs - checksum: 10c0/2d6cc3101ad9de72b49c59339480b0983e6ff6742143da0c43f476bf3b5ef88ede42ebd9956d7a0a8fa59f7a5990e8ef03c9ad4c37f7e4c9e5db43ee0853156c + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 languageName: node linkType: hard @@ -9652,19 +9713,19 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:8.16.0": - version: 8.16.0 - resolution: "typescript-eslint@npm:8.16.0" +"typescript-eslint@npm:8.17.0": + version: 8.17.0 + resolution: "typescript-eslint@npm:8.17.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.16.0" - "@typescript-eslint/parser": "npm:8.16.0" - "@typescript-eslint/utils": "npm:8.16.0" + "@typescript-eslint/eslint-plugin": "npm:8.17.0" + "@typescript-eslint/parser": "npm:8.17.0" + "@typescript-eslint/utils": "npm:8.17.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/3da9401d6c2416b9d95c96a41a9423a5379d233a120cd3304e2c03f191d350ce91cf0c7e60017f7b10c93b4cc1190592702735735b771c1ce1bf68f71a9f1647 + checksum: 10c0/b148525769b9afa789ad3c2d52249fa78e67a225d48d17f2f0117b0e8b52566112be3a35de6cd26bcaffba3114be87c1070f7f4b4e2b730c059668fec4a530bc languageName: node linkType: hard @@ -10009,7 +10070,7 @@ __metadata: "@tooling/eslint": "workspace:*" "@tooling/prettier": "workspace:*" "@tooling/typescript": "workspace:*" - dotenv: "npm:16.4.5" + dotenv: "npm:16.4.7" husky: "npm:9.1.7" turbo: "npm:2.3.3" languageName: unknown From 11d596993bde661a17fbc4c845a6fef44085b40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Cerm=C3=A1k?= Date: Thu, 5 Dec 2024 12:11:15 +0100 Subject: [PATCH 6/6] =?UTF-8?q?=F0=9F=90=9B=20Remove=20invalid=20event=20n?= =?UTF-8?q?ame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LoginWithPasskeyPage/LoginWithPasskeyPage.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx index 90d3461..008be0a 100644 --- a/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx +++ b/examples/webauthn-default/src/components/WebAuthnDefaultExamplePage/DefaultExample/LoginWithPasskeyPage/LoginWithPasskeyPage.tsx @@ -1,7 +1,6 @@ import Link from 'next/link'; import { queryClient } from '@workspace/common/client/api/components'; -import { track } from '@workspace/common/client/firebase/analytics'; import { EmailField, Form, FormError, SubmitButton } from '@workspace/common/client/form/components'; import { FieldsStack } from '@workspace/common/client/form/components/'; import { Alert, Box, Button, Divider, Words } from '@workspace/common/client/ui-kit'; @@ -59,13 +58,7 @@ export const LoginWithPasskeyPage = () => { /> - } - onClick={() => { - track('example_default_login'); - }} - > + }> Login with Passkey