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