@absolutejs/auth 0.56.19 → 0.57.1

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.
Files changed (52) hide show
  1. package/dist/agents/index.js +44 -37
  2. package/dist/agents/index.js.map +7 -7
  3. package/dist/audit/postgresAuditStore.d.ts +1 -1
  4. package/dist/audit/types.d.ts +2 -0
  5. package/dist/audit/wrap.d.ts +4 -2
  6. package/dist/cli/import/auth0.d.ts +1 -1
  7. package/dist/cli/import/clerk.d.ts +1 -1
  8. package/dist/cli/import/lucia.d.ts +1 -1
  9. package/dist/cli/import/nextauth.d.ts +1 -1
  10. package/dist/cli/import/types.d.ts +1 -0
  11. package/dist/cli/migrate.js +91 -47
  12. package/dist/cli/migrate.js.map +14 -13
  13. package/dist/client/react.d.ts +21 -21
  14. package/dist/client/react.js +35 -37
  15. package/dist/client/react.js.map +6 -6
  16. package/dist/client/solid.d.ts +21 -21
  17. package/dist/client/solid.js +24 -24
  18. package/dist/client/solid.js.map +3 -3
  19. package/dist/client/svelte.d.ts +21 -21
  20. package/dist/client/svelte.js +25 -25
  21. package/dist/client/svelte.js.map +3 -3
  22. package/dist/client/vue.d.ts +21 -21
  23. package/dist/client/vue.js +32 -32
  24. package/dist/client/vue.js.map +3 -3
  25. package/dist/credentials/import.d.ts +16 -1
  26. package/dist/credentials/register.d.ts +1 -1
  27. package/dist/credentials/routes.d.ts +1 -1
  28. package/dist/fingerprint-client/index.js +4 -3
  29. package/dist/fingerprint-client/index.js.map +3 -3
  30. package/dist/index.d.ts +4 -4
  31. package/dist/index.js +6416 -262
  32. package/dist/index.js.map +166 -26
  33. package/dist/manifest.js +3713 -271
  34. package/dist/manifest.js.map +30 -4
  35. package/dist/manifest.json +3 -2
  36. package/dist/oidc/clientIdMetadata.d.ts +1 -5
  37. package/dist/oidc/index.js.map +2 -2
  38. package/dist/oidc/routes.d.ts +1 -1
  39. package/dist/oidc/vci.d.ts +1 -1
  40. package/dist/routes/callback.d.ts +1 -1
  41. package/dist/server.js +6412 -261
  42. package/dist/server.js.map +166 -26
  43. package/dist/session/neonStore.d.ts +2 -2
  44. package/dist/session/redisStore.d.ts +2 -2
  45. package/dist/session/types.d.ts +2 -0
  46. package/dist/stores/postgres.d.ts +2 -2
  47. package/dist/types.d.ts +2 -1
  48. package/dist/vault/index.js.map +2 -2
  49. package/dist/webauthn.js +27 -1
  50. package/dist/webauthn.js.map +3 -3
  51. package/docs/MIGRATE-FROM-LUCIA.md +19 -2
  52. package/package.json +1 -1
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/client/solid.ts", "../src/client/passkeyHelpers.ts"],
4
4
  "sourcesContent": [
5
- "// Thin Solid composables over `createAuthClient`, mirroring `./react`. Same `{ data, error,\n// isPending, mutate, reset }` shape — only the reactivity is Solid's (signals + onCleanup).\n// Bring your own form / UI; these are primitives.\n\nimport { createSignal, onCleanup, type Accessor } from 'solid-js';\nimport type { AuthClient, AuthClientError } from './createAuthClient';\nimport {\n\trunConditionalAuthentication,\n\trunPasskeyRegistration\n} from './passkeyHelpers';\n\ntype Mutator<Args, Data> = (\n\targs: Args\n) => Promise<{ data: Data | null; error: AuthClientError | null }>;\n\ntype MutationState<Args, Data> = {\n\tdata: Accessor<Data | null>;\n\terror: Accessor<AuthClientError | null>;\n\tisPending: Accessor<boolean>;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation composable. The exported composables are 1-2 line specializations of\n// this — kept private so consumers depend on the named API, not this internal shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst [data, setData] = createSignal<Data | null>(null);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(false);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst mutate: Mutator<Args, Data> = async (args) => {\n\t\tsetIsPending(true);\n\t\tsetError(null);\n\t\tconst result = await run(args);\n\t\tif (alive) {\n\t\t\t// Solid's setter accepts a value or a setter-fn; the fn-form keeps Data | null\n\t\t\t// passing through without narrowing the writable signal's value type.\n\t\t\tsetData(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconst reset = () => {\n\t\tsetData(() => null);\n\t\tsetError(null);\n\t\tsetIsPending(false);\n\t};\n\n\treturn { data, error, isPending, mutate, reset };\n};\n\nexport const useMagicLink = (client: AuthClient) =>\n\tuseMutation(client.passwordless.requestMagicLink);\n\n// Conditional-UI WebAuthn see the React doc for the wire-up pattern.\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst [data, setData] = createSignal<{ status: 'authenticated' } | null>(\n\t\tnull\n\t);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(false);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst start = async () => {\n\t\tsetIsPending(true);\n\t\tsetError(null);\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tif (alive) {\n\t\t\tsetData(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t};\n\n\tconst cancel = () => {\n\t\tsetIsPending(false);\n\t};\n\n\treturn { cancel, data, error, isPending, start };\n};\n\n// \"Upgrade to passkey\" prompt see the React doc.\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst [passkeys, setPasskeys] = createSignal<unknown[] | null>(null);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(true);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.passkeys.list();\n\t\tif (alive) {\n\t\t\tsetPasskeys(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t};\n\n\tconst register = async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\tconst shouldPrompt = () => {\n\t\tconst list = passkeys();\n\n\t\treturn list !== null && list.length === 0;\n\t};\n\n\treturn { error, isPending, passkeys, refetch, register, shouldPrompt };\n};\n\nexport const useMfaChallenge = (client: AuthClient) =>\n\tuseMutation(client.mfa.challenge);\n\nexport const usePasswordReset = (client: AuthClient) =>\n\tuseMutation(client.passwordReset.request);\n\n// Query composable for the user's active sessions; refetch() reruns it, revoke(sessionId)\n// kills one and refetches. Same `{ data, error, isPending }` triplet as the mutations so\n// the consumer can render one way.\nexport const useSessions = (client: AuthClient) => {\n\tconst [data, setData] = createSignal<unknown[] | null>(null);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(true);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.sessions.list();\n\t\tif (alive) {\n\t\t\tsetData(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t};\n\n\tconst revoke = async (sessionId: string) => {\n\t\tconst result = await client.sessions.revoke(sessionId);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { data, error, isPending, refetch, revoke };\n};\n\nexport const useSignIn = (client: AuthClient) =>\n\tuseMutation(client.signIn.email);\n\nexport const useSignOut = (client: AuthClient) => useMutation(client.signOut);\n\nexport const useSignUp = (client: AuthClient) =>\n\tuseMutation(client.signUp.email);\n",
5
+ "// Thin Solid composables over `createAuthClient`, mirroring `./react`. Same `{ data, error,\n// isPending, mutate, reset }` shape — only the reactivity is Solid's (signals + onCleanup).\n// Bring your own form / UI; these are primitives.\n\nimport { createSignal, onCleanup, type Accessor } from 'solid-js';\nimport type { AuthClient, AuthClientError } from './createAuthClient';\nimport {\n\trunConditionalAuthentication,\n\trunPasskeyRegistration\n} from './passkeyHelpers';\n\ntype Mutator<Args, Data> = (\n\targs: Args\n) => Promise<{ data: Data | null; error: AuthClientError | null }>;\n\ntype MutationState<Args, Data> = {\n\tdata: Accessor<Data | null>;\n\terror: Accessor<AuthClientError | null>;\n\tisPending: Accessor<boolean>;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation composable. The exported composables are 1-2 line specializations of\n// this — kept private so consumers depend on the named API, not this internal shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst [data, setData] = createSignal<Data | null>(null);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(false);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst mutate: Mutator<Args, Data> = async (args) => {\n\t\tsetIsPending(true);\n\t\tsetError(null);\n\t\tconst result = await run(args);\n\t\tif (alive) {\n\t\t\t// Solid's setter accepts a value or a setter-fn; the fn-form keeps Data | null\n\t\t\t// passing through without narrowing the writable signal's value type.\n\t\t\tsetData(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconst reset = () => {\n\t\tsetData(() => null);\n\t\tsetError(null);\n\t\tsetIsPending(false);\n\t};\n\n\treturn { data, error, isPending, mutate, reset };\n};\n\nexport const useMagicLink = (client: AuthClient) =>\n\tuseMutation(client.passwordless.requestMagicLink);\nexport const useMfaChallenge = (client: AuthClient) =>\n\tuseMutation(client.mfa.challenge);\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst [data, setData] = createSignal<{ status: 'authenticated' } | null>(\n\t\tnull\n\t);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(false);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst start = async () => {\n\t\tsetIsPending(true);\n\t\tsetError(null);\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tif (alive) {\n\t\t\tsetData(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t};\n\n\tconst cancel = () => {\n\t\tsetIsPending(false);\n\t};\n\n\treturn { cancel, data, error, isPending, start };\n};\nexport const usePasswordReset = (client: AuthClient) =>\n\tuseMutation(client.passwordReset.request);\nexport const useSessions = (client: AuthClient) => {\n\tconst [data, setData] = createSignal<unknown[] | null>(null);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(true);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.sessions.list();\n\t\tif (alive) {\n\t\t\tsetData(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t};\n\n\tconst revoke = async (sessionId: string) => {\n\t\tconst result = await client.sessions.revoke(sessionId);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { data, error, isPending, refetch, revoke };\n};\nexport const useSignIn = (client: AuthClient) =>\n\tuseMutation(client.signIn.email);\nexport const useSignOut = (client: AuthClient) => useMutation(client.signOut);\nexport const useSignUp = (client: AuthClient) =>\n\tuseMutation(client.signUp.email);\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst [passkeys, setPasskeys] = createSignal<unknown[] | null>(null);\n\tconst [error, setError] = createSignal<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = createSignal(true);\n\tlet alive = true;\n\tonCleanup(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.passkeys.list();\n\t\tif (alive) {\n\t\t\tsetPasskeys(() => result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t};\n\n\tconst register = async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\tconst shouldPrompt = () => {\n\t\tconst list = passkeys();\n\n\t\treturn list !== null && list.length === 0;\n\t};\n\n\treturn { error, isPending, passkeys, refetch, register, shouldPrompt };\n};\n",
6
6
  "// Framework-agnostic glue between the WebAuthn ceremonies the package exposes via\n// `createAuthClient` and the browser's `navigator.credentials.{get,create}` APIs.\n// Used by the framework composables (`./react`, `./vue`, `./solid`, `./svelte`) so the\n// React + Vue + Solid + Svelte hooks all share the same imperative core; the framework\n// wrappers only add reactivity.\n//\n// `@simplewebauthn/browser` is an OPTIONAL peer dep — consumers that don't import any\n// of the passkey composables never load it. We dynamic-import lazily on first call so a\n// non-passkey consumer pays nothing at module load.\n\nimport type { AuthClient, AuthClientError } from './createAuthClient';\n\nconst loadBrowser = () => import('@simplewebauthn/browser');\n\nconst errorFor = (caught: unknown): AuthClientError => ({\n\tbody: null,\n\tmessage: caught instanceof Error ? caught.message : 'webauthn_failed',\n\tstatus: 0\n});\n\n// Runs the WebAuthn authentication ceremony in conditional-UI mode (the browser surfaces\n// saved passkeys directly via autofill on a focused `<input autocomplete=\"webauthn\">`).\n// Returns the same `{ data, error }` shape `createAuthClient` already uses, so composables\n// can pipe the result into their state setters unchanged.\nexport const runConditionalAuthentication = async (client: AuthClient) => {\n\tif (typeof window === 'undefined' || !window.PublicKeyCredential) {\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: errorFor(new Error('webauthn_unavailable'))\n\t\t};\n\t}\n\tconst options = await client.passkeys.authenticateOptions();\n\tif (options.error) return { data: null, error: options.error };\n\ttry {\n\t\tconst { startAuthentication } = await loadBrowser();\n\t\tconst credential = await startAuthentication({\n\t\t\toptionsJSON: options.data,\n\t\t\tuseBrowserAutofill: true\n\t\t});\n\n\t\treturn client.passkeys.authenticateVerify(credential);\n\t} catch (caught) {\n\t\treturn { data: null, error: errorFor(caught) };\n\t}\n};\n\n// Runs the WebAuthn registration ceremony for the currently authenticated user. Used by\n// the \"upgrade to passkey\" prompt — after a password sign-in, surface a \"save a passkey\n// to this device for next time?\" CTA.\nexport const runPasskeyRegistration = async (client: AuthClient) => {\n\tif (typeof window === 'undefined' || !window.PublicKeyCredential) {\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: errorFor(new Error('webauthn_unavailable'))\n\t\t};\n\t}\n\tconst options = await client.passkeys.registerOptions();\n\tif (options.error) return { data: null, error: options.error };\n\ttry {\n\t\tconst { startRegistration } = await loadBrowser();\n\t\tconst credential = await startRegistration({\n\t\t\toptionsJSON: options.data\n\t\t});\n\n\t\treturn client.passkeys.registerVerify(credential);\n\t} catch (caught) {\n\t\treturn { data: null, error: errorFor(caught) };\n\t}\n};\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "55D3A9D24AE5626F64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "4B1DDEBE7A756E1464756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -16,6 +16,11 @@ export declare const useMagicLink: (client: AuthClient) => MutationState<{
16
16
  }, {
17
17
  ok: true;
18
18
  }>;
19
+ export declare const useMfaChallenge: (client: AuthClient) => MutationState<{
20
+ code: string;
21
+ }, {
22
+ status: "authenticated";
23
+ }>;
19
24
  export declare const usePasskeyAutofill: (client: AuthClient) => {
20
25
  cancel: () => void;
21
26
  data: Writable<{
@@ -25,27 +30,6 @@ export declare const usePasskeyAutofill: (client: AuthClient) => {
25
30
  isPending: Writable<boolean>;
26
31
  start: () => Promise<void>;
27
32
  };
28
- export declare const useUpgradeToPasskey: (client: AuthClient) => {
29
- error: Writable<AuthClientError | null>;
30
- isPending: Writable<boolean>;
31
- passkeys: Writable<unknown[] | null>;
32
- refetch: () => Promise<void>;
33
- register: () => Promise<{
34
- data: null;
35
- error: AuthClientError;
36
- } | {
37
- data: {
38
- ok: true;
39
- };
40
- error: null;
41
- }>;
42
- shouldPrompt: Writable<boolean>;
43
- };
44
- export declare const useMfaChallenge: (client: AuthClient) => MutationState<{
45
- code: string;
46
- }, {
47
- status: "authenticated";
48
- }>;
49
33
  export declare const usePasswordReset: (client: AuthClient) => MutationState<{
50
34
  email: string;
51
35
  }, {
@@ -83,4 +67,20 @@ export declare const useSignUp: (client: AuthClient) => MutationState<{
83
67
  } | {
84
68
  status: "verification_required";
85
69
  }>;
70
+ export declare const useUpgradeToPasskey: (client: AuthClient) => {
71
+ error: Writable<AuthClientError | null>;
72
+ isPending: Writable<boolean>;
73
+ passkeys: Writable<unknown[] | null>;
74
+ refetch: () => Promise<void>;
75
+ register: () => Promise<{
76
+ data: null;
77
+ error: AuthClientError;
78
+ } | {
79
+ data: {
80
+ ok: true;
81
+ };
82
+ error: null;
83
+ }>;
84
+ shouldPrompt: Writable<boolean>;
85
+ };
86
86
  export {};
@@ -120,6 +120,7 @@ var useMutation = (run) => {
120
120
  return { data, error, isPending, mutate, reset };
121
121
  };
122
122
  var useMagicLink = (client) => useMutation(client.passwordless.requestMagicLink);
123
+ var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
123
124
  var usePasskeyAutofill = (client) => {
124
125
  const data = writable(null);
125
126
  const error = writable(null);
@@ -137,56 +138,55 @@ var usePasskeyAutofill = (client) => {
137
138
  };
138
139
  return { cancel, data, error, isPending, start };
139
140
  };
140
- var useUpgradeToPasskey = (client) => {
141
- const passkeys = writable(null);
141
+ var usePasswordReset = (client) => useMutation(client.passwordReset.request);
142
+ var useSessions = (client) => {
143
+ const data = writable(null);
142
144
  const error = writable(null);
143
145
  const isPending = writable(true);
144
- const shouldPrompt = writable(false);
145
- const recompute = (list) => {
146
- shouldPrompt.set(list !== null && list.length === 0);
147
- };
148
146
  const refetch = async () => {
149
147
  isPending.set(true);
150
- const result = await client.passkeys.list();
151
- passkeys.set(result.data);
148
+ const result = await client.sessions.list();
149
+ data.set(result.data);
152
150
  error.set(result.error);
153
151
  isPending.set(false);
154
- recompute(result.data);
155
152
  };
156
- const register = async () => {
157
- const result = await runPasskeyRegistration(client);
153
+ const revoke = async (sessionId) => {
154
+ const result = await client.sessions.revoke(sessionId);
158
155
  if (result.error === null)
159
156
  await refetch();
160
157
  return result;
161
158
  };
162
159
  refetch();
163
- return { error, isPending, passkeys, refetch, register, shouldPrompt };
160
+ return { data, error, isPending, refetch, revoke };
164
161
  };
165
- var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
166
- var usePasswordReset = (client) => useMutation(client.passwordReset.request);
167
- var useSessions = (client) => {
168
- const data = writable(null);
162
+ var useSignIn = (client) => useMutation(client.signIn.email);
163
+ var useSignOut = (client) => useMutation(client.signOut);
164
+ var useSignUp = (client) => useMutation(client.signUp.email);
165
+ var useUpgradeToPasskey = (client) => {
166
+ const passkeys = writable(null);
169
167
  const error = writable(null);
170
168
  const isPending = writable(true);
169
+ const shouldPrompt = writable(false);
170
+ const recompute = (list) => {
171
+ shouldPrompt.set(list !== null && list.length === 0);
172
+ };
171
173
  const refetch = async () => {
172
174
  isPending.set(true);
173
- const result = await client.sessions.list();
174
- data.set(result.data);
175
+ const result = await client.passkeys.list();
176
+ passkeys.set(result.data);
175
177
  error.set(result.error);
176
178
  isPending.set(false);
179
+ recompute(result.data);
177
180
  };
178
- const revoke = async (sessionId) => {
179
- const result = await client.sessions.revoke(sessionId);
181
+ const register = async () => {
182
+ const result = await runPasskeyRegistration(client);
180
183
  if (result.error === null)
181
184
  await refetch();
182
185
  return result;
183
186
  };
184
187
  refetch();
185
- return { data, error, isPending, refetch, revoke };
188
+ return { error, isPending, passkeys, refetch, register, shouldPrompt };
186
189
  };
187
- var useSignIn = (client) => useMutation(client.signIn.email);
188
- var useSignOut = (client) => useMutation(client.signOut);
189
- var useSignUp = (client) => useMutation(client.signUp.email);
190
190
  export {
191
191
  useUpgradeToPasskey,
192
192
  useSignUp,
@@ -199,5 +199,5 @@ export {
199
199
  useMagicLink
200
200
  };
201
201
 
202
- //# debugId=DD135C7760D6D2BE64756E2164756E21
202
+ //# debugId=0DCC16C45A0B9F4D64756E2164756E21
203
203
  //# sourceMappingURL=svelte.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/client/svelte.ts", "../src/client/passkeyHelpers.ts"],
4
4
  "sourcesContent": [
5
- "// Thin Svelte composables over `createAuthClient`, mirroring `./react`. Same `{ data,\n// error, isPending, mutate, reset }` shape — only the reactivity is Svelte's (writable\n// stores from `svelte/store`, which work in both Svelte 4 with `$store` auto-subscription\n// and Svelte 5 with $state-based usage via `get(store)` or `$:` reactivity).\n// Bring your own form / UI; these are primitives.\n\nimport { writable, type Writable } from 'svelte/store';\nimport type { AuthClient, AuthClientError } from './createAuthClient';\nimport {\n\trunConditionalAuthentication,\n\trunPasskeyRegistration\n} from './passkeyHelpers';\n\ntype Mutator<Args, Data> = (\n\targs: Args\n) => Promise<{ data: Data | null; error: AuthClientError | null }>;\n\ntype MutationState<Args, Data> = {\n\tdata: Writable<Data | null>;\n\terror: Writable<AuthClientError | null>;\n\tisPending: Writable<boolean>;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation composable. The exported composables are 1-2 line specializations of\n// this — kept private so consumers depend on the named API, not this internal shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst data: Writable<Data | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(false);\n\n\tconst mutate: Mutator<Args, Data> = async (args) => {\n\t\tisPending.set(true);\n\t\terror.set(null);\n\t\tconst result = await run(args);\n\t\tdata.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\n\t\treturn result;\n\t};\n\n\tconst reset = () => {\n\t\tdata.set(null);\n\t\terror.set(null);\n\t\tisPending.set(false);\n\t};\n\n\treturn { data, error, isPending, mutate, reset };\n};\n\nexport const useMagicLink = (client: AuthClient) =>\n\tuseMutation(client.passwordless.requestMagicLink);\n\n// Conditional-UI WebAuthn see the React doc for the wire-up pattern.\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst data: Writable<{ status: 'authenticated' } | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(false);\n\n\tconst start = async () => {\n\t\tisPending.set(true);\n\t\terror.set(null);\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tdata.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\t};\n\n\tconst cancel = () => {\n\t\tisPending.set(false);\n\t};\n\n\treturn { cancel, data, error, isPending, start };\n};\n\n// \"Upgrade to passkey\" prompt see the React doc.\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst passkeys: Writable<unknown[] | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(true);\n\tconst shouldPrompt = writable(false);\n\n\tconst recompute = (list: unknown[] | null) => {\n\t\tshouldPrompt.set(list !== null && list.length === 0);\n\t};\n\n\tconst refetch = async () => {\n\t\tisPending.set(true);\n\t\tconst result = await client.passkeys.list();\n\t\tpasskeys.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\t\trecompute(result.data);\n\t};\n\n\tconst register = async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { error, isPending, passkeys, refetch, register, shouldPrompt };\n};\n\nexport const useMfaChallenge = (client: AuthClient) =>\n\tuseMutation(client.mfa.challenge);\n\nexport const usePasswordReset = (client: AuthClient) =>\n\tuseMutation(client.passwordReset.request);\n\n// Query composable for the user's active sessions; refetch() reruns it, revoke(sessionId)\n// kills one and refetches. Same `{ data, error, isPending }` triplet as the mutations so\n// the consumer can render one way.\nexport const useSessions = (client: AuthClient) => {\n\tconst data: Writable<unknown[] | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(true);\n\n\tconst refetch = async () => {\n\t\tisPending.set(true);\n\t\tconst result = await client.sessions.list();\n\t\tdata.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\t};\n\n\tconst revoke = async (sessionId: string) => {\n\t\tconst result = await client.sessions.revoke(sessionId);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { data, error, isPending, refetch, revoke };\n};\n\nexport const useSignIn = (client: AuthClient) =>\n\tuseMutation(client.signIn.email);\n\nexport const useSignOut = (client: AuthClient) => useMutation(client.signOut);\n\nexport const useSignUp = (client: AuthClient) =>\n\tuseMutation(client.signUp.email);\n",
5
+ "// Thin Svelte composables over `createAuthClient`, mirroring `./react`. Same `{ data,\n// error, isPending, mutate, reset }` shape — only the reactivity is Svelte's (writable\n// stores from `svelte/store`, which work in both Svelte 4 with `$store` auto-subscription\n// and Svelte 5 with $state-based usage via `get(store)` or `$:` reactivity).\n// Bring your own form / UI; these are primitives.\n\nimport { writable, type Writable } from 'svelte/store';\nimport type { AuthClient, AuthClientError } from './createAuthClient';\nimport {\n\trunConditionalAuthentication,\n\trunPasskeyRegistration\n} from './passkeyHelpers';\n\ntype Mutator<Args, Data> = (\n\targs: Args\n) => Promise<{ data: Data | null; error: AuthClientError | null }>;\n\ntype MutationState<Args, Data> = {\n\tdata: Writable<Data | null>;\n\terror: Writable<AuthClientError | null>;\n\tisPending: Writable<boolean>;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation composable. The exported composables are 1-2 line specializations of\n// this — kept private so consumers depend on the named API, not this internal shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst data: Writable<Data | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(false);\n\n\tconst mutate: Mutator<Args, Data> = async (args) => {\n\t\tisPending.set(true);\n\t\terror.set(null);\n\t\tconst result = await run(args);\n\t\tdata.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\n\t\treturn result;\n\t};\n\n\tconst reset = () => {\n\t\tdata.set(null);\n\t\terror.set(null);\n\t\tisPending.set(false);\n\t};\n\n\treturn { data, error, isPending, mutate, reset };\n};\n\nexport const useMagicLink = (client: AuthClient) =>\n\tuseMutation(client.passwordless.requestMagicLink);\nexport const useMfaChallenge = (client: AuthClient) =>\n\tuseMutation(client.mfa.challenge);\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst data: Writable<{ status: 'authenticated' } | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(false);\n\n\tconst start = async () => {\n\t\tisPending.set(true);\n\t\terror.set(null);\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tdata.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\t};\n\n\tconst cancel = () => {\n\t\tisPending.set(false);\n\t};\n\n\treturn { cancel, data, error, isPending, start };\n};\nexport const usePasswordReset = (client: AuthClient) =>\n\tuseMutation(client.passwordReset.request);\nexport const useSessions = (client: AuthClient) => {\n\tconst data: Writable<unknown[] | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(true);\n\n\tconst refetch = async () => {\n\t\tisPending.set(true);\n\t\tconst result = await client.sessions.list();\n\t\tdata.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\t};\n\n\tconst revoke = async (sessionId: string) => {\n\t\tconst result = await client.sessions.revoke(sessionId);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { data, error, isPending, refetch, revoke };\n};\nexport const useSignIn = (client: AuthClient) =>\n\tuseMutation(client.signIn.email);\nexport const useSignOut = (client: AuthClient) => useMutation(client.signOut);\nexport const useSignUp = (client: AuthClient) =>\n\tuseMutation(client.signUp.email);\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst passkeys: Writable<unknown[] | null> = writable(null);\n\tconst error: Writable<AuthClientError | null> = writable(null);\n\tconst isPending = writable(true);\n\tconst shouldPrompt = writable(false);\n\n\tconst recompute = (list: unknown[] | null) => {\n\t\tshouldPrompt.set(list !== null && list.length === 0);\n\t};\n\n\tconst refetch = async () => {\n\t\tisPending.set(true);\n\t\tconst result = await client.passkeys.list();\n\t\tpasskeys.set(result.data);\n\t\terror.set(result.error);\n\t\tisPending.set(false);\n\t\trecompute(result.data);\n\t};\n\n\tconst register = async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { error, isPending, passkeys, refetch, register, shouldPrompt };\n};\n",
6
6
  "// Framework-agnostic glue between the WebAuthn ceremonies the package exposes via\n// `createAuthClient` and the browser's `navigator.credentials.{get,create}` APIs.\n// Used by the framework composables (`./react`, `./vue`, `./solid`, `./svelte`) so the\n// React + Vue + Solid + Svelte hooks all share the same imperative core; the framework\n// wrappers only add reactivity.\n//\n// `@simplewebauthn/browser` is an OPTIONAL peer dep — consumers that don't import any\n// of the passkey composables never load it. We dynamic-import lazily on first call so a\n// non-passkey consumer pays nothing at module load.\n\nimport type { AuthClient, AuthClientError } from './createAuthClient';\n\nconst loadBrowser = () => import('@simplewebauthn/browser');\n\nconst errorFor = (caught: unknown): AuthClientError => ({\n\tbody: null,\n\tmessage: caught instanceof Error ? caught.message : 'webauthn_failed',\n\tstatus: 0\n});\n\n// Runs the WebAuthn authentication ceremony in conditional-UI mode (the browser surfaces\n// saved passkeys directly via autofill on a focused `<input autocomplete=\"webauthn\">`).\n// Returns the same `{ data, error }` shape `createAuthClient` already uses, so composables\n// can pipe the result into their state setters unchanged.\nexport const runConditionalAuthentication = async (client: AuthClient) => {\n\tif (typeof window === 'undefined' || !window.PublicKeyCredential) {\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: errorFor(new Error('webauthn_unavailable'))\n\t\t};\n\t}\n\tconst options = await client.passkeys.authenticateOptions();\n\tif (options.error) return { data: null, error: options.error };\n\ttry {\n\t\tconst { startAuthentication } = await loadBrowser();\n\t\tconst credential = await startAuthentication({\n\t\t\toptionsJSON: options.data,\n\t\t\tuseBrowserAutofill: true\n\t\t});\n\n\t\treturn client.passkeys.authenticateVerify(credential);\n\t} catch (caught) {\n\t\treturn { data: null, error: errorFor(caught) };\n\t}\n};\n\n// Runs the WebAuthn registration ceremony for the currently authenticated user. Used by\n// the \"upgrade to passkey\" prompt — after a password sign-in, surface a \"save a passkey\n// to this device for next time?\" CTA.\nexport const runPasskeyRegistration = async (client: AuthClient) => {\n\tif (typeof window === 'undefined' || !window.PublicKeyCredential) {\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: errorFor(new Error('webauthn_unavailable'))\n\t\t};\n\t}\n\tconst options = await client.passkeys.registerOptions();\n\tif (options.error) return { data: null, error: options.error };\n\ttry {\n\t\tconst { startRegistration } = await loadBrowser();\n\t\tconst credential = await startRegistration({\n\t\t\toptionsJSON: options.data\n\t\t});\n\n\t\treturn client.passkeys.registerVerify(credential);\n\t} catch (caught) {\n\t\treturn { data: null, error: errorFor(caught) };\n\t}\n};\n"
7
7
  ],
8
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;ACMA,IAAM,cAAc,MAAa;AAEjC,IAAM,WAAW,CAAC,YAAsC;AAAA,EACvD,MAAM;AAAA,EACN,SAAS,kBAAkB,QAAQ,OAAO,UAAU;AAAA,EACpD,QAAQ;AACT;AAMO,IAAM,+BAA+B,OAAO,WAAuB;AAAA,EACzE,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,qBAAqB;AAAA,IACjE,OAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,SAAS,IAAI,MAAM,sBAAsB,CAAC;AAAA,IAClD;AAAA,EACD;AAAA,EACA,MAAM,UAAU,MAAM,OAAO,SAAS,oBAAoB;AAAA,EAC1D,IAAI,QAAQ;AAAA,IAAO,OAAO,EAAE,MAAM,MAAM,OAAO,QAAQ,MAAM;AAAA,EAC7D,IAAI;AAAA,IACH,QAAQ,wBAAwB,MAAM,YAAY;AAAA,IAClD,MAAM,aAAa,MAAM,oBAAoB;AAAA,MAC5C,aAAa,QAAQ;AAAA,MACrB,oBAAoB;AAAA,IACrB,CAAC;AAAA,IAED,OAAO,OAAO,SAAS,mBAAmB,UAAU;AAAA,IACnD,OAAO,QAAQ;AAAA,IAChB,OAAO,EAAE,MAAM,MAAM,OAAO,SAAS,MAAM,EAAE;AAAA;AAAA;AAOxC,IAAM,yBAAyB,OAAO,WAAuB;AAAA,EACnE,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,qBAAqB;AAAA,IACjE,OAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,SAAS,IAAI,MAAM,sBAAsB,CAAC;AAAA,IAClD;AAAA,EACD;AAAA,EACA,MAAM,UAAU,MAAM,OAAO,SAAS,gBAAgB;AAAA,EACtD,IAAI,QAAQ;AAAA,IAAO,OAAO,EAAE,MAAM,MAAM,OAAO,QAAQ,MAAM;AAAA,EAC7D,IAAI;AAAA,IACH,QAAQ,sBAAsB,MAAM,YAAY;AAAA,IAChD,MAAM,aAAa,MAAM,kBAAkB;AAAA,MAC1C,aAAa,QAAQ;AAAA,IACtB,CAAC;AAAA,IAED,OAAO,OAAO,SAAS,eAAe,UAAU;AAAA,IAC/C,OAAO,QAAQ;AAAA,IAChB,OAAO,EAAE,MAAM,MAAM,OAAO,SAAS,MAAM,EAAE;AAAA;AAAA;;;ADvC/C,IAAM,cAAc,CACnB,QAC+B;AAAA,EAC/B,MAAM,OAA8B,SAAS,IAAI;AAAA,EACjD,MAAM,QAA0C,SAAS,IAAI;AAAA,EAC7D,MAAM,YAAY,SAAS,KAAK;AAAA,EAEhC,MAAM,SAA8B,OAAO,SAAS;AAAA,IACnD,UAAU,IAAI,IAAI;AAAA,IAClB,MAAM,IAAI,IAAI;AAAA,IACd,MAAM,SAAS,MAAM,IAAI,IAAI;AAAA,IAC7B,KAAK,IAAI,OAAO,IAAI;AAAA,IACpB,MAAM,IAAI,OAAO,KAAK;AAAA,IACtB,UAAU,IAAI,KAAK;AAAA,IAEnB,OAAO;AAAA;AAAA,EAGR,MAAM,QAAQ,MAAM;AAAA,IACnB,KAAK,IAAI,IAAI;AAAA,IACb,MAAM,IAAI,IAAI;AAAA,IACd,UAAU,IAAI,KAAK;AAAA;AAAA,EAGpB,OAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,MAAM;AAAA;AAGzC,IAAM,eAAe,CAAC,WAC5B,YAAY,OAAO,aAAa,gBAAgB;AAG1C,IAAM,qBAAqB,CAAC,WAAuB;AAAA,EACzD,MAAM,OAAqD,SAAS,IAAI;AAAA,EACxE,MAAM,QAA0C,SAAS,IAAI;AAAA,EAC7D,MAAM,YAAY,SAAS,KAAK;AAAA,EAEhC,MAAM,QAAQ,YAAY;AAAA,IACzB,UAAU,IAAI,IAAI;AAAA,IAClB,MAAM,IAAI,IAAI;AAAA,IACd,MAAM,SAAS,MAAM,6BAA6B,MAAM;AAAA,IACxD,KAAK,IAAI,OAAO,IAAI;AAAA,IACpB,MAAM,IAAI,OAAO,KAAK;AAAA,IACtB,UAAU,IAAI,KAAK;AAAA;AAAA,EAGpB,MAAM,SAAS,MAAM;AAAA,IACpB,UAAU,IAAI,KAAK;AAAA;AAAA,EAGpB,OAAO,EAAE,QAAQ,MAAM,OAAO,WAAW,MAAM;AAAA;AAIzC,IAAM,sBAAsB,CAAC,WAAuB;AAAA,EAC1D,MAAM,WAAuC,SAAS,IAAI;AAAA,EAC1D,MAAM,QAA0C,SAAS,IAAI;AAAA,EAC7D,MAAM,YAAY,SAAS,IAAI;AAAA,EAC/B,MAAM,eAAe,SAAS,KAAK;AAAA,EAEnC,MAAM,YAAY,CAAC,SAA2B;AAAA,IAC7C,aAAa,IAAI,SAAS,QAAQ,KAAK,WAAW,CAAC;AAAA;AAAA,EAGpD,MAAM,UAAU,YAAY;AAAA,IAC3B,UAAU,IAAI,IAAI;AAAA,IAClB,MAAM,SAAS,MAAM,OAAO,SAAS,KAAK;AAAA,IAC1C,SAAS,IAAI,OAAO,IAAI;AAAA,IACxB,MAAM,IAAI,OAAO,KAAK;AAAA,IACtB,UAAU,IAAI,KAAK;AAAA,IACnB,UAAU,OAAO,IAAI;AAAA;AAAA,EAGtB,MAAM,WAAW,YAAY;AAAA,IAC5B,MAAM,SAAS,MAAM,uBAAuB,MAAM;AAAA,IAClD,IAAI,OAAO,UAAU;AAAA,MAAM,MAAM,QAAQ;AAAA,IAEzC,OAAO;AAAA;AAAA,EAGH,QAAQ;AAAA,EAEb,OAAO,EAAE,OAAO,WAAW,UAAU,SAAS,UAAU,aAAa;AAAA;AAG/D,IAAM,kBAAkB,CAAC,WAC/B,YAAY,OAAO,IAAI,SAAS;AAE1B,IAAM,mBAAmB,CAAC,WAChC,YAAY,OAAO,cAAc,OAAO;AAKlC,IAAM,cAAc,CAAC,WAAuB;AAAA,EAClD,MAAM,OAAmC,SAAS,IAAI;AAAA,EACtD,MAAM,QAA0C,SAAS,IAAI;AAAA,EAC7D,MAAM,YAAY,SAAS,IAAI;AAAA,EAE/B,MAAM,UAAU,YAAY;AAAA,IAC3B,UAAU,IAAI,IAAI;AAAA,IAClB,MAAM,SAAS,MAAM,OAAO,SAAS,KAAK;AAAA,IAC1C,KAAK,IAAI,OAAO,IAAI;AAAA,IACpB,MAAM,IAAI,OAAO,KAAK;AAAA,IACtB,UAAU,IAAI,KAAK;AAAA;AAAA,EAGpB,MAAM,SAAS,OAAO,cAAsB;AAAA,IAC3C,MAAM,SAAS,MAAM,OAAO,SAAS,OAAO,SAAS;AAAA,IACrD,IAAI,OAAO,UAAU;AAAA,MAAM,MAAM,QAAQ;AAAA,IAEzC,OAAO;AAAA;AAAA,EAGH,QAAQ;AAAA,EAEb,OAAO,EAAE,MAAM,OAAO,WAAW,SAAS,OAAO;AAAA;AAG3C,IAAM,YAAY,CAAC,WACzB,YAAY,OAAO,OAAO,KAAK;AAEzB,IAAM,aAAa,CAAC,WAAuB,YAAY,OAAO,OAAO;AAErE,IAAM,YAAY,CAAC,WACzB,YAAY,OAAO,OAAO,KAAK;",
9
- "debugId": "DD135C7760D6D2BE64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "0DCC16C45A0B9F4D64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -16,6 +16,11 @@ export declare const useMagicLink: (client: AuthClient) => MutationState<{
16
16
  }, {
17
17
  ok: true;
18
18
  }>;
19
+ export declare const useMfaChallenge: (client: AuthClient) => MutationState<{
20
+ code: string;
21
+ }, {
22
+ status: "authenticated";
23
+ }>;
19
24
  export declare const usePasskeyAutofill: (client: AuthClient) => {
20
25
  cancel: () => void;
21
26
  data: Ref<{
@@ -27,27 +32,6 @@ export declare const usePasskeyAutofill: (client: AuthClient) => {
27
32
  isPending: Ref<boolean, boolean>;
28
33
  start: () => Promise<void>;
29
34
  };
30
- export declare const useUpgradeToPasskey: (client: AuthClient) => {
31
- error: Ref<AuthClientError | null, AuthClientError | null>;
32
- isPending: Ref<boolean, boolean>;
33
- passkeys: Ref<unknown[] | null, unknown[] | null>;
34
- refetch: () => Promise<void>;
35
- register: () => Promise<{
36
- data: null;
37
- error: AuthClientError;
38
- } | {
39
- data: {
40
- ok: true;
41
- };
42
- error: null;
43
- }>;
44
- shouldPrompt: Ref<boolean, boolean>;
45
- };
46
- export declare const useMfaChallenge: (client: AuthClient) => MutationState<{
47
- code: string;
48
- }, {
49
- status: "authenticated";
50
- }>;
51
35
  export declare const usePasswordReset: (client: AuthClient) => MutationState<{
52
36
  email: string;
53
37
  }, {
@@ -85,4 +69,20 @@ export declare const useSignUp: (client: AuthClient) => MutationState<{
85
69
  } | {
86
70
  status: "verification_required";
87
71
  }>;
72
+ export declare const useUpgradeToPasskey: (client: AuthClient) => {
73
+ error: Ref<AuthClientError | null, AuthClientError | null>;
74
+ isPending: Ref<boolean, boolean>;
75
+ passkeys: Ref<unknown[] | null, unknown[] | null>;
76
+ refetch: () => Promise<void>;
77
+ register: () => Promise<{
78
+ data: null;
79
+ error: AuthClientError;
80
+ } | {
81
+ data: {
82
+ ok: true;
83
+ };
84
+ error: null;
85
+ }>;
86
+ shouldPrompt: Ref<boolean, boolean>;
87
+ };
88
88
  export {};
@@ -126,6 +126,7 @@ var useMutation = (run) => {
126
126
  return { data, error, isPending, mutate, reset };
127
127
  };
128
128
  var useMagicLink = (client) => useMutation(client.passwordless.requestMagicLink);
129
+ var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
129
130
  var usePasskeyAutofill = (client) => {
130
131
  const data = ref(null);
131
132
  const error = ref(null);
@@ -149,6 +150,36 @@ var usePasskeyAutofill = (client) => {
149
150
  };
150
151
  return { cancel, data, error, isPending, start };
151
152
  };
153
+ var usePasswordReset = (client) => useMutation(client.passwordReset.request);
154
+ var useSessions = (client) => {
155
+ const data = ref(null);
156
+ const error = ref(null);
157
+ const isPending = ref(true);
158
+ let alive = true;
159
+ onScopeDispose(() => {
160
+ alive = false;
161
+ });
162
+ const refetch = async () => {
163
+ isPending.value = true;
164
+ const result = await client.sessions.list();
165
+ if (alive) {
166
+ data.value = result.data;
167
+ error.value = result.error;
168
+ isPending.value = false;
169
+ }
170
+ };
171
+ const revoke = async (sessionId) => {
172
+ const result = await client.sessions.revoke(sessionId);
173
+ if (result.error === null)
174
+ await refetch();
175
+ return result;
176
+ };
177
+ refetch();
178
+ return { data, error, isPending, refetch, revoke };
179
+ };
180
+ var useSignIn = (client) => useMutation(client.signIn.email);
181
+ var useSignOut = (client) => useMutation(client.signOut);
182
+ var useSignUp = (client) => useMutation(client.signUp.email);
152
183
  var useUpgradeToPasskey = (client) => {
153
184
  const passkeys = ref(null);
154
185
  const error = ref(null);
@@ -195,37 +226,6 @@ var useUpgradeToPasskey = (client) => {
195
226
  shouldPrompt
196
227
  };
197
228
  };
198
- var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
199
- var usePasswordReset = (client) => useMutation(client.passwordReset.request);
200
- var useSessions = (client) => {
201
- const data = ref(null);
202
- const error = ref(null);
203
- const isPending = ref(true);
204
- let alive = true;
205
- onScopeDispose(() => {
206
- alive = false;
207
- });
208
- const refetch = async () => {
209
- isPending.value = true;
210
- const result = await client.sessions.list();
211
- if (alive) {
212
- data.value = result.data;
213
- error.value = result.error;
214
- isPending.value = false;
215
- }
216
- };
217
- const revoke = async (sessionId) => {
218
- const result = await client.sessions.revoke(sessionId);
219
- if (result.error === null)
220
- await refetch();
221
- return result;
222
- };
223
- refetch();
224
- return { data, error, isPending, refetch, revoke };
225
- };
226
- var useSignIn = (client) => useMutation(client.signIn.email);
227
- var useSignOut = (client) => useMutation(client.signOut);
228
- var useSignUp = (client) => useMutation(client.signUp.email);
229
229
  export {
230
230
  useUpgradeToPasskey,
231
231
  useSignUp,
@@ -238,5 +238,5 @@ export {
238
238
  useMagicLink
239
239
  };
240
240
 
241
- //# debugId=3995ED91CBE6B23764756E2164756E21
241
+ //# debugId=EE211E94DA65525164756E2164756E21
242
242
  //# sourceMappingURL=vue.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/client/vue.ts", "../src/client/passkeyHelpers.ts"],
4
4
  "sourcesContent": [
5
- "// Thin Vue composables over `createAuthClient`, mirroring `./react`. Same `{ data, error,\n// isPending, mutate, reset }` shape — only the reactivity is Vue's (refs + onScopeDispose).\n// Bring your own form / UI; these are primitives.\n\nimport { onScopeDispose, ref, type Ref } from 'vue';\nimport type { AuthClient, AuthClientError } from './createAuthClient';\nimport {\n\trunConditionalAuthentication,\n\trunPasskeyRegistration\n} from './passkeyHelpers';\n\ntype Mutator<Args, Data> = (\n\targs: Args\n) => Promise<{ data: Data | null; error: AuthClientError | null }>;\n\ntype MutationState<Args, Data> = {\n\tdata: Ref<Data | null>;\n\terror: Ref<AuthClientError | null>;\n\tisPending: Ref<boolean>;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation composable. The exported composables are 1-2 line specializations of\n// this — kept private so consumers depend on the named API, not this internal shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst data: Ref<Data | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(false);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst mutate: Mutator<Args, Data> = async (args) => {\n\t\tisPending.value = true;\n\t\terror.value = null;\n\t\tconst result = await run(args);\n\t\tif (alive) {\n\t\t\tdata.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconst reset = () => {\n\t\tdata.value = null;\n\t\terror.value = null;\n\t\tisPending.value = false;\n\t};\n\n\treturn { data, error, isPending, mutate, reset };\n};\n\nexport const useMagicLink = (client: AuthClient) =>\n\tuseMutation(client.passwordless.requestMagicLink);\n\n// Conditional-UI WebAuthn see the React doc for the wire-up pattern. Returns refs you\n// `v-bind` into your sign-in template; `start()` kicks off the browser-autofill ceremony.\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst data: Ref<{ status: 'authenticated' } | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(false);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst start = async () => {\n\t\tisPending.value = true;\n\t\terror.value = null;\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tif (alive) {\n\t\t\tdata.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\t};\n\n\tconst cancel = () => {\n\t\tisPending.value = false;\n\t};\n\n\treturn { cancel, data, error, isPending, start };\n};\n\n// \"Upgrade to passkey\" prompt see the React doc. `shouldPrompt` is a computed-style ref\n// that's true when the signed-in user has no passkeys yet.\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst passkeys: Ref<unknown[] | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(true);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tisPending.value = true;\n\t\tconst result = await client.passkeys.list();\n\t\tif (alive) {\n\t\t\tpasskeys.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\t};\n\n\tconst register = async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\tconst shouldPrompt = ref(false);\n\tconst updateShouldPrompt = () => {\n\t\tshouldPrompt.value =\n\t\t\tpasskeys.value !== null && passkeys.value.length === 0;\n\t};\n\t// Update shouldPrompt whenever the list changes via refetch/register.\n\tconst wrappedRefetch = async () => {\n\t\tawait refetch();\n\t\tupdateShouldPrompt();\n\t};\n\tconst wrappedRegister = async () => {\n\t\tconst result = await register();\n\t\tupdateShouldPrompt();\n\n\t\treturn result;\n\t};\n\n\treturn {\n\t\terror,\n\t\tisPending,\n\t\tpasskeys,\n\t\trefetch: wrappedRefetch,\n\t\tregister: wrappedRegister,\n\t\tshouldPrompt\n\t};\n};\n\nexport const useMfaChallenge = (client: AuthClient) =>\n\tuseMutation(client.mfa.challenge);\n\nexport const usePasswordReset = (client: AuthClient) =>\n\tuseMutation(client.passwordReset.request);\n\n// Query composable for the user's active sessions; refetch() reruns it, revoke(sessionId)\n// kills one and refetches. Same `{ data, error, isPending }` triplet as the mutations so\n// the consumer can render one way.\nexport const useSessions = (client: AuthClient) => {\n\tconst data: Ref<unknown[] | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(true);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tisPending.value = true;\n\t\tconst result = await client.sessions.list();\n\t\tif (alive) {\n\t\t\tdata.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\t};\n\n\tconst revoke = async (sessionId: string) => {\n\t\tconst result = await client.sessions.revoke(sessionId);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { data, error, isPending, refetch, revoke };\n};\n\nexport const useSignIn = (client: AuthClient) =>\n\tuseMutation(client.signIn.email);\n\nexport const useSignOut = (client: AuthClient) => useMutation(client.signOut);\n\nexport const useSignUp = (client: AuthClient) =>\n\tuseMutation(client.signUp.email);\n",
5
+ "// Thin Vue composables over `createAuthClient`, mirroring `./react`. Same `{ data, error,\n// isPending, mutate, reset }` shape — only the reactivity is Vue's (refs + onScopeDispose).\n// Bring your own form / UI; these are primitives.\n\nimport { onScopeDispose, ref, type Ref } from 'vue';\nimport type { AuthClient, AuthClientError } from './createAuthClient';\nimport {\n\trunConditionalAuthentication,\n\trunPasskeyRegistration\n} from './passkeyHelpers';\n\ntype Mutator<Args, Data> = (\n\targs: Args\n) => Promise<{ data: Data | null; error: AuthClientError | null }>;\n\ntype MutationState<Args, Data> = {\n\tdata: Ref<Data | null>;\n\terror: Ref<AuthClientError | null>;\n\tisPending: Ref<boolean>;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation composable. The exported composables are 1-2 line specializations of\n// this — kept private so consumers depend on the named API, not this internal shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst data: Ref<Data | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(false);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst mutate: Mutator<Args, Data> = async (args) => {\n\t\tisPending.value = true;\n\t\terror.value = null;\n\t\tconst result = await run(args);\n\t\tif (alive) {\n\t\t\tdata.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconst reset = () => {\n\t\tdata.value = null;\n\t\terror.value = null;\n\t\tisPending.value = false;\n\t};\n\n\treturn { data, error, isPending, mutate, reset };\n};\n\nexport const useMagicLink = (client: AuthClient) =>\n\tuseMutation(client.passwordless.requestMagicLink);\nexport const useMfaChallenge = (client: AuthClient) =>\n\tuseMutation(client.mfa.challenge);\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst data: Ref<{ status: 'authenticated' } | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(false);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst start = async () => {\n\t\tisPending.value = true;\n\t\terror.value = null;\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tif (alive) {\n\t\t\tdata.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\t};\n\n\tconst cancel = () => {\n\t\tisPending.value = false;\n\t};\n\n\treturn { cancel, data, error, isPending, start };\n};\nexport const usePasswordReset = (client: AuthClient) =>\n\tuseMutation(client.passwordReset.request);\nexport const useSessions = (client: AuthClient) => {\n\tconst data: Ref<unknown[] | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(true);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tisPending.value = true;\n\t\tconst result = await client.sessions.list();\n\t\tif (alive) {\n\t\t\tdata.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\t};\n\n\tconst revoke = async (sessionId: string) => {\n\t\tconst result = await client.sessions.revoke(sessionId);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\n\treturn { data, error, isPending, refetch, revoke };\n};\nexport const useSignIn = (client: AuthClient) =>\n\tuseMutation(client.signIn.email);\nexport const useSignOut = (client: AuthClient) => useMutation(client.signOut);\nexport const useSignUp = (client: AuthClient) =>\n\tuseMutation(client.signUp.email);\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst passkeys: Ref<unknown[] | null> = ref(null);\n\tconst error: Ref<AuthClientError | null> = ref(null);\n\tconst isPending = ref(true);\n\tlet alive = true;\n\tonScopeDispose(() => {\n\t\talive = false;\n\t});\n\n\tconst refetch = async () => {\n\t\tisPending.value = true;\n\t\tconst result = await client.passkeys.list();\n\t\tif (alive) {\n\t\t\tpasskeys.value = result.data;\n\t\t\terror.value = result.error;\n\t\t\tisPending.value = false;\n\t\t}\n\t};\n\n\tconst register = async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t};\n\n\tvoid refetch();\n\tconst shouldPrompt = ref(false);\n\tconst updateShouldPrompt = () => {\n\t\tshouldPrompt.value =\n\t\t\tpasskeys.value !== null && passkeys.value.length === 0;\n\t};\n\t// Update shouldPrompt whenever the list changes via refetch/register.\n\tconst wrappedRefetch = async () => {\n\t\tawait refetch();\n\t\tupdateShouldPrompt();\n\t};\n\tconst wrappedRegister = async () => {\n\t\tconst result = await register();\n\t\tupdateShouldPrompt();\n\n\t\treturn result;\n\t};\n\n\treturn {\n\t\terror,\n\t\tisPending,\n\t\tpasskeys,\n\t\trefetch: wrappedRefetch,\n\t\tregister: wrappedRegister,\n\t\tshouldPrompt\n\t};\n};\n",
6
6
  "// Framework-agnostic glue between the WebAuthn ceremonies the package exposes via\n// `createAuthClient` and the browser's `navigator.credentials.{get,create}` APIs.\n// Used by the framework composables (`./react`, `./vue`, `./solid`, `./svelte`) so the\n// React + Vue + Solid + Svelte hooks all share the same imperative core; the framework\n// wrappers only add reactivity.\n//\n// `@simplewebauthn/browser` is an OPTIONAL peer dep — consumers that don't import any\n// of the passkey composables never load it. We dynamic-import lazily on first call so a\n// non-passkey consumer pays nothing at module load.\n\nimport type { AuthClient, AuthClientError } from './createAuthClient';\n\nconst loadBrowser = () => import('@simplewebauthn/browser');\n\nconst errorFor = (caught: unknown): AuthClientError => ({\n\tbody: null,\n\tmessage: caught instanceof Error ? caught.message : 'webauthn_failed',\n\tstatus: 0\n});\n\n// Runs the WebAuthn authentication ceremony in conditional-UI mode (the browser surfaces\n// saved passkeys directly via autofill on a focused `<input autocomplete=\"webauthn\">`).\n// Returns the same `{ data, error }` shape `createAuthClient` already uses, so composables\n// can pipe the result into their state setters unchanged.\nexport const runConditionalAuthentication = async (client: AuthClient) => {\n\tif (typeof window === 'undefined' || !window.PublicKeyCredential) {\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: errorFor(new Error('webauthn_unavailable'))\n\t\t};\n\t}\n\tconst options = await client.passkeys.authenticateOptions();\n\tif (options.error) return { data: null, error: options.error };\n\ttry {\n\t\tconst { startAuthentication } = await loadBrowser();\n\t\tconst credential = await startAuthentication({\n\t\t\toptionsJSON: options.data,\n\t\t\tuseBrowserAutofill: true\n\t\t});\n\n\t\treturn client.passkeys.authenticateVerify(credential);\n\t} catch (caught) {\n\t\treturn { data: null, error: errorFor(caught) };\n\t}\n};\n\n// Runs the WebAuthn registration ceremony for the currently authenticated user. Used by\n// the \"upgrade to passkey\" prompt — after a password sign-in, surface a \"save a passkey\n// to this device for next time?\" CTA.\nexport const runPasskeyRegistration = async (client: AuthClient) => {\n\tif (typeof window === 'undefined' || !window.PublicKeyCredential) {\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: errorFor(new Error('webauthn_unavailable'))\n\t\t};\n\t}\n\tconst options = await client.passkeys.registerOptions();\n\tif (options.error) return { data: null, error: options.error };\n\ttry {\n\t\tconst { startRegistration } = await loadBrowser();\n\t\tconst credential = await startRegistration({\n\t\t\toptionsJSON: options.data\n\t\t});\n\n\t\treturn client.passkeys.registerVerify(credential);\n\t} catch (caught) {\n\t\treturn { data: null, error: errorFor(caught) };\n\t}\n};\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "3995ED91CBE6B23764756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "EE211E94DA65525164756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -21,7 +21,22 @@ export type ImportUsersOptions<UserType> = {
21
21
  concurrency?: number;
22
22
  credentialStore: CredentialStore;
23
23
  };
24
- export declare const importUser: <UserType>(input: ImportableUser<UserType>, options: ImportUsersOptions<UserType>) => Promise<ImportUserResult<UserType>>;
24
+ export declare const importUser: <UserType>(input: ImportableUser<UserType>, options: ImportUsersOptions<UserType>) => Promise<{
25
+ error: string;
26
+ ok: false;
27
+ user: UserType;
28
+ credential?: undefined;
29
+ } | {
30
+ ok: true;
31
+ user: UserType;
32
+ readonly error?: undefined;
33
+ credential?: undefined;
34
+ } | {
35
+ credential: CredentialRecord;
36
+ ok: true;
37
+ user: UserType;
38
+ readonly error?: undefined;
39
+ }>;
25
40
  export declare const importUsers: <UserType>(inputs: readonly ImportableUser<UserType>[], options: ImportUsersOptions<UserType>) => Promise<{
26
41
  failed: number;
27
42
  results: ImportUserResult<UserType>[];
@@ -29,7 +29,7 @@ export declare const credentialsRegister: <UserType>({ authSessionStore, cookieS
29
29
  query: unknown;
30
30
  headers: unknown;
31
31
  response: {
32
- [x: string]: any;
32
+ [x: number]: {};
33
33
  };
34
34
  };
35
35
  };
@@ -29,7 +29,7 @@ export declare const credentialRoutes: <UserType>(config: CredentialRouteProps<U
29
29
  query: unknown;
30
30
  headers: unknown;
31
31
  response: {
32
- [x: string]: any;
32
+ [x: number]: {};
33
33
  };
34
34
  };
35
35
  };
@@ -51,11 +51,12 @@ var readCanvas = () => {
51
51
  return;
52
52
  }
53
53
  };
54
+ var isOfflineAudioContextCtor = (value) => typeof value === "function";
54
55
  var resolveOfflineAudioContextCtor = () => {
55
56
  if (typeof OfflineAudioContext !== "undefined")
56
57
  return OfflineAudioContext;
57
- const legacy = globalThis;
58
- return legacy.webkitOfflineAudioContext;
58
+ const legacy = Reflect.get(globalThis, "webkitOfflineAudioContext");
59
+ return isOfflineAudioContextCtor(legacy) ? legacy : undefined;
59
60
  };
60
61
  var sumAbs = (samples) => {
61
62
  let total = 0;
@@ -182,5 +183,5 @@ export {
182
183
  collectDeviceFingerprint
183
184
  };
184
185
 
185
- //# debugId=58DA2A773086368664756E2164756E21
186
+ //# debugId=5AAB5F70FF6848B464756E2164756E21
186
187
  //# sourceMappingURL=index.js.map