@clerk/electron 0.1.4-snapshot.v20261021181323 → 0.1.4

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.
@@ -26,7 +26,7 @@ function createClerkInstance(publishableKey, passkeys) {
26
26
  clerk.__internal_onBeforeRequest(async (request) => {
27
27
  request.credentials = "omit";
28
28
  request.url?.searchParams.append("_is_native", "1");
29
- request.url?.searchParams.append("_electron_sdk_version", "0.1.4-snapshot.v20261021181323");
29
+ request.url?.searchParams.append("_electron_sdk_version", "0.1.4");
30
30
  const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);
31
31
  if (token) {
32
32
  const headers = new Headers(request.headers);
@@ -51,7 +51,7 @@ function createClerkInstance(publishableKey, passkeys) {
51
51
  //#region src/react/index.tsx
52
52
  const SDK_METADATA = {
53
53
  name: "@clerk/electron",
54
- version: "0.1.4-snapshot.v20261021181323"
54
+ version: "0.1.4"
55
55
  };
56
56
  let cachedClerkUI = null;
57
57
  function loadClerkUI(publishableKey, props) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Clerk","ALLOWED_PROTOCOLS","ReactClerkProvider"],"sources":["../../../src/react/create-clerk-instance.ts","../../../src/react/index.tsx"],"sourcesContent":["import { Clerk } from '@clerk/clerk-js';\n\n// Type-only import: the passkeys module is only bundled when the app imports\n// `@clerk/electron/passkeys` itself.\nimport type { PasskeySupport } from '../passkeys';\n\nconst CLERK_CLIENT_JWT_KEY = '__clerk_client_jwt';\n\ntype ClerkInstance = InstanceType<typeof Clerk>;\n\nlet cached: { instance: ClerkInstance; publishableKey: string } | null = null;\n\nfunction attachPasskeys(clerk: ClerkInstance, passkeys: PasskeySupport): void {\n clerk.__internal_createPublicCredentials = passkeys.create;\n clerk.__internal_getPublicCredentials = passkeys.get;\n clerk.__internal_isWebAuthnSupported = passkeys.isSupported;\n clerk.__internal_isWebAuthnAutofillSupported = passkeys.isAutoFillSupported;\n clerk.__internal_isWebAuthnPlatformAuthenticatorSupported = passkeys.isPlatformAuthenticatorSupported;\n}\n\nexport function createClerkInstance(publishableKey: string, passkeys?: PasskeySupport): ClerkInstance {\n if (cached?.publishableKey === publishableKey) {\n if (passkeys) {\n attachPasskeys(cached.instance, passkeys);\n }\n return cached.instance;\n }\n\n const clerk = new Clerk(publishableKey);\n\n if (passkeys) {\n attachPasskeys(clerk, passkeys);\n }\n\n clerk.__internal_onBeforeRequest(async request => {\n request.credentials = 'omit';\n request.url?.searchParams.append('_is_native', '1');\n request.url?.searchParams.append('_electron_sdk_version', PACKAGE_VERSION);\n\n const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);\n if (token) {\n const headers = new Headers(request.headers);\n headers.set('Authorization', `Bearer ${token}`);\n request.headers = headers;\n }\n });\n\n clerk.__internal_onAfterResponse(async (_request, response) => {\n const authorization = (response as Response).headers.get('Authorization');\n if (!authorization) {\n return;\n }\n\n const token = authorization.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : authorization;\n await window.__clerk_internal_electron?.tokenCache.saveToken(CLERK_CLIENT_JWT_KEY, token);\n });\n\n cached = { instance: clerk, publishableKey };\n return clerk;\n}\n","import type { ClerkProviderProps as ReactClerkProviderProps } from '@clerk/react';\nimport { InternalClerkProvider as ReactClerkProvider } from '@clerk/react/internal';\nimport { isVirtualRouterPath } from '@clerk/shared/internal/clerk-js/url';\nimport { ALLOWED_PROTOCOLS } from '@clerk/shared/internal/clerk-js/windowNavigate';\nimport { loadClerkUIScript } from '@clerk/shared/loadClerkJsScript';\nimport type { ClerkUIConstructor } from '@clerk/shared/ui';\nimport type { ReactNode } from 'react';\n\nimport type { PasskeySupport } from '../passkeys';\nimport { createClerkInstance } from './create-clerk-instance';\n\ntype ClerkOAuthTransport = NonNullable<ReactClerkProviderProps['__internal_oauthTransport']>;\n\nexport type ClerkProviderProps = Omit<\n ReactClerkProviderProps,\n 'Clerk' | 'children' | 'publishableKey' | 'standardBrowser' | 'ui' | '__internal_oauthTransport'\n> & {\n children: ReactNode;\n /**\n * Your Clerk publishable key, available in the Clerk Dashboard.\n */\n publishableKey: string;\n /**\n * Enables passkey support. Pass the `passkeys` export from `@clerk/electron/passkeys`;\n * when omitted, no passkey code is bundled or initialized.\n *\n * @example\n * ```tsx\n * import { passkeys } from '@clerk/electron/passkeys';\n *\n * <ClerkProvider publishableKey={publishableKey} passkeys={passkeys} />\n * ```\n */\n passkeys?: PasskeySupport;\n};\n\nconst SDK_METADATA = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nlet cachedClerkUI: { promise: Promise<ClerkUIConstructor>; publishableKey: string } | null = null;\n\nfunction loadClerkUI(publishableKey: string, props: Partial<ClerkProviderProps>): Promise<ClerkUIConstructor> {\n if (cachedClerkUI?.publishableKey === publishableKey) {\n return cachedClerkUI.promise;\n }\n\n // Undocumented escape hatch for self-hosting/proxying the UI bundle; not part of the public props.\n const { __internal_clerkUIUrl, __internal_clerkUIVersion } = props as {\n __internal_clerkUIUrl?: string;\n __internal_clerkUIVersion?: string;\n };\n\n const promise = loadClerkUIScript({\n publishableKey,\n proxyUrl: typeof props.proxyUrl === 'string' ? props.proxyUrl : undefined,\n domain: typeof props.domain === 'string' ? props.domain : undefined,\n nonce: props.nonce,\n __internal_clerkUIUrl,\n __internal_clerkUIVersion,\n }).then(() => {\n if (!window.__internal_ClerkUICtor) {\n throw new Error(\n 'Clerk: Failed to load Clerk UI from the CDN. Ensure your Content Security Policy allows the Clerk Frontend API host in `script-src`. Contact support@clerk.com.',\n );\n }\n return window.__internal_ClerkUICtor;\n });\n\n cachedClerkUI = { promise, publishableKey };\n return promise;\n}\n\nfunction createOAuthTransport(): ClerkOAuthTransport | undefined {\n const bridge = window.__clerk_internal_electron?.oauthTransport;\n\n if (!bridge) {\n return undefined;\n }\n\n return {\n getRedirectUrl: () => bridge.getRedirectUrl(),\n open: url => bridge.open(url.href),\n };\n}\n\ntype ClerkRouterFn = NonNullable<ReactClerkProviderProps['routerPush']>;\n\n/** Always supplied, so clerk-js never reaches `window.location` and reloads the renderer. */\nfunction createRouterHandlers(\n routerPush: ClerkRouterFn | undefined,\n routerReplace: ClerkRouterFn | undefined,\n): { routerPush: ClerkRouterFn; routerReplace: ClerkRouterFn } {\n const wrap =\n (delegate: ClerkRouterFn | undefined): ClerkRouterFn =>\n (to, metadata) => {\n if (isVirtualRouterPath(to)) {\n return;\n }\n\n if (delegate) {\n return delegate(to, metadata);\n }\n\n metadata?.windowNavigate(to);\n };\n\n return { routerPush: wrap(routerPush), routerReplace: wrap(routerReplace) };\n}\n\n/**\n * Infer the custom renderer scheme registered with `createClerkBridge({ renderer })`.\n * Built-in Clerk protocols and local file renderers are not inferred.\n */\nfunction defaultAllowedRedirectProtocols(): string[] | undefined {\n const protocol = typeof window !== 'undefined' ? window.location?.protocol : undefined;\n\n if (!protocol || ALLOWED_PROTOCOLS.includes(protocol) || protocol === 'file:') {\n return undefined;\n }\n\n return [protocol];\n}\n\nexport function ClerkProvider({\n children,\n publishableKey,\n passkeys,\n allowedRedirectProtocols,\n routerPush,\n routerReplace,\n ...props\n}: ClerkProviderProps): JSX.Element {\n const clerk = createClerkInstance(publishableKey, passkeys);\n const oauthTransport = createOAuthTransport();\n const clerkUI = loadClerkUI(publishableKey, props);\n const routerHandlers = createRouterHandlers(routerPush, routerReplace);\n\n return (\n <ReactClerkProvider\n {...props}\n {...routerHandlers}\n sdkMetadata={SDK_METADATA}\n Clerk={clerk}\n __internal_oauthTransport={oauthTransport}\n allowedRedirectProtocols={allowedRedirectProtocols ?? defaultAllowedRedirectProtocols()}\n publishableKey={publishableKey}\n standardBrowser={false}\n ui={{ ClerkUI: clerkUI }}\n >\n {children}\n </ReactClerkProvider>\n );\n}\n\nexport * from '@clerk/react';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["Clerk","ALLOWED_PROTOCOLS","ReactClerkProvider"],"sources":["../../../src/react/create-clerk-instance.ts","../../../src/react/index.tsx"],"sourcesContent":["import { Clerk } from '@clerk/clerk-js';\n\n// Type-only import: the passkeys module is only bundled when the app imports\n// `@clerk/electron/passkeys` itself.\nimport type { PasskeySupport } from '../passkeys';\n\nconst CLERK_CLIENT_JWT_KEY = '__clerk_client_jwt';\n\ntype ClerkInstance = InstanceType<typeof Clerk>;\n\nlet cached: { instance: ClerkInstance; publishableKey: string } | null = null;\n\nfunction attachPasskeys(clerk: ClerkInstance, passkeys: PasskeySupport): void {\n clerk.__internal_createPublicCredentials = passkeys.create;\n clerk.__internal_getPublicCredentials = passkeys.get;\n clerk.__internal_isWebAuthnSupported = passkeys.isSupported;\n clerk.__internal_isWebAuthnAutofillSupported = passkeys.isAutoFillSupported;\n clerk.__internal_isWebAuthnPlatformAuthenticatorSupported = passkeys.isPlatformAuthenticatorSupported;\n}\n\nexport function createClerkInstance(publishableKey: string, passkeys?: PasskeySupport): ClerkInstance {\n if (cached?.publishableKey === publishableKey) {\n if (passkeys) {\n attachPasskeys(cached.instance, passkeys);\n }\n return cached.instance;\n }\n\n const clerk = new Clerk(publishableKey);\n\n if (passkeys) {\n attachPasskeys(clerk, passkeys);\n }\n\n clerk.__internal_onBeforeRequest(async request => {\n request.credentials = 'omit';\n request.url?.searchParams.append('_is_native', '1');\n request.url?.searchParams.append('_electron_sdk_version', PACKAGE_VERSION);\n\n const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);\n if (token) {\n const headers = new Headers(request.headers);\n headers.set('Authorization', `Bearer ${token}`);\n request.headers = headers;\n }\n });\n\n clerk.__internal_onAfterResponse(async (_request, response) => {\n const authorization = (response as Response).headers.get('Authorization');\n if (!authorization) {\n return;\n }\n\n const token = authorization.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : authorization;\n await window.__clerk_internal_electron?.tokenCache.saveToken(CLERK_CLIENT_JWT_KEY, token);\n });\n\n cached = { instance: clerk, publishableKey };\n return clerk;\n}\n","import type { ClerkProviderProps as ReactClerkProviderProps } from '@clerk/react';\nimport { InternalClerkProvider as ReactClerkProvider } from '@clerk/react/internal';\nimport { isVirtualRouterPath } from '@clerk/shared/internal/clerk-js/url';\nimport { ALLOWED_PROTOCOLS } from '@clerk/shared/internal/clerk-js/windowNavigate';\nimport { loadClerkUIScript } from '@clerk/shared/loadClerkJsScript';\nimport type { ClerkUIConstructor } from '@clerk/shared/ui';\nimport type { ReactNode } from 'react';\n\nimport type { PasskeySupport } from '../passkeys';\nimport { createClerkInstance } from './create-clerk-instance';\n\ntype ClerkOAuthTransport = NonNullable<ReactClerkProviderProps['__internal_oauthTransport']>;\n\nexport type ClerkProviderProps = Omit<\n ReactClerkProviderProps,\n 'Clerk' | 'children' | 'publishableKey' | 'standardBrowser' | 'ui' | '__internal_oauthTransport'\n> & {\n children: ReactNode;\n /**\n * Your Clerk publishable key, available in the Clerk Dashboard.\n */\n publishableKey: string;\n /**\n * Enables passkey support. Pass the `passkeys` export from `@clerk/electron/passkeys`;\n * when omitted, no passkey code is bundled or initialized.\n *\n * @example\n * ```tsx\n * import { passkeys } from '@clerk/electron/passkeys';\n *\n * <ClerkProvider publishableKey={publishableKey} passkeys={passkeys} />\n * ```\n */\n passkeys?: PasskeySupport;\n};\n\nconst SDK_METADATA = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nlet cachedClerkUI: { promise: Promise<ClerkUIConstructor>; publishableKey: string } | null = null;\n\nfunction loadClerkUI(publishableKey: string, props: Partial<ClerkProviderProps>): Promise<ClerkUIConstructor> {\n if (cachedClerkUI?.publishableKey === publishableKey) {\n return cachedClerkUI.promise;\n }\n\n // Undocumented escape hatch for self-hosting/proxying the UI bundle; not part of the public props.\n const { __internal_clerkUIUrl, __internal_clerkUIVersion } = props as {\n __internal_clerkUIUrl?: string;\n __internal_clerkUIVersion?: string;\n };\n\n const promise = loadClerkUIScript({\n publishableKey,\n proxyUrl: typeof props.proxyUrl === 'string' ? props.proxyUrl : undefined,\n domain: typeof props.domain === 'string' ? props.domain : undefined,\n nonce: props.nonce,\n __internal_clerkUIUrl,\n __internal_clerkUIVersion,\n }).then(() => {\n if (!window.__internal_ClerkUICtor) {\n throw new Error(\n 'Clerk: Failed to load Clerk UI from the CDN. Ensure your Content Security Policy allows the Clerk Frontend API host in `script-src`. Contact support@clerk.com.',\n );\n }\n return window.__internal_ClerkUICtor;\n });\n\n cachedClerkUI = { promise, publishableKey };\n return promise;\n}\n\nfunction createOAuthTransport(): ClerkOAuthTransport | undefined {\n const bridge = window.__clerk_internal_electron?.oauthTransport;\n\n if (!bridge) {\n return undefined;\n }\n\n return {\n getRedirectUrl: () => bridge.getRedirectUrl(),\n open: url => bridge.open(url.href),\n };\n}\n\ntype ClerkRouterFn = NonNullable<ReactClerkProviderProps['routerPush']>;\n\n/** Always supplied, so clerk-js never reaches `window.location` and reloads the renderer. */\nfunction createRouterHandlers(\n routerPush: ClerkRouterFn | undefined,\n routerReplace: ClerkRouterFn | undefined,\n): { routerPush: ClerkRouterFn; routerReplace: ClerkRouterFn } {\n const wrap =\n (delegate: ClerkRouterFn | undefined): ClerkRouterFn =>\n (to, metadata) => {\n if (isVirtualRouterPath(to)) {\n return;\n }\n\n if (delegate) {\n return delegate(to, metadata);\n }\n\n metadata?.windowNavigate(to);\n };\n\n return { routerPush: wrap(routerPush), routerReplace: wrap(routerReplace) };\n}\n\n/**\n * Infer the custom renderer scheme registered with `createClerkBridge({ renderer })`.\n * Built-in Clerk protocols and local file renderers are not inferred.\n */\nfunction defaultAllowedRedirectProtocols(): string[] | undefined {\n const protocol = typeof window !== 'undefined' ? window.location?.protocol : undefined;\n\n if (!protocol || ALLOWED_PROTOCOLS.includes(protocol) || protocol === 'file:') {\n return undefined;\n }\n\n return [protocol];\n}\n\nexport function ClerkProvider({\n children,\n publishableKey,\n passkeys,\n allowedRedirectProtocols,\n routerPush,\n routerReplace,\n ...props\n}: ClerkProviderProps): JSX.Element {\n const clerk = createClerkInstance(publishableKey, passkeys);\n const oauthTransport = createOAuthTransport();\n const clerkUI = loadClerkUI(publishableKey, props);\n const routerHandlers = createRouterHandlers(routerPush, routerReplace);\n\n return (\n <ReactClerkProvider\n {...props}\n {...routerHandlers}\n sdkMetadata={SDK_METADATA}\n Clerk={clerk}\n __internal_oauthTransport={oauthTransport}\n allowedRedirectProtocols={allowedRedirectProtocols ?? defaultAllowedRedirectProtocols()}\n publishableKey={publishableKey}\n standardBrowser={false}\n ui={{ ClerkUI: clerkUI }}\n >\n {children}\n </ReactClerkProvider>\n );\n}\n\nexport * from '@clerk/react';\n"],"mappings":"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"}
@@ -27,7 +27,7 @@ function createClerkInstance(publishableKey, passkeys) {
27
27
  clerk.__internal_onBeforeRequest(async (request) => {
28
28
  request.credentials = "omit";
29
29
  request.url?.searchParams.append("_is_native", "1");
30
- request.url?.searchParams.append("_electron_sdk_version", "0.1.4-snapshot.v20261021181323");
30
+ request.url?.searchParams.append("_electron_sdk_version", "0.1.4");
31
31
  const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);
32
32
  if (token) {
33
33
  const headers = new Headers(request.headers);
@@ -52,7 +52,7 @@ function createClerkInstance(publishableKey, passkeys) {
52
52
  //#region src/react/index.tsx
53
53
  const SDK_METADATA = {
54
54
  name: "@clerk/electron",
55
- version: "0.1.4-snapshot.v20261021181323"
55
+ version: "0.1.4"
56
56
  };
57
57
  let cachedClerkUI = null;
58
58
  function loadClerkUI(publishableKey, props) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ReactClerkProvider"],"sources":["../../../src/react/create-clerk-instance.ts","../../../src/react/index.tsx"],"sourcesContent":["import { Clerk } from '@clerk/clerk-js';\n\n// Type-only import: the passkeys module is only bundled when the app imports\n// `@clerk/electron/passkeys` itself.\nimport type { PasskeySupport } from '../passkeys';\n\nconst CLERK_CLIENT_JWT_KEY = '__clerk_client_jwt';\n\ntype ClerkInstance = InstanceType<typeof Clerk>;\n\nlet cached: { instance: ClerkInstance; publishableKey: string } | null = null;\n\nfunction attachPasskeys(clerk: ClerkInstance, passkeys: PasskeySupport): void {\n clerk.__internal_createPublicCredentials = passkeys.create;\n clerk.__internal_getPublicCredentials = passkeys.get;\n clerk.__internal_isWebAuthnSupported = passkeys.isSupported;\n clerk.__internal_isWebAuthnAutofillSupported = passkeys.isAutoFillSupported;\n clerk.__internal_isWebAuthnPlatformAuthenticatorSupported = passkeys.isPlatformAuthenticatorSupported;\n}\n\nexport function createClerkInstance(publishableKey: string, passkeys?: PasskeySupport): ClerkInstance {\n if (cached?.publishableKey === publishableKey) {\n if (passkeys) {\n attachPasskeys(cached.instance, passkeys);\n }\n return cached.instance;\n }\n\n const clerk = new Clerk(publishableKey);\n\n if (passkeys) {\n attachPasskeys(clerk, passkeys);\n }\n\n clerk.__internal_onBeforeRequest(async request => {\n request.credentials = 'omit';\n request.url?.searchParams.append('_is_native', '1');\n request.url?.searchParams.append('_electron_sdk_version', PACKAGE_VERSION);\n\n const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);\n if (token) {\n const headers = new Headers(request.headers);\n headers.set('Authorization', `Bearer ${token}`);\n request.headers = headers;\n }\n });\n\n clerk.__internal_onAfterResponse(async (_request, response) => {\n const authorization = (response as Response).headers.get('Authorization');\n if (!authorization) {\n return;\n }\n\n const token = authorization.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : authorization;\n await window.__clerk_internal_electron?.tokenCache.saveToken(CLERK_CLIENT_JWT_KEY, token);\n });\n\n cached = { instance: clerk, publishableKey };\n return clerk;\n}\n","import type { ClerkProviderProps as ReactClerkProviderProps } from '@clerk/react';\nimport { InternalClerkProvider as ReactClerkProvider } from '@clerk/react/internal';\nimport { isVirtualRouterPath } from '@clerk/shared/internal/clerk-js/url';\nimport { ALLOWED_PROTOCOLS } from '@clerk/shared/internal/clerk-js/windowNavigate';\nimport { loadClerkUIScript } from '@clerk/shared/loadClerkJsScript';\nimport type { ClerkUIConstructor } from '@clerk/shared/ui';\nimport type { ReactNode } from 'react';\n\nimport type { PasskeySupport } from '../passkeys';\nimport { createClerkInstance } from './create-clerk-instance';\n\ntype ClerkOAuthTransport = NonNullable<ReactClerkProviderProps['__internal_oauthTransport']>;\n\nexport type ClerkProviderProps = Omit<\n ReactClerkProviderProps,\n 'Clerk' | 'children' | 'publishableKey' | 'standardBrowser' | 'ui' | '__internal_oauthTransport'\n> & {\n children: ReactNode;\n /**\n * Your Clerk publishable key, available in the Clerk Dashboard.\n */\n publishableKey: string;\n /**\n * Enables passkey support. Pass the `passkeys` export from `@clerk/electron/passkeys`;\n * when omitted, no passkey code is bundled or initialized.\n *\n * @example\n * ```tsx\n * import { passkeys } from '@clerk/electron/passkeys';\n *\n * <ClerkProvider publishableKey={publishableKey} passkeys={passkeys} />\n * ```\n */\n passkeys?: PasskeySupport;\n};\n\nconst SDK_METADATA = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nlet cachedClerkUI: { promise: Promise<ClerkUIConstructor>; publishableKey: string } | null = null;\n\nfunction loadClerkUI(publishableKey: string, props: Partial<ClerkProviderProps>): Promise<ClerkUIConstructor> {\n if (cachedClerkUI?.publishableKey === publishableKey) {\n return cachedClerkUI.promise;\n }\n\n // Undocumented escape hatch for self-hosting/proxying the UI bundle; not part of the public props.\n const { __internal_clerkUIUrl, __internal_clerkUIVersion } = props as {\n __internal_clerkUIUrl?: string;\n __internal_clerkUIVersion?: string;\n };\n\n const promise = loadClerkUIScript({\n publishableKey,\n proxyUrl: typeof props.proxyUrl === 'string' ? props.proxyUrl : undefined,\n domain: typeof props.domain === 'string' ? props.domain : undefined,\n nonce: props.nonce,\n __internal_clerkUIUrl,\n __internal_clerkUIVersion,\n }).then(() => {\n if (!window.__internal_ClerkUICtor) {\n throw new Error(\n 'Clerk: Failed to load Clerk UI from the CDN. Ensure your Content Security Policy allows the Clerk Frontend API host in `script-src`. Contact support@clerk.com.',\n );\n }\n return window.__internal_ClerkUICtor;\n });\n\n cachedClerkUI = { promise, publishableKey };\n return promise;\n}\n\nfunction createOAuthTransport(): ClerkOAuthTransport | undefined {\n const bridge = window.__clerk_internal_electron?.oauthTransport;\n\n if (!bridge) {\n return undefined;\n }\n\n return {\n getRedirectUrl: () => bridge.getRedirectUrl(),\n open: url => bridge.open(url.href),\n };\n}\n\ntype ClerkRouterFn = NonNullable<ReactClerkProviderProps['routerPush']>;\n\n/** Always supplied, so clerk-js never reaches `window.location` and reloads the renderer. */\nfunction createRouterHandlers(\n routerPush: ClerkRouterFn | undefined,\n routerReplace: ClerkRouterFn | undefined,\n): { routerPush: ClerkRouterFn; routerReplace: ClerkRouterFn } {\n const wrap =\n (delegate: ClerkRouterFn | undefined): ClerkRouterFn =>\n (to, metadata) => {\n if (isVirtualRouterPath(to)) {\n return;\n }\n\n if (delegate) {\n return delegate(to, metadata);\n }\n\n metadata?.windowNavigate(to);\n };\n\n return { routerPush: wrap(routerPush), routerReplace: wrap(routerReplace) };\n}\n\n/**\n * Infer the custom renderer scheme registered with `createClerkBridge({ renderer })`.\n * Built-in Clerk protocols and local file renderers are not inferred.\n */\nfunction defaultAllowedRedirectProtocols(): string[] | undefined {\n const protocol = typeof window !== 'undefined' ? window.location?.protocol : undefined;\n\n if (!protocol || ALLOWED_PROTOCOLS.includes(protocol) || protocol === 'file:') {\n return undefined;\n }\n\n return [protocol];\n}\n\nexport function ClerkProvider({\n children,\n publishableKey,\n passkeys,\n allowedRedirectProtocols,\n routerPush,\n routerReplace,\n ...props\n}: ClerkProviderProps): JSX.Element {\n const clerk = createClerkInstance(publishableKey, passkeys);\n const oauthTransport = createOAuthTransport();\n const clerkUI = loadClerkUI(publishableKey, props);\n const routerHandlers = createRouterHandlers(routerPush, routerReplace);\n\n return (\n <ReactClerkProvider\n {...props}\n {...routerHandlers}\n sdkMetadata={SDK_METADATA}\n Clerk={clerk}\n __internal_oauthTransport={oauthTransport}\n allowedRedirectProtocols={allowedRedirectProtocols ?? defaultAllowedRedirectProtocols()}\n publishableKey={publishableKey}\n standardBrowser={false}\n ui={{ ClerkUI: clerkUI }}\n >\n {children}\n </ReactClerkProvider>\n );\n}\n\nexport * from '@clerk/react';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["ReactClerkProvider"],"sources":["../../../src/react/create-clerk-instance.ts","../../../src/react/index.tsx"],"sourcesContent":["import { Clerk } from '@clerk/clerk-js';\n\n// Type-only import: the passkeys module is only bundled when the app imports\n// `@clerk/electron/passkeys` itself.\nimport type { PasskeySupport } from '../passkeys';\n\nconst CLERK_CLIENT_JWT_KEY = '__clerk_client_jwt';\n\ntype ClerkInstance = InstanceType<typeof Clerk>;\n\nlet cached: { instance: ClerkInstance; publishableKey: string } | null = null;\n\nfunction attachPasskeys(clerk: ClerkInstance, passkeys: PasskeySupport): void {\n clerk.__internal_createPublicCredentials = passkeys.create;\n clerk.__internal_getPublicCredentials = passkeys.get;\n clerk.__internal_isWebAuthnSupported = passkeys.isSupported;\n clerk.__internal_isWebAuthnAutofillSupported = passkeys.isAutoFillSupported;\n clerk.__internal_isWebAuthnPlatformAuthenticatorSupported = passkeys.isPlatformAuthenticatorSupported;\n}\n\nexport function createClerkInstance(publishableKey: string, passkeys?: PasskeySupport): ClerkInstance {\n if (cached?.publishableKey === publishableKey) {\n if (passkeys) {\n attachPasskeys(cached.instance, passkeys);\n }\n return cached.instance;\n }\n\n const clerk = new Clerk(publishableKey);\n\n if (passkeys) {\n attachPasskeys(clerk, passkeys);\n }\n\n clerk.__internal_onBeforeRequest(async request => {\n request.credentials = 'omit';\n request.url?.searchParams.append('_is_native', '1');\n request.url?.searchParams.append('_electron_sdk_version', PACKAGE_VERSION);\n\n const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);\n if (token) {\n const headers = new Headers(request.headers);\n headers.set('Authorization', `Bearer ${token}`);\n request.headers = headers;\n }\n });\n\n clerk.__internal_onAfterResponse(async (_request, response) => {\n const authorization = (response as Response).headers.get('Authorization');\n if (!authorization) {\n return;\n }\n\n const token = authorization.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : authorization;\n await window.__clerk_internal_electron?.tokenCache.saveToken(CLERK_CLIENT_JWT_KEY, token);\n });\n\n cached = { instance: clerk, publishableKey };\n return clerk;\n}\n","import type { ClerkProviderProps as ReactClerkProviderProps } from '@clerk/react';\nimport { InternalClerkProvider as ReactClerkProvider } from '@clerk/react/internal';\nimport { isVirtualRouterPath } from '@clerk/shared/internal/clerk-js/url';\nimport { ALLOWED_PROTOCOLS } from '@clerk/shared/internal/clerk-js/windowNavigate';\nimport { loadClerkUIScript } from '@clerk/shared/loadClerkJsScript';\nimport type { ClerkUIConstructor } from '@clerk/shared/ui';\nimport type { ReactNode } from 'react';\n\nimport type { PasskeySupport } from '../passkeys';\nimport { createClerkInstance } from './create-clerk-instance';\n\ntype ClerkOAuthTransport = NonNullable<ReactClerkProviderProps['__internal_oauthTransport']>;\n\nexport type ClerkProviderProps = Omit<\n ReactClerkProviderProps,\n 'Clerk' | 'children' | 'publishableKey' | 'standardBrowser' | 'ui' | '__internal_oauthTransport'\n> & {\n children: ReactNode;\n /**\n * Your Clerk publishable key, available in the Clerk Dashboard.\n */\n publishableKey: string;\n /**\n * Enables passkey support. Pass the `passkeys` export from `@clerk/electron/passkeys`;\n * when omitted, no passkey code is bundled or initialized.\n *\n * @example\n * ```tsx\n * import { passkeys } from '@clerk/electron/passkeys';\n *\n * <ClerkProvider publishableKey={publishableKey} passkeys={passkeys} />\n * ```\n */\n passkeys?: PasskeySupport;\n};\n\nconst SDK_METADATA = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nlet cachedClerkUI: { promise: Promise<ClerkUIConstructor>; publishableKey: string } | null = null;\n\nfunction loadClerkUI(publishableKey: string, props: Partial<ClerkProviderProps>): Promise<ClerkUIConstructor> {\n if (cachedClerkUI?.publishableKey === publishableKey) {\n return cachedClerkUI.promise;\n }\n\n // Undocumented escape hatch for self-hosting/proxying the UI bundle; not part of the public props.\n const { __internal_clerkUIUrl, __internal_clerkUIVersion } = props as {\n __internal_clerkUIUrl?: string;\n __internal_clerkUIVersion?: string;\n };\n\n const promise = loadClerkUIScript({\n publishableKey,\n proxyUrl: typeof props.proxyUrl === 'string' ? props.proxyUrl : undefined,\n domain: typeof props.domain === 'string' ? props.domain : undefined,\n nonce: props.nonce,\n __internal_clerkUIUrl,\n __internal_clerkUIVersion,\n }).then(() => {\n if (!window.__internal_ClerkUICtor) {\n throw new Error(\n 'Clerk: Failed to load Clerk UI from the CDN. Ensure your Content Security Policy allows the Clerk Frontend API host in `script-src`. Contact support@clerk.com.',\n );\n }\n return window.__internal_ClerkUICtor;\n });\n\n cachedClerkUI = { promise, publishableKey };\n return promise;\n}\n\nfunction createOAuthTransport(): ClerkOAuthTransport | undefined {\n const bridge = window.__clerk_internal_electron?.oauthTransport;\n\n if (!bridge) {\n return undefined;\n }\n\n return {\n getRedirectUrl: () => bridge.getRedirectUrl(),\n open: url => bridge.open(url.href),\n };\n}\n\ntype ClerkRouterFn = NonNullable<ReactClerkProviderProps['routerPush']>;\n\n/** Always supplied, so clerk-js never reaches `window.location` and reloads the renderer. */\nfunction createRouterHandlers(\n routerPush: ClerkRouterFn | undefined,\n routerReplace: ClerkRouterFn | undefined,\n): { routerPush: ClerkRouterFn; routerReplace: ClerkRouterFn } {\n const wrap =\n (delegate: ClerkRouterFn | undefined): ClerkRouterFn =>\n (to, metadata) => {\n if (isVirtualRouterPath(to)) {\n return;\n }\n\n if (delegate) {\n return delegate(to, metadata);\n }\n\n metadata?.windowNavigate(to);\n };\n\n return { routerPush: wrap(routerPush), routerReplace: wrap(routerReplace) };\n}\n\n/**\n * Infer the custom renderer scheme registered with `createClerkBridge({ renderer })`.\n * Built-in Clerk protocols and local file renderers are not inferred.\n */\nfunction defaultAllowedRedirectProtocols(): string[] | undefined {\n const protocol = typeof window !== 'undefined' ? window.location?.protocol : undefined;\n\n if (!protocol || ALLOWED_PROTOCOLS.includes(protocol) || protocol === 'file:') {\n return undefined;\n }\n\n return [protocol];\n}\n\nexport function ClerkProvider({\n children,\n publishableKey,\n passkeys,\n allowedRedirectProtocols,\n routerPush,\n routerReplace,\n ...props\n}: ClerkProviderProps): JSX.Element {\n const clerk = createClerkInstance(publishableKey, passkeys);\n const oauthTransport = createOAuthTransport();\n const clerkUI = loadClerkUI(publishableKey, props);\n const routerHandlers = createRouterHandlers(routerPush, routerReplace);\n\n return (\n <ReactClerkProvider\n {...props}\n {...routerHandlers}\n sdkMetadata={SDK_METADATA}\n Clerk={clerk}\n __internal_oauthTransport={oauthTransport}\n allowedRedirectProtocols={allowedRedirectProtocols ?? defaultAllowedRedirectProtocols()}\n publishableKey={publishableKey}\n standardBrowser={false}\n ui={{ ClerkUI: clerkUI }}\n >\n {children}\n </ReactClerkProvider>\n );\n}\n\nexport * from '@clerk/react';\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clerk/electron",
3
- "version": "0.1.4-snapshot.v20261021181323",
3
+ "version": "0.1.4",
4
4
  "description": "Clerk SDK for Electron",
5
5
  "keywords": [
6
6
  "clerk",
@@ -90,23 +90,22 @@
90
90
  "module": "./dist/esm/index.js",
91
91
  "types": "./dist/types/index.d.ts",
92
92
  "files": [
93
- "AGENTS.md",
94
93
  "dist"
95
94
  ],
96
95
  "dependencies": {
97
96
  "tslib": "2.8.1",
98
- "@clerk/clerk-js": "6.40.1-snapshot.v20261021181323",
99
- "@clerk/react": "6.19.0-snapshot.v20261021181323",
100
- "@clerk/shared": "4.42.0-snapshot.v20261021181323"
97
+ "@clerk/clerk-js": "^6.40.1",
98
+ "@clerk/react": "^6.18.1",
99
+ "@clerk/shared": "^4.41.1"
101
100
  },
102
101
  "devDependencies": {
103
102
  "@types/node": "^22.20.1",
104
103
  "electron": "^39.2.6",
105
104
  "electron-store": "^8.2.0",
106
- "@clerk/electron-passkeys": "0.0.4-snapshot.v20261021181323"
105
+ "@clerk/electron-passkeys": "0.0.3"
107
106
  },
108
107
  "peerDependencies": {
109
- "@clerk/electron-passkeys": "0.0.4-snapshot.v20261021181323",
108
+ "@clerk/electron-passkeys": "*",
110
109
  "electron": ">=28",
111
110
  "electron-store": "^8.2.0",
112
111
  "react": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0",
package/AGENTS.md DELETED
@@ -1,33 +0,0 @@
1
- ## Clerk + Electron
2
-
3
- Read the installed `@clerk/electron` types before changing auth code. If a symbol is not in those types, it does not exist.
4
-
5
- ### Current APIs
6
-
7
- - In the main process, call `createClerkBridge({ storage: storage(), renderer: { scheme, host } })` from `@clerk/electron`, with `storage` from `@clerk/electron/storage`. Call it before `app.whenReady()`.
8
- - In the preload script, call `exposeClerkBridge()` from `@clerk/electron/preload`.
9
- - In the renderer, import `ClerkProvider`, hooks, and components from `@clerk/electron/react`, not `@clerk/react`.
10
- - `<SignedIn>`, `<SignedOut>`, and `<Protect>` were removed in Core 3. Use `<Show when="signed-in">` or `<Show when="signed-out">`.
11
- - For passkeys, pass `passkeys` from `@clerk/electron/passkeys` to `ClerkProvider`.
12
- - Clerk Elements is removed. Never use it.
13
-
14
- <!-- BEGIN:clerk-plugin -->
15
-
16
- ### Clerk plugin
17
-
18
- The Clerk plugin gives agents Clerk's skills and MCP server. If it is not installed, tell the user they can install it. Do not run the command yourself:
19
-
20
- ```sh
21
- npx plugins add clerk/skills
22
- ```
23
-
24
- Install steps for each tool: https://clerk.com/docs/guides/ai/overview
25
- Source: https://github.com/clerk/skills
26
-
27
- Ask the user before calling any Clerk tool that creates or changes something in their Clerk account.
28
-
29
- ### Docs
30
-
31
- Start at https://clerk.com/docs/llms.txt. Add `.md` to any docs URL to get Markdown.
32
-
33
- <!-- END:clerk-plugin -->