@absolutejs/auth 0.43.0 → 0.44.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.
@@ -0,0 +1,32 @@
1
+ import { type FormEvent } from 'react';
2
+ import type { AuthClient, AuthClientError } from '../../createAuthClient';
3
+ type AuthnSuccess = {
4
+ passwordCompromised?: boolean;
5
+ status: 'authenticated' | 'mfa_required';
6
+ };
7
+ export type SignInProps = {
8
+ client: AuthClient;
9
+ classNames?: {
10
+ button?: string;
11
+ container?: string;
12
+ divider?: string;
13
+ error?: string;
14
+ field?: string;
15
+ input?: string;
16
+ label?: string;
17
+ oauthButton?: string;
18
+ oauthGrid?: string;
19
+ };
20
+ emailLabel?: string;
21
+ onError?: (error: AuthClientError) => void;
22
+ onSuccess?: (result: AuthnSuccess) => void;
23
+ passwordLabel?: string;
24
+ providers?: string[];
25
+ submitLabel?: string;
26
+ };
27
+ export declare const SignIn: ({ client, classNames, emailLabel, onError, onSuccess, passwordLabel, providers, submitLabel }: SignInProps) => import("react").ReactElement<{
28
+ className: string | undefined;
29
+ 'data-abs-auth': string;
30
+ onSubmit: (event: FormEvent<HTMLFormElement>) => Promise<void>;
31
+ }, string | import("react").JSXElementConstructor<any>>;
32
+ export {};
@@ -0,0 +1,29 @@
1
+ import { type FormEvent } from 'react';
2
+ import type { AuthClient, AuthClientError } from '../../createAuthClient';
3
+ type SignUpSuccess = {
4
+ status: 'authenticated';
5
+ } | {
6
+ status: 'verification_required';
7
+ };
8
+ export type SignUpProps = {
9
+ client: AuthClient;
10
+ classNames?: {
11
+ button?: string;
12
+ container?: string;
13
+ error?: string;
14
+ field?: string;
15
+ input?: string;
16
+ label?: string;
17
+ };
18
+ emailLabel?: string;
19
+ onError?: (error: AuthClientError) => void;
20
+ onSuccess?: (result: SignUpSuccess) => void;
21
+ passwordLabel?: string;
22
+ submitLabel?: string;
23
+ };
24
+ export declare const SignUp: ({ client, classNames, emailLabel, onError, onSuccess, passwordLabel, submitLabel }: SignUpProps) => import("react").ReactElement<{
25
+ className: string | undefined;
26
+ 'data-abs-auth': string;
27
+ onSubmit: (event: FormEvent<HTMLFormElement>) => Promise<void>;
28
+ }, string | import("react").JSXElementConstructor<any>>;
29
+ export {};
@@ -0,0 +1,36 @@
1
+ import type { AuthClient } from '../../createAuthClient';
2
+ export type UserButtonUser = {
3
+ avatarUrl?: string;
4
+ email?: string;
5
+ givenName?: string;
6
+ };
7
+ export type UserButtonItem = {
8
+ href: string;
9
+ label: string;
10
+ };
11
+ export type UserButtonProps = {
12
+ client: AuthClient;
13
+ classNames?: {
14
+ avatar?: string;
15
+ container?: string;
16
+ email?: string;
17
+ menu?: string;
18
+ menuItem?: string;
19
+ signOut?: string;
20
+ toggle?: string;
21
+ };
22
+ items?: UserButtonItem[];
23
+ onSignOut?: () => void;
24
+ signedOutHref?: string;
25
+ signOutLabel?: string;
26
+ user: UserButtonUser | null;
27
+ };
28
+ export declare const UserButton: ({ client, classNames, items, onSignOut, signedOutHref, signOutLabel, user }: UserButtonProps) => import("react").DetailedReactHTMLElement<{
29
+ className: string | undefined;
30
+ 'data-abs-auth': string;
31
+ href: string;
32
+ }, HTMLElement> | import("react").DetailedReactHTMLElement<{
33
+ className: string | undefined;
34
+ 'data-abs-auth': string;
35
+ 'data-abs-auth-open': string;
36
+ }, HTMLElement>;
@@ -84,4 +84,6 @@ export declare const useSignUp: (client: AuthClient) => MutationState<{
84
84
  } | {
85
85
  status: "verification_required";
86
86
  }>;
87
- export {};
87
+ export { SignIn, type SignInProps } from './components/react/SignIn';
88
+ export { SignUp, type SignUpProps } from './components/react/SignUp';
89
+ export { UserButton, type UserButtonItem, type UserButtonProps, type UserButtonUser } from './components/react/UserButton';
@@ -503,7 +503,7 @@ var init_esm = __esm(() => {
503
503
  });
504
504
 
505
505
  // src/client/react.ts
506
- import { useCallback, useEffect, useRef, useState } from "react";
506
+ import { useCallback, useEffect, useRef, useState as useState4 } from "react";
507
507
 
508
508
  // src/client/passkeyHelpers.ts
509
509
  var loadBrowser = async () => {
@@ -557,11 +557,204 @@ var runPasskeyRegistration = async (client) => {
557
557
  }
558
558
  };
559
559
 
560
+ // src/client/components/react/SignIn.ts
561
+ import { createElement } from "react";
562
+ import { useState } from "react";
563
+ var SignIn = ({
564
+ client,
565
+ classNames,
566
+ emailLabel = "Email",
567
+ onError,
568
+ onSuccess,
569
+ passwordLabel = "Password",
570
+ providers,
571
+ submitLabel = "Sign in"
572
+ }) => {
573
+ const [email, setEmail] = useState("");
574
+ const [password, setPassword] = useState("");
575
+ const { error, isPending, mutate } = useSignIn(client);
576
+ const handleSubmit = async (event) => {
577
+ event.preventDefault();
578
+ const result = await mutate({ email, password });
579
+ if (result.error !== null) {
580
+ onError?.(result.error);
581
+ return;
582
+ }
583
+ if (result.data !== null)
584
+ onSuccess?.(result.data);
585
+ };
586
+ const oauthButtons = providers === undefined || providers.length === 0 ? null : createElement("div", {
587
+ className: classNames?.oauthGrid,
588
+ "data-abs-auth": "oauth-grid"
589
+ }, ...providers.map((provider) => createElement("a", {
590
+ className: classNames?.oauthButton,
591
+ "data-abs-auth-provider": provider,
592
+ href: `/oauth2/authorize?provider=${provider}`,
593
+ key: provider
594
+ }, `Continue with ${provider}`)), createElement("div", {
595
+ className: classNames?.divider,
596
+ "data-abs-auth": "divider"
597
+ }, "or"));
598
+ const errorBanner = error === null ? null : createElement("p", {
599
+ className: classNames?.error,
600
+ "data-abs-auth": "error",
601
+ role: "alert"
602
+ }, error.message);
603
+ return createElement("form", {
604
+ className: classNames?.container,
605
+ "data-abs-auth": "sign-in",
606
+ onSubmit: handleSubmit
607
+ }, oauthButtons, createElement("label", { className: classNames?.field, "data-abs-auth": "email-field" }, createElement("span", { className: classNames?.label }, emailLabel), createElement("input", {
608
+ autoComplete: "username webauthn",
609
+ className: classNames?.input,
610
+ name: "email",
611
+ onChange: (event) => setEmail(event.currentTarget.value),
612
+ required: true,
613
+ type: "email",
614
+ value: email
615
+ })), createElement("label", { className: classNames?.field, "data-abs-auth": "password-field" }, createElement("span", { className: classNames?.label }, passwordLabel), createElement("input", {
616
+ autoComplete: "current-password",
617
+ className: classNames?.input,
618
+ minLength: 12,
619
+ name: "password",
620
+ onChange: (event) => setPassword(event.currentTarget.value),
621
+ required: true,
622
+ type: "password",
623
+ value: password
624
+ })), errorBanner, createElement("button", {
625
+ className: classNames?.button,
626
+ "data-abs-auth": "submit",
627
+ disabled: isPending,
628
+ type: "submit"
629
+ }, isPending ? "Signing in\u2026" : submitLabel));
630
+ };
631
+ // src/client/components/react/SignUp.ts
632
+ import { createElement as createElement2 } from "react";
633
+ import { useState as useState2 } from "react";
634
+ var SignUp = ({
635
+ client,
636
+ classNames,
637
+ emailLabel = "Email",
638
+ onError,
639
+ onSuccess,
640
+ passwordLabel = "Password (12+ characters)",
641
+ submitLabel = "Create account"
642
+ }) => {
643
+ const [email, setEmail] = useState2("");
644
+ const [password, setPassword] = useState2("");
645
+ const { error, isPending, mutate } = useSignUp(client);
646
+ const handleSubmit = async (event) => {
647
+ event.preventDefault();
648
+ const result = await mutate({ email, password });
649
+ if (result.error !== null) {
650
+ onError?.(result.error);
651
+ return;
652
+ }
653
+ if (result.data !== null)
654
+ onSuccess?.(result.data);
655
+ };
656
+ const errorBanner = error === null ? null : createElement2("p", {
657
+ className: classNames?.error,
658
+ "data-abs-auth": "error",
659
+ role: "alert"
660
+ }, error.message);
661
+ return createElement2("form", {
662
+ className: classNames?.container,
663
+ "data-abs-auth": "sign-up",
664
+ onSubmit: handleSubmit
665
+ }, createElement2("label", { className: classNames?.field, "data-abs-auth": "email-field" }, createElement2("span", { className: classNames?.label }, emailLabel), createElement2("input", {
666
+ autoComplete: "email",
667
+ className: classNames?.input,
668
+ name: "email",
669
+ onChange: (event) => setEmail(event.currentTarget.value),
670
+ required: true,
671
+ type: "email",
672
+ value: email
673
+ })), createElement2("label", { className: classNames?.field, "data-abs-auth": "password-field" }, createElement2("span", { className: classNames?.label }, passwordLabel), createElement2("input", {
674
+ autoComplete: "new-password",
675
+ className: classNames?.input,
676
+ minLength: 12,
677
+ name: "password",
678
+ onChange: (event) => setPassword(event.currentTarget.value),
679
+ required: true,
680
+ type: "password",
681
+ value: password
682
+ })), errorBanner, createElement2("button", {
683
+ className: classNames?.button,
684
+ "data-abs-auth": "submit",
685
+ disabled: isPending,
686
+ type: "submit"
687
+ }, isPending ? "Creating account\u2026" : submitLabel));
688
+ };
689
+ // src/client/components/react/UserButton.ts
690
+ import { createElement as createElement3, useState as useState3 } from "react";
691
+ var initial = (user) => {
692
+ const source = user.givenName ?? user.email ?? "?";
693
+ return source.slice(0, 1).toUpperCase();
694
+ };
695
+ var UserButton = ({
696
+ client,
697
+ classNames,
698
+ items,
699
+ onSignOut,
700
+ signedOutHref = "/",
701
+ signOutLabel = "Sign out",
702
+ user
703
+ }) => {
704
+ const [open, setOpen] = useState3(false);
705
+ const { mutate } = useSignOut(client);
706
+ if (user === null) {
707
+ return createElement3("a", {
708
+ className: classNames?.toggle,
709
+ "data-abs-auth": "signed-out",
710
+ href: signedOutHref
711
+ }, "Sign in");
712
+ }
713
+ const menu = open ? createElement3("div", {
714
+ className: classNames?.menu,
715
+ "data-abs-auth": "menu"
716
+ }, ...(items ?? []).map((item) => createElement3("a", {
717
+ className: classNames?.menuItem,
718
+ "data-abs-auth-menu-item": item.label,
719
+ href: item.href,
720
+ key: item.href
721
+ }, item.label)), createElement3("button", {
722
+ className: classNames?.signOut,
723
+ "data-abs-auth": "sign-out",
724
+ onClick: async () => {
725
+ await mutate(undefined);
726
+ setOpen(false);
727
+ onSignOut?.();
728
+ },
729
+ type: "button"
730
+ }, signOutLabel)) : null;
731
+ const avatar = user.avatarUrl === undefined ? createElement3("span", {
732
+ className: classNames?.avatar,
733
+ "data-abs-auth": "avatar-initial"
734
+ }, initial(user)) : createElement3("img", {
735
+ alt: "",
736
+ className: classNames?.avatar,
737
+ "data-abs-auth": "avatar",
738
+ src: user.avatarUrl
739
+ });
740
+ return createElement3("div", {
741
+ className: classNames?.container,
742
+ "data-abs-auth": "user-button",
743
+ "data-abs-auth-open": open ? "true" : "false"
744
+ }, createElement3("button", {
745
+ "aria-expanded": open,
746
+ className: classNames?.toggle,
747
+ "data-abs-auth": "user-toggle",
748
+ onClick: () => setOpen((prev) => !prev),
749
+ type: "button"
750
+ }, avatar, createElement3("span", { className: classNames?.email, "data-abs-auth": "user-email" }, user.givenName ?? user.email ?? "Account")), menu);
751
+ };
752
+
560
753
  // src/client/react.ts
561
754
  var useMutation = (run) => {
562
- const [data, setData] = useState(null);
563
- const [error, setError] = useState(null);
564
- const [isPending, setIsPending] = useState(false);
755
+ const [data, setData] = useState4(null);
756
+ const [error, setError] = useState4(null);
757
+ const [isPending, setIsPending] = useState4(false);
565
758
  const mountedRef = useRef(true);
566
759
  useEffect(() => () => {
567
760
  mountedRef.current = false;
@@ -586,9 +779,9 @@ var useMutation = (run) => {
586
779
  };
587
780
  var useMagicLink = (client) => useMutation(client.passwordless.requestMagicLink);
588
781
  var usePasskeyAutofill = (client) => {
589
- const [data, setData] = useState(null);
590
- const [error, setError] = useState(null);
591
- const [isPending, setIsPending] = useState(false);
782
+ const [data, setData] = useState4(null);
783
+ const [error, setError] = useState4(null);
784
+ const [isPending, setIsPending] = useState4(false);
592
785
  const mountedRef = useRef(true);
593
786
  useEffect(() => () => {
594
787
  mountedRef.current = false;
@@ -609,9 +802,9 @@ var usePasskeyAutofill = (client) => {
609
802
  return { cancel, data, error, isPending, start };
610
803
  };
611
804
  var useUpgradeToPasskey = (client) => {
612
- const [passkeys, setPasskeys] = useState(null);
613
- const [error, setError] = useState(null);
614
- const [isPending, setIsPending] = useState(true);
805
+ const [passkeys, setPasskeys] = useState4(null);
806
+ const [error, setError] = useState4(null);
807
+ const [isPending, setIsPending] = useState4(true);
615
808
  const mountedRef = useRef(true);
616
809
  useEffect(() => () => {
617
810
  mountedRef.current = false;
@@ -640,9 +833,9 @@ var useUpgradeToPasskey = (client) => {
640
833
  var useMfaChallenge = (client) => useMutation(client.mfa.challenge);
641
834
  var usePasswordReset = (client) => useMutation(client.passwordReset.request);
642
835
  var useSessions = (client) => {
643
- const [data, setData] = useState(null);
644
- const [error, setError] = useState(null);
645
- const [isPending, setIsPending] = useState(true);
836
+ const [data, setData] = useState4(null);
837
+ const [error, setError] = useState4(null);
838
+ const [isPending, setIsPending] = useState4(true);
646
839
  const mountedRef = useRef(true);
647
840
  useEffect(() => () => {
648
841
  mountedRef.current = false;
@@ -679,8 +872,11 @@ export {
679
872
  usePasswordReset,
680
873
  usePasskeyAutofill,
681
874
  useMfaChallenge,
682
- useMagicLink
875
+ useMagicLink,
876
+ UserButton,
877
+ SignUp,
878
+ SignIn
683
879
  };
684
880
 
685
- //# debugId=FA8CEE907CE1FBFC64756E2164756E21
881
+ //# debugId=4DC9FD53D6285B0364756E2164756E21
686
882
  //# sourceMappingURL=react.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/@simplewebauthn/browser/esm/helpers/bufferToBase64URLString.js", "../node_modules/@simplewebauthn/browser/esm/helpers/base64URLStringToBuffer.js", "../node_modules/@simplewebauthn/browser/esm/helpers/browserSupportsWebAuthn.js", "../node_modules/@simplewebauthn/browser/esm/helpers/toPublicKeyCredentialDescriptor.js", "../node_modules/@simplewebauthn/browser/esm/helpers/isValidDomain.js", "../node_modules/@simplewebauthn/browser/esm/helpers/webAuthnError.js", "../node_modules/@simplewebauthn/browser/esm/helpers/identifyRegistrationError.js", "../node_modules/@simplewebauthn/browser/esm/helpers/webAuthnAbortService.js", "../node_modules/@simplewebauthn/browser/esm/helpers/toAuthenticatorAttachment.js", "../node_modules/@simplewebauthn/browser/esm/methods/startRegistration.js", "../node_modules/@simplewebauthn/browser/esm/helpers/browserSupportsWebAuthnAutofill.js", "../node_modules/@simplewebauthn/browser/esm/helpers/identifyAuthenticationError.js", "../node_modules/@simplewebauthn/browser/esm/methods/startAuthentication.js", "../node_modules/@simplewebauthn/browser/esm/helpers/platformAuthenticatorIsAvailable.js", "../node_modules/@simplewebauthn/browser/esm/index.js", "../src/client/react.ts", "../src/client/passkeyHelpers.ts"],
3
+ "sources": ["../node_modules/@simplewebauthn/browser/esm/helpers/bufferToBase64URLString.js", "../node_modules/@simplewebauthn/browser/esm/helpers/base64URLStringToBuffer.js", "../node_modules/@simplewebauthn/browser/esm/helpers/browserSupportsWebAuthn.js", "../node_modules/@simplewebauthn/browser/esm/helpers/toPublicKeyCredentialDescriptor.js", "../node_modules/@simplewebauthn/browser/esm/helpers/isValidDomain.js", "../node_modules/@simplewebauthn/browser/esm/helpers/webAuthnError.js", "../node_modules/@simplewebauthn/browser/esm/helpers/identifyRegistrationError.js", "../node_modules/@simplewebauthn/browser/esm/helpers/webAuthnAbortService.js", "../node_modules/@simplewebauthn/browser/esm/helpers/toAuthenticatorAttachment.js", "../node_modules/@simplewebauthn/browser/esm/methods/startRegistration.js", "../node_modules/@simplewebauthn/browser/esm/helpers/browserSupportsWebAuthnAutofill.js", "../node_modules/@simplewebauthn/browser/esm/helpers/identifyAuthenticationError.js", "../node_modules/@simplewebauthn/browser/esm/methods/startAuthentication.js", "../node_modules/@simplewebauthn/browser/esm/helpers/platformAuthenticatorIsAvailable.js", "../node_modules/@simplewebauthn/browser/esm/index.js", "../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
5
  "/**\n * Convert the given array buffer into a Base64URL-encoded string. Ideal for converting various\n * credential response ArrayBuffers to string for sending back to the server as JSON.\n *\n * Helper method to compliment `base64URLStringToBuffer`\n */\nexport function bufferToBase64URLString(buffer) {\n const bytes = new Uint8Array(buffer);\n let str = '';\n for (const charCode of bytes) {\n str += String.fromCharCode(charCode);\n }\n const base64String = btoa(str);\n return base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n",
6
6
  "/**\n * Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a\n * credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or\n * excludeCredentials\n *\n * Helper method to compliment `bufferToBase64URLString`\n */\nexport function base64URLStringToBuffer(base64URLString) {\n // Convert from Base64URL to Base64\n const base64 = base64URLString.replace(/-/g, '+').replace(/_/g, '/');\n /**\n * Pad with '=' until it's a multiple of four\n * (4 - (85 % 4 = 1) = 3) % 4 = 3 padding\n * (4 - (86 % 4 = 2) = 2) % 4 = 2 padding\n * (4 - (87 % 4 = 3) = 1) % 4 = 1 padding\n * (4 - (88 % 4 = 0) = 4) % 4 = 0 padding\n */\n const padLength = (4 - (base64.length % 4)) % 4;\n const padded = base64.padEnd(base64.length + padLength, '=');\n // Convert to a binary string\n const binary = atob(padded);\n // Convert binary string to buffer\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return buffer;\n}\n",
@@ -17,10 +17,13 @@
17
17
  "import { bufferToBase64URLString } from '../helpers/bufferToBase64URLString.js';\nimport { base64URLStringToBuffer } from '../helpers/base64URLStringToBuffer.js';\nimport { browserSupportsWebAuthn } from '../helpers/browserSupportsWebAuthn.js';\nimport { browserSupportsWebAuthnAutofill } from '../helpers/browserSupportsWebAuthnAutofill.js';\nimport { toPublicKeyCredentialDescriptor } from '../helpers/toPublicKeyCredentialDescriptor.js';\nimport { identifyAuthenticationError } from '../helpers/identifyAuthenticationError.js';\nimport { WebAuthnAbortService } from '../helpers/webAuthnAbortService.js';\nimport { toAuthenticatorAttachment } from '../helpers/toAuthenticatorAttachment.js';\n/**\n * Begin authenticator \"login\" via WebAuthn assertion\n *\n * @param optionsJSON Output from **@simplewebauthn/server**'s `generateAuthenticationOptions()`\n * @param useBrowserAutofill (Optional) Initialize conditional UI to enable logging in via browser autofill prompts. Defaults to `false`.\n * @param verifyBrowserAutofillInput (Optional) Ensure a suitable `<input>` element is present when `useBrowserAutofill` is `true`. Defaults to `true`.\n */\nexport async function startAuthentication(options) {\n // @ts-ignore: Intentionally check for old call structure to warn about improper API call\n if (!options.optionsJSON && options.challenge) {\n console.warn('startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information.');\n // @ts-ignore: Reassign the options, passed in as a positional argument, to the expected variable\n options = { optionsJSON: options };\n }\n const { optionsJSON, useBrowserAutofill = false, verifyBrowserAutofillInput = true, } = options;\n if (!browserSupportsWebAuthn()) {\n throw new Error('WebAuthn is not supported in this browser');\n }\n // We need to avoid passing empty array to avoid blocking retrieval\n // of public key\n let allowCredentials;\n if (optionsJSON.allowCredentials?.length !== 0) {\n allowCredentials = optionsJSON.allowCredentials?.map(toPublicKeyCredentialDescriptor);\n }\n // We need to convert some values to Uint8Arrays before passing the credentials to the navigator\n const publicKey = {\n ...optionsJSON,\n challenge: base64URLStringToBuffer(optionsJSON.challenge),\n allowCredentials,\n };\n // Prepare options for `.get()`\n const getOptions = {};\n /**\n * Set up the page to prompt the user to select a credential for authentication via the browser's\n * input autofill mechanism.\n */\n if (useBrowserAutofill) {\n if (!(await browserSupportsWebAuthnAutofill())) {\n throw Error('Browser does not support WebAuthn autofill');\n }\n // Check for an <input> with \"webauthn\" in its `autocomplete` attribute\n const eligibleInputs = document.querySelectorAll(\"input[autocomplete$='webauthn']\");\n // WebAuthn autofill requires at least one valid input\n if (eligibleInputs.length < 1 && verifyBrowserAutofillInput) {\n throw Error('No <input> with \"webauthn\" as the only or last value in its `autocomplete` attribute was detected');\n }\n // `CredentialMediationRequirement` doesn't know about \"conditional\" yet as of\n // typescript@4.6.3\n getOptions.mediation = 'conditional';\n // Conditional UI requires an empty allow list\n publicKey.allowCredentials = [];\n }\n // Finalize options\n getOptions.publicKey = publicKey;\n // Set up the ability to cancel this request if the user attempts another\n getOptions.signal = WebAuthnAbortService.createNewAbortSignal();\n // Wait for the user to complete assertion\n let credential;\n try {\n credential = (await navigator.credentials.get(getOptions));\n }\n catch (err) {\n throw identifyAuthenticationError({ error: err, options: getOptions });\n }\n if (!credential) {\n throw new Error('Authentication was not completed');\n }\n const { id, rawId, response, type } = credential;\n let userHandle = undefined;\n if (response.userHandle) {\n userHandle = bufferToBase64URLString(response.userHandle);\n }\n // Convert values to base64 to make it easier to send back to the server\n return {\n id,\n rawId: bufferToBase64URLString(rawId),\n response: {\n authenticatorData: bufferToBase64URLString(response.authenticatorData),\n clientDataJSON: bufferToBase64URLString(response.clientDataJSON),\n signature: bufferToBase64URLString(response.signature),\n userHandle,\n },\n type,\n clientExtensionResults: credential.getClientExtensionResults(),\n authenticatorAttachment: toAuthenticatorAttachment(credential.authenticatorAttachment),\n };\n}\n",
18
18
  "import { browserSupportsWebAuthn } from './browserSupportsWebAuthn.js';\n/**\n * Determine whether the browser can communicate with a built-in authenticator, like\n * Touch ID, Android fingerprint scanner, or Windows Hello.\n *\n * This method will _not_ be able to tell you the name of the platform authenticator.\n */\nexport function platformAuthenticatorIsAvailable() {\n if (!browserSupportsWebAuthn()) {\n return new Promise((resolve) => resolve(false));\n }\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n}\n",
19
19
  "export * from './methods/startRegistration.js';\nexport * from './methods/startAuthentication.js';\nexport * from './helpers/browserSupportsWebAuthn.js';\nexport * from './helpers/platformAuthenticatorIsAvailable.js';\nexport * from './helpers/browserSupportsWebAuthnAutofill.js';\nexport * from './helpers/base64URLStringToBuffer.js';\nexport * from './helpers/bufferToBase64URLString.js';\nexport * from './helpers/webAuthnAbortService.js';\nexport * from './helpers/webAuthnError.js';\nexport * from './types/index.js';\n",
20
- "// 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",
21
- "// 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\ntype StartAuthentication = (options: {\n\toptionsJSON: unknown;\n\tuseBrowserAutofill?: boolean;\n}) => Promise<unknown>;\n\ntype StartRegistration = (options: {\n\toptionsJSON: unknown;\n}) => Promise<unknown>;\n\nconst loadBrowser = async () => {\n\tconst mod: { startAuthentication: StartAuthentication; startRegistration: StartRegistration } =\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- @simplewebauthn/browser is an optional peer dep; the dynamic import is gated by composable use sites + the shape matches the upstream signature we depend on\n\t\t(await import('@simplewebauthn/browser')) as {\n\t\t\tstartAuthentication: StartAuthentication;\n\t\t\tstartRegistration: StartRegistration;\n\t\t};\n\n\treturn mod;\n};\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"
20
+ "// 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",
21
+ "// 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\ntype StartAuthentication = (options: {\n\toptionsJSON: unknown;\n\tuseBrowserAutofill?: boolean;\n}) => Promise<unknown>;\n\ntype StartRegistration = (options: {\n\toptionsJSON: unknown;\n}) => Promise<unknown>;\n\nconst loadBrowser = async () => {\n\tconst mod: { startAuthentication: StartAuthentication; startRegistration: StartRegistration } =\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- @simplewebauthn/browser is an optional peer dep; the dynamic import is gated by composable use sites + the shape matches the upstream signature we depend on\n\t\t(await import('@simplewebauthn/browser')) as {\n\t\t\tstartAuthentication: StartAuthentication;\n\t\t\tstartRegistration: StartRegistration;\n\t\t};\n\n\treturn mod;\n};\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",
22
+ "// 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(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.label },\n\t\t\t\temailLabel\n\t\t\t),\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",
23
+ "// 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(\n\t\t\t\t'span',\n\t\t\t\t{ className: classNames?.label },\n\t\t\t\temailLabel\n\t\t\t),\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",
24
+ "// 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"
22
25
  ],
23
- "mappings": "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",
24
- "debugId": "FA8CEE907CE1FBFC64756E2164756E21",
26
+ "mappings": "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",
27
+ "debugId": "4DC9FD53D6285B0364756E2164756E21",
25
28
  "names": []
26
29
  }
@@ -0,0 +1,2 @@
1
+ export type { CredentialsFor, OAuth2Client, OAuth2TokenResponse, OIDCProvider, PKCEProvider, ProviderConfiguration, ProviderOption, ProvidersMap, RefreshableProvider, RevocableProvider, ScopeRequiredProvider } from 'citra';
2
+ export { decodeJWT, extractPropFromIdentity, isOIDCProviderOption, isPKCEProviderOption, isRefreshableOAuth2Client, isRefreshableProviderOption, isRevocableOAuth2Client, isRevocableProviderOption, isValidProviderOption, oidcProviderOptions, pkceProviderOptions, providerOptions, providers, refreshableProviderOptions, revocableProviderOptions, scopeRequiredProviderOptions } from 'citra';