@clerk/astro 3.0.0-snapshot.v20251203203405 → 3.0.0-snapshot.v20251204175016
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/{chunk-YDEMALY2.js → chunk-FGVEGDHA.js} +4 -4
- package/dist/chunk-FGVEGDHA.js.map +1 -0
- package/dist/client/index.d.ts +10 -10
- package/dist/client/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +7 -7
- package/dist/react/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/{types-DmvfI00I.d.ts → types-B8S8zxjF.d.ts} +1 -1
- package/package.json +4 -4
- package/types.ts +1 -1
- package/dist/chunk-YDEMALY2.js.map +0 -1
|
@@ -94,10 +94,10 @@ async function createClerkInstanceInternal(options) {
|
|
|
94
94
|
if (!clerkJSInstance) {
|
|
95
95
|
const clerkPromise = loadClerkJsScript(options);
|
|
96
96
|
clerkUiCtor = options?.clerkUiCtor ? Promise.resolve(options.clerkUiCtor) : loadClerkUiScript(options).then(() => {
|
|
97
|
-
if (!window.
|
|
97
|
+
if (!window.__internal_ClerkUiCtor) {
|
|
98
98
|
throw new Error("Failed to download latest Clerk UI. Contact support@clerk.com.");
|
|
99
99
|
}
|
|
100
|
-
return window.
|
|
100
|
+
return window.__internal_ClerkUiCtor;
|
|
101
101
|
});
|
|
102
102
|
await clerkPromise;
|
|
103
103
|
if (!window.Clerk) {
|
|
@@ -139,11 +139,11 @@ function updateClerkOptions(options) {
|
|
|
139
139
|
options: { ...initOptions, ...options },
|
|
140
140
|
appearance: { ...initOptions?.appearance, ...options.appearance }
|
|
141
141
|
};
|
|
142
|
-
void clerk.
|
|
142
|
+
void clerk.__internal_updateProps(updateOptions);
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
export {
|
|
146
146
|
createClerkInstance,
|
|
147
147
|
updateClerkOptions
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-FGVEGDHA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/create-clerk-instance.ts","../src/internal/invoke-clerk-astro-js-functions.ts","../src/internal/mount-clerk-astro-js-components.ts","../src/internal/run-once.ts"],"sourcesContent":["import {\n loadClerkJsScript,\n loadClerkUiScript,\n setClerkJsLoadingErrorPackageName,\n} from '@clerk/shared/loadClerkJsScript';\nimport type { ClerkOptions } from '@clerk/shared/types';\nimport type { ClerkUiConstructor } from '@clerk/shared/ui';\nimport type { Ui } from '@clerk/ui/internal';\n\nimport { $clerkStore } from '../stores/external';\nimport { $clerk, $csrState } from '../stores/internal';\nimport type { AstroClerkCreateInstanceParams, AstroClerkUpdateOptions } from '../types';\nimport { invokeClerkAstroJSFunctions } from './invoke-clerk-astro-js-functions';\nimport { mountAllClerkAstroJSComponents } from './mount-clerk-astro-js-components';\nimport { runOnce } from './run-once';\n\nlet initOptions: ClerkOptions | undefined;\n\nsetClerkJsLoadingErrorPackageName(PACKAGE_NAME);\n\nfunction createNavigationHandler(\n windowNav: typeof window.history.pushState | typeof window.history.replaceState,\n): Exclude<ClerkOptions['routerPush'], undefined> | Exclude<ClerkOptions['routerReplace'], undefined> {\n return (to, opts) => {\n if (opts?.__internal_metadata?.navigationType === 'internal') {\n windowNav(history.state, '', to);\n } else {\n opts?.windowNavigate(to);\n }\n };\n}\n\n/**\n * Prevents firing clerk.load() multiple times\n */\nconst createClerkInstance = runOnce(createClerkInstanceInternal);\n\nasync function createClerkInstanceInternal<TUi extends Ui = Ui>(options?: AstroClerkCreateInstanceParams<TUi>) {\n let clerkJSInstance = window.Clerk;\n let clerkUiCtor: Promise<ClerkUiConstructor> | undefined;\n\n if (!clerkJSInstance) {\n // Load both clerk-js and clerk-ui in parallel\n const clerkPromise = loadClerkJsScript(options);\n clerkUiCtor = options?.clerkUiCtor\n ? Promise.resolve(options.clerkUiCtor)\n : loadClerkUiScript(options).then(() => {\n if (!window.__internal_ClerkUiCtor) {\n throw new Error('Failed to download latest Clerk UI. Contact support@clerk.com.');\n }\n // After the check, TypeScript knows it's defined\n return window.__internal_ClerkUiCtor;\n });\n\n await clerkPromise;\n\n if (!window.Clerk) {\n throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.');\n }\n clerkJSInstance = window.Clerk;\n }\n\n if (!$clerk.get()) {\n $clerk.set(clerkJSInstance);\n }\n\n const clerkOptions = {\n routerPush: createNavigationHandler(window.history.pushState.bind(window.history)),\n routerReplace: createNavigationHandler(window.history.replaceState.bind(window.history)),\n ...options,\n // Pass the clerk-ui constructor promise to clerk.load()\n clerkUiCtor,\n } as unknown as ClerkOptions;\n\n initOptions = clerkOptions;\n\n return clerkJSInstance\n .load(clerkOptions)\n .then(() => {\n $csrState.setKey('isLoaded', true);\n // Notify subscribers that $clerkStore has been loaded.\n // We're doing this because nanostores uses `===` for equality\n // and just by setting the value to `window.Clerk` again won't trigger an update.\n // We notify only once as this store is for advanced users.\n $clerkStore.notify();\n\n mountAllClerkAstroJSComponents();\n invokeClerkAstroJSFunctions();\n\n clerkJSInstance.addListener(payload => {\n $csrState.setKey('client', payload.client);\n $csrState.setKey('user', payload.user);\n $csrState.setKey('session', payload.session);\n $csrState.setKey('organization', payload.organization);\n });\n })\n .catch(() => {});\n}\n\nfunction updateClerkOptions<TUi extends Ui = Ui>(options: AstroClerkUpdateOptions<TUi>) {\n const clerk = $clerk.get();\n if (!clerk) {\n throw new Error('Missing clerk instance');\n }\n const updateOptions = {\n options: { ...initOptions, ...options },\n appearance: { ...initOptions?.appearance, ...options.appearance },\n } as unknown as { options: ClerkOptions; appearance?: any };\n // `__internal_updateProps` is not exposed as public API from `@clerk/types`\n void (clerk as any).__internal_updateProps(updateOptions);\n}\n\nexport { createClerkInstance, updateClerkOptions };\n","import { $clerk } from '../stores/internal';\n\n/**\n * Loop through any Astro component that has requested to invoke a function and invoke it with its respective props.\n */\nconst invokeClerkAstroJSFunctions = () => {\n const functionNames = ['handleRedirectCallback'] as const;\n\n functionNames.forEach(fnName => {\n const elementsOfCategory = document.querySelectorAll(`[data-clerk-function-id^=\"clerk-${fnName}\"]`);\n elementsOfCategory.forEach(el => {\n const id = el.getAttribute('data-clerk-function-id');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const props = window.__astro_clerk_function_props?.get(fnName)?.get(id!) ?? {};\n void $clerk.get()?.[fnName]?.(props);\n });\n });\n};\n\nexport { invokeClerkAstroJSFunctions };\n","import type { Clerk } from '@clerk/shared/types';\n\nimport { $clerk } from '../stores/internal';\nimport type { InternalUIComponentId } from '../types';\n\n/**\n * Loop through any Astro component that has requested to mount a UI component and mount it with its respective props.\n */\nconst mountAllClerkAstroJSComponents = () => {\n const mountFns = {\n 'create-organization': 'mountCreateOrganization',\n 'organization-list': 'mountOrganizationList',\n 'organization-profile': 'mountOrganizationProfile',\n 'organization-switcher': 'mountOrganizationSwitcher',\n 'user-avatar': 'mountUserAvatar',\n 'user-button': 'mountUserButton',\n 'user-profile': 'mountUserProfile',\n 'sign-in': 'mountSignIn',\n 'sign-up': 'mountSignUp',\n 'google-one-tap': 'openGoogleOneTap',\n waitlist: 'mountWaitlist',\n 'pricing-table': 'mountPricingTable',\n 'api-keys': 'mountAPIKeys',\n } as const satisfies Record<InternalUIComponentId, keyof Clerk>;\n\n Object.entries(mountFns).forEach(([category, mountFn]) => {\n const elementsOfCategory = document.querySelectorAll(`[data-clerk-id^=\"clerk-${category}\"]`);\n elementsOfCategory.forEach(el => {\n const clerkId = el.getAttribute('data-clerk-id') as string;\n const props = window.__astro_clerk_component_props?.get(category)?.get(clerkId);\n if (el) {\n $clerk.get()?.[mountFn](el as HTMLDivElement, props);\n }\n });\n });\n};\n\nexport { mountAllClerkAstroJSComponents };\n","import { invokeClerkAstroJSFunctions } from './invoke-clerk-astro-js-functions';\nimport { mountAllClerkAstroJSComponents } from './mount-clerk-astro-js-components';\nimport type { CreateClerkInstanceInternalFn } from './types';\n\n/**\n * Prevents mounting components multiple times when the `createClerkInstanceInternal` was been called twice without await first\n * This is useful as the \"integration\" may call the function twice at the same time.\n */\nconst runOnce = (onFirst: CreateClerkInstanceInternalFn) => {\n let hasRun = false;\n return (params: Parameters<CreateClerkInstanceInternalFn>[0]) => {\n if (hasRun) {\n const clerkJSInstance = window.Clerk;\n return new Promise(res => {\n if (!clerkJSInstance) {\n return res(false);\n }\n\n if (clerkJSInstance.loaded) {\n mountAllClerkAstroJSComponents();\n invokeClerkAstroJSFunctions();\n }\n return res(clerkJSInstance.loaded);\n });\n }\n /**\n * Probably html streaming has delayed the component from mounting immediately.\n * In Astro, js modules will start executing only after html streaming has ended.\n */\n hasRun = true;\n return onFirst(params);\n };\n};\n\nexport { runOnce };\n"],"mappings":"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","names":[]}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as AstroClerkUpdateOptions } from '../types-
|
|
1
|
+
import { a as AstroClerkUpdateOptions } from '../types-B8S8zxjF.js';
|
|
2
2
|
import { Ui } from '@clerk/ui/internal';
|
|
3
3
|
import * as _clerk_shared_types from '@clerk/shared/types';
|
|
4
|
-
import * as
|
|
4
|
+
import * as _clerk_shared_index_ChHWjn_I from '@clerk/shared/index-ChHWjn_I';
|
|
5
5
|
import * as nanostores from 'nanostores';
|
|
6
6
|
import '@clerk/shared/ui';
|
|
7
7
|
|
|
@@ -23,17 +23,17 @@ declare const $isLoadedStore: nanostores.ReadableAtom<boolean>;
|
|
|
23
23
|
*/
|
|
24
24
|
declare const $authStore: nanostores.ReadableAtom<{
|
|
25
25
|
userId: string | null | undefined;
|
|
26
|
-
user:
|
|
26
|
+
user: _clerk_shared_index_ChHWjn_I.to | null | undefined;
|
|
27
27
|
sessionId: string | null | undefined;
|
|
28
|
-
session:
|
|
28
|
+
session: _clerk_shared_index_ChHWjn_I.Ha | null | undefined;
|
|
29
29
|
sessionStatus: "active" | "pending" | undefined;
|
|
30
|
-
sessionClaims:
|
|
31
|
-
organization:
|
|
30
|
+
sessionClaims: _clerk_shared_index_ChHWjn_I.Ji | null | undefined;
|
|
31
|
+
organization: _clerk_shared_index_ChHWjn_I.pa | null | undefined;
|
|
32
32
|
orgId: string | null | undefined;
|
|
33
33
|
orgRole: string | null | undefined;
|
|
34
34
|
orgSlug: string | null | undefined;
|
|
35
|
-
orgPermissions:
|
|
36
|
-
actor:
|
|
35
|
+
orgPermissions: _clerk_shared_index_ChHWjn_I.rf<_clerk_shared_index_ChHWjn_I.ta>[] | null | undefined;
|
|
36
|
+
actor: _clerk_shared_index_ChHWjn_I.Gi | null | undefined;
|
|
37
37
|
factorVerificationAge: [number, number] | null;
|
|
38
38
|
}>;
|
|
39
39
|
/**
|
|
@@ -44,7 +44,7 @@ declare const $authStore: nanostores.ReadableAtom<{
|
|
|
44
44
|
* @example
|
|
45
45
|
* $userStore.subscribe((user) => console.log(user.id))
|
|
46
46
|
*/
|
|
47
|
-
declare const $userStore: nanostores.ReadableAtom<
|
|
47
|
+
declare const $userStore: nanostores.ReadableAtom<_clerk_shared_index_ChHWjn_I.to | null | undefined>;
|
|
48
48
|
/**
|
|
49
49
|
* A client side store that is populated after clerk-js has loaded.
|
|
50
50
|
* The store returns the session of the authenticated user or `null`.
|
|
@@ -62,7 +62,7 @@ declare const $sessionStore: nanostores.ReadableAtom<_clerk_shared_types.ActiveS
|
|
|
62
62
|
* @example
|
|
63
63
|
* $organizationStore.subscribe((org) => console.log(org.id))
|
|
64
64
|
*/
|
|
65
|
-
declare const $organizationStore: nanostores.ReadableAtom<
|
|
65
|
+
declare const $organizationStore: nanostores.ReadableAtom<_clerk_shared_index_ChHWjn_I.pa | null | undefined>;
|
|
66
66
|
/**
|
|
67
67
|
* A client side store that is populated after clerk-js has loaded.
|
|
68
68
|
* The store returns the clerk client or `null`.
|
package/dist/client/index.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as astro from 'astro';
|
|
2
|
-
import { A as AstroClerkIntegrationParams } from './types-
|
|
2
|
+
import { A as AstroClerkIntegrationParams } from './types-B8S8zxjF.js';
|
|
3
3
|
import '@clerk/shared/types';
|
|
4
4
|
import '@clerk/shared/ui';
|
|
5
5
|
import '@clerk/ui/internal';
|
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-snapshot.
|
|
6
|
+
var version = "3.0.0-snapshot.v20251204175016";
|
|
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-snapshot.v20251203203405\",\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":";AAEA,SAAS,gBAAgB;;;ACDvB,WAAQ;AACR,cAAW;;;ACSN,SAAS,sBAAsB,aAAsC;AAC1E,QAAM,kBAAkB;AACxB,QAAM,0BAA0B,OAAO;AAEvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,IAAI;AACZ,UAAI,OAAO,iBAAiB;AAC1B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,OAAO,QAAQ;AAKb,aAAO,cAAc,SAAS,KAAK,qBAAqB;AAExD,aAAO,cAAc,SAAS,KAAK,0BAA0B;AAAA,IAC/D;AAAA,IACA,KAAK,IAAI;AACP,UAAI,OAAO,yBAAyB;AAClC,eAAO;AAAA,kCACmB,YAAY,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAe9C;AAAA,IACF;AAAA,EACF;AACF;;;AF5CA,IAAM,wBAAwB,CAAC,iBAA0B,YAA+B;AACtF,SAAO,kBAAkB,EAAE,CAAC,mBAAmB,OAAO,EAAE,GAAG,KAAK,UAAU,eAAe,EAAE,IAAI,CAAC;AAClG;AAMA,SAAS,oBAAuE;AAC9E,SAAO,CAAC,WAAsC;AAC5C,UAAM,EAAE,UAAU,aAAa,QAAQ,WAAW,WAAW,kBAAkB,KAAK,IAAI,UAAU,CAAC;AAGnG,UAAM,aAAc,QAAgB;AACpC,UAAM,aAAc,QAAgB;AACpC,UAAM,iBAAkB,QAAgB;AACxC,UAAM,iBAAkB,QAAgB;AAExC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,QACL,sBAAsB,CAAC,EAAE,QAAQ,cAAc,cAAc,QAAQ,QAAQ,MAAM;AACjF,cAAI,CAAC,UAAU,QAAQ,EAAE,SAAS,OAAO,MAAM,KAAK,CAAC,OAAO,SAAS;AACnE,mBAAO,MAAM,8DAA8D;AAAA,UAC7E;AAEA,cAAI,OAAO,mBAAmB,eAAe,mBAAmB,cAAc,mBAAmB,IAAI;AACnG,mBAAO,MAAM,6FAA6F;AAAA,UAC5G;AAEA,gBAAM,iBAA+B;AAAA,YACnC,GAAG;AAAA,YACH,aAAa;AAAA,cACX;AAAA,cACA;AAAA,cACA,aAAa,YAAY,QAAQ,gBAAgB;AAAA,YACnD;AAAA,UACF;AAEA,gBAAM,kBAAkB,GAAG,IAAW;AAGtC,uBAAa;AAAA,YACX,MAAM;AAAA,cACJ,SAAS,CAAC,sBAAsB,MAAM,CAAC;AAAA,cACvC,QAAQ;AAAA;AAAA;AAAA;AAAA,gBAIN,GAAG,sBAAsB,WAAW,0BAA0B;AAAA,gBAC9D,GAAG,sBAAsB,WAAW,0BAA0B;AAAA,gBAC9D,GAAG,sBAAsB,aAAa,2BAA2B;AAAA,gBACjE,GAAG,sBAAsB,UAAU,wBAAwB;AAAA,gBAC3D,GAAG,sBAAsB,QAAQ,qBAAqB;AAAA,gBACtD,GAAG,sBAAsB,YAAY,qBAAqB;AAAA,gBAC1D,GAAG,sBAAsB,YAAY,qBAAqB;AAAA,gBAC1D,GAAG,sBAAsB,gBAAgB,yBAAyB;AAAA,gBAClE,GAAG,sBAAsB,gBAAgB,yBAAyB;AAAA,cACpE;AAAA,cAEA,KAAK;AAAA,gBACH,UAAU,CAAC,kBAAkB;AAAA,cAC/B;AAAA;AAAA,cAGA,cAAc;AAAA,gBACZ,gBAAgB;AAAA,kBACd,QAAQ;AAAA,gBACV;AAAA,cACF;AAAA,cACA,OAAO;AAAA,gBACL,QAAQ;AAAA,cACV;AAAA,YACF;AAAA,YACA,KAAK;AAAA,cACH,QAAQ;AAAA,gBACN,GAAI,kBAAkB,qBAAqB,IAAI,CAAC;AAAA,cAClD;AAAA,YACF;AAAA,UACF,CAAC;AAYD;AAAA,YACE;AAAA,YACA;AAAA,cACE,YAAY,QAAQ,gBAAgB,IAAW,4CAA4C,EAAE;AAAA,kDACzD,eAAe;AAAA,uCAC1B,KAAK,UAAU,cAAc,CAAC;AAAA,UAC3D;AAQA;AAAA,YACE;AAAA,YACA;AAAA,cACE,YAAY,QAAQ,gBAAgB,IAAW,gCAAgC,EAAE;AAAA,gEAC/B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAyBxD,KAAK,UAAU,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAMZ,KAAK,UAAU,cAAc,CAAC;AAAA;AAAA,UAE7D;AAAA,QACF;AAAA,QACA,qBAAqB,CAAC,EAAE,YAAY,MAAM;AACxC,sBAAY;AAAA,YACV,UAAU;AAAA,YACV,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB;AAC9B,SAAO;AAAA,IACL,8BAA8B,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,SAAS,CAAC;AAAA,IACrF,0BAA0B,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IACjG,0BAA0B,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IACjG,2BAA2B,SAAS,QAAQ,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IACnG,wBAAwB,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,MAAM,KAAK,KAAK,CAAC;AAAA,IAC1G,qBAAqB,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,MAAM,KAAK,KAAK,CAAC;AAAA,IACvG,qBAAqB,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,MAAM,KAAK,KAAK,CAAC;AAAA,IACvG,qBAAqB,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,MAAM,KAAK,KAAK,CAAC;AAAA,IACvG,yBAAyB,SAAS,KAAK;AAAA,MACrC,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,CAAC,UAAU;AAAA,IACrB,CAAC;AAAA,IACD,yBAAyB,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IAChG,iCAAiC,SAAS,QAAQ,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IACzG,8BAA8B,SAAS,QAAQ,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IACtG,kBAAkB,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,SAAS,CAAC;AAAA,IACzE,0BAA0B,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,IACjG,eAAe,SAAS,OAAO,EAAE,SAAS,UAAU,QAAQ,UAAU,UAAU,KAAK,CAAC;AAAA,EACxF;AACF;;;AGxLA,IAAO,gBAAQ,kBAAkB;","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.v20251204175016\",\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/internal/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AstroClerkIntegrationParams } from '../types-
|
|
1
|
+
import { A as AstroClerkIntegrationParams } from '../types-B8S8zxjF.js';
|
|
2
2
|
import * as astro_transitions_client from 'astro:transitions/client';
|
|
3
3
|
import '@clerk/shared/types';
|
|
4
4
|
import '@clerk/shared/ui';
|
package/dist/internal/index.js
CHANGED
package/dist/react/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { LoadedClerk, __experimental_CheckoutButtonProps, __experimental_PlanDetailsButtonProps, SignInButtonProps, SignOutOptions, SignUpButtonProps, __experimental_SubscriptionDetailsButtonProps, SignInProps, SignUpProps, UserButtonProps, UserProfileProps, OrganizationProfileProps, OrganizationSwitcherProps, OrganizationListProps, GoogleOneTapProps, WaitlistProps, PricingTableProps, PendingSessionOptions, ProtectProps as ProtectProps$1, HandleOAuthCallbackParams, UseAuthReturn } from '@clerk/shared/types';
|
|
3
3
|
export { SignInButtonProps, SignUpButtonProps, __experimental_CheckoutButtonProps, __experimental_PlanDetailsButtonProps, __experimental_SubscriptionDetailsButtonProps } from '@clerk/shared/types';
|
|
4
4
|
import React, { PropsWithChildren } from 'react';
|
|
5
|
-
import '../types-
|
|
5
|
+
import '../types-B8S8zxjF.js';
|
|
6
6
|
import '@clerk/shared/ui';
|
|
7
7
|
import '@clerk/ui/internal';
|
|
8
8
|
|
package/dist/react/index.js
CHANGED
|
@@ -312,7 +312,7 @@ var SignIn = withClerk(({ clerk, ...props }) => {
|
|
|
312
312
|
{
|
|
313
313
|
mount: clerk?.mountSignIn,
|
|
314
314
|
unmount: clerk?.unmountSignIn,
|
|
315
|
-
updateProps: clerk?.
|
|
315
|
+
updateProps: clerk?.__internal_updateProps,
|
|
316
316
|
props
|
|
317
317
|
}
|
|
318
318
|
);
|
|
@@ -323,7 +323,7 @@ var SignUp = withClerk(({ clerk, ...props }) => {
|
|
|
323
323
|
{
|
|
324
324
|
mount: clerk?.mountSignUp,
|
|
325
325
|
unmount: clerk?.unmountSignUp,
|
|
326
|
-
updateProps: clerk?.
|
|
326
|
+
updateProps: clerk?.__internal_updateProps,
|
|
327
327
|
props
|
|
328
328
|
}
|
|
329
329
|
);
|
|
@@ -334,7 +334,7 @@ var UserButton = withClerk(({ clerk, ...props }) => {
|
|
|
334
334
|
{
|
|
335
335
|
mount: clerk?.mountUserButton,
|
|
336
336
|
unmount: clerk?.unmountUserButton,
|
|
337
|
-
updateProps: clerk?.
|
|
337
|
+
updateProps: clerk?.__internal_updateProps,
|
|
338
338
|
props
|
|
339
339
|
}
|
|
340
340
|
);
|
|
@@ -345,7 +345,7 @@ var UserProfile = withClerk(({ clerk, ...props }) => {
|
|
|
345
345
|
{
|
|
346
346
|
mount: clerk?.mountUserProfile,
|
|
347
347
|
unmount: clerk?.unmountUserProfile,
|
|
348
|
-
updateProps: clerk?.
|
|
348
|
+
updateProps: clerk?.__internal_updateProps,
|
|
349
349
|
props
|
|
350
350
|
}
|
|
351
351
|
);
|
|
@@ -356,7 +356,7 @@ var OrganizationProfile = withClerk(({ clerk, ...props }) => {
|
|
|
356
356
|
{
|
|
357
357
|
mount: clerk?.mountOrganizationProfile,
|
|
358
358
|
unmount: clerk?.unmountOrganizationProfile,
|
|
359
|
-
updateProps: clerk?.
|
|
359
|
+
updateProps: clerk?.__internal_updateProps,
|
|
360
360
|
props
|
|
361
361
|
}
|
|
362
362
|
);
|
|
@@ -367,7 +367,7 @@ var OrganizationSwitcher = withClerk(({ clerk, ...props }) => {
|
|
|
367
367
|
{
|
|
368
368
|
mount: clerk?.mountOrganizationSwitcher,
|
|
369
369
|
unmount: clerk?.unmountOrganizationSwitcher,
|
|
370
|
-
updateProps: clerk?.
|
|
370
|
+
updateProps: clerk?.__internal_updateProps,
|
|
371
371
|
props
|
|
372
372
|
}
|
|
373
373
|
);
|
|
@@ -378,7 +378,7 @@ var OrganizationList = withClerk(({ clerk, ...props }) => {
|
|
|
378
378
|
{
|
|
379
379
|
mount: clerk?.mountOrganizationList,
|
|
380
380
|
unmount: clerk?.unmountOrganizationList,
|
|
381
|
-
updateProps: clerk?.
|
|
381
|
+
updateProps: clerk?.__internal_updateProps,
|
|
382
382
|
props
|
|
383
383
|
}
|
|
384
384
|
);
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/CheckoutButton.tsx","../../src/react/utils.tsx","../../src/react/PlanDetailsButton.tsx","../../src/react/SignInButton.tsx","../../src/react/SignOutButton.tsx","../../src/react/SignUpButton.tsx","../../src/react/SubscriptionDetailsButton.tsx","../../src/react/uiComponents.tsx","../../src/react/controlComponents.tsx","../../src/react/hooks.ts"],"sourcesContent":["import type { __experimental_CheckoutButtonProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type { __experimental_CheckoutButtonProps as CheckoutButtonProps };\n\nexport const CheckoutButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<__experimental_CheckoutButtonProps>>) => {\n const {\n planId,\n planPeriod,\n for: _for,\n onSubscriptionComplete,\n newSubscriptionRedirectUrl,\n checkoutProps,\n ...rest\n } = props;\n\n // Note: Auth checks are moved to runtime since Astro React components\n // don't have access to auth context at render time like Vue/React apps do\n\n children = normalizeWithDefaultValue(children, 'Checkout');\n const child = assertSingleChild(children)('CheckoutButton');\n\n const clickHandler = () => {\n if (!clerk) {\n return;\n }\n\n return clerk.__internal_openCheckout({\n planId,\n planPeriod,\n for: _for,\n onSubscriptionComplete,\n newSubscriptionRedirectUrl,\n ...checkoutProps,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = e => {\n if (child && typeof child === 'object' && 'props' in child) {\n void safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'CheckoutButton',\n);\n","import type { LoadedClerk } from '@clerk/shared/types';\nimport { computed, type Store, type StoreValue } from 'nanostores';\nimport React from 'react';\n\nimport { $clerk, $csrState } from '../stores/internal';\n\n/**\n * This implementation of `useStore` is an alternative solution to the hook exported by nanostores\n * Reference: https://github.com/nanostores/react/blob/main/index.js\n */\nfunction useStore<T extends Store, SV extends StoreValue<T>>(store: T): SV {\n const get = store.get.bind(store);\n return React.useSyncExternalStore(store.listen, get, get);\n}\n\nexport const withClerk = <P extends { clerk: LoadedClerk | undefined | null }>(\n Component: React.ComponentType<P>,\n displayName?: string,\n) => {\n displayName = displayName || Component.displayName || Component.name || 'Component';\n Component.displayName = displayName;\n const HOC = (props: Omit<P, 'clerk'>) => {\n const clerk = useStore(\n computed([$csrState, $clerk], (state, clerk) => {\n return state.isLoaded ? clerk : null;\n }),\n );\n\n return (\n <Component\n /**\n * Force the remount of the component if clerk is not loaded yet.\n * This is needed in order to avoid hydration errors in controlComponents.\n */\n key={clerk ? 'a' : 'b'}\n {...(props as P)}\n clerk={clerk}\n />\n );\n };\n HOC.displayName = `withClerk(${displayName})`;\n return HOC;\n};\n\nexport type WithClerkProp<T = unknown> = T & {\n clerk: LoadedClerk | undefined | null;\n};\n\n// TODO-SHARED: Duplicate from @clerk/react\nexport const assertSingleChild =\n (children: React.ReactNode) =>\n (\n name:\n | 'SignInButton'\n | 'SignUpButton'\n | 'SignOutButton'\n | 'SignInWithMetamaskButton'\n | 'SubscriptionDetailsButton'\n | 'CheckoutButton'\n | 'PlanDetailsButton',\n ) => {\n try {\n return React.Children.only(children);\n } catch {\n return `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;\n }\n };\n\n// TODO-SHARED: Duplicate from @clerk/react\nexport const normalizeWithDefaultValue = (children: React.ReactNode | undefined, defaultText: string) => {\n if (!children) {\n children = defaultText;\n }\n if (typeof children === 'string') {\n children = <button type='button'>{children}</button>;\n }\n return children;\n};\n\n// TODO-SHARED: Duplicate from @clerk/react\nexport const safeExecute =\n (cb: unknown) =>\n (...args: any) => {\n if (cb && typeof cb === 'function') {\n return cb(...args);\n }\n };\n","import type { __experimental_PlanDetailsButtonProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type { __experimental_PlanDetailsButtonProps as PlanDetailsButtonProps };\n\nexport const PlanDetailsButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<__experimental_PlanDetailsButtonProps>>) => {\n const { plan, planId, initialPlanPeriod, planDetailsProps, ...rest } = props;\n\n children = normalizeWithDefaultValue(children, 'Plan details');\n const child = assertSingleChild(children)('PlanDetailsButton');\n\n const clickHandler = () => {\n if (!clerk) {\n return;\n }\n\n return clerk.__internal_openPlanDetails({\n plan,\n planId,\n initialPlanPeriod,\n ...planDetailsProps,\n } as __experimental_PlanDetailsButtonProps);\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = e => {\n if (child && typeof child === 'object' && 'props' in child) {\n void safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'PlanDetailsButton',\n);\n","import type { SignInButtonProps, SignInProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk, type WithClerkProp } from './utils';\n\nexport type { SignInButtonProps };\n\nexport const SignInButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignInButtonProps>>) => {\n const { signUpFallbackRedirectUrl, forceRedirectUrl, fallbackRedirectUrl, signUpForceRedirectUrl, mode, ...rest } =\n props;\n children = normalizeWithDefaultValue(children, 'Sign in');\n const child = assertSingleChild(children)('SignInButton');\n\n const clickHandler = () => {\n const opts: SignInProps = {\n forceRedirectUrl,\n fallbackRedirectUrl,\n signUpFallbackRedirectUrl,\n signUpForceRedirectUrl,\n };\n\n if (!clerk) {\n return;\n }\n\n if (mode === 'modal') {\n return clerk.openSignIn({ ...opts, appearance: props.appearance });\n }\n return clerk.redirectToSignIn({\n ...opts,\n signInFallbackRedirectUrl: fallbackRedirectUrl,\n signInForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SignInButton',\n);\n","import type { SignOutOptions } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type SignOutButtonProps = SignOutOptions & {\n children?: React.ReactNode;\n};\n\nexport const SignOutButton = withClerk(\n ({ clerk, children, ...props }: React.PropsWithChildren<WithClerkProp<SignOutButtonProps>>) => {\n const { redirectUrl = '/', sessionId, ...rest } = props;\n\n children = normalizeWithDefaultValue(children, 'Sign out');\n const child = assertSingleChild(children)('SignOutButton');\n\n const clickHandler = () => clerk?.signOut({ redirectUrl, sessionId });\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SignOutButton',\n);\n","import type { SignUpButtonProps, SignUpProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk, type WithClerkProp } from './utils';\n\nexport type { SignUpButtonProps };\n\nexport const SignUpButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignUpButtonProps>>) => {\n const { fallbackRedirectUrl, forceRedirectUrl, signInFallbackRedirectUrl, signInForceRedirectUrl, mode, ...rest } =\n props;\n\n children = normalizeWithDefaultValue(children, 'Sign up');\n const child = assertSingleChild(children)('SignUpButton');\n\n const clickHandler = () => {\n const opts: SignUpProps = {\n fallbackRedirectUrl,\n forceRedirectUrl,\n signInFallbackRedirectUrl,\n signInForceRedirectUrl,\n };\n\n if (!clerk) {\n return;\n }\n\n if (mode === 'modal') {\n return clerk.openSignUp({\n ...opts,\n appearance: props.appearance,\n unsafeMetadata: props.unsafeMetadata,\n });\n }\n\n return clerk.redirectToSignUp({\n ...opts,\n signUpFallbackRedirectUrl: fallbackRedirectUrl,\n signUpForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SignUpButton',\n);\n","import type { __experimental_SubscriptionDetailsButtonProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type { __experimental_SubscriptionDetailsButtonProps as SubscriptionDetailsButtonProps };\n\nexport const SubscriptionDetailsButton = withClerk(\n ({\n clerk,\n children,\n ...props\n }: WithClerkProp<React.PropsWithChildren<__experimental_SubscriptionDetailsButtonProps>>) => {\n const { for: _for, subscriptionDetailsProps, onSubscriptionCancel, ...rest } = props;\n children = normalizeWithDefaultValue(children, 'Subscription details');\n const child = assertSingleChild(children)('SubscriptionDetailsButton');\n\n // Note: Auth checks are moved to runtime since Astro React components\n // don't have access to auth context at render time like Vue/React apps do\n\n const clickHandler = () => {\n if (!clerk) {\n return;\n }\n\n return clerk.__internal_openSubscriptionDetails({\n for: _for,\n onSubscriptionCancel,\n ...subscriptionDetailsProps,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = e => {\n if (child && typeof child === 'object' && 'props' in child) {\n void safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SubscriptionDetailsButton',\n);\n","import type {\n GoogleOneTapProps,\n OrganizationListProps,\n OrganizationProfileProps,\n OrganizationSwitcherProps,\n PricingTableProps,\n SignInProps,\n SignUpProps,\n UserButtonProps,\n UserProfileProps,\n WaitlistProps,\n} from '@clerk/shared/types';\nimport React from 'react';\n\nimport { withClerk, type WithClerkProp } from './utils';\n\nexport interface OpenProps {\n open: ((props: any) => void) | undefined;\n close: (() => void) | undefined;\n props?: any;\n}\n\nexport interface MountProps {\n mount: ((node: HTMLDivElement, props: any) => void) | undefined;\n unmount: ((node: HTMLDivElement) => void) | undefined;\n updateProps?: (props: any) => void;\n props?: any;\n // TODO: Support custom pages\n // customPagesPortals?: any[];\n}\n\nconst isMountProps = (props: any): props is MountProps => {\n return 'mount' in props;\n};\n\nconst isOpenProps = (props: any): props is OpenProps => {\n return 'open' in props;\n};\n\nclass Portal extends React.PureComponent<MountProps | OpenProps> {\n private portalRef = React.createRef<HTMLDivElement>();\n\n componentDidUpdate(prevProps: Readonly<MountProps>) {\n if (!isMountProps(prevProps) || !isMountProps(this.props)) {\n return;\n }\n if (\n prevProps.props.appearance !== this.props.props.appearance ||\n prevProps.props?.customPages?.length !== this.props.props?.customPages?.length\n ) {\n this.props.updateProps?.({\n node: this.portalRef.current,\n props: this.props.props,\n });\n }\n }\n\n componentDidMount() {\n if (this.portalRef.current) {\n if (isMountProps(this.props)) {\n this.props.mount?.(this.portalRef.current, this.props.props);\n }\n\n if (isOpenProps(this.props)) {\n this.props.open?.(this.props.props);\n }\n }\n }\n\n componentWillUnmount() {\n if (this.portalRef.current) {\n if (isMountProps(this.props)) {\n this.props.unmount?.(this.portalRef.current);\n }\n if (isOpenProps(this.props)) {\n this.props.close?.();\n }\n }\n }\n\n render() {\n return (\n <>\n <div ref={this.portalRef} />\n {/*TODO: Support custom pages*/}\n {/*{isMountProps(this.props) &&*/}\n {/* this.props?.customPagesPortals?.map((portal, index) => createElement(portal, { key: index }))}*/}\n </>\n );\n }\n}\n\nexport const SignIn = withClerk(({ clerk, ...props }: WithClerkProp<SignInProps>) => {\n return (\n <Portal\n mount={clerk?.mountSignIn}\n unmount={clerk?.unmountSignIn}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'SignIn');\n\nexport const SignUp = withClerk(({ clerk, ...props }: WithClerkProp<SignUpProps>) => {\n return (\n <Portal\n mount={clerk?.mountSignUp}\n unmount={clerk?.unmountSignUp}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'SignUp');\n\nexport const UserButton = withClerk(({ clerk, ...props }: WithClerkProp<UserButtonProps>) => {\n return (\n <Portal\n mount={clerk?.mountUserButton}\n unmount={clerk?.unmountUserButton}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'UserButton');\n\nexport const UserProfile = withClerk(({ clerk, ...props }: WithClerkProp<UserProfileProps>) => {\n return (\n <Portal\n mount={clerk?.mountUserProfile}\n unmount={clerk?.unmountUserProfile}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'UserProfile');\n\nexport const OrganizationProfile = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationProfileProps>) => {\n return (\n <Portal\n mount={clerk?.mountOrganizationProfile}\n unmount={clerk?.unmountOrganizationProfile}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'OrganizationProfile');\n\nexport const OrganizationSwitcher = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationSwitcherProps>) => {\n return (\n <Portal\n mount={clerk?.mountOrganizationSwitcher}\n unmount={clerk?.unmountOrganizationSwitcher}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'OrganizationSwitcher');\n\nexport const OrganizationList = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationListProps>) => {\n return (\n <Portal\n mount={clerk?.mountOrganizationList}\n unmount={clerk?.unmountOrganizationList}\n updateProps={(clerk as any)?.__unstable__updateProps}\n props={props}\n />\n );\n}, 'OrganizationList');\n\nexport const GoogleOneTap = withClerk(({ clerk, ...props }: WithClerkProp<GoogleOneTapProps>) => {\n return (\n <Portal\n open={clerk?.openGoogleOneTap}\n close={clerk?.closeGoogleOneTap}\n props={props}\n />\n );\n}, 'GoogleOneTap');\n\nexport const Waitlist = withClerk(({ clerk, ...props }: WithClerkProp<WaitlistProps>) => {\n return (\n <Portal\n mount={clerk?.mountWaitlist}\n unmount={clerk?.unmountWaitlist}\n props={props}\n />\n );\n}, 'Waitlist');\n\nexport const PricingTable = withClerk(({ clerk, ...props }: WithClerkProp<PricingTableProps>) => {\n return (\n <Portal\n mount={clerk?.mountPricingTable}\n unmount={clerk?.unmountPricingTable}\n props={props}\n />\n );\n}, 'PricingTable');\n","import type { HandleOAuthCallbackParams, PendingSessionOptions } from '@clerk/shared/types';\nimport { computed } from 'nanostores';\nimport type { PropsWithChildren } from 'react';\nimport React, { useEffect, useState } from 'react';\n\nimport { $csrState } from '../stores/internal';\nimport type { ProtectProps as _ProtectProps } from '../types';\nimport { useAuth } from './hooks';\nimport type { WithClerkProp } from './utils';\nimport { withClerk } from './utils';\n\nexport function SignedOut({ children, treatPendingAsSignedOut }: PropsWithChildren<PendingSessionOptions>) {\n const { userId } = useAuth({ treatPendingAsSignedOut });\n\n if (userId) {\n return null;\n }\n return children;\n}\n\nexport function SignedIn({ children, treatPendingAsSignedOut }: PropsWithChildren<PendingSessionOptions>) {\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (!userId) {\n return null;\n }\n return children;\n}\n\nconst $isLoadingClerkStore = computed($csrState, state => state.isLoaded);\n\n/*\n * It is not guaranteed that hydration will occur before clerk-js has loaded. If Clerk is loaded by the time a React component hydrates,\n * then we **hydration error** will be thrown for any control component that renders conditionally.\n *\n * This hook ensures that `isLoaded` will always be false on the first render,\n * preventing potential hydration errors and race conditions.\n */\nconst useSafeIsLoaded = () => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n const unsub = $isLoadingClerkStore.subscribe(() => {\n setIsLoaded(true);\n });\n\n return () => unsub();\n }, []);\n\n return isLoaded;\n};\n\nexport const ClerkLoaded = ({ children }: React.PropsWithChildren): JSX.Element | null => {\n const isLoaded = useSafeIsLoaded();\n\n if (!isLoaded) {\n return null;\n }\n\n return <>{children}</>;\n};\n\nexport const ClerkLoading = ({ children }: React.PropsWithChildren): JSX.Element | null => {\n const isLoaded = useSafeIsLoaded();\n\n if (isLoaded) {\n return null;\n }\n\n return <>{children}</>;\n};\n\nexport type ProtectProps = React.PropsWithChildren<\n _ProtectProps & { fallback?: React.ReactNode } & PendingSessionOptions\n>;\n\n/**\n * Use `<Protect/>` in order to prevent unauthenticated or unauthorized users from accessing the children passed to the component.\n *\n * Examples:\n * ```\n * <Protect permission=\"a_permission_key\" />\n * <Protect role=\"a_role_key\" />\n * <Protect condition={(has) => has({permission:\"a_permission_key\"})} />\n * <Protect condition={(has) => has({role:\"a_role_key\"})} />\n * <Protect fallback={<p>Unauthorized</p>} />\n * ```\n */\nexport const Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }: ProtectProps) => {\n const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });\n\n /**\n * Avoid flickering children or fallback while clerk is loading sessionId or userId\n */\n if (!isLoaded) {\n return null;\n }\n\n /**\n * Fallback to UI provided by user or `null` if authorization checks failed\n */\n const unauthorized = <>{fallback ?? null}</>;\n\n const authorized = <>{children}</>;\n\n if (!userId) {\n return unauthorized;\n }\n\n /**\n * Check against the results of `has` called inside the callback\n */\n if (typeof restAuthorizedParams.condition === 'function') {\n if (restAuthorizedParams.condition(has)) {\n return authorized;\n }\n return unauthorized;\n }\n\n if (\n restAuthorizedParams.role ||\n restAuthorizedParams.permission ||\n restAuthorizedParams.feature ||\n restAuthorizedParams.plan\n ) {\n if (has?.(restAuthorizedParams)) {\n return authorized;\n }\n return unauthorized;\n }\n\n /**\n * If neither of the authorization params are passed behave as the `<SignedIn/>`.\n * If fallback is present render that instead of rendering nothing.\n */\n return authorized;\n};\n\n/**\n * Use `<AuthenticateWithRedirectCallback/>` to complete a custom OAuth flow.\n */\nexport const AuthenticateWithRedirectCallback = withClerk(\n ({ clerk, ...handleRedirectCallbackParams }: WithClerkProp<HandleOAuthCallbackParams>) => {\n React.useEffect(() => {\n void clerk?.handleRedirectCallback(handleRedirectCallbackParams);\n }, []);\n\n return null;\n },\n 'AuthenticateWithRedirectCallback',\n);\n","import { createCheckAuthorization, resolveAuthState } from '@clerk/shared/authorization';\nimport { deriveState } from '@clerk/shared/deriveState';\nimport type {\n CheckAuthorizationWithCustomPermissions,\n Clerk,\n ClientResource,\n GetToken,\n JwtPayload,\n PendingSessionOptions,\n SignOut,\n UseAuthReturn,\n} from '@clerk/shared/types';\nimport type { Store, StoreValue } from 'nanostores';\nimport { useCallback, useSyncExternalStore } from 'react';\n\nimport { authAsyncStorage } from '#async-local-storage';\n\nimport { $authStore } from '../stores/external';\nimport { $clerk, $csrState } from '../stores/internal';\n\n/**\n * @internal\n */\nconst clerkLoaded = () => {\n return new Promise<Clerk>(resolve => {\n $csrState.subscribe(({ isLoaded }) => {\n if (isLoaded) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n resolve($clerk.get()!);\n }\n });\n });\n};\n\n/**\n * @internal\n */\nconst createGetToken = () => {\n return async (options: any) => {\n const clerk = await clerkLoaded();\n if (!clerk.session) {\n return null;\n }\n return clerk.session.getToken(options);\n };\n};\n\n/**\n * @internal\n */\nconst createSignOut = () => {\n return async (...args: any) => {\n const clerk = await clerkLoaded();\n return clerk.signOut(...args);\n };\n};\n\ntype UseAuth = (options?: PendingSessionOptions) => UseAuthReturn;\n\n/**\n * Returns the current auth state, the user and session ids and the `getToken`\n * that can be used to retrieve the given template or the default Clerk token.\n *\n * Until Clerk loads, `isLoaded` will be set to `false`.\n * Once Clerk loads, `isLoaded` will be set to `true`, and you can\n * safely access the `userId` and `sessionId` variables.\n *\n * For projects using a server, you can have immediate access to this data during SSR.\n *\n * @example\n * function Hello() {\n * const { isSignedIn, sessionId, userId } = useAuth();\n * if(isSignedIn) {\n * return null;\n * }\n * console.log(sessionId, userId)\n * return <div>...</div>\n * }\n *\n * This page will be fully rendered during SSR:\n * @example\n * export HelloPage = () => {\n * const { isSignedIn, sessionId, userId } = useAuth();\n * console.log(isSignedIn, sessionId, userId)\n * return <div>...</div>\n * }\n */\nexport const useAuth: UseAuth = ({ treatPendingAsSignedOut } = {}) => {\n const authContext = useAuthStore();\n\n const getToken: GetToken = useCallback(createGetToken(), []);\n const signOut: SignOut = useCallback(createSignOut(), []);\n\n const { userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims } = authContext;\n\n const has = useCallback(\n (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => {\n return createCheckAuthorization({\n userId,\n orgId,\n orgRole,\n orgPermissions,\n factorVerificationAge,\n features: ((sessionClaims as JwtPayload | undefined)?.fea as string) || '',\n plans: ((sessionClaims as JwtPayload | undefined)?.pla as string) || '',\n })(params);\n },\n [userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims],\n );\n\n const payload = resolveAuthState({\n authObject: {\n ...authContext,\n getToken,\n signOut,\n has,\n },\n options: {\n treatPendingAsSignedOut,\n },\n });\n\n if (!payload) {\n throw new Error('Invalid state. Feel free to submit a bug or reach out to support');\n }\n\n return payload;\n};\n\nfunction useStore<T extends Store, SV extends StoreValue<T>>(store: T, getServerSnapshot?: () => SV): SV {\n const get = store.get.bind(store);\n return useSyncExternalStore<SV>(store.listen, get, getServerSnapshot || get);\n}\n\n/**\n * This implementation of `useStore` is an alternative solution to the hook exported by nanostores\n * Reference: https://github.com/nanostores/react/blob/main/index.js\n */\nfunction useAuthStore() {\n const get = $authStore.get.bind($authStore);\n return useStore($authStore, () => {\n // Per react docs\n /**\n * optional getServerSnapshot:\n * A function that returns the initial snapshot of the data in the store.\n * It will be used only during server rendering and during hydration of server-rendered content on the client.\n * The server snapshot must be the same between the client and the server, and is usually serialized and passed from the server to the client.\n * If you omit this argument, rendering the component on the server will throw an error.\n */\n\n /**\n * When this runs on the server we want to grab the content from the async-local-storage.\n */\n if (typeof window === 'undefined') {\n return deriveState(\n false,\n {\n user: null,\n session: null,\n client: null as unknown as ClientResource,\n organization: null,\n },\n authAsyncStorage.getStore() as any,\n );\n }\n\n /**\n * When this runs on the client, during hydration, we want to grab the content the store.\n */\n return get();\n });\n}\n"],"mappings":"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","names":["React","clerk","React","React","React","React","React","React","React","React","React","React","React","React","jsx","React","computed","React","useStore","Fragment","jsx","computed","React"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/CheckoutButton.tsx","../../src/react/utils.tsx","../../src/react/PlanDetailsButton.tsx","../../src/react/SignInButton.tsx","../../src/react/SignOutButton.tsx","../../src/react/SignUpButton.tsx","../../src/react/SubscriptionDetailsButton.tsx","../../src/react/uiComponents.tsx","../../src/react/controlComponents.tsx","../../src/react/hooks.ts"],"sourcesContent":["import type { __experimental_CheckoutButtonProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type { __experimental_CheckoutButtonProps as CheckoutButtonProps };\n\nexport const CheckoutButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<__experimental_CheckoutButtonProps>>) => {\n const {\n planId,\n planPeriod,\n for: _for,\n onSubscriptionComplete,\n newSubscriptionRedirectUrl,\n checkoutProps,\n ...rest\n } = props;\n\n // Note: Auth checks are moved to runtime since Astro React components\n // don't have access to auth context at render time like Vue/React apps do\n\n children = normalizeWithDefaultValue(children, 'Checkout');\n const child = assertSingleChild(children)('CheckoutButton');\n\n const clickHandler = () => {\n if (!clerk) {\n return;\n }\n\n return clerk.__internal_openCheckout({\n planId,\n planPeriod,\n for: _for,\n onSubscriptionComplete,\n newSubscriptionRedirectUrl,\n ...checkoutProps,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = e => {\n if (child && typeof child === 'object' && 'props' in child) {\n void safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'CheckoutButton',\n);\n","import type { LoadedClerk } from '@clerk/shared/types';\nimport { computed, type Store, type StoreValue } from 'nanostores';\nimport React from 'react';\n\nimport { $clerk, $csrState } from '../stores/internal';\n\n/**\n * This implementation of `useStore` is an alternative solution to the hook exported by nanostores\n * Reference: https://github.com/nanostores/react/blob/main/index.js\n */\nfunction useStore<T extends Store, SV extends StoreValue<T>>(store: T): SV {\n const get = store.get.bind(store);\n return React.useSyncExternalStore(store.listen, get, get);\n}\n\nexport const withClerk = <P extends { clerk: LoadedClerk | undefined | null }>(\n Component: React.ComponentType<P>,\n displayName?: string,\n) => {\n displayName = displayName || Component.displayName || Component.name || 'Component';\n Component.displayName = displayName;\n const HOC = (props: Omit<P, 'clerk'>) => {\n const clerk = useStore(\n computed([$csrState, $clerk], (state, clerk) => {\n return state.isLoaded ? clerk : null;\n }),\n );\n\n return (\n <Component\n /**\n * Force the remount of the component if clerk is not loaded yet.\n * This is needed in order to avoid hydration errors in controlComponents.\n */\n key={clerk ? 'a' : 'b'}\n {...(props as P)}\n clerk={clerk}\n />\n );\n };\n HOC.displayName = `withClerk(${displayName})`;\n return HOC;\n};\n\nexport type WithClerkProp<T = unknown> = T & {\n clerk: LoadedClerk | undefined | null;\n};\n\n// TODO-SHARED: Duplicate from @clerk/react\nexport const assertSingleChild =\n (children: React.ReactNode) =>\n (\n name:\n | 'SignInButton'\n | 'SignUpButton'\n | 'SignOutButton'\n | 'SignInWithMetamaskButton'\n | 'SubscriptionDetailsButton'\n | 'CheckoutButton'\n | 'PlanDetailsButton',\n ) => {\n try {\n return React.Children.only(children);\n } catch {\n return `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;\n }\n };\n\n// TODO-SHARED: Duplicate from @clerk/react\nexport const normalizeWithDefaultValue = (children: React.ReactNode | undefined, defaultText: string) => {\n if (!children) {\n children = defaultText;\n }\n if (typeof children === 'string') {\n children = <button type='button'>{children}</button>;\n }\n return children;\n};\n\n// TODO-SHARED: Duplicate from @clerk/react\nexport const safeExecute =\n (cb: unknown) =>\n (...args: any) => {\n if (cb && typeof cb === 'function') {\n return cb(...args);\n }\n };\n","import type { __experimental_PlanDetailsButtonProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type { __experimental_PlanDetailsButtonProps as PlanDetailsButtonProps };\n\nexport const PlanDetailsButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<__experimental_PlanDetailsButtonProps>>) => {\n const { plan, planId, initialPlanPeriod, planDetailsProps, ...rest } = props;\n\n children = normalizeWithDefaultValue(children, 'Plan details');\n const child = assertSingleChild(children)('PlanDetailsButton');\n\n const clickHandler = () => {\n if (!clerk) {\n return;\n }\n\n return clerk.__internal_openPlanDetails({\n plan,\n planId,\n initialPlanPeriod,\n ...planDetailsProps,\n } as __experimental_PlanDetailsButtonProps);\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = e => {\n if (child && typeof child === 'object' && 'props' in child) {\n void safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'PlanDetailsButton',\n);\n","import type { SignInButtonProps, SignInProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk, type WithClerkProp } from './utils';\n\nexport type { SignInButtonProps };\n\nexport const SignInButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignInButtonProps>>) => {\n const { signUpFallbackRedirectUrl, forceRedirectUrl, fallbackRedirectUrl, signUpForceRedirectUrl, mode, ...rest } =\n props;\n children = normalizeWithDefaultValue(children, 'Sign in');\n const child = assertSingleChild(children)('SignInButton');\n\n const clickHandler = () => {\n const opts: SignInProps = {\n forceRedirectUrl,\n fallbackRedirectUrl,\n signUpFallbackRedirectUrl,\n signUpForceRedirectUrl,\n };\n\n if (!clerk) {\n return;\n }\n\n if (mode === 'modal') {\n return clerk.openSignIn({ ...opts, appearance: props.appearance });\n }\n return clerk.redirectToSignIn({\n ...opts,\n signInFallbackRedirectUrl: fallbackRedirectUrl,\n signInForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SignInButton',\n);\n","import type { SignOutOptions } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type SignOutButtonProps = SignOutOptions & {\n children?: React.ReactNode;\n};\n\nexport const SignOutButton = withClerk(\n ({ clerk, children, ...props }: React.PropsWithChildren<WithClerkProp<SignOutButtonProps>>) => {\n const { redirectUrl = '/', sessionId, ...rest } = props;\n\n children = normalizeWithDefaultValue(children, 'Sign out');\n const child = assertSingleChild(children)('SignOutButton');\n\n const clickHandler = () => clerk?.signOut({ redirectUrl, sessionId });\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SignOutButton',\n);\n","import type { SignUpButtonProps, SignUpProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk, type WithClerkProp } from './utils';\n\nexport type { SignUpButtonProps };\n\nexport const SignUpButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignUpButtonProps>>) => {\n const { fallbackRedirectUrl, forceRedirectUrl, signInFallbackRedirectUrl, signInForceRedirectUrl, mode, ...rest } =\n props;\n\n children = normalizeWithDefaultValue(children, 'Sign up');\n const child = assertSingleChild(children)('SignUpButton');\n\n const clickHandler = () => {\n const opts: SignUpProps = {\n fallbackRedirectUrl,\n forceRedirectUrl,\n signInFallbackRedirectUrl,\n signInForceRedirectUrl,\n };\n\n if (!clerk) {\n return;\n }\n\n if (mode === 'modal') {\n return clerk.openSignUp({\n ...opts,\n appearance: props.appearance,\n unsafeMetadata: props.unsafeMetadata,\n });\n }\n\n return clerk.redirectToSignUp({\n ...opts,\n signUpFallbackRedirectUrl: fallbackRedirectUrl,\n signUpForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SignUpButton',\n);\n","import type { __experimental_SubscriptionDetailsButtonProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from './utils';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute, withClerk } from './utils';\n\nexport type { __experimental_SubscriptionDetailsButtonProps as SubscriptionDetailsButtonProps };\n\nexport const SubscriptionDetailsButton = withClerk(\n ({\n clerk,\n children,\n ...props\n }: WithClerkProp<React.PropsWithChildren<__experimental_SubscriptionDetailsButtonProps>>) => {\n const { for: _for, subscriptionDetailsProps, onSubscriptionCancel, ...rest } = props;\n children = normalizeWithDefaultValue(children, 'Subscription details');\n const child = assertSingleChild(children)('SubscriptionDetailsButton');\n\n // Note: Auth checks are moved to runtime since Astro React components\n // don't have access to auth context at render time like Vue/React apps do\n\n const clickHandler = () => {\n if (!clerk) {\n return;\n }\n\n return clerk.__internal_openSubscriptionDetails({\n for: _for,\n onSubscriptionCancel,\n ...subscriptionDetailsProps,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = e => {\n if (child && typeof child === 'object' && 'props' in child) {\n void safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n 'SubscriptionDetailsButton',\n);\n","import type {\n GoogleOneTapProps,\n OrganizationListProps,\n OrganizationProfileProps,\n OrganizationSwitcherProps,\n PricingTableProps,\n SignInProps,\n SignUpProps,\n UserButtonProps,\n UserProfileProps,\n WaitlistProps,\n} from '@clerk/shared/types';\nimport React from 'react';\n\nimport { withClerk, type WithClerkProp } from './utils';\n\nexport interface OpenProps {\n open: ((props: any) => void) | undefined;\n close: (() => void) | undefined;\n props?: any;\n}\n\nexport interface MountProps {\n mount: ((node: HTMLDivElement, props: any) => void) | undefined;\n unmount: ((node: HTMLDivElement) => void) | undefined;\n updateProps?: (props: any) => void;\n props?: any;\n // TODO: Support custom pages\n // customPagesPortals?: any[];\n}\n\nconst isMountProps = (props: any): props is MountProps => {\n return 'mount' in props;\n};\n\nconst isOpenProps = (props: any): props is OpenProps => {\n return 'open' in props;\n};\n\nclass Portal extends React.PureComponent<MountProps | OpenProps> {\n private portalRef = React.createRef<HTMLDivElement>();\n\n componentDidUpdate(prevProps: Readonly<MountProps>) {\n if (!isMountProps(prevProps) || !isMountProps(this.props)) {\n return;\n }\n if (\n prevProps.props.appearance !== this.props.props.appearance ||\n prevProps.props?.customPages?.length !== this.props.props?.customPages?.length\n ) {\n this.props.updateProps?.({\n node: this.portalRef.current,\n props: this.props.props,\n });\n }\n }\n\n componentDidMount() {\n if (this.portalRef.current) {\n if (isMountProps(this.props)) {\n this.props.mount?.(this.portalRef.current, this.props.props);\n }\n\n if (isOpenProps(this.props)) {\n this.props.open?.(this.props.props);\n }\n }\n }\n\n componentWillUnmount() {\n if (this.portalRef.current) {\n if (isMountProps(this.props)) {\n this.props.unmount?.(this.portalRef.current);\n }\n if (isOpenProps(this.props)) {\n this.props.close?.();\n }\n }\n }\n\n render() {\n return (\n <>\n <div ref={this.portalRef} />\n {/*TODO: Support custom pages*/}\n {/*{isMountProps(this.props) &&*/}\n {/* this.props?.customPagesPortals?.map((portal, index) => createElement(portal, { key: index }))}*/}\n </>\n );\n }\n}\n\nexport const SignIn = withClerk(({ clerk, ...props }: WithClerkProp<SignInProps>) => {\n return (\n <Portal\n mount={clerk?.mountSignIn}\n unmount={clerk?.unmountSignIn}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'SignIn');\n\nexport const SignUp = withClerk(({ clerk, ...props }: WithClerkProp<SignUpProps>) => {\n return (\n <Portal\n mount={clerk?.mountSignUp}\n unmount={clerk?.unmountSignUp}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'SignUp');\n\nexport const UserButton = withClerk(({ clerk, ...props }: WithClerkProp<UserButtonProps>) => {\n return (\n <Portal\n mount={clerk?.mountUserButton}\n unmount={clerk?.unmountUserButton}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'UserButton');\n\nexport const UserProfile = withClerk(({ clerk, ...props }: WithClerkProp<UserProfileProps>) => {\n return (\n <Portal\n mount={clerk?.mountUserProfile}\n unmount={clerk?.unmountUserProfile}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'UserProfile');\n\nexport const OrganizationProfile = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationProfileProps>) => {\n return (\n <Portal\n mount={clerk?.mountOrganizationProfile}\n unmount={clerk?.unmountOrganizationProfile}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'OrganizationProfile');\n\nexport const OrganizationSwitcher = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationSwitcherProps>) => {\n return (\n <Portal\n mount={clerk?.mountOrganizationSwitcher}\n unmount={clerk?.unmountOrganizationSwitcher}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'OrganizationSwitcher');\n\nexport const OrganizationList = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationListProps>) => {\n return (\n <Portal\n mount={clerk?.mountOrganizationList}\n unmount={clerk?.unmountOrganizationList}\n updateProps={(clerk as any)?.__internal_updateProps}\n props={props}\n />\n );\n}, 'OrganizationList');\n\nexport const GoogleOneTap = withClerk(({ clerk, ...props }: WithClerkProp<GoogleOneTapProps>) => {\n return (\n <Portal\n open={clerk?.openGoogleOneTap}\n close={clerk?.closeGoogleOneTap}\n props={props}\n />\n );\n}, 'GoogleOneTap');\n\nexport const Waitlist = withClerk(({ clerk, ...props }: WithClerkProp<WaitlistProps>) => {\n return (\n <Portal\n mount={clerk?.mountWaitlist}\n unmount={clerk?.unmountWaitlist}\n props={props}\n />\n );\n}, 'Waitlist');\n\nexport const PricingTable = withClerk(({ clerk, ...props }: WithClerkProp<PricingTableProps>) => {\n return (\n <Portal\n mount={clerk?.mountPricingTable}\n unmount={clerk?.unmountPricingTable}\n props={props}\n />\n );\n}, 'PricingTable');\n","import type { HandleOAuthCallbackParams, PendingSessionOptions } from '@clerk/shared/types';\nimport { computed } from 'nanostores';\nimport type { PropsWithChildren } from 'react';\nimport React, { useEffect, useState } from 'react';\n\nimport { $csrState } from '../stores/internal';\nimport type { ProtectProps as _ProtectProps } from '../types';\nimport { useAuth } from './hooks';\nimport type { WithClerkProp } from './utils';\nimport { withClerk } from './utils';\n\nexport function SignedOut({ children, treatPendingAsSignedOut }: PropsWithChildren<PendingSessionOptions>) {\n const { userId } = useAuth({ treatPendingAsSignedOut });\n\n if (userId) {\n return null;\n }\n return children;\n}\n\nexport function SignedIn({ children, treatPendingAsSignedOut }: PropsWithChildren<PendingSessionOptions>) {\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (!userId) {\n return null;\n }\n return children;\n}\n\nconst $isLoadingClerkStore = computed($csrState, state => state.isLoaded);\n\n/*\n * It is not guaranteed that hydration will occur before clerk-js has loaded. If Clerk is loaded by the time a React component hydrates,\n * then we **hydration error** will be thrown for any control component that renders conditionally.\n *\n * This hook ensures that `isLoaded` will always be false on the first render,\n * preventing potential hydration errors and race conditions.\n */\nconst useSafeIsLoaded = () => {\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n const unsub = $isLoadingClerkStore.subscribe(() => {\n setIsLoaded(true);\n });\n\n return () => unsub();\n }, []);\n\n return isLoaded;\n};\n\nexport const ClerkLoaded = ({ children }: React.PropsWithChildren): JSX.Element | null => {\n const isLoaded = useSafeIsLoaded();\n\n if (!isLoaded) {\n return null;\n }\n\n return <>{children}</>;\n};\n\nexport const ClerkLoading = ({ children }: React.PropsWithChildren): JSX.Element | null => {\n const isLoaded = useSafeIsLoaded();\n\n if (isLoaded) {\n return null;\n }\n\n return <>{children}</>;\n};\n\nexport type ProtectProps = React.PropsWithChildren<\n _ProtectProps & { fallback?: React.ReactNode } & PendingSessionOptions\n>;\n\n/**\n * Use `<Protect/>` in order to prevent unauthenticated or unauthorized users from accessing the children passed to the component.\n *\n * Examples:\n * ```\n * <Protect permission=\"a_permission_key\" />\n * <Protect role=\"a_role_key\" />\n * <Protect condition={(has) => has({permission:\"a_permission_key\"})} />\n * <Protect condition={(has) => has({role:\"a_role_key\"})} />\n * <Protect fallback={<p>Unauthorized</p>} />\n * ```\n */\nexport const Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }: ProtectProps) => {\n const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });\n\n /**\n * Avoid flickering children or fallback while clerk is loading sessionId or userId\n */\n if (!isLoaded) {\n return null;\n }\n\n /**\n * Fallback to UI provided by user or `null` if authorization checks failed\n */\n const unauthorized = <>{fallback ?? null}</>;\n\n const authorized = <>{children}</>;\n\n if (!userId) {\n return unauthorized;\n }\n\n /**\n * Check against the results of `has` called inside the callback\n */\n if (typeof restAuthorizedParams.condition === 'function') {\n if (restAuthorizedParams.condition(has)) {\n return authorized;\n }\n return unauthorized;\n }\n\n if (\n restAuthorizedParams.role ||\n restAuthorizedParams.permission ||\n restAuthorizedParams.feature ||\n restAuthorizedParams.plan\n ) {\n if (has?.(restAuthorizedParams)) {\n return authorized;\n }\n return unauthorized;\n }\n\n /**\n * If neither of the authorization params are passed behave as the `<SignedIn/>`.\n * If fallback is present render that instead of rendering nothing.\n */\n return authorized;\n};\n\n/**\n * Use `<AuthenticateWithRedirectCallback/>` to complete a custom OAuth flow.\n */\nexport const AuthenticateWithRedirectCallback = withClerk(\n ({ clerk, ...handleRedirectCallbackParams }: WithClerkProp<HandleOAuthCallbackParams>) => {\n React.useEffect(() => {\n void clerk?.handleRedirectCallback(handleRedirectCallbackParams);\n }, []);\n\n return null;\n },\n 'AuthenticateWithRedirectCallback',\n);\n","import { createCheckAuthorization, resolveAuthState } from '@clerk/shared/authorization';\nimport { deriveState } from '@clerk/shared/deriveState';\nimport type {\n CheckAuthorizationWithCustomPermissions,\n Clerk,\n ClientResource,\n GetToken,\n JwtPayload,\n PendingSessionOptions,\n SignOut,\n UseAuthReturn,\n} from '@clerk/shared/types';\nimport type { Store, StoreValue } from 'nanostores';\nimport { useCallback, useSyncExternalStore } from 'react';\n\nimport { authAsyncStorage } from '#async-local-storage';\n\nimport { $authStore } from '../stores/external';\nimport { $clerk, $csrState } from '../stores/internal';\n\n/**\n * @internal\n */\nconst clerkLoaded = () => {\n return new Promise<Clerk>(resolve => {\n $csrState.subscribe(({ isLoaded }) => {\n if (isLoaded) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n resolve($clerk.get()!);\n }\n });\n });\n};\n\n/**\n * @internal\n */\nconst createGetToken = () => {\n return async (options: any) => {\n const clerk = await clerkLoaded();\n if (!clerk.session) {\n return null;\n }\n return clerk.session.getToken(options);\n };\n};\n\n/**\n * @internal\n */\nconst createSignOut = () => {\n return async (...args: any) => {\n const clerk = await clerkLoaded();\n return clerk.signOut(...args);\n };\n};\n\ntype UseAuth = (options?: PendingSessionOptions) => UseAuthReturn;\n\n/**\n * Returns the current auth state, the user and session ids and the `getToken`\n * that can be used to retrieve the given template or the default Clerk token.\n *\n * Until Clerk loads, `isLoaded` will be set to `false`.\n * Once Clerk loads, `isLoaded` will be set to `true`, and you can\n * safely access the `userId` and `sessionId` variables.\n *\n * For projects using a server, you can have immediate access to this data during SSR.\n *\n * @example\n * function Hello() {\n * const { isSignedIn, sessionId, userId } = useAuth();\n * if(isSignedIn) {\n * return null;\n * }\n * console.log(sessionId, userId)\n * return <div>...</div>\n * }\n *\n * This page will be fully rendered during SSR:\n * @example\n * export HelloPage = () => {\n * const { isSignedIn, sessionId, userId } = useAuth();\n * console.log(isSignedIn, sessionId, userId)\n * return <div>...</div>\n * }\n */\nexport const useAuth: UseAuth = ({ treatPendingAsSignedOut } = {}) => {\n const authContext = useAuthStore();\n\n const getToken: GetToken = useCallback(createGetToken(), []);\n const signOut: SignOut = useCallback(createSignOut(), []);\n\n const { userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims } = authContext;\n\n const has = useCallback(\n (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => {\n return createCheckAuthorization({\n userId,\n orgId,\n orgRole,\n orgPermissions,\n factorVerificationAge,\n features: ((sessionClaims as JwtPayload | undefined)?.fea as string) || '',\n plans: ((sessionClaims as JwtPayload | undefined)?.pla as string) || '',\n })(params);\n },\n [userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims],\n );\n\n const payload = resolveAuthState({\n authObject: {\n ...authContext,\n getToken,\n signOut,\n has,\n },\n options: {\n treatPendingAsSignedOut,\n },\n });\n\n if (!payload) {\n throw new Error('Invalid state. Feel free to submit a bug or reach out to support');\n }\n\n return payload;\n};\n\nfunction useStore<T extends Store, SV extends StoreValue<T>>(store: T, getServerSnapshot?: () => SV): SV {\n const get = store.get.bind(store);\n return useSyncExternalStore<SV>(store.listen, get, getServerSnapshot || get);\n}\n\n/**\n * This implementation of `useStore` is an alternative solution to the hook exported by nanostores\n * Reference: https://github.com/nanostores/react/blob/main/index.js\n */\nfunction useAuthStore() {\n const get = $authStore.get.bind($authStore);\n return useStore($authStore, () => {\n // Per react docs\n /**\n * optional getServerSnapshot:\n * A function that returns the initial snapshot of the data in the store.\n * It will be used only during server rendering and during hydration of server-rendered content on the client.\n * The server snapshot must be the same between the client and the server, and is usually serialized and passed from the server to the client.\n * If you omit this argument, rendering the component on the server will throw an error.\n */\n\n /**\n * When this runs on the server we want to grab the content from the async-local-storage.\n */\n if (typeof window === 'undefined') {\n return deriveState(\n false,\n {\n user: null,\n session: null,\n client: null as unknown as ClientResource,\n organization: null,\n },\n authAsyncStorage.getStore() as any,\n );\n }\n\n /**\n * When this runs on the client, during hydration, we want to grab the content the store.\n */\n return get();\n });\n}\n"],"mappings":"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","names":["React","clerk","React","React","React","React","React","React","React","React","React","React","React","React","jsx","React","computed","React","useStore","Fragment","jsx","computed","React"]}
|
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-snapshot.
|
|
112
|
+
userAgent: `${"@clerk/astro"}@${"3.0.0-snapshot.v20251204175016"}`,
|
|
113
113
|
sdkMetadata: {
|
|
114
114
|
name: "@clerk/astro",
|
|
115
|
-
version: "3.0.0-snapshot.
|
|
115
|
+
version: "3.0.0-snapshot.v20251204175016",
|
|
116
116
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
117
117
|
environment: import.meta.env.MODE
|
|
118
118
|
},
|
|
@@ -28,7 +28,7 @@ declare global {
|
|
|
28
28
|
__astro_clerk_component_props: Map<string, Map<string, Record<string, unknown>>>;
|
|
29
29
|
__astro_clerk_function_props: Map<string, Map<string, Record<string, unknown>>>;
|
|
30
30
|
Clerk: BrowserClerk;
|
|
31
|
-
|
|
31
|
+
__internal_ClerkUiCtor?: ClerkUiConstructor;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clerk/astro",
|
|
3
|
-
"version": "3.0.0-snapshot.
|
|
3
|
+
"version": "3.0.0-snapshot.v20251204175016",
|
|
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-snapshot.
|
|
82
|
-
"@clerk/shared": "^4.0.0-snapshot.
|
|
81
|
+
"@clerk/backend": "^3.0.0-snapshot.v20251204175016",
|
|
82
|
+
"@clerk/shared": "^4.0.0-snapshot.v20251204175016"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"astro": "^5.15.3",
|
|
86
|
-
"@clerk/ui": "^1.0.0-snapshot.
|
|
86
|
+
"@clerk/ui": "^1.0.0-snapshot.v20251204175016"
|
|
87
87
|
},
|
|
88
88
|
"peerDependencies": {
|
|
89
89
|
"astro": "^4.15.0 || ^5.0.0"
|
package/types.ts
CHANGED
|
@@ -58,7 +58,7 @@ declare global {
|
|
|
58
58
|
__astro_clerk_component_props: Map<string, Map<string, Record<string, unknown>>>;
|
|
59
59
|
__astro_clerk_function_props: Map<string, Map<string, Record<string, unknown>>>;
|
|
60
60
|
Clerk: BrowserClerk;
|
|
61
|
-
|
|
61
|
+
__internal_ClerkUiCtor?: ClerkUiConstructor;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/create-clerk-instance.ts","../src/internal/invoke-clerk-astro-js-functions.ts","../src/internal/mount-clerk-astro-js-components.ts","../src/internal/run-once.ts"],"sourcesContent":["import {\n loadClerkJsScript,\n loadClerkUiScript,\n setClerkJsLoadingErrorPackageName,\n} from '@clerk/shared/loadClerkJsScript';\nimport type { ClerkOptions } from '@clerk/shared/types';\nimport type { ClerkUiConstructor } from '@clerk/shared/ui';\nimport type { Ui } from '@clerk/ui/internal';\n\nimport { $clerkStore } from '../stores/external';\nimport { $clerk, $csrState } from '../stores/internal';\nimport type { AstroClerkCreateInstanceParams, AstroClerkUpdateOptions } from '../types';\nimport { invokeClerkAstroJSFunctions } from './invoke-clerk-astro-js-functions';\nimport { mountAllClerkAstroJSComponents } from './mount-clerk-astro-js-components';\nimport { runOnce } from './run-once';\n\nlet initOptions: ClerkOptions | undefined;\n\nsetClerkJsLoadingErrorPackageName(PACKAGE_NAME);\n\nfunction createNavigationHandler(\n windowNav: typeof window.history.pushState | typeof window.history.replaceState,\n): Exclude<ClerkOptions['routerPush'], undefined> | Exclude<ClerkOptions['routerReplace'], undefined> {\n return (to, opts) => {\n if (opts?.__internal_metadata?.navigationType === 'internal') {\n windowNav(history.state, '', to);\n } else {\n opts?.windowNavigate(to);\n }\n };\n}\n\n/**\n * Prevents firing clerk.load() multiple times\n */\nconst createClerkInstance = runOnce(createClerkInstanceInternal);\n\nasync function createClerkInstanceInternal<TUi extends Ui = Ui>(options?: AstroClerkCreateInstanceParams<TUi>) {\n let clerkJSInstance = window.Clerk;\n let clerkUiCtor: Promise<ClerkUiConstructor> | undefined;\n\n if (!clerkJSInstance) {\n // Load both clerk-js and clerk-ui in parallel\n const clerkPromise = loadClerkJsScript(options);\n clerkUiCtor = options?.clerkUiCtor\n ? Promise.resolve(options.clerkUiCtor)\n : loadClerkUiScript(options).then(() => {\n if (!window.__unstable_ClerkUiCtor) {\n throw new Error('Failed to download latest Clerk UI. Contact support@clerk.com.');\n }\n // After the check, TypeScript knows it's defined\n return window.__unstable_ClerkUiCtor;\n });\n\n await clerkPromise;\n\n if (!window.Clerk) {\n throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.');\n }\n clerkJSInstance = window.Clerk;\n }\n\n if (!$clerk.get()) {\n $clerk.set(clerkJSInstance);\n }\n\n const clerkOptions = {\n routerPush: createNavigationHandler(window.history.pushState.bind(window.history)),\n routerReplace: createNavigationHandler(window.history.replaceState.bind(window.history)),\n ...options,\n // Pass the clerk-ui constructor promise to clerk.load()\n clerkUiCtor,\n } as unknown as ClerkOptions;\n\n initOptions = clerkOptions;\n\n return clerkJSInstance\n .load(clerkOptions)\n .then(() => {\n $csrState.setKey('isLoaded', true);\n // Notify subscribers that $clerkStore has been loaded.\n // We're doing this because nanostores uses `===` for equality\n // and just by setting the value to `window.Clerk` again won't trigger an update.\n // We notify only once as this store is for advanced users.\n $clerkStore.notify();\n\n mountAllClerkAstroJSComponents();\n invokeClerkAstroJSFunctions();\n\n clerkJSInstance.addListener(payload => {\n $csrState.setKey('client', payload.client);\n $csrState.setKey('user', payload.user);\n $csrState.setKey('session', payload.session);\n $csrState.setKey('organization', payload.organization);\n });\n })\n .catch(() => {});\n}\n\nfunction updateClerkOptions<TUi extends Ui = Ui>(options: AstroClerkUpdateOptions<TUi>) {\n const clerk = $clerk.get();\n if (!clerk) {\n throw new Error('Missing clerk instance');\n }\n const updateOptions = {\n options: { ...initOptions, ...options },\n appearance: { ...initOptions?.appearance, ...options.appearance },\n } as unknown as { options: ClerkOptions; appearance?: any };\n // `__unstable__updateProps` is not exposed as public API from `@clerk/types`\n void (clerk as any).__unstable__updateProps(updateOptions);\n}\n\nexport { createClerkInstance, updateClerkOptions };\n","import { $clerk } from '../stores/internal';\n\n/**\n * Loop through any Astro component that has requested to invoke a function and invoke it with its respective props.\n */\nconst invokeClerkAstroJSFunctions = () => {\n const functionNames = ['handleRedirectCallback'] as const;\n\n functionNames.forEach(fnName => {\n const elementsOfCategory = document.querySelectorAll(`[data-clerk-function-id^=\"clerk-${fnName}\"]`);\n elementsOfCategory.forEach(el => {\n const id = el.getAttribute('data-clerk-function-id');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const props = window.__astro_clerk_function_props?.get(fnName)?.get(id!) ?? {};\n void $clerk.get()?.[fnName]?.(props);\n });\n });\n};\n\nexport { invokeClerkAstroJSFunctions };\n","import type { Clerk } from '@clerk/shared/types';\n\nimport { $clerk } from '../stores/internal';\nimport type { InternalUIComponentId } from '../types';\n\n/**\n * Loop through any Astro component that has requested to mount a UI component and mount it with its respective props.\n */\nconst mountAllClerkAstroJSComponents = () => {\n const mountFns = {\n 'create-organization': 'mountCreateOrganization',\n 'organization-list': 'mountOrganizationList',\n 'organization-profile': 'mountOrganizationProfile',\n 'organization-switcher': 'mountOrganizationSwitcher',\n 'user-avatar': 'mountUserAvatar',\n 'user-button': 'mountUserButton',\n 'user-profile': 'mountUserProfile',\n 'sign-in': 'mountSignIn',\n 'sign-up': 'mountSignUp',\n 'google-one-tap': 'openGoogleOneTap',\n waitlist: 'mountWaitlist',\n 'pricing-table': 'mountPricingTable',\n 'api-keys': 'mountAPIKeys',\n } as const satisfies Record<InternalUIComponentId, keyof Clerk>;\n\n Object.entries(mountFns).forEach(([category, mountFn]) => {\n const elementsOfCategory = document.querySelectorAll(`[data-clerk-id^=\"clerk-${category}\"]`);\n elementsOfCategory.forEach(el => {\n const clerkId = el.getAttribute('data-clerk-id') as string;\n const props = window.__astro_clerk_component_props?.get(category)?.get(clerkId);\n if (el) {\n $clerk.get()?.[mountFn](el as HTMLDivElement, props);\n }\n });\n });\n};\n\nexport { mountAllClerkAstroJSComponents };\n","import { invokeClerkAstroJSFunctions } from './invoke-clerk-astro-js-functions';\nimport { mountAllClerkAstroJSComponents } from './mount-clerk-astro-js-components';\nimport type { CreateClerkInstanceInternalFn } from './types';\n\n/**\n * Prevents mounting components multiple times when the `createClerkInstanceInternal` was been called twice without await first\n * This is useful as the \"integration\" may call the function twice at the same time.\n */\nconst runOnce = (onFirst: CreateClerkInstanceInternalFn) => {\n let hasRun = false;\n return (params: Parameters<CreateClerkInstanceInternalFn>[0]) => {\n if (hasRun) {\n const clerkJSInstance = window.Clerk;\n return new Promise(res => {\n if (!clerkJSInstance) {\n return res(false);\n }\n\n if (clerkJSInstance.loaded) {\n mountAllClerkAstroJSComponents();\n invokeClerkAstroJSFunctions();\n }\n return res(clerkJSInstance.loaded);\n });\n }\n /**\n * Probably html streaming has delayed the component from mounting immediately.\n * In Astro, js modules will start executing only after html streaming has ended.\n */\n hasRun = true;\n return onFirst(params);\n };\n};\n\nexport { runOnce };\n"],"mappings":";;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACCP,IAAM,8BAA8B,MAAM;AACxC,QAAM,gBAAgB,CAAC,wBAAwB;AAE/C,gBAAc,QAAQ,YAAU;AAC9B,UAAM,qBAAqB,SAAS,iBAAiB,mCAAmC,MAAM,IAAI;AAClG,uBAAmB,QAAQ,QAAM;AAC/B,YAAM,KAAK,GAAG,aAAa,wBAAwB;AAEnD,YAAM,QAAQ,OAAO,8BAA8B,IAAI,MAAM,GAAG,IAAI,EAAG,KAAK,CAAC;AAC7E,WAAK,OAAO,IAAI,IAAI,MAAM,IAAI,KAAK;AAAA,IACrC,CAAC;AAAA,EACH,CAAC;AACH;;;ACTA,IAAM,iCAAiC,MAAM;AAC3C,QAAM,WAAW;AAAA,IACf,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,wBAAwB;AAAA,IACxB,yBAAyB;AAAA,IACzB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,YAAY;AAAA,EACd;AAEA,SAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,UAAU,OAAO,MAAM;AACxD,UAAM,qBAAqB,SAAS,iBAAiB,0BAA0B,QAAQ,IAAI;AAC3F,uBAAmB,QAAQ,QAAM;AAC/B,YAAM,UAAU,GAAG,aAAa,eAAe;AAC/C,YAAM,QAAQ,OAAO,+BAA+B,IAAI,QAAQ,GAAG,IAAI,OAAO;AAC9E,UAAI,IAAI;AACN,eAAO,IAAI,IAAI,OAAO,EAAE,IAAsB,KAAK;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AC3BA,IAAM,UAAU,CAAC,YAA2C;AAC1D,MAAI,SAAS;AACb,SAAO,CAAC,WAAyD;AAC/D,QAAI,QAAQ;AACV,YAAM,kBAAkB,OAAO;AAC/B,aAAO,IAAI,QAAQ,SAAO;AACxB,YAAI,CAAC,iBAAiB;AACpB,iBAAO,IAAI,KAAK;AAAA,QAClB;AAEA,YAAI,gBAAgB,QAAQ;AAC1B,yCAA+B;AAC/B,sCAA4B;AAAA,QAC9B;AACA,eAAO,IAAI,gBAAgB,MAAM;AAAA,MACnC,CAAC;AAAA,IACH;AAKA,aAAS;AACT,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;;;AHhBA,IAAI;AAEJ,kCAAkC,cAAY;AAE9C,SAAS,wBACP,WACoG;AACpG,SAAO,CAAC,IAAI,SAAS;AACnB,QAAI,MAAM,qBAAqB,mBAAmB,YAAY;AAC5D,gBAAU,QAAQ,OAAO,IAAI,EAAE;AAAA,IACjC,OAAO;AACL,YAAM,eAAe,EAAE;AAAA,IACzB;AAAA,EACF;AACF;AAKA,IAAM,sBAAsB,QAAQ,2BAA2B;AAE/D,eAAe,4BAAiD,SAA+C;AAC7G,MAAI,kBAAkB,OAAO;AAC7B,MAAI;AAEJ,MAAI,CAAC,iBAAiB;AAEpB,UAAM,eAAe,kBAAkB,OAAO;AAC9C,kBAAc,SAAS,cACnB,QAAQ,QAAQ,QAAQ,WAAW,IACnC,kBAAkB,OAAO,EAAE,KAAK,MAAM;AACpC,UAAI,CAAC,OAAO,wBAAwB;AAClC,cAAM,IAAI,MAAM,gEAAgE;AAAA,MAClF;AAEA,aAAO,OAAO;AAAA,IAChB,CAAC;AAEL,UAAM;AAEN,QAAI,CAAC,OAAO,OAAO;AACjB,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AACA,sBAAkB,OAAO;AAAA,EAC3B;AAEA,MAAI,CAAC,OAAO,IAAI,GAAG;AACjB,WAAO,IAAI,eAAe;AAAA,EAC5B;AAEA,QAAM,eAAe;AAAA,IACnB,YAAY,wBAAwB,OAAO,QAAQ,UAAU,KAAK,OAAO,OAAO,CAAC;AAAA,IACjF,eAAe,wBAAwB,OAAO,QAAQ,aAAa,KAAK,OAAO,OAAO,CAAC;AAAA,IACvF,GAAG;AAAA;AAAA,IAEH;AAAA,EACF;AAEA,gBAAc;AAEd,SAAO,gBACJ,KAAK,YAAY,EACjB,KAAK,MAAM;AACV,cAAU,OAAO,YAAY,IAAI;AAKjC,gBAAY,OAAO;AAEnB,mCAA+B;AAC/B,gCAA4B;AAE5B,oBAAgB,YAAY,aAAW;AACrC,gBAAU,OAAO,UAAU,QAAQ,MAAM;AACzC,gBAAU,OAAO,QAAQ,QAAQ,IAAI;AACrC,gBAAU,OAAO,WAAW,QAAQ,OAAO;AAC3C,gBAAU,OAAO,gBAAgB,QAAQ,YAAY;AAAA,IACvD,CAAC;AAAA,EACH,CAAC,EACA,MAAM,MAAM;AAAA,EAAC,CAAC;AACnB;AAEA,SAAS,mBAAwC,SAAuC;AACtF,QAAM,QAAQ,OAAO,IAAI;AACzB,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACA,QAAM,gBAAgB;AAAA,IACpB,SAAS,EAAE,GAAG,aAAa,GAAG,QAAQ;AAAA,IACtC,YAAY,EAAE,GAAG,aAAa,YAAY,GAAG,QAAQ,WAAW;AAAA,EAClE;AAEA,OAAM,MAAc,wBAAwB,aAAa;AAC3D;","names":[]}
|