@dbx-tools/shared-auth 0.9.131 → 0.9.133

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/README.md CHANGED
@@ -1,16 +1,16 @@
1
- # `@dbx-tools/shared-auth`
1
+ # @dbx-tools/shared-auth
2
2
 
3
- Keep passwordless sign-in, passkey controls, and Databricks profile selectors
4
- consistent across browser and server packages. The package provides shared
5
- schemas for validating responses at the network boundary plus browser helpers
6
- that work with `@dbx-tools/auth-gate`.
3
+ Validate passwordless sign-in, passkey, Databricks profile, and resolved-client
4
+ data at browser and server boundaries. The package also provides browser helpers
5
+ for the routes owned by
6
+ [@dbx-tools/auth-gate](../../node/auth-gate).
7
7
 
8
- ## Read Authentication Status
8
+ ## Read authentication status
9
9
 
10
10
  ```ts
11
11
  import { authStatusSchema } from "@dbx-tools/shared-auth";
12
12
 
13
- const response = await fetch("/api/auth/status", { credentials: "include" });
13
+ const response = await fetch("/api/email/auth/status", { credentials: "include" });
14
14
  const status = authStatusSchema.parse(await response.json());
15
15
 
16
16
  if (status.enabled && !status.authenticated) {
@@ -21,7 +21,7 @@ if (status.enabled && !status.authenticated) {
21
21
  Use the request, verification, logout, and status schemas when custom UI or
22
22
  transport code calls the auth gate directly.
23
23
 
24
- ## Build A Profile Selector
24
+ ## Build a profile selector
25
25
 
26
26
  Profile summaries never include tokens or client secrets. Validate values before
27
27
  rendering or persisting a selection:
@@ -32,33 +32,55 @@ import {
32
32
  databricksProfileSelectionSchema,
33
33
  } from "@dbx-tools/shared-auth";
34
34
 
35
- const profiles = databricksProfileListSchema.parse(await response.json());
36
- const selection = databricksProfileSelectionSchema.parse({
37
- kind: "profile",
38
- profile: profiles[0].name,
39
- });
35
+ export function selectFirstProfile(input: unknown) {
36
+ const profiles = databricksProfileListSchema.parse(input);
37
+ return databricksProfileSelectionSchema.parse({
38
+ kind: "profile",
39
+ profile: profiles[0]!.name,
40
+ });
41
+ }
40
42
  ```
41
43
 
42
44
  Use `{ kind: "ambient" }` when the consuming runtime should choose its normal
43
45
  Databricks authentication source.
44
46
 
45
- ## Use Browser Sign-In Helpers
47
+ ## Use browser sign-in helpers
46
48
 
47
- The `browser` module requests and verifies email OTPs, starts passkey sign-in or
48
- enrollment, manages enrolled passkeys, reads gate status, and logs out through
49
- the server-provided same-origin redirect.
49
+ The `browser` module requests and verifies email one-time passwords (OTPs),
50
+ starts passkey sign-in or enrollment, manages enrolled passkeys, reads gate
51
+ status, and logs out through the server-provided same-origin redirect.
50
52
 
51
53
  ```ts
52
54
  import { requestEmailOtp, verifyEmailOtp } from "@dbx-tools/shared-auth/browser";
53
55
 
54
- await requestEmailOtp("person@example.com");
55
- await verifyEmailOtp("person@example.com", code, "Person");
56
+ export async function requestCode(email: string) {
57
+ return requestEmailOtp(email);
58
+ }
59
+
60
+ export async function submitCode(email: string, code: string, name: string) {
61
+ return verifyEmailOtp(email, code, name);
62
+ }
56
63
  ```
57
64
 
58
- ## Package API
65
+ Browser helpers use same-origin `/api/email/auth` routes and include the session
66
+ cookie. Email one-time passwords and logout require the auth-gate server routes.
67
+ Passkey operations also require a browser with WebAuthn support. A direct auth
68
+ runtime mounted elsewhere must use the same base path before these helpers can
69
+ call it.
70
+
71
+ ## Runtime boundary
72
+
73
+ The Zod schemas and secret-free profile types are safe for shared code. The
74
+ `./browser` subpath performs browser network and WebAuthn operations. This
75
+ package doesn't resolve credentials, mint Databricks tokens, or register server
76
+ routes. Use [@dbx-tools/auth](../../node/auth) for Databricks credential
77
+ resolution and [@dbx-tools/auth-gate](../../node/auth-gate) for passwordless
78
+ server routes.
79
+
80
+ ## Package exports
59
81
 
60
- - `auth` validates passwordless gate requests and responses.
61
- - `browser` performs email OTP, passkey, status, and logout operations.
62
- - `config` defines Databricks authentication and target values.
63
- - `profile` validates secret-free profile lists and selections.
64
- - `client` validates resolved, secret-free Databricks client information.
82
+ - `auth`: validates passwordless gate requests and responses.
83
+ - `browser`: performs email OTP, passkey, status, and logout operations.
84
+ - `config`: defines Databricks authentication and target values.
85
+ - `profile`: validates secret-free profile lists and selections.
86
+ - `client`: validates resolved, secret-free Databricks client information.
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.131";
6
+ export const PACKAGE_VERSION = "0.9.133";
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.131";
2
+ export declare const PACKAGE_VERSION = "0.9.133";
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.131";
5
+ export const PACKAGE_VERSION = "0.9.133";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BNLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9zaGFyZWQtYXV0aFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzMVwiO1xuZXhwb3J0ICogYXMgYXV0aCBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0ICogYXMgYnJvd3NlciBmcm9tIFwiLi9zcmMvYnJvd3Nlci50c1wiO1xuZXhwb3J0ICogYXMgY2xpZW50IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdTY2hlbWEgZnJvbSBcIi4vc3JjL2NvbmZpZy1zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHByb2ZpbGUgZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB7IEFVVEhfQkFTRV9QQVRILCBTRVNTSU9OX0NPT0tJRV9OQU1FLCBhdXRoUmVxdWVzdFNjaGVtYSwgYXV0aFJlcXVlc3RSZXN1bHRTY2hlbWEsIGF1dGhWZXJpZnlTY2hlbWEsIGF1dGhWZXJpZnlSZXN1bHRTY2hlbWEsIGF1dGhMb2dvdXRSZXN1bHRTY2hlbWEsIGF1dGhTdGF0dXNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoUmVxdWVzdCwgQXV0aFJlcXVlc3RSZXN1bHQsIEF1dGhWZXJpZnksIEF1dGhWZXJpZnlSZXN1bHQsIEF1dGhMb2dvdXRSZXN1bHQsIEF1dGhTdGF0dXMgfSBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0IHR5cGUgeyBQYXNza2V5T3BlcmF0aW9uIH0gZnJvbSBcIi4vc3JjL2Jyb3dzZXIudHNcIjtcbmV4cG9ydCB7IFJVTlRJTUVfQVVUSF9UWVBFLCBkYXRhYnJpY2tzQXV0aENsaWVudEluZm9TY2hlbWEgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NBdXRoQ2xpZW50SW5mbyB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgYXV0aFR5cGVTY2hlbWEsIHRhcmdldEtpbmRTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXNjaGVtYS50c1wiO1xuZXhwb3J0IHsgZGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5U2NoZW1hLCBkYXRhYnJpY2tzUHJvZmlsZUxpc3RTY2hlbWEsIGRhdGFicmlja3NQcm9maWxlU2VsZWN0aW9uU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5LCBEYXRhYnJpY2tzUHJvZmlsZUxpc3QsIERhdGFicmlja3NQcm9maWxlU2VsZWN0aW9uIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BNLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9zaGFyZWQtYXV0aFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzM1wiO1xuZXhwb3J0ICogYXMgYXV0aCBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0ICogYXMgYnJvd3NlciBmcm9tIFwiLi9zcmMvYnJvd3Nlci50c1wiO1xuZXhwb3J0ICogYXMgY2xpZW50IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdTY2hlbWEgZnJvbSBcIi4vc3JjL2NvbmZpZy1zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHByb2ZpbGUgZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB7IEFVVEhfQkFTRV9QQVRILCBTRVNTSU9OX0NPT0tJRV9OQU1FLCBhdXRoUmVxdWVzdFNjaGVtYSwgYXV0aFJlcXVlc3RSZXN1bHRTY2hlbWEsIGF1dGhWZXJpZnlTY2hlbWEsIGF1dGhWZXJpZnlSZXN1bHRTY2hlbWEsIGF1dGhMb2dvdXRSZXN1bHRTY2hlbWEsIGF1dGhTdGF0dXNTY2hlbWEgfSBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoUmVxdWVzdCwgQXV0aFJlcXVlc3RSZXN1bHQsIEF1dGhWZXJpZnksIEF1dGhWZXJpZnlSZXN1bHQsIEF1dGhMb2dvdXRSZXN1bHQsIEF1dGhTdGF0dXMgfSBmcm9tIFwiLi9zcmMvYXV0aC50c1wiO1xuZXhwb3J0IHR5cGUgeyBQYXNza2V5T3BlcmF0aW9uIH0gZnJvbSBcIi4vc3JjL2Jyb3dzZXIudHNcIjtcbmV4cG9ydCB7IFJVTlRJTUVfQVVUSF9UWVBFLCBkYXRhYnJpY2tzQXV0aENsaWVudEluZm9TY2hlbWEgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NBdXRoQ2xpZW50SW5mbyB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgYXV0aFR5cGVTY2hlbWEsIHRhcmdldEtpbmRTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXNjaGVtYS50c1wiO1xuZXhwb3J0IHsgZGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5U2NoZW1hLCBkYXRhYnJpY2tzUHJvZmlsZUxpc3RTY2hlbWEsIGRhdGFicmlja3NQcm9maWxlU2VsZWN0aW9uU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5LCBEYXRhYnJpY2tzUHJvZmlsZUxpc3QsIERhdGFicmlja3NQcm9maWxlU2VsZWN0aW9uIH0gZnJvbSBcIi4vc3JjL3Byb2ZpbGUudHNcIjtcbiJdfQ==
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.131",
26
+ "@dbx-tools/shared-core": "^0.9.133",
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.131",
73
+ "version": "0.9.133",
74
74
  "types": "./lib/index.d.ts",
75
75
  "dbxToolsConfig": {
76
76
  "tags": [