@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
@@ -15,6 +15,11 @@ export declare const useMagicLink: (client: AuthClient) => MutationState<{
15
15
  }, {
16
16
  ok: true;
17
17
  }>;
18
+ export declare const useMfaChallenge: (client: AuthClient) => MutationState<{
19
+ code: string;
20
+ }, {
21
+ status: "authenticated";
22
+ }>;
18
23
  export declare const usePasskeyAutofill: (client: AuthClient) => {
19
24
  cancel: () => void;
20
25
  data: {
@@ -24,27 +29,6 @@ export declare const usePasskeyAutofill: (client: AuthClient) => {
24
29
  isPending: boolean;
25
30
  start: () => Promise<void>;
26
31
  };
27
- export declare const useUpgradeToPasskey: (client: AuthClient) => {
28
- error: AuthClientError | null;
29
- isPending: boolean;
30
- passkeys: unknown[] | null;
31
- refetch: () => Promise<void>;
32
- register: () => Promise<{
33
- data: null;
34
- error: AuthClientError;
35
- } | {
36
- data: {
37
- ok: true;
38
- };
39
- error: null;
40
- }>;
41
- shouldPrompt: boolean;
42
- };
43
- export declare const useMfaChallenge: (client: AuthClient) => MutationState<{
44
- code: string;
45
- }, {
46
- status: "authenticated";
47
- }>;
48
32
  export declare const usePasswordReset: (client: AuthClient) => MutationState<{
49
33
  email: string;
50
34
  }, {
@@ -82,6 +66,22 @@ export declare const useSignUp: (client: AuthClient) => MutationState<{
82
66
  } | {
83
67
  status: "verification_required";
84
68
  }>;
69
+ export declare const useUpgradeToPasskey: (client: AuthClient) => {
70
+ error: AuthClientError | null;
71
+ isPending: boolean;
72
+ passkeys: unknown[] | null;
73
+ refetch: () => Promise<void>;
74
+ register: () => Promise<{
75
+ data: null;
76
+ error: AuthClientError;
77
+ } | {
78
+ data: {
79
+ ok: true;
80
+ };
81
+ error: null;
82
+ }>;
83
+ shouldPrompt: boolean;
84
+ };
85
85
  export { SignIn, type SignInProps } from './components/react/SignIn';
86
86
  export { SignUp, type SignUpProps } from './components/react/SignUp';
87
87
  export { UserButton, type UserButtonItem, type UserButtonProps, type UserButtonUser } from './components/react/UserButton';
@@ -99,8 +99,7 @@ var runPasskeyRegistration = async (client) => {
99
99
  };
100
100
 
101
101
  // src/client/components/react/SignIn.ts
102
- import { createElement } from "react";
103
- import { useState } from "react";
102
+ import { createElement, useState } from "react";
104
103
  var SignIn = ({
105
104
  client,
106
105
  classNames,
@@ -149,19 +148,19 @@ var SignIn = ({
149
148
  autoComplete: "username webauthn",
150
149
  className: classNames?.input,
151
150
  name: "email",
152
- onChange: (event) => setEmail(event.currentTarget.value),
153
151
  required: true,
154
152
  type: "email",
155
- value: email
153
+ value: email,
154
+ onChange: (event) => setEmail(event.currentTarget.value)
156
155
  })), createElement("label", { className: classNames?.field, "data-abs-auth": "password-field" }, createElement("span", { className: classNames?.label }, passwordLabel), createElement("input", {
157
156
  autoComplete: "current-password",
158
157
  className: classNames?.input,
159
158
  minLength: 12,
160
159
  name: "password",
161
- onChange: (event) => setPassword(event.currentTarget.value),
162
160
  required: true,
163
161
  type: "password",
164
- value: password
162
+ value: password,
163
+ onChange: (event) => setPassword(event.currentTarget.value)
165
164
  })), errorBanner, createElement("button", {
166
165
  className: classNames?.button,
167
166
  "data-abs-auth": "submit",
@@ -170,8 +169,7 @@ var SignIn = ({
170
169
  }, isPending ? "Signing in\u2026" : submitLabel));
171
170
  };
172
171
  // src/client/components/react/SignUp.ts
173
- import { createElement as createElement2 } from "react";
174
- import { useState as useState2 } from "react";
172
+ import { createElement as createElement2, useState as useState2 } from "react";
175
173
  var SignUp = ({
176
174
  client,
177
175
  classNames,
@@ -207,19 +205,19 @@ var SignUp = ({
207
205
  autoComplete: "email",
208
206
  className: classNames?.input,
209
207
  name: "email",
210
- onChange: (event) => setEmail(event.currentTarget.value),
211
208
  required: true,
212
209
  type: "email",
213
- value: email
210
+ value: email,
211
+ onChange: (event) => setEmail(event.currentTarget.value)
214
212
  })), createElement2("label", { className: classNames?.field, "data-abs-auth": "password-field" }, createElement2("span", { className: classNames?.label }, passwordLabel), createElement2("input", {
215
213
  autoComplete: "new-password",
216
214
  className: classNames?.input,
217
215
  minLength: 12,
218
216
  name: "password",
219
- onChange: (event) => setPassword(event.currentTarget.value),
220
217
  required: true,
221
218
  type: "password",
222
- value: password
219
+ value: password,
220
+ onChange: (event) => setPassword(event.currentTarget.value)
223
221
  })), errorBanner, createElement2("button", {
224
222
  className: classNames?.button,
225
223
  "data-abs-auth": "submit",
@@ -262,12 +260,12 @@ var UserButton = ({
262
260
  }, item.label)), createElement3("button", {
263
261
  className: classNames?.signOut,
264
262
  "data-abs-auth": "sign-out",
263
+ type: "button",
265
264
  onClick: async () => {
266
265
  await mutate(undefined);
267
266
  setOpen(false);
268
267
  onSignOut?.();
269
- },
270
- type: "button"
268
+ }
271
269
  }, signOutLabel)) : null;
272
270
  const avatar = user.avatarUrl === undefined ? createElement3("span", {
273
271
  className: classNames?.avatar,
@@ -286,8 +284,8 @@ var UserButton = ({
286
284
  "aria-expanded": open,
287
285
  className: classNames?.toggle,
288
286
  "data-abs-auth": "user-toggle",
289
- onClick: () => setOpen((prev) => !prev),
290
- type: "button"
287
+ type: "button",
288
+ onClick: () => setOpen((prev) => !prev)
291
289
  }, avatar, createElement3("span", { className: classNames?.email, "data-abs-auth": "user-email" }, user.givenName ?? user.email ?? "Account")), menu);
292
290
  };
293
291
 
@@ -319,6 +317,7 @@ var useMutation = (run) => {
319
317
  return { data, error, isPending, mutate, reset };
320
318
  };
321
319
  var useMagicLink = (client) => useMutation(client.passwordless.requestMagicLink);
320
+ var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
322
321
  var usePasskeyAutofill = (client) => {
323
322
  const [data, setData] = useState4(null);
324
323
  const [error, setError] = useState4(null);
@@ -342,8 +341,9 @@ var usePasskeyAutofill = (client) => {
342
341
  }, []);
343
342
  return { cancel, data, error, isPending, start };
344
343
  };
345
- var useUpgradeToPasskey = (client) => {
346
- const [passkeys, setPasskeys] = useState4(null);
344
+ var usePasswordReset = (client) => useMutation(client.passwordReset.request);
345
+ var useSessions = (client) => {
346
+ const [data, setData] = useState4(null);
347
347
  const [error, setError] = useState4(null);
348
348
  const [isPending, setIsPending] = useState4(true);
349
349
  const mountedRef = useRef(true);
@@ -352,9 +352,9 @@ var useUpgradeToPasskey = (client) => {
352
352
  }, []);
353
353
  const refetch = useCallback(async () => {
354
354
  setIsPending(true);
355
- const result = await client.passkeys.list();
355
+ const result = await client.sessions.list();
356
356
  if (mountedRef.current) {
357
- setPasskeys(result.data);
357
+ setData(result.data);
358
358
  setError(result.error);
359
359
  setIsPending(false);
360
360
  }
@@ -362,19 +362,19 @@ var useUpgradeToPasskey = (client) => {
362
362
  useEffect(() => {
363
363
  refetch();
364
364
  }, [refetch]);
365
- const register = useCallback(async () => {
366
- const result = await runPasskeyRegistration(client);
365
+ const revoke = useCallback(async (sessionId) => {
366
+ const result = await client.sessions.revoke(sessionId);
367
367
  if (result.error === null)
368
368
  await refetch();
369
369
  return result;
370
370
  }, [client, refetch]);
371
- const shouldPrompt = passkeys !== null && passkeys.length === 0;
372
- return { error, isPending, passkeys, refetch, register, shouldPrompt };
371
+ return { data, error, isPending, refetch, revoke };
373
372
  };
374
- var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
375
- var usePasswordReset = (client) => useMutation(client.passwordReset.request);
376
- var useSessions = (client) => {
377
- const [data, setData] = useState4(null);
373
+ var useSignIn = (client) => useMutation(client.signIn.email);
374
+ var useSignOut = (client) => useMutation(client.signOut);
375
+ var useSignUp = (client) => useMutation(client.signUp.email);
376
+ var useUpgradeToPasskey = (client) => {
377
+ const [passkeys, setPasskeys] = useState4(null);
378
378
  const [error, setError] = useState4(null);
379
379
  const [isPending, setIsPending] = useState4(true);
380
380
  const mountedRef = useRef(true);
@@ -383,9 +383,9 @@ var useSessions = (client) => {
383
383
  }, []);
384
384
  const refetch = useCallback(async () => {
385
385
  setIsPending(true);
386
- const result = await client.sessions.list();
386
+ const result = await client.passkeys.list();
387
387
  if (mountedRef.current) {
388
- setData(result.data);
388
+ setPasskeys(result.data);
389
389
  setError(result.error);
390
390
  setIsPending(false);
391
391
  }
@@ -393,17 +393,15 @@ var useSessions = (client) => {
393
393
  useEffect(() => {
394
394
  refetch();
395
395
  }, [refetch]);
396
- const revoke = useCallback(async (sessionId) => {
397
- const result = await client.sessions.revoke(sessionId);
396
+ const register = useCallback(async () => {
397
+ const result = await runPasskeyRegistration(client);
398
398
  if (result.error === null)
399
399
  await refetch();
400
400
  return result;
401
401
  }, [client, refetch]);
402
- return { data, error, isPending, refetch, revoke };
402
+ const shouldPrompt = passkeys !== null && passkeys.length === 0;
403
+ return { error, isPending, passkeys, refetch, register, shouldPrompt };
403
404
  };
404
- var useSignIn = (client) => useMutation(client.signIn.email);
405
- var useSignOut = (client) => useMutation(client.signOut);
406
- var useSignUp = (client) => useMutation(client.signUp.email);
407
405
  export {
408
406
  useUpgradeToPasskey,
409
407
  useSignUp,
@@ -419,5 +417,5 @@ export {
419
417
  SignIn
420
418
  };
421
419
 
422
- //# debugId=348DC4D111BAE2D764756E2164756E21
420
+ //# debugId=BD77ABF59C4B6DD264756E2164756E21
423
421
  //# sourceMappingURL=react.js.map
@@ -2,13 +2,13 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/client/react.ts", "../src/client/passkeyHelpers.ts", "../src/client/components/react/SignIn.ts", "../src/client/components/react/SignUp.ts", "../src/client/components/react/UserButton.ts"],
4
4
  "sourcesContent": [
5
- "// Thin React hooks over `createAuthClient`. Same `{ data, error }` shape; the hook adds\n// `isPending` state and a stable mutator. Bring your own form/UI — these are primitives, not\n// components. Composables (Vue/Solid/Svelte) will follow the same pattern over the same client.\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\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: Data | null;\n\terror: AuthClientError | null;\n\tisPending: boolean;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation hook. The other hooks are 1–2 line specializations of this — kept private\n// here so consumers see the cohesive named API and don't depend on this shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst [data, setData] = useState<Data | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(false);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst mutate: Mutator<Args, Data> = useCallback(\n\t\tasync (args) => {\n\t\t\tsetIsPending(true);\n\t\t\tsetError(null);\n\t\t\tconst result = await run(args);\n\t\t\tif (mountedRef.current) {\n\t\t\t\tsetData(result.data);\n\t\t\t\tsetError(result.error);\n\t\t\t\tsetIsPending(false);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\t[run]\n\t);\n\n\tconst reset = useCallback(() => {\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 (\"passkey autofill\"). Mount once on the sign-in page with an\n// `<input autocomplete=\"username webauthn\" />` and call `start()` in an effect; the\n// browser surfaces saved passkeys directly in the autofill dropdown. The result feeds\n// the same authenticate-verify route the click-driven flow uses. `cancel()` aborts an\n// in-flight ceremony (e.g. when the user clicks the password tab).\nexport const usePasskeyAutofill = (client: AuthClient) => {\n\tconst [data, setData] = useState<{ status: 'authenticated' } | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(false);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst start = useCallback(async () => {\n\t\tsetIsPending(true);\n\t\tsetError(null);\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tif (mountedRef.current) {\n\t\t\tsetData(result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t}, [client]);\n\n\tconst cancel = useCallback(() => {\n\t\t// startAuthentication doesn't expose an AbortController in @simplewebauthn/browser;\n\t\t// best-effort cancel is to clear the pending flag. The Promise will still resolve\n\t\t// when the browser autofill dismisses; mountedRef gates the result write.\n\t\tsetIsPending(false);\n\t}, []);\n\n\treturn { cancel, data, error, isPending, start };\n};\n\n// \"Upgrade to passkey\" prompt — query whether the signed-in user has registered any\n// passkeys yet; surface `shouldPrompt: true` when they don't, plus a `register()` that\n// runs the registration ceremony and refetches the list. Wire `shouldPrompt` to your CTA\n// component so password users see \"save a passkey to this device for next time?\" after\n// they sign in.\nexport const useUpgradeToPasskey = (client: AuthClient) => {\n\tconst [passkeys, setPasskeys] = useState<unknown[] | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(true);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst refetch = useCallback(async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.passkeys.list();\n\t\tif (mountedRef.current) {\n\t\t\tsetPasskeys(result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refetch();\n\t}, [refetch]);\n\n\tconst register = useCallback(async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t}, [client, refetch]);\n\n\tconst shouldPrompt = passkeys !== null && passkeys.length === 0;\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 hook for the user's active sessions; refetch() reruns it. The shape matches the\n// mutation hooks closely (isPending/error/data) so the consumer can render one way.\nexport const useSessions = (client: AuthClient) => {\n\tconst [data, setData] = useState<unknown[] | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(true);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst refetch = useCallback(async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.sessions.list();\n\t\tif (mountedRef.current) {\n\t\t\tsetData(result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refetch();\n\t}, [refetch]);\n\n\tconst revoke = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await client.sessions.revoke(sessionId);\n\t\t\tif (result.error === null) await refetch();\n\n\t\t\treturn result;\n\t\t},\n\t\t[client, refetch]\n\t);\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\n// Drop-in headless components — minimal default markup, fully\n// restyleable via the `classNames` prop. Every element carries a\n// `data-abs-auth=…` attribute the consumer can target from CSS. Useful\n// when migrating off Clerk's `<UserButton />` / `<SignIn />`: pass\n// `classNames` to match your existing visual treatment, drop the\n// vendor dep.\nexport { SignIn, type SignInProps } from './components/react/SignIn';\nexport { SignUp, type SignUpProps } from './components/react/SignUp';\nexport {\n\tUserButton,\n\ttype UserButtonItem,\n\ttype UserButtonProps,\n\ttype UserButtonUser\n} from './components/react/UserButton';\n",
5
+ "// Thin React hooks over `createAuthClient`. Same `{ data, error }` shape; the hook adds\n// `isPending` state and a stable mutator. Bring your own form/UI — these are primitives, not\n// components. Composables (Vue/Solid/Svelte) will follow the same pattern over the same client.\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\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: Data | null;\n\terror: AuthClientError | null;\n\tisPending: boolean;\n\tmutate: Mutator<Args, Data>;\n\treset: () => void;\n};\n\n// Generic mutation hook. The other hooks are 1–2 line specializations of this — kept private\n// here so consumers see the cohesive named API and don't depend on this shape.\nconst useMutation = <Args, Data>(\n\trun: Mutator<Args, Data>\n): MutationState<Args, Data> => {\n\tconst [data, setData] = useState<Data | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(false);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst mutate: Mutator<Args, Data> = useCallback(\n\t\tasync (args) => {\n\t\t\tsetIsPending(true);\n\t\t\tsetError(null);\n\t\t\tconst result = await run(args);\n\t\t\tif (mountedRef.current) {\n\t\t\t\tsetData(result.data);\n\t\t\t\tsetError(result.error);\n\t\t\t\tsetIsPending(false);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\t[run]\n\t);\n\n\tconst reset = useCallback(() => {\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] = useState<{ status: 'authenticated' } | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(false);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst start = useCallback(async () => {\n\t\tsetIsPending(true);\n\t\tsetError(null);\n\t\tconst result = await runConditionalAuthentication(client);\n\t\tif (mountedRef.current) {\n\t\t\tsetData(result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t}, [client]);\n\n\tconst cancel = useCallback(() => {\n\t\t// startAuthentication doesn't expose an AbortController in @simplewebauthn/browser;\n\t\t// best-effort cancel is to clear the pending flag. The Promise will still resolve\n\t\t// when the browser autofill dismisses; mountedRef gates the result write.\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] = useState<unknown[] | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(true);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst refetch = useCallback(async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.sessions.list();\n\t\tif (mountedRef.current) {\n\t\t\tsetData(result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refetch();\n\t}, [refetch]);\n\n\tconst revoke = useCallback(\n\t\tasync (sessionId: string) => {\n\t\t\tconst result = await client.sessions.revoke(sessionId);\n\t\t\tif (result.error === null) await refetch();\n\n\t\t\treturn result;\n\t\t},\n\t\t[client, refetch]\n\t);\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] = useState<unknown[] | null>(null);\n\tconst [error, setError] = useState<AuthClientError | null>(null);\n\tconst [isPending, setIsPending] = useState(true);\n\tconst mountedRef = useRef(true);\n\tuseEffect(\n\t\t() => () => {\n\t\t\tmountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tconst refetch = useCallback(async () => {\n\t\tsetIsPending(true);\n\t\tconst result = await client.passkeys.list();\n\t\tif (mountedRef.current) {\n\t\t\tsetPasskeys(result.data);\n\t\t\tsetError(result.error);\n\t\t\tsetIsPending(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tvoid refetch();\n\t}, [refetch]);\n\n\tconst register = useCallback(async () => {\n\t\tconst result = await runPasskeyRegistration(client);\n\t\tif (result.error === null) await refetch();\n\n\t\treturn result;\n\t}, [client, refetch]);\n\n\tconst shouldPrompt = passkeys !== null && passkeys.length === 0;\n\n\treturn { error, isPending, passkeys, refetch, register, shouldPrompt };\n};\n\n// Drop-in headless components — minimal default markup, fully\n// restyleable via the `classNames` prop. Every element carries a\n// `data-abs-auth=…` attribute the consumer can target from CSS. Useful\n// when migrating off Clerk's `<UserButton />` / `<SignIn />`: pass\n// `classNames` to match your existing visual treatment, drop the\n// vendor dep.\nexport { SignIn, type SignInProps } from './components/react/SignIn';\nexport { SignUp, type SignUpProps } from './components/react/SignUp';\nexport {\n\tUserButton,\n\ttype UserButtonItem,\n\ttype UserButtonProps,\n\ttype UserButtonUser\n} from './components/react/UserButton';\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
- "// Drop-in sign-in component for React. Headless — minimal default\n// markup, every element has a stable `data-abs-auth` attribute the\n// consumer can target from their own CSS. Doesn't bundle styles;\n// consumers bring their own (Tailwind class lists, CSS-in-JS,\n// vanilla CSS, whatever).\n//\n// Usage:\n//\n// import { SignIn } from '@absolutejs/auth/react';\n//\n// <SignIn\n// client={authClient}\n// onSuccess={() => router.push('/dashboard')}\n// providers={['google', 'github']}\n// />\n//\n// The component renders an email/password form, calls the package's\n// useSignIn hook on submit, and emits onSuccess/onError. OAuth provider\n// buttons (when `providers` is set) are real anchor links to\n// `/oauth2/authorize?provider=…` — the consumer's existing OAuth\n// roundtrip + onCallbackSuccess hook is what handles the rest.\nimport { createElement, type FormEvent } from 'react';\nimport { useState } from 'react';\nimport type { AuthClient, AuthClientError } from '../../createAuthClient';\nimport { useSignIn } from '../../react';\n\ntype AuthnSuccess = {\n\tpasswordCompromised?: boolean;\n\tstatus: 'authenticated' | 'mfa_required';\n};\n\nexport type SignInProps = {\n\tclient: AuthClient;\n\tclassNames?: {\n\t\tbutton?: string;\n\t\tcontainer?: string;\n\t\tdivider?: string;\n\t\terror?: string;\n\t\tfield?: string;\n\t\tinput?: string;\n\t\tlabel?: string;\n\t\toauthButton?: string;\n\t\toauthGrid?: string;\n\t};\n\temailLabel?: string;\n\tonError?: (error: AuthClientError) => void;\n\tonSuccess?: (result: AuthnSuccess) => void;\n\tpasswordLabel?: string;\n\t// OAuth provider keys (lowercase, matching your auth() config) to render\n\t// as buttons above the email/password form. e.g. ['google', 'github'].\n\tproviders?: string[];\n\tsubmitLabel?: string;\n};\n\nexport const SignIn = ({\n\tclient,\n\tclassNames,\n\temailLabel = 'Email',\n\tonError,\n\tonSuccess,\n\tpasswordLabel = 'Password',\n\tproviders,\n\tsubmitLabel = 'Sign in'\n}: SignInProps) => {\n\tconst [email, setEmail] = useState('');\n\tconst [password, setPassword] = useState('');\n\tconst { error, isPending, mutate } = useSignIn(client);\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tconst result = await mutate({ email, password });\n\t\tif (result.error !== null) {\n\t\t\tonError?.(result.error);\n\n\t\t\treturn;\n\t\t}\n\t\tif (result.data !== null) onSuccess?.(result.data);\n\t};\n\n\tconst oauthButtons =\n\t\tproviders === undefined || providers.length === 0\n\t\t\t? null\n\t\t\t: createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.oauthGrid,\n\t\t\t\t\t\t'data-abs-auth': 'oauth-grid'\n\t\t\t\t\t},\n\t\t\t\t\t...providers.map((provider) =>\n\t\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: classNames?.oauthButton,\n\t\t\t\t\t\t\t\t'data-abs-auth-provider': provider,\n\t\t\t\t\t\t\t\thref: `/oauth2/authorize?provider=${provider}`,\n\t\t\t\t\t\t\t\tkey: provider\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t`Continue with ${provider}`\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classNames?.divider,\n\t\t\t\t\t\t\t'data-abs-auth': 'divider'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'or'\n\t\t\t\t\t)\n\t\t\t\t);\n\n\tconst errorBanner =\n\t\terror === null\n\t\t\t? null\n\t\t\t: createElement(\n\t\t\t\t\t'p',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.error,\n\t\t\t\t\t\t'data-abs-auth': 'error',\n\t\t\t\t\t\trole: 'alert'\n\t\t\t\t\t},\n\t\t\t\t\terror.message\n\t\t\t\t);\n\n\treturn createElement(\n\t\t'form',\n\t\t{\n\t\t\tclassName: classNames?.container,\n\t\t\t'data-abs-auth': 'sign-in',\n\t\t\tonSubmit: handleSubmit\n\t\t},\n\t\toauthButtons,\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'email-field' },\n\t\t\tcreateElement('span', { className: classNames?.label }, emailLabel),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'username webauthn',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tname: 'email',\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetEmail(event.currentTarget.value),\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'email',\n\t\t\t\tvalue: email\n\t\t\t})\n\t\t),\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'password-field' },\n\t\t\tcreateElement(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.label },\n\t\t\t\tpasswordLabel\n\t\t\t),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'current-password',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tminLength: 12,\n\t\t\t\tname: 'password',\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetPassword(event.currentTarget.value),\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'password',\n\t\t\t\tvalue: password\n\t\t\t})\n\t\t),\n\t\terrorBanner,\n\t\tcreateElement(\n\t\t\t'button',\n\t\t\t{\n\t\t\t\tclassName: classNames?.button,\n\t\t\t\t'data-abs-auth': 'submit',\n\t\t\t\tdisabled: isPending,\n\t\t\t\ttype: 'submit'\n\t\t\t},\n\t\t\tisPending ? 'Signing in…' : submitLabel\n\t\t)\n\t);\n};\n",
8
- "// Drop-in sign-up component for React. Mirrors SignIn but calls\n// useSignUp + advertises the 12-character minimum-length we enforce\n// at the package level. See SignIn for the design rationale + the\n// data-abs-auth attribute hook system.\nimport { createElement, type FormEvent } from 'react';\nimport { useState } from 'react';\nimport type { AuthClient, AuthClientError } from '../../createAuthClient';\nimport { useSignUp } from '../../react';\n\ntype SignUpSuccess =\n\t| { status: 'authenticated' }\n\t| { status: 'verification_required' };\n\nexport type SignUpProps = {\n\tclient: AuthClient;\n\tclassNames?: {\n\t\tbutton?: string;\n\t\tcontainer?: string;\n\t\terror?: string;\n\t\tfield?: string;\n\t\tinput?: string;\n\t\tlabel?: string;\n\t};\n\temailLabel?: string;\n\tonError?: (error: AuthClientError) => void;\n\tonSuccess?: (result: SignUpSuccess) => void;\n\tpasswordLabel?: string;\n\tsubmitLabel?: string;\n};\n\nexport const SignUp = ({\n\tclient,\n\tclassNames,\n\temailLabel = 'Email',\n\tonError,\n\tonSuccess,\n\tpasswordLabel = 'Password (12+ characters)',\n\tsubmitLabel = 'Create account'\n}: SignUpProps) => {\n\tconst [email, setEmail] = useState('');\n\tconst [password, setPassword] = useState('');\n\tconst { error, isPending, mutate } = useSignUp(client);\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tconst result = await mutate({ email, password });\n\t\tif (result.error !== null) {\n\t\t\tonError?.(result.error);\n\n\t\t\treturn;\n\t\t}\n\t\tif (result.data !== null) onSuccess?.(result.data);\n\t};\n\n\tconst errorBanner =\n\t\terror === null\n\t\t\t? null\n\t\t\t: createElement(\n\t\t\t\t\t'p',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.error,\n\t\t\t\t\t\t'data-abs-auth': 'error',\n\t\t\t\t\t\trole: 'alert'\n\t\t\t\t\t},\n\t\t\t\t\terror.message\n\t\t\t\t);\n\n\treturn createElement(\n\t\t'form',\n\t\t{\n\t\t\tclassName: classNames?.container,\n\t\t\t'data-abs-auth': 'sign-up',\n\t\t\tonSubmit: handleSubmit\n\t\t},\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'email-field' },\n\t\t\tcreateElement('span', { className: classNames?.label }, emailLabel),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'email',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tname: 'email',\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetEmail(event.currentTarget.value),\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'email',\n\t\t\t\tvalue: email\n\t\t\t})\n\t\t),\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'password-field' },\n\t\t\tcreateElement(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.label },\n\t\t\t\tpasswordLabel\n\t\t\t),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'new-password',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tminLength: 12,\n\t\t\t\tname: 'password',\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetPassword(event.currentTarget.value),\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'password',\n\t\t\t\tvalue: password\n\t\t\t})\n\t\t),\n\t\terrorBanner,\n\t\tcreateElement(\n\t\t\t'button',\n\t\t\t{\n\t\t\t\tclassName: classNames?.button,\n\t\t\t\t'data-abs-auth': 'submit',\n\t\t\t\tdisabled: isPending,\n\t\t\t\ttype: 'submit'\n\t\t\t},\n\t\t\tisPending ? 'Creating account…' : submitLabel\n\t\t)\n\t);\n};\n",
9
- "// Drop-in current-user button for React. The component that Clerk's\n// `<UserButton />` was sticky for: shows the signed-in user's email +\n// avatar, expands to a menu on click, exposes sign-out + a\n// customizable list of links.\n//\n// Usage:\n//\n// <UserButton\n// client={authClient}\n// user={user} // your AuthUser-shaped record\n// items={[\n// { label: 'Settings', href: '/settings' },\n// { label: 'API keys', href: '/settings/api' }\n// ]}\n// onSignOut={() => router.push('/')}\n// />\n//\n// The component owns NO data fetching — the consumer passes `user` from\n// wherever they keep session state. Sign-out goes through the package's\n// /oauth2/signout (universal across credential + OAuth sessions since\n// 0.32.0).\nimport { createElement, useState } from 'react';\nimport type { AuthClient } from '../../createAuthClient';\nimport { useSignOut } from '../../react';\n\nexport type UserButtonUser = {\n\tavatarUrl?: string;\n\temail?: string;\n\tgivenName?: string;\n};\n\nexport type UserButtonItem = {\n\thref: string;\n\tlabel: string;\n};\n\nexport type UserButtonProps = {\n\tclient: AuthClient;\n\tclassNames?: {\n\t\tavatar?: string;\n\t\tcontainer?: string;\n\t\temail?: string;\n\t\tmenu?: string;\n\t\tmenuItem?: string;\n\t\tsignOut?: string;\n\t\ttoggle?: string;\n\t};\n\titems?: UserButtonItem[];\n\tonSignOut?: () => void;\n\tsignedOutHref?: string;\n\tsignOutLabel?: string;\n\tuser: UserButtonUser | null;\n};\n\nconst initial = (user: UserButtonUser) => {\n\tconst source = user.givenName ?? user.email ?? '?';\n\n\treturn source.slice(0, 1).toUpperCase();\n};\n\nexport const UserButton = ({\n\tclient,\n\tclassNames,\n\titems,\n\tonSignOut,\n\tsignedOutHref = '/',\n\tsignOutLabel = 'Sign out',\n\tuser\n}: UserButtonProps) => {\n\tconst [open, setOpen] = useState(false);\n\tconst { mutate } = useSignOut(client);\n\n\tif (user === null) {\n\t\treturn createElement(\n\t\t\t'a',\n\t\t\t{\n\t\t\t\tclassName: classNames?.toggle,\n\t\t\t\t'data-abs-auth': 'signed-out',\n\t\t\t\thref: signedOutHref\n\t\t\t},\n\t\t\t'Sign in'\n\t\t);\n\t}\n\n\tconst menu = open\n\t\t? createElement(\n\t\t\t\t'div',\n\t\t\t\t{\n\t\t\t\t\tclassName: classNames?.menu,\n\t\t\t\t\t'data-abs-auth': 'menu'\n\t\t\t\t},\n\t\t\t\t...((items ?? []).map((item) =>\n\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classNames?.menuItem,\n\t\t\t\t\t\t\t'data-abs-auth-menu-item': item.label,\n\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\tkey: item.href\n\t\t\t\t\t\t},\n\t\t\t\t\t\titem.label\n\t\t\t\t\t)\n\t\t\t\t) as ReturnType<typeof createElement>[]),\n\t\t\t\tcreateElement(\n\t\t\t\t\t'button',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.signOut,\n\t\t\t\t\t\t'data-abs-auth': 'sign-out',\n\t\t\t\t\t\tonClick: async () => {\n\t\t\t\t\t\t\tawait mutate(undefined);\n\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\tonSignOut?.();\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: 'button'\n\t\t\t\t\t},\n\t\t\t\t\tsignOutLabel\n\t\t\t\t)\n\t\t\t)\n\t\t: null;\n\n\tconst avatar =\n\t\tuser.avatarUrl === undefined\n\t\t\t? createElement(\n\t\t\t\t\t'span',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.avatar,\n\t\t\t\t\t\t'data-abs-auth': 'avatar-initial'\n\t\t\t\t\t},\n\t\t\t\t\tinitial(user)\n\t\t\t\t)\n\t\t\t: createElement('img', {\n\t\t\t\t\talt: '',\n\t\t\t\t\tclassName: classNames?.avatar,\n\t\t\t\t\t'data-abs-auth': 'avatar',\n\t\t\t\t\tsrc: user.avatarUrl\n\t\t\t\t});\n\n\treturn createElement(\n\t\t'div',\n\t\t{\n\t\t\tclassName: classNames?.container,\n\t\t\t'data-abs-auth': 'user-button',\n\t\t\t'data-abs-auth-open': open ? 'true' : 'false'\n\t\t},\n\t\tcreateElement(\n\t\t\t'button',\n\t\t\t{\n\t\t\t\t'aria-expanded': open,\n\t\t\t\tclassName: classNames?.toggle,\n\t\t\t\t'data-abs-auth': 'user-toggle',\n\t\t\t\tonClick: () => setOpen((prev) => !prev),\n\t\t\t\ttype: 'button'\n\t\t\t},\n\t\t\tavatar,\n\t\t\tcreateElement(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.email, 'data-abs-auth': 'user-email' },\n\t\t\t\tuser.givenName ?? user.email ?? 'Account'\n\t\t\t)\n\t\t),\n\t\tmenu\n\t);\n};\n"
7
+ "// Drop-in sign-in component for React. Headless — minimal default\n// markup, every element has a stable `data-abs-auth` attribute the\n// consumer can target from their own CSS. Doesn't bundle styles;\n// consumers bring their own (Tailwind class lists, CSS-in-JS,\n// vanilla CSS, whatever).\n//\n// Usage:\n//\n// import { SignIn } from '@absolutejs/auth/react';\n//\n// <SignIn\n// client={authClient}\n// onSuccess={() => router.push('/dashboard')}\n// providers={['google', 'github']}\n// />\n//\n// The component renders an email/password form, calls the package's\n// useSignIn hook on submit, and emits onSuccess/onError. OAuth provider\n// buttons (when `providers` is set) are real anchor links to\n// `/oauth2/authorize?provider=…` — the consumer's existing OAuth\n// roundtrip + onCallbackSuccess hook is what handles the rest.\nimport { createElement, type FormEvent, useState } from 'react';\nimport type { AuthClient, AuthClientError } from '../../createAuthClient';\nimport { useSignIn } from '../../react';\n\ntype AuthnSuccess = {\n\tpasswordCompromised?: boolean;\n\tstatus: 'authenticated' | 'mfa_required';\n};\n\nexport type SignInProps = {\n\tclient: AuthClient;\n\tclassNames?: {\n\t\tbutton?: string;\n\t\tcontainer?: string;\n\t\tdivider?: string;\n\t\terror?: string;\n\t\tfield?: string;\n\t\tinput?: string;\n\t\tlabel?: string;\n\t\toauthButton?: string;\n\t\toauthGrid?: string;\n\t};\n\temailLabel?: string;\n\tonError?: (error: AuthClientError) => void;\n\tonSuccess?: (result: AuthnSuccess) => void;\n\tpasswordLabel?: string;\n\t// OAuth provider keys (lowercase, matching your auth() config) to render\n\t// as buttons above the email/password form. e.g. ['google', 'github'].\n\tproviders?: string[];\n\tsubmitLabel?: string;\n};\n\nexport const SignIn = ({\n\tclient,\n\tclassNames,\n\temailLabel = 'Email',\n\tonError,\n\tonSuccess,\n\tpasswordLabel = 'Password',\n\tproviders,\n\tsubmitLabel = 'Sign in'\n}: SignInProps) => {\n\tconst [email, setEmail] = useState('');\n\tconst [password, setPassword] = useState('');\n\tconst { error, isPending, mutate } = useSignIn(client);\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tconst result = await mutate({ email, password });\n\t\tif (result.error !== null) {\n\t\t\tonError?.(result.error);\n\n\t\t\treturn;\n\t\t}\n\t\tif (result.data !== null) onSuccess?.(result.data);\n\t};\n\n\tconst oauthButtons =\n\t\tproviders === undefined || providers.length === 0\n\t\t\t? null\n\t\t\t: createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.oauthGrid,\n\t\t\t\t\t\t'data-abs-auth': 'oauth-grid'\n\t\t\t\t\t},\n\t\t\t\t\t...providers.map((provider) =>\n\t\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: classNames?.oauthButton,\n\t\t\t\t\t\t\t\t'data-abs-auth-provider': provider,\n\t\t\t\t\t\t\t\thref: `/oauth2/authorize?provider=${provider}`,\n\t\t\t\t\t\t\t\tkey: provider\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t`Continue with ${provider}`\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classNames?.divider,\n\t\t\t\t\t\t\t'data-abs-auth': 'divider'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'or'\n\t\t\t\t\t)\n\t\t\t\t);\n\n\tconst errorBanner =\n\t\terror === null\n\t\t\t? null\n\t\t\t: createElement(\n\t\t\t\t\t'p',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.error,\n\t\t\t\t\t\t'data-abs-auth': 'error',\n\t\t\t\t\t\trole: 'alert'\n\t\t\t\t\t},\n\t\t\t\t\terror.message\n\t\t\t\t);\n\n\treturn createElement(\n\t\t'form',\n\t\t{\n\t\t\tclassName: classNames?.container,\n\t\t\t'data-abs-auth': 'sign-in',\n\t\t\tonSubmit: handleSubmit\n\t\t},\n\t\toauthButtons,\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'email-field' },\n\t\t\tcreateElement('span', { className: classNames?.label }, emailLabel),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'username webauthn',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tname: 'email',\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'email',\n\t\t\t\tvalue: email,\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetEmail(event.currentTarget.value)\n\t\t\t})\n\t\t),\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'password-field' },\n\t\t\tcreateElement(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.label },\n\t\t\t\tpasswordLabel\n\t\t\t),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'current-password',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tminLength: 12,\n\t\t\t\tname: 'password',\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'password',\n\t\t\t\tvalue: password,\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetPassword(event.currentTarget.value)\n\t\t\t})\n\t\t),\n\t\terrorBanner,\n\t\tcreateElement(\n\t\t\t'button',\n\t\t\t{\n\t\t\t\tclassName: classNames?.button,\n\t\t\t\t'data-abs-auth': 'submit',\n\t\t\t\tdisabled: isPending,\n\t\t\t\ttype: 'submit'\n\t\t\t},\n\t\t\tisPending ? 'Signing in…' : submitLabel\n\t\t)\n\t);\n};\n",
8
+ "// Drop-in sign-up component for React. Mirrors SignIn but calls\n// useSignUp + advertises the 12-character minimum-length we enforce\n// at the package level. See SignIn for the design rationale + the\n// data-abs-auth attribute hook system.\nimport { createElement, type FormEvent, useState } from 'react';\nimport type { AuthClient, AuthClientError } from '../../createAuthClient';\nimport { useSignUp } from '../../react';\n\ntype SignUpSuccess =\n\t| { status: 'authenticated' }\n\t| { status: 'verification_required' };\n\nexport type SignUpProps = {\n\tclient: AuthClient;\n\tclassNames?: {\n\t\tbutton?: string;\n\t\tcontainer?: string;\n\t\terror?: string;\n\t\tfield?: string;\n\t\tinput?: string;\n\t\tlabel?: string;\n\t};\n\temailLabel?: string;\n\tonError?: (error: AuthClientError) => void;\n\tonSuccess?: (result: SignUpSuccess) => void;\n\tpasswordLabel?: string;\n\tsubmitLabel?: string;\n};\n\nexport const SignUp = ({\n\tclient,\n\tclassNames,\n\temailLabel = 'Email',\n\tonError,\n\tonSuccess,\n\tpasswordLabel = 'Password (12+ characters)',\n\tsubmitLabel = 'Create account'\n}: SignUpProps) => {\n\tconst [email, setEmail] = useState('');\n\tconst [password, setPassword] = useState('');\n\tconst { error, isPending, mutate } = useSignUp(client);\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tconst result = await mutate({ email, password });\n\t\tif (result.error !== null) {\n\t\t\tonError?.(result.error);\n\n\t\t\treturn;\n\t\t}\n\t\tif (result.data !== null) onSuccess?.(result.data);\n\t};\n\n\tconst errorBanner =\n\t\terror === null\n\t\t\t? null\n\t\t\t: createElement(\n\t\t\t\t\t'p',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.error,\n\t\t\t\t\t\t'data-abs-auth': 'error',\n\t\t\t\t\t\trole: 'alert'\n\t\t\t\t\t},\n\t\t\t\t\terror.message\n\t\t\t\t);\n\n\treturn createElement(\n\t\t'form',\n\t\t{\n\t\t\tclassName: classNames?.container,\n\t\t\t'data-abs-auth': 'sign-up',\n\t\t\tonSubmit: handleSubmit\n\t\t},\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'email-field' },\n\t\t\tcreateElement('span', { className: classNames?.label }, emailLabel),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'email',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tname: 'email',\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'email',\n\t\t\t\tvalue: email,\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetEmail(event.currentTarget.value)\n\t\t\t})\n\t\t),\n\t\tcreateElement(\n\t\t\t'label',\n\t\t\t{ className: classNames?.field, 'data-abs-auth': 'password-field' },\n\t\t\tcreateElement(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.label },\n\t\t\t\tpasswordLabel\n\t\t\t),\n\t\t\tcreateElement('input', {\n\t\t\t\tautoComplete: 'new-password',\n\t\t\t\tclassName: classNames?.input,\n\t\t\t\tminLength: 12,\n\t\t\t\tname: 'password',\n\t\t\t\trequired: true,\n\t\t\t\ttype: 'password',\n\t\t\t\tvalue: password,\n\t\t\t\tonChange: (event: { currentTarget: HTMLInputElement }) =>\n\t\t\t\t\tsetPassword(event.currentTarget.value)\n\t\t\t})\n\t\t),\n\t\terrorBanner,\n\t\tcreateElement(\n\t\t\t'button',\n\t\t\t{\n\t\t\t\tclassName: classNames?.button,\n\t\t\t\t'data-abs-auth': 'submit',\n\t\t\t\tdisabled: isPending,\n\t\t\t\ttype: 'submit'\n\t\t\t},\n\t\t\tisPending ? 'Creating account…' : submitLabel\n\t\t)\n\t);\n};\n",
9
+ "// Drop-in current-user button for React. The component that Clerk's\n// `<UserButton />` was sticky for: shows the signed-in user's email +\n// avatar, expands to a menu on click, exposes sign-out + a\n// customizable list of links.\n//\n// Usage:\n//\n// <UserButton\n// client={authClient}\n// user={user} // your AuthUser-shaped record\n// items={[\n// { label: 'Settings', href: '/settings' },\n// { label: 'API keys', href: '/settings/api' }\n// ]}\n// onSignOut={() => router.push('/')}\n// />\n//\n// The component owns NO data fetching — the consumer passes `user` from\n// wherever they keep session state. Sign-out goes through the package's\n// /oauth2/signout (universal across credential + OAuth sessions since\n// 0.32.0).\nimport { createElement, useState } from 'react';\nimport type { AuthClient } from '../../createAuthClient';\nimport { useSignOut } from '../../react';\n\nexport type UserButtonUser = {\n\tavatarUrl?: string;\n\temail?: string;\n\tgivenName?: string;\n};\n\nexport type UserButtonItem = {\n\thref: string;\n\tlabel: string;\n};\n\nexport type UserButtonProps = {\n\tclient: AuthClient;\n\tclassNames?: {\n\t\tavatar?: string;\n\t\tcontainer?: string;\n\t\temail?: string;\n\t\tmenu?: string;\n\t\tmenuItem?: string;\n\t\tsignOut?: string;\n\t\ttoggle?: string;\n\t};\n\titems?: UserButtonItem[];\n\tonSignOut?: () => void;\n\tsignedOutHref?: string;\n\tsignOutLabel?: string;\n\tuser: UserButtonUser | null;\n};\n\nconst initial = (user: UserButtonUser) => {\n\tconst source = user.givenName ?? user.email ?? '?';\n\n\treturn source.slice(0, 1).toUpperCase();\n};\n\nexport const UserButton = ({\n\tclient,\n\tclassNames,\n\titems,\n\tonSignOut,\n\tsignedOutHref = '/',\n\tsignOutLabel = 'Sign out',\n\tuser\n}: UserButtonProps) => {\n\tconst [open, setOpen] = useState(false);\n\tconst { mutate } = useSignOut(client);\n\n\tif (user === null) {\n\t\treturn createElement(\n\t\t\t'a',\n\t\t\t{\n\t\t\t\tclassName: classNames?.toggle,\n\t\t\t\t'data-abs-auth': 'signed-out',\n\t\t\t\thref: signedOutHref\n\t\t\t},\n\t\t\t'Sign in'\n\t\t);\n\t}\n\n\tconst menu = open\n\t\t? createElement(\n\t\t\t\t'div',\n\t\t\t\t{\n\t\t\t\t\tclassName: classNames?.menu,\n\t\t\t\t\t'data-abs-auth': 'menu'\n\t\t\t\t},\n\t\t\t\t...(items ?? []).map((item) =>\n\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classNames?.menuItem,\n\t\t\t\t\t\t\t'data-abs-auth-menu-item': item.label,\n\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\tkey: item.href\n\t\t\t\t\t\t},\n\t\t\t\t\t\titem.label\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tcreateElement(\n\t\t\t\t\t'button',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.signOut,\n\t\t\t\t\t\t'data-abs-auth': 'sign-out',\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tonClick: async () => {\n\t\t\t\t\t\t\tawait mutate(undefined);\n\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\tonSignOut?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsignOutLabel\n\t\t\t\t)\n\t\t\t)\n\t\t: null;\n\n\tconst avatar =\n\t\tuser.avatarUrl === undefined\n\t\t\t? createElement(\n\t\t\t\t\t'span',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: classNames?.avatar,\n\t\t\t\t\t\t'data-abs-auth': 'avatar-initial'\n\t\t\t\t\t},\n\t\t\t\t\tinitial(user)\n\t\t\t\t)\n\t\t\t: createElement('img', {\n\t\t\t\t\talt: '',\n\t\t\t\t\tclassName: classNames?.avatar,\n\t\t\t\t\t'data-abs-auth': 'avatar',\n\t\t\t\t\tsrc: user.avatarUrl\n\t\t\t\t});\n\n\treturn createElement(\n\t\t'div',\n\t\t{\n\t\t\tclassName: classNames?.container,\n\t\t\t'data-abs-auth': 'user-button',\n\t\t\t'data-abs-auth-open': open ? 'true' : 'false'\n\t\t},\n\t\tcreateElement(\n\t\t\t'button',\n\t\t\t{\n\t\t\t\t'aria-expanded': open,\n\t\t\t\tclassName: classNames?.toggle,\n\t\t\t\t'data-abs-auth': 'user-toggle',\n\t\t\t\ttype: 'button',\n\t\t\t\tonClick: () => setOpen((prev) => !prev)\n\t\t\t},\n\t\t\tavatar,\n\t\t\tcreateElement(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.email, 'data-abs-auth': 'user-email' },\n\t\t\t\tuser.givenName ?? user.email ?? 'Account'\n\t\t\t)\n\t\t),\n\t\tmenu\n\t);\n};\n"
10
10
  ],
11
- "mappings": "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",
12
- "debugId": "348DC4D111BAE2D764756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "BD77ABF59C4B6DD264756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -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: Accessor<{
@@ -25,27 +30,6 @@ export declare const usePasskeyAutofill: (client: AuthClient) => {
25
30
  isPending: Accessor<boolean>;
26
31
  start: () => Promise<void>;
27
32
  };
28
- export declare const useUpgradeToPasskey: (client: AuthClient) => {
29
- error: Accessor<AuthClientError | null>;
30
- isPending: Accessor<boolean>;
31
- passkeys: Accessor<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: () => 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: Accessor<AuthClientError | null>;
72
+ isPending: Accessor<boolean>;
73
+ passkeys: Accessor<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: () => boolean;
85
+ };
86
86
  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, setData] = createSignal(null);
131
132
  const [error, setError] = createSignal(null);
@@ -149,8 +150,9 @@ var usePasskeyAutofill = (client) => {
149
150
  };
150
151
  return { cancel, data, error, isPending, start };
151
152
  };
152
- var useUpgradeToPasskey = (client) => {
153
- const [passkeys, setPasskeys] = createSignal(null);
153
+ var usePasswordReset = (client) => useMutation(client.passwordReset.request);
154
+ var useSessions = (client) => {
155
+ const [data, setData] = createSignal(null);
154
156
  const [error, setError] = createSignal(null);
155
157
  const [isPending, setIsPending] = createSignal(true);
156
158
  let alive = true;
@@ -159,30 +161,27 @@ var useUpgradeToPasskey = (client) => {
159
161
  });
160
162
  const refetch = async () => {
161
163
  setIsPending(true);
162
- const result = await client.passkeys.list();
164
+ const result = await client.sessions.list();
163
165
  if (alive) {
164
- setPasskeys(() => result.data);
166
+ setData(() => result.data);
165
167
  setError(result.error);
166
168
  setIsPending(false);
167
169
  }
168
170
  };
169
- const register = async () => {
170
- const result = await runPasskeyRegistration(client);
171
+ const revoke = async (sessionId) => {
172
+ const result = await client.sessions.revoke(sessionId);
171
173
  if (result.error === null)
172
174
  await refetch();
173
175
  return result;
174
176
  };
175
177
  refetch();
176
- const shouldPrompt = () => {
177
- const list = passkeys();
178
- return list !== null && list.length === 0;
179
- };
180
- return { error, isPending, passkeys, refetch, register, shouldPrompt };
178
+ return { data, error, isPending, refetch, revoke };
181
179
  };
182
- var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
183
- var usePasswordReset = (client) => useMutation(client.passwordReset.request);
184
- var useSessions = (client) => {
185
- const [data, setData] = createSignal(null);
180
+ var useSignIn = (client) => useMutation(client.signIn.email);
181
+ var useSignOut = (client) => useMutation(client.signOut);
182
+ var useSignUp = (client) => useMutation(client.signUp.email);
183
+ var useUpgradeToPasskey = (client) => {
184
+ const [passkeys, setPasskeys] = createSignal(null);
186
185
  const [error, setError] = createSignal(null);
187
186
  const [isPending, setIsPending] = createSignal(true);
188
187
  let alive = true;
@@ -191,25 +190,26 @@ var useSessions = (client) => {
191
190
  });
192
191
  const refetch = async () => {
193
192
  setIsPending(true);
194
- const result = await client.sessions.list();
193
+ const result = await client.passkeys.list();
195
194
  if (alive) {
196
- setData(() => result.data);
195
+ setPasskeys(() => result.data);
197
196
  setError(result.error);
198
197
  setIsPending(false);
199
198
  }
200
199
  };
201
- const revoke = async (sessionId) => {
202
- const result = await client.sessions.revoke(sessionId);
200
+ const register = async () => {
201
+ const result = await runPasskeyRegistration(client);
203
202
  if (result.error === null)
204
203
  await refetch();
205
204
  return result;
206
205
  };
207
206
  refetch();
208
- return { data, error, isPending, refetch, revoke };
207
+ const shouldPrompt = () => {
208
+ const list = passkeys();
209
+ return list !== null && list.length === 0;
210
+ };
211
+ return { error, isPending, passkeys, refetch, register, shouldPrompt };
209
212
  };
210
- var useSignIn = (client) => useMutation(client.signIn.email);
211
- var useSignOut = (client) => useMutation(client.signOut);
212
- var useSignUp = (client) => useMutation(client.signUp.email);
213
213
  export {
214
214
  useUpgradeToPasskey,
215
215
  useSignUp,
@@ -222,5 +222,5 @@ export {
222
222
  useMagicLink
223
223
  };
224
224
 
225
- //# debugId=55D3A9D24AE5626F64756E2164756E21
225
+ //# debugId=4B1DDEBE7A756E1464756E2164756E21
226
226
  //# sourceMappingURL=solid.js.map