From 46a862a043645c15543b14b9c32220f90820380b Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Tue, 5 Aug 2025 15:35:53 -0700 Subject: [PATCH 1/6] chore: Add CLERK_MACHINE_SECRET_KEY to clerk client init --- packages/express/src/utils.ts | 1 + packages/fastify/src/clerkClient.ts | 3 ++- packages/fastify/src/constants.ts | 1 + packages/nextjs/src/server/constants.ts | 1 + packages/nextjs/src/server/createClerkClient.ts | 2 ++ packages/nuxt/src/global.d.ts | 1 + packages/nuxt/src/module.ts | 1 + packages/nuxt/src/runtime/server/clerkClient.ts | 1 + packages/react-router/src/ssr/authenticateRequest.ts | 3 ++- packages/react-router/src/ssr/loadOptions.ts | 2 ++ packages/react-router/src/ssr/types.ts | 4 ++++ packages/remix/src/ssr/authenticateRequest.ts | 3 ++- packages/remix/src/ssr/loadOptions.ts | 2 ++ packages/remix/src/ssr/types.ts | 4 ++++ .../tanstack-react-start/src/server/authenticateRequest.ts | 4 +++- packages/tanstack-react-start/src/server/clerkClient.ts | 1 + packages/tanstack-react-start/src/server/constants.ts | 1 + packages/tanstack-react-start/src/server/loadOptions.ts | 2 ++ packages/tanstack-react-start/src/server/types.ts | 1 + 19 files changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/express/src/utils.ts b/packages/express/src/utils.ts index 8f1de38dc3c..6b65a04e237 100644 --- a/packages/express/src/utils.ts +++ b/packages/express/src/utils.ts @@ -18,6 +18,7 @@ export const loadClientEnv = () => { export const loadApiEnv = () => { return { secretKey: process.env.CLERK_SECRET_KEY || '', + machineSecretKey: process.env.CLERK_MACHINE_SECRET_KEY || '', apiUrl: process.env.CLERK_API_URL || 'https://api.clerk.com', apiVersion: process.env.CLERK_API_VERSION || 'v1', domain: process.env.CLERK_DOMAIN || '', diff --git a/packages/fastify/src/clerkClient.ts b/packages/fastify/src/clerkClient.ts index df67ece1443..3ec3dda03e5 100644 --- a/packages/fastify/src/clerkClient.ts +++ b/packages/fastify/src/clerkClient.ts @@ -1,9 +1,10 @@ import { createClerkClient } from '@clerk/backend'; -import { API_URL, API_VERSION, JWT_KEY, SDK_METADATA, SECRET_KEY } from './constants'; +import { API_URL, API_VERSION, JWT_KEY, MACHINE_SECRET_KEY, SDK_METADATA, SECRET_KEY } from './constants'; export const clerkClient = createClerkClient({ secretKey: SECRET_KEY, + machineSecretKey: MACHINE_SECRET_KEY, apiUrl: API_URL, apiVersion: API_VERSION, jwtKey: JWT_KEY, diff --git a/packages/fastify/src/constants.ts b/packages/fastify/src/constants.ts index fe1c9b95981..ed5917de251 100644 --- a/packages/fastify/src/constants.ts +++ b/packages/fastify/src/constants.ts @@ -3,6 +3,7 @@ import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey export const API_VERSION = process.env.CLERK_API_VERSION || 'v1'; export const SECRET_KEY = process.env.CLERK_SECRET_KEY || ''; +export const MACHINE_SECRET_KEY = process.env.CLERK_MACHINE_SECRET_KEY || ''; export const PUBLISHABLE_KEY = process.env.CLERK_PUBLISHABLE_KEY || ''; export const API_URL = process.env.CLERK_API_URL || apiUrlFromPublishableKey(PUBLISHABLE_KEY); export const JWT_KEY = process.env.CLERK_JWT_KEY || ''; diff --git a/packages/nextjs/src/server/constants.ts b/packages/nextjs/src/server/constants.ts index cbddb6ea346..73c4371486f 100644 --- a/packages/nextjs/src/server/constants.ts +++ b/packages/nextjs/src/server/constants.ts @@ -5,6 +5,7 @@ export const CLERK_JS_VERSION = process.env.NEXT_PUBLIC_CLERK_JS_VERSION || ''; export const CLERK_JS_URL = process.env.NEXT_PUBLIC_CLERK_JS_URL || ''; export const API_VERSION = process.env.CLERK_API_VERSION || 'v1'; export const SECRET_KEY = process.env.CLERK_SECRET_KEY || ''; +export const MACHINE_SECRET_KEY = process.env.CLERK_MACHINE_SECRET_KEY || ''; export const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY || ''; export const ENCRYPTION_KEY = process.env.CLERK_ENCRYPTION_KEY || ''; export const API_URL = process.env.CLERK_API_URL || apiUrlFromPublishableKey(PUBLISHABLE_KEY); diff --git a/packages/nextjs/src/server/createClerkClient.ts b/packages/nextjs/src/server/createClerkClient.ts index 09eded3264b..d10cbc0930b 100644 --- a/packages/nextjs/src/server/createClerkClient.ts +++ b/packages/nextjs/src/server/createClerkClient.ts @@ -5,6 +5,7 @@ import { API_VERSION, DOMAIN, IS_SATELLITE, + MACHINE_SECRET_KEY, PROXY_URL, PUBLISHABLE_KEY, SDK_METADATA, @@ -22,6 +23,7 @@ const clerkClientDefaultOptions = { proxyUrl: PROXY_URL, domain: DOMAIN, isSatellite: IS_SATELLITE, + machineSecretKey: MACHINE_SECRET_KEY, sdkMetadata: SDK_METADATA, telemetry: { disabled: TELEMETRY_DISABLED, diff --git a/packages/nuxt/src/global.d.ts b/packages/nuxt/src/global.d.ts index c6f45c051a2..7cde099d9c9 100644 --- a/packages/nuxt/src/global.d.ts +++ b/packages/nuxt/src/global.d.ts @@ -10,6 +10,7 @@ declare module 'nuxt/schema' { interface RuntimeConfig { clerk: { secretKey?: string; + machineSecretKey?: string; jwtKey?: string; webhookSigningSecret?: string; }; diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts index 84fa45cb53f..38cb9d2c266 100644 --- a/packages/nuxt/src/module.ts +++ b/packages/nuxt/src/module.ts @@ -78,6 +78,7 @@ export default defineNuxtModule({ // Private keys available only on within server-side clerk: { secretKey: undefined, + machineSecretKey: undefined, jwtKey: undefined, webhookSigningSecret: undefined, }, diff --git a/packages/nuxt/src/runtime/server/clerkClient.ts b/packages/nuxt/src/runtime/server/clerkClient.ts index f623a273a33..06e7b6f81ae 100644 --- a/packages/nuxt/src/runtime/server/clerkClient.ts +++ b/packages/nuxt/src/runtime/server/clerkClient.ts @@ -16,6 +16,7 @@ export function clerkClient(event: H3Event) { domain: runtimeConfig.public.clerk.domain, isSatellite: runtimeConfig.public.clerk.isSatellite, secretKey: runtimeConfig.clerk.secretKey, + machineSecretKey: runtimeConfig.clerk.machineSecretKey, jwtKey: runtimeConfig.clerk.jwtKey, telemetry: { disabled: isTruthy(runtimeConfig.public.clerk.telemetry?.disabled), diff --git a/packages/react-router/src/ssr/authenticateRequest.ts b/packages/react-router/src/ssr/authenticateRequest.ts index e82f86ee247..a0c434ca881 100644 --- a/packages/react-router/src/ssr/authenticateRequest.ts +++ b/packages/react-router/src/ssr/authenticateRequest.ts @@ -13,7 +13,7 @@ export async function authenticateRequest( const { request } = args; const { audience, authorizedParties } = opts; - const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey } = opts; + const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey, machineSecretKey } = opts; const { signInUrl, signUpUrl, afterSignInUrl, afterSignUpUrl } = opts; const requestState = await createClerkClient({ @@ -24,6 +24,7 @@ export async function authenticateRequest( isSatellite, domain, publishableKey, + machineSecretKey, userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`, }).authenticateRequest(patchRequest(request), { audience, diff --git a/packages/react-router/src/ssr/loadOptions.ts b/packages/react-router/src/ssr/loadOptions.ts index 13b7c361ab0..969cce2dd12 100644 --- a/packages/react-router/src/ssr/loadOptions.ts +++ b/packages/react-router/src/ssr/loadOptions.ts @@ -22,6 +22,7 @@ export const loadOptions = (args: LoaderFunctionArgs, overrides: RootAuthLoaderO // 4. Then try from globalThis (Cloudflare Workers). // 5. Then from loader context (Cloudflare Pages). const secretKey = overrides.secretKey || getEnvVariable('CLERK_SECRET_KEY', context); + const machineSecretKey = overrides.machineSecretKey || getEnvVariable('CLERK_MACHINE_SECRET_KEY', context); const publishableKey = overrides.publishableKey || getPublicEnvVariables(context).publishableKey; const jwtKey = overrides.jwtKey || getEnvVariable('CLERK_JWT_KEY', context); const apiUrl = getEnvVariable('CLERK_API_URL', context) || apiUrlFromPublishableKey(publishableKey); @@ -67,6 +68,7 @@ export const loadOptions = (args: LoaderFunctionArgs, overrides: RootAuthLoaderO // used to append options that are not initialized from env ...overrides, secretKey, + machineSecretKey, publishableKey, jwtKey, apiUrl, diff --git a/packages/react-router/src/ssr/types.ts b/packages/react-router/src/ssr/types.ts index f2d7fb20cfe..87d54d5994a 100644 --- a/packages/react-router/src/ssr/types.ts +++ b/packages/react-router/src/ssr/types.ts @@ -25,6 +25,10 @@ export type RootAuthLoaderOptions = { * Used to override the CLERK_SECRET_KEY env variable if needed. */ secretKey?: string; + /** + * Used to override the CLERK_MACHINE_SECRET_KEY env variable if needed. + */ + machineSecretKey?: string; /** * @deprecated Use [session token claims](https://clerk.com/docs/backend-requests/making/custom-session-token) instead. */ diff --git a/packages/remix/src/ssr/authenticateRequest.ts b/packages/remix/src/ssr/authenticateRequest.ts index b0cce6c17df..3c102f5efda 100644 --- a/packages/remix/src/ssr/authenticateRequest.ts +++ b/packages/remix/src/ssr/authenticateRequest.ts @@ -13,7 +13,7 @@ export async function authenticateRequest( const { request } = args; const { audience, authorizedParties } = opts; - const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey } = opts; + const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey, machineSecretKey } = opts; const { signInUrl, signUpUrl, afterSignInUrl, afterSignUpUrl } = opts; const requestState = await createClerkClient({ @@ -32,6 +32,7 @@ export async function authenticateRequest( signUpUrl, afterSignInUrl, afterSignUpUrl, + machineSecretKey, }); const locationHeader = requestState.headers.get(constants.Headers.Location); diff --git a/packages/remix/src/ssr/loadOptions.ts b/packages/remix/src/ssr/loadOptions.ts index ef0dc1738d4..82e2b532e1c 100644 --- a/packages/remix/src/ssr/loadOptions.ts +++ b/packages/remix/src/ssr/loadOptions.ts @@ -20,6 +20,7 @@ export const loadOptions = (args: LoaderFunctionArgs, overrides: RootAuthLoaderO // 3. Then try from globalThis (Cloudflare Workers). // 4. Then from loader context (Cloudflare Pages). const secretKey = overrides.secretKey || getEnvVariable('CLERK_SECRET_KEY', context) || ''; + const machineSecretKey = overrides.machineSecretKey || getEnvVariable('CLERK_MACHINE_SECRET_KEY', context); const publishableKey = overrides.publishableKey || getEnvVariable('CLERK_PUBLISHABLE_KEY', context) || ''; const jwtKey = overrides.jwtKey || getEnvVariable('CLERK_JWT_KEY', context); const apiUrl = getEnvVariable('CLERK_API_URL', context) || apiUrlFromPublishableKey(publishableKey); @@ -69,6 +70,7 @@ export const loadOptions = (args: LoaderFunctionArgs, overrides: RootAuthLoaderO // used to append options that are not initialized from env ...overrides, secretKey, + machineSecretKey, publishableKey, jwtKey, apiUrl, diff --git a/packages/remix/src/ssr/types.ts b/packages/remix/src/ssr/types.ts index 52b75f1301f..5a560a0e684 100644 --- a/packages/remix/src/ssr/types.ts +++ b/packages/remix/src/ssr/types.ts @@ -17,6 +17,10 @@ export type RootAuthLoaderOptions = { publishableKey?: string; jwtKey?: string; secretKey?: string; + /** + * Used to override the CLERK_MACHINE_SECRET_KEY env variable if needed. + */ + machineSecretKey?: string; /** * @deprecated Use [session token claims](https://clerk.com/docs/backend-requests/making/custom-session-token) instead. */ diff --git a/packages/tanstack-react-start/src/server/authenticateRequest.ts b/packages/tanstack-react-start/src/server/authenticateRequest.ts index c393a9cfae8..c364dee74eb 100644 --- a/packages/tanstack-react-start/src/server/authenticateRequest.ts +++ b/packages/tanstack-react-start/src/server/authenticateRequest.ts @@ -13,12 +13,14 @@ export async function authenticateRequest( ): Promise { const { audience, authorizedParties } = opts; - const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey, acceptsToken } = opts; + const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey, acceptsToken, machineSecretKey } = + opts; const { signInUrl, signUpUrl, afterSignInUrl, afterSignUpUrl } = opts; const requestState = await createClerkClient({ apiUrl, secretKey, + machineSecretKey, jwtKey, proxyUrl, isSatellite, diff --git a/packages/tanstack-react-start/src/server/clerkClient.ts b/packages/tanstack-react-start/src/server/clerkClient.ts index e8398f5af26..5dedf992072 100644 --- a/packages/tanstack-react-start/src/server/clerkClient.ts +++ b/packages/tanstack-react-start/src/server/clerkClient.ts @@ -7,6 +7,7 @@ const clerkClient = (options?: ClerkOptions): ClerkClient => { const commonEnv = commonEnvs(); return createClerkClient({ secretKey: commonEnv.SECRET_KEY, + machineSecretKey: commonEnv.MACHINE_SECRET_KEY, publishableKey: commonEnv.PUBLISHABLE_KEY, apiUrl: commonEnv.API_URL, apiVersion: commonEnv.API_VERSION, diff --git a/packages/tanstack-react-start/src/server/constants.ts b/packages/tanstack-react-start/src/server/constants.ts index bca9f121c14..06cb83905b4 100644 --- a/packages/tanstack-react-start/src/server/constants.ts +++ b/packages/tanstack-react-start/src/server/constants.ts @@ -22,6 +22,7 @@ export const commonEnvs = () => { // Server-only environment variables API_VERSION: getEnvVariable('CLERK_API_VERSION') || 'v1', SECRET_KEY: getEnvVariable('CLERK_SECRET_KEY'), + MACHINE_SECRET_KEY: getEnvVariable('CLERK_MACHINE_SECRET_KEY'), ENCRYPTION_KEY: getEnvVariable('CLERK_ENCRYPTION_KEY'), CLERK_JWT_KEY: getEnvVariable('CLERK_JWT_KEY'), API_URL: getEnvVariable('CLERK_API_URL') || apiUrlFromPublishableKey(publicEnvs.publishableKey), diff --git a/packages/tanstack-react-start/src/server/loadOptions.ts b/packages/tanstack-react-start/src/server/loadOptions.ts index d3ef62f4825..cbf1e4e984b 100644 --- a/packages/tanstack-react-start/src/server/loadOptions.ts +++ b/packages/tanstack-react-start/src/server/loadOptions.ts @@ -15,6 +15,7 @@ export const loadOptions = (request: Request, overrides: LoaderOptions = {}) => const clerkRequest = createClerkRequest(patchRequest(request)); const commonEnv = commonEnvs(); const secretKey = overrides.secretKey || commonEnv.SECRET_KEY; + const machineSecretKey = overrides.machineSecretKey || commonEnv.MACHINE_SECRET_KEY; const publishableKey = overrides.publishableKey || commonEnv.PUBLISHABLE_KEY; const jwtKey = overrides.jwtKey || commonEnv.CLERK_JWT_KEY; const apiUrl = getEnvVariable('CLERK_API_URL') || apiUrlFromPublishableKey(publishableKey); @@ -52,6 +53,7 @@ export const loadOptions = (request: Request, overrides: LoaderOptions = {}) => // used to append options that are not initialized from env ...overrides, secretKey, + machineSecretKey, publishableKey, jwtKey, apiUrl, diff --git a/packages/tanstack-react-start/src/server/types.ts b/packages/tanstack-react-start/src/server/types.ts index bb76829f20a..b289b865e9a 100644 --- a/packages/tanstack-react-start/src/server/types.ts +++ b/packages/tanstack-react-start/src/server/types.ts @@ -12,6 +12,7 @@ export type LoaderOptions = { publishableKey?: string; jwtKey?: string; secretKey?: string; + machineSecretKey?: string; signInUrl?: string; signUpUrl?: string; } & Pick & From 03501cac4dae6897d7813ff95ddaa475dce59119 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Tue, 5 Aug 2025 15:41:03 -0700 Subject: [PATCH 2/6] chore: add changeset --- .changeset/pink-countries-hunt.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .changeset/pink-countries-hunt.md diff --git a/.changeset/pink-countries-hunt.md b/.changeset/pink-countries-hunt.md new file mode 100644 index 00000000000..aab443992b6 --- /dev/null +++ b/.changeset/pink-countries-hunt.md @@ -0,0 +1,15 @@ +--- +"@clerk/express": patch +"@clerk/fastify": patch +"@clerk/nextjs": patch +"@clerk/nuxt": patch +"@clerk/react-router": patch +"@clerk/remix": patch +"@clerk/tanstack-react-start": patch +--- + +Add ability to define a machine secret key to Clerk BAPI client function + +```ts +const clerkClient = createClerkClient({ machineSecretKey: 'sk_xxxxx' }) +``` From 8feeffcbf0a6d7c2b4a67ccb22cbdcbe17749f4c Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 6 Aug 2025 08:12:16 -0700 Subject: [PATCH 3/6] chore: update changeset --- .changeset/pink-countries-hunt.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.changeset/pink-countries-hunt.md b/.changeset/pink-countries-hunt.md index aab443992b6..f92f31c573f 100644 --- a/.changeset/pink-countries-hunt.md +++ b/.changeset/pink-countries-hunt.md @@ -11,5 +11,7 @@ Add ability to define a machine secret key to Clerk BAPI client function ```ts -const clerkClient = createClerkClient({ machineSecretKey: 'sk_xxxxx' }) +const clerkClient = createClerkClient({ machineSecretKey: 'ak_xxxxx' }) + +clerkClient.machineTokens.create({...}) ``` From 1e5f491f1371394336e004c1e2d2b5dcf84ad8b6 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 6 Aug 2025 08:30:19 -0700 Subject: [PATCH 4/6] chore: add machineSecretKey to astro clerk bapi client --- packages/astro/src/env.d.ts | 1 + packages/astro/src/server/clerk-client.ts | 1 + packages/astro/src/server/get-safe-env.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/packages/astro/src/env.d.ts b/packages/astro/src/env.d.ts index 410177d713e..601eb6b7891 100644 --- a/packages/astro/src/env.d.ts +++ b/packages/astro/src/env.d.ts @@ -11,6 +11,7 @@ interface InternalEnv { readonly CLERK_API_VERSION?: string; readonly CLERK_JWT_KEY?: string; readonly CLERK_SECRET_KEY?: string; + readonly CLERK_MACHINE_SECRET_KEY?: string; readonly PUBLIC_CLERK_DOMAIN?: string; readonly PUBLIC_CLERK_IS_SATELLITE?: string; readonly PUBLIC_CLERK_PROXY_URL?: string; diff --git a/packages/astro/src/server/clerk-client.ts b/packages/astro/src/server/clerk-client.ts index 03b011e8f3e..10b53c03a27 100644 --- a/packages/astro/src/server/clerk-client.ts +++ b/packages/astro/src/server/clerk-client.ts @@ -8,6 +8,7 @@ type CreateClerkClientWithOptions = (context: APIContext, options?: ClerkOptions const createClerkClientWithOptions: CreateClerkClientWithOptions = (context, options) => createClerkClient({ secretKey: getSafeEnv(context).sk, + machineSecretKey: getSafeEnv(context).machineSecretKey, publishableKey: getSafeEnv(context).pk, apiUrl: getSafeEnv(context).apiUrl, apiVersion: getSafeEnv(context).apiVersion, diff --git a/packages/astro/src/server/get-safe-env.ts b/packages/astro/src/server/get-safe-env.ts index ee890f95095..c1b21574f8d 100644 --- a/packages/astro/src/server/get-safe-env.ts +++ b/packages/astro/src/server/get-safe-env.ts @@ -27,6 +27,7 @@ function getSafeEnv(context: ContextOrLocals) { proxyUrl: getContextEnvVar('PUBLIC_CLERK_PROXY_URL', context), pk: getContextEnvVar('PUBLIC_CLERK_PUBLISHABLE_KEY', context), sk: getContextEnvVar('CLERK_SECRET_KEY', context), + machineSecretKey: getContextEnvVar('CLERK_MACHINE_SECRET_KEY', context), signInUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_IN_URL', context), signUpUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_UP_URL', context), clerkJsUrl: getContextEnvVar('PUBLIC_CLERK_JS_URL', context), From 6a783229624c9eb042eec5be9daa17645e8f0632 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 6 Aug 2025 08:30:51 -0700 Subject: [PATCH 5/6] chore: add to integration --- packages/astro/src/integration/create-integration.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/astro/src/integration/create-integration.ts b/packages/astro/src/integration/create-integration.ts index 5dd12008f2d..4c23c723154 100644 --- a/packages/astro/src/integration/create-integration.ts +++ b/packages/astro/src/integration/create-integration.ts @@ -190,6 +190,7 @@ function createClerkEnvSchema() { PUBLIC_CLERK_TELEMETRY_DISABLED: envField.boolean({ context: 'client', access: 'public', optional: true }), PUBLIC_CLERK_TELEMETRY_DEBUG: envField.boolean({ context: 'client', access: 'public', optional: true }), CLERK_SECRET_KEY: envField.string({ context: 'server', access: 'secret' }), + CLERK_MACHINE_SECRET_KEY: envField.string({ context: 'server', access: 'secret', optional: true }), CLERK_JWT_KEY: envField.string({ context: 'server', access: 'secret', optional: true }), }; } From e32bc3b0de001323bb967ed0b73ebe6cb15e07cd Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 6 Aug 2025 08:31:19 -0700 Subject: [PATCH 6/6] chore: update changeset --- .changeset/pink-countries-hunt.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/pink-countries-hunt.md b/.changeset/pink-countries-hunt.md index f92f31c573f..da7c35dc99b 100644 --- a/.changeset/pink-countries-hunt.md +++ b/.changeset/pink-countries-hunt.md @@ -1,4 +1,5 @@ --- +"@clerk/astro": patch "@clerk/express": patch "@clerk/fastify": patch "@clerk/nextjs": patch