@clerk/astro 3.0.0-canary-core3.v20251203060337 → 3.0.0-snapshot.v20251203152900
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { envField } from "astro/config";
|
|
|
3
3
|
|
|
4
4
|
// package.json
|
|
5
5
|
var name = "@clerk/astro";
|
|
6
|
-
var version = "3.0.0-
|
|
6
|
+
var version = "3.0.0-snapshot.v20251203152900";
|
|
7
7
|
|
|
8
8
|
// src/integration/vite-plugin-astro-config.ts
|
|
9
9
|
function vitePluginAstroConfig(astroConfig) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/integration/create-integration.ts","../package.json","../src/integration/vite-plugin-astro-config.ts","../src/index.ts"],"sourcesContent":["import type { ClerkOptions } from '@clerk/shared/types';\nimport type { AstroIntegration } from 'astro';\nimport { envField } from 'astro/config';\n\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport type { AstroClerkIntegrationParams } from '../types';\nimport { vitePluginAstroConfig } from './vite-plugin-astro-config';\n\nconst buildEnvVarFromOption = (valueToBeStored: unknown, envName: keyof InternalEnv) => {\n return valueToBeStored ? { [`import.meta.env.${envName}`]: JSON.stringify(valueToBeStored) } : {};\n};\n\ntype HotloadAstroClerkIntegrationParams = AstroClerkIntegrationParams & {\n enableEnvSchema?: boolean;\n};\n\nfunction createIntegration<Params extends HotloadAstroClerkIntegrationParams>() {\n return (params?: Params): AstroIntegration => {\n const { proxyUrl, isSatellite, domain, signInUrl, signUpUrl, enableEnvSchema = true } = params || {};\n\n // These are not provided when the \"bundled\" integration is used\n const clerkJSUrl = (params as any)?.clerkJSUrl as string | undefined;\n const clerkUiUrl = (params as any)?.clerkUiUrl as string | undefined;\n const clerkJSVariant = (params as any)?.clerkJSVariant as string | undefined;\n const clerkJSVersion = (params as any)?.clerkJSVersion as string | undefined;\n\n return {\n name: '@clerk/astro/integration',\n hooks: {\n 'astro:config:setup': ({ config, injectScript, updateConfig, logger, command }) => {\n if (['server', 'hybrid'].includes(config.output) && !config.adapter) {\n logger.error('Missing adapter, please update your Astro config to use one.');\n }\n\n if (typeof clerkJSVariant !== 'undefined' && clerkJSVariant !== 'headless' && clerkJSVariant !== '') {\n logger.error('Invalid value for clerkJSVariant. Acceptable values are `\"headless\"`, `\"\"`, and `undefined`');\n }\n\n const internalParams: ClerkOptions = {\n ...params,\n sdkMetadata: {\n version: packageVersion,\n name: packageName,\n environment: command === 'dev' ? 'development' : 'production',\n },\n };\n\n const buildImportPath = `${packageName}/internal`;\n\n // Set params as envs so backend code has access to them\n updateConfig({\n vite: {\n plugins: [vitePluginAstroConfig(config)],\n define: {\n /**\n * Convert the integration params to environment variable in order for it to be readable from the server\n */\n ...buildEnvVarFromOption(signInUrl, 'PUBLIC_CLERK_SIGN_IN_URL'),\n ...buildEnvVarFromOption(signUpUrl, 'PUBLIC_CLERK_SIGN_UP_URL'),\n ...buildEnvVarFromOption(isSatellite, 'PUBLIC_CLERK_IS_SATELLITE'),\n ...buildEnvVarFromOption(proxyUrl, 'PUBLIC_CLERK_PROXY_URL'),\n ...buildEnvVarFromOption(domain, 'PUBLIC_CLERK_DOMAIN'),\n ...buildEnvVarFromOption(clerkJSUrl, 'PUBLIC_CLERK_JS_URL'),\n ...buildEnvVarFromOption(clerkUiUrl, 'PUBLIC_CLERK_UI_URL'),\n ...buildEnvVarFromOption(clerkJSVariant, 'PUBLIC_CLERK_JS_VARIANT'),\n ...buildEnvVarFromOption(clerkJSVersion, 'PUBLIC_CLERK_JS_VERSION'),\n },\n\n ssr: {\n external: ['node:async_hooks'],\n },\n\n // We need this for top-level await\n optimizeDeps: {\n esbuildOptions: {\n target: 'es2022',\n },\n },\n build: {\n target: 'es2022',\n },\n },\n env: {\n schema: {\n ...(enableEnvSchema ? createClerkEnvSchema() : {}),\n },\n },\n });\n\n /**\n * ------------- Script Injection --------------------------\n * Below we are injecting the same script twice. `runInjectionScript` is build in such way in order to instanciate and load Clerk only once.\n * We need both scripts in order to support applications with or without UI frameworks.\n */\n\n /**\n * The above script will run before client frameworks like React hydrate.\n * This makes sure that we have initialized a Clerk instance and populated stores in order to avoid hydration issues.\n */\n injectScript(\n 'before-hydration',\n `\n ${command === 'dev' ? `console.log('${packageName}',\"Initialize Clerk: before-hydration\")` : ''}\n import { runInjectionScript } from \"${buildImportPath}\";\n await runInjectionScript(${JSON.stringify(internalParams)});`,\n );\n\n /**\n * The above script only executes if a client framework like React needs to hydrate.\n * We need to run the same script again for each page in order to initialize Clerk even if no UI framework is used in the client\n * If no UI framework is used in the client, the above script with `before-hydration` will never run\n */\n\n injectScript(\n 'page',\n `\n ${command === 'dev' ? `console.log(\"${packageName}\",\"Initialize Clerk: page\")` : ''}\n import { runInjectionScript, swapDocument } from \"${buildImportPath}\";\n\n // Taken from https://github.com/withastro/astro/blob/e10b03e88c22592fbb42d7245b65c4f486ab736d/packages/astro/src/transitions/router.ts#L39.\n // Importing it directly from astro:transitions/client breaks custom client-side routing\n // even when View Transitions is disabled.\n const transitionEnabledOnThisPage = () => {\n return !!document.querySelector('[name=\"astro-view-transitions-enabled\"]');\n }\n\n if (transitionEnabledOnThisPage()) {\n const { navigate, swapFunctions } = await import('astro:transitions/client');\n\n document.addEventListener('astro:before-swap', (e) => {\n const clerkComponents = document.querySelector('#clerk-components');\n // Keep the div element added by Clerk\n if (clerkComponents) {\n const clonedEl = clerkComponents.cloneNode(true);\n e.newDocument.body.appendChild(clonedEl);\n }\n\n e.swap = () => swapDocument(swapFunctions, e.newDocument);\n });\n\n document.addEventListener('astro:page-load', async (e) => {\n await runInjectionScript({\n ...${JSON.stringify(internalParams)},\n routerPush: navigate,\n routerReplace: (url) => navigate(url, { history: 'replace' }),\n });\n })\n } else {\n await runInjectionScript(${JSON.stringify(internalParams)});\n }`,\n );\n },\n 'astro:config:done': ({ injectTypes }) => {\n injectTypes({\n filename: 'types.d.ts',\n content: `/// <reference types=\"@clerk/astro/env\" />`,\n });\n },\n },\n };\n };\n}\n\nfunction createClerkEnvSchema() {\n return {\n PUBLIC_CLERK_PUBLISHABLE_KEY: envField.string({ context: 'client', access: 'public' }),\n PUBLIC_CLERK_SIGN_IN_URL: envField.string({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_SIGN_UP_URL: envField.string({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_IS_SATELLITE: envField.boolean({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_PROXY_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_DOMAIN: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_JS_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_UI_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_JS_VARIANT: envField.enum({\n context: 'client',\n access: 'public',\n optional: true,\n values: ['headless'],\n }),\n PUBLIC_CLERK_JS_VERSION: envField.string({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_TELEMETRY_DISABLED: envField.boolean({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_TELEMETRY_DEBUG: envField.boolean({ context: 'client', access: 'public', optional: true }),\n CLERK_SECRET_KEY: envField.string({ context: 'server', access: 'secret' }),\n CLERK_MACHINE_SECRET_KEY: envField.string({ context: 'server', access: 'secret', optional: true }),\n CLERK_JWT_KEY: envField.string({ context: 'server', access: 'secret', optional: true }),\n };\n}\n\nexport { createIntegration };\n","{\n \"name\": \"@clerk/astro\",\n \"version\": \"3.0.0-canary-core3.v20251203060337\",\n \"description\": \"Clerk SDK for Astro\",\n \"keywords\": [\n \"auth\",\n \"authentication\",\n \"astro\",\n \"astro-integration\",\n \"clerk\",\n \"typescript\",\n \"passwordless\",\n \"astro-component\",\n \"withastro\"\n ],\n \"homepage\": \"https://clerk.com/\",\n \"bugs\": {\n \"url\": \"https://github.com/clerk/javascript/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/clerk/javascript.git\",\n \"directory\": \"packages/astro\"\n },\n \"license\": \"MIT\",\n \"author\": \"Clerk\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"imports\": {\n \"#async-local-storage\": {\n \"workerd\": \"./dist/async-local-storage.server.js\",\n \"browser\": \"./dist/async-local-storage.client.js\",\n \"node\": \"./dist/async-local-storage.server.js\",\n \"default\": \"./dist/async-local-storage.server.js\"\n }\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./react\": {\n \"types\": \"./dist/react/index.d.ts\",\n \"default\": \"./dist/react/index.js\"\n },\n \"./client\": {\n \"types\": \"./dist/client/index.d.ts\",\n \"default\": \"./dist/client/index.js\"\n },\n \"./internal\": {\n \"types\": \"./dist/internal/index.d.ts\",\n \"default\": \"./dist/internal/index.js\"\n },\n \"./server\": {\n \"types\": \"./dist/server/index.d.ts\",\n \"default\": \"./dist/server/index.js\"\n },\n \"./webhooks\": {\n \"types\": \"./dist/webhooks.d.ts\",\n \"default\": \"./dist/webhooks.js\"\n },\n \"./env\": \"./env.d.ts\",\n \"./components\": \"./components/index.ts\",\n \"./package.json\": \"./package.json\"\n },\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"client\",\n \"server\",\n \"internal\",\n \"components\",\n \"webhooks\",\n \"env.d.ts\",\n \"types.ts\"\n ],\n \"scripts\": {\n \"build\": \"tsup --onSuccess \\\"pnpm build:dts\\\" && pnpm copy:components\",\n \"build:dts\": \"tsc --emitDeclarationOnly --declaration\",\n \"copy:components\": \"rm -rf ./components && mkdir -p ./components/ && cp -r ./src/astro-components/* ./components/ && cp ./src/types.ts ./\",\n \"dev\": \"tsup --watch --onSuccess \\\"pnpm build:dts\\\"\",\n \"format\": \"node ../../scripts/format-package.mjs\",\n \"format:check\": \"node ../../scripts/format-package.mjs --check\",\n \"lint\": \"eslint src env.d.ts\",\n \"lint:attw\": \"attw --pack . --profile esm-only --ignore-rules internal-resolution-error\",\n \"lint:publint\": \"pnpm copy:components && publint\",\n \"publish:local\": \"pnpm yalc push --replace --sig\"\n },\n \"dependencies\": {\n \"@clerk/backend\": \"workspace:^\",\n \"@clerk/shared\": \"workspace:^\",\n \"nanoid\": \"5.1.6\",\n \"nanostores\": \"1.0.1\"\n },\n \"devDependencies\": {\n \"@clerk/ui\": \"workspace:^\",\n \"astro\": \"^5.15.3\"\n },\n \"peerDependencies\": {\n \"astro\": \"^4.15.0 || ^5.0.0\"\n },\n \"engines\": {\n \"node\": \">=20.9.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import type { AstroConfig } from 'astro';\n\ntype VitePlugin = Required<AstroConfig['vite']>['plugins'][number];\n\n/**\n * This Vite module exports a `isStaticOutput` function that is imported inside our control components\n * to determine which components to use depending on the Astro config output option.\n *\n * @param {AstroConfig} astroConfig - The Astro configuration object\n * @returns {VitePlugin} A Vite plugin\n */\nexport function vitePluginAstroConfig(astroConfig: AstroConfig): VitePlugin {\n const virtualModuleId = 'virtual:@clerk/astro/config';\n const resolvedVirtualModuleId = '\\0' + virtualModuleId;\n\n return {\n name: 'vite-plugin-astro-config',\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n config(config) {\n // While Astro processes <script> tags by default, our control components\n // which uses <script> tags and imports nanostores will not be processed by Astro.\n // This ensures @clerk/astro/client is properly processed and bundled,\n // resolving runtime import issues in these components.\n config.optimizeDeps?.include?.push('@clerk/astro/client');\n // Let astro vite plugin handle this.\n config.optimizeDeps?.exclude?.push('astro:transitions/client');\n },\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return `\n const configOutput = '${astroConfig.output}';\n\n export function isStaticOutput(forceStatic) {\n if (configOutput === 'hybrid' && forceStatic === undefined) {\n // Default page is prerendered in hybrid mode\n return true;\n }\n\n if (forceStatic !== undefined) {\n return forceStatic;\n }\n\n return configOutput === 'static';\n }\n `;\n }\n },\n };\n}\n","import { createIntegration } from './integration/create-integration';\n\nexport default createIntegration();\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/integration/create-integration.ts","../package.json","../src/integration/vite-plugin-astro-config.ts","../src/index.ts"],"sourcesContent":["import type { ClerkOptions } from '@clerk/shared/types';\nimport type { AstroIntegration } from 'astro';\nimport { envField } from 'astro/config';\n\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport type { AstroClerkIntegrationParams } from '../types';\nimport { vitePluginAstroConfig } from './vite-plugin-astro-config';\n\nconst buildEnvVarFromOption = (valueToBeStored: unknown, envName: keyof InternalEnv) => {\n return valueToBeStored ? { [`import.meta.env.${envName}`]: JSON.stringify(valueToBeStored) } : {};\n};\n\ntype HotloadAstroClerkIntegrationParams = AstroClerkIntegrationParams & {\n enableEnvSchema?: boolean;\n};\n\nfunction createIntegration<Params extends HotloadAstroClerkIntegrationParams>() {\n return (params?: Params): AstroIntegration => {\n const { proxyUrl, isSatellite, domain, signInUrl, signUpUrl, enableEnvSchema = true } = params || {};\n\n // These are not provided when the \"bundled\" integration is used\n const clerkJSUrl = (params as any)?.clerkJSUrl as string | undefined;\n const clerkUiUrl = (params as any)?.clerkUiUrl as string | undefined;\n const clerkJSVariant = (params as any)?.clerkJSVariant as string | undefined;\n const clerkJSVersion = (params as any)?.clerkJSVersion as string | undefined;\n\n return {\n name: '@clerk/astro/integration',\n hooks: {\n 'astro:config:setup': ({ config, injectScript, updateConfig, logger, command }) => {\n if (['server', 'hybrid'].includes(config.output) && !config.adapter) {\n logger.error('Missing adapter, please update your Astro config to use one.');\n }\n\n if (typeof clerkJSVariant !== 'undefined' && clerkJSVariant !== 'headless' && clerkJSVariant !== '') {\n logger.error('Invalid value for clerkJSVariant. Acceptable values are `\"headless\"`, `\"\"`, and `undefined`');\n }\n\n const internalParams: ClerkOptions = {\n ...params,\n sdkMetadata: {\n version: packageVersion,\n name: packageName,\n environment: command === 'dev' ? 'development' : 'production',\n },\n };\n\n const buildImportPath = `${packageName}/internal`;\n\n // Set params as envs so backend code has access to them\n updateConfig({\n vite: {\n plugins: [vitePluginAstroConfig(config)],\n define: {\n /**\n * Convert the integration params to environment variable in order for it to be readable from the server\n */\n ...buildEnvVarFromOption(signInUrl, 'PUBLIC_CLERK_SIGN_IN_URL'),\n ...buildEnvVarFromOption(signUpUrl, 'PUBLIC_CLERK_SIGN_UP_URL'),\n ...buildEnvVarFromOption(isSatellite, 'PUBLIC_CLERK_IS_SATELLITE'),\n ...buildEnvVarFromOption(proxyUrl, 'PUBLIC_CLERK_PROXY_URL'),\n ...buildEnvVarFromOption(domain, 'PUBLIC_CLERK_DOMAIN'),\n ...buildEnvVarFromOption(clerkJSUrl, 'PUBLIC_CLERK_JS_URL'),\n ...buildEnvVarFromOption(clerkUiUrl, 'PUBLIC_CLERK_UI_URL'),\n ...buildEnvVarFromOption(clerkJSVariant, 'PUBLIC_CLERK_JS_VARIANT'),\n ...buildEnvVarFromOption(clerkJSVersion, 'PUBLIC_CLERK_JS_VERSION'),\n },\n\n ssr: {\n external: ['node:async_hooks'],\n },\n\n // We need this for top-level await\n optimizeDeps: {\n esbuildOptions: {\n target: 'es2022',\n },\n },\n build: {\n target: 'es2022',\n },\n },\n env: {\n schema: {\n ...(enableEnvSchema ? createClerkEnvSchema() : {}),\n },\n },\n });\n\n /**\n * ------------- Script Injection --------------------------\n * Below we are injecting the same script twice. `runInjectionScript` is build in such way in order to instanciate and load Clerk only once.\n * We need both scripts in order to support applications with or without UI frameworks.\n */\n\n /**\n * The above script will run before client frameworks like React hydrate.\n * This makes sure that we have initialized a Clerk instance and populated stores in order to avoid hydration issues.\n */\n injectScript(\n 'before-hydration',\n `\n ${command === 'dev' ? `console.log('${packageName}',\"Initialize Clerk: before-hydration\")` : ''}\n import { runInjectionScript } from \"${buildImportPath}\";\n await runInjectionScript(${JSON.stringify(internalParams)});`,\n );\n\n /**\n * The above script only executes if a client framework like React needs to hydrate.\n * We need to run the same script again for each page in order to initialize Clerk even if no UI framework is used in the client\n * If no UI framework is used in the client, the above script with `before-hydration` will never run\n */\n\n injectScript(\n 'page',\n `\n ${command === 'dev' ? `console.log(\"${packageName}\",\"Initialize Clerk: page\")` : ''}\n import { runInjectionScript, swapDocument } from \"${buildImportPath}\";\n\n // Taken from https://github.com/withastro/astro/blob/e10b03e88c22592fbb42d7245b65c4f486ab736d/packages/astro/src/transitions/router.ts#L39.\n // Importing it directly from astro:transitions/client breaks custom client-side routing\n // even when View Transitions is disabled.\n const transitionEnabledOnThisPage = () => {\n return !!document.querySelector('[name=\"astro-view-transitions-enabled\"]');\n }\n\n if (transitionEnabledOnThisPage()) {\n const { navigate, swapFunctions } = await import('astro:transitions/client');\n\n document.addEventListener('astro:before-swap', (e) => {\n const clerkComponents = document.querySelector('#clerk-components');\n // Keep the div element added by Clerk\n if (clerkComponents) {\n const clonedEl = clerkComponents.cloneNode(true);\n e.newDocument.body.appendChild(clonedEl);\n }\n\n e.swap = () => swapDocument(swapFunctions, e.newDocument);\n });\n\n document.addEventListener('astro:page-load', async (e) => {\n await runInjectionScript({\n ...${JSON.stringify(internalParams)},\n routerPush: navigate,\n routerReplace: (url) => navigate(url, { history: 'replace' }),\n });\n })\n } else {\n await runInjectionScript(${JSON.stringify(internalParams)});\n }`,\n );\n },\n 'astro:config:done': ({ injectTypes }) => {\n injectTypes({\n filename: 'types.d.ts',\n content: `/// <reference types=\"@clerk/astro/env\" />`,\n });\n },\n },\n };\n };\n}\n\nfunction createClerkEnvSchema() {\n return {\n PUBLIC_CLERK_PUBLISHABLE_KEY: envField.string({ context: 'client', access: 'public' }),\n PUBLIC_CLERK_SIGN_IN_URL: envField.string({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_SIGN_UP_URL: envField.string({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_IS_SATELLITE: envField.boolean({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_PROXY_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_DOMAIN: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_JS_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_UI_URL: envField.string({ context: 'client', access: 'public', optional: true, url: true }),\n PUBLIC_CLERK_JS_VARIANT: envField.enum({\n context: 'client',\n access: 'public',\n optional: true,\n values: ['headless'],\n }),\n PUBLIC_CLERK_JS_VERSION: envField.string({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_TELEMETRY_DISABLED: envField.boolean({ context: 'client', access: 'public', optional: true }),\n PUBLIC_CLERK_TELEMETRY_DEBUG: envField.boolean({ context: 'client', access: 'public', optional: true }),\n CLERK_SECRET_KEY: envField.string({ context: 'server', access: 'secret' }),\n CLERK_MACHINE_SECRET_KEY: envField.string({ context: 'server', access: 'secret', optional: true }),\n CLERK_JWT_KEY: envField.string({ context: 'server', access: 'secret', optional: true }),\n };\n}\n\nexport { createIntegration };\n","{\n \"name\": \"@clerk/astro\",\n \"version\": \"3.0.0-snapshot.v20251203152900\",\n \"description\": \"Clerk SDK for Astro\",\n \"keywords\": [\n \"auth\",\n \"authentication\",\n \"astro\",\n \"astro-integration\",\n \"clerk\",\n \"typescript\",\n \"passwordless\",\n \"astro-component\",\n \"withastro\"\n ],\n \"homepage\": \"https://clerk.com/\",\n \"bugs\": {\n \"url\": \"https://github.com/clerk/javascript/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/clerk/javascript.git\",\n \"directory\": \"packages/astro\"\n },\n \"license\": \"MIT\",\n \"author\": \"Clerk\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"imports\": {\n \"#async-local-storage\": {\n \"workerd\": \"./dist/async-local-storage.server.js\",\n \"browser\": \"./dist/async-local-storage.client.js\",\n \"node\": \"./dist/async-local-storage.server.js\",\n \"default\": \"./dist/async-local-storage.server.js\"\n }\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./react\": {\n \"types\": \"./dist/react/index.d.ts\",\n \"default\": \"./dist/react/index.js\"\n },\n \"./client\": {\n \"types\": \"./dist/client/index.d.ts\",\n \"default\": \"./dist/client/index.js\"\n },\n \"./internal\": {\n \"types\": \"./dist/internal/index.d.ts\",\n \"default\": \"./dist/internal/index.js\"\n },\n \"./server\": {\n \"types\": \"./dist/server/index.d.ts\",\n \"default\": \"./dist/server/index.js\"\n },\n \"./webhooks\": {\n \"types\": \"./dist/webhooks.d.ts\",\n \"default\": \"./dist/webhooks.js\"\n },\n \"./env\": \"./env.d.ts\",\n \"./components\": \"./components/index.ts\",\n \"./package.json\": \"./package.json\"\n },\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"client\",\n \"server\",\n \"internal\",\n \"components\",\n \"webhooks\",\n \"env.d.ts\",\n \"types.ts\"\n ],\n \"scripts\": {\n \"build\": \"tsup --onSuccess \\\"pnpm build:dts\\\" && pnpm copy:components\",\n \"build:dts\": \"tsc --emitDeclarationOnly --declaration\",\n \"copy:components\": \"rm -rf ./components && mkdir -p ./components/ && cp -r ./src/astro-components/* ./components/ && cp ./src/types.ts ./\",\n \"dev\": \"tsup --watch --onSuccess \\\"pnpm build:dts\\\"\",\n \"format\": \"node ../../scripts/format-package.mjs\",\n \"format:check\": \"node ../../scripts/format-package.mjs --check\",\n \"lint\": \"eslint src env.d.ts\",\n \"lint:attw\": \"attw --pack . --profile esm-only --ignore-rules internal-resolution-error\",\n \"lint:publint\": \"pnpm copy:components && publint\",\n \"publish:local\": \"pnpm yalc push --replace --sig\"\n },\n \"dependencies\": {\n \"@clerk/backend\": \"workspace:^\",\n \"@clerk/shared\": \"workspace:^\",\n \"nanoid\": \"5.1.6\",\n \"nanostores\": \"1.0.1\"\n },\n \"devDependencies\": {\n \"@clerk/ui\": \"workspace:^\",\n \"astro\": \"^5.15.3\"\n },\n \"peerDependencies\": {\n \"astro\": \"^4.15.0 || ^5.0.0\"\n },\n \"engines\": {\n \"node\": \">=20.9.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import type { AstroConfig } from 'astro';\n\ntype VitePlugin = Required<AstroConfig['vite']>['plugins'][number];\n\n/**\n * This Vite module exports a `isStaticOutput` function that is imported inside our control components\n * to determine which components to use depending on the Astro config output option.\n *\n * @param {AstroConfig} astroConfig - The Astro configuration object\n * @returns {VitePlugin} A Vite plugin\n */\nexport function vitePluginAstroConfig(astroConfig: AstroConfig): VitePlugin {\n const virtualModuleId = 'virtual:@clerk/astro/config';\n const resolvedVirtualModuleId = '\\0' + virtualModuleId;\n\n return {\n name: 'vite-plugin-astro-config',\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n config(config) {\n // While Astro processes <script> tags by default, our control components\n // which uses <script> tags and imports nanostores will not be processed by Astro.\n // This ensures @clerk/astro/client is properly processed and bundled,\n // resolving runtime import issues in these components.\n config.optimizeDeps?.include?.push('@clerk/astro/client');\n // Let astro vite plugin handle this.\n config.optimizeDeps?.exclude?.push('astro:transitions/client');\n },\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return `\n const configOutput = '${astroConfig.output}';\n\n export function isStaticOutput(forceStatic) {\n if (configOutput === 'hybrid' && forceStatic === undefined) {\n // Default page is prerendered in hybrid mode\n return true;\n }\n\n if (forceStatic !== undefined) {\n return forceStatic;\n }\n\n return configOutput === 'static';\n }\n `;\n }\n },\n };\n}\n","import { createIntegration } from './integration/create-integration';\n\nexport default createIntegration();\n"],"mappings":"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","names":[]}
|
package/dist/server/index.js
CHANGED
|
@@ -109,10 +109,10 @@ var createClerkClientWithOptions = (context, options) => createClerkClient({
|
|
|
109
109
|
proxyUrl: getSafeEnv(context).proxyUrl,
|
|
110
110
|
domain: getSafeEnv(context).domain,
|
|
111
111
|
isSatellite: getSafeEnv(context).isSatellite,
|
|
112
|
-
userAgent: `${"@clerk/astro"}@${"3.0.0-
|
|
112
|
+
userAgent: `${"@clerk/astro"}@${"3.0.0-snapshot.v20251203152900"}`,
|
|
113
113
|
sdkMetadata: {
|
|
114
114
|
name: "@clerk/astro",
|
|
115
|
-
version: "3.0.0-
|
|
115
|
+
version: "3.0.0-snapshot.v20251203152900",
|
|
116
116
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
117
117
|
environment: import.meta.env.MODE
|
|
118
118
|
},
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/index.ts","../../src/server/clerk-middleware.ts","../../src/server/build-clerk-hotload-script.ts","../../src/server/get-safe-env.ts","../../src/server/clerk-client.ts","../../src/server/current-user.ts","../../src/server/server-redirect-with-auth.ts","../../src/server/utils.ts","../../src/server/route-matcher.ts"],"sourcesContent":["import type { SignedInAuthObject, SignedOutAuthObject } from '@clerk/backend/internal';\n\n/**\n * Re-export utilities\n */\nexport { verifyToken, createClerkClient } from '@clerk/backend';\n\n/**\n * Re-export types\n */\nexport type {\n OrganizationMembershipRole,\n // Webhook event types\n WebhookEvent,\n WebhookEventType,\n // Resources\n AllowlistIdentifier,\n Client,\n EmailAddress,\n ExternalAccount,\n Invitation,\n OauthAccessToken,\n Organization,\n OrganizationDomain,\n OrganizationInvitation,\n OrganizationMembership,\n OrganizationMembershipPublicUserData,\n PhoneNumber,\n Session,\n SignInToken,\n SMSMessage,\n Token,\n User,\n} from '@clerk/backend';\n\nexport { clerkMiddleware } from './clerk-middleware';\nexport { createRouteMatcher } from './route-matcher';\nexport { clerkClient } from './clerk-client';\n\n/**\n * @deprecated Use `AuthObject` instead. This type only supports session auth.\n * `context.locals.auth()` can now return an `AuthObject` with session and machine auth support.\n */\ntype GetAuthReturn = SignedInAuthObject | SignedOutAuthObject;\nexport type { GetAuthReturn };\n\n/**\n * This will be used to define types of Astro.Locals inside `env.d.ts`\n */\nexport type { AuthFn } from './types';\n","import type { AuthObject, ClerkClient } from '@clerk/backend';\nimport type {\n AuthenticateRequestOptions,\n AuthOptions,\n ClerkRequest,\n RedirectFun,\n RequestState,\n} from '@clerk/backend/internal';\nimport {\n AuthStatus,\n constants,\n createClerkRequest,\n createRedirect,\n getAuthObjectForAcceptedToken,\n signedOutAuthObject,\n TokenType,\n} from '@clerk/backend/internal';\nimport { isDevelopmentFromSecretKey } from '@clerk/shared/keys';\nimport { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler';\nimport { isHttpOrHttps } from '@clerk/shared/proxy';\nimport type { PendingSessionOptions } from '@clerk/shared/types';\nimport { handleValueOrFn } from '@clerk/shared/utils';\nimport type { APIContext } from 'astro';\n\nimport { authAsyncStorage } from '#async-local-storage';\n\nimport { buildClerkHotloadScript } from './build-clerk-hotload-script';\nimport { clerkClient } from './clerk-client';\nimport { createCurrentUser } from './current-user';\nimport { getClientSafeEnv, getSafeEnv } from './get-safe-env';\nimport { serverRedirectWithAuth } from './server-redirect-with-auth';\nimport type {\n AstroMiddleware,\n AstroMiddlewareContextParam,\n AstroMiddlewareNextParam,\n AstroMiddlewareReturn,\n AuthFn,\n SessionAuthObjectWithRedirect,\n} from './types';\nimport { isRedirect, setHeader } from './utils';\n\nconst CONTROL_FLOW_ERROR = {\n REDIRECT_TO_SIGN_IN: 'CLERK_PROTECT_REDIRECT_TO_SIGN_IN',\n};\n\ntype ClerkAstroMiddlewareHandler = (\n auth: AuthFn,\n context: AstroMiddlewareContextParam,\n next: AstroMiddlewareNextParam,\n) => AstroMiddlewareReturn | undefined;\n\ntype ClerkAstroMiddlewareOptions = AuthenticateRequestOptions;\n\n/**\n * Middleware for Astro that handles authentication and authorization with Clerk.\n */\ninterface ClerkMiddleware {\n /**\n * @example\n * export default clerkMiddleware((auth, context, next) => { ... }, options);\n */\n (handler: ClerkAstroMiddlewareHandler, options?: ClerkAstroMiddlewareOptions): AstroMiddleware;\n\n /**\n * @example\n * export default clerkMiddleware(options);\n */\n (options?: ClerkAstroMiddlewareOptions): AstroMiddleware;\n}\n\nexport const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): any => {\n const [handler, options] = parseHandlerAndOptions(args);\n\n const astroMiddleware: AstroMiddleware = async (context, next) => {\n // if the current page is prerendered, do nothing\n if (isPrerenderedPage(context)) {\n return next();\n }\n\n const clerkRequest = createClerkRequest(context.request);\n\n const requestState = await clerkClient(context).authenticateRequest(\n clerkRequest,\n createAuthenticateRequestOptions(clerkRequest, options, context),\n );\n\n const locationHeader = requestState.headers.get(constants.Headers.Location);\n if (locationHeader) {\n handleNetlifyCacheInDevInstance({\n locationHeader,\n requestStateHeaders: requestState.headers,\n publishableKey: requestState.publishableKey,\n });\n\n const res = new Response(null, { status: 307, headers: requestState.headers });\n return decorateResponseWithObservabilityHeaders(res, requestState);\n } else if (requestState.status === AuthStatus.Handshake) {\n throw new Error('Clerk: handshake status without redirect');\n }\n\n const authObjectFn = (opts?: PendingSessionOptions) => requestState.toAuth(opts);\n\n const redirectToSignIn = createMiddlewareRedirectToSignIn(clerkRequest);\n\n decorateAstroLocal(clerkRequest, authObjectFn, context, requestState);\n\n /**\n * ALS is crucial for guaranteeing SSR in UI frameworks like React.\n * This currently powers the `useAuth()` React hook and any other hook or Component that depends on it.\n */\n const asyncStorageAuthObject =\n authObjectFn().tokenType === TokenType.SessionToken ? authObjectFn() : signedOutAuthObject({});\n\n const authHandler = (opts?: AuthOptions) => {\n const authObject = getAuthObjectForAcceptedToken({\n authObject: authObjectFn({ treatPendingAsSignedOut: opts?.treatPendingAsSignedOut }),\n acceptsToken: opts?.acceptsToken,\n });\n\n if (authObject.tokenType === TokenType.SessionToken) {\n return Object.assign(authObject, { redirectToSignIn });\n }\n\n return authObject;\n };\n\n return authAsyncStorage.run(asyncStorageAuthObject, async () => {\n /**\n * Generate SSR page\n */\n let handlerResult: Response;\n try {\n handlerResult = (await handler?.(authHandler as AuthFn, context, next)) || (await next());\n } catch (e: any) {\n handlerResult = handleControlFlowErrors(e, clerkRequest, requestState, context);\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(context, clerkRequest, handlerResult, options);\n }\n\n const response = decorateRequest(context.locals, handlerResult);\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n response.headers.append(key, value);\n });\n }\n\n return response;\n });\n };\n\n return astroMiddleware;\n};\n\nconst isPrerenderedPage = (context: APIContext) => {\n return (\n // for Astro v5\n ('isPrerendered' in context && context.isPrerendered) ||\n // for Astro v4\n ('_isPrerendered' in context && context._isPrerendered)\n );\n};\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nconst parseHandlerAndOptions = (args: unknown[]) => {\n return [\n typeof args[0] === 'function' ? args[0] : undefined,\n (args.length === 2 ? args[1] : typeof args[0] === 'function' ? {} : args[0]) || {},\n ] as [ClerkAstroMiddlewareHandler | undefined, ClerkAstroMiddlewareOptions];\n};\n\ntype AuthenticateRequest = Pick<ClerkClient, 'authenticateRequest'>['authenticateRequest'];\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nexport const createAuthenticateRequestOptions = (\n clerkRequest: ClerkRequest,\n options: ClerkAstroMiddlewareOptions,\n context: AstroMiddlewareContextParam,\n): Parameters<AuthenticateRequest>[1] => {\n return {\n ...options,\n secretKey: options.secretKey || getSafeEnv(context).sk,\n publishableKey: options.publishableKey || getSafeEnv(context).pk,\n signInUrl: options.signInUrl || getSafeEnv(context).signInUrl,\n signUpUrl: options.signUpUrl || getSafeEnv(context).signUpUrl,\n ...handleMultiDomainAndProxy(clerkRequest, options, context),\n acceptsToken: 'any',\n };\n};\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nexport const decorateResponseWithObservabilityHeaders = (res: Response, requestState: RequestState): Response => {\n if (requestState.message) {\n res.headers.set(constants.Headers.AuthMessage, encodeURIComponent(requestState.message));\n }\n if (requestState.reason) {\n res.headers.set(constants.Headers.AuthReason, encodeURIComponent(requestState.reason));\n }\n if (requestState.status) {\n res.headers.set(constants.Headers.AuthStatus, encodeURIComponent(requestState.status));\n }\n return res;\n};\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nexport const handleMultiDomainAndProxy = (\n clerkRequest: ClerkRequest,\n opts: AuthenticateRequestOptions,\n context: AstroMiddlewareContextParam,\n) => {\n const relativeOrAbsoluteProxyUrl = handleValueOrFn(\n opts?.proxyUrl,\n clerkRequest.clerkUrl,\n getSafeEnv(context).proxyUrl,\n );\n\n let proxyUrl;\n if (!!relativeOrAbsoluteProxyUrl && !isHttpOrHttps(relativeOrAbsoluteProxyUrl)) {\n proxyUrl = new URL(relativeOrAbsoluteProxyUrl, clerkRequest.clerkUrl).toString();\n } else {\n proxyUrl = relativeOrAbsoluteProxyUrl;\n }\n\n const isSatellite = handleValueOrFn(opts.isSatellite, new URL(clerkRequest.url), getSafeEnv(context).isSatellite);\n const domain = handleValueOrFn(opts.domain, new URL(clerkRequest.url), getSafeEnv(context).domain);\n const signInUrl = opts?.signInUrl || getSafeEnv(context).signInUrl;\n\n if (isSatellite && !proxyUrl && !domain) {\n throw new Error(missingDomainAndProxy);\n }\n\n if (\n isSatellite &&\n !isHttpOrHttps(signInUrl) &&\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n isDevelopmentFromSecretKey(opts.secretKey || getSafeEnv(context).sk!)\n ) {\n throw new Error(missingSignInUrlInDev);\n }\n\n return {\n proxyUrl,\n isSatellite,\n domain,\n };\n};\n\nexport const missingDomainAndProxy = `\nMissing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl.\n\n1) With middleware\n e.g. export default clerkMiddleware({domain:'YOUR_DOMAIN',isSatellite:true});\n2) With environment variables e.g.\n PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN'\n PUBLIC_CLERK_IS_SATELLITE='true'\n `;\n\nexport const missingSignInUrlInDev = `\nInvalid signInUrl. A satellite application requires a signInUrl for development instances.\nCheck if signInUrl is missing from your configuration or if it is not an absolute URL\n\n1) With middleware\n e.g. export default clerkMiddleware({signInUrl:'SOME_URL', isSatellite:true});\n2) With environment variables e.g.\n PUBLIC_CLERK_SIGN_IN_URL='SOME_URL'\n PUBLIC_CLERK_IS_SATELLITE='true'`;\n\nfunction decorateAstroLocal(\n clerkRequest: ClerkRequest,\n authObjectFn: (opts?: PendingSessionOptions) => AuthObject,\n context: APIContext,\n requestState: RequestState,\n) {\n const { reason, message, status, token } = requestState;\n context.locals.authToken = token;\n context.locals.authStatus = status;\n context.locals.authMessage = message;\n context.locals.authReason = reason;\n context.locals.auth = (({ acceptsToken, treatPendingAsSignedOut }: AuthOptions = {}) => {\n const authObject = getAuthObjectForAcceptedToken({\n authObject: authObjectFn({ treatPendingAsSignedOut }),\n acceptsToken,\n });\n\n if (authObject.tokenType === TokenType.SessionToken) {\n const clerkUrl = clerkRequest.clerkUrl;\n\n const redirectToSignIn: RedirectFun<Response> = (opts = {}) => {\n const devBrowserToken =\n clerkRequest.clerkUrl.searchParams.get(constants.QueryParameters.DevBrowser) ||\n clerkRequest.cookies.get(constants.Cookies.DevBrowser);\n\n return createRedirect({\n redirectAdapter,\n devBrowserToken: devBrowserToken,\n baseUrl: clerkUrl.toString(),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n publishableKey: getSafeEnv(context).pk!,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n sessionStatus: requestState.toAuth()?.sessionStatus,\n }).redirectToSignIn({\n returnBackUrl: opts.returnBackUrl === null ? '' : opts.returnBackUrl || clerkUrl.toString(),\n });\n };\n\n return Object.assign(authObject, { redirectToSignIn });\n }\n\n return authObject;\n }) as AuthFn;\n\n context.locals.currentUser = createCurrentUser(context);\n}\n\n/**\n * Find the index of the closing head tag in the chunk.\n *\n * Note: This implementation uses a simple approach that works for most of our\n * current use cases.\n */\nfunction findClosingHeadTagIndex(chunk: Uint8Array, endHeadTag: Uint8Array) {\n return chunk.findIndex((_, i) => endHeadTag.every((value, j) => value === chunk[i + j]));\n}\n\nfunction decorateRequest(locals: APIContext['locals'], res: Response): Response {\n /**\n * Populate every page with the authObject. This allows for SSR to work properly\n * without sucrificing DX and having developers wrap each page with a Layout that would handle this.\n */\n if (res.headers.get('content-type') === 'text/html') {\n const encoder = new TextEncoder();\n const closingHeadTag = encoder.encode('</head>');\n const clerkAstroData = encoder.encode(\n `<script id=\"__CLERK_ASTRO_DATA__\" type=\"application/json\">${JSON.stringify(locals.auth())}</script>\\n`,\n );\n const clerkSafeEnvVariables = encoder.encode(\n `<script id=\"__CLERK_ASTRO_SAFE_VARS__\" type=\"application/json\">${JSON.stringify(getClientSafeEnv(locals))}</script>\\n`,\n );\n const hotloadScript = encoder.encode(buildClerkHotloadScript(locals));\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const stream = res.body!.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n const index = findClosingHeadTagIndex(chunk, closingHeadTag);\n const isClosingHeadTagFound = index !== -1;\n\n /**\n * Hijack html response to position `__CLERK_ASTRO_DATA__` before the closing `head` html tag\n */\n if (isClosingHeadTagFound) {\n controller.enqueue(chunk.slice(0, index));\n controller.enqueue(clerkAstroData);\n controller.enqueue(clerkSafeEnvVariables);\n\n controller.enqueue(hotloadScript);\n\n controller.enqueue(closingHeadTag);\n controller.enqueue(chunk.slice(index + closingHeadTag.length));\n } else {\n controller.enqueue(chunk);\n }\n },\n }),\n );\n\n const modifiedResponse = new Response(stream, {\n status: res.status,\n statusText: res.statusText,\n headers: res.headers,\n });\n\n return modifiedResponse;\n }\n return res;\n}\n\nconst redirectAdapter = (url: string | URL) => {\n const res = new Response(null, {\n status: 307,\n });\n\n /**\n * Hint to clerk to add cookie with db jwt\n */\n setHeader(res, constants.Headers.ClerkRedirectTo, 'true');\n return setHeader(res, 'Location', url instanceof URL ? url.href : url);\n};\n\nconst createMiddlewareRedirectToSignIn = (\n clerkRequest: ClerkRequest,\n): SessionAuthObjectWithRedirect['redirectToSignIn'] => {\n return (opts = {}) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN) as any;\n err.returnBackUrl = opts.returnBackUrl === null ? '' : opts.returnBackUrl || clerkRequest.clerkUrl.toString();\n throw err;\n };\n};\n\n// Handle errors thrown by redirectToSignIn() calls,\n// as we want to align the APIs between middleware, pages and route handlers\n// Normally, middleware requires to explicitly return a response, but we want to\n// avoid discrepancies between the APIs as it's easy to miss the `return` statement\n// especially when copy-pasting code from one place to another.\n// This function handles the known errors thrown by the APIs described above,\n// and returns the appropriate response.\nconst handleControlFlowErrors = (\n e: any,\n clerkRequest: ClerkRequest,\n requestState: RequestState,\n context: AstroMiddlewareContextParam,\n): Response => {\n switch (e.message) {\n case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:\n return createRedirect({\n redirectAdapter,\n baseUrl: clerkRequest.clerkUrl,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n publishableKey: getSafeEnv(context).pk!,\n sessionStatus: requestState.toAuth()?.sessionStatus,\n }).redirectToSignIn({ returnBackUrl: e.returnBackUrl });\n default:\n throw e;\n }\n};\n","import { clerkJsScriptUrl, clerkUiScriptUrl } from '@clerk/shared/loadClerkJsScript';\nimport type { APIContext } from 'astro';\n\nimport { getSafeEnv } from './get-safe-env';\n\nfunction buildClerkHotloadScript(locals: APIContext['locals']) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const publishableKey = getSafeEnv(locals).pk!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const proxyUrl = getSafeEnv(locals).proxyUrl!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const domain = getSafeEnv(locals).domain!;\n const clerkJsScriptSrc = clerkJsScriptUrl({\n clerkJSUrl: getSafeEnv(locals).clerkJsUrl,\n clerkJSVariant: getSafeEnv(locals).clerkJsVariant,\n clerkJSVersion: getSafeEnv(locals).clerkJsVersion,\n domain,\n proxyUrl,\n publishableKey,\n });\n const clerkUiScriptSrc = clerkUiScriptUrl({\n clerkUiUrl: getSafeEnv(locals).clerkUiUrl,\n domain,\n proxyUrl,\n publishableKey,\n });\n return `\n <script src=\"${clerkJsScriptSrc}\"\n data-clerk-js-script\n async\n crossOrigin='anonymous'\n ${publishableKey ? `data-clerk-publishable-key=\"${publishableKey}\"` : ``}\n ${proxyUrl ? `data-clerk-proxy-url=\"${proxyUrl}\"` : ``}\n ${domain ? `data-clerk-domain=\"${domain}\"` : ``}\n ></script>\n <script src=\"${clerkUiScriptSrc}\"\n data-clerk-ui-script\n async\n crossOrigin='anonymous'\n ${publishableKey ? `data-clerk-publishable-key=\"${publishableKey}\"` : ``}\n ${proxyUrl ? `data-clerk-proxy-url=\"${proxyUrl}\"` : ``}\n ${domain ? `data-clerk-domain=\"${domain}\"` : ``}\n ></script>\\n`;\n}\n\nexport { buildClerkHotloadScript };\n","import { isTruthy } from '@clerk/shared/underscore';\nimport type { APIContext } from 'astro';\n\ntype ContextOrLocals = APIContext | APIContext['locals'];\n\n/**\n * @internal\n * Isomorphic handler for reading environment variables defined from Vite or are injected in the request context (CF Pages)\n */\nfunction getContextEnvVar(envVarName: keyof InternalEnv, contextOrLocals: ContextOrLocals): string | undefined {\n const locals = 'locals' in contextOrLocals ? contextOrLocals.locals : contextOrLocals;\n\n if (locals?.runtime?.env) {\n return locals.runtime.env[envVarName];\n }\n\n return import.meta.env[envVarName];\n}\n\n/**\n * @internal\n */\nfunction getSafeEnv(context: ContextOrLocals) {\n return {\n domain: getContextEnvVar('PUBLIC_CLERK_DOMAIN', context),\n isSatellite: getContextEnvVar('PUBLIC_CLERK_IS_SATELLITE', context) === 'true',\n proxyUrl: getContextEnvVar('PUBLIC_CLERK_PROXY_URL', context),\n pk: getContextEnvVar('PUBLIC_CLERK_PUBLISHABLE_KEY', context),\n sk: getContextEnvVar('CLERK_SECRET_KEY', context),\n machineSecretKey: getContextEnvVar('CLERK_MACHINE_SECRET_KEY', context),\n signInUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_IN_URL', context),\n signUpUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_UP_URL', context),\n clerkJsUrl: getContextEnvVar('PUBLIC_CLERK_JS_URL', context),\n clerkUiUrl: getContextEnvVar('PUBLIC_CLERK_UI_URL', context),\n clerkJsVariant: getContextEnvVar('PUBLIC_CLERK_JS_VARIANT', context) as 'headless' | '' | undefined,\n clerkJsVersion: getContextEnvVar('PUBLIC_CLERK_JS_VERSION', context),\n apiVersion: getContextEnvVar('CLERK_API_VERSION', context),\n apiUrl: getContextEnvVar('CLERK_API_URL', context),\n telemetryDisabled: isTruthy(getContextEnvVar('PUBLIC_CLERK_TELEMETRY_DISABLED', context)),\n telemetryDebug: isTruthy(getContextEnvVar('PUBLIC_CLERK_TELEMETRY_DEBUG', context)),\n };\n}\n\n/**\n * @internal\n * This should be used in order to pass environment variables from the server safely to the client.\n * When running an application with `wrangler pages dev` client side environment variables are not attached to `import.meta.env.*`\n * This is not the case when deploying to cloudflare pages directly\n * This is a way to get around it.\n */\nfunction getClientSafeEnv(context: ContextOrLocals) {\n return {\n domain: getContextEnvVar('PUBLIC_CLERK_DOMAIN', context),\n isSatellite: getContextEnvVar('PUBLIC_CLERK_IS_SATELLITE', context) === 'true',\n proxyUrl: getContextEnvVar('PUBLIC_CLERK_PROXY_URL', context),\n signInUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_IN_URL', context),\n signUpUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_UP_URL', context),\n };\n}\n\nexport { getSafeEnv, getClientSafeEnv };\n","import type { ClerkClient, ClerkOptions } from '@clerk/backend';\nimport { createClerkClient } from '@clerk/backend';\nimport type { APIContext } from 'astro';\n\nimport { getSafeEnv } from './get-safe-env';\n\ntype CreateClerkClientWithOptions = (context: APIContext, options?: ClerkOptions) => ClerkClient;\nconst createClerkClientWithOptions: CreateClerkClientWithOptions = (context, options) =>\n createClerkClient({\n secretKey: getSafeEnv(context).sk,\n machineSecretKey: getSafeEnv(context).machineSecretKey,\n publishableKey: getSafeEnv(context).pk,\n apiUrl: getSafeEnv(context).apiUrl,\n apiVersion: getSafeEnv(context).apiVersion,\n proxyUrl: getSafeEnv(context).proxyUrl,\n domain: getSafeEnv(context).domain,\n isSatellite: getSafeEnv(context).isSatellite,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n sdkMetadata: {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n environment: import.meta.env.MODE,\n },\n telemetry: {\n disabled: getSafeEnv(context).telemetryDisabled,\n debug: getSafeEnv(context).telemetryDebug,\n },\n ...options,\n });\n\nconst clerkClient = (context: APIContext) => createClerkClientWithOptions(context);\n\nexport { clerkClient };\n","import type { User } from '@clerk/backend';\nimport type { APIContext } from 'astro';\n\nimport { clerkClient } from './clerk-client';\n\nexport const createCurrentUser = (context: APIContext) => {\n return async (): Promise<User | null> => {\n const { userId } = context.locals.auth();\n\n if (!userId) {\n return null;\n }\n\n return clerkClient(context).users.getUser(userId);\n };\n};\n","// Middleware runs on the server side, before clerk-js is loaded, that's why we need Cookies.\nimport type { AuthenticateRequestOptions, ClerkRequest } from '@clerk/backend/internal';\nimport { constants } from '@clerk/backend/internal';\nimport { DEV_BROWSER_JWT_KEY, setDevBrowserJWTInURL } from '@clerk/shared/devBrowser';\nimport { isDevelopmentFromSecretKey } from '@clerk/shared/keys';\n\nimport { getSafeEnv } from './get-safe-env';\nimport type { AstroMiddlewareContextParam } from './types';\n\n// TODO-SHARED: This exists in @clerk/nextjs\n/**\n * Grabs the dev browser JWT from cookies and appends it to the redirect URL when redirecting to cross-origin.\n */\nexport const serverRedirectWithAuth = (\n context: AstroMiddlewareContextParam,\n clerkRequest: ClerkRequest,\n res: Response,\n opts: AuthenticateRequestOptions,\n) => {\n const location = res.headers.get('location');\n const shouldAppendDevBrowser = res.headers.get(constants.Headers.ClerkRedirectTo) === 'true';\n\n if (\n shouldAppendDevBrowser &&\n !!location &&\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n isDevelopmentFromSecretKey(opts.secretKey || getSafeEnv(context).sk!) &&\n clerkRequest.clerkUrl.isCrossOrigin(location)\n ) {\n const dbJwt = clerkRequest.cookies.get(DEV_BROWSER_JWT_KEY) || '';\n const url = new URL(location);\n const urlWithDevBrowser = setDevBrowserJWTInURL(url, dbJwt);\n return context.redirect(urlWithDevBrowser.href, 307);\n }\n return res;\n};\n","import { constants } from '@clerk/backend/internal';\n\nexport function getAuthKeyFromRequest(req: Request, key: keyof typeof constants.Attributes): string | null | undefined {\n return getHeader(req, constants.Headers[key]);\n}\n\nfunction getHeader(req: Request, name: string) {\n return req.headers.get(name);\n}\n\nexport const isRedirect = (res: Response) => {\n return (\n [300, 301, 302, 303, 304, 307, 308].includes(res.status) ||\n res.headers.get(constants.Headers.ClerkRedirectTo) === 'true'\n );\n};\n\nexport const setHeader = <T extends Response>(res: T, name: string, val: string): T => {\n res.headers.set(name, val);\n return res;\n};\n","import { createPathMatcher, type PathMatcherParam } from '@clerk/shared/pathMatcher';\n\nexport type RouteMatcherParam = PathMatcherParam;\n\n/**\n * Returns a function that accepts a `Request` object and returns whether the request matches the list of\n * predefined routes that can be passed in as the first argument.\n *\n * You can use glob patterns to match multiple routes or a function to match against the request object.\n * Path patterns and regular expressions are supported, for example: `['/foo', '/bar(.*)'] or `[/^\\/foo\\/.*$/]`\n * For more information, see: https://clerk.com/docs\n */\nexport const createRouteMatcher = (routes: RouteMatcherParam) => {\n const matcher = createPathMatcher(routes);\n return (req: Request) => matcher(new URL(req.url).pathname);\n};\n"],"mappings":";AAKA,SAAS,aAAa,qBAAAA,0BAAyB;;;ACG/C;AAAA,EACE;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAAAC,mCAAkC;AAC3C,SAAS,uCAAuC;AAChD,SAAS,qBAAqB;AAE9B,SAAS,uBAAuB;AAGhC,SAAS,wBAAwB;;;ACxBjC,SAAS,kBAAkB,wBAAwB;;;ACAnD,SAAS,gBAAgB;AASzB,SAAS,iBAAiB,YAA+B,iBAAsD;AAC7G,QAAM,SAAS,YAAY,kBAAkB,gBAAgB,SAAS;AAEtE,MAAI,QAAQ,SAAS,KAAK;AACxB,WAAO,OAAO,QAAQ,IAAI,UAAU;AAAA,EACtC;AAEA,SAAO,YAAY,IAAI,UAAU;AACnC;AAKA,SAAS,WAAW,SAA0B;AAC5C,SAAO;AAAA,IACL,QAAQ,iBAAiB,uBAAuB,OAAO;AAAA,IACvD,aAAa,iBAAiB,6BAA6B,OAAO,MAAM;AAAA,IACxE,UAAU,iBAAiB,0BAA0B,OAAO;AAAA,IAC5D,IAAI,iBAAiB,gCAAgC,OAAO;AAAA,IAC5D,IAAI,iBAAiB,oBAAoB,OAAO;AAAA,IAChD,kBAAkB,iBAAiB,4BAA4B,OAAO;AAAA,IACtE,WAAW,iBAAiB,4BAA4B,OAAO;AAAA,IAC/D,WAAW,iBAAiB,4BAA4B,OAAO;AAAA,IAC/D,YAAY,iBAAiB,uBAAuB,OAAO;AAAA,IAC3D,YAAY,iBAAiB,uBAAuB,OAAO;AAAA,IAC3D,gBAAgB,iBAAiB,2BAA2B,OAAO;AAAA,IACnE,gBAAgB,iBAAiB,2BAA2B,OAAO;AAAA,IACnE,YAAY,iBAAiB,qBAAqB,OAAO;AAAA,IACzD,QAAQ,iBAAiB,iBAAiB,OAAO;AAAA,IACjD,mBAAmB,SAAS,iBAAiB,mCAAmC,OAAO,CAAC;AAAA,IACxF,gBAAgB,SAAS,iBAAiB,gCAAgC,OAAO,CAAC;AAAA,EACpF;AACF;AASA,SAAS,iBAAiB,SAA0B;AAClD,SAAO;AAAA,IACL,QAAQ,iBAAiB,uBAAuB,OAAO;AAAA,IACvD,aAAa,iBAAiB,6BAA6B,OAAO,MAAM;AAAA,IACxE,UAAU,iBAAiB,0BAA0B,OAAO;AAAA,IAC5D,WAAW,iBAAiB,4BAA4B,OAAO;AAAA,IAC/D,WAAW,iBAAiB,4BAA4B,OAAO;AAAA,EACjE;AACF;;;ADrDA,SAAS,wBAAwB,QAA8B;AAE7D,QAAM,iBAAiB,WAAW,MAAM,EAAE;AAE1C,QAAM,WAAW,WAAW,MAAM,EAAE;AAEpC,QAAM,SAAS,WAAW,MAAM,EAAE;AAClC,QAAM,mBAAmB,iBAAiB;AAAA,IACxC,YAAY,WAAW,MAAM,EAAE;AAAA,IAC/B,gBAAgB,WAAW,MAAM,EAAE;AAAA,IACnC,gBAAgB,WAAW,MAAM,EAAE;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,mBAAmB,iBAAiB;AAAA,IACxC,YAAY,WAAW,MAAM,EAAE;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AAAA,iBACQ,gBAAgB;AAAA;AAAA;AAAA;AAAA,IAI7B,iBAAiB,+BAA+B,cAAc,MAAM,EAAE;AAAA,IACtE,WAAW,yBAAyB,QAAQ,MAAM,EAAE;AAAA,IACpD,SAAS,sBAAsB,MAAM,MAAM,EAAE;AAAA;AAAA,iBAEhC,gBAAgB;AAAA;AAAA;AAAA;AAAA,IAI7B,iBAAiB,+BAA+B,cAAc,MAAM,EAAE;AAAA,IACtE,WAAW,yBAAyB,QAAQ,MAAM,EAAE;AAAA,IACpD,SAAS,sBAAsB,MAAM,MAAM,EAAE;AAAA;AAAA;AAEjD;;;AE1CA,SAAS,yBAAyB;AAMlC,IAAM,+BAA6D,CAAC,SAAS,YAC3E,kBAAkB;AAAA,EAChB,WAAW,WAAW,OAAO,EAAE;AAAA,EAC/B,kBAAkB,WAAW,OAAO,EAAE;AAAA,EACtC,gBAAgB,WAAW,OAAO,EAAE;AAAA,EACpC,QAAQ,WAAW,OAAO,EAAE;AAAA,EAC5B,YAAY,WAAW,OAAO,EAAE;AAAA,EAChC,UAAU,WAAW,OAAO,EAAE;AAAA,EAC9B,QAAQ,WAAW,OAAO,EAAE;AAAA,EAC5B,aAAa,WAAW,OAAO,EAAE;AAAA,EACjC,WAAW,GAAG,cAAY,IAAI,oCAAe;AAAA,EAC7C,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,IAET,aAAa,YAAY,IAAI;AAAA,EAC/B;AAAA,EACA,WAAW;AAAA,IACT,UAAU,WAAW,OAAO,EAAE;AAAA,IAC9B,OAAO,WAAW,OAAO,EAAE;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,CAAC;AAEH,IAAM,cAAc,CAAC,YAAwB,6BAA6B,OAAO;;;AC1B1E,IAAM,oBAAoB,CAAC,YAAwB;AACxD,SAAO,YAAkC;AACvC,UAAM,EAAE,OAAO,IAAI,QAAQ,OAAO,KAAK;AAEvC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AAEA,WAAO,YAAY,OAAO,EAAE,MAAM,QAAQ,MAAM;AAAA,EAClD;AACF;;;ACbA,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB,6BAA6B;AAC3D,SAAS,kCAAkC;AASpC,IAAM,yBAAyB,CACpC,SACA,cACA,KACA,SACG;AACH,QAAM,WAAW,IAAI,QAAQ,IAAI,UAAU;AAC3C,QAAM,yBAAyB,IAAI,QAAQ,IAAI,UAAU,QAAQ,eAAe,MAAM;AAEtF,MACE,0BACA,CAAC,CAAC;AAAA,EAEF,2BAA2B,KAAK,aAAa,WAAW,OAAO,EAAE,EAAG,KACpE,aAAa,SAAS,cAAc,QAAQ,GAC5C;AACA,UAAM,QAAQ,aAAa,QAAQ,IAAI,mBAAmB,KAAK;AAC/D,UAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,UAAM,oBAAoB,sBAAsB,KAAK,KAAK;AAC1D,WAAO,QAAQ,SAAS,kBAAkB,MAAM,GAAG;AAAA,EACrD;AACA,SAAO;AACT;;;ACnCA,SAAS,aAAAC,kBAAiB;AAUnB,IAAM,aAAa,CAAC,QAAkB;AAC3C,SACE,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM,KACvD,IAAI,QAAQ,IAAIC,WAAU,QAAQ,eAAe,MAAM;AAE3D;AAEO,IAAM,YAAY,CAAqB,KAAQ,MAAc,QAAmB;AACrF,MAAI,QAAQ,IAAI,MAAM,GAAG;AACzB,SAAO;AACT;;;ANqBA,IAAM,qBAAqB;AAAA,EACzB,qBAAqB;AACvB;AA2BO,IAAM,kBAAmC,IAAI,SAAyB;AAC3E,QAAM,CAAC,SAAS,OAAO,IAAI,uBAAuB,IAAI;AAEtD,QAAM,kBAAmC,OAAO,SAAS,SAAS;AAEhE,QAAI,kBAAkB,OAAO,GAAG;AAC9B,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,eAAe,mBAAmB,QAAQ,OAAO;AAEvD,UAAM,eAAe,MAAM,YAAY,OAAO,EAAE;AAAA,MAC9C;AAAA,MACA,iCAAiC,cAAc,SAAS,OAAO;AAAA,IACjE;AAEA,UAAM,iBAAiB,aAAa,QAAQ,IAAIC,WAAU,QAAQ,QAAQ;AAC1E,QAAI,gBAAgB;AAClB,sCAAgC;AAAA,QAC9B;AAAA,QACA,qBAAqB,aAAa;AAAA,QAClC,gBAAgB,aAAa;AAAA,MAC/B,CAAC;AAED,YAAM,MAAM,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,SAAS,aAAa,QAAQ,CAAC;AAC7E,aAAO,yCAAyC,KAAK,YAAY;AAAA,IACnE,WAAW,aAAa,WAAW,WAAW,WAAW;AACvD,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AAEA,UAAM,eAAe,CAAC,SAAiC,aAAa,OAAO,IAAI;AAE/E,UAAM,mBAAmB,iCAAiC,YAAY;AAEtE,uBAAmB,cAAc,cAAc,SAAS,YAAY;AAMpE,UAAM,yBACJ,aAAa,EAAE,cAAc,UAAU,eAAe,aAAa,IAAI,oBAAoB,CAAC,CAAC;AAE/F,UAAM,cAAc,CAAC,SAAuB;AAC1C,YAAM,aAAa,8BAA8B;AAAA,QAC/C,YAAY,aAAa,EAAE,yBAAyB,MAAM,wBAAwB,CAAC;AAAA,QACnF,cAAc,MAAM;AAAA,MACtB,CAAC;AAED,UAAI,WAAW,cAAc,UAAU,cAAc;AACnD,eAAO,OAAO,OAAO,YAAY,EAAE,iBAAiB,CAAC;AAAA,MACvD;AAEA,aAAO;AAAA,IACT;AAEA,WAAO,iBAAiB,IAAI,wBAAwB,YAAY;AAI9D,UAAI;AACJ,UAAI;AACF,wBAAiB,MAAM,UAAU,aAAuB,SAAS,IAAI,KAAO,MAAM,KAAK;AAAA,MACzF,SAAS,GAAQ;AACf,wBAAgB,wBAAwB,GAAG,cAAc,cAAc,OAAO;AAAA,MAChF;AAEA,UAAI,WAAW,aAAa,GAAG;AAC7B,eAAO,uBAAuB,SAAS,cAAc,eAAe,OAAO;AAAA,MAC7E;AAEA,YAAM,WAAW,gBAAgB,QAAQ,QAAQ,aAAa;AAC9D,UAAI,aAAa,SAAS;AACxB,qBAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,mBAAS,QAAQ,OAAO,KAAK,KAAK;AAAA,QACpC,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,YAAwB;AACjD;AAAA;AAAA,IAEG,mBAAmB,WAAW,QAAQ;AAAA,IAEtC,oBAAoB,WAAW,QAAQ;AAAA;AAE5C;AAGA,IAAM,yBAAyB,CAAC,SAAoB;AAClD,SAAO;AAAA,IACL,OAAO,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,IAAI;AAAA,KACzC,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAA,EACnF;AACF;AAKO,IAAM,mCAAmC,CAC9C,cACA,SACA,YACuC;AACvC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,QAAQ,aAAa,WAAW,OAAO,EAAE;AAAA,IACpD,gBAAgB,QAAQ,kBAAkB,WAAW,OAAO,EAAE;AAAA,IAC9D,WAAW,QAAQ,aAAa,WAAW,OAAO,EAAE;AAAA,IACpD,WAAW,QAAQ,aAAa,WAAW,OAAO,EAAE;AAAA,IACpD,GAAG,0BAA0B,cAAc,SAAS,OAAO;AAAA,IAC3D,cAAc;AAAA,EAChB;AACF;AAGO,IAAM,2CAA2C,CAAC,KAAe,iBAAyC;AAC/G,MAAI,aAAa,SAAS;AACxB,QAAI,QAAQ,IAAIA,WAAU,QAAQ,aAAa,mBAAmB,aAAa,OAAO,CAAC;AAAA,EACzF;AACA,MAAI,aAAa,QAAQ;AACvB,QAAI,QAAQ,IAAIA,WAAU,QAAQ,YAAY,mBAAmB,aAAa,MAAM,CAAC;AAAA,EACvF;AACA,MAAI,aAAa,QAAQ;AACvB,QAAI,QAAQ,IAAIA,WAAU,QAAQ,YAAY,mBAAmB,aAAa,MAAM,CAAC;AAAA,EACvF;AACA,SAAO;AACT;AAGO,IAAM,4BAA4B,CACvC,cACA,MACA,YACG;AACH,QAAM,6BAA6B;AAAA,IACjC,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW,OAAO,EAAE;AAAA,EACtB;AAEA,MAAI;AACJ,MAAI,CAAC,CAAC,8BAA8B,CAAC,cAAc,0BAA0B,GAAG;AAC9E,eAAW,IAAI,IAAI,4BAA4B,aAAa,QAAQ,EAAE,SAAS;AAAA,EACjF,OAAO;AACL,eAAW;AAAA,EACb;AAEA,QAAM,cAAc,gBAAgB,KAAK,aAAa,IAAI,IAAI,aAAa,GAAG,GAAG,WAAW,OAAO,EAAE,WAAW;AAChH,QAAM,SAAS,gBAAgB,KAAK,QAAQ,IAAI,IAAI,aAAa,GAAG,GAAG,WAAW,OAAO,EAAE,MAAM;AACjG,QAAM,YAAY,MAAM,aAAa,WAAW,OAAO,EAAE;AAEzD,MAAI,eAAe,CAAC,YAAY,CAAC,QAAQ;AACvC,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,MACE,eACA,CAAC,cAAc,SAAS;AAAA,EAExBC,4BAA2B,KAAK,aAAa,WAAW,OAAO,EAAE,EAAG,GACpE;AACA,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU9B,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUrC,SAAS,mBACP,cACA,cACA,SACA,cACA;AACA,QAAM,EAAE,QAAQ,SAAS,QAAQ,MAAM,IAAI;AAC3C,UAAQ,OAAO,YAAY;AAC3B,UAAQ,OAAO,aAAa;AAC5B,UAAQ,OAAO,cAAc;AAC7B,UAAQ,OAAO,aAAa;AAC5B,UAAQ,OAAO,QAAQ,CAAC,EAAE,cAAc,wBAAwB,IAAiB,CAAC,MAAM;AACtF,UAAM,aAAa,8BAA8B;AAAA,MAC/C,YAAY,aAAa,EAAE,wBAAwB,CAAC;AAAA,MACpD;AAAA,IACF,CAAC;AAED,QAAI,WAAW,cAAc,UAAU,cAAc;AACnD,YAAM,WAAW,aAAa;AAE9B,YAAM,mBAA0C,CAAC,OAAO,CAAC,MAAM;AAC7D,cAAM,kBACJ,aAAa,SAAS,aAAa,IAAID,WAAU,gBAAgB,UAAU,KAC3E,aAAa,QAAQ,IAAIA,WAAU,QAAQ,UAAU;AAEvD,eAAO,eAAe;AAAA,UACpB;AAAA,UACA;AAAA,UACA,SAAS,SAAS,SAAS;AAAA;AAAA,UAE3B,gBAAgB,WAAW,OAAO,EAAE;AAAA,UACpC,WAAW,aAAa;AAAA,UACxB,WAAW,aAAa;AAAA,UACxB,eAAe,aAAa,OAAO,GAAG;AAAA,QACxC,CAAC,EAAE,iBAAiB;AAAA,UAClB,eAAe,KAAK,kBAAkB,OAAO,KAAK,KAAK,iBAAiB,SAAS,SAAS;AAAA,QAC5F,CAAC;AAAA,MACH;AAEA,aAAO,OAAO,OAAO,YAAY,EAAE,iBAAiB,CAAC;AAAA,IACvD;AAEA,WAAO;AAAA,EACT;AAEA,UAAQ,OAAO,cAAc,kBAAkB,OAAO;AACxD;AAQA,SAAS,wBAAwB,OAAmB,YAAwB;AAC1E,SAAO,MAAM,UAAU,CAAC,GAAG,MAAM,WAAW,MAAM,CAAC,OAAO,MAAM,UAAU,MAAM,IAAI,CAAC,CAAC,CAAC;AACzF;AAEA,SAAS,gBAAgB,QAA8B,KAAyB;AAK9E,MAAI,IAAI,QAAQ,IAAI,cAAc,MAAM,aAAa;AACnD,UAAM,UAAU,IAAI,YAAY;AAChC,UAAM,iBAAiB,QAAQ,OAAO,SAAS;AAC/C,UAAM,iBAAiB,QAAQ;AAAA,MAC7B,6DAA6D,KAAK,UAAU,OAAO,KAAK,CAAC,CAAC;AAAA;AAAA,IAC5F;AACA,UAAM,wBAAwB,QAAQ;AAAA,MACpC,kEAAkE,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAAA;AAAA,IAC5G;AACA,UAAM,gBAAgB,QAAQ,OAAO,wBAAwB,MAAM,CAAC;AAGpE,UAAM,SAAS,IAAI,KAAM;AAAA,MACvB,IAAI,gBAAgB;AAAA,QAClB,UAAU,OAAO,YAAY;AAC3B,gBAAM,QAAQ,wBAAwB,OAAO,cAAc;AAC3D,gBAAM,wBAAwB,UAAU;AAKxC,cAAI,uBAAuB;AACzB,uBAAW,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC;AACxC,uBAAW,QAAQ,cAAc;AACjC,uBAAW,QAAQ,qBAAqB;AAExC,uBAAW,QAAQ,aAAa;AAEhC,uBAAW,QAAQ,cAAc;AACjC,uBAAW,QAAQ,MAAM,MAAM,QAAQ,eAAe,MAAM,CAAC;AAAA,UAC/D,OAAO;AACL,uBAAW,QAAQ,KAAK;AAAA,UAC1B;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,mBAAmB,IAAI,SAAS,QAAQ;AAAA,MAC5C,QAAQ,IAAI;AAAA,MACZ,YAAY,IAAI;AAAA,MAChB,SAAS,IAAI;AAAA,IACf,CAAC;AAED,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,IAAM,kBAAkB,CAAC,QAAsB;AAC7C,QAAM,MAAM,IAAI,SAAS,MAAM;AAAA,IAC7B,QAAQ;AAAA,EACV,CAAC;AAKD,YAAU,KAAKA,WAAU,QAAQ,iBAAiB,MAAM;AACxD,SAAO,UAAU,KAAK,YAAY,eAAe,MAAM,IAAI,OAAO,GAAG;AACvE;AAEA,IAAM,mCAAmC,CACvC,iBACsD;AACtD,SAAO,CAAC,OAAO,CAAC,MAAM;AACpB,UAAM,MAAM,IAAI,MAAM,mBAAmB,mBAAmB;AAC5D,QAAI,gBAAgB,KAAK,kBAAkB,OAAO,KAAK,KAAK,iBAAiB,aAAa,SAAS,SAAS;AAC5G,UAAM;AAAA,EACR;AACF;AASA,IAAM,0BAA0B,CAC9B,GACA,cACA,cACA,YACa;AACb,UAAQ,EAAE,SAAS;AAAA,IACjB,KAAK,mBAAmB;AACtB,aAAO,eAAe;AAAA,QACpB;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,WAAW,aAAa;AAAA,QACxB,WAAW,aAAa;AAAA;AAAA,QAExB,gBAAgB,WAAW,OAAO,EAAE;AAAA,QACpC,eAAe,aAAa,OAAO,GAAG;AAAA,MACxC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,CAAC;AAAA,IACxD;AACE,YAAM;AAAA,EACV;AACF;;;AO5aA,SAAS,yBAAgD;AAYlD,IAAM,qBAAqB,CAAC,WAA8B;AAC/D,QAAM,UAAU,kBAAkB,MAAM;AACxC,SAAO,CAAC,QAAiB,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE,QAAQ;AAC5D;","names":["createClerkClient","constants","isDevelopmentFromSecretKey","constants","constants","constants","isDevelopmentFromSecretKey"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server/index.ts","../../src/server/clerk-middleware.ts","../../src/server/build-clerk-hotload-script.ts","../../src/server/get-safe-env.ts","../../src/server/clerk-client.ts","../../src/server/current-user.ts","../../src/server/server-redirect-with-auth.ts","../../src/server/utils.ts","../../src/server/route-matcher.ts"],"sourcesContent":["import type { SignedInAuthObject, SignedOutAuthObject } from '@clerk/backend/internal';\n\n/**\n * Re-export utilities\n */\nexport { verifyToken, createClerkClient } from '@clerk/backend';\n\n/**\n * Re-export types\n */\nexport type {\n OrganizationMembershipRole,\n // Webhook event types\n WebhookEvent,\n WebhookEventType,\n // Resources\n AllowlistIdentifier,\n Client,\n EmailAddress,\n ExternalAccount,\n Invitation,\n OauthAccessToken,\n Organization,\n OrganizationDomain,\n OrganizationInvitation,\n OrganizationMembership,\n OrganizationMembershipPublicUserData,\n PhoneNumber,\n Session,\n SignInToken,\n SMSMessage,\n Token,\n User,\n} from '@clerk/backend';\n\nexport { clerkMiddleware } from './clerk-middleware';\nexport { createRouteMatcher } from './route-matcher';\nexport { clerkClient } from './clerk-client';\n\n/**\n * @deprecated Use `AuthObject` instead. This type only supports session auth.\n * `context.locals.auth()` can now return an `AuthObject` with session and machine auth support.\n */\ntype GetAuthReturn = SignedInAuthObject | SignedOutAuthObject;\nexport type { GetAuthReturn };\n\n/**\n * This will be used to define types of Astro.Locals inside `env.d.ts`\n */\nexport type { AuthFn } from './types';\n","import type { AuthObject, ClerkClient } from '@clerk/backend';\nimport type {\n AuthenticateRequestOptions,\n AuthOptions,\n ClerkRequest,\n RedirectFun,\n RequestState,\n} from '@clerk/backend/internal';\nimport {\n AuthStatus,\n constants,\n createClerkRequest,\n createRedirect,\n getAuthObjectForAcceptedToken,\n signedOutAuthObject,\n TokenType,\n} from '@clerk/backend/internal';\nimport { isDevelopmentFromSecretKey } from '@clerk/shared/keys';\nimport { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler';\nimport { isHttpOrHttps } from '@clerk/shared/proxy';\nimport type { PendingSessionOptions } from '@clerk/shared/types';\nimport { handleValueOrFn } from '@clerk/shared/utils';\nimport type { APIContext } from 'astro';\n\nimport { authAsyncStorage } from '#async-local-storage';\n\nimport { buildClerkHotloadScript } from './build-clerk-hotload-script';\nimport { clerkClient } from './clerk-client';\nimport { createCurrentUser } from './current-user';\nimport { getClientSafeEnv, getSafeEnv } from './get-safe-env';\nimport { serverRedirectWithAuth } from './server-redirect-with-auth';\nimport type {\n AstroMiddleware,\n AstroMiddlewareContextParam,\n AstroMiddlewareNextParam,\n AstroMiddlewareReturn,\n AuthFn,\n SessionAuthObjectWithRedirect,\n} from './types';\nimport { isRedirect, setHeader } from './utils';\n\nconst CONTROL_FLOW_ERROR = {\n REDIRECT_TO_SIGN_IN: 'CLERK_PROTECT_REDIRECT_TO_SIGN_IN',\n};\n\ntype ClerkAstroMiddlewareHandler = (\n auth: AuthFn,\n context: AstroMiddlewareContextParam,\n next: AstroMiddlewareNextParam,\n) => AstroMiddlewareReturn | undefined;\n\ntype ClerkAstroMiddlewareOptions = AuthenticateRequestOptions;\n\n/**\n * Middleware for Astro that handles authentication and authorization with Clerk.\n */\ninterface ClerkMiddleware {\n /**\n * @example\n * export default clerkMiddleware((auth, context, next) => { ... }, options);\n */\n (handler: ClerkAstroMiddlewareHandler, options?: ClerkAstroMiddlewareOptions): AstroMiddleware;\n\n /**\n * @example\n * export default clerkMiddleware(options);\n */\n (options?: ClerkAstroMiddlewareOptions): AstroMiddleware;\n}\n\nexport const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): any => {\n const [handler, options] = parseHandlerAndOptions(args);\n\n const astroMiddleware: AstroMiddleware = async (context, next) => {\n // if the current page is prerendered, do nothing\n if (isPrerenderedPage(context)) {\n return next();\n }\n\n const clerkRequest = createClerkRequest(context.request);\n\n const requestState = await clerkClient(context).authenticateRequest(\n clerkRequest,\n createAuthenticateRequestOptions(clerkRequest, options, context),\n );\n\n const locationHeader = requestState.headers.get(constants.Headers.Location);\n if (locationHeader) {\n handleNetlifyCacheInDevInstance({\n locationHeader,\n requestStateHeaders: requestState.headers,\n publishableKey: requestState.publishableKey,\n });\n\n const res = new Response(null, { status: 307, headers: requestState.headers });\n return decorateResponseWithObservabilityHeaders(res, requestState);\n } else if (requestState.status === AuthStatus.Handshake) {\n throw new Error('Clerk: handshake status without redirect');\n }\n\n const authObjectFn = (opts?: PendingSessionOptions) => requestState.toAuth(opts);\n\n const redirectToSignIn = createMiddlewareRedirectToSignIn(clerkRequest);\n\n decorateAstroLocal(clerkRequest, authObjectFn, context, requestState);\n\n /**\n * ALS is crucial for guaranteeing SSR in UI frameworks like React.\n * This currently powers the `useAuth()` React hook and any other hook or Component that depends on it.\n */\n const asyncStorageAuthObject =\n authObjectFn().tokenType === TokenType.SessionToken ? authObjectFn() : signedOutAuthObject({});\n\n const authHandler = (opts?: AuthOptions) => {\n const authObject = getAuthObjectForAcceptedToken({\n authObject: authObjectFn({ treatPendingAsSignedOut: opts?.treatPendingAsSignedOut }),\n acceptsToken: opts?.acceptsToken,\n });\n\n if (authObject.tokenType === TokenType.SessionToken) {\n return Object.assign(authObject, { redirectToSignIn });\n }\n\n return authObject;\n };\n\n return authAsyncStorage.run(asyncStorageAuthObject, async () => {\n /**\n * Generate SSR page\n */\n let handlerResult: Response;\n try {\n handlerResult = (await handler?.(authHandler as AuthFn, context, next)) || (await next());\n } catch (e: any) {\n handlerResult = handleControlFlowErrors(e, clerkRequest, requestState, context);\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(context, clerkRequest, handlerResult, options);\n }\n\n const response = decorateRequest(context.locals, handlerResult);\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n response.headers.append(key, value);\n });\n }\n\n return response;\n });\n };\n\n return astroMiddleware;\n};\n\nconst isPrerenderedPage = (context: APIContext) => {\n return (\n // for Astro v5\n ('isPrerendered' in context && context.isPrerendered) ||\n // for Astro v4\n ('_isPrerendered' in context && context._isPrerendered)\n );\n};\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nconst parseHandlerAndOptions = (args: unknown[]) => {\n return [\n typeof args[0] === 'function' ? args[0] : undefined,\n (args.length === 2 ? args[1] : typeof args[0] === 'function' ? {} : args[0]) || {},\n ] as [ClerkAstroMiddlewareHandler | undefined, ClerkAstroMiddlewareOptions];\n};\n\ntype AuthenticateRequest = Pick<ClerkClient, 'authenticateRequest'>['authenticateRequest'];\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nexport const createAuthenticateRequestOptions = (\n clerkRequest: ClerkRequest,\n options: ClerkAstroMiddlewareOptions,\n context: AstroMiddlewareContextParam,\n): Parameters<AuthenticateRequest>[1] => {\n return {\n ...options,\n secretKey: options.secretKey || getSafeEnv(context).sk,\n publishableKey: options.publishableKey || getSafeEnv(context).pk,\n signInUrl: options.signInUrl || getSafeEnv(context).signInUrl,\n signUpUrl: options.signUpUrl || getSafeEnv(context).signUpUrl,\n ...handleMultiDomainAndProxy(clerkRequest, options, context),\n acceptsToken: 'any',\n };\n};\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nexport const decorateResponseWithObservabilityHeaders = (res: Response, requestState: RequestState): Response => {\n if (requestState.message) {\n res.headers.set(constants.Headers.AuthMessage, encodeURIComponent(requestState.message));\n }\n if (requestState.reason) {\n res.headers.set(constants.Headers.AuthReason, encodeURIComponent(requestState.reason));\n }\n if (requestState.status) {\n res.headers.set(constants.Headers.AuthStatus, encodeURIComponent(requestState.status));\n }\n return res;\n};\n\n// TODO-SHARED: Duplicate from '@clerk/nextjs'\nexport const handleMultiDomainAndProxy = (\n clerkRequest: ClerkRequest,\n opts: AuthenticateRequestOptions,\n context: AstroMiddlewareContextParam,\n) => {\n const relativeOrAbsoluteProxyUrl = handleValueOrFn(\n opts?.proxyUrl,\n clerkRequest.clerkUrl,\n getSafeEnv(context).proxyUrl,\n );\n\n let proxyUrl;\n if (!!relativeOrAbsoluteProxyUrl && !isHttpOrHttps(relativeOrAbsoluteProxyUrl)) {\n proxyUrl = new URL(relativeOrAbsoluteProxyUrl, clerkRequest.clerkUrl).toString();\n } else {\n proxyUrl = relativeOrAbsoluteProxyUrl;\n }\n\n const isSatellite = handleValueOrFn(opts.isSatellite, new URL(clerkRequest.url), getSafeEnv(context).isSatellite);\n const domain = handleValueOrFn(opts.domain, new URL(clerkRequest.url), getSafeEnv(context).domain);\n const signInUrl = opts?.signInUrl || getSafeEnv(context).signInUrl;\n\n if (isSatellite && !proxyUrl && !domain) {\n throw new Error(missingDomainAndProxy);\n }\n\n if (\n isSatellite &&\n !isHttpOrHttps(signInUrl) &&\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n isDevelopmentFromSecretKey(opts.secretKey || getSafeEnv(context).sk!)\n ) {\n throw new Error(missingSignInUrlInDev);\n }\n\n return {\n proxyUrl,\n isSatellite,\n domain,\n };\n};\n\nexport const missingDomainAndProxy = `\nMissing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl.\n\n1) With middleware\n e.g. export default clerkMiddleware({domain:'YOUR_DOMAIN',isSatellite:true});\n2) With environment variables e.g.\n PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN'\n PUBLIC_CLERK_IS_SATELLITE='true'\n `;\n\nexport const missingSignInUrlInDev = `\nInvalid signInUrl. A satellite application requires a signInUrl for development instances.\nCheck if signInUrl is missing from your configuration or if it is not an absolute URL\n\n1) With middleware\n e.g. export default clerkMiddleware({signInUrl:'SOME_URL', isSatellite:true});\n2) With environment variables e.g.\n PUBLIC_CLERK_SIGN_IN_URL='SOME_URL'\n PUBLIC_CLERK_IS_SATELLITE='true'`;\n\nfunction decorateAstroLocal(\n clerkRequest: ClerkRequest,\n authObjectFn: (opts?: PendingSessionOptions) => AuthObject,\n context: APIContext,\n requestState: RequestState,\n) {\n const { reason, message, status, token } = requestState;\n context.locals.authToken = token;\n context.locals.authStatus = status;\n context.locals.authMessage = message;\n context.locals.authReason = reason;\n context.locals.auth = (({ acceptsToken, treatPendingAsSignedOut }: AuthOptions = {}) => {\n const authObject = getAuthObjectForAcceptedToken({\n authObject: authObjectFn({ treatPendingAsSignedOut }),\n acceptsToken,\n });\n\n if (authObject.tokenType === TokenType.SessionToken) {\n const clerkUrl = clerkRequest.clerkUrl;\n\n const redirectToSignIn: RedirectFun<Response> = (opts = {}) => {\n const devBrowserToken =\n clerkRequest.clerkUrl.searchParams.get(constants.QueryParameters.DevBrowser) ||\n clerkRequest.cookies.get(constants.Cookies.DevBrowser);\n\n return createRedirect({\n redirectAdapter,\n devBrowserToken: devBrowserToken,\n baseUrl: clerkUrl.toString(),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n publishableKey: getSafeEnv(context).pk!,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n sessionStatus: requestState.toAuth()?.sessionStatus,\n }).redirectToSignIn({\n returnBackUrl: opts.returnBackUrl === null ? '' : opts.returnBackUrl || clerkUrl.toString(),\n });\n };\n\n return Object.assign(authObject, { redirectToSignIn });\n }\n\n return authObject;\n }) as AuthFn;\n\n context.locals.currentUser = createCurrentUser(context);\n}\n\n/**\n * Find the index of the closing head tag in the chunk.\n *\n * Note: This implementation uses a simple approach that works for most of our\n * current use cases.\n */\nfunction findClosingHeadTagIndex(chunk: Uint8Array, endHeadTag: Uint8Array) {\n return chunk.findIndex((_, i) => endHeadTag.every((value, j) => value === chunk[i + j]));\n}\n\nfunction decorateRequest(locals: APIContext['locals'], res: Response): Response {\n /**\n * Populate every page with the authObject. This allows for SSR to work properly\n * without sucrificing DX and having developers wrap each page with a Layout that would handle this.\n */\n if (res.headers.get('content-type') === 'text/html') {\n const encoder = new TextEncoder();\n const closingHeadTag = encoder.encode('</head>');\n const clerkAstroData = encoder.encode(\n `<script id=\"__CLERK_ASTRO_DATA__\" type=\"application/json\">${JSON.stringify(locals.auth())}</script>\\n`,\n );\n const clerkSafeEnvVariables = encoder.encode(\n `<script id=\"__CLERK_ASTRO_SAFE_VARS__\" type=\"application/json\">${JSON.stringify(getClientSafeEnv(locals))}</script>\\n`,\n );\n const hotloadScript = encoder.encode(buildClerkHotloadScript(locals));\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const stream = res.body!.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n const index = findClosingHeadTagIndex(chunk, closingHeadTag);\n const isClosingHeadTagFound = index !== -1;\n\n /**\n * Hijack html response to position `__CLERK_ASTRO_DATA__` before the closing `head` html tag\n */\n if (isClosingHeadTagFound) {\n controller.enqueue(chunk.slice(0, index));\n controller.enqueue(clerkAstroData);\n controller.enqueue(clerkSafeEnvVariables);\n\n controller.enqueue(hotloadScript);\n\n controller.enqueue(closingHeadTag);\n controller.enqueue(chunk.slice(index + closingHeadTag.length));\n } else {\n controller.enqueue(chunk);\n }\n },\n }),\n );\n\n const modifiedResponse = new Response(stream, {\n status: res.status,\n statusText: res.statusText,\n headers: res.headers,\n });\n\n return modifiedResponse;\n }\n return res;\n}\n\nconst redirectAdapter = (url: string | URL) => {\n const res = new Response(null, {\n status: 307,\n });\n\n /**\n * Hint to clerk to add cookie with db jwt\n */\n setHeader(res, constants.Headers.ClerkRedirectTo, 'true');\n return setHeader(res, 'Location', url instanceof URL ? url.href : url);\n};\n\nconst createMiddlewareRedirectToSignIn = (\n clerkRequest: ClerkRequest,\n): SessionAuthObjectWithRedirect['redirectToSignIn'] => {\n return (opts = {}) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN) as any;\n err.returnBackUrl = opts.returnBackUrl === null ? '' : opts.returnBackUrl || clerkRequest.clerkUrl.toString();\n throw err;\n };\n};\n\n// Handle errors thrown by redirectToSignIn() calls,\n// as we want to align the APIs between middleware, pages and route handlers\n// Normally, middleware requires to explicitly return a response, but we want to\n// avoid discrepancies between the APIs as it's easy to miss the `return` statement\n// especially when copy-pasting code from one place to another.\n// This function handles the known errors thrown by the APIs described above,\n// and returns the appropriate response.\nconst handleControlFlowErrors = (\n e: any,\n clerkRequest: ClerkRequest,\n requestState: RequestState,\n context: AstroMiddlewareContextParam,\n): Response => {\n switch (e.message) {\n case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:\n return createRedirect({\n redirectAdapter,\n baseUrl: clerkRequest.clerkUrl,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n publishableKey: getSafeEnv(context).pk!,\n sessionStatus: requestState.toAuth()?.sessionStatus,\n }).redirectToSignIn({ returnBackUrl: e.returnBackUrl });\n default:\n throw e;\n }\n};\n","import { clerkJsScriptUrl, clerkUiScriptUrl } from '@clerk/shared/loadClerkJsScript';\nimport type { APIContext } from 'astro';\n\nimport { getSafeEnv } from './get-safe-env';\n\nfunction buildClerkHotloadScript(locals: APIContext['locals']) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const publishableKey = getSafeEnv(locals).pk!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const proxyUrl = getSafeEnv(locals).proxyUrl!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const domain = getSafeEnv(locals).domain!;\n const clerkJsScriptSrc = clerkJsScriptUrl({\n clerkJSUrl: getSafeEnv(locals).clerkJsUrl,\n clerkJSVariant: getSafeEnv(locals).clerkJsVariant,\n clerkJSVersion: getSafeEnv(locals).clerkJsVersion,\n domain,\n proxyUrl,\n publishableKey,\n });\n const clerkUiScriptSrc = clerkUiScriptUrl({\n clerkUiUrl: getSafeEnv(locals).clerkUiUrl,\n domain,\n proxyUrl,\n publishableKey,\n });\n return `\n <script src=\"${clerkJsScriptSrc}\"\n data-clerk-js-script\n async\n crossOrigin='anonymous'\n ${publishableKey ? `data-clerk-publishable-key=\"${publishableKey}\"` : ``}\n ${proxyUrl ? `data-clerk-proxy-url=\"${proxyUrl}\"` : ``}\n ${domain ? `data-clerk-domain=\"${domain}\"` : ``}\n ></script>\n <script src=\"${clerkUiScriptSrc}\"\n data-clerk-ui-script\n async\n crossOrigin='anonymous'\n ${publishableKey ? `data-clerk-publishable-key=\"${publishableKey}\"` : ``}\n ${proxyUrl ? `data-clerk-proxy-url=\"${proxyUrl}\"` : ``}\n ${domain ? `data-clerk-domain=\"${domain}\"` : ``}\n ></script>\\n`;\n}\n\nexport { buildClerkHotloadScript };\n","import { isTruthy } from '@clerk/shared/underscore';\nimport type { APIContext } from 'astro';\n\ntype ContextOrLocals = APIContext | APIContext['locals'];\n\n/**\n * @internal\n * Isomorphic handler for reading environment variables defined from Vite or are injected in the request context (CF Pages)\n */\nfunction getContextEnvVar(envVarName: keyof InternalEnv, contextOrLocals: ContextOrLocals): string | undefined {\n const locals = 'locals' in contextOrLocals ? contextOrLocals.locals : contextOrLocals;\n\n if (locals?.runtime?.env) {\n return locals.runtime.env[envVarName];\n }\n\n return import.meta.env[envVarName];\n}\n\n/**\n * @internal\n */\nfunction getSafeEnv(context: ContextOrLocals) {\n return {\n domain: getContextEnvVar('PUBLIC_CLERK_DOMAIN', context),\n isSatellite: getContextEnvVar('PUBLIC_CLERK_IS_SATELLITE', context) === 'true',\n proxyUrl: getContextEnvVar('PUBLIC_CLERK_PROXY_URL', context),\n pk: getContextEnvVar('PUBLIC_CLERK_PUBLISHABLE_KEY', context),\n sk: getContextEnvVar('CLERK_SECRET_KEY', context),\n machineSecretKey: getContextEnvVar('CLERK_MACHINE_SECRET_KEY', context),\n signInUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_IN_URL', context),\n signUpUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_UP_URL', context),\n clerkJsUrl: getContextEnvVar('PUBLIC_CLERK_JS_URL', context),\n clerkUiUrl: getContextEnvVar('PUBLIC_CLERK_UI_URL', context),\n clerkJsVariant: getContextEnvVar('PUBLIC_CLERK_JS_VARIANT', context) as 'headless' | '' | undefined,\n clerkJsVersion: getContextEnvVar('PUBLIC_CLERK_JS_VERSION', context),\n apiVersion: getContextEnvVar('CLERK_API_VERSION', context),\n apiUrl: getContextEnvVar('CLERK_API_URL', context),\n telemetryDisabled: isTruthy(getContextEnvVar('PUBLIC_CLERK_TELEMETRY_DISABLED', context)),\n telemetryDebug: isTruthy(getContextEnvVar('PUBLIC_CLERK_TELEMETRY_DEBUG', context)),\n };\n}\n\n/**\n * @internal\n * This should be used in order to pass environment variables from the server safely to the client.\n * When running an application with `wrangler pages dev` client side environment variables are not attached to `import.meta.env.*`\n * This is not the case when deploying to cloudflare pages directly\n * This is a way to get around it.\n */\nfunction getClientSafeEnv(context: ContextOrLocals) {\n return {\n domain: getContextEnvVar('PUBLIC_CLERK_DOMAIN', context),\n isSatellite: getContextEnvVar('PUBLIC_CLERK_IS_SATELLITE', context) === 'true',\n proxyUrl: getContextEnvVar('PUBLIC_CLERK_PROXY_URL', context),\n signInUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_IN_URL', context),\n signUpUrl: getContextEnvVar('PUBLIC_CLERK_SIGN_UP_URL', context),\n };\n}\n\nexport { getSafeEnv, getClientSafeEnv };\n","import type { ClerkClient, ClerkOptions } from '@clerk/backend';\nimport { createClerkClient } from '@clerk/backend';\nimport type { APIContext } from 'astro';\n\nimport { getSafeEnv } from './get-safe-env';\n\ntype CreateClerkClientWithOptions = (context: APIContext, options?: ClerkOptions) => ClerkClient;\nconst createClerkClientWithOptions: CreateClerkClientWithOptions = (context, options) =>\n createClerkClient({\n secretKey: getSafeEnv(context).sk,\n machineSecretKey: getSafeEnv(context).machineSecretKey,\n publishableKey: getSafeEnv(context).pk,\n apiUrl: getSafeEnv(context).apiUrl,\n apiVersion: getSafeEnv(context).apiVersion,\n proxyUrl: getSafeEnv(context).proxyUrl,\n domain: getSafeEnv(context).domain,\n isSatellite: getSafeEnv(context).isSatellite,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n sdkMetadata: {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n environment: import.meta.env.MODE,\n },\n telemetry: {\n disabled: getSafeEnv(context).telemetryDisabled,\n debug: getSafeEnv(context).telemetryDebug,\n },\n ...options,\n });\n\nconst clerkClient = (context: APIContext) => createClerkClientWithOptions(context);\n\nexport { clerkClient };\n","import type { User } from '@clerk/backend';\nimport type { APIContext } from 'astro';\n\nimport { clerkClient } from './clerk-client';\n\nexport const createCurrentUser = (context: APIContext) => {\n return async (): Promise<User | null> => {\n const { userId } = context.locals.auth();\n\n if (!userId) {\n return null;\n }\n\n return clerkClient(context).users.getUser(userId);\n };\n};\n","// Middleware runs on the server side, before clerk-js is loaded, that's why we need Cookies.\nimport type { AuthenticateRequestOptions, ClerkRequest } from '@clerk/backend/internal';\nimport { constants } from '@clerk/backend/internal';\nimport { DEV_BROWSER_JWT_KEY, setDevBrowserJWTInURL } from '@clerk/shared/devBrowser';\nimport { isDevelopmentFromSecretKey } from '@clerk/shared/keys';\n\nimport { getSafeEnv } from './get-safe-env';\nimport type { AstroMiddlewareContextParam } from './types';\n\n// TODO-SHARED: This exists in @clerk/nextjs\n/**\n * Grabs the dev browser JWT from cookies and appends it to the redirect URL when redirecting to cross-origin.\n */\nexport const serverRedirectWithAuth = (\n context: AstroMiddlewareContextParam,\n clerkRequest: ClerkRequest,\n res: Response,\n opts: AuthenticateRequestOptions,\n) => {\n const location = res.headers.get('location');\n const shouldAppendDevBrowser = res.headers.get(constants.Headers.ClerkRedirectTo) === 'true';\n\n if (\n shouldAppendDevBrowser &&\n !!location &&\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n isDevelopmentFromSecretKey(opts.secretKey || getSafeEnv(context).sk!) &&\n clerkRequest.clerkUrl.isCrossOrigin(location)\n ) {\n const dbJwt = clerkRequest.cookies.get(DEV_BROWSER_JWT_KEY) || '';\n const url = new URL(location);\n const urlWithDevBrowser = setDevBrowserJWTInURL(url, dbJwt);\n return context.redirect(urlWithDevBrowser.href, 307);\n }\n return res;\n};\n","import { constants } from '@clerk/backend/internal';\n\nexport function getAuthKeyFromRequest(req: Request, key: keyof typeof constants.Attributes): string | null | undefined {\n return getHeader(req, constants.Headers[key]);\n}\n\nfunction getHeader(req: Request, name: string) {\n return req.headers.get(name);\n}\n\nexport const isRedirect = (res: Response) => {\n return (\n [300, 301, 302, 303, 304, 307, 308].includes(res.status) ||\n res.headers.get(constants.Headers.ClerkRedirectTo) === 'true'\n );\n};\n\nexport const setHeader = <T extends Response>(res: T, name: string, val: string): T => {\n res.headers.set(name, val);\n return res;\n};\n","import { createPathMatcher, type PathMatcherParam } from '@clerk/shared/pathMatcher';\n\nexport type RouteMatcherParam = PathMatcherParam;\n\n/**\n * Returns a function that accepts a `Request` object and returns whether the request matches the list of\n * predefined routes that can be passed in as the first argument.\n *\n * You can use glob patterns to match multiple routes or a function to match against the request object.\n * Path patterns and regular expressions are supported, for example: `['/foo', '/bar(.*)'] or `[/^\\/foo\\/.*$/]`\n * For more information, see: https://clerk.com/docs\n */\nexport const createRouteMatcher = (routes: RouteMatcherParam) => {\n const matcher = createPathMatcher(routes);\n return (req: Request) => matcher(new URL(req.url).pathname);\n};\n"],"mappings":"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","names":["createClerkClient","constants","isDevelopmentFromSecretKey","constants","constants","constants","isDevelopmentFromSecretKey"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clerk/astro",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-snapshot.v20251203152900",
|
|
4
4
|
"description": "Clerk SDK for Astro",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"auth",
|
|
@@ -78,12 +78,12 @@
|
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"nanoid": "5.1.6",
|
|
80
80
|
"nanostores": "1.0.1",
|
|
81
|
-
"@clerk/backend": "^3.0.0-
|
|
82
|
-
"@clerk/shared": "^4.0.0-
|
|
81
|
+
"@clerk/backend": "^3.0.0-snapshot.v20251203152900",
|
|
82
|
+
"@clerk/shared": "^4.0.0-snapshot.v20251203152900"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"astro": "^5.15.3",
|
|
86
|
-
"@clerk/ui": "^1.0.0-
|
|
86
|
+
"@clerk/ui": "^1.0.0-snapshot.v20251203152900"
|
|
87
87
|
},
|
|
88
88
|
"peerDependencies": {
|
|
89
89
|
"astro": "^4.15.0 || ^5.0.0"
|