@dbx-tools/shared-auth 0.9.133 → 0.9.138
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/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/auth.d.ts +7 -0
- package/lib/src/auth.js +22 -1
- package/lib/src/browser.d.ts +7 -2
- package/lib/src/browser.js +17 -4
- package/package.json +2 -2
- package/src/auth.ts +24 -0
- package/src/browser.ts +18 -4
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-auth";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.138";
|
|
7
7
|
export * as auth from "./src/auth.ts";
|
|
8
8
|
export * as browser from "./src/browser.ts";
|
|
9
9
|
export * as client from "./src/client.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-auth";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.138";
|
|
3
3
|
export * as auth from "./src/auth.ts";
|
|
4
4
|
export * as browser from "./src/browser.ts";
|
|
5
5
|
export * as client from "./src/client.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-auth";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.138";
|
|
6
6
|
export * as auth from "./src/auth.js";
|
|
7
7
|
export * as browser from "./src/browser.js";
|
|
8
8
|
export * as client from "./src/client.js";
|
|
@@ -14,4 +14,4 @@ export { RUNTIME_AUTH_TYPE, databricksAuthClientInfoSchema } from "./src/client.
|
|
|
14
14
|
export { AuthType, TargetKind } from "./src/config.js";
|
|
15
15
|
export { authTypeSchema, targetKindSchema } from "./src/config-schema.js";
|
|
16
16
|
export { databricksProfileSummarySchema, databricksProfileListSchema, databricksProfileSelectionSchema } from "./src/profile.js";
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BNLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9zaGFyZWQtYXV0aFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzOFwiO1xuZXhwb3J0ICogYXMgYXV0aCBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0ICogYXMgYnJvd3NlciBmcm9tIFwiLi9zcmMvYnJvd3Nlci50c1wiO1xuZXhwb3J0ICogYXMgY2xpZW50IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdTY2hlbWEgZnJvbSBcIi4vc3JjL2NvbmZpZy1zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHByb2ZpbGUgZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB7IEFVVEhfQkFTRV9QQVRILCBTRVNTSU9OX0NPT0tJRV9OQU1FLCBhdXRoUmVxdWVzdFNjaGVtYSwgYXV0aFJlcXVlc3RSZXN1bHRTY2hlbWEsIGF1dGhWZXJpZnlTY2hlbWEsIGF1dGhWZXJpZnlSZXN1bHRTY2hlbWEsIGF1dGhMb2dvdXRSZXN1bHRTY2hlbWEsIGF1dGhTdGF0dXNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoUmVxdWVzdCwgQXV0aFJlcXVlc3RSZXN1bHQsIEF1dGhWZXJpZnksIEF1dGhWZXJpZnlSZXN1bHQsIEF1dGhMb2dvdXRSZXN1bHQsIEF1dGhTdGF0dXMgfSBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0IHR5cGUgeyBQYXNza2V5T3BlcmF0aW9uIH0gZnJvbSBcIi4vc3JjL2Jyb3dzZXIudHNcIjtcbmV4cG9ydCB7IFJVTlRJTUVfQVVUSF9UWVBFLCBkYXRhYnJpY2tzQXV0aENsaWVudEluZm9TY2hlbWEgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NBdXRoQ2xpZW50SW5mbyB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgYXV0aFR5cGVTY2hlbWEsIHRhcmdldEtpbmRTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXNjaGVtYS50c1wiO1xuZXhwb3J0IHsgZGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5U2NoZW1hLCBkYXRhYnJpY2tzUHJvZmlsZUxpc3RTY2hlbWEsIGRhdGFicmlja3NQcm9maWxlU2VsZWN0aW9uU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5LCBEYXRhYnJpY2tzUHJvZmlsZUxpc3QsIERhdGFicmlja3NQcm9maWxlU2VsZWN0aW9uIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbiJdfQ==
|
package/lib/src/auth.d.ts
CHANGED
|
@@ -19,6 +19,12 @@ export { AUTH_BASE_PATH };
|
|
|
19
19
|
export declare function isAuthPath(path: string): boolean;
|
|
20
20
|
/** Shared Better Auth session-cookie name used by browser and server packages. */
|
|
21
21
|
export declare const SESSION_COOKIE_NAME = "dbx-tools-auth";
|
|
22
|
+
/**
|
|
23
|
+
* Build a passkey display name from an optional prefix and the humanized first
|
|
24
|
+
* hostname label. For example, `DBX Tools` and `demo.apps.example.com` produce
|
|
25
|
+
* `DBX Tools Demo`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function passkeyDisplayName(prefix: string | undefined, hostname: string): string | undefined;
|
|
22
28
|
export declare const authRequestSchema: z.ZodObject<{
|
|
23
29
|
email: z.ZodString;
|
|
24
30
|
}, z.core.$strip>;
|
|
@@ -48,5 +54,6 @@ export declare const authStatusSchema: z.ZodObject<{
|
|
|
48
54
|
email: z.ZodOptional<z.ZodString>;
|
|
49
55
|
enabled: z.ZodBoolean;
|
|
50
56
|
passkeysEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
passkeyNamePrefix: z.ZodOptional<z.ZodString>;
|
|
51
58
|
}, z.core.$strip>;
|
|
52
59
|
export type AuthStatus = z.infer<typeof authStatusSchema>;
|
package/lib/src/auth.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
10
11
|
import { z } from "zod";
|
|
11
12
|
import { AUTH_BASE_PATH } from "./_route.js";
|
|
12
13
|
export { AUTH_BASE_PATH };
|
|
@@ -22,6 +23,22 @@ export function isAuthPath(path) {
|
|
|
22
23
|
}
|
|
23
24
|
/** Shared Better Auth session-cookie name used by browser and server packages. */
|
|
24
25
|
export const SESSION_COOKIE_NAME = "dbx-tools-auth";
|
|
26
|
+
/**
|
|
27
|
+
* Build a passkey display name from an optional prefix and the humanized first
|
|
28
|
+
* hostname label. For example, `DBX Tools` and `demo.apps.example.com` produce
|
|
29
|
+
* `DBX Tools Demo`.
|
|
30
|
+
*/
|
|
31
|
+
export function passkeyDisplayName(prefix, hostname) {
|
|
32
|
+
const normalizedPrefix = stringUtils.trimToNull(prefix);
|
|
33
|
+
const subdomain = stringUtils.trimToNull(hostname)?.split(".", 1)[0];
|
|
34
|
+
const suffix = subdomain ? stringUtils.toLabel(subdomain) : undefined;
|
|
35
|
+
if (!normalizedPrefix)
|
|
36
|
+
return suffix;
|
|
37
|
+
if (!suffix || normalizedPrefix.toLowerCase().endsWith(suffix.toLowerCase())) {
|
|
38
|
+
return normalizedPrefix;
|
|
39
|
+
}
|
|
40
|
+
return `${normalizedPrefix} ${suffix}`;
|
|
41
|
+
}
|
|
25
42
|
export const authRequestSchema = z
|
|
26
43
|
.object({
|
|
27
44
|
email: z.string().describe("Address to email a one-time code to, if it is authorized."),
|
|
@@ -57,6 +74,10 @@ export const authStatusSchema = z
|
|
|
57
74
|
email: z.string().optional().describe("Signed-in address when a session exists."),
|
|
58
75
|
enabled: z.boolean().describe("True when the passwordless gate is configured."),
|
|
59
76
|
passkeysEnabled: z.boolean().optional().describe("True when WebAuthn passkeys are available."),
|
|
77
|
+
passkeyNamePrefix: z
|
|
78
|
+
.string()
|
|
79
|
+
.optional()
|
|
80
|
+
.describe("Configured prefix for humanized passkey display names."),
|
|
60
81
|
})
|
|
61
82
|
.describe("Gate availability, session identity, and optional passkey capability.");
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFFMUI7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVk7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQy9DLE9BQU8sUUFBUSxLQUFLLGNBQWMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO0FBRXBEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE1BQTBCLEVBQzFCLFFBQWdCO0lBRWhCLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEUsSUFBSSxDQUFDLGdCQUFnQjtRQUFF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YXV0aGVudGljYXRpb24gd2lyZSBjb250cmFjdHMuXG4gKlxuICogQmV0dGVyIEF1dGggb3ducyBpdHMgbmF0aXZlIGVuZHBvaW50IHBheWxvYWRzLiBUaGVzZSBzY2hlbWFzIGNvdmVyIHRoZVxuICogZGJ4LXRvb2xzIGNvbXBhdGliaWxpdHkgYW5kIGdhdGUtc3RhdHVzIHN1cmZhY2Ugc2hhcmVkIGJ5IHR1bm5lbCB0cmFuc3BvcnRzXG4gKiBhbmQgUmVhY3QgaG9zdHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IEFVVEhfQkFTRV9QQVRIIH0gZnJvbSBcIi4vX3JvdXRlLnRzXCI7XG5cbmV4cG9ydCB7IEFVVEhfQkFTRV9QQVRIIH07XG5cbi8qKlxuICogVHJ1ZSBvbmx5IGZvciB0aGUgYXV0aCBtb3VudCBpdHNlbGYgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cy5cbiAqXG4gKiBTZWdtZW50LWF3YXJlIG1hdGNoaW5nIHByZXZlbnRzIGxvb2thbGlrZSBhcHBsaWNhdGlvbiByb3V0ZXMgc3VjaCBhc1xuICogYC9hcGkvZW1haWwvYXV0aHpgIGZyb20gYmVpbmcgdHJlYXRlZCBhcyBwdWJsaWMgYXV0aGVudGljYXRpb24gZW5kcG9pbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLnNwbGl0KFwiP1wiLCAxKVswXSA/PyBwYXRoO1xuICByZXR1cm4gcGF0aG5hbWUgPT09IEFVVEhfQkFTRV9QQVRIIHx8IHBhdGhuYW1lLnN0YXJ0c1dpdGgoYCR7QVVUSF9CQVNFX1BBVEh9L2ApO1xufVxuXG4vKiogU2hhcmVkIEJldHRlciBBdXRoIHNlc3Npb24tY29va2llIG5hbWUgdXNlZCBieSBicm93c2VyIGFuZCBzZXJ2ZXIgcGFja2FnZXMuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9DT09LSUVfTkFNRSA9IFwiZGJ4LXRvb2xzLWF1dGhcIjtcblxuLyoqXG4gKiBCdWlsZCBhIHBhc3NrZXkgZGlzcGxheSBuYW1lIGZyb20gYW4gb3B0aW9uYWwgcHJlZml4IGFuZCB0aGUgaHVtYW5pemVkIGZpcnN0XG4gKiBob3N0bmFtZSBsYWJlbC4gRm9yIGV4YW1wbGUsIGBEQlggVG9vbHNgIGFuZCBgZGVtby5hcHBzLmV4YW1wbGUuY29tYCBwcm9kdWNlXG4gKiBgREJYIFRvb2xzIERlbW9gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFzc2tleURpc3BsYXlOYW1lKFxuICBwcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgaG9zdG5hbWU6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHByZWZpeCk7XG4gIGNvbnN0IHN1YmRvbWFpbiA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoaG9zdG5hbWUpPy5zcGxpdChcIi5cIiwgMSlbMF07XG4gIGNvbnN0IHN1ZmZpeCA9IHN1YmRvbWFpbiA/IHN0cmluZ1V0aWxzLnRvTGFiZWwoc3ViZG9tYWluKSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFub3JtYWxpemVkUHJlZml4KSByZXR1cm4gc3VmZml4O1xuICBpZiAoIXN1ZmZpeCB8fCBub3JtYWxpemVkUHJlZml4LnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoc3VmZml4LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRQcmVmaXg7XG4gIH1cbiAgcmV0dXJuIGAke25vcm1hbGl6ZWRQcmVmaXh9ICR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoUmVxdWVzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZW1haWw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBZGRyZXNzIHRvIGVtYWlsIGEgb25lLXRpbWUgY29kZSB0bywgaWYgaXQgaXMgYXV0aG9yaXplZC5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIlZhbGlkYXRlZCByZXF1ZXN0IGZvciBhbiBlbWFpbCBvbmUtdGltZSBwYXNzd29yZC5cIik7XG5cbmV4cG9ydCB0eXBlIEF1dGhSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgYXV0aFJlcXVlc3RTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgYXV0aFJlcXVlc3RSZXN1bHRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9rOiB6LmxpdGVyYWwodHJ1ZSkuZGVzY3JpYmUoXCJBbHdheXMgdHJ1ZSBmb3IgYW4gYWNjZXB0ZWQgb25lLXRpbWUtcGFzc3dvcmQgcmVxdWVzdC5cIiksXG4gICAgcmV0cnlBZnRlcjogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXF1ZXN0aW5nIGFub3RoZXIgY29kZS5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkFjY2VwdGVkIG9uZS10aW1lLXBhc3N3b3JkIHJlcXVlc3QgcmVzdWx0IGFuZCBvcHRpb25hbCByZXRyeSBkZWxheS5cIik7XG5cbmV4cG9ydCB0eXBlIEF1dGhSZXF1ZXN0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgYXV0aFJlcXVlc3RSZXN1bHRTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgYXV0aFZlcmlmeVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZW1haWw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBZGRyZXNzIHRoYXQgcmVjZWl2ZWQgdGhlIG9uZS10aW1lIGNvZGUuXCIpLFxuICAgIGNvZGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJPbmUtdGltZSBwYXNzd29yZCBzdWJtaXR0ZWQgdG8gZXN0YWJsaXNoIGEgc2Vzc2lvbi5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkVtYWlsIGFkZHJlc3MgYW5kIGNvZGUgc3VibWl0dGVkIHRvIGVzdGFibGlzaCBhIHNlc3Npb24uXCIpO1xuXG5leHBvcnQgdHlwZSBBdXRoVmVyaWZ5ID0gei5pbmZlcjx0eXBlb2YgYXV0aFZlcmlmeVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBhdXRoVmVyaWZ5UmVzdWx0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIHdoZW4gdGhlIGNvZGUgd2FzIGFjY2VwdGVkIGFuZCBhIHNlc3Npb24gd2FzIGNyZWF0ZWQuXCIpLFxuICAgIHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdHJ5aW5nIGFub3RoZXIgY29kZS5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIlZlcmlmaWNhdGlvbiBvdXRjb21lIGFuZCBvcHRpb25hbCByZXRyeSBkZWxheS5cIik7XG5cbmV4cG9ydCB0eXBlIEF1dGhWZXJpZnlSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBhdXRoVmVyaWZ5UmVzdWx0U2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IGF1dGhMb2dvdXRSZXN1bHRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlRydWUgd2hlbiB0aGUgc2Vzc2lvbiBjb29raWUgd2FzIGNsZWFyZWQuXCIpLFxuICAgIHJlZGlyZWN0VG86IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJWYWxpZGF0ZWQgc2FtZS1vcmlnaW4gZGVzdGluYXRpb24gYWZ0ZXIgbG9nb3V0LlwiKSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiTG9nb3V0IG91dGNvbWUgcGx1cyB0aGUgdmFsaWRhdGVkIHNhbWUtb3JpZ2luIGRlc3RpbmF0aW9uLlwiKTtcblxuZXhwb3J0IHR5cGUgQXV0aExvZ291dFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIGF1dGhMb2dvdXRSZXN1bHRTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgYXV0aFN0YXR1c1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgYXV0aGVudGljYXRlZDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIHdoZW4gdGhlIGJyb3dzZXIgaG9sZHMgYSB2YWxpZCBzZXNzaW9uLlwiKSxcbiAgICBlbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU2lnbmVkLWluIGFkZHJlc3Mgd2hlbiBhIHNlc3Npb24gZXhpc3RzLlwiKSxcbiAgICBlbmFibGVkOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlRydWUgd2hlbiB0aGUgcGFzc3dvcmRsZXNzIGdhdGUgaXMgY29uZmlndXJlZC5cIiksXG4gICAgcGFzc2tleXNFbmFibGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVHJ1ZSB3aGVuIFdlYkF1dGhuIHBhc3NrZXlzIGFyZSBhdmFpbGFibGUuXCIpLFxuICAgIHBhc3NrZXlOYW1lUHJlZml4OiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJDb25maWd1cmVkIHByZWZpeCBmb3IgaHVtYW5pemVkIHBhc3NrZXkgZGlzcGxheSBuYW1lcy5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkdhdGUgYXZhaWxhYmlsaXR5LCBzZXNzaW9uIGlkZW50aXR5LCBhbmQgb3B0aW9uYWwgcGFzc2tleSBjYXBhYmlsaXR5LlwiKTtcblxuZXhwb3J0IHR5cGUgQXV0aFN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIGF1dGhTdGF0dXNTY2hlbWE+O1xuIl19
|
package/lib/src/browser.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
10
|
import { type Passkey } from "@better-auth/passkey/client";
|
|
11
|
-
import type
|
|
11
|
+
import { type AuthStatus } from "./auth.ts";
|
|
12
12
|
export { AUTH_BASE_PATH } from "./_route.ts";
|
|
13
13
|
export type { Passkey } from "@better-auth/passkey/client";
|
|
14
14
|
/** A cancellable passkey request and WebAuthn ceremony. */
|
|
@@ -18,7 +18,12 @@ export interface PasskeyOperation {
|
|
|
18
18
|
}
|
|
19
19
|
/** Start a passkey sign-in whose lifetime is explicitly owned by the caller. */
|
|
20
20
|
export declare function beginPasskeySignIn(autoFill?: boolean): PasskeyOperation;
|
|
21
|
-
/**
|
|
21
|
+
/** Build a passkey display name for the current browser hostname. */
|
|
22
|
+
export declare function passkeyDisplayName(prefix?: string): string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Start a passkey registration whose lifetime is explicitly owned by the caller.
|
|
25
|
+
* The display name defaults to the humanized browser subdomain.
|
|
26
|
+
*/
|
|
22
27
|
export declare function beginPasskeyEnrollment(name?: string): PasskeyOperation;
|
|
23
28
|
/** Cancel the currently active passkey request and browser ceremony, if any. */
|
|
24
29
|
export declare function cancelPasskeyOperation(): void;
|
package/lib/src/browser.js
CHANGED
|
@@ -12,6 +12,7 @@ import { WebAuthnAbortService } from "@simplewebauthn/browser";
|
|
|
12
12
|
import { createAuthClient } from "better-auth/client";
|
|
13
13
|
import { emailOTPClient } from "better-auth/client/plugins";
|
|
14
14
|
import { AUTH_BASE_PATH } from "./_route.js";
|
|
15
|
+
import { passkeyDisplayName as formatPasskeyDisplayName } from "./auth.js";
|
|
15
16
|
export { AUTH_BASE_PATH } from "./_route.js";
|
|
16
17
|
function browserLocation() {
|
|
17
18
|
return globalThis.location;
|
|
@@ -39,7 +40,8 @@ function authStatus(value) {
|
|
|
39
40
|
typeof item.authenticated !== "boolean" ||
|
|
40
41
|
typeof item.enabled !== "boolean" ||
|
|
41
42
|
(item.email !== undefined && typeof item.email !== "string") ||
|
|
42
|
-
(item.passkeysEnabled !== undefined && typeof item.passkeysEnabled !== "boolean")
|
|
43
|
+
(item.passkeysEnabled !== undefined && typeof item.passkeysEnabled !== "boolean") ||
|
|
44
|
+
(item.passkeyNamePrefix !== undefined && typeof item.passkeyNamePrefix !== "string")) {
|
|
43
45
|
throw new Error("Auth status returned an invalid response");
|
|
44
46
|
}
|
|
45
47
|
return {
|
|
@@ -47,6 +49,9 @@ function authStatus(value) {
|
|
|
47
49
|
enabled: item.enabled,
|
|
48
50
|
...(typeof item.email === "string" ? { email: item.email } : {}),
|
|
49
51
|
...(typeof item.passkeysEnabled === "boolean" ? { passkeysEnabled: item.passkeysEnabled } : {}),
|
|
52
|
+
...(typeof item.passkeyNamePrefix === "string"
|
|
53
|
+
? { passkeyNamePrefix: item.passkeyNamePrefix }
|
|
54
|
+
: {}),
|
|
50
55
|
};
|
|
51
56
|
}
|
|
52
57
|
let activePasskeyOperation;
|
|
@@ -84,9 +89,17 @@ function beginPasskeyOperation(invoke) {
|
|
|
84
89
|
export function beginPasskeySignIn(autoFill = false) {
|
|
85
90
|
return beginPasskeyOperation((operationClient) => operationClient.signIn.passkey({ autoFill }));
|
|
86
91
|
}
|
|
87
|
-
/**
|
|
92
|
+
/** Build a passkey display name for the current browser hostname. */
|
|
93
|
+
export function passkeyDisplayName(prefix) {
|
|
94
|
+
return formatPasskeyDisplayName(prefix, browserLocation()?.hostname ?? "");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Start a passkey registration whose lifetime is explicitly owned by the caller.
|
|
98
|
+
* The display name defaults to the humanized browser subdomain.
|
|
99
|
+
*/
|
|
88
100
|
export function beginPasskeyEnrollment(name) {
|
|
89
|
-
|
|
101
|
+
const passkeyName = name ?? passkeyDisplayName();
|
|
102
|
+
return beginPasskeyOperation((operationClient) => operationClient.passkey.addPasskey(passkeyName ? { name: passkeyName } : undefined));
|
|
90
103
|
}
|
|
91
104
|
/** Cancel the currently active passkey request and browser ceremony, if any. */
|
|
92
105
|
export function cancelPasskeyOperation() {
|
|
@@ -147,4 +160,4 @@ export async function removePasskey(id) {
|
|
|
147
160
|
const result = await client.passkey.deletePasskey({ id });
|
|
148
161
|
return result.error === null;
|
|
149
162
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUTdDLFNBQVMsZUFBZTtJQUN0QixPQUFRLFVBQXdELENBQUMsUUFBUSxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLE9BQU87SUFDZCxNQUFNLE1BQU0sR0FBRyxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksa0JBQWtCLENBQUM7SUFDL0QsT0FBTyxHQUFHLE1BQU0sR0FBRyxjQUFjLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBb0I7SUFDekMsT0FBTyxnQkFBZ0IsQ0FBQztRQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDO0tBQzdDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQztBQUUvQixTQUFTLE1BQU0sQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUss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LHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3QyxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWTtJQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN2RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLCtCQUErQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVELGtDQUFrQztBQUNsQyxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxFQUFVLEVBQUUsSUFBWTtJQUMxRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUMvQixDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLEVBQVU7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLW9ubHkgQmV0dGVyIEF1dGggY2xpZW50IHNoYXJlZCBieSBSZWFjdCBhbmQgdGhlIGhvc3RlZCB0dW5uZWwgbG9naW4uXG4gKlxuICogVGhlIG9wZXJhdGlvbiBoZWxwZXJzIG93biBib3RoIG5ldHdvcmsgY2FuY2VsbGF0aW9uIGFuZCB0aGUgYWN0aXZlIFdlYkF1dGhuXG4gKiBjZXJlbW9ueS4gRWFjaCBvcGVyYXRpb24gY2FycmllcyBhbiBpZGVudGl0eSB0b2tlbiBzbyBjbGVhbnVwIGZyb20gYW4gb2xkZXJcbiAqIFJlYWN0IGVmZmVjdCBjYW5ub3QgY2FuY2VsIGEgbmV3ZXIgbWFudWFsIGF0dGVtcHQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHBhc3NrZXlDbGllbnQsIHR5cGUgUGFzc2tleSB9IGZyb20gXCJAYmV0dGVyLWF1dGgvcGFzc2tleS9jbGllbnRcIjtcbmltcG9ydCB7IFdlYkF1dGhuQWJvcnRTZXJ2aWNlIH0gZnJvbSBcIkBzaW1wbGV3ZWJhdXRobi9icm93c2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVBdXRoQ2xpZW50IH0gZnJvbSBcImJldHRlci1hdXRoL2NsaWVudFwiO1xuaW1wb3J0IHsgZW1haWxPVFBDbGllbnQgfSBmcm9tIFwiYmV0dGVyLWF1dGgvY2xpZW50L3BsdWdpbnNcIjtcblxuaW1wb3J0IHsgQVVUSF9CQVNFX1BBVEggfSBmcm9tIFwiLi9fcm91dGUudHNcIjtcbmltcG9ydCB0eXBlIHsgQXV0aFN0YXR1cyB9IGZyb20gXCIuL2F1dGgudHNcIjtcblxuZXhwb3J0IHsgQVVUSF9CQVNFX1BBVEggfSBmcm9tIFwiLi9fcm91dGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgUGFzc2tleSB9IGZyb20gXCJAYmV0dGVyLWF1dGgvcGFzc2tleS9jbGllbnRcIjtcblxuaW50ZXJmYWNlIEJyb3dzZXJMb2NhdGlvbiB7XG4gIHJlYWRvbmx5IG9yaWdpbjogc3RyaW5nO1xuICBhc3NpZ24odXJsOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5mdW5jdGlvbiBicm93c2VyTG9jYXRpb24oKTogQnJvd3NlckxvY2F0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyBsb2NhdGlvbj86IEJyb3dzZXJMb2NhdGlvbiB9KS5sb2NhdGlvbjtcbn1cblxuZnVuY3Rpb24gYmFzZVVSTCgpOiBzdHJpbmcge1xuICBjb25zdCBvcmlnaW4gPSBicm93c2VyTG9jYXRpb24oKT8ub3JpZ2luID8/IFwiaHR0cDovL2xvY2FsaG9zdFwiO1xuICByZXR1cm4gYCR7b3JpZ2lufSR7QVVUSF9CQVNFX1BBVEh9YDtcbn1cblxuZnVuY3Rpb24gYnJvd3NlckNsaWVudChzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICByZXR1cm4gY3JlYXRlQXV0aENsaWVudCh7XG4gICAgYmFzZVVSTDogYmFzZVVSTCgpLFxuICAgIC4uLihzaWduYWwgPyB7IGZldGNoT3B0aW9uczogeyBzaWduYWwgfSB9IDoge30pLFxuICAgIHBsdWdpbnM6IFtlbWFpbE9UUENsaWVudCgpLCBwYXNza2V5Q2xpZW50KCldLFxuICB9KTtcbn1cblxuY29uc3QgY2xpZW50ID0gYnJvd3NlckNsaWVudCgpO1xuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGxcbiAgICA/ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXV0aFN0YXR1cyh2YWx1ZTogdW5rbm93bik6IEF1dGhTdGF0dXMge1xuICBjb25zdCBpdGVtID0gcmVjb3JkKHZhbHVlKTtcbiAgaWYgKFxuICAgICFpdGVtIHx8XG4gICAgdHlwZW9mIGl0ZW0uYXV0aGVudGljYXRlZCAhPT0gXCJib29sZWFuXCIgfHxcbiAgICB0eXBlb2YgaXRlbS5lbmFibGVkICE9PSBcImJvb2xlYW5cIiB8fFxuICAgIChpdGVtLmVtYWlsICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGl0ZW0uZW1haWwgIT09IFwic3RyaW5nXCIpIHx8XG4gICAgKGl0ZW0ucGFzc2tleXNFbmFibGVkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGl0ZW0ucGFzc2tleXNFbmFibGVkICE9PSBcImJvb2xlYW5cIilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXV0aCBzdGF0dXMgcmV0dXJuZWQgYW4gaW52YWxpZCByZXNwb25zZVwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGF1dGhlbnRpY2F0ZWQ6IGl0ZW0uYXV0aGVudGljYXRlZCxcbiAgICBlbmFibGVkOiBpdGVtLmVuYWJsZWQsXG4gICAgLi4uKHR5cGVvZiBpdGVtLmVtYWlsID09PSBcInN0cmluZ1wiID8geyBlbWFpbDogaXRlbS5lbWFpbCB9IDoge30pLFxuICAgIC4uLih0eXBlb2YgaXRlbS5wYXNza2V5c0VuYWJsZWQgPT09IFwiYm9vbGVhblwiID8geyBwYXNza2V5c0VuYWJsZWQ6IGl0ZW0ucGFzc2tleXNFbmFibGVkIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBBIGNhbmNlbGxhYmxlIHBhc3NrZXkgcmVxdWVzdCBhbmQgV2ViQXV0aG4gY2VyZW1vbnkuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3NrZXlPcGVyYXRpb24ge1xuICByZWFkb25seSByZXN1bHQ6IFByb21pc2U8Ym9vbGVhbj47XG4gIGNhbmNlbCgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQWN0aXZlUGFzc2tleU9wZXJhdGlvbiB7XG4gIHJlYWRvbmx5IGlkOiBzeW1ib2w7XG4gIGNhbmNlbCgpOiB2b2lkO1xufVxuXG5sZXQgYWN0aXZlUGFzc2tleU9wZXJhdGlvbjogQWN0aXZlUGFzc2tleU9wZXJhdGlvbiB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNBYm9ydChlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBET01FeGNlcHRpb24gJiYgZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCI7XG59XG5cbmZ1bmN0aW9uIGJlZ2luUGFzc2tleU9wZXJhdGlvbihcbiAgaW52b2tlOiAob3BlcmF0aW9uQ2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBicm93c2VyQ2xpZW50PikgPT4gUHJvbWlzZTx7IGVycm9yOiB1bmtub3duIH0+LFxuKTogUGFzc2tleU9wZXJhdGlvbiB7XG4gIGFjdGl2ZVBhc3NrZXlPcGVyYXRpb24/LmNhbmNlbCgpO1xuXG4gIGNvbnN0IGlkID0gU3ltYm9sKFwicGFzc2tleS1vcGVyYXRpb25cIik7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgY29uc3QgY2FuY2VsID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChhY3RpdmVQYXNza2V5T3BlcmF0aW9uPy5pZCAhPT0gaWQpIHJldHVybjtcbiAgICBhY3RpdmVQYXNza2V5T3BlcmF0aW9uID0gdW5kZWZpbmVkO1xuICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIFdlYkF1dGhuQWJvcnRTZXJ2aWNlLmNhbmNlbENlcmVtb255KCk7XG4gIH07XG4gIGFjdGl2ZVBhc3NrZXlPcGVyYXRpb24gPSB7IGlkLCBjYW5jZWwgfTtcblxuICBjb25zdCByZXN1bHQgPSBpbnZva2UoYnJvd3NlckNsaWVudChjb250cm9sbGVyLnNpZ25hbCkpXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAhY2FuY2VsbGVkICYmIHJlc3BvbnNlLmVycm9yID09PSBudWxsKVxuICAgIC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChjYW5jZWxsZWQgfHwgaXNBYm9ydChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKGFjdGl2ZVBhc3NrZXlPcGVyYXRpb24/LmlkID09PSBpZCkgYWN0aXZlUGFzc2tleU9wZXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICByZXR1cm4geyByZXN1bHQsIGNhbmNlbCB9O1xufVxuXG4vKiogU3RhcnQgYSBwYXNza2V5IHNpZ24taW4gd2hvc2UgbGlmZXRpbWUgaXMgZXhwbGljaXRseSBvd25lZCBieSB0aGUgY2FsbGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZ2luUGFzc2tleVNpZ25JbihhdXRvRmlsbCA9IGZhbHNlKTogUGFzc2tleU9wZXJhdGlvbiB7XG4gIHJldHVybiBiZWdpblBhc3NrZXlPcGVyYXRpb24oKG9wZXJhdGlvbkNsaWVudCkgPT4gb3BlcmF0aW9uQ2xpZW50LnNpZ25Jbi5wYXNza2V5KHsgYXV0b0ZpbGwgfSkpO1xufVxuXG4vKiogU3RhcnQgYSBwYXNza2V5IHJlZ2lzdHJhdGlvbiB3aG9zZSBsaWZldGltZSBpcyBleHBsaWNpdGx5IG93bmVkIGJ5IHRoZSBjYWxsZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYmVnaW5QYXNza2V5RW5yb2xsbWVudChuYW1lPzogc3RyaW5nKTogUGFzc2tleU9wZXJhdGlvbiB7XG4gIHJldHVybiBiZWdpblBhc3NrZXlPcGVyYXRpb24oKG9wZXJhdGlvbkNsaWVudCkgPT5cbiAgICBvcGVyYXRpb25DbGllbnQucGFzc2tleS5hZGRQYXNza2V5KG5hbWUgPyB7IG5hbWUgfSA6IHVuZGVmaW5lZCksXG4gICk7XG59XG5cbi8qKiBDYW5jZWwgdGhlIGN1cnJlbnRseSBhY3RpdmUgcGFzc2tleSByZXF1ZXN0IGFuZCBicm93c2VyIGNlcmVtb255LCBpZiBhbnkuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUGFzc2tleU9wZXJhdGlvbigpOiB2b2lkIHtcbiAgYWN0aXZlUGFzc2tleU9wZXJhdGlvbj8uY2FuY2VsKCk7XG59XG5cbi8qKiBSZWFkIHRoZSBjdXJyZW50IGJyb3dzZXIgc2Vzc2lvbiBzdGF0dXMgZnJvbSB0aGUgc2hhcmVkIGF1dGggZW5kcG9pbnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aFN0YXR1cygpOiBQcm9taXNlPEF1dGhTdGF0dXM+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtBVVRIX0JBU0VfUEFUSH0vc3RhdHVzYCwgeyBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihgQXV0aCBzdGF0dXMgZmFpbGVkIHdpdGggJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIHJldHVybiBhdXRoU3RhdHVzKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG59XG5cbi8qKiBFbmQgdGhlIGN1cnJlbnQgYnJvd3NlciBzZXNzaW9uIGFuZCBmb2xsb3cgdGhlIHNlcnZlcidzIHNhbWUtb3JpZ2luIHJlZGlyZWN0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvZ291dCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtBVVRIX0JBU0VfUEFUSH0vbG9nb3V0YCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gcmVjb3JkKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG4gIGlmICghcmVzcG9uc2Uub2sgfHwgcmVzdWx0Py5vayAhPT0gdHJ1ZSB8fCB0eXBlb2YgcmVzdWx0LnJlZGlyZWN0VG8gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgYnJvd3NlckxvY2F0aW9uKCk/LmFzc2lnbihyZXN1bHQucmVkaXJlY3RUbyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUmVxdWVzdCBhbiBlbWFpbCBvbmUtdGltZSBwYXNzd29yZCBmb3IgdGhlIHN1cHBsaWVkIGFkZHJlc3MuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEVtYWlsT3RwKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmVtYWlsT3RwLnNlbmRWZXJpZmljYXRpb25PdHAoeyBlbWFpbCwgdHlwZTogXCJzaWduLWluXCIgfSk7XG4gIHJldHVybiByZXN1bHQuZXJyb3IgPT09IG51bGw7XG59XG5cbi8qKiBWZXJpZnkgYW4gZW1haWwgb25lLXRpbWUgcGFzc3dvcmQgYW5kIGVzdGFibGlzaCBhIGJyb3dzZXIgc2Vzc2lvbi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlFbWFpbE90cChlbWFpbDogc3RyaW5nLCBvdHA6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zaWduSW4uZW1haWxPdHAoeyBlbWFpbCwgb3RwLCBuYW1lIH0pO1xuICByZXR1cm4gcmVzdWx0LmVycm9yID09PSBudWxsO1xufVxuXG4vKiogQXV0aGVudGljYXRlIHdpdGggYSBwYXNza2V5LCBvcHRpb25hbGx5IHVzaW5nIGNvbmRpdGlvbmFsIGJyb3dzZXIgbWVkaWF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25JblBhc3NrZXkoYXV0b0ZpbGwgPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gYmVnaW5QYXNza2V5U2lnbkluKGF1dG9GaWxsKS5yZXN1bHQ7XG59XG5cbi8qKiBFbnJvbGwgYSBwYXNza2V5IGZvciB0aGUgY3VycmVudCBhdXRoZW50aWNhdGVkIGFjY291bnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkUGFzc2tleShuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBiZWdpblBhc3NrZXlFbnJvbGxtZW50KG5hbWUpLnJlc3VsdDtcbn1cblxuLyoqIExpc3QgcGFzc2tleXMgZW5yb2xsZWQgZm9yIHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0ZWQgYWNjb3VudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UGFzc2tleXMoKTogUHJvbWlzZTxQYXNza2V5W10+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnBhc3NrZXkubGlzdFVzZXJQYXNza2V5cygpO1xuICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGBQYXNza2V5IGxpc3RpbmcgZmFpbGVkIHdpdGggJHtyZXN1bHQuZXJyb3Iuc3RhdHVzfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YSA/PyBbXTtcbn1cblxuLyoqIFJlbmFtZSBhbiBlbnJvbGxlZCBwYXNza2V5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZVBhc3NrZXkoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5wYXNza2V5LnVwZGF0ZVBhc3NrZXkoeyBpZCwgbmFtZSB9KTtcbiAgcmV0dXJuIHJlc3VsdC5lcnJvciA9PT0gbnVsbDtcbn1cblxuLyoqIFJlbW92ZSBhbiBlbnJvbGxlZCBwYXNza2V5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZVBhc3NrZXkoaWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQucGFzc2tleS5kZWxldGVQYXNza2V5KHsgaWQgfSk7XG4gIHJldHVybiByZXN1bHQuZXJyb3IgPT09IG51bGw7XG59XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQW1CLGtCQUFrQixJQUFJLHdCQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFTN0MsU0FBUyxlQUFlO0lBQ3RCLE9BQVEsVUFBd0QsQ0FBQyxRQUFRLENBQUM7QUFDNUUsQ0FBQztBQUVELFNBQVMsT0FBTztJQUNkLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQztJQUMvRCxPQUFPLEdBQUcsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxNQUFvQjtJQUN6QyxPQUFPLGdCQUFnQixDQUFDO1FBQ3RCLE9BQU8sRUFBRSxPQUFPLEVBQUU7UUFDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUM7S0FDN0MsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxD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Q0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUMvQixDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLEVBQVU7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLW9ubHkgQmV0dGVyIEF1dGggY2xpZW50IHNoYXJlZCBieSBSZWFjdCBhbmQgdGhlIGhvc3RlZCB0dW5uZWwgbG9naW4uXG4gKlxuICogVGhlIG9wZXJhdGlvbiBoZWxwZXJzIG93biBib3RoIG5ldHdvcmsgY2FuY2VsbGF0aW9uIGFuZCB0aGUgYWN0aXZlIFdlYkF1dGhuXG4gKiBjZXJlbW9ueS4gRWFjaCBvcGVyYXRpb24gY2FycmllcyBhbiBpZGVudGl0eSB0b2tlbiBzbyBjbGVhbnVwIGZyb20gYW4gb2xkZXJcbiAqIFJlYWN0IGVmZmVjdCBjYW5ub3QgY2FuY2VsIGEgbmV3ZXIgbWFudWFsIGF0dGVtcHQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHBhc3NrZXlDbGllbnQsIHR5cGUgUGFzc2tleSB9IGZyb20gXCJAYmV0dGVyLWF1dGgvcGFzc2tleS9jbGllbnRcIjtcbmltcG9ydCB7IFdlYkF1dGhuQWJvcnRTZXJ2aWNlIH0gZnJvbSBcIkBzaW1wbGV3ZWJhdXRobi9icm93c2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVBdXRoQ2xpZW50IH0gZnJvbSBcImJldHRlci1hdXRoL2NsaWVudFwiO1xuaW1wb3J0IHsgZW1haWxPVFBDbGllbnQgfSBmcm9tIFwiYmV0dGVyLWF1dGgvY2xpZW50L3BsdWdpbnNcIjtcblxuaW1wb3J0IHsgQVVUSF9CQVNFX1BBVEggfSBmcm9tIFwiLi9fcm91dGUudHNcIjtcbmltcG9ydCB7IHR5cGUgQXV0aFN0YXR1cywgcGFzc2tleURpc3BsYXlOYW1lIGFzIGZvcm1hdFBhc3NrZXlEaXNwbGF5TmFtZSB9IGZyb20gXCIuL2F1dGgudHNcIjtcblxuZXhwb3J0IHsgQVVUSF9CQVNFX1BBVEggfSBmcm9tIFwiLi9fcm91dGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgUGFzc2tleSB9IGZyb20gXCJAYmV0dGVyLWF1dGgvcGFzc2tleS9jbGllbnRcIjtcblxuaW50ZXJmYWNlIEJyb3dzZXJMb2NhdGlvbiB7XG4gIHJlYWRvbmx5IGhvc3RuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yaWdpbjogc3RyaW5nO1xuICBhc3NpZ24odXJsOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5mdW5jdGlvbiBicm93c2VyTG9jYXRpb24oKTogQnJvd3NlckxvY2F0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyBsb2NhdGlvbj86IEJyb3dzZXJMb2NhdGlvbiB9KS5sb2NhdGlvbjtcbn1cblxuZnVuY3Rpb24gYmFzZVVSTCgpOiBzdHJpbmcge1xuICBjb25zdCBvcmlnaW4gPSBicm93c2VyTG9jYXRpb24oKT8ub3JpZ2luID8/IFwiaHR0cDovL2xvY2FsaG9zdFwiO1xuICByZXR1cm4gYCR7b3JpZ2lufSR7QVVUSF9CQVNFX1BBVEh9YDtcbn1cblxuZnVuY3Rpb24gYnJvd3NlckNsaWVudChzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICByZXR1cm4gY3JlYXRlQXV0aENsaWVudCh7XG4gICAgYmFzZVVSTDogYmFzZVVSTCgpLFxuICAgIC4uLihzaWduYWwgPyB7IGZldGNoT3B0aW9uczogeyBzaWduYWwgfSB9IDoge30pLFxuICAgIHBsdWdpbnM6IFtlbWFpbE9UUENsaWVudCgpLCBwYXNza2V5Q2xpZW50KCldLFxuICB9KTtcbn1cblxuY29uc3QgY2xpZW50ID0gYnJvd3NlckNsaWVudCgpO1xuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGxcbiAgICA/ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXV0aFN0YXR1cyh2YWx1ZTogdW5rbm93bik6IEF1dGhTdGF0dXMge1xuICBjb25zdCBpdGVtID0gcmVjb3JkKHZhbHVlKTtcbiAgaWYgKFxuICAgICFpdGVtIHx8XG4gICAgdHlwZW9mIGl0ZW0uYXV0aGVudGljYXRlZCAhPT0gXCJib29sZWFuXCIgfHxcbiAgICB0eXBlb2YgaXRlbS5lbmFibGVkICE9PSBcImJvb2xlYW5cIiB8fFxuICAgIChpdGVtLmVtYWlsICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGl0ZW0uZW1haWwgIT09IFwic3RyaW5nXCIpIHx8XG4gICAgKGl0ZW0ucGFzc2tleXNFbmFibGVkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGl0ZW0ucGFzc2tleXNFbmFibGVkICE9PSBcImJvb2xlYW5cIikgfHxcbiAgICAoaXRlbS5wYXNza2V5TmFtZVByZWZpeCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBpdGVtLnBhc3NrZXlOYW1lUHJlZml4ICE9PSBcInN0cmluZ1wiKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdXRoIHN0YXR1cyByZXR1cm5lZCBhbiBpbnZhbGlkIHJlc3BvbnNlXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYXV0aGVudGljYXRlZDogaXRlbS5hdXRoZW50aWNhdGVkLFxuICAgIGVuYWJsZWQ6IGl0ZW0uZW5hYmxlZCxcbiAgICAuLi4odHlwZW9mIGl0ZW0uZW1haWwgPT09IFwic3RyaW5nXCIgPyB7IGVtYWlsOiBpdGVtLmVtYWlsIH0gOiB7fSksXG4gICAgLi4uKHR5cGVvZiBpdGVtLnBhc3NrZXlzRW5hYmxlZCA9PT0gXCJib29sZWFuXCIgPyB7IHBhc3NrZXlzRW5hYmxlZDogaXRlbS5wYXNza2V5c0VuYWJsZWQgfSA6IHt9KSxcbiAgICAuLi4odHlwZW9mIGl0ZW0ucGFzc2tleU5hbWVQcmVmaXggPT09IFwic3RyaW5nXCJcbiAgICAgID8geyBwYXNza2V5TmFtZVByZWZpeDogaXRlbS5wYXNza2V5TmFtZVByZWZpeCB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIEEgY2FuY2VsbGFibGUgcGFzc2tleSByZXF1ZXN0IGFuZCBXZWJBdXRobiBjZXJlbW9ueS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc2tleU9wZXJhdGlvbiB7XG4gIHJlYWRvbmx5IHJlc3VsdDogUHJvbWlzZTxib29sZWFuPjtcbiAgY2FuY2VsKCk6IHZvaWQ7XG59XG5cbmludGVyZmFjZSBBY3RpdmVQYXNza2V5T3BlcmF0aW9uIHtcbiAgcmVhZG9ubHkgaWQ6IHN5bWJvbDtcbiAgY2FuY2VsKCk6IHZvaWQ7XG59XG5cbmxldCBhY3RpdmVQYXNza2V5T3BlcmF0aW9uOiBBY3RpdmVQYXNza2V5T3BlcmF0aW9uIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc0Fib3J0KGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIjtcbn1cblxuZnVuY3Rpb24gYmVnaW5QYXNza2V5T3BlcmF0aW9uKFxuICBpbnZva2U6IChvcGVyYXRpb25DbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIGJyb3dzZXJDbGllbnQ+KSA9PiBQcm9taXNlPHsgZXJyb3I6IHVua25vd24gfT4sXG4pOiBQYXNza2V5T3BlcmF0aW9uIHtcbiAgYWN0aXZlUGFzc2tleU9wZXJhdGlvbj8uY2FuY2VsKCk7XG5cbiAgY29uc3QgaWQgPSBTeW1ib2woXCJwYXNza2V5LW9wZXJhdGlvblwiKTtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICBjb25zdCBjYW5jZWwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKGFjdGl2ZVBhc3NrZXlPcGVyYXRpb24/LmlkICE9PSBpZCkgcmV0dXJuO1xuICAgIGFjdGl2ZVBhc3NrZXlPcGVyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgV2ViQXV0aG5BYm9ydFNlcnZpY2UuY2FuY2VsQ2VyZW1vbnkoKTtcbiAgfTtcbiAgYWN0aXZlUGFzc2tleU9wZXJhdGlvbiA9IHsgaWQsIGNhbmNlbCB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IGludm9rZShicm93c2VyQ2xpZW50KGNvbnRyb2xsZXIuc2lnbmFsKSlcbiAgICAudGhlbigocmVzcG9uc2UpID0+ICFjYW5jZWxsZWQgJiYgcmVzcG9uc2UuZXJyb3IgPT09IG51bGwpXG4gICAgLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKGNhbmNlbGxlZCB8fCBpc0Fib3J0KGVycm9yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAoYWN0aXZlUGFzc2tleU9wZXJhdGlvbj8uaWQgPT09IGlkKSBhY3RpdmVQYXNza2V5T3BlcmF0aW9uID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuXG4gIHJldHVybiB7IHJlc3VsdCwgY2FuY2VsIH07XG59XG5cbi8qKiBTdGFydCBhIHBhc3NrZXkgc2lnbi1pbiB3aG9zZSBsaWZldGltZSBpcyBleHBsaWNpdGx5IG93bmVkIGJ5IHRoZSBjYWxsZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYmVnaW5QYXNza2V5U2lnbkluKGF1dG9GaWxsID0gZmFsc2UpOiBQYXNza2V5T3BlcmF0aW9uIHtcbiAgcmV0dXJuIGJlZ2luUGFzc2tleU9wZXJhdGlvbigob3BlcmF0aW9uQ2xpZW50KSA9PiBvcGVyYXRpb25DbGllbnQuc2lnbkluLnBhc3NrZXkoeyBhdXRvRmlsbCB9KSk7XG59XG5cbi8qKiBCdWlsZCBhIHBhc3NrZXkgZGlzcGxheSBuYW1lIGZvciB0aGUgY3VycmVudCBicm93c2VyIGhvc3RuYW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhc3NrZXlEaXNwbGF5TmFtZShwcmVmaXg/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZm9ybWF0UGFzc2tleURpc3BsYXlOYW1lKHByZWZpeCwgYnJvd3NlckxvY2F0aW9uKCk/Lmhvc3RuYW1lID8/IFwiXCIpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgcGFzc2tleSByZWdpc3RyYXRpb24gd2hvc2UgbGlmZXRpbWUgaXMgZXhwbGljaXRseSBvd25lZCBieSB0aGUgY2FsbGVyLlxuICogVGhlIGRpc3BsYXkgbmFtZSBkZWZhdWx0cyB0byB0aGUgaHVtYW5pemVkIGJyb3dzZXIgc3ViZG9tYWluLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmVnaW5QYXNza2V5RW5yb2xsbWVudChuYW1lPzogc3RyaW5nKTogUGFzc2tleU9wZXJhdGlvbiB7XG4gIGNvbnN0IHBhc3NrZXlOYW1lID0gbmFtZSA/PyBwYXNza2V5RGlzcGxheU5hbWUoKTtcbiAgcmV0dXJuIGJlZ2luUGFzc2tleU9wZXJhdGlvbigob3BlcmF0aW9uQ2xpZW50KSA9PlxuICAgIG9wZXJhdGlvbkNsaWVudC5wYXNza2V5LmFkZFBhc3NrZXkocGFzc2tleU5hbWUgPyB7IG5hbWU6IHBhc3NrZXlOYW1lIH0gOiB1bmRlZmluZWQpLFxuICApO1xufVxuXG4vKiogQ2FuY2VsIHRoZSBjdXJyZW50bHkgYWN0aXZlIHBhc3NrZXkgcmVxdWVzdCBhbmQgYnJvd3NlciBjZXJlbW9ueSwgaWYgYW55LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFBhc3NrZXlPcGVyYXRpb24oKTogdm9pZCB7XG4gIGFjdGl2ZVBhc3NrZXlPcGVyYXRpb24/LmNhbmNlbCgpO1xufVxuXG4vKiogUmVhZCB0aGUgY3VycmVudCBicm93c2VyIHNlc3Npb24gc3RhdHVzIGZyb20gdGhlIHNoYXJlZCBhdXRoIGVuZHBvaW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF1dGhTdGF0dXMoKTogUHJvbWlzZTxBdXRoU3RhdHVzPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVVUSF9CQVNFX1BBVEh9L3N0YXR1c2AsIHsgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoYEF1dGggc3RhdHVzIGZhaWxlZCB3aXRoICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICByZXR1cm4gYXV0aFN0YXR1cyhhd2FpdCByZXNwb25zZS5qc29uKCkpO1xufVxuXG4vKiogRW5kIHRoZSBjdXJyZW50IGJyb3dzZXIgc2Vzc2lvbiBhbmQgZm9sbG93IHRoZSBzZXJ2ZXIncyBzYW1lLW9yaWdpbiByZWRpcmVjdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2dvdXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVVUSF9CQVNFX1BBVEh9L2xvZ291dGAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IHJlY29yZChhd2FpdCByZXNwb25zZS5qc29uKCkpO1xuICBpZiAoIXJlc3BvbnNlLm9rIHx8IHJlc3VsdD8ub2sgIT09IHRydWUgfHwgdHlwZW9mIHJlc3VsdC5yZWRpcmVjdFRvICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGJyb3dzZXJMb2NhdGlvbigpPy5hc3NpZ24ocmVzdWx0LnJlZGlyZWN0VG8pO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFJlcXVlc3QgYW4gZW1haWwgb25lLXRpbWUgcGFzc3dvcmQgZm9yIHRoZSBzdXBwbGllZCBhZGRyZXNzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RFbWFpbE90cChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5lbWFpbE90cC5zZW5kVmVyaWZpY2F0aW9uT3RwKHsgZW1haWwsIHR5cGU6IFwic2lnbi1pblwiIH0pO1xuICByZXR1cm4gcmVzdWx0LmVycm9yID09PSBudWxsO1xufVxuXG4vKiogVmVyaWZ5IGFuIGVtYWlsIG9uZS10aW1lIHBhc3N3b3JkIGFuZCBlc3RhYmxpc2ggYSBicm93c2VyIHNlc3Npb24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5RW1haWxPdHAoZW1haWw6IHN0cmluZywgb3RwOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2lnbkluLmVtYWlsT3RwKHsgZW1haWwsIG90cCwgbmFtZSB9KTtcbiAgcmV0dXJuIHJlc3VsdC5lcnJvciA9PT0gbnVsbDtcbn1cblxuLyoqIEF1dGhlbnRpY2F0ZSB3aXRoIGEgcGFzc2tleSwgb3B0aW9uYWxseSB1c2luZyBjb25kaXRpb25hbCBicm93c2VyIG1lZGlhdGlvbi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaWduSW5QYXNza2V5KGF1dG9GaWxsID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIGJlZ2luUGFzc2tleVNpZ25JbihhdXRvRmlsbCkucmVzdWx0O1xufVxuXG4vKiogRW5yb2xsIGEgcGFzc2tleSBmb3IgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCBhY2NvdW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZFBhc3NrZXkobmFtZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gYmVnaW5QYXNza2V5RW5yb2xsbWVudChuYW1lKS5yZXN1bHQ7XG59XG5cbi8qKiBMaXN0IHBhc3NrZXlzIGVucm9sbGVkIGZvciB0aGUgY3VycmVudCBhdXRoZW50aWNhdGVkIGFjY291bnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFBhc3NrZXlzKCk6IFByb21pc2U8UGFzc2tleVtdPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5wYXNza2V5Lmxpc3RVc2VyUGFzc2tleXMoKTtcbiAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgUGFzc2tleSBsaXN0aW5nIGZhaWxlZCB3aXRoICR7cmVzdWx0LmVycm9yLnN0YXR1c31gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGEgPz8gW107XG59XG5cbi8qKiBSZW5hbWUgYW4gZW5yb2xsZWQgcGFzc2tleS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5hbWVQYXNza2V5KGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQucGFzc2tleS51cGRhdGVQYXNza2V5KHsgaWQsIG5hbWUgfSk7XG4gIHJldHVybiByZXN1bHQuZXJyb3IgPT09IG51bGw7XG59XG5cbi8qKiBSZW1vdmUgYW4gZW5yb2xsZWQgcGFzc2tleS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVQYXNza2V5KGlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnBhc3NrZXkuZGVsZXRlUGFzc2tleSh7IGlkIH0pO1xuICByZXR1cm4gcmVzdWx0LmVycm9yID09PSBudWxsO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@better-auth/passkey": "1.7.6",
|
|
26
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
26
|
+
"@dbx-tools/shared-core": "^0.9.138",
|
|
27
27
|
"@simplewebauthn/browser": "13.3.0",
|
|
28
28
|
"better-auth": "1.7.6",
|
|
29
29
|
"zod": "4.3.6"
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"./package.json": "./package.json"
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
|
-
"version": "0.9.
|
|
73
|
+
"version": "0.9.138",
|
|
74
74
|
"types": "./lib/index.d.ts",
|
|
75
75
|
"dbxToolsConfig": {
|
|
76
76
|
"tags": [
|
package/src/auth.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
11
12
|
import { z } from "zod";
|
|
12
13
|
|
|
13
14
|
import { AUTH_BASE_PATH } from "./_route.ts";
|
|
@@ -28,6 +29,25 @@ export function isAuthPath(path: string): boolean {
|
|
|
28
29
|
/** Shared Better Auth session-cookie name used by browser and server packages. */
|
|
29
30
|
export const SESSION_COOKIE_NAME = "dbx-tools-auth";
|
|
30
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Build a passkey display name from an optional prefix and the humanized first
|
|
34
|
+
* hostname label. For example, `DBX Tools` and `demo.apps.example.com` produce
|
|
35
|
+
* `DBX Tools Demo`.
|
|
36
|
+
*/
|
|
37
|
+
export function passkeyDisplayName(
|
|
38
|
+
prefix: string | undefined,
|
|
39
|
+
hostname: string,
|
|
40
|
+
): string | undefined {
|
|
41
|
+
const normalizedPrefix = stringUtils.trimToNull(prefix);
|
|
42
|
+
const subdomain = stringUtils.trimToNull(hostname)?.split(".", 1)[0];
|
|
43
|
+
const suffix = subdomain ? stringUtils.toLabel(subdomain) : undefined;
|
|
44
|
+
if (!normalizedPrefix) return suffix;
|
|
45
|
+
if (!suffix || normalizedPrefix.toLowerCase().endsWith(suffix.toLowerCase())) {
|
|
46
|
+
return normalizedPrefix;
|
|
47
|
+
}
|
|
48
|
+
return `${normalizedPrefix} ${suffix}`;
|
|
49
|
+
}
|
|
50
|
+
|
|
31
51
|
export const authRequestSchema = z
|
|
32
52
|
.object({
|
|
33
53
|
email: z.string().describe("Address to email a one-time code to, if it is authorized."),
|
|
@@ -78,6 +98,10 @@ export const authStatusSchema = z
|
|
|
78
98
|
email: z.string().optional().describe("Signed-in address when a session exists."),
|
|
79
99
|
enabled: z.boolean().describe("True when the passwordless gate is configured."),
|
|
80
100
|
passkeysEnabled: z.boolean().optional().describe("True when WebAuthn passkeys are available."),
|
|
101
|
+
passkeyNamePrefix: z
|
|
102
|
+
.string()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("Configured prefix for humanized passkey display names."),
|
|
81
105
|
})
|
|
82
106
|
.describe("Gate availability, session identity, and optional passkey capability.");
|
|
83
107
|
|
package/src/browser.ts
CHANGED
|
@@ -14,12 +14,13 @@ import { createAuthClient } from "better-auth/client";
|
|
|
14
14
|
import { emailOTPClient } from "better-auth/client/plugins";
|
|
15
15
|
|
|
16
16
|
import { AUTH_BASE_PATH } from "./_route.ts";
|
|
17
|
-
import type
|
|
17
|
+
import { type AuthStatus, passkeyDisplayName as formatPasskeyDisplayName } from "./auth.ts";
|
|
18
18
|
|
|
19
19
|
export { AUTH_BASE_PATH } from "./_route.ts";
|
|
20
20
|
export type { Passkey } from "@better-auth/passkey/client";
|
|
21
21
|
|
|
22
22
|
interface BrowserLocation {
|
|
23
|
+
readonly hostname: string;
|
|
23
24
|
readonly origin: string;
|
|
24
25
|
assign(url: string): void;
|
|
25
26
|
}
|
|
@@ -56,7 +57,8 @@ function authStatus(value: unknown): AuthStatus {
|
|
|
56
57
|
typeof item.authenticated !== "boolean" ||
|
|
57
58
|
typeof item.enabled !== "boolean" ||
|
|
58
59
|
(item.email !== undefined && typeof item.email !== "string") ||
|
|
59
|
-
(item.passkeysEnabled !== undefined && typeof item.passkeysEnabled !== "boolean")
|
|
60
|
+
(item.passkeysEnabled !== undefined && typeof item.passkeysEnabled !== "boolean") ||
|
|
61
|
+
(item.passkeyNamePrefix !== undefined && typeof item.passkeyNamePrefix !== "string")
|
|
60
62
|
) {
|
|
61
63
|
throw new Error("Auth status returned an invalid response");
|
|
62
64
|
}
|
|
@@ -65,6 +67,9 @@ function authStatus(value: unknown): AuthStatus {
|
|
|
65
67
|
enabled: item.enabled,
|
|
66
68
|
...(typeof item.email === "string" ? { email: item.email } : {}),
|
|
67
69
|
...(typeof item.passkeysEnabled === "boolean" ? { passkeysEnabled: item.passkeysEnabled } : {}),
|
|
70
|
+
...(typeof item.passkeyNamePrefix === "string"
|
|
71
|
+
? { passkeyNamePrefix: item.passkeyNamePrefix }
|
|
72
|
+
: {}),
|
|
68
73
|
};
|
|
69
74
|
}
|
|
70
75
|
|
|
@@ -120,10 +125,19 @@ export function beginPasskeySignIn(autoFill = false): PasskeyOperation {
|
|
|
120
125
|
return beginPasskeyOperation((operationClient) => operationClient.signIn.passkey({ autoFill }));
|
|
121
126
|
}
|
|
122
127
|
|
|
123
|
-
/**
|
|
128
|
+
/** Build a passkey display name for the current browser hostname. */
|
|
129
|
+
export function passkeyDisplayName(prefix?: string): string | undefined {
|
|
130
|
+
return formatPasskeyDisplayName(prefix, browserLocation()?.hostname ?? "");
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Start a passkey registration whose lifetime is explicitly owned by the caller.
|
|
135
|
+
* The display name defaults to the humanized browser subdomain.
|
|
136
|
+
*/
|
|
124
137
|
export function beginPasskeyEnrollment(name?: string): PasskeyOperation {
|
|
138
|
+
const passkeyName = name ?? passkeyDisplayName();
|
|
125
139
|
return beginPasskeyOperation((operationClient) =>
|
|
126
|
-
operationClient.passkey.addPasskey(
|
|
140
|
+
operationClient.passkey.addPasskey(passkeyName ? { name: passkeyName } : undefined),
|
|
127
141
|
);
|
|
128
142
|
}
|
|
129
143
|
|