From dfcb90b15fd0f946c8f3d319854021e377d01d56 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 00:35:13 +0200 Subject: [PATCH 01/13] chore(nextjs): Drop `app-beta` subpath import --- packages/nextjs/app-beta/client/package.json | 5 - packages/nextjs/app-beta/package.json | 5 - packages/nextjs/package.json | 13 +- .../nextjs/src/app-beta/ClerkProvider.tsx | 36 ----- .../__snapshots__/exports.test.ts.snap | 19 --- .../src/app-beta/__tests__/exports.test.ts | 7 - packages/nextjs/src/app-beta/auth.ts | 31 ---- packages/nextjs/src/app-beta/clerkClient.ts | 13 -- .../src/app-beta/client/ClerkProvider.tsx | 68 --------- .../nextjs/src/app-beta/client/clerk-react.ts | 137 ------------------ packages/nextjs/src/app-beta/client/index.ts | 37 ----- .../src/app-beta/client/ui-components.tsx | 52 ------- .../src/app-beta/control-components.tsx | 28 ---- packages/nextjs/src/app-beta/currentUser.ts | 18 --- packages/nextjs/src/app-beta/index.ts | 14 -- 15 files changed, 1 insertion(+), 482 deletions(-) delete mode 100644 packages/nextjs/app-beta/client/package.json delete mode 100644 packages/nextjs/app-beta/package.json delete mode 100644 packages/nextjs/src/app-beta/ClerkProvider.tsx delete mode 100644 packages/nextjs/src/app-beta/__tests__/__snapshots__/exports.test.ts.snap delete mode 100644 packages/nextjs/src/app-beta/__tests__/exports.test.ts delete mode 100644 packages/nextjs/src/app-beta/auth.ts delete mode 100644 packages/nextjs/src/app-beta/clerkClient.ts delete mode 100644 packages/nextjs/src/app-beta/client/ClerkProvider.tsx delete mode 100644 packages/nextjs/src/app-beta/client/clerk-react.ts delete mode 100644 packages/nextjs/src/app-beta/client/index.ts delete mode 100644 packages/nextjs/src/app-beta/client/ui-components.tsx delete mode 100644 packages/nextjs/src/app-beta/control-components.tsx delete mode 100644 packages/nextjs/src/app-beta/currentUser.ts delete mode 100644 packages/nextjs/src/app-beta/index.ts diff --git a/packages/nextjs/app-beta/client/package.json b/packages/nextjs/app-beta/client/package.json deleted file mode 100644 index 2bf42103871..00000000000 --- a/packages/nextjs/app-beta/client/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "main": "../../dist/cjs/app-beta/client/index.js", - "module": "../../dist/esm/app-beta/client/index.js", - "types": "../../dist/types/app-beta/client/index.d.ts" -} diff --git a/packages/nextjs/app-beta/package.json b/packages/nextjs/app-beta/package.json deleted file mode 100644 index d2767d199c5..00000000000 --- a/packages/nextjs/app-beta/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "main": "../dist/cjs/app-beta/index.js", - "module": "../dist/esm/app-beta/index.js", - "types": "../dist/types/app-beta/index.d.ts" -} diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 46ab026bcb8..2f80eba9209 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -49,16 +49,6 @@ "types": "./dist/types/edge-middleware/index.d.ts", "import": "./dist/esm/edge-middleware/index.js", "require": "./dist/cjs/edge-middleware/index.js" - }, - "./app-beta": { - "types": "./dist/types/app-beta/index.d.ts", - "import": "./dist/esm/app-beta/index.js", - "require": "./dist/cjs/app-beta/index.js" - }, - "./app-beta/client": { - "types": "./dist/types/app-beta/client/index.d.ts", - "import": "./dist/esm/app-beta/client/index.js", - "require": "./dist/cjs/app-beta/client/index.js" } }, "main": "./dist/cjs/index.js", @@ -69,8 +59,7 @@ "server", "api", "edge-middleware", - "ssr", - "app-beta" + "ssr" ], "scripts": { "build": "npm run clean && tsup", diff --git a/packages/nextjs/src/app-beta/ClerkProvider.tsx b/packages/nextjs/src/app-beta/ClerkProvider.tsx deleted file mode 100644 index c467ec694e4..00000000000 --- a/packages/nextjs/src/app-beta/ClerkProvider.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { deprecated } from '@clerk/shared/deprecated'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); -/* eslint-disable turbo/no-undeclared-env-vars */ -import type { IsomorphicClerkOptions } from '@clerk/clerk-react'; -import type { InitialState, PublishableKeyOrFrontendApi } from '@clerk/types'; -import React from 'react'; - -import { initialState } from './auth'; -import { ClerkProvider as ClerkProviderClient } from './client/ClerkProvider'; - -type NextAppClerkProviderProps = { - children: React.ReactNode; -} & Omit & - Partial; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export function ClerkProvider(props: NextAppClerkProviderProps) { - const state = (initialState()?.__clerk_ssr_state || { sessionId: null, orgId: null, userId: null }) as InitialState; - return ( - // @ts-expect-error - - ); -} diff --git a/packages/nextjs/src/app-beta/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/app-beta/__tests__/__snapshots__/exports.test.ts.snap deleted file mode 100644 index c1813f69dd1..00000000000 --- a/packages/nextjs/src/app-beta/__tests__/__snapshots__/exports.test.ts.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`/app-beta public exports should not include a breaking change 1`] = ` -[ - "ClerkProvider", - "CreateOrganization", - "OrganizationProfile", - "OrganizationSwitcher", - "SignIn", - "SignUp", - "SignedIn", - "SignedOut", - "UserButton", - "UserProfile", - "auth", - "clerkClient", - "currentUser", -] -`; diff --git a/packages/nextjs/src/app-beta/__tests__/exports.test.ts b/packages/nextjs/src/app-beta/__tests__/exports.test.ts deleted file mode 100644 index f4794d3c91e..00000000000 --- a/packages/nextjs/src/app-beta/__tests__/exports.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as publicExports from '../index'; - -describe('/app-beta public exports', () => { - it('should not include a breaking change', () => { - expect(Object.keys(publicExports).sort()).toMatchSnapshot(); - }); -}); diff --git a/packages/nextjs/src/app-beta/auth.ts b/packages/nextjs/src/app-beta/auth.ts deleted file mode 100644 index 74d31afc37f..00000000000 --- a/packages/nextjs/src/app-beta/auth.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { deprecated } from '@clerk/shared/deprecated'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); - -import { headers } from 'next/headers'; -import { NextRequest } from 'next/server'; - -import { buildClerkProps, getAuth } from '../server'; - -const buildRequestLike = () => { - return new NextRequest('https://placeholder.com', { headers: headers() }); -}; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const auth = () => { - return getAuth(buildRequestLike()); -}; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const initialState = () => { - return buildClerkProps(buildRequestLike()); -}; diff --git a/packages/nextjs/src/app-beta/clerkClient.ts b/packages/nextjs/src/app-beta/clerkClient.ts deleted file mode 100644 index b681f8bfb69..00000000000 --- a/packages/nextjs/src/app-beta/clerkClient.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { deprecated } from '@clerk/shared/deprecated'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); -import { clerkClient as _clerkClient } from '../server/clerkClient'; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const clerkClient = _clerkClient; diff --git a/packages/nextjs/src/app-beta/client/ClerkProvider.tsx b/packages/nextjs/src/app-beta/client/ClerkProvider.tsx deleted file mode 100644 index 25e6a06a1a0..00000000000 --- a/packages/nextjs/src/app-beta/client/ClerkProvider.tsx +++ /dev/null @@ -1,68 +0,0 @@ -'use client'; -import { deprecated } from '@clerk/shared/deprecated'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); -// !!! Note the import from react -import type { ClerkProviderProps } from '@clerk/clerk-react'; -import { ClerkProvider as ReactClerkProvider } from '@clerk/clerk-react'; -import { usePathname, useRouter } from 'next/navigation'; -import React, { useCallback, useEffect } from 'react'; - -declare global { - export interface Window { - __clerk_nav_await: Array<(value: void) => void>; - __clerk_nav: (to: string) => Promise; - } -} - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useAwaitableNavigate = () => { - // eslint-disable-next-line @typescript-eslint/unbound-method - const { push, refresh } = useRouter(); - const pathname = usePathname(); - - useEffect(() => { - window.__clerk_nav = (to: string) => { - return new Promise(res => { - window.__clerk_nav_await.push(res); - if (to === pathname) { - refresh(); - } else { - push(to); - } - }); - }; - }, [pathname]); - - useEffect(() => { - if (typeof window.__clerk_nav_await === 'undefined') { - window.__clerk_nav_await = []; - } - window.__clerk_nav_await.forEach(resolve => resolve()); - window.__clerk_nav_await = []; - }); - - return useCallback((to: string) => { - return window.__clerk_nav(to); - }, []); -}; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export function ClerkProvider(props: ClerkProviderProps) { - const navigate = useAwaitableNavigate(); - return ( - - ); -} diff --git a/packages/nextjs/src/app-beta/client/clerk-react.ts b/packages/nextjs/src/app-beta/client/clerk-react.ts deleted file mode 100644 index 38710d2af7f..00000000000 --- a/packages/nextjs/src/app-beta/client/clerk-react.ts +++ /dev/null @@ -1,137 +0,0 @@ -// HACK to show app-beta deprecation warning any of the below -// There seems to be some issue when adding the deprecation in the index.ts -import { - AuthenticateWithRedirectCallback as _AuthenticateWithRedirectCallback, - ClerkLoaded as _ClerkLoaded, - ClerkLoading as _ClerkLoading, - RedirectToCreateOrganization as _RedirectToCreateOrganization, - RedirectToOrganizationProfile as _RedirectToOrganizationProfile, - RedirectToSignIn as _RedirectToSignIn, - RedirectToSignUp as _RedirectToSignUp, - RedirectToUserProfile as _RedirectToUserProfile, - SignedIn as _SignedIn, - SignedOut as _SignedOut, - useAuth as _useAuth, - useClerk as _useClerk, - useEmailLink as _useEmailLink, - useMagicLink as _useMagicLink, - useOrganization as _useOrganization, - useOrganizationList as _useOrganizationList, - useOrganizations as _useOrganizations, - useSession as _useSession, - useSessionList as _useSessionList, - useSignIn as _useSignIn, - useSignUp as _useSignUp, - useUser as _useUser, -} from '@clerk/clerk-react'; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useUser = _useUser; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useAuth = _useAuth; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useClerk = _useClerk; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useMagicLink = _useMagicLink; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useEmailLink = _useEmailLink; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useOrganization: typeof _useOrganization = _useOrganization; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useOrganizationList: typeof _useOrganizationList = _useOrganizationList; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useOrganizations = _useOrganizations; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useSession = _useSession; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useSessionList = _useSessionList; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useSignIn = _useSignIn; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const useSignUp = _useSignUp; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const SignedIn = _SignedIn; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const SignedOut = _SignedOut; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const ClerkLoaded = _ClerkLoaded; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const ClerkLoading = _ClerkLoading; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const RedirectToUserProfile = _RedirectToUserProfile; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const RedirectToSignIn = _RedirectToSignIn; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const RedirectToSignUp = _RedirectToSignUp; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const RedirectToCreateOrganization = _RedirectToCreateOrganization; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const RedirectToOrganizationProfile = _RedirectToOrganizationProfile; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const AuthenticateWithRedirectCallback = _AuthenticateWithRedirectCallback; diff --git a/packages/nextjs/src/app-beta/client/index.ts b/packages/nextjs/src/app-beta/client/index.ts deleted file mode 100644 index 3df75e9c717..00000000000 --- a/packages/nextjs/src/app-beta/client/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -'use client'; -export { ClerkProvider } from './ClerkProvider'; - -export { - useUser, - useAuth, - useClerk, - useMagicLink, - useEmailLink, - useOrganization, - useOrganizationList, - useOrganizations, - useSession, - useSessionList, - useSignIn, - useSignUp, - SignedIn, - SignedOut, - ClerkLoaded, - ClerkLoading, - RedirectToUserProfile, - RedirectToSignIn, - RedirectToSignUp, - RedirectToCreateOrganization, - RedirectToOrganizationProfile, - AuthenticateWithRedirectCallback, -} from './clerk-react'; - -export { - SignIn, - SignUp, - UserButton, - UserProfile, - OrganizationSwitcher, - CreateOrganization, - OrganizationProfile, -} from './ui-components'; diff --git a/packages/nextjs/src/app-beta/client/ui-components.tsx b/packages/nextjs/src/app-beta/client/ui-components.tsx deleted file mode 100644 index e0ef758fe5f..00000000000 --- a/packages/nextjs/src/app-beta/client/ui-components.tsx +++ /dev/null @@ -1,52 +0,0 @@ -'use client'; -import { - CreateOrganization as _CreateOrganization, - OrganizationProfile as _OrganizationProfile, - OrganizationSwitcher as _OrganizationSwitcher, - SignIn as _SignIn, - SignUp as _SignUp, - UserButton as _UserButton, - UserProfile as _UserProfile, -} from '@clerk/clerk-react'; -import { deprecated } from '@clerk/shared/deprecated'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const CreateOrganization = _CreateOrganization; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const OrganizationProfile: typeof _OrganizationProfile = _OrganizationProfile; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const OrganizationSwitcher: typeof _OrganizationSwitcher = _OrganizationSwitcher; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const SignIn = _SignIn; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const SignUp = _SignUp; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const UserButton: typeof _UserButton = _UserButton; -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const UserProfile: typeof _UserProfile = _UserProfile; diff --git a/packages/nextjs/src/app-beta/control-components.tsx b/packages/nextjs/src/app-beta/control-components.tsx deleted file mode 100644 index 59974404d94..00000000000 --- a/packages/nextjs/src/app-beta/control-components.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { deprecated } from '@clerk/shared/deprecated'; -import React from 'react'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); -import { auth } from './auth'; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export function SignedIn(props: React.PropsWithChildren) { - const { children } = props; - const { userId } = auth(); - return userId ? <>{children} : null; -} - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export function SignedOut(props: React.PropsWithChildren) { - const { children } = props; - const { userId } = auth(); - return userId ? null : <>{children}; -} diff --git a/packages/nextjs/src/app-beta/currentUser.ts b/packages/nextjs/src/app-beta/currentUser.ts deleted file mode 100644 index e1be302607b..00000000000 --- a/packages/nextjs/src/app-beta/currentUser.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { User } from '@clerk/backend'; -import { deprecated } from '@clerk/shared/deprecated'; - -deprecated( - '@clerk/nextjs/app-beta', - 'Use imports from `@clerk/nextjs` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', -); -import { auth } from './auth'; -import { clerkClient } from './clerkClient'; - -/** - * @deprecated Use imports from `@clerk/nextjs` instead. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export async function currentUser(): Promise { - const { userId } = auth(); - return userId ? clerkClient.users.getUser(userId) : null; -} diff --git a/packages/nextjs/src/app-beta/index.ts b/packages/nextjs/src/app-beta/index.ts deleted file mode 100644 index 760a069fe9a..00000000000 --- a/packages/nextjs/src/app-beta/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export { auth } from './auth'; -export { currentUser } from './currentUser'; -export { ClerkProvider } from './ClerkProvider'; -export { SignedIn, SignedOut } from './control-components'; -export { - UserButton, - SignUp, - SignIn, - OrganizationProfile, - CreateOrganization, - OrganizationSwitcher, - UserProfile, -} from './client/ui-components'; -export { clerkClient } from './clerkClient'; From 7393f7ef8d730e5c250d549104d5eaa41648fcb6 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 00:35:55 +0200 Subject: [PATCH 02/13] chore(nextjs): Drop `*MagicLink*` related exports --- packages/nextjs/src/client-boundary/hooks.ts | 31 ++++----- packages/nextjs/src/index.ts | 71 ++++++++++---------- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/packages/nextjs/src/client-boundary/hooks.ts b/packages/nextjs/src/client-boundary/hooks.ts index d24961083e4..c60a18ea8a6 100644 --- a/packages/nextjs/src/client-boundary/hooks.ts +++ b/packages/nextjs/src/client-boundary/hooks.ts @@ -1,34 +1,31 @@ 'use client'; export { - useUser, + WithClerk, + WithSession, + WithUser, useAuth, - useSession, useClerk, - useSignIn, - useSignUp, - useSessionList, + useEmailLink, useOrganization, useOrganizationList, useOrganizations, - useEmailLink, - useMagicLink, - withUser, - withSession, + useSession, + useSessionList, + useSignIn, + useSignUp, + useUser, withClerk, - WithUser, - WithSession, - WithClerk, + withSession, + withUser, } from '@clerk/clerk-react'; -export type { WithUserProp, WithSessionProp, WithClerkProp } from '@clerk/clerk-react'; +export type { WithClerkProp, WithSessionProp, WithUserProp } from '@clerk/clerk-react'; export { - isClerkAPIResponseError, EmailLinkErrorCode, - MagicLinkErrorCode, + isClerkAPIResponseError, + isEmailLinkError, isKnownError, isMetamaskError, - isEmailLinkError, - isMagicLinkError, } from '@clerk/clerk-react'; diff --git a/packages/nextjs/src/index.ts b/packages/nextjs/src/index.ts index ed565c78731..0fa24cae2c5 100644 --- a/packages/nextjs/src/index.ts +++ b/packages/nextjs/src/index.ts @@ -3,15 +3,15 @@ * If you do, app router will break. */ export { - RedirectToUserProfile, - RedirectToSignUp, - RedirectToSignIn, - RedirectToOrganizationProfile, - RedirectToCreateOrganization, - MultisessionAppSupport, - ClerkLoading, - ClerkLoaded, AuthenticateWithRedirectCallback, + ClerkLoaded, + ClerkLoading, + MultisessionAppSupport, + RedirectToCreateOrganization, + RedirectToOrganizationProfile, + RedirectToSignIn, + RedirectToSignUp, + RedirectToUserProfile, } from './client-boundary/controlComponents'; /** @@ -19,18 +19,18 @@ export { * If you do, app router will break. */ export { - UserButton, - UserProfile, - SignUpButton, - SignIn, - SignUp, - OrganizationSwitcher, - OrganizationProfile, CreateOrganization, + OrganizationList, + OrganizationProfile, + OrganizationSwitcher, + SignIn, SignInButton, - SignOutButton, SignInWithMetamaskButton, - OrganizationList, + SignOutButton, + SignUp, + SignUpButton, + UserButton, + UserProfile, } from './client-boundary/uiComponents'; /** @@ -38,34 +38,31 @@ export { * If you do, app router will break. */ export { - useUser, + EmailLinkErrorCode, + WithClerk, + WithSession, + WithUser, + isClerkAPIResponseError, + isEmailLinkError, + isKnownError, + isMetamaskError, useAuth, - useSession, useClerk, - useSignIn, - useSignUp, - useSessionList, + useEmailLink, useOrganization, useOrganizationList, useOrganizations, - useEmailLink, - useMagicLink, - EmailLinkErrorCode, - MagicLinkErrorCode, - isEmailLinkError, - isMagicLinkError, - isClerkAPIResponseError, - isMetamaskError, - isKnownError, - withUser, - withSession, + useSession, + useSessionList, + useSignIn, + useSignUp, + useUser, withClerk, - WithUser, - WithSession, - WithClerk, + withSession, + withUser, } from './client-boundary/hooks'; -export type { WithUserProp, WithSessionProp, WithClerkProp } from './client-boundary/hooks'; +export type { WithClerkProp, WithSessionProp, WithUserProp } from './client-boundary/hooks'; /** * Conditionally export components that exhibit different behavior From ced9d8d0810da42e5f7d7242c1152ec5c0789ec5 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 00:39:39 +0200 Subject: [PATCH 03/13] chore(nextjs): Drop `NEXT_PUBLIC_CLERK_FRONTEND_API` and `frontendApi` --- packages/nextjs/README.md | 3 --- packages/nextjs/src/api/requireAuth.ts | 3 +-- packages/nextjs/src/api/withAuth.ts | 3 +-- packages/nextjs/src/global.d.ts | 1 - packages/nextjs/src/pages/__tests__/index.test.tsx | 8 ++------ .../server/__tests__/__snapshots__/exports.test.ts.snap | 1 - .../src/server/__tests__/withClerkMiddleware.test.ts | 4 ++-- packages/nextjs/src/server/authenticateRequest.ts | 5 ++--- packages/nextjs/src/server/constants.ts | 7 ------- packages/nextjs/src/server/redirect.ts | 3 +-- packages/nextjs/src/server/withClerkMiddleware.ts | 5 ++--- packages/nextjs/src/ssr/utils/authenticateRequest.ts | 3 +-- packages/nextjs/src/ssr/withServerSideAuth.ts | 2 -- packages/nextjs/src/utils/mergeNextClerkPropsWithEnv.ts | 1 - 14 files changed, 12 insertions(+), 37 deletions(-) diff --git a/packages/nextjs/README.md b/packages/nextjs/README.md index 22f9db0c70c..6cc1aa7f1a3 100644 --- a/packages/nextjs/README.md +++ b/packages/nextjs/README.md @@ -67,9 +67,6 @@ Clerk requires your application to be wrapped in the `` context. Set `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` to your Publishable Key in your `.env.local` file to make the environment variable accessible to the Provider. -If you are using the previous version of Clerk keys, set `NEXT_PUBLIC_CLERK_FRONTEND_API` to your Frontend API in -your `.env.local` file. - ```sh NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_(test|live)_xxxxxxx ``` diff --git a/packages/nextjs/src/api/requireAuth.ts b/packages/nextjs/src/api/requireAuth.ts index d03108e6fe0..64f23354138 100644 --- a/packages/nextjs/src/api/requireAuth.ts +++ b/packages/nextjs/src/api/requireAuth.ts @@ -2,7 +2,7 @@ import type { ClerkMiddlewareOptions, RequireAuthProp } from '@clerk/clerk-sdk-n import { createClerkExpressRequireAuth } from '@clerk/clerk-sdk-node'; import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; -import { API_URL, clerkClient, FRONTEND_API, PUBLISHABLE_KEY } from '../server'; +import { API_URL, clerkClient, PUBLISHABLE_KEY } from '../server'; import { runMiddleware } from './utils'; type NextApiHandlerRequireAuth = ( @@ -19,7 +19,6 @@ export function requireAuth(handler: NextApiHandlerRequireAuth, options?: ClerkM createClerkExpressRequireAuth({ clerkClient, apiUrl: API_URL, - frontendApi: FRONTEND_API, publishableKey: PUBLISHABLE_KEY, })(options), ); diff --git a/packages/nextjs/src/api/withAuth.ts b/packages/nextjs/src/api/withAuth.ts index b96cd588693..62046efa296 100644 --- a/packages/nextjs/src/api/withAuth.ts +++ b/packages/nextjs/src/api/withAuth.ts @@ -2,7 +2,7 @@ import type { ClerkMiddlewareOptions, WithAuthProp } from '@clerk/clerk-sdk-node import { createClerkExpressWithAuth } from '@clerk/clerk-sdk-node'; import type { NextApiRequest, NextApiResponse } from 'next'; -import { API_URL, clerkClient, FRONTEND_API, PUBLISHABLE_KEY } from '../server'; +import { API_URL, clerkClient, PUBLISHABLE_KEY } from '../server'; import { runMiddleware } from './utils'; type NextApiHandlerWithAuth = ( @@ -17,7 +17,6 @@ export function withAuth(handler: NextApiHandlerWithAuth, options?: ClerkMiddlew res, createClerkExpressWithAuth({ clerkClient, - frontendApi: FRONTEND_API, apiUrl: API_URL, publishableKey: PUBLISHABLE_KEY, })(options), diff --git a/packages/nextjs/src/global.d.ts b/packages/nextjs/src/global.d.ts index f239fdc121f..ed884b83eac 100644 --- a/packages/nextjs/src/global.d.ts +++ b/packages/nextjs/src/global.d.ts @@ -12,7 +12,6 @@ declare global { namespace NodeJS { interface ProcessEnv { CLERK_SECRET_KEY: string | undefined; - NEXT_PUBLIC_CLERK_FRONTEND_API: string | undefined; NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: string | undefined; NEXT_PUBLIC_CLERK_PROXY_URL: string | undefined; NEXT_PUBLIC_CLERK_SIGN_IN_URL: string | undefined; diff --git a/packages/nextjs/src/pages/__tests__/index.test.tsx b/packages/nextjs/src/pages/__tests__/index.test.tsx index 475da63d77f..8e76f7abc17 100644 --- a/packages/nextjs/src/pages/__tests__/index.test.tsx +++ b/packages/nextjs/src/pages/__tests__/index.test.tsx @@ -6,16 +6,12 @@ type ClerkProviderProps = Parameters[0]; describe('ClerkProvider', () => { describe('Type tests', () => { - describe('publishableKey and frontendApi', () => { + describe('publishableKey', () => { it('expects children as the minimum accepted case', () => { expectTypeOf({ children: '' }).toMatchTypeOf(); }); - it('publishable key is replaceable with frontendApi', () => { - expectTypeOf({ frontendApi: 'test', children: '' }).toMatchTypeOf(); - }); - - it('does not error if no publishableKey or frontendApi', () => { + it('does not error if no publishableKey', () => { expectTypeOf({ children: '' }).toMatchTypeOf(); }); }); diff --git a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap index e5b9aa7de1f..a6a5fcc6cdd 100644 --- a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap @@ -16,7 +16,6 @@ exports[`/server public exports should not include a breaking change 1`] = ` "Email", "EmailAddress", "ExternalAccount", - "FRONTEND_API", "IS_SATELLITE", "IdentificationLink", "Invitation", diff --git a/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts b/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts index d93c2339a68..eaed881508c 100644 --- a/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts +++ b/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts @@ -15,9 +15,9 @@ describe('withClerkMiddleware', () => { it('can receive the appropriate keys', () => { expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); - expectTypeOf({ frontendApi: '', secretKey: '' }).toMatchTypeOf(); + expectTypeOf({ secretKey: '' }).toMatchTypeOf(); expectTypeOf({ publishableKey: '', apiKey: '' }).toMatchTypeOf(); - expectTypeOf({ frontendApi: '', apiKey: '' }).toMatchTypeOf(); + expectTypeOf({ apiKey: '' }).toMatchTypeOf(); }); describe('Multi domain', () => { diff --git a/packages/nextjs/src/server/authenticateRequest.ts b/packages/nextjs/src/server/authenticateRequest.ts index 4bb55bbe8b2..c2e65b99ac3 100644 --- a/packages/nextjs/src/server/authenticateRequest.ts +++ b/packages/nextjs/src/server/authenticateRequest.ts @@ -8,7 +8,6 @@ import { CLERK_JS_VERSION, clerkClient, debugRequestState, - FRONTEND_API, PUBLISHABLE_KEY, SECRET_KEY, } from './clerkClient'; @@ -22,7 +21,6 @@ export const authenticateRequest = async (req: NextRequest, opts: WithAuthOption ...opts, apiKey: opts.apiKey || API_KEY, secretKey: opts.secretKey || SECRET_KEY, - frontendApi: opts.frontendApi || FRONTEND_API, publishableKey: opts.publishableKey || PUBLISHABLE_KEY, isSatellite, domain, @@ -41,7 +39,8 @@ export const handleUnknownState = (requestState: RequestState) => { export const handleInterstitialState = (requestState: RequestState, opts: WithAuthOptions) => { const response = new NextResponse( clerkClient.localInterstitial({ - frontendApi: opts.frontendApi || FRONTEND_API, + // TODO(@dimkl): use empty string for frontendApi until type is fixed in @clerk/backend to drop it + frontendApi: '', publishableKey: opts.publishableKey || PUBLISHABLE_KEY, clerkJSUrl: CLERK_JS_URL, clerkJSVersion: CLERK_JS_VERSION, diff --git a/packages/nextjs/src/server/constants.ts b/packages/nextjs/src/server/constants.ts index 4c232899d80..0abc7b64e8c 100644 --- a/packages/nextjs/src/server/constants.ts +++ b/packages/nextjs/src/server/constants.ts @@ -20,13 +20,6 @@ if (API_KEY) { deprecated('CLERK_API_KEY', 'Use `CLERK_SECRET_KEY` environment variable instead.'); } export const SECRET_KEY = process.env.CLERK_SECRET_KEY || ''; -/** - * @deprecated Use `PUBLISHABLE_KEY` instead. - */ -export const FRONTEND_API = process.env.NEXT_PUBLIC_CLERK_FRONTEND_API || ''; -if (FRONTEND_API) { - deprecated('NEXT_PUBLIC_CLERK_FRONTEND_API', 'Use `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` environment variable instead.'); -} export const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY || ''; export const DOMAIN = process.env.NEXT_PUBLIC_CLERK_DOMAIN || ''; export const PROXY_URL = process.env.NEXT_PUBLIC_CLERK_PROXY_URL || ''; diff --git a/packages/nextjs/src/server/redirect.ts b/packages/nextjs/src/server/redirect.ts index a15b6f7339b..a3f2d62fa39 100644 --- a/packages/nextjs/src/server/redirect.ts +++ b/packages/nextjs/src/server/redirect.ts @@ -2,7 +2,7 @@ import { constants, redirect } from '@clerk/backend'; import { NextResponse } from 'next/server'; import { setHeader } from '../utils'; -import { FRONTEND_API, PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from './clerkClient'; +import { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from './clerkClient'; const redirectAdapter = (url: string) => { const res = NextResponse.redirect(url); @@ -14,5 +14,4 @@ export const { redirectToSignIn, redirectToSignUp } = redirect({ signInUrl: SIGN_IN_URL, signUpUrl: SIGN_UP_URL, publishableKey: PUBLISHABLE_KEY, - frontendApi: FRONTEND_API, }); diff --git a/packages/nextjs/src/server/withClerkMiddleware.ts b/packages/nextjs/src/server/withClerkMiddleware.ts index 433cdad862f..b91b611c7d2 100644 --- a/packages/nextjs/src/server/withClerkMiddleware.ts +++ b/packages/nextjs/src/server/withClerkMiddleware.ts @@ -10,7 +10,6 @@ import { CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, - FRONTEND_API, PUBLISHABLE_KEY, SECRET_KEY, } from './clerkClient'; @@ -50,7 +49,6 @@ export const withClerkMiddleware: WithClerkMiddleware = (...args: unknown[]) => ...opts, apiKey: opts.apiKey || API_KEY, secretKey: opts.secretKey || SECRET_KEY, - frontendApi: opts.frontendApi || FRONTEND_API, publishableKey: opts.publishableKey || PUBLISHABLE_KEY, isSatellite, domain, @@ -71,7 +69,8 @@ export const withClerkMiddleware: WithClerkMiddleware = (...args: unknown[]) => const response = NextResponse.rewrite( clerkClient.remotePublicInterstitialUrl({ apiUrl: API_URL, - frontendApi: opts.frontendApi || FRONTEND_API, + // TODO(@dimkl): use empty string for frontendApi until type is fixed in @clerk/backend to drop it + frontendApi: '', publishableKey: opts.publishableKey || PUBLISHABLE_KEY, clerkJSUrl: CLERK_JS_URL, clerkJSVersion: CLERK_JS_VERSION, diff --git a/packages/nextjs/src/ssr/utils/authenticateRequest.ts b/packages/nextjs/src/ssr/utils/authenticateRequest.ts index 7b53eb27b3f..6af2962fe28 100644 --- a/packages/nextjs/src/ssr/utils/authenticateRequest.ts +++ b/packages/nextjs/src/ssr/utils/authenticateRequest.ts @@ -1,6 +1,6 @@ import type { GetServerSidePropsContext } from 'next'; -import { API_KEY, clerkClient, FRONTEND_API, PROXY_URL, PUBLISHABLE_KEY, SECRET_KEY } from '../../server'; +import { API_KEY, clerkClient, PROXY_URL, PUBLISHABLE_KEY, SECRET_KEY } from '../../server'; import type { WithServerSideAuthOptions } from '../types'; /** @@ -16,7 +16,6 @@ export function authenticateRequest(ctx: GetServerSidePropsContext, opts: WithSe ...opts, apiKey: API_KEY, secretKey: SECRET_KEY, - frontendApi: FRONTEND_API, publishableKey: PUBLISHABLE_KEY, cookieToken, headerToken, diff --git a/packages/nextjs/src/ssr/withServerSideAuth.ts b/packages/nextjs/src/ssr/withServerSideAuth.ts index e9baa11722a..ea5e23a3e8f 100644 --- a/packages/nextjs/src/ssr/withServerSideAuth.ts +++ b/packages/nextjs/src/ssr/withServerSideAuth.ts @@ -9,7 +9,6 @@ import { CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, - FRONTEND_API, JS_VERSION, makeAuthObjectSerializable, PUBLISHABLE_KEY, @@ -68,7 +67,6 @@ export const withServerSideAuth: WithServerSideAuth = (cbOrOptions: any, options const interstitial = await clerkClient.remotePublicInterstitial({ apiUrl: API_URL, publishableKey: PUBLISHABLE_KEY, - frontendApi: FRONTEND_API, pkgVersion: JS_VERSION, clerkJSUrl: CLERK_JS_URL, clerkJSVersion: CLERK_JS_VERSION, diff --git a/packages/nextjs/src/utils/mergeNextClerkPropsWithEnv.ts b/packages/nextjs/src/utils/mergeNextClerkPropsWithEnv.ts index 292da5e0fe5..0cdd5894515 100644 --- a/packages/nextjs/src/utils/mergeNextClerkPropsWithEnv.ts +++ b/packages/nextjs/src/utils/mergeNextClerkPropsWithEnv.ts @@ -5,7 +5,6 @@ import type { NextClerkProviderProps } from '../types'; export const mergeNextClerkPropsWithEnv = (props: Omit) => { return { ...props, - frontendApi: props.frontendApi || process.env.NEXT_PUBLIC_CLERK_FRONTEND_API || '', publishableKey: props.publishableKey || process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY || '', clerkJSUrl: props.clerkJSUrl || process.env.NEXT_PUBLIC_CLERK_JS, clerkJSVersion: props.clerkJSVersion || process.env.NEXT_PUBLIC_CLERK_JS_VERSION, From 032679964839e5ea84f00d3c1fd5c1a84015e80f Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 16:19:02 +0200 Subject: [PATCH 04/13] chore(nextjs): Drop `ssr` subpath import --- packages/nextjs/package.json | 8 +- .../__snapshots__/exports.test.ts.snap | 7 -- .../nextjs/src/ssr/__tests__/exports.test.ts | 7 -- packages/nextjs/src/ssr/index.ts | 1 - packages/nextjs/src/ssr/types.ts | 74 ---------------- .../src/ssr/utils/authenticateRequest.ts | 31 ------- packages/nextjs/src/ssr/utils/index.ts | 3 - .../src/ssr/utils/injectAuthIntoRequest.ts | 22 ----- .../nextjs/src/ssr/utils/serializeProps.ts | 22 ----- packages/nextjs/src/ssr/withServerSideAuth.ts | 87 ------------------- packages/nextjs/ssr/package.json | 5 -- 11 files changed, 1 insertion(+), 266 deletions(-) delete mode 100644 packages/nextjs/src/ssr/__tests__/__snapshots__/exports.test.ts.snap delete mode 100644 packages/nextjs/src/ssr/__tests__/exports.test.ts delete mode 100644 packages/nextjs/src/ssr/index.ts delete mode 100644 packages/nextjs/src/ssr/types.ts delete mode 100644 packages/nextjs/src/ssr/utils/authenticateRequest.ts delete mode 100644 packages/nextjs/src/ssr/utils/index.ts delete mode 100644 packages/nextjs/src/ssr/utils/injectAuthIntoRequest.ts delete mode 100644 packages/nextjs/src/ssr/utils/serializeProps.ts delete mode 100644 packages/nextjs/src/ssr/withServerSideAuth.ts delete mode 100644 packages/nextjs/ssr/package.json diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 2f80eba9209..763dd3b0feb 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -40,11 +40,6 @@ "import": "./dist/esm/api/index.js", "require": "./dist/cjs/api/index.js" }, - "./ssr": { - "types": "./dist/types/ssr/index.d.ts", - "import": "./dist/esm/ssr/index.js", - "require": "./dist/cjs/ssr/index.js" - }, "./edge-middlewarefiles": { "types": "./dist/types/edge-middleware/index.d.ts", "import": "./dist/esm/edge-middleware/index.js", @@ -58,8 +53,7 @@ "dist", "server", "api", - "edge-middleware", - "ssr" + "edge-middleware" ], "scripts": { "build": "npm run clean && tsup", diff --git a/packages/nextjs/src/ssr/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/ssr/__tests__/__snapshots__/exports.test.ts.snap deleted file mode 100644 index c1357f757de..00000000000 --- a/packages/nextjs/src/ssr/__tests__/__snapshots__/exports.test.ts.snap +++ /dev/null @@ -1,7 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`/ssr public exports should not include a breaking change 1`] = ` -{ - "withServerSideAuth": [Function], -} -`; diff --git a/packages/nextjs/src/ssr/__tests__/exports.test.ts b/packages/nextjs/src/ssr/__tests__/exports.test.ts deleted file mode 100644 index ef71d42e371..00000000000 --- a/packages/nextjs/src/ssr/__tests__/exports.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as publicExports from '../index'; - -describe('/ssr public exports', () => { - it('should not include a breaking change', () => { - expect(publicExports).toMatchSnapshot(); - }); -}); diff --git a/packages/nextjs/src/ssr/index.ts b/packages/nextjs/src/ssr/index.ts deleted file mode 100644 index b8a36342b34..00000000000 --- a/packages/nextjs/src/ssr/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './withServerSideAuth'; diff --git a/packages/nextjs/src/ssr/types.ts b/packages/nextjs/src/ssr/types.ts deleted file mode 100644 index c9f65e14c40..00000000000 --- a/packages/nextjs/src/ssr/types.ts +++ /dev/null @@ -1,74 +0,0 @@ -import type { AuthenticateRequestOptions, Organization, Session, User } from '@clerk/backend'; -import type { ClerkJWTClaims, ServerSideAuth } from '@clerk/types'; -import type { GetServerSidePropsContext } from 'next'; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type Awaited = T extends PromiseLike ? U : T; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type WithServerSideAuthOptions = { - loadUser?: boolean; - loadSession?: boolean; - /** - * @deprecated use loadOrganization instead - */ - loadOrg?: boolean; - loadOrganization?: boolean; - jwtKey?: string; - authorizedParties?: string[]; - audience?: AuthenticateRequestOptions['audience']; -}; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type WithServerSideAuthCallback = ( - context: ContextWithAuth, -) => Return; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type WithServerSideAuthResult = ( - context: GetServerSidePropsContext, -) => Promise>; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type AuthData = { - sessionId: string | null; - session: Session | undefined | null; - userId: string | null; - user: User | undefined | null; - organization: Organization | undefined | null; - getToken: (...args: any) => Promise; - claims: ClerkJWTClaims | null; -}; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type ContextWithAuth = GetServerSidePropsContext & { - req: RequestWithAuth; -}; - -/** - * @deprecated The /middleware path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export type RequestWithAuth = GetServerSidePropsContext['req'] & { - auth: ServerSideAuth; -} & (Options extends { loadSession: true } ? { session: Session | null } : object) & - (Options extends { loadUser: true } ? { user: User | null } : object) & - (Options extends { loadOrg: true } ? { organization: Organization | null } : object); diff --git a/packages/nextjs/src/ssr/utils/authenticateRequest.ts b/packages/nextjs/src/ssr/utils/authenticateRequest.ts deleted file mode 100644 index 6af2962fe28..00000000000 --- a/packages/nextjs/src/ssr/utils/authenticateRequest.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { GetServerSidePropsContext } from 'next'; - -import { API_KEY, clerkClient, PROXY_URL, PUBLISHABLE_KEY, SECRET_KEY } from '../../server'; -import type { WithServerSideAuthOptions } from '../types'; - -/** - * @internal - */ -export function authenticateRequest(ctx: GetServerSidePropsContext, opts: WithServerSideAuthOptions = {}) { - const { headers, cookies } = ctx.req; - - const cookieToken = cookies['__session']; - const headerToken = headers.authorization?.replace('Bearer ', ''); - - return clerkClient.authenticateRequest({ - ...opts, - apiKey: API_KEY, - secretKey: SECRET_KEY, - publishableKey: PUBLISHABLE_KEY, - cookieToken, - headerToken, - clientUat: cookies['__client_uat'], - origin: headers.origin, - host: headers.host as string, - forwardedPort: headers['x-forwarded-port'] as string, - forwardedHost: headers['x-forwarded-host'] as string, - referrer: headers.referer, - userAgent: headers['user-agent'] as string, - proxyUrl: PROXY_URL, - }); -} diff --git a/packages/nextjs/src/ssr/utils/index.ts b/packages/nextjs/src/ssr/utils/index.ts deleted file mode 100644 index e2c8a829eac..00000000000 --- a/packages/nextjs/src/ssr/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './authenticateRequest'; -export * from './injectAuthIntoRequest'; -export * from './serializeProps'; diff --git a/packages/nextjs/src/ssr/utils/injectAuthIntoRequest.ts b/packages/nextjs/src/ssr/utils/injectAuthIntoRequest.ts deleted file mode 100644 index fd78c34f750..00000000000 --- a/packages/nextjs/src/ssr/utils/injectAuthIntoRequest.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { GetServerSidePropsContext } from 'next'; - -import type { AuthData, ContextWithAuth } from '../types'; - -/** - * Inject `auth`, `user` and `session` properties into ctx.request - * @internal - */ -export function injectAuthIntoRequest(ctx: GetServerSidePropsContext, authData: AuthData): ContextWithAuth { - const { user, session, userId, sessionId, getToken, claims, organization } = authData; - (ctx.req as any).auth = { - userId, - sessionId, - getToken, - claims, - actor: claims?.act || null, - }; - (ctx.req as any).user = user; - (ctx.req as any).session = session; - (ctx.req as any).organization = organization; - return ctx as ContextWithAuth; -} diff --git a/packages/nextjs/src/ssr/utils/serializeProps.ts b/packages/nextjs/src/ssr/utils/serializeProps.ts deleted file mode 100644 index 563c8a6a441..00000000000 --- a/packages/nextjs/src/ssr/utils/serializeProps.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { GetServerSidePropsResult } from 'next'; - -import type { AuthData } from '../types'; - -/** - * @param callbackResult The results from the wrapped (user-provided) getServerSideProps callback. - * @param authData - */ -export function injectSSRStateIntoProps(callbackResult: any, authData: AuthData): GetServerSidePropsResult { - return { - ...callbackResult, - props: injectSSRStateIntoObject(callbackResult.props, authData), - }; -} - -export const injectSSRStateIntoObject = (obj: any, authData: AuthData) => { - // Serializing the state on dev env is a temp workaround for the following issue: - // https://github.com/vercel/next.js/discussions/11209|Next.js - const __clerk_ssr_state = - process.env.NODE_ENV !== 'production' ? JSON.parse(JSON.stringify({ ...authData })) : { ...authData }; - return { ...obj, __clerk_ssr_state }; -}; diff --git a/packages/nextjs/src/ssr/withServerSideAuth.ts b/packages/nextjs/src/ssr/withServerSideAuth.ts deleted file mode 100644 index ea5e23a3e8f..00000000000 --- a/packages/nextjs/src/ssr/withServerSideAuth.ts +++ /dev/null @@ -1,87 +0,0 @@ -import type { RequestState } from '@clerk/backend'; -import { constants, debugRequestState } from '@clerk/backend'; -import { deprecated } from '@clerk/shared/deprecated'; -import type { ServerResponse } from 'http'; -import type { GetServerSidePropsContext, GetServerSidePropsResult } from 'next'; - -import { - API_URL, - CLERK_JS_URL, - CLERK_JS_VERSION, - clerkClient, - JS_VERSION, - makeAuthObjectSerializable, - PUBLISHABLE_KEY, - sanitizeAuthObject, -} from '../server/clerkClient'; -import type { WithServerSideAuthCallback, WithServerSideAuthOptions, WithServerSideAuthResult } from './types'; -import { authenticateRequest, injectAuthIntoRequest, injectSSRStateIntoProps } from './utils'; - -const EMPTY_GSSP_RESPONSE = { props: {} }; - -interface WithServerSideAuth { - < - CallbackReturn extends GetServerSidePropsResult | Promise>, - Options extends WithServerSideAuthOptions, - >( - callback: WithServerSideAuthCallback, - opts?: Options, - ): WithServerSideAuthResult; - (opts?: WithServerSideAuthOptions): WithServerSideAuthResult; -} - -const decorateResponseWithObservabilityHeaders = (res: ServerResponse, requestState: RequestState) => { - requestState.message && res.setHeader(constants.Headers.AuthMessage, encodeURIComponent(requestState.message)); - requestState.reason && res.setHeader(constants.Headers.AuthReason, encodeURIComponent(requestState.reason)); - requestState.status && res.setHeader(constants.Headers.AuthStatus, encodeURIComponent(requestState.status)); -}; - -/** - * @deprecated The /ssr path is deprecated and will be removed in the next major release. - * Use the exports from /server instead - */ -export const withServerSideAuth: WithServerSideAuth = (cbOrOptions: any, options?: any): any => { - const cb = typeof cbOrOptions === 'function' ? cbOrOptions : undefined; - const opts = (options ? options : typeof cbOrOptions !== 'function' ? cbOrOptions : {}) || {}; - deprecated( - 'withServerSideAuth', - 'Use `authMiddleware` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', - ); - - // Support both loadOrganization and the older loadOrg option without breaking changes - // TODO: Remove pre v5 - opts.loadOrganization = opts.loadOrganization || opts.loadOrg || undefined; - - return async (ctx: GetServerSidePropsContext) => { - const requestState = await authenticateRequest(ctx, opts); - - if (requestState.isUnknown) { - decorateResponseWithObservabilityHeaders(ctx.res, requestState); - ctx.res.writeHead(401, { 'Content-Type': 'text/html' }); - ctx.res.end(); - return EMPTY_GSSP_RESPONSE; - } - if (requestState.isInterstitial) { - decorateResponseWithObservabilityHeaders(ctx.res, requestState); - ctx.res.writeHead(401, { 'Content-Type': 'text/html' }); - const interstitial = await clerkClient.remotePublicInterstitial({ - apiUrl: API_URL, - publishableKey: PUBLISHABLE_KEY, - pkgVersion: JS_VERSION, - clerkJSUrl: CLERK_JS_URL, - clerkJSVersion: CLERK_JS_VERSION, - proxyUrl: requestState.proxyUrl as any, - isSatellite: requestState.isSatellite, - domain: requestState.domain as any, - debugData: debugRequestState(requestState), - }); - ctx.res.end(interstitial); - return EMPTY_GSSP_RESPONSE; - } - - const legacyAuthData = { ...requestState.toAuth(), claims: requestState.toAuth().sessionClaims }; - const contextWithAuth = injectAuthIntoRequest(ctx, legacyAuthData); - const callbackResult = (await cb?.(contextWithAuth)) || {}; - return injectSSRStateIntoProps(callbackResult, makeAuthObjectSerializable(sanitizeAuthObject(legacyAuthData))); - }; -}; diff --git a/packages/nextjs/ssr/package.json b/packages/nextjs/ssr/package.json deleted file mode 100644 index 8219d2ba97a..00000000000 --- a/packages/nextjs/ssr/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "main": "../dist/cjs/ssr/index.js", - "module": "../dist/esm/ssr/index.js", - "types": "../dist/types/ssr/index.d.ts" -} From d9e999e5bf778fe94aed7e97e0ce3551b8dbce23 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 16:20:35 +0200 Subject: [PATCH 05/13] chore(nextjs): Drop `edge-middleware` subpath import --- packages/nextjs/edge-middleware/package.json | 5 -- packages/nextjs/package.json | 8 +-- .../__snapshots__/exports.test.ts.snap | 65 ------------------- .../edge-middleware/__tests__/exports.test.ts | 7 -- packages/nextjs/src/edge-middleware/index.ts | 8 --- 5 files changed, 1 insertion(+), 92 deletions(-) delete mode 100644 packages/nextjs/edge-middleware/package.json delete mode 100644 packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap delete mode 100644 packages/nextjs/src/edge-middleware/__tests__/exports.test.ts delete mode 100644 packages/nextjs/src/edge-middleware/index.ts diff --git a/packages/nextjs/edge-middleware/package.json b/packages/nextjs/edge-middleware/package.json deleted file mode 100644 index 499f6791249..00000000000 --- a/packages/nextjs/edge-middleware/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "main": "../dist/cjs/edge-middleware/index.js", - "module": "../dist/esm/edge-middleware/index.js", - "types": "../dist/types/edge-middleware/index.d.ts" -} diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 763dd3b0feb..a371aa6f143 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -39,11 +39,6 @@ "types": "./dist/types/api/index.d.ts", "import": "./dist/esm/api/index.js", "require": "./dist/cjs/api/index.js" - }, - "./edge-middlewarefiles": { - "types": "./dist/types/edge-middleware/index.d.ts", - "import": "./dist/esm/edge-middleware/index.js", - "require": "./dist/cjs/edge-middleware/index.js" } }, "main": "./dist/cjs/index.js", @@ -52,8 +47,7 @@ "files": [ "dist", "server", - "api", - "edge-middleware" + "api" ], "scripts": { "build": "npm run clean && tsup", diff --git a/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap deleted file mode 100644 index d8da61fad66..00000000000 --- a/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap +++ /dev/null @@ -1,65 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`/edge-middleware public exports should not include a breaking change 1`] = ` -[ - "AllowlistIdentifier", - "AuthStatus", - "Clerk", - "Client", - "DeletedObject", - "Email", - "EmailAddress", - "ExternalAccount", - "IdentificationLink", - "Invitation", - "OauthAccessToken", - "ObjectType", - "Organization", - "OrganizationInvitation", - "OrganizationMembership", - "OrganizationMembershipPublicUserData", - "PhoneNumber", - "RedirectUrl", - "SMSMessage", - "Session", - "SignInToken", - "Token", - "User", - "Verification", - "allowlistIdentifiers", - "buildRequestUrl", - "clerkApi", - "clerkClient", - "clients", - "constants", - "createAuthenticateRequest", - "createClerkClient", - "createIsomorphicRequest", - "debugRequestState", - "decodeJwt", - "deserialize", - "emailAddresses", - "emails", - "hasValidSignature", - "invitations", - "loadInterstitialFromLocal", - "makeAuthObjectSerializable", - "organizations", - "phoneNumbers", - "prunePrivateMetadata", - "redirect", - "requireAuth", - "requireEdgeMiddlewareAuth", - "sanitizeAuthObject", - "sessions", - "signJwt", - "signedInAuthObject", - "signedOutAuthObject", - "smsMessages", - "users", - "verifyJwt", - "verifyToken", - "withAuth", - "withEdgeMiddlewareAuth", -] -`; diff --git a/packages/nextjs/src/edge-middleware/__tests__/exports.test.ts b/packages/nextjs/src/edge-middleware/__tests__/exports.test.ts deleted file mode 100644 index 52a32470712..00000000000 --- a/packages/nextjs/src/edge-middleware/__tests__/exports.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as publicExports from '../index'; - -describe('/edge-middleware public exports', () => { - it('should not include a breaking change', () => { - expect(Object.keys(publicExports).sort()).toMatchSnapshot(); - }); -}); diff --git a/packages/nextjs/src/edge-middleware/index.ts b/packages/nextjs/src/edge-middleware/index.ts deleted file mode 100644 index c2c06987b8c..00000000000 --- a/packages/nextjs/src/edge-middleware/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { requireAuth, withAuth } from '../api'; -import { clerkClient } from '../server'; - -export * from '../api'; -export { clerkClient }; -export const clerkApi = clerkClient; -export const requireEdgeMiddlewareAuth = requireAuth; -export const withEdgeMiddlewareAuth = withAuth; From 0c36690b8cf75a894f0ada7c78a118deb38ea924 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 16:31:10 +0200 Subject: [PATCH 06/13] chore(nextjs): Drop `CLERK_JS_VERSION` --- .../server/__tests__/__snapshots__/exports.test.ts.snap | 1 - packages/nextjs/src/server/constants.ts | 7 ------- 2 files changed, 8 deletions(-) diff --git a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap index a6a5fcc6cdd..820f85b2968 100644 --- a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap @@ -19,7 +19,6 @@ exports[`/server public exports should not include a breaking change 1`] = ` "IS_SATELLITE", "IdentificationLink", "Invitation", - "JS_VERSION", "OauthAccessToken", "ObjectType", "Organization", diff --git a/packages/nextjs/src/server/constants.ts b/packages/nextjs/src/server/constants.ts index 0abc7b64e8c..24b3275cb2e 100644 --- a/packages/nextjs/src/server/constants.ts +++ b/packages/nextjs/src/server/constants.ts @@ -1,13 +1,6 @@ import { deprecated } from '@clerk/shared/deprecated'; import { isTruthy } from '@clerk/shared/underscore'; -/** - * @deprecated Use `CLERK_JS_VERSION` instead. - */ -export const JS_VERSION = process.env.CLERK_JS_VERSION || ''; -if (JS_VERSION) { - deprecated('CLERK_JS_VERSION', 'Use `NEXT_PUBLIC_CLERK_JS_VERSION` environment variable instead.'); -} export const CLERK_JS_VERSION = process.env.NEXT_PUBLIC_CLERK_JS_VERSION || ''; export const CLERK_JS_URL = process.env.NEXT_PUBLIC_CLERK_JS || ''; export const API_URL = process.env.CLERK_API_URL || 'https://api.clerk.com'; From 08b937399ce018f422b6f62e9ace9b1f6b9dc0bd Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 16:33:08 +0200 Subject: [PATCH 07/13] chore(nextjs): Drop `CLERK_API_KEY` and `apiKey` --- packages/nextjs/jest.setup.js | 3 +-- .../__tests__/__snapshots__/exports.test.ts.snap | 1 - .../src/server/__tests__/withClerkMiddleware.test.ts | 4 ++-- packages/nextjs/src/server/authenticateRequest.ts | 2 -- packages/nextjs/src/server/clerkClient.ts | 6 ++---- packages/nextjs/src/server/constants.ts | 8 -------- packages/nextjs/src/server/getAuth.ts | 4 +--- packages/nextjs/src/server/utils.ts | 7 +++---- packages/nextjs/src/server/withClerkMiddleware.ts | 11 +---------- 9 files changed, 10 insertions(+), 36 deletions(-) diff --git a/packages/nextjs/jest.setup.js b/packages/nextjs/jest.setup.js index f13eef28ac3..33f49220435 100644 --- a/packages/nextjs/jest.setup.js +++ b/packages/nextjs/jest.setup.js @@ -1,3 +1,2 @@ require('node-fetch-native'); -process.env.CLERK_API_KEY = 'TEST_API_KEY'; -process.env.CLERK_SECRET_KEY = 'TEST_API_KEY'; +process.env.CLERK_SECRET_KEY = 'TEST_SECRET_KEY'; diff --git a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap index 820f85b2968..73a5486b541 100644 --- a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap @@ -2,7 +2,6 @@ exports[`/server public exports should not include a breaking change 1`] = ` [ - "API_KEY", "API_URL", "API_VERSION", "AllowlistIdentifier", diff --git a/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts b/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts index eaed881508c..b3434067f82 100644 --- a/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts +++ b/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts @@ -16,8 +16,8 @@ describe('withClerkMiddleware', () => { it('can receive the appropriate keys', () => { expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); expectTypeOf({ secretKey: '' }).toMatchTypeOf(); - expectTypeOf({ publishableKey: '', apiKey: '' }).toMatchTypeOf(); - expectTypeOf({ apiKey: '' }).toMatchTypeOf(); + expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); + expectTypeOf({ secretKey: '' }).toMatchTypeOf(); }); describe('Multi domain', () => { diff --git a/packages/nextjs/src/server/authenticateRequest.ts b/packages/nextjs/src/server/authenticateRequest.ts index c2e65b99ac3..9c1a682c943 100644 --- a/packages/nextjs/src/server/authenticateRequest.ts +++ b/packages/nextjs/src/server/authenticateRequest.ts @@ -3,7 +3,6 @@ import { NextResponse } from 'next/server'; import type { RequestState } from './clerkClient'; import { - API_KEY, CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, @@ -19,7 +18,6 @@ export const authenticateRequest = async (req: NextRequest, opts: WithAuthOption const { isSatellite, domain, signInUrl, proxyUrl } = handleMultiDomainAndProxy(req, opts); return await clerkClient.authenticateRequest({ ...opts, - apiKey: opts.apiKey || API_KEY, secretKey: opts.secretKey || SECRET_KEY, publishableKey: opts.publishableKey || PUBLISHABLE_KEY, isSatellite, diff --git a/packages/nextjs/src/server/clerkClient.ts b/packages/nextjs/src/server/clerkClient.ts index 5ec9ca27118..f285dc24c76 100644 --- a/packages/nextjs/src/server/clerkClient.ts +++ b/packages/nextjs/src/server/clerkClient.ts @@ -1,10 +1,8 @@ -/* eslint-disable turbo/no-undeclared-env-vars */ import { Clerk } from '@clerk/backend'; -import { API_KEY, API_URL, API_VERSION, DOMAIN, IS_SATELLITE, PROXY_URL, SECRET_KEY } from './constants'; +import { API_URL, API_VERSION, DOMAIN, IS_SATELLITE, PROXY_URL, SECRET_KEY } from './constants'; const clerkClient = Clerk({ - apiKey: API_KEY, secretKey: SECRET_KEY, apiUrl: API_URL, apiVersion: API_VERSION, @@ -17,7 +15,7 @@ const clerkClient = Clerk({ const createClerkClient = Clerk; -export { clerkClient, createClerkClient, Clerk }; +export { Clerk, clerkClient, createClerkClient }; export * from '@clerk/backend'; diff --git a/packages/nextjs/src/server/constants.ts b/packages/nextjs/src/server/constants.ts index 24b3275cb2e..774d7c8de59 100644 --- a/packages/nextjs/src/server/constants.ts +++ b/packages/nextjs/src/server/constants.ts @@ -1,17 +1,9 @@ -import { deprecated } from '@clerk/shared/deprecated'; import { isTruthy } from '@clerk/shared/underscore'; export const CLERK_JS_VERSION = process.env.NEXT_PUBLIC_CLERK_JS_VERSION || ''; export const CLERK_JS_URL = process.env.NEXT_PUBLIC_CLERK_JS || ''; export const API_URL = process.env.CLERK_API_URL || 'https://api.clerk.com'; export const API_VERSION = process.env.CLERK_API_VERSION || 'v1'; -/** - * @deprecated Use `CLERK_SECRET_KEY` instead. - */ -export const API_KEY = process.env.CLERK_API_KEY || ''; -if (API_KEY) { - deprecated('CLERK_API_KEY', 'Use `CLERK_SECRET_KEY` environment variable instead.'); -} export const SECRET_KEY = process.env.CLERK_SECRET_KEY || ''; export const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY || ''; export const DOMAIN = process.env.NEXT_PUBLIC_CLERK_DOMAIN || ''; diff --git a/packages/nextjs/src/server/getAuth.ts b/packages/nextjs/src/server/getAuth.ts index cf37b838973..f51e00de969 100644 --- a/packages/nextjs/src/server/getAuth.ts +++ b/packages/nextjs/src/server/getAuth.ts @@ -11,7 +11,7 @@ import { import type { SecretKeyOrApiKey } from '@clerk/types'; import { withLogger } from '../utils/debugLogger'; -import { API_KEY, API_URL, API_VERSION, SECRET_KEY } from './clerkClient'; +import { API_URL, API_VERSION, SECRET_KEY } from './clerkClient'; import { getAuthAuthHeaderMissing } from './errors'; import type { RequestLike } from './types'; import { getAuthKeyFromRequest, getCookie, getHeader, injectSSRStateIntoObject } from './utils'; @@ -50,7 +50,6 @@ export const createGetAuth = ({ } const options = { - apiKey: opts?.apiKey || API_KEY, secretKey: opts?.secretKey || SECRET_KEY, apiUrl: API_URL, apiVersion: API_VERSION, @@ -101,7 +100,6 @@ export const buildClerkProps: BuildClerkProps = (req, initState = {}) => { const authReason = getAuthKeyFromRequest(req, 'AuthReason'); const options = { - apiKey: API_KEY, secretKey: SECRET_KEY, apiUrl: API_URL, apiVersion: API_VERSION, diff --git a/packages/nextjs/src/server/utils.ts b/packages/nextjs/src/server/utils.ts index 37080d720e5..99561779fad 100644 --- a/packages/nextjs/src/server/utils.ts +++ b/packages/nextjs/src/server/utils.ts @@ -6,10 +6,9 @@ import type { NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; import { constants as nextConstants } from '../constants'; -import { API_KEY, DOMAIN, IS_SATELLITE, PROXY_URL, SECRET_KEY, SIGN_IN_URL } from './clerkClient'; +import { DOMAIN, IS_SATELLITE, PROXY_URL, SECRET_KEY, SIGN_IN_URL } from './clerkClient'; import { missingDomainAndProxy, missingSignInUrlInDev } from './errors'; -import type { NextMiddlewareResult, RequestLike } from './types'; -import type { WithAuthOptions } from './types'; +import type { NextMiddlewareResult, RequestLike, WithAuthOptions } from './types'; type AuthKey = 'AuthStatus' | 'AuthMessage' | 'AuthReason'; @@ -243,7 +242,7 @@ export const handleMultiDomainAndProxy = (req: NextRequest, opts: WithAuthOption throw new Error(missingDomainAndProxy); } - if (isSatellite && !isHttpOrHttps(signInUrl) && isDevelopmentFromApiKey(SECRET_KEY || API_KEY)) { + if (isSatellite && !isHttpOrHttps(signInUrl) && isDevelopmentFromApiKey(SECRET_KEY)) { throw new Error(missingSignInUrlInDev); } diff --git a/packages/nextjs/src/server/withClerkMiddleware.ts b/packages/nextjs/src/server/withClerkMiddleware.ts index b91b611c7d2..9ddb2e17456 100644 --- a/packages/nextjs/src/server/withClerkMiddleware.ts +++ b/packages/nextjs/src/server/withClerkMiddleware.ts @@ -4,15 +4,7 @@ import { deprecated } from '@clerk/shared/deprecated'; import type { NextFetchEvent, NextMiddleware, NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; -import { - API_KEY, - API_URL, - CLERK_JS_URL, - CLERK_JS_VERSION, - clerkClient, - PUBLISHABLE_KEY, - SECRET_KEY, -} from './clerkClient'; +import { API_URL, CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, PUBLISHABLE_KEY, SECRET_KEY } from './clerkClient'; import type { WithAuthOptions } from './types'; import { decorateRequest, handleMultiDomainAndProxy, setCustomAttributeOnRequest } from './utils'; @@ -47,7 +39,6 @@ export const withClerkMiddleware: WithClerkMiddleware = (...args: unknown[]) => // get auth state, check if we need to return an interstitial const requestState = await clerkClient.authenticateRequest({ ...opts, - apiKey: opts.apiKey || API_KEY, secretKey: opts.secretKey || SECRET_KEY, publishableKey: opts.publishableKey || PUBLISHABLE_KEY, isSatellite, From 2d4612ed5ff4952ba0996a07e2549ce4d627b145 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 16:38:54 +0200 Subject: [PATCH 08/13] chore(nextjs): Refactor to use `isDevelopmentFromApiKey` from `@clerk/shared` --- packages/nextjs/src/server/authMiddleware.ts | 3 +-- packages/nextjs/src/server/utils.ts | 5 +---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/nextjs/src/server/authMiddleware.ts b/packages/nextjs/src/server/authMiddleware.ts index f823fa45fa9..d394d605539 100644 --- a/packages/nextjs/src/server/authMiddleware.ts +++ b/packages/nextjs/src/server/authMiddleware.ts @@ -1,6 +1,6 @@ -/* eslint-disable turbo/no-undeclared-env-vars */ import type { AuthObject, RequestState } from '@clerk/backend'; import { buildRequestUrl, constants } from '@clerk/backend'; +import { isDevelopmentFromApiKey } from '@clerk/shared/keys'; import type Link from 'next/link'; import type { NextFetchEvent, NextMiddleware, NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; @@ -23,7 +23,6 @@ import { apiEndpointUnauthorizedNextResponse, decorateRequest, isCrossOrigin, - isDevelopmentFromApiKey, setRequestHeadersOnNextResponse, } from './utils'; diff --git a/packages/nextjs/src/server/utils.ts b/packages/nextjs/src/server/utils.ts index 99561779fad..81405b229bc 100644 --- a/packages/nextjs/src/server/utils.ts +++ b/packages/nextjs/src/server/utils.ts @@ -1,6 +1,7 @@ import type { RequestState } from '@clerk/backend'; import { buildRequestUrl, constants } from '@clerk/backend'; import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; +import { isDevelopmentFromApiKey } from '@clerk/shared/keys'; import { isHttpOrHttps } from '@clerk/shared/proxy'; import type { NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; @@ -148,10 +149,6 @@ export const injectSSRStateIntoObject = (obj: O, authObject: T) => { return { ...obj, __clerk_ssr_state }; }; -export function isDevelopmentFromApiKey(apiKey: string): boolean { - return apiKey.startsWith('test_') || apiKey.startsWith('sk_test_'); -} - // Auth result will be set as both a query param & header when applicable export function decorateRequest( req: NextRequest, From 6cfd6f63efa9dc5197afcc7df9523e5892d8d4ec Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 17:14:12 +0200 Subject: [PATCH 09/13] chore(nextjs): Drop `withClerkMiddleware` --- packages/nextjs/src/index.ts | 2 - packages/nextjs/src/server-helpers.client.ts | 1 - packages/nextjs/src/server-helpers.server.ts | 13 +-- .../__snapshots__/exports.test.ts.snap | 2 - .../__tests__/withClerkMiddleware.test.ts | 61 ------------- .../nextjs/src/server/authMiddleware.test.ts | 56 ++++++++++++ .../nextjs/src/server/authenticateRequest.ts | 17 ++-- packages/nextjs/src/server/errors.ts | 4 +- packages/nextjs/src/server/index.ts | 3 +- .../nextjs/src/server/withClerkMiddleware.ts | 89 ------------------- 10 files changed, 68 insertions(+), 180 deletions(-) delete mode 100644 packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts delete mode 100644 packages/nextjs/src/server/withClerkMiddleware.ts diff --git a/packages/nextjs/src/index.ts b/packages/nextjs/src/index.ts index 0fa24cae2c5..d055c317db1 100644 --- a/packages/nextjs/src/index.ts +++ b/packages/nextjs/src/index.ts @@ -99,5 +99,3 @@ export const redirectToSignIn = ServerHelperModule.redirectToSignIn as ServerHelpersServerModuleTypes['redirectToSignIn']; export const redirectToSignUp = ServerHelperModule.redirectToSignUp as ServerHelpersServerModuleTypes['redirectToSignUp']; -export const withClerkMiddleware = - ServerHelperModule.withClerkMiddleware as ServerHelpersServerModuleTypes['withClerkMiddleware']; diff --git a/packages/nextjs/src/server-helpers.client.ts b/packages/nextjs/src/server-helpers.client.ts index 49ea1c0d153..86a4c652571 100644 --- a/packages/nextjs/src/server-helpers.client.ts +++ b/packages/nextjs/src/server-helpers.client.ts @@ -7,6 +7,5 @@ export const currentUser = () => mockImplementation('currentUser()'); export const authMiddleware = () => mockImplementation('authMiddleware()'); export const getAuth = () => mockImplementation('getAuth()'); export const clerkClient = () => mockImplementation('clerkClient()'); -export const withClerkMiddleware = () => mockImplementation('withClerkMiddleware()'); export const redirectToSignIn = () => mockImplementation('redirectToSignIn()'); export const redirectToSignUp = () => mockImplementation('redirectToSignUp()'); diff --git a/packages/nextjs/src/server-helpers.server.ts b/packages/nextjs/src/server-helpers.server.ts index a4a04255f9a..c16af6a89d9 100644 --- a/packages/nextjs/src/server-helpers.server.ts +++ b/packages/nextjs/src/server-helpers.server.ts @@ -4,18 +4,8 @@ import { authMiddleware } from './server/authMiddleware'; import { clerkClient } from './server/clerkClient'; import { getAuth } from './server/getAuth'; import { redirectToSignIn, redirectToSignUp } from './server/redirect'; -import { withClerkMiddleware } from './server/withClerkMiddleware'; -export { - auth, - currentUser, - authMiddleware, - getAuth, - clerkClient, - withClerkMiddleware, - redirectToSignIn, - redirectToSignUp, -}; +export { auth, authMiddleware, clerkClient, currentUser, getAuth, redirectToSignIn, redirectToSignUp }; export type ServerHelpersServerModuleTypes = { auth: typeof auth; @@ -23,7 +13,6 @@ export type ServerHelpersServerModuleTypes = { authMiddleware: typeof authMiddleware; getAuth: typeof getAuth; clerkClient: typeof clerkClient; - withClerkMiddleware: typeof withClerkMiddleware; redirectToSignIn: typeof redirectToSignIn; redirectToSignUp: typeof redirectToSignUp; }; diff --git a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap index 73a5486b541..60de357a1ce 100644 --- a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap @@ -49,7 +49,6 @@ exports[`/server public exports should not include a breaking change 1`] = ` "currentUser", "debugRequestState", "decodeJwt", - "decorateResponseWithObservabilityHeaders", "deserialize", "getAuth", "hasValidSignature", @@ -65,6 +64,5 @@ exports[`/server public exports should not include a breaking change 1`] = ` "signedOutAuthObject", "verifyJwt", "verifyToken", - "withClerkMiddleware", ] `; diff --git a/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts b/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts deleted file mode 100644 index b3434067f82..00000000000 --- a/packages/nextjs/src/server/__tests__/withClerkMiddleware.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { expectTypeOf } from 'expect-type'; -import type { NextMiddleware } from 'next/server'; - -import type { WithAuthOptions } from '../types'; -import { withClerkMiddleware } from '../withClerkMiddleware'; - -describe('withClerkMiddleware', () => { - describe('Type tests', () => { - describe('WithAuthOptions', () => { - it('is the options argument for withClerkMiddleware', () => { - () => { - withClerkMiddleware({} as NextMiddleware, {} as WithAuthOptions); - }; - }); - - it('can receive the appropriate keys', () => { - expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); - expectTypeOf({ secretKey: '' }).toMatchTypeOf(); - expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); - expectTypeOf({ secretKey: '' }).toMatchTypeOf(); - }); - - describe('Multi domain', () => { - const defaultProps = { publishableKey: '', secretKey: '' }; - - it('proxyUrl (primary app)', () => { - expectTypeOf({ ...defaultProps, proxyUrl: 'test' }).toMatchTypeOf(); - }); - - it('proxyUrl + isSatellite (satellite app)', () => { - expectTypeOf({ ...defaultProps, proxyUrl: 'test', isSatellite: true }).toMatchTypeOf(); - }); - - it('domain + isSatellite (satellite app)', () => { - expectTypeOf({ ...defaultProps, domain: 'test', isSatellite: true }).toMatchTypeOf(); - }); - - it('only domain is not allowed', () => { - expectTypeOf({ ...defaultProps, domain: 'test' }).not.toMatchTypeOf(); - }); - - it('only isSatellite is not allowed', () => { - expectTypeOf({ ...defaultProps, isSatellite: true }).not.toMatchTypeOf(); - }); - - it('proxyUrl + domain is not allowed', () => { - expectTypeOf({ ...defaultProps, proxyUrl: 'test', domain: 'test' }).not.toMatchTypeOf(); - }); - - it('proxyUrl + domain + isSatellite is not allowed', () => { - expectTypeOf({ - ...defaultProps, - proxyUrl: 'test', - domain: 'test', - isSatellite: true, - }).not.toMatchTypeOf(); - }); - }); - }); - }); -}); diff --git a/packages/nextjs/src/server/authMiddleware.test.ts b/packages/nextjs/src/server/authMiddleware.test.ts index 76d4b96c587..fd5094db1a6 100644 --- a/packages/nextjs/src/server/authMiddleware.test.ts +++ b/packages/nextjs/src/server/authMiddleware.test.ts @@ -1,5 +1,6 @@ // There is no need to execute the complete authenticateRequest to test authMiddleware // This mock SHOULD exist before the import of authenticateRequest +import { expectTypeOf } from 'expect-type'; import { NextURL } from 'next/dist/server/web/next-url'; import type { NextFetchEvent, NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; @@ -598,3 +599,58 @@ describe('401 Response on Api Routes', function () { expect(resp?.status).toEqual(200); }); }); + +describe('Type tests', () => { + type AuthMiddleware = Parameters[0]; + describe('AuthMiddleware', () => { + it('is the options argument for authMiddleware', () => { + () => { + authMiddleware({} as AuthMiddleware); + }; + }); + + it('can receive the appropriate keys', () => { + expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); + expectTypeOf({ secretKey: '' }).toMatchTypeOf(); + expectTypeOf({ publishableKey: '', secretKey: '' }).toMatchTypeOf(); + expectTypeOf({ secretKey: '' }).toMatchTypeOf(); + }); + + describe('Multi domain', () => { + const defaultProps = { publishableKey: '', secretKey: '' }; + + it('proxyUrl (primary app)', () => { + expectTypeOf({ ...defaultProps, proxyUrl: 'test' }).toMatchTypeOf(); + }); + + it('proxyUrl + isSatellite (satellite app)', () => { + expectTypeOf({ ...defaultProps, proxyUrl: 'test', isSatellite: true }).toMatchTypeOf(); + }); + + it('domain + isSatellite (satellite app)', () => { + expectTypeOf({ ...defaultProps, domain: 'test', isSatellite: true }).toMatchTypeOf(); + }); + + it('only domain is not allowed', () => { + expectTypeOf({ ...defaultProps, domain: 'test' }).not.toMatchTypeOf(); + }); + + it('only isSatellite is not allowed', () => { + expectTypeOf({ ...defaultProps, isSatellite: true }).not.toMatchTypeOf(); + }); + + it('proxyUrl + domain is not allowed', () => { + expectTypeOf({ ...defaultProps, proxyUrl: 'test', domain: 'test' }).not.toMatchTypeOf(); + }); + + it('proxyUrl + domain + isSatellite is not allowed', () => { + expectTypeOf({ + ...defaultProps, + proxyUrl: 'test', + domain: 'test', + isSatellite: true, + }).not.toMatchTypeOf(); + }); + }); + }); +}); diff --git a/packages/nextjs/src/server/authenticateRequest.ts b/packages/nextjs/src/server/authenticateRequest.ts index 9c1a682c943..830d63f638f 100644 --- a/packages/nextjs/src/server/authenticateRequest.ts +++ b/packages/nextjs/src/server/authenticateRequest.ts @@ -1,18 +1,11 @@ +import { constants, debugRequestState } from '@clerk/backend'; import type { NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; import type { RequestState } from './clerkClient'; -import { - CLERK_JS_URL, - CLERK_JS_VERSION, - clerkClient, - debugRequestState, - PUBLISHABLE_KEY, - SECRET_KEY, -} from './clerkClient'; +import { CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, PUBLISHABLE_KEY, SECRET_KEY } from './clerkClient'; import type { WithAuthOptions } from './types'; import { apiEndpointUnauthorizedNextResponse, handleMultiDomainAndProxy } from './utils'; -import { decorateResponseWithObservabilityHeaders } from './withClerkMiddleware'; export const authenticateRequest = async (req: NextRequest, opts: WithAuthOptions) => { const { isSatellite, domain, signInUrl, proxyUrl } = handleMultiDomainAndProxy(req, opts); @@ -28,6 +21,12 @@ export const authenticateRequest = async (req: NextRequest, opts: WithAuthOption }); }; +const decorateResponseWithObservabilityHeaders = (res: NextResponse, requestState: RequestState) => { + requestState.message && res.headers.set(constants.Headers.AuthMessage, encodeURIComponent(requestState.message)); + requestState.reason && res.headers.set(constants.Headers.AuthReason, encodeURIComponent(requestState.reason)); + requestState.status && res.headers.set(constants.Headers.AuthStatus, encodeURIComponent(requestState.status)); +}; + export const handleUnknownState = (requestState: RequestState) => { const response = apiEndpointUnauthorizedNextResponse(); decorateResponseWithObservabilityHeaders(response, requestState); diff --git a/packages/nextjs/src/server/errors.ts b/packages/nextjs/src/server/errors.ts index 09c29cf0f06..88cd3d40098 100644 --- a/packages/nextjs/src/server/errors.ts +++ b/packages/nextjs/src/server/errors.ts @@ -2,7 +2,7 @@ export const missingDomainAndProxy = ` Missing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl. 1) With middleware - e.g. export default withClerkMiddleware(req => {...}, {domain:'YOUR_DOMAIN',isSatellite:true}); + e.g. export default authMiddleware({domain:'YOUR_DOMAIN',isSatellite:true}); 2) With environment variables e.g. NEXT_PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN' NEXT_PUBLIC_CLERK_IS_SATELLITE='true' @@ -13,7 +13,7 @@ Invalid signInUrl. A satellite application requires a signInUrl for development Check if signInUrl is missing from your configuration or if it is not an absolute URL 1) With middleware - e.g. export default withClerkMiddleware(req => {...}, {signInUrl:'SOME_URL',isSatellite:true}); + e.g. export default authMiddleware({signInUrl:'SOME_URL', isSatellite:true}); 2) With environment variables e.g. NEXT_PUBLIC_CLERK_SIGN_IN_URL='SOME_URL' NEXT_PUBLIC_CLERK_IS_SATELLITE='true'`; diff --git a/packages/nextjs/src/server/index.ts b/packages/nextjs/src/server/index.ts index 583593723c2..d19461d34a8 100644 --- a/packages/nextjs/src/server/index.ts +++ b/packages/nextjs/src/server/index.ts @@ -1,7 +1,6 @@ export * from './clerkClient'; export { buildClerkProps, getAuth } from './getAuth'; -export * from './withClerkMiddleware'; -export { redirectToSignUp, redirectToSignIn } from './redirect'; +export { redirectToSignIn, redirectToSignUp } from './redirect'; export { auth } from '../app-router/server/auth'; export { currentUser } from '../app-router/server/currentUser'; diff --git a/packages/nextjs/src/server/withClerkMiddleware.ts b/packages/nextjs/src/server/withClerkMiddleware.ts deleted file mode 100644 index 9ddb2e17456..00000000000 --- a/packages/nextjs/src/server/withClerkMiddleware.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { RequestState } from '@clerk/backend'; -import { constants, debugRequestState } from '@clerk/backend'; -import { deprecated } from '@clerk/shared/deprecated'; -import type { NextFetchEvent, NextMiddleware, NextRequest } from 'next/server'; -import { NextResponse } from 'next/server'; - -import { API_URL, CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, PUBLISHABLE_KEY, SECRET_KEY } from './clerkClient'; -import type { WithAuthOptions } from './types'; -import { decorateRequest, handleMultiDomainAndProxy, setCustomAttributeOnRequest } from './utils'; - -export interface WithClerkMiddleware { - (handler: NextMiddleware, opts?: WithAuthOptions): NextMiddleware; - - (): NextMiddleware; -} - -export const decorateResponseWithObservabilityHeaders = (res: NextResponse, requestState: RequestState) => { - requestState.message && res.headers.set(constants.Headers.AuthMessage, encodeURIComponent(requestState.message)); - requestState.reason && res.headers.set(constants.Headers.AuthReason, encodeURIComponent(requestState.reason)); - requestState.status && res.headers.set(constants.Headers.AuthStatus, encodeURIComponent(requestState.status)); -}; - -/** - * @deprecated withClerkMiddleware has been deprecated in favor of `authMiddleware`. - * For more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware - */ -export const withClerkMiddleware: WithClerkMiddleware = (...args: unknown[]) => { - const noop = () => undefined; - const [handler = noop, opts = {}] = args as [NextMiddleware, WithAuthOptions] | []; - - deprecated( - 'withClerkMiddleware', - 'Use `authMiddleware` instead.\nFor more details, consult the middleware documentation: https://clerk.com/docs/nextjs/middleware', - ); - - return async (req: NextRequest, event: NextFetchEvent) => { - const { isSatellite, domain, signInUrl, proxyUrl } = handleMultiDomainAndProxy(req, opts); - - // get auth state, check if we need to return an interstitial - const requestState = await clerkClient.authenticateRequest({ - ...opts, - secretKey: opts.secretKey || SECRET_KEY, - publishableKey: opts.publishableKey || PUBLISHABLE_KEY, - isSatellite, - domain, - signInUrl, - proxyUrl, - request: req, - }); - - // Interstitial case - // Note: there is currently no way to rewrite to a protected endpoint - // Therefore we have to resort to a public interstitial endpoint - if (requestState.isUnknown) { - const response = new NextResponse(null, { status: 401, headers: { 'Content-Type': 'text/html' } }); - decorateResponseWithObservabilityHeaders(response, requestState); - return response; - } - if (requestState.isInterstitial) { - const response = NextResponse.rewrite( - clerkClient.remotePublicInterstitialUrl({ - apiUrl: API_URL, - // TODO(@dimkl): use empty string for frontendApi until type is fixed in @clerk/backend to drop it - frontendApi: '', - publishableKey: opts.publishableKey || PUBLISHABLE_KEY, - clerkJSUrl: CLERK_JS_URL, - clerkJSVersion: CLERK_JS_VERSION, - proxyUrl: requestState.proxyUrl as any, - isSatellite: requestState.isSatellite, - domain: requestState.domain as any, - debugData: debugRequestState(requestState), - signInUrl: requestState.signInUrl, - }), - { status: 401 }, - ); - decorateResponseWithObservabilityHeaders(response, requestState); - return response; - } - - // Set auth result on request in a private property so that middleware can read it too - setCustomAttributeOnRequest(req, constants.Attributes.AuthStatus, requestState.status); - setCustomAttributeOnRequest(req, constants.Attributes.AuthMessage, requestState.message || ''); - setCustomAttributeOnRequest(req, constants.Attributes.AuthReason, requestState.reason || ''); - - // get result from provided handler - const res = await handler(req, event); - return decorateRequest(req, res, requestState); - }; -}; From bda4364ef021c215d64bf4d126ccdbc9acd01279 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 17:31:53 +0200 Subject: [PATCH 10/13] chore(nextjs): Drop constants from exports --- packages/nextjs/src/api/requireAuth.ts | 3 ++- packages/nextjs/src/api/withAuth.ts | 3 ++- .../__snapshots__/exports.test.ts.snap | 11 ----------- .../nextjs/src/server/authMiddleware.test.ts | 17 +++++++---------- packages/nextjs/src/server/authMiddleware.ts | 2 +- .../nextjs/src/server/authenticateRequest.ts | 3 ++- packages/nextjs/src/server/clerkClient.ts | 5 ----- packages/nextjs/src/server/getAuth.ts | 2 +- packages/nextjs/src/server/redirect.ts | 2 +- packages/nextjs/src/server/utils.ts | 2 +- 10 files changed, 17 insertions(+), 33 deletions(-) diff --git a/packages/nextjs/src/api/requireAuth.ts b/packages/nextjs/src/api/requireAuth.ts index 64f23354138..8fbbc4b248b 100644 --- a/packages/nextjs/src/api/requireAuth.ts +++ b/packages/nextjs/src/api/requireAuth.ts @@ -2,7 +2,8 @@ import type { ClerkMiddlewareOptions, RequireAuthProp } from '@clerk/clerk-sdk-n import { createClerkExpressRequireAuth } from '@clerk/clerk-sdk-node'; import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; -import { API_URL, clerkClient, PUBLISHABLE_KEY } from '../server'; +import { clerkClient } from '../server'; +import { API_URL, PUBLISHABLE_KEY } from '../server/constants'; import { runMiddleware } from './utils'; type NextApiHandlerRequireAuth = ( diff --git a/packages/nextjs/src/api/withAuth.ts b/packages/nextjs/src/api/withAuth.ts index 62046efa296..46e6ea64c7b 100644 --- a/packages/nextjs/src/api/withAuth.ts +++ b/packages/nextjs/src/api/withAuth.ts @@ -2,7 +2,8 @@ import type { ClerkMiddlewareOptions, WithAuthProp } from '@clerk/clerk-sdk-node import { createClerkExpressWithAuth } from '@clerk/clerk-sdk-node'; import type { NextApiRequest, NextApiResponse } from 'next'; -import { API_URL, clerkClient, PUBLISHABLE_KEY } from '../server'; +import { clerkClient } from '../server'; +import { API_URL, PUBLISHABLE_KEY } from '../server/constants'; import { runMiddleware } from './utils'; type NextApiHandlerWithAuth = ( diff --git a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap index 60de357a1ce..88d425c7733 100644 --- a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap @@ -2,20 +2,14 @@ exports[`/server public exports should not include a breaking change 1`] = ` [ - "API_URL", - "API_VERSION", "AllowlistIdentifier", "AuthStatus", - "CLERK_JS_URL", - "CLERK_JS_VERSION", "Clerk", "Client", - "DOMAIN", "DeletedObject", "Email", "EmailAddress", "ExternalAccount", - "IS_SATELLITE", "IdentificationLink", "Invitation", "OauthAccessToken", @@ -24,13 +18,8 @@ exports[`/server public exports should not include a breaking change 1`] = ` "OrganizationInvitation", "OrganizationMembership", "OrganizationMembershipPublicUserData", - "PROXY_URL", - "PUBLISHABLE_KEY", "PhoneNumber", "RedirectUrl", - "SECRET_KEY", - "SIGN_IN_URL", - "SIGN_UP_URL", "SMSMessage", "Session", "SignInToken", diff --git a/packages/nextjs/src/server/authMiddleware.test.ts b/packages/nextjs/src/server/authMiddleware.test.ts index fd5094db1a6..de85fe73a8e 100644 --- a/packages/nextjs/src/server/authMiddleware.test.ts +++ b/packages/nextjs/src/server/authMiddleware.test.ts @@ -50,15 +50,10 @@ jest.mock('./authenticateRequest', () => { // Removing this mock will cause the authMiddleware tests to fail due to missing publishable key // This mock SHOULD exist before the imports -jest.mock('./clerkClient', () => { - const { debugRequestState } = jest.requireActual('./clerkClient'); +jest.mock('./constants', () => { return { PUBLISHABLE_KEY: 'pk_test_Y2xlcmsuaW5jbHVkZWQua2F0eWRpZC05Mi5sY2wuZGV2JA', SECRET_KEY: 'sk_test_xxxxxxxxxxxxxxxxxx', - clerkClient: { - localInterstitial: jest.fn().mockResolvedValue('interstitial'), - }, - debugRequestState, }; }); @@ -202,11 +197,13 @@ describe('default ignored routes matcher', () => { }); describe('authMiddleware(params)', () => { + beforeAll(() => { + clerkClient.localInterstitial = jest.fn().mockResolvedValue('interstitial'); + }); + beforeEach(() => { - // @ts-ignore - authenticateRequest.mockClear(); - // @ts-ignore - clerkClient.localInterstitial.mockClear(); + (authenticateRequest as jest.Mock).mockClear(); + (clerkClient.localInterstitial as jest.Mock).mockClear(); }); describe('without params', function () { diff --git a/packages/nextjs/src/server/authMiddleware.ts b/packages/nextjs/src/server/authMiddleware.ts index d394d605539..c6c675290d3 100644 --- a/packages/nextjs/src/server/authMiddleware.ts +++ b/packages/nextjs/src/server/authMiddleware.ts @@ -8,7 +8,7 @@ import { NextResponse } from 'next/server'; import { isRedirect, mergeResponses, paths, setHeader, stringifyHeaders } from '../utils'; import { withLogger } from '../utils/debugLogger'; import { authenticateRequest, handleInterstitialState, handleUnknownState } from './authenticateRequest'; -import { SECRET_KEY } from './clerkClient'; +import { SECRET_KEY } from './constants'; import { DEV_BROWSER_JWT_MARKER, setDevBrowserJWTInURL } from './devBrowser'; import { clockSkewDetected, diff --git a/packages/nextjs/src/server/authenticateRequest.ts b/packages/nextjs/src/server/authenticateRequest.ts index 830d63f638f..51d64f3ad43 100644 --- a/packages/nextjs/src/server/authenticateRequest.ts +++ b/packages/nextjs/src/server/authenticateRequest.ts @@ -3,7 +3,8 @@ import type { NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; import type { RequestState } from './clerkClient'; -import { CLERK_JS_URL, CLERK_JS_VERSION, clerkClient, PUBLISHABLE_KEY, SECRET_KEY } from './clerkClient'; +import { clerkClient } from './clerkClient'; +import { CLERK_JS_URL, CLERK_JS_VERSION, PUBLISHABLE_KEY, SECRET_KEY } from './constants'; import type { WithAuthOptions } from './types'; import { apiEndpointUnauthorizedNextResponse, handleMultiDomainAndProxy } from './utils'; diff --git a/packages/nextjs/src/server/clerkClient.ts b/packages/nextjs/src/server/clerkClient.ts index f285dc24c76..04e6413ef34 100644 --- a/packages/nextjs/src/server/clerkClient.ts +++ b/packages/nextjs/src/server/clerkClient.ts @@ -18,8 +18,3 @@ const createClerkClient = Clerk; export { Clerk, clerkClient, createClerkClient }; export * from '@clerk/backend'; - -/** - * @deprecated Don't export the constants. Should be marked as internal - */ -export * from './constants'; diff --git a/packages/nextjs/src/server/getAuth.ts b/packages/nextjs/src/server/getAuth.ts index f51e00de969..8900042729a 100644 --- a/packages/nextjs/src/server/getAuth.ts +++ b/packages/nextjs/src/server/getAuth.ts @@ -11,7 +11,7 @@ import { import type { SecretKeyOrApiKey } from '@clerk/types'; import { withLogger } from '../utils/debugLogger'; -import { API_URL, API_VERSION, SECRET_KEY } from './clerkClient'; +import { API_URL, API_VERSION, SECRET_KEY } from './constants'; import { getAuthAuthHeaderMissing } from './errors'; import type { RequestLike } from './types'; import { getAuthKeyFromRequest, getCookie, getHeader, injectSSRStateIntoObject } from './utils'; diff --git a/packages/nextjs/src/server/redirect.ts b/packages/nextjs/src/server/redirect.ts index a3f2d62fa39..cc955aa5d37 100644 --- a/packages/nextjs/src/server/redirect.ts +++ b/packages/nextjs/src/server/redirect.ts @@ -2,7 +2,7 @@ import { constants, redirect } from '@clerk/backend'; import { NextResponse } from 'next/server'; import { setHeader } from '../utils'; -import { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from './clerkClient'; +import { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from './constants'; const redirectAdapter = (url: string) => { const res = NextResponse.redirect(url); diff --git a/packages/nextjs/src/server/utils.ts b/packages/nextjs/src/server/utils.ts index 81405b229bc..82111a67fbe 100644 --- a/packages/nextjs/src/server/utils.ts +++ b/packages/nextjs/src/server/utils.ts @@ -7,7 +7,7 @@ import type { NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; import { constants as nextConstants } from '../constants'; -import { DOMAIN, IS_SATELLITE, PROXY_URL, SECRET_KEY, SIGN_IN_URL } from './clerkClient'; +import { DOMAIN, IS_SATELLITE, PROXY_URL, SECRET_KEY, SIGN_IN_URL } from './constants'; import { missingDomainAndProxy, missingSignInUrlInDev } from './errors'; import type { NextMiddlewareResult, RequestLike, WithAuthOptions } from './types'; From 4fe6c244aff06262b65347acd7fb4fe4f5c598b3 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 19:25:40 +0200 Subject: [PATCH 11/13] chore(nextjs): Drop `api` subpath import --- packages/nextjs/api/package.json | 5 -- packages/nextjs/package.json | 8 +-- .../__snapshots__/exports.test.ts.snap | 62 ------------------- .../nextjs/src/api/__tests__/exports.test.ts | 7 --- packages/nextjs/src/api/index.ts | 46 -------------- packages/nextjs/src/api/requireAuth.ts | 40 ------------ packages/nextjs/src/api/utils.ts | 14 ----- packages/nextjs/src/api/withAuth.ts | 28 --------- 8 files changed, 1 insertion(+), 209 deletions(-) delete mode 100644 packages/nextjs/api/package.json delete mode 100644 packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap delete mode 100644 packages/nextjs/src/api/__tests__/exports.test.ts delete mode 100644 packages/nextjs/src/api/index.ts delete mode 100644 packages/nextjs/src/api/requireAuth.ts delete mode 100644 packages/nextjs/src/api/utils.ts delete mode 100644 packages/nextjs/src/api/withAuth.ts diff --git a/packages/nextjs/api/package.json b/packages/nextjs/api/package.json deleted file mode 100644 index e8af113a509..00000000000 --- a/packages/nextjs/api/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "main": "../dist/cjs/api/index.js", - "module": "../dist/esm/api/index.js", - "types": "../dist/types/api/index.d.ts" -} diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index a371aa6f143..41f6c0eb9dd 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -34,11 +34,6 @@ "types": "./dist/types/server/index.d.ts", "import": "./dist/esm/server/index.js", "require": "./dist/cjs/server/index.js" - }, - "./api": { - "types": "./dist/types/api/index.d.ts", - "import": "./dist/esm/api/index.js", - "require": "./dist/cjs/api/index.js" } }, "main": "./dist/cjs/index.js", @@ -46,8 +41,7 @@ "types": "./dist/types/index.d.ts", "files": [ "dist", - "server", - "api" + "server" ], "scripts": { "build": "npm run clean && tsup", diff --git a/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap deleted file mode 100644 index 332b415bd70..00000000000 --- a/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap +++ /dev/null @@ -1,62 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`/api public exports should not include a breaking change 1`] = ` -[ - "AllowlistIdentifier", - "AuthStatus", - "Clerk", - "Client", - "DeletedObject", - "Email", - "EmailAddress", - "ExternalAccount", - "IdentificationLink", - "Invitation", - "OauthAccessToken", - "ObjectType", - "Organization", - "OrganizationInvitation", - "OrganizationMembership", - "OrganizationMembershipPublicUserData", - "PhoneNumber", - "RedirectUrl", - "SMSMessage", - "Session", - "SignInToken", - "Token", - "User", - "Verification", - "allowlistIdentifiers", - "buildRequestUrl", - "clerkClient", - "clients", - "constants", - "createAuthenticateRequest", - "createClerkClient", - "createIsomorphicRequest", - "debugRequestState", - "decodeJwt", - "deserialize", - "emailAddresses", - "emails", - "hasValidSignature", - "invitations", - "loadInterstitialFromLocal", - "makeAuthObjectSerializable", - "organizations", - "phoneNumbers", - "prunePrivateMetadata", - "redirect", - "requireAuth", - "sanitizeAuthObject", - "sessions", - "signJwt", - "signedInAuthObject", - "signedOutAuthObject", - "smsMessages", - "users", - "verifyJwt", - "verifyToken", - "withAuth", -] -`; diff --git a/packages/nextjs/src/api/__tests__/exports.test.ts b/packages/nextjs/src/api/__tests__/exports.test.ts deleted file mode 100644 index 66b4f62894d..00000000000 --- a/packages/nextjs/src/api/__tests__/exports.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as publicExports from '../index'; - -describe('/api public exports', () => { - it('should not include a breaking change', () => { - expect(Object.keys(publicExports).sort()).toMatchSnapshot(); - }); -}); diff --git a/packages/nextjs/src/api/index.ts b/packages/nextjs/src/api/index.ts deleted file mode 100644 index 71d0fceddf0..00000000000 --- a/packages/nextjs/src/api/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Clerk } from '@clerk/backend'; -export type { - ClerkMiddleware, - ClerkMiddlewareOptions, - LooseAuthProp, - RequireAuthProp, - StrictAuthProp, - WithAuthProp, -} from '@clerk/clerk-sdk-node'; - -import { clerkClient } from '../server/clerkClient'; - -export * from '@clerk/backend'; - -const createClerkClient = Clerk; - -export { requireAuth } from './requireAuth'; -export { withAuth } from './withAuth'; - -const { - users, - smsMessages, - sessions, - emailAddresses, - phoneNumbers, - emails, - invitations, - organizations, - clients, - allowlistIdentifiers, -} = clerkClient; - -export { - users, - smsMessages, - sessions, - emailAddresses, - phoneNumbers, - emails, - invitations, - organizations, - clients, - allowlistIdentifiers, - createClerkClient, - clerkClient, -}; diff --git a/packages/nextjs/src/api/requireAuth.ts b/packages/nextjs/src/api/requireAuth.ts deleted file mode 100644 index 8fbbc4b248b..00000000000 --- a/packages/nextjs/src/api/requireAuth.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { ClerkMiddlewareOptions, RequireAuthProp } from '@clerk/clerk-sdk-node'; -import { createClerkExpressRequireAuth } from '@clerk/clerk-sdk-node'; -import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'; - -import { clerkClient } from '../server'; -import { API_URL, PUBLISHABLE_KEY } from '../server/constants'; -import { runMiddleware } from './utils'; - -type NextApiHandlerRequireAuth = ( - req: RequireAuthProp, - res: NextApiResponse, -) => void | Promise; - -export function requireAuth(handler: NextApiHandlerRequireAuth, options?: ClerkMiddlewareOptions): NextApiHandler { - return async (req, res) => { - try { - await runMiddleware( - req, - res, - createClerkExpressRequireAuth({ - clerkClient, - apiUrl: API_URL, - publishableKey: PUBLISHABLE_KEY, - })(options), - ); - return handler(req as RequireAuthProp, res); - } catch (error) { - // @ts-ignore - const errorData = error.data || { error: error.message }; - // @ts-ignore - res.statusCode = error.statusCode || 401; - /** - * Res.json is available in express-like environments. - * Res.send is available in express-like but also Fastify. - */ - res.json ? res.json(errorData) : res.send(errorData); - res.end(); - } - }; -} diff --git a/packages/nextjs/src/api/utils.ts b/packages/nextjs/src/api/utils.ts deleted file mode 100644 index e1268998443..00000000000 --- a/packages/nextjs/src/api/utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; - -// https://nextjs.org/docs/api-routes/api-middlewares#connectexpress-middleware-support -export function runMiddleware(req: NextApiRequest, res: NextApiResponse, fn: (...args: any) => any) { - return new Promise((resolve, reject) => { - // @ts-ignore - void fn(req, res, result => { - if (result instanceof Error) { - return reject(result); - } - return resolve(result); - }); - }); -} diff --git a/packages/nextjs/src/api/withAuth.ts b/packages/nextjs/src/api/withAuth.ts deleted file mode 100644 index 46e6ea64c7b..00000000000 --- a/packages/nextjs/src/api/withAuth.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { ClerkMiddlewareOptions, WithAuthProp } from '@clerk/clerk-sdk-node'; -import { createClerkExpressWithAuth } from '@clerk/clerk-sdk-node'; -import type { NextApiRequest, NextApiResponse } from 'next'; - -import { clerkClient } from '../server'; -import { API_URL, PUBLISHABLE_KEY } from '../server/constants'; -import { runMiddleware } from './utils'; - -type NextApiHandlerWithAuth = ( - req: WithAuthProp, - res: NextApiResponse, -) => void | Promise; - -export function withAuth(handler: NextApiHandlerWithAuth, options?: ClerkMiddlewareOptions): NextApiHandlerWithAuth { - return async (req, res) => { - await runMiddleware( - req, - res, - createClerkExpressWithAuth({ - clerkClient, - apiUrl: API_URL, - publishableKey: PUBLISHABLE_KEY, - })(options), - ); - - return handler(req, res); - }; -} From d6766614fe0e36a4e0366fd3a1565dc42aa1ebb2 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Thu, 2 Nov 2023 09:47:51 +0200 Subject: [PATCH 12/13] chore(nextjs): Drop unused `@clerk/clerk-sdk-node` dependency --- package-lock.json | 1095 +++++++++++++--------------------- packages/nextjs/package.json | 1 - 2 files changed, 427 insertions(+), 669 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f170d74131..b78d4154594 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,7 +64,6 @@ }, "workspaces": { "packages": [ - "integration", "packages/*" ] } @@ -85,6 +84,7 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -700,7 +700,7 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -982,7 +982,7 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -993,7 +993,7 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1004,7 +1004,7 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -1093,7 +1093,7 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1104,7 +1104,7 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1115,7 +1115,7 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.21.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" @@ -1129,7 +1129,7 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1140,7 +1140,7 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1151,7 +1151,7 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1162,7 +1162,7 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1173,7 +1173,7 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1184,7 +1184,7 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1209,7 +1209,7 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1223,7 +1223,7 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.21.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" @@ -2321,7 +2321,7 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@builder.io/partytown": { @@ -3504,6 +3504,7 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.2", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -3525,10 +3526,12 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", + "dev": true, "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.21.0", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -3542,6 +3545,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -3552,6 +3556,7 @@ }, "node_modules/@eslint/js": { "version": "8.49.0", + "dev": true, "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3807,6 +3812,7 @@ }, "node_modules/@fastify/ajv-compiler": { "version": "3.5.0", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.11.0", @@ -3816,6 +3822,7 @@ }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { "version": "8.12.0", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3830,18 +3837,22 @@ }, "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/@fastify/deepmerge": { "version": "1.3.0", + "dev": true, "license": "MIT" }, "node_modules/@fastify/error": { "version": "3.2.1", + "dev": true, "license": "MIT" }, "node_modules/@fastify/fast-json-stringify-compiler": { "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { "fast-json-stringify": "^5.7.0" @@ -4440,6 +4451,7 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.11", + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -4452,6 +4464,7 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.22" @@ -4463,6 +4476,7 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@iarna/toml": { @@ -4556,7 +4570,7 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -4571,7 +4585,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4579,7 +4593,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -4591,7 +4605,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -4602,7 +4616,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -4613,7 +4627,7 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4621,7 +4635,7 @@ }, "node_modules/@jest/console": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -4637,7 +4651,7 @@ }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4651,7 +4665,7 @@ }, "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4666,7 +4680,7 @@ }, "node_modules/@jest/console/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4677,12 +4691,12 @@ }, "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4690,7 +4704,7 @@ }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -4701,7 +4715,7 @@ }, "node_modules/@jest/core": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.5.0", @@ -4747,7 +4761,7 @@ }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4761,7 +4775,7 @@ }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4776,7 +4790,7 @@ }, "node_modules/@jest/core/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4787,12 +4801,12 @@ }, "node_modules/@jest/core/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4800,7 +4814,7 @@ }, "node_modules/@jest/core/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -4813,7 +4827,7 @@ }, "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4824,12 +4838,12 @@ }, "node_modules/@jest/core/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -4840,7 +4854,7 @@ }, "node_modules/@jest/environment": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.5.0", @@ -4854,7 +4868,7 @@ }, "node_modules/@jest/expect": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "expect": "^29.5.0", @@ -4866,7 +4880,7 @@ }, "node_modules/@jest/expect-utils": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "jest-get-type": "^29.4.3" @@ -4877,7 +4891,7 @@ }, "node_modules/@jest/fake-timers": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -4893,7 +4907,7 @@ }, "node_modules/@jest/globals": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.5.0", @@ -4907,7 +4921,7 @@ }, "node_modules/@jest/reporters": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", @@ -4949,7 +4963,7 @@ }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4963,7 +4977,7 @@ }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4978,7 +4992,7 @@ }, "node_modules/@jest/reporters/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4989,12 +5003,12 @@ }, "node_modules/@jest/reporters/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/reporters/node_modules/glob": { "version": "7.2.3", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -5013,7 +5027,7 @@ }, "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5021,7 +5035,7 @@ }, "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -5035,7 +5049,7 @@ }, "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5049,7 +5063,7 @@ }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5060,7 +5074,7 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -5071,7 +5085,7 @@ }, "node_modules/@jest/source-map": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.15", @@ -5084,7 +5098,7 @@ }, "node_modules/@jest/test-result": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.5.0", @@ -5098,7 +5112,7 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "^29.5.0", @@ -5112,7 +5126,7 @@ }, "node_modules/@jest/transform": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -5137,7 +5151,7 @@ }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -5151,7 +5165,7 @@ }, "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5166,7 +5180,7 @@ }, "node_modules/@jest/transform/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5177,17 +5191,17 @@ }, "node_modules/@jest/transform/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/transform/node_modules/convert-source-map": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5195,12 +5209,12 @@ }, "node_modules/@jest/transform/node_modules/signal-exit": { "version": "3.0.7", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5211,7 +5225,7 @@ }, "node_modules/@jest/transform/node_modules/write-file-atomic": { "version": "4.0.2", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -5223,7 +5237,7 @@ }, "node_modules/@jest/types": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -5239,7 +5253,7 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -5253,7 +5267,7 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5268,7 +5282,7 @@ }, "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5279,12 +5293,12 @@ }, "node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5292,7 +5306,7 @@ }, "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -7320,7 +7334,7 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -7374,7 +7388,7 @@ }, "node_modules/@sinonjs/commons": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" @@ -7382,7 +7396,7 @@ }, "node_modules/@sinonjs/fake-timers": { "version": "10.2.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -7936,7 +7950,7 @@ }, "node_modules/@types/babel__core": { "version": "7.20.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", @@ -7948,7 +7962,7 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -7956,7 +7970,7 @@ }, "node_modules/@types/babel__template": { "version": "7.4.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", @@ -7965,7 +7979,7 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" @@ -8173,7 +8187,7 @@ }, "node_modules/@types/graceful-fs": { "version": "4.1.6", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -8207,12 +8221,12 @@ }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -8220,7 +8234,7 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -8356,7 +8370,7 @@ }, "node_modules/@types/prettier": { "version": "2.7.3", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/prop-types": { @@ -8491,7 +8505,7 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/testing-library__jest-dom": { @@ -8540,7 +8554,7 @@ }, "node_modules/@types/yargs": { "version": "17.0.24", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -8548,7 +8562,7 @@ }, "node_modules/@types/yargs-parser": { "version": "21.0.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/yoga-layout": { @@ -8589,145 +8603,6 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/parser": { "version": "6.9.0", "license": "BSD-2-Clause", @@ -9572,6 +9447,7 @@ }, "node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -9587,6 +9463,7 @@ }, "node_modules/abstract-logging": { "version": "2.0.1", + "dev": true, "license": "MIT" }, "node_modules/accepts": { @@ -9603,6 +9480,7 @@ }, "node_modules/acorn": { "version": "8.10.0", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -9630,6 +9508,7 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -9689,6 +9568,7 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -9704,6 +9584,7 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -9718,6 +9599,7 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/ajv-keywords": { @@ -9751,7 +9633,7 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -9765,7 +9647,7 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "devOptional": true, + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -9787,6 +9669,7 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9814,7 +9697,7 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -9869,6 +9752,7 @@ }, "node_modules/archy": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/are-we-there-yet": { @@ -9888,7 +9772,7 @@ }, "node_modules/argparse": { "version": "1.0.10", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -10120,6 +10004,7 @@ }, "node_modules/atomic-sleep": { "version": "1.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -10184,6 +10069,7 @@ }, "node_modules/avvio": { "version": "8.2.1", + "dev": true, "license": "MIT", "dependencies": { "archy": "^1.0.0", @@ -10231,38 +10117,9 @@ "dev": true, "license": "ISC" }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/babel-jest": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/transform": "^29.5.0", @@ -10282,7 +10139,7 @@ }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -10296,7 +10153,7 @@ }, "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -10311,7 +10168,7 @@ }, "node_modules/babel-jest/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -10322,12 +10179,12 @@ }, "node_modules/babel-jest/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/babel-jest/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10335,7 +10192,7 @@ }, "node_modules/babel-jest/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -10399,7 +10256,7 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -10414,7 +10271,7 @@ }, "node_modules/babel-plugin-jest-hoist": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", @@ -10570,7 +10427,7 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -10658,7 +10515,7 @@ }, "node_modules/babel-preset-jest": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.5.0", @@ -11068,7 +10925,7 @@ }, "node_modules/bser": { "version": "2.1.1", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" @@ -11103,7 +10960,7 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/builtin-modules": { @@ -11361,7 +11218,7 @@ }, "node_modules/camelcase": { "version": "6.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11522,7 +11379,7 @@ }, "node_modules/char-regex": { "version": "1.0.2", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11620,7 +11477,7 @@ }, "node_modules/cjs-module-lexer": { "version": "1.2.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/clean-regexp": { @@ -11887,7 +11744,7 @@ }, "node_modules/cliui": { "version": "8.0.1", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -11932,7 +11789,7 @@ }, "node_modules/co": { "version": "4.6.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -11950,7 +11807,7 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/color": { @@ -13003,7 +12860,7 @@ }, "node_modules/dedent": { "version": "0.7.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/deep-eql": { @@ -13054,6 +12911,7 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "dev": true, "license": "MIT" }, "node_modules/deepmerge": { @@ -13301,7 +13159,7 @@ }, "node_modules/detect-newline": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13476,6 +13334,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -13687,7 +13546,7 @@ }, "node_modules/emittery": { "version": "0.13.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -14225,6 +14084,7 @@ }, "node_modules/eslint": { "version": "8.49.0", + "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -14786,23 +14646,6 @@ "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-testing-library": { - "version": "3.10.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "^3.10.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^5 || ^6 || ^7" - } - }, "node_modules/eslint-plugin-tsdoc": { "version": "0.2.17", "license": "MIT", @@ -14886,6 +14729,7 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -14991,6 +14835,7 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -15004,10 +14849,12 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", + "dev": true, "license": "Python-2.0" }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -15022,6 +14869,7 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -15032,10 +14880,12 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", + "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/globals": { "version": "13.20.0", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -15049,6 +14899,7 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15056,6 +14907,7 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -15066,6 +14918,7 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -15076,6 +14929,7 @@ }, "node_modules/espree": { "version": "9.6.1", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", @@ -15091,7 +14945,7 @@ }, "node_modules/esprima": { "version": "4.0.1", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -15184,6 +15038,7 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -15196,6 +15051,7 @@ }, "node_modules/events": { "version": "3.3.0", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -15245,7 +15101,7 @@ }, "node_modules/exit": { "version": "0.1.2", - "devOptional": true, + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -15260,7 +15116,7 @@ }, "node_modules/expect": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.5.0", @@ -15283,7 +15139,7 @@ }, "node_modules/expect/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -15297,7 +15153,7 @@ }, "node_modules/expect/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -15312,7 +15168,7 @@ }, "node_modules/expect/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -15323,12 +15179,12 @@ }, "node_modules/expect/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/expect/node_modules/diff-sequences": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -15336,7 +15192,7 @@ }, "node_modules/expect/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15344,7 +15200,7 @@ }, "node_modules/expect/node_modules/jest-diff": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -15358,7 +15214,7 @@ }, "node_modules/expect/node_modules/jest-matcher-utils": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -15372,7 +15228,7 @@ }, "node_modules/expect/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -15385,7 +15241,7 @@ }, "node_modules/expect/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -15396,12 +15252,12 @@ }, "node_modules/expect/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/expect/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -15634,10 +15490,12 @@ }, "node_modules/fast-content-type-parse": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", + "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -15679,6 +15537,7 @@ }, "node_modules/fast-json-stringify": { "version": "5.7.0", + "dev": true, "license": "MIT", "dependencies": { "@fastify/deepmerge": "^1.0.0", @@ -15691,6 +15550,7 @@ }, "node_modules/fast-json-stringify/node_modules/ajv": { "version": "8.12.0", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -15705,14 +15565,17 @@ }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "dev": true, "license": "MIT" }, "node_modules/fast-querystring": { "version": "1.1.2", + "dev": true, "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" @@ -15720,6 +15583,7 @@ }, "node_modules/fast-redact": { "version": "3.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -15732,6 +15596,7 @@ }, "node_modules/fast-uri": { "version": "2.2.0", + "dev": true, "license": "MIT" }, "node_modules/fastest-levenshtein": { @@ -15743,6 +15608,7 @@ }, "node_modules/fastify": { "version": "4.12.0", + "dev": true, "license": "MIT", "dependencies": { "@fastify/ajv-compiler": "^3.3.1", @@ -15764,6 +15630,7 @@ }, "node_modules/fastify-plugin": { "version": "4.5.0", + "dev": true, "license": "MIT" }, "node_modules/fastq": { @@ -15786,7 +15653,7 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" @@ -15908,6 +15775,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -16007,6 +15875,7 @@ }, "node_modules/find-my-way": { "version": "7.6.2", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -16023,6 +15892,7 @@ }, "node_modules/find-up": { "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -16046,6 +15916,7 @@ }, "node_modules/flat-cache": { "version": "3.0.4", + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.1.0", @@ -16057,6 +15928,7 @@ }, "node_modules/flat-cache/node_modules/glob": { "version": "7.2.3", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -16075,6 +15947,7 @@ }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", + "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -16088,6 +15961,7 @@ }, "node_modules/flatted": { "version": "3.2.7", + "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { @@ -16366,6 +16240,7 @@ }, "node_modules/forwarded": { "version": "0.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -17312,128 +17187,6 @@ } } }, - "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, "node_modules/gatsby/node_modules/@typescript-eslint/parser": { "version": "5.62.0", "dev": true, @@ -17770,28 +17523,6 @@ } } }, - "node_modules/gatsby/node_modules/eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">= 4", - "eslint": ">=5" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, "node_modules/gatsby/node_modules/eslint-scope": { "version": "5.1.1", "dev": true, @@ -18047,7 +17778,7 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -18076,7 +17807,7 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -18296,6 +18027,7 @@ }, "node_modules/glob-parent": { "version": "6.0.2", + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -18826,7 +18558,7 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/html-rewriter-wasm": { @@ -19166,7 +18898,7 @@ }, "node_modules/import-local": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", @@ -19184,6 +18916,7 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -19351,6 +19084,7 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -19554,7 +19288,7 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -19697,6 +19431,7 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -19987,7 +19722,7 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -19995,7 +19730,7 @@ }, "node_modules/istanbul-lib-instrument": { "version": "5.2.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", @@ -20010,7 +19745,7 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.0", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -20018,7 +19753,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", @@ -20031,7 +19766,7 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20039,7 +19774,7 @@ }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20050,7 +19785,7 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", @@ -20063,7 +19798,7 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -20071,7 +19806,7 @@ }, "node_modules/istanbul-reports": { "version": "3.1.5", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", @@ -20116,7 +19851,7 @@ }, "node_modules/jest": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "^29.5.0", @@ -20141,7 +19876,7 @@ }, "node_modules/jest-changed-files": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "execa": "^5.0.0", @@ -20153,7 +19888,7 @@ }, "node_modules/jest-changed-files/node_modules/p-limit": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -20167,7 +19902,7 @@ }, "node_modules/jest-circus": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.5.0", @@ -20197,7 +19932,7 @@ }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -20211,7 +19946,7 @@ }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -20226,7 +19961,7 @@ }, "node_modules/jest-circus/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -20237,12 +19972,12 @@ }, "node_modules/jest-circus/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-circus/node_modules/diff-sequences": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -20250,7 +19985,7 @@ }, "node_modules/jest-circus/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20258,7 +19993,7 @@ }, "node_modules/jest-circus/node_modules/jest-diff": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -20272,7 +20007,7 @@ }, "node_modules/jest-circus/node_modules/jest-matcher-utils": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -20286,7 +20021,7 @@ }, "node_modules/jest-circus/node_modules/p-limit": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -20300,7 +20035,7 @@ }, "node_modules/jest-circus/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -20313,7 +20048,7 @@ }, "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -20324,12 +20059,12 @@ }, "node_modules/jest-circus/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20340,7 +20075,7 @@ }, "node_modules/jest-cli": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "^29.5.0", @@ -20373,7 +20108,7 @@ }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -20387,7 +20122,7 @@ }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -20402,7 +20137,7 @@ }, "node_modules/jest-cli/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -20413,12 +20148,12 @@ }, "node_modules/jest-cli/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-cli/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20426,7 +20161,7 @@ }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20437,7 +20172,7 @@ }, "node_modules/jest-config": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -20481,7 +20216,7 @@ }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -20495,7 +20230,7 @@ }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -20510,7 +20245,7 @@ }, "node_modules/jest-config/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -20521,12 +20256,12 @@ }, "node_modules/jest-config/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-config/node_modules/glob": { "version": "7.2.3", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -20545,7 +20280,7 @@ }, "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20553,7 +20288,7 @@ }, "node_modules/jest-config/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -20566,7 +20301,7 @@ }, "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -20577,12 +20312,12 @@ }, "node_modules/jest-config/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20593,7 +20328,7 @@ }, "node_modules/jest-docblock": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" @@ -20604,7 +20339,7 @@ }, "node_modules/jest-each": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -20619,7 +20354,7 @@ }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -20633,7 +20368,7 @@ }, "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -20648,7 +20383,7 @@ }, "node_modules/jest-each/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -20659,12 +20394,12 @@ }, "node_modules/jest-each/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-each/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20672,7 +20407,7 @@ }, "node_modules/jest-each/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -20685,7 +20420,7 @@ }, "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -20696,12 +20431,12 @@ }, "node_modules/jest-each/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20738,7 +20473,7 @@ }, "node_modules/jest-environment-node": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.5.0", @@ -20754,7 +20489,7 @@ }, "node_modules/jest-get-type": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -20762,7 +20497,7 @@ }, "node_modules/jest-haste-map": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -20786,7 +20521,7 @@ }, "node_modules/jest-haste-map/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20794,7 +20529,7 @@ }, "node_modules/jest-haste-map/node_modules/jest-worker": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -20808,7 +20543,7 @@ }, "node_modules/jest-haste-map/node_modules/supports-color": { "version": "8.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20822,7 +20557,7 @@ }, "node_modules/jest-leak-detector": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "jest-get-type": "^29.4.3", @@ -20834,7 +20569,7 @@ }, "node_modules/jest-leak-detector/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -20845,7 +20580,7 @@ }, "node_modules/jest-leak-detector/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -20858,12 +20593,12 @@ }, "node_modules/jest-leak-detector/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-message-util": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", @@ -20882,7 +20617,7 @@ }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -20896,7 +20631,7 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -20911,7 +20646,7 @@ }, "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -20922,12 +20657,12 @@ }, "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20935,7 +20670,7 @@ }, "node_modules/jest-message-util/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -20948,7 +20683,7 @@ }, "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -20959,12 +20694,12 @@ }, "node_modules/jest-message-util/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20975,7 +20710,7 @@ }, "node_modules/jest-mock": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -20988,7 +20723,7 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -21004,7 +20739,7 @@ }, "node_modules/jest-regex-util": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -21012,7 +20747,7 @@ }, "node_modules/jest-resolve": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -21031,7 +20766,7 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "^29.4.3", @@ -21043,7 +20778,7 @@ }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21057,7 +20792,7 @@ }, "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21072,7 +20807,7 @@ }, "node_modules/jest-resolve/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21083,12 +20818,12 @@ }, "node_modules/jest-resolve/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21096,7 +20831,7 @@ }, "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21107,7 +20842,7 @@ }, "node_modules/jest-runner": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.5.0", @@ -21138,7 +20873,7 @@ }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21152,7 +20887,7 @@ }, "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21167,7 +20902,7 @@ }, "node_modules/jest-runner/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21178,12 +20913,12 @@ }, "node_modules/jest-runner/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21191,7 +20926,7 @@ }, "node_modules/jest-runner/node_modules/jest-worker": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -21205,7 +20940,7 @@ }, "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21219,7 +20954,7 @@ }, "node_modules/jest-runner/node_modules/p-limit": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -21233,7 +20968,7 @@ }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21244,7 +20979,7 @@ }, "node_modules/jest-runtime": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.5.0", @@ -21276,7 +21011,7 @@ }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21290,7 +21025,7 @@ }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21305,7 +21040,7 @@ }, "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21316,12 +21051,12 @@ }, "node_modules/jest-runtime/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -21340,7 +21075,7 @@ }, "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21348,7 +21083,7 @@ }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21359,7 +21094,7 @@ }, "node_modules/jest-snapshot": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -21392,7 +21127,7 @@ }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21406,7 +21141,7 @@ }, "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21421,7 +21156,7 @@ }, "node_modules/jest-snapshot/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21432,12 +21167,12 @@ }, "node_modules/jest-snapshot/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-snapshot/node_modules/diff-sequences": { "version": "29.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -21445,7 +21180,7 @@ }, "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21453,7 +21188,7 @@ }, "node_modules/jest-snapshot/node_modules/jest-diff": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -21467,7 +21202,7 @@ }, "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -21481,7 +21216,7 @@ }, "node_modules/jest-snapshot/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -21494,7 +21229,7 @@ }, "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -21505,12 +21240,12 @@ }, "node_modules/jest-snapshot/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21521,7 +21256,7 @@ }, "node_modules/jest-util": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -21537,7 +21272,7 @@ }, "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21551,7 +21286,7 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21566,7 +21301,7 @@ }, "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21577,12 +21312,12 @@ }, "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21590,7 +21325,7 @@ }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21601,7 +21336,7 @@ }, "node_modules/jest-validate": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", @@ -21617,7 +21352,7 @@ }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21631,7 +21366,7 @@ }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21646,7 +21381,7 @@ }, "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21657,12 +21392,12 @@ }, "node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21670,7 +21405,7 @@ }, "node_modules/jest-validate/node_modules/pretty-format": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", @@ -21683,7 +21418,7 @@ }, "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -21694,12 +21429,12 @@ }, "node_modules/jest-validate/node_modules/react-is": { "version": "18.2.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21710,7 +21445,7 @@ }, "node_modules/jest-watcher": { "version": "29.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "^29.5.0", @@ -21728,7 +21463,7 @@ }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21742,7 +21477,7 @@ }, "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -21757,7 +21492,7 @@ }, "node_modules/jest-watcher/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -21768,12 +21503,12 @@ }, "node_modules/jest-watcher/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/jest-watcher/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21781,7 +21516,7 @@ }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21859,7 +21594,7 @@ }, "node_modules/js-yaml": { "version": "3.14.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -21971,6 +21706,7 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "dev": true, "license": "MIT" }, "node_modules/json-stringify-safe": { @@ -22180,7 +21916,7 @@ }, "node_modules/leven": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -22188,6 +21924,7 @@ }, "node_modules/levn": { "version": "0.4.1", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -22199,6 +21936,7 @@ }, "node_modules/light-my-request": { "version": "5.9.2", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "cookie": "^0.5.0", @@ -22564,6 +22302,7 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -22699,6 +22438,7 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", + "dev": true, "license": "MIT" }, "node_modules/lodash.mergewith": { @@ -22972,7 +22712,7 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -22986,7 +22726,7 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.0", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -22999,7 +22739,7 @@ }, "node_modules/makeerror": { "version": "1.0.12", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" @@ -23955,7 +23695,7 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/node-object-hash": { @@ -24001,7 +23741,7 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -24566,6 +24306,7 @@ }, "node_modules/on-exit-leak-free": { "version": "2.1.0", + "dev": true, "license": "MIT" }, "node_modules/on-finished": { @@ -24641,6 +24382,7 @@ }, "node_modules/optionator": { "version": "0.9.3", + "dev": true, "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", @@ -24739,6 +24481,7 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -24752,6 +24495,7 @@ }, "node_modules/p-locate/node_modules/p-limit": { "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -25241,6 +24985,7 @@ }, "node_modules/pino": { "version": "8.14.1", + "dev": true, "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", @@ -25261,6 +25006,7 @@ }, "node_modules/pino-abstract-transport": { "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { "readable-stream": "^4.0.0", @@ -25269,6 +25015,7 @@ }, "node_modules/pino-abstract-transport/node_modules/buffer": { "version": "6.0.3", + "dev": true, "funding": [ { "type": "github", @@ -25291,6 +25038,7 @@ }, "node_modules/pino-abstract-transport/node_modules/readable-stream": { "version": "4.4.0", + "dev": true, "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -25304,6 +25052,7 @@ }, "node_modules/pino-abstract-transport/node_modules/split2": { "version": "4.2.0", + "dev": true, "license": "ISC", "engines": { "node": ">= 10.x" @@ -25311,11 +25060,12 @@ }, "node_modules/pino-std-serializers": { "version": "6.2.1", + "dev": true, "license": "MIT" }, "node_modules/pirates": { "version": "4.0.5", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -25323,7 +25073,7 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "find-up": "^4.0.0" @@ -25334,7 +25084,7 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -25346,7 +25096,7 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -25357,7 +25107,7 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -26126,6 +25876,7 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -26141,7 +25892,7 @@ }, "node_modules/prettier": { "version": "2.8.8", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "prettier": "bin-prettier.js" @@ -26234,6 +25985,7 @@ }, "node_modules/process": { "version": "0.11.10", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -26246,6 +25998,7 @@ }, "node_modules/process-warning": { "version": "2.2.0", + "dev": true, "license": "MIT" }, "node_modules/progress": { @@ -26266,7 +26019,7 @@ }, "node_modules/prompts": { "version": "2.4.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "kleur": "^3.0.3", @@ -26278,7 +26031,7 @@ }, "node_modules/prompts/node_modules/kleur": { "version": "3.0.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -26333,6 +26086,7 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", + "dev": true, "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -26403,7 +26157,7 @@ }, "node_modules/pure-rand": { "version": "6.0.2", - "devOptional": true, + "dev": true, "funding": [ { "type": "individual", @@ -26506,6 +26260,7 @@ }, "node_modules/quick-format-unescaped": { "version": "4.0.4", + "dev": true, "license": "MIT" }, "node_modules/quick-lru": { @@ -26612,6 +26367,7 @@ }, "node_modules/react": { "version": "18.2.0", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -26747,6 +26503,7 @@ }, "node_modules/react-dom": { "version": "18.2.0", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -27053,6 +26810,7 @@ }, "node_modules/real-require": { "version": "0.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 12.13.0" @@ -27373,7 +27131,7 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27381,6 +27139,7 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27435,7 +27194,7 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" @@ -27446,7 +27205,7 @@ }, "node_modules/resolve-from": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -27472,7 +27231,7 @@ }, "node_modules/resolve.exports": { "version": "2.0.2", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -27508,6 +27267,7 @@ }, "node_modules/ret": { "version": "0.2.2", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -27531,6 +27291,7 @@ }, "node_modules/rfdc": { "version": "1.3.0", + "dev": true, "license": "MIT" }, "node_modules/rimraf": { @@ -27731,6 +27492,7 @@ }, "node_modules/safe-regex2": { "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { "ret": "~0.2.0" @@ -27738,6 +27500,7 @@ }, "node_modules/safe-stable-stringify": { "version": "2.4.3", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -27766,6 +27529,7 @@ }, "node_modules/scheduler": { "version": "0.23.0", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -27790,6 +27554,7 @@ }, "node_modules/secure-json-parse": { "version": "2.7.0", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/select-hose": { @@ -28009,6 +27774,7 @@ }, "node_modules/set-cookie-parser": { "version": "2.6.0", + "dev": true, "license": "MIT" }, "node_modules/set-function-name": { @@ -28278,7 +28044,7 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/slash": { @@ -28591,6 +28357,7 @@ }, "node_modules/sonic-boom": { "version": "3.3.0", + "dev": true, "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -28676,7 +28443,7 @@ }, "node_modules/source-map-support": { "version": "0.5.13", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -28685,7 +28452,7 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -28871,7 +28638,7 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/sshpk": { @@ -28921,7 +28688,7 @@ }, "node_modules/stack-utils": { "version": "2.0.6", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -28932,7 +28699,7 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -29045,7 +28812,7 @@ }, "node_modules/string-length": { "version": "4.0.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "char-regex": "^1.0.2", @@ -29074,7 +28841,7 @@ }, "node_modules/string-width": { "version": "4.2.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -29114,12 +28881,12 @@ }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -29199,6 +28966,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -29221,7 +28989,7 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -29257,6 +29025,7 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -29771,7 +29540,7 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -29784,7 +29553,7 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -29811,6 +29580,7 @@ }, "node_modules/text-table": { "version": "0.2.0", + "dev": true, "license": "MIT" }, "node_modules/thenify": { @@ -29834,6 +29604,7 @@ }, "node_modules/thread-stream": { "version": "2.3.0", + "dev": true, "license": "MIT", "dependencies": { "real-require": "^0.2.0" @@ -29904,6 +29675,7 @@ }, "node_modules/tiny-lru": { "version": "10.4.1", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=12" @@ -29940,7 +29712,7 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-fast-properties": { @@ -30615,6 +30387,7 @@ }, "node_modules/type-check": { "version": "0.4.0", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -30625,7 +30398,7 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -30732,6 +30505,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -31064,7 +30838,7 @@ }, "node_modules/v8-to-istanbul": { "version": "9.1.0", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -31350,7 +31124,7 @@ }, "node_modules/walker": { "version": "1.0.8", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" @@ -32152,7 +31926,7 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -32215,7 +31989,7 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -32229,7 +32003,7 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -32240,7 +32014,7 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/wrappy": { @@ -32383,7 +32157,7 @@ }, "node_modules/y18n": { "version": "5.0.8", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -32423,7 +32197,7 @@ }, "node_modules/yargs": { "version": "17.7.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -32460,7 +32234,7 @@ }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -32476,6 +32250,7 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -33076,21 +32851,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/eslint-config-custom/node_modules/prettier": { - "version": "3.0.3", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "packages/expo": { "name": "@clerk/clerk-expo", "version": "0.19.12", @@ -33201,7 +32961,6 @@ "dependencies": { "@clerk/backend": "0.31.3", "@clerk/clerk-react": "4.27.0", - "@clerk/clerk-sdk-node": "4.12.16", "@clerk/shared": "1.0.0", "@clerk/types": "3.57.0", "path-to-regexp": "6.2.1", diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 41f6c0eb9dd..a2e87bcdff7 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -60,7 +60,6 @@ "dependencies": { "@clerk/backend": "0.31.3", "@clerk/clerk-react": "4.27.0", - "@clerk/clerk-sdk-node": "4.12.16", "@clerk/shared": "1.0.0", "@clerk/types": "3.57.0", "path-to-regexp": "6.2.1", From a47baa2d0963db2141ec376e3c459fc540009c6b Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 1 Nov 2023 17:43:56 +0200 Subject: [PATCH 13/13] chore(nextjs): Add changeset --- .changeset/cyan-stingrays-own.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .changeset/cyan-stingrays-own.md diff --git a/.changeset/cyan-stingrays-own.md b/.changeset/cyan-stingrays-own.md new file mode 100644 index 00000000000..5038589ba44 --- /dev/null +++ b/.changeset/cyan-stingrays-own.md @@ -0,0 +1,18 @@ +--- +'@clerk/nextjs': major +--- + +Drop deprecations. Migration steps: +- use `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` instead of `NEXT_PUBLIC_CLERK_FRONTEND_API` env variable +- use `NEXT_PUBLIC_CLERK_JS_VERSION` instead of `CLERK_JS_VERSION` +- use `CLERK_SECRET_KEY` instead of `CLERK_API_KEY` +- use `publishableKey` instead of `frontendApi` +- use `isEmailLinkError` instead of `isMagicLinkError` +- use `EmailLinkErrorCode` instead of `MagicLinkErrorCode` +- use `useEmailLink` instead of `useMagicLink` +- use `@clerk/nextjs` instead of `@clerk/nextjs/app-beta` +- use `@clerk/nextjs` instead of `@clerk/nextjs/ssr` +- use `@clerk/nextjs` instead of `@clerk/nextjs/edge-middleware` or `@clerk/nextjs/edge-middlewarefiles` +- use `@clerk/nextjs` instead of `@clerk/nextjs/api` +- use middleware with `authMiddleware` instead of `withClerkMiddleware` +- avoid using exported constants: `API_URL`, `API_VERSION`, `CLERK_JS_URL`, `CLERK_JS_VERSION`, `DOMAIN`, `IS_SATELLITE`, `PROXY_URL`, `PUBLISHABLE_KEY`, `SECRET_KEY`, `SIGN_IN_URL`, `SIGN_UP_URL` \ No newline at end of file