@atlasauth/js 0.37.0 → 0.38.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/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
 
4
4
 
5
+ ## 0.38.0 — 2026-11-12
6
+
7
+ - `createSignInFlow` / `createSignUpFlow` (headless typed steps with captcha wired to the right flow), `requireStepUp` / `retryWithStepUp`, `reasonMessage`, `createDpopClient`, `hasToken`, `createDeveloperPortal`, `revokeAllAgentAccess`.
8
+
5
9
  ## 0.37.0 — 2026-11-11
6
10
 
7
11
  - New app-approval sign-in: `prepareAppApproval`, `prepareAppApprovalSecondFactor`, `pollAppApprovalSecondFactor`, and for the approving app `getAppApproval`, `approveSignIn`, `denySignIn`.
package/dist/attempt.d.ts CHANGED
@@ -130,6 +130,8 @@ export interface AttemptView {
130
130
  /** The resource type the server stamps on every attempt view. */
131
131
  object?: 'sign_in_attempt' | 'sign_up_attempt';
132
132
  status: string;
133
+ /** On the `needs_captcha` marker: why the token you sent was refused (`captcha_failed`, `captcha_wrong_flow`); absent when none was sent. */
134
+ reason?: string;
133
135
  /** The identifier the attempt was started with; `null` before one is collected. */
134
136
  identifier?: string | null;
135
137
  supported_first_factors?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"attempt.js","sourceRoot":"","sources":["../src/attempt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attempt.js","sourceRoot":"","sources":["../src/attempt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AA8IH,4BA2DC;AAGD,gCAEC;AA6BD,kCAiBC;AAGD,8BAEC;AAGD,gCAEC;AAxHD,SAAgB,QAAQ,CAAC,OAAoB;IAC3C,QAAQ,OAAO,CAAC,MAAuB,EAAE,CAAC;QACxC,KAAK,kBAAkB;YACrB,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QAExC,KAAK,oBAAoB;YACvB,OAAO;gBACL,IAAI,EAAE,sBAAsB;gBAC5B,sEAAsE;gBACtE,qEAAqE;gBACrE,uEAAuE;gBACvE,wCAAwC;gBACxC,UAAU,EAAE,OAAO,CAAC,uBAAuB,IAAI,EAAE;aAClD,CAAC;QAEJ,KAAK,qBAAqB;YACxB,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;QAE3C;;;;;WAKG;QACH,KAAK,sBAAsB;YACzB,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;QAE1C,KAAK,0BAA0B;YAC7B,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QAExC,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAErC,KAAK,sBAAsB;YACzB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAEjC,KAAK,oBAAoB;YACvB,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;QAE1C,KAAK,yBAAyB;YAC5B,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;QAE/E,KAAK,uBAAuB;YAC1B,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,CAAC,wBAAwB,IAAI,EAAE,EAAE,CAAC;QAE/F,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;QAEzE,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAElD;YACE;;;;eAIG;YACH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,SAAgB,UAAU,CAAC,OAAoB;IAC7C,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC;AACzE,CAAC;AA6BD,SAAgB,WAAW,CAAC,IAAa;IACvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,MAAM,GAAI,IAA6B,CAAC,MAAM,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE;QACrC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAQ,KAAoB,CAAC,OAAO,KAAK,QAAQ,CAAC;IAC7E,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,GAAG,GAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACzF,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAC;QACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;YAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QACrE,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;QAChD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,GAAG,IAA+B,CAAC;QACzG,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED,8DAA8D;AAC9D,SAAgB,SAAS,CAAC,MAA6B,EAAE,KAAa;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,iEAAiE;AACjE,SAAgB,UAAU,CAAC,MAA6B;IACtD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
@@ -40,3 +40,11 @@ export declare function disconnectAuthorizedApp(client: FapiClient, consentId: s
40
40
  export declare function revokeAppGrant(client: FapiClient, grantId: string): Promise<{
41
41
  tokensEnded: number;
42
42
  }>;
43
+ /**
44
+ * Revoke all agent access in one step: disconnects every app connected through dynamic registration (MCP clients and
45
+ * AI assistants) and switches off every agent registered to the user. Needs a signed-in session.
46
+ */
47
+ export declare function revokeAllAgentAccess(client: FapiClient): Promise<{
48
+ appsDisconnected: number;
49
+ agentsDisabled: number;
50
+ }>;
@@ -4,6 +4,7 @@ exports.AuthorizedAppsError = void 0;
4
4
  exports.listAuthorizedApps = listAuthorizedApps;
5
5
  exports.disconnectAuthorizedApp = disconnectAuthorizedApp;
6
6
  exports.revokeAppGrant = revokeAppGrant;
7
+ exports.revokeAllAgentAccess = revokeAllAgentAccess;
7
8
  /** A refused request; `code` is the server's stable error code. */
8
9
  class AuthorizedAppsError extends Error {
9
10
  status;
@@ -38,4 +39,12 @@ async function revokeAppGrant(client, grantId) {
38
39
  const body = await call(client, `/v1/client/me/managed_grants/${encodeURIComponent(grantId)}`, { method: 'DELETE' });
39
40
  return { tokensEnded: body.tokens_ended ?? 0 };
40
41
  }
42
+ /**
43
+ * Revoke all agent access in one step: disconnects every app connected through dynamic registration (MCP clients and
44
+ * AI assistants) and switches off every agent registered to the user. Needs a signed-in session.
45
+ */
46
+ async function revokeAllAgentAccess(client) {
47
+ const body = await call(client, '/v1/client/me/agent_access/revoke_all', { method: 'POST' });
48
+ return { appsDisconnected: body.apps_disconnected ?? 0, agentsDisabled: body.agents_disabled ?? 0 };
49
+ }
41
50
  //# sourceMappingURL=authorized-apps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorized-apps.js","sourceRoot":"","sources":["../src/authorized-apps.ts"],"names":[],"mappings":";;;AAsDA,gDAGC;AAGD,0DAEC;AAGD,wCAGC;AApCD,mEAAmE;AACnE,MAAa,mBAAoB,SAAQ,KAAK;IACnC,MAAM,CAAS;IACf,IAAI,CAAS;IACtB,YAAY,MAAc,EAAE,IAAY,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,kDASC;AAED,KAAK,UAAU,IAAI,CAAI,MAAkB,EAAE,IAAY,EAAE,IAAiB;IACxE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,OAAO,IAAI,qBAAqB,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,oEAAoE;AAC7D,KAAK,UAAU,kBAAkB,CAAC,MAAkB;IACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAA6B,MAAM,EAAE,4BAA4B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7G,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,6EAA6E;AACtE,KAAK,UAAU,uBAAuB,CAAC,MAAkB,EAAE,SAAiB;IACjF,MAAM,IAAI,CAAC,MAAM,EAAE,8BAA8B,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,8GAA8G;AACvG,KAAK,UAAU,cAAc,CAAC,MAAkB,EAAE,OAAe;IACtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAA4B,MAAM,EAAE,gCAAgC,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChJ,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"authorized-apps.js","sourceRoot":"","sources":["../src/authorized-apps.ts"],"names":[],"mappings":";;;AAsDA,gDAGC;AAGD,0DAEC;AAGD,wCAGC;AAMD,oDAGC;AA7CD,mEAAmE;AACnE,MAAa,mBAAoB,SAAQ,KAAK;IACnC,MAAM,CAAS;IACf,IAAI,CAAS;IACtB,YAAY,MAAc,EAAE,IAAY,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,kDASC;AAED,KAAK,UAAU,IAAI,CAAI,MAAkB,EAAE,IAAY,EAAE,IAAiB;IACxE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,OAAO,IAAI,qBAAqB,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,oEAAoE;AAC7D,KAAK,UAAU,kBAAkB,CAAC,MAAkB;IACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAA6B,MAAM,EAAE,4BAA4B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7G,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,6EAA6E;AACtE,KAAK,UAAU,uBAAuB,CAAC,MAAkB,EAAE,SAAiB;IACjF,MAAM,IAAI,CAAC,MAAM,EAAE,8BAA8B,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,8GAA8G;AACvG,KAAK,UAAU,cAAc,CAAC,MAAkB,EAAE,OAAe;IACtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAA4B,MAAM,EAAE,gCAAgC,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChJ,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CAAC,MAAkB;IAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAA2D,MAAM,EAAE,uCAAuC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvJ,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;AACtG,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Headless developer-portal kit: build your own "register an app" pages on top of dynamic client registration.
3
+ * The instance gives a developer an initial access token (`oauth_initial_access_token`, bound to them); registering
4
+ * returns the app plus a registration access token that manages that one app afterwards. Call these from your
5
+ * server (or a trusted back end) so neither token reaches a browser you do not control.
6
+ */
7
+ export interface DeveloperPortalOptions {
8
+ /** The instance's issuer (its frontend API host), e.g. `https://auth.example.com`. */
9
+ issuer: string;
10
+ fetchImpl?: typeof fetch;
11
+ }
12
+ /** One registered app, as the registration endpoint reports it. */
13
+ export interface DeveloperApp {
14
+ /** The Atlas id (oac_...) the Backend API takes. Present on the registration response. */
15
+ id?: string;
16
+ client_id: string;
17
+ client_name?: string;
18
+ client_secret?: string;
19
+ client_secret_expires_at?: number;
20
+ redirect_uris: string[];
21
+ scope?: string;
22
+ grant_types?: string[];
23
+ token_endpoint_auth_method?: string;
24
+ status?: string;
25
+ /** Returned once, on registration: keep it to manage the app later. */
26
+ registration_access_token?: string;
27
+ registration_client_uri?: string;
28
+ [key: string]: unknown;
29
+ }
30
+ export interface DeveloperAppUsage {
31
+ object: 'oauth_client_usage';
32
+ client_id: string;
33
+ rate_limit_per_minute: number | null;
34
+ totals: {
35
+ calls: number;
36
+ token_issuances: number;
37
+ errors: number;
38
+ rate_limited: number;
39
+ };
40
+ data: Array<{
41
+ day: string;
42
+ calls: number;
43
+ token_issuances: number;
44
+ active_users: number;
45
+ errors: number;
46
+ rate_limited: number;
47
+ }>;
48
+ }
49
+ /** A refused request; `error` is the OAuth error code (`invalid_redirect_uri`, `invalid_client_metadata`, `invalid_token`...). */
50
+ export declare class DeveloperPortalError extends Error {
51
+ readonly status: number;
52
+ readonly error: string;
53
+ constructor(status: number, error: string, message: string);
54
+ }
55
+ export interface DeveloperPortal {
56
+ /** Register an app with the developer's initial access token. Returns the app, its secret and registration_access_token (shown once). */
57
+ registerApp(developerToken: string, app: {
58
+ client_name: string;
59
+ redirect_uris: string[];
60
+ scope?: string;
61
+ grant_types?: string[];
62
+ token_endpoint_auth_method?: string;
63
+ logo_uri?: string;
64
+ }): Promise<DeveloperApp>;
65
+ getApp(clientId: string, registrationToken: string): Promise<DeveloperApp>;
66
+ /** Replace the app's redirect URIs (the instance's rules apply: https, and https only for some developers). */
67
+ setRedirectUris(clientId: string, registrationToken: string, redirectUris: string[]): Promise<DeveloperApp>;
68
+ /** Ask for scopes. The standard scopes are applied at once; others are refused until the instance allows them for the app. */
69
+ requestScopes(clientId: string, registrationToken: string, scopes: string[]): Promise<DeveloperApp>;
70
+ /** Issue a new secret; the previous one keeps working for a short overlap. */
71
+ rotateSecret(clientId: string, registrationToken: string): Promise<{
72
+ client_id: string;
73
+ client_secret: string;
74
+ client_secret_expires_at: number;
75
+ }>;
76
+ deleteApp(clientId: string, registrationToken: string): Promise<void>;
77
+ /** Per-day token endpoint usage for the app (default last 30 days, at most 90). */
78
+ getUsage(clientId: string, registrationToken: string, days?: number): Promise<DeveloperAppUsage>;
79
+ }
80
+ export declare function createDeveloperPortal(options: DeveloperPortalOptions): DeveloperPortal;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Headless developer-portal kit: build your own "register an app" pages on top of dynamic client registration.
4
+ * The instance gives a developer an initial access token (`oauth_initial_access_token`, bound to them); registering
5
+ * returns the app plus a registration access token that manages that one app afterwards. Call these from your
6
+ * server (or a trusted back end) so neither token reaches a browser you do not control.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DeveloperPortalError = void 0;
10
+ exports.createDeveloperPortal = createDeveloperPortal;
11
+ /** A refused request; `error` is the OAuth error code (`invalid_redirect_uri`, `invalid_client_metadata`, `invalid_token`...). */
12
+ class DeveloperPortalError extends Error {
13
+ status;
14
+ error;
15
+ constructor(status, error, message) {
16
+ super(message);
17
+ this.name = 'DeveloperPortalError';
18
+ this.status = status;
19
+ this.error = error;
20
+ }
21
+ }
22
+ exports.DeveloperPortalError = DeveloperPortalError;
23
+ function createDeveloperPortal(options) {
24
+ const base = options.issuer.replace(/\/+$/, '');
25
+ const doFetch = options.fetchImpl ?? ((...a) => fetch(...a));
26
+ async function call(path, method, token, body) {
27
+ const res = await doFetch(`${base}${path}`, {
28
+ method,
29
+ headers: { authorization: `Bearer ${token}`, ...(body !== undefined ? { 'content-type': 'application/json' } : {}) },
30
+ body: body !== undefined ? JSON.stringify(body) : undefined,
31
+ });
32
+ if (res.status === 204)
33
+ return undefined;
34
+ const data = (await res.json().catch(() => ({})));
35
+ if (!res.ok)
36
+ throw new DeveloperPortalError(res.status, String(data.error ?? 'request_failed'), String(data.error_description ?? 'The request failed.'));
37
+ return data;
38
+ }
39
+ const own = (clientId) => `/oauth2/register/${encodeURIComponent(clientId)}`;
40
+ return {
41
+ registerApp: (developerToken, app) => call('/oauth2/register', 'POST', developerToken, app),
42
+ getApp: (clientId, token) => call(own(clientId), 'GET', token),
43
+ setRedirectUris: (clientId, token, redirect_uris) => call(own(clientId), 'PUT', token, { redirect_uris }),
44
+ requestScopes: (clientId, token, scopes) => call(own(clientId), 'PUT', token, { scope: scopes.join(' ') }),
45
+ rotateSecret: (clientId, token) => call(`${own(clientId)}/secret`, 'POST', token),
46
+ deleteApp: (clientId, token) => call(own(clientId), 'DELETE', token),
47
+ getUsage: (clientId, token, days) => call(`${own(clientId)}/usage${days ? `?days=${days}` : ''}`, 'GET', token),
48
+ };
49
+ }
50
+ //# sourceMappingURL=developer-portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developer-portal.js","sourceRoot":"","sources":["../src/developer-portal.ts"],"names":[],"mappings":"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"}
package/dist/dpop.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * DPoP (RFC 9449) for browsers and agents: a non-extractable ES256 key the page
3
+ * generates once, a proof for every request, and a fetch wrapper that attaches
4
+ * both and answers a server's `DPoP-Nonce` demand. Tokens issued against the
5
+ * proof's key carry `cnf.jkt`, so a copied token is useless without this key.
6
+ */
7
+ export interface DpopKeyStore {
8
+ get(): Promise<CryptoKeyPair | undefined>;
9
+ set(pair: CryptoKeyPair): Promise<void>;
10
+ }
11
+ export interface DpopClientOptions {
12
+ /** Keep the key pair across reloads (a CryptoKey can live in IndexedDB). Default: memory only. */
13
+ store?: DpopKeyStore;
14
+ /** The fetch to wrap. Default: global fetch. */
15
+ fetch?: typeof fetch;
16
+ }
17
+ export interface DpopClient {
18
+ /** RFC 7638 thumbprint of the public key: the value a bound token carries as `cnf.jkt`. */
19
+ thumbprint(): Promise<string>;
20
+ /** A proof JWT for one request. Pass `accessToken` at resource servers (adds `ath`), none at the token endpoint. */
21
+ proof(method: string, url: string, opts?: {
22
+ accessToken?: string;
23
+ nonce?: string;
24
+ }): Promise<string>;
25
+ /** `fetch` that sends `Authorization: DPoP <token>` plus a fresh proof, retrying once on `use_dpop_nonce`. */
26
+ fetch(input: string | URL, init?: RequestInit & {
27
+ accessToken?: string;
28
+ }): Promise<Response>;
29
+ }
30
+ export declare function createDpopClient(options?: DpopClientOptions): DpopClient;
package/dist/dpop.js ADDED
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDpopClient = createDpopClient;
4
+ const passkey_1 = require("./passkey");
5
+ const enc = (o) => (0, passkey_1.bufferToBase64Url)(new TextEncoder().encode(JSON.stringify(o)));
6
+ const ALG = { name: 'ECDSA', namedCurve: 'P-256' };
7
+ // htu is the request URL without query or fragment (RFC 9449 §4.2).
8
+ const htuOf = (url) => {
9
+ const u = new URL(String(url));
10
+ return `${u.origin}${u.pathname}`;
11
+ };
12
+ function createDpopClient(options = {}) {
13
+ const doFetch = options.fetch ?? ((...a) => fetch(...a));
14
+ let pair;
15
+ const nonces = new Map();
16
+ const keys = () => (pair ??= (async () => {
17
+ const saved = await options.store?.get();
18
+ if (saved)
19
+ return saved;
20
+ // extractable:false keeps the private key unreadable by script; the public half stays exportable.
21
+ const fresh = await crypto.subtle.generateKey(ALG, false, ['sign', 'verify']);
22
+ await options.store?.set(fresh);
23
+ return fresh;
24
+ })());
25
+ const publicJwk = async () => {
26
+ const { kty, crv, x, y } = (await crypto.subtle.exportKey('jwk', (await keys()).publicKey));
27
+ return { kty, crv, x, y };
28
+ };
29
+ const thumbprint = async () => {
30
+ // RFC 7638 canonical member order for EC keys.
31
+ const j = await publicJwk();
32
+ const canon = JSON.stringify({ crv: j.crv, kty: j.kty, x: j.x, y: j.y });
33
+ return (0, passkey_1.bufferToBase64Url)(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(canon)));
34
+ };
35
+ const proof = async (method, url, opts = {}) => {
36
+ const payload = {
37
+ jti: crypto.randomUUID(),
38
+ htm: method.toUpperCase(),
39
+ htu: htuOf(url),
40
+ iat: Math.floor(Date.now() / 1000),
41
+ };
42
+ if (opts.nonce)
43
+ payload.nonce = opts.nonce;
44
+ if (opts.accessToken) {
45
+ payload.ath = (0, passkey_1.bufferToBase64Url)(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(opts.accessToken)));
46
+ }
47
+ const signingInput = `${enc({ typ: 'dpop+jwt', alg: 'ES256', jwk: await publicJwk() })}.${enc(payload)}`;
48
+ const sig = await crypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, (await keys()).privateKey, new TextEncoder().encode(signingInput));
49
+ return `${signingInput}.${(0, passkey_1.bufferToBase64Url)(sig)}`;
50
+ };
51
+ const send = async (input, init = {}) => {
52
+ const { accessToken, ...rest } = init;
53
+ const method = rest.method ?? 'GET';
54
+ const origin = new URL(String(input)).origin;
55
+ const attempt = async () => {
56
+ const headers = new Headers(rest.headers);
57
+ headers.set('DPoP', await proof(method, String(input), { accessToken, nonce: nonces.get(origin) }));
58
+ if (accessToken)
59
+ headers.set('Authorization', `DPoP ${accessToken}`);
60
+ const res = await doFetch(input, { ...rest, headers });
61
+ const next = res.headers.get('DPoP-Nonce');
62
+ if (next)
63
+ nonces.set(origin, next);
64
+ return { res, next };
65
+ };
66
+ const first = await attempt();
67
+ // RFC 9449 §8/§9: a server that wants a nonce answers 400/401 with DPoP-Nonce; retry once with it.
68
+ if (first.next && (first.res.status === 400 || first.res.status === 401))
69
+ return (await attempt()).res;
70
+ return first.res;
71
+ };
72
+ return { thumbprint, proof, fetch: send };
73
+ }
74
+ //# sourceMappingURL=dpop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dpop.js","sourceRoot":"","sources":["../src/dpop.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -13,7 +13,7 @@
13
13
  * `error.<reason>` keys. Listed for docs and coverage checks; a reason missing
14
14
  * from this list still renders (as the server's `message`).
15
15
  */
16
- export declare const ERROR_REASONS: readonly ["form_password_incorrect", "form_code_incorrect", "form_code_already_used", "form_code_expired", "form_code_max_attempts", "form_link_invalid", "form_identifier_not_found", "form_identifier_exists", "form_password_pwned", "form_password_too_short", "form_password_too_long", "form_password_requires_uppercase", "form_password_requires_lowercase", "form_password_requires_number", "form_password_requires_symbol", "form_password_not_allowed", "form_password_contains_identifier", "form_password_same_as_current", "form_password_reused", "password_expired", "email_not_verified", "mfa_setup_unavailable", "sign_in_token_invalid", "too_many_attempts", "too_many_requests", "captcha_required", "captcha_failed", "captcha_unavailable", "email_delivery_unavailable", "email_address_unreachable", "strategy_disabled", "sign_up_restricted", "sign_up_denied", "password_not_yet_usable", "account_deleted", "waitlisted", "identifier_not_allowed", "disposable_email_blocked", "sso_required", "sign_ins_disabled", "sign_ups_disabled", "high_risk_blocked", "sms_region_blocked", "github_team_required", "app_approval_denied", "app_approval_expired"];
16
+ export declare const ERROR_REASONS: readonly ["form_password_incorrect", "form_code_incorrect", "form_code_already_used", "form_code_expired", "form_code_max_attempts", "form_link_invalid", "form_identifier_not_found", "form_identifier_exists", "form_password_pwned", "form_password_too_short", "form_password_too_long", "form_password_requires_uppercase", "form_password_requires_lowercase", "form_password_requires_number", "form_password_requires_symbol", "form_password_not_allowed", "form_password_contains_identifier", "form_password_same_as_current", "form_password_reused", "password_expired", "email_not_verified", "mfa_setup_unavailable", "sign_in_token_invalid", "too_many_attempts", "too_many_requests", "captcha_required", "captcha_failed", "captcha_unavailable", "email_delivery_unavailable", "email_address_unreachable", "strategy_disabled", "sign_up_restricted", "sign_up_denied", "password_not_yet_usable", "account_deleted", "waitlisted", "identifier_not_allowed", "disposable_email_blocked", "sso_required", "sign_ins_disabled", "sign_ups_disabled", "high_risk_blocked", "sms_region_blocked", "github_team_required", "app_approval_denied", "app_approval_expired", "captcha_wrong_flow"];
17
17
  /** A reason with a string in every shipped catalog. */
18
18
  export type ErrorReason = (typeof ERROR_REASONS)[number];
19
19
  /** The catalog key for a reason: `error.<reason>`. */
@@ -56,3 +56,10 @@ export declare function localizedErrorMessage(error: ErrorLike | string | null |
56
56
  * `localization` bundle use it as the `Accept-Language` they send.
57
57
  */
58
58
  export declare function catalogLocale(catalog: object | null | undefined): string | undefined;
59
+ /**
60
+ * The sentence for a stable `reason` in the app's language: the catalog string
61
+ * `error.<reason>` from `localization` (a `@atlasauth/localizations` bundle or a
62
+ * lookup function), else `fallback`, else a generic sentence. Never empty.
63
+ * For headless sign-in: `reasonMessage(flow.getSnapshot().reason, esES)`.
64
+ */
65
+ export declare function reasonMessage(reason: string | null | undefined, localization?: ErrorStrings | null, fallback?: string): string;
package/dist/errors.js CHANGED
@@ -14,6 +14,7 @@ exports.ERROR_REASONS = void 0;
14
14
  exports.errorReasonKey = errorReasonKey;
15
15
  exports.localizedErrorMessage = localizedErrorMessage;
16
16
  exports.catalogLocale = catalogLocale;
17
+ exports.reasonMessage = reasonMessage;
17
18
  /**
18
19
  * The reasons the Frontend API sends that every shipped catalog translates, as
19
20
  * `error.<reason>` keys. Listed for docs and coverage checks; a reason missing
@@ -66,6 +67,7 @@ exports.ERROR_REASONS = Object.freeze([
66
67
  'github_team_required',
67
68
  'app_approval_denied',
68
69
  'app_approval_expired',
70
+ 'captcha_wrong_flow',
69
71
  ]);
70
72
  /** The catalog key for a reason: `error.<reason>`. */
71
73
  function errorReasonKey(reason) {
@@ -148,4 +150,13 @@ function catalogLocale(catalog) {
148
150
  const tag = catalog.locale;
149
151
  return typeof tag === 'string' && tag.trim() !== '' ? tag : undefined;
150
152
  }
153
+ /**
154
+ * The sentence for a stable `reason` in the app's language: the catalog string
155
+ * `error.<reason>` from `localization` (a `@atlasauth/localizations` bundle or a
156
+ * lookup function), else `fallback`, else a generic sentence. Never empty.
157
+ * For headless sign-in: `reasonMessage(flow.getSnapshot().reason, esES)`.
158
+ */
159
+ function reasonMessage(reason, localization, fallback) {
160
+ return localizedErrorMessage({ reason, message: fallback }, localization);
161
+ }
151
162
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ProtectCondition } from '@atlasauth/authz';
2
+ /**
3
+ * `has({ feature })`, `has({ plan })`, `has({ role })` … against a token you
4
+ * already hold (the session token or an access token). The payload is decoded,
5
+ * not verified: use it to show or hide UI, and verify on the server to enforce.
6
+ */
7
+ export declare function hasToken(token: string | null | undefined, condition: ProtectCondition): boolean;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasToken = hasToken;
4
+ const authz_1 = require("@atlasauth/authz");
5
+ const compat_1 = require("./compat");
6
+ /**
7
+ * `has({ feature })`, `has({ plan })`, `has({ role })` … against a token you
8
+ * already hold (the session token or an access token). The payload is decoded,
9
+ * not verified: use it to show or hide UI, and verify on the server to enforce.
10
+ */
11
+ function hasToken(token, condition) {
12
+ const claims = token ? (0, compat_1.decodeJwtPayload)(token) : null;
13
+ return (0, authz_1.hasFromClaims)(claims, condition);
14
+ }
15
+ //# sourceMappingURL=has-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-token.js","sourceRoot":"","sources":["../src/has-token.ts"],"names":[],"mappings":";;AAQA,4BAGC;AAXD,4CAA0F;AAC1F,qCAA4C;AAE5C;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,KAAgC,EAAE,SAA2B;IACpF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,yBAAgB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,OAAO,IAAA,qBAAa,EAAC,MAA4B,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -37,6 +37,7 @@ export * from './passkey-sign-up';
37
37
  export * from './email-code-check';
38
38
  export * from './srp';
39
39
  export * from './step-up';
40
+ export * from './sign-in-flow';
40
41
  export * from './org-step-up';
41
42
  export * from './telegram';
42
43
  export * from './siwe';
@@ -44,6 +45,7 @@ export * from './telemetry';
44
45
  export * from './reauth';
45
46
  export * from './api-keys';
46
47
  export * from './authorized-apps';
48
+ export * from './developer-portal';
47
49
  export * from './ciba';
48
50
  export * from './device-authorization';
49
51
  export * from './app-launcher';
@@ -76,6 +78,8 @@ export * from './atlas-captcha';
76
78
  export * from './captcha-controller';
77
79
  export * from './instance-settings';
78
80
  export * from './environment';
81
+ export * from './dpop';
82
+ export { hasToken } from './has-token';
79
83
  export { type AuthzClaims, type ProtectCondition, type ProtectOutcome, type ProtectReason, evaluate, hasFromClaims, protectFromClaims, ForbiddenError, ROLE_KEY_PATTERN, PERMISSION_KEY_PATTERN, isRoleKey, isPermissionKey, } from '@atlasauth/authz';
80
84
  export * from './journey-redirect';
81
85
  export * from './delegated-ui';
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isPermissionKey = exports.isRoleKey = exports.PERMISSION_KEY_PATTERN = exports.ROLE_KEY_PATTERN = exports.ForbiddenError = exports.protectFromClaims = exports.hasFromClaims = exports.evaluate = exports.configureAttribution = exports.detectReferralSource = exports.detectConsentProvider = exports.detectConsent = exports.canonicalCategory = exports.REFERRAL_BROWSER_SOURCES = exports.CONSENT_PROVIDERS = exports.withDevBrowser = exports.setPersistence = exports.forgetDevBrowserToken = exports.devBrowserToken = exports.devBrowserEnabled = void 0;
17
+ exports.isPermissionKey = exports.isRoleKey = exports.PERMISSION_KEY_PATTERN = exports.ROLE_KEY_PATTERN = exports.ForbiddenError = exports.protectFromClaims = exports.hasFromClaims = exports.evaluate = exports.hasToken = exports.configureAttribution = exports.detectReferralSource = exports.detectConsentProvider = exports.detectConsent = exports.canonicalCategory = exports.REFERRAL_BROWSER_SOURCES = exports.CONSENT_PROVIDERS = exports.withDevBrowser = exports.setPersistence = exports.forgetDevBrowserToken = exports.devBrowserToken = exports.devBrowserEnabled = void 0;
18
18
  // Provider configuration checks (frontendApi) shared by every framework SDK.
19
19
  __exportStar(require("./config"), exports);
20
20
  __exportStar(require("./sign-out"), exports);
@@ -84,6 +84,7 @@ __exportStar(require("./email-code-check"), exports);
84
84
  // SRP-6a sign-in (RFC 5054, 3072-bit group, SHA-256): the password never leaves the browser.
85
85
  __exportStar(require("./srp"), exports);
86
86
  __exportStar(require("./step-up"), exports);
87
+ __exportStar(require("./sign-in-flow"), exports);
87
88
  __exportStar(require("./org-step-up"), exports);
88
89
  __exportStar(require("./telegram"), exports);
89
90
  __exportStar(require("./siwe"), exports);
@@ -93,6 +94,8 @@ __exportStar(require("./reauth"), exports);
93
94
  __exportStar(require("./api-keys"), exports);
94
95
  // The apps a user authorized, with the OpenID Grant Management grants each holds.
95
96
  __exportStar(require("./authorized-apps"), exports);
97
+ // Headless developer portal: register an app, rotate its secret, manage redirect URIs, request scopes, read usage.
98
+ __exportStar(require("./developer-portal"), exports);
96
99
  __exportStar(require("./ciba"), exports);
97
100
  __exportStar(require("./device-authorization"), exports);
98
101
  __exportStar(require("./app-launcher"), exports);
@@ -141,6 +144,9 @@ __exportStar(require("./captcha-controller"), exports);
141
144
  __exportStar(require("./instance-settings"), exports);
142
145
  // `GET /v1/client/environment`, typed, and the `email_delivery` facts.
143
146
  __exportStar(require("./environment"), exports);
147
+ __exportStar(require("./dpop"), exports);
148
+ var has_token_1 = require("./has-token");
149
+ Object.defineProperty(exports, "hasToken", { enumerable: true, get: function () { return has_token_1.hasToken; } });
144
150
  // Framework-agnostic authorization primitive — `has()`/`evaluate` for any
145
151
  // non-React/Next consumer reading org_role/org_permissions off its session.
146
152
  var authz_1 = require("@atlasauth/authz");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/passkey.d.ts CHANGED
@@ -178,6 +178,8 @@ export interface PasskeyPromptDecision {
178
178
  eligible: boolean;
179
179
  variant: string;
180
180
  cooldown_days: number;
181
+ /** Set when a running passkey campaign is why the prompt is due. */
182
+ campaign_id?: string;
181
183
  }
182
184
  /** Eligible by the server and not dismissed within the cooldown on this device. */
183
185
  export declare function passkeyPromptDue(decision: PasskeyPromptDecision, store?: Pick<Storage, 'getItem'> | undefined, now?: number): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../src/passkey.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../src/passkey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Headless sign-in and sign-up: one typed step at a time, no UI.
3
+ *
4
+ * `createSignInFlow()` / `createSignUpFlow()` wrap the same requests the
5
+ * prebuilt components send. You render whatever the current `step` asks for and
6
+ * call the matching method; the flow never decides the next step itself, the
7
+ * server does. Captcha is handled for you: when the server asks for one the step
8
+ * is `needs_captcha`, and `solveCaptcha(container)` draws the widget for the
9
+ * right flow and submits its token.
10
+ *
11
+ * Errors carry a stable `reason` (`form_password_incorrect`, `captcha_wrong_flow`,
12
+ * …). Turn it into a sentence in the app's language with `reasonMessage`.
13
+ */
14
+ import { type FieldError, type PendingPolicy } from './attempt';
15
+ import { type PolicyAcceptance } from './policies';
16
+ import { type CaptchaFlowKey, type FlowCaptcha } from './captcha-widget';
17
+ import { type FapiClient } from './fapi';
18
+ /** Second-factor strategies the server accepts. Not narrowed per account: that would reveal what the account has. */
19
+ export declare const SECOND_FACTOR_STRATEGIES: readonly ["totp", "backup_code", "sms", "email_code"];
20
+ export type FlowStep = {
21
+ type: 'needs_identifier';
22
+ } | {
23
+ type: 'needs_captcha';
24
+ flow: CaptchaFlowKey;
25
+ captcha: FlowCaptcha | null;
26
+ } | {
27
+ type: 'needs_first_factor';
28
+ factors: string[];
29
+ } | {
30
+ type: 'needs_second_factor';
31
+ factors: string[];
32
+ } | {
33
+ type: 'needs_policy_acceptance';
34
+ policies: PendingPolicy[];
35
+ } | {
36
+ type: 'needs_email_verification';
37
+ }
38
+ /** Send the browser to `url` (OAuth); it comes back signed in. */
39
+ | {
40
+ type: 'redirect';
41
+ url: string;
42
+ }
43
+ /** A step this flow does not drive (MFA enrolment, a required action, an unknown status): hand over to the prebuilt component. */
44
+ | {
45
+ type: 'needs_other';
46
+ status: string;
47
+ } | {
48
+ type: 'complete';
49
+ sessionId: string | null;
50
+ };
51
+ export interface FlowSnapshot {
52
+ step: FlowStep;
53
+ /** The errors of the last call. Each has a stable `reason`. */
54
+ errors: FieldError[];
55
+ /** The first error's stable reason, or the captcha refusal's. */
56
+ reason: string | null;
57
+ busy: boolean;
58
+ }
59
+ export interface FlowOptions {
60
+ client: FapiClient;
61
+ }
62
+ interface Core {
63
+ /** The current step, errors and busy flag. */
64
+ getSnapshot(): FlowSnapshot;
65
+ subscribe(listener: (snapshot: FlowSnapshot) => void): () => void;
66
+ /** Draw the captcha widget for this flow into `container`, then submit its token. */
67
+ solveCaptcha(container: HTMLElement): Promise<FlowSnapshot>;
68
+ /** Submit a captcha token you obtained yourself. */
69
+ submitCaptcha(token: string): Promise<FlowSnapshot>;
70
+ /** Send the browser to a social provider; the step becomes `redirect`. */
71
+ startOAuth(provider: string, redirectUrl: string): Promise<FlowSnapshot>;
72
+ /** Accept the policies a `needs_policy_acceptance` step lists. */
73
+ acceptPolicies(acceptances: PolicyAcceptance[]): Promise<FlowSnapshot>;
74
+ /** Forget everything and go back to the first step. */
75
+ reset(): FlowSnapshot;
76
+ }
77
+ export interface SignInFlow extends Core {
78
+ /** `needs_identifier`: start with an email, username or phone number. */
79
+ submitIdentifier(identifier: string): Promise<FlowSnapshot>;
80
+ /** `needs_first_factor`: the password. */
81
+ submitPassword(password: string): Promise<FlowSnapshot>;
82
+ /** `needs_first_factor`: email the person a code (then `submitEmailCode`). */
83
+ sendEmailCode(): Promise<FlowSnapshot>;
84
+ /** `needs_first_factor`: the emailed code. */
85
+ submitEmailCode(code: string): Promise<FlowSnapshot>;
86
+ /** Sign in with a passkey (starts at `needs_identifier`; needs no identifier). */
87
+ signInWithPasskey(): Promise<FlowSnapshot>;
88
+ /** `needs_second_factor`: a code for `strategy` (default: authenticator app). */
89
+ submitSecondFactor(code: string, strategy?: (typeof SECOND_FACTOR_STRATEGIES)[number], options?: {
90
+ rememberDevice?: boolean;
91
+ }): Promise<FlowSnapshot>;
92
+ /** `needs_second_factor`: send a text or emailed code, then `submitSecondFactor(code, 'sms' | 'email_code')`. */
93
+ sendSecondFactorCode(strategy: 'sms' | 'email_code'): Promise<FlowSnapshot>;
94
+ }
95
+ export declare function createSignInFlow(opts: FlowOptions): SignInFlow;
96
+ export interface SignUpInput {
97
+ email: string;
98
+ password: string;
99
+ /** The extra fields the instance collects (name, company, …). */
100
+ fields?: Record<string, string>;
101
+ username?: string;
102
+ /** The legal-consent tick, when the instance requires it. */
103
+ consent?: boolean;
104
+ unsafeMetadata?: Record<string, unknown>;
105
+ policyAcceptances?: PolicyAcceptance[];
106
+ }
107
+ export interface SignUpFlow extends Core {
108
+ /** `needs_identifier`: create the account. */
109
+ submit(input: SignUpInput): Promise<FlowSnapshot>;
110
+ /** `needs_email_verification`: the emailed code. */
111
+ submitEmailCode(code: string): Promise<FlowSnapshot>;
112
+ /** `needs_email_verification`: send the code again. */
113
+ resendEmailCode(): Promise<FlowSnapshot>;
114
+ }
115
+ export declare function createSignUpFlow(opts: FlowOptions): SignUpFlow;
116
+ export {};
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SECOND_FACTOR_STRATEGIES = void 0;
4
+ exports.createSignInFlow = createSignInFlow;
5
+ exports.createSignUpFlow = createSignUpFlow;
6
+ /**
7
+ * Headless sign-in and sign-up: one typed step at a time, no UI.
8
+ *
9
+ * `createSignInFlow()` / `createSignUpFlow()` wrap the same requests the
10
+ * prebuilt components send. You render whatever the current `step` asks for and
11
+ * call the matching method; the flow never decides the next step itself, the
12
+ * server does. Captcha is handled for you: when the server asks for one the step
13
+ * is `needs_captcha`, and `solveCaptcha(container)` draws the widget for the
14
+ * right flow and submits its token.
15
+ *
16
+ * Errors carry a stable `reason` (`form_password_incorrect`, `captcha_wrong_flow`,
17
+ * …). Turn it into a sentence in the app's language with `reasonMessage`.
18
+ */
19
+ const attempt_1 = require("./attempt");
20
+ const instance_settings_1 = require("./instance-settings");
21
+ const policies_1 = require("./policies");
22
+ const passkey_sign_in_1 = require("./passkey-sign-in");
23
+ const redirect_1 = require("./redirect");
24
+ const captcha_widget_1 = require("./captcha-widget");
25
+ const fapi_1 = require("./fapi");
26
+ /** Second-factor strategies the server accepts. Not narrowed per account: that would reveal what the account has. */
27
+ exports.SECOND_FACTOR_STRATEGIES = ['totp', 'backup_code', 'sms', 'email_code'];
28
+ const CAPTCHA_CODES = ['CAPTCHA_REQUIRED', 'CAPTCHA_FAILED'];
29
+ function makeCore(opts, captchaFlow) {
30
+ const { client } = opts;
31
+ let flow = fapi_1.initialFlow;
32
+ let step = { type: 'needs_identifier' };
33
+ let busy = false;
34
+ let errors = [];
35
+ let reason = null;
36
+ let captchaToken = null;
37
+ let captchaSettings;
38
+ let redirect = null;
39
+ const listeners = new Set();
40
+ const snapshot = () => ({ step, errors, reason, busy });
41
+ const emit = () => {
42
+ const s = snapshot();
43
+ for (const l of listeners)
44
+ l(s);
45
+ return s;
46
+ };
47
+ const loadCaptcha = async () => {
48
+ if (captchaSettings === undefined) {
49
+ const settings = await (0, instance_settings_1.fetchInstanceSettings)(client);
50
+ captchaSettings = settings?.captchaFlows[captchaFlow] ?? null;
51
+ }
52
+ return captchaSettings;
53
+ };
54
+ const stepFor = async (attempt) => {
55
+ if (redirect)
56
+ return { type: 'redirect', url: redirect };
57
+ if (!attempt)
58
+ return { type: 'needs_identifier' };
59
+ const next = (0, attempt_1.nextStep)(attempt);
60
+ switch (next.kind) {
61
+ case 'collect_identifier':
62
+ case 'restart':
63
+ return { type: 'needs_identifier' };
64
+ case 'collect_captcha':
65
+ return { type: 'needs_captcha', flow: captchaFlow, captcha: await loadCaptcha() };
66
+ case 'collect_first_factor':
67
+ return { type: 'needs_first_factor', factors: next.strategies };
68
+ case 'collect_second_factor':
69
+ return { type: 'needs_second_factor', factors: [...exports.SECOND_FACTOR_STRATEGIES] };
70
+ case 'accept_policies':
71
+ return { type: 'needs_policy_acceptance', policies: next.policies };
72
+ case 'collect_email_code':
73
+ return { type: 'needs_email_verification' };
74
+ case 'done':
75
+ return { type: 'complete', sessionId: next.sessionId };
76
+ case 'await_oauth':
77
+ case 'enroll_second_factor':
78
+ case 'collect_new_password':
79
+ case 'complete_required_action':
80
+ case 'unknown':
81
+ return { type: 'needs_other', status: attempt.status };
82
+ }
83
+ };
84
+ /** Run one call, fold its resulting FlowState in, exchange a completion ticket, and publish. */
85
+ const run = async (call) => {
86
+ busy = true;
87
+ emit();
88
+ let next = await call();
89
+ if (next.ticket && next.attempt?.id) {
90
+ const exchanged = await client.post('/v1/client/tickets/exchange', { attempt_id: next.attempt.id, ticket: next.ticket });
91
+ next = exchanged.ok ? { ...next, ticket: null } : { ...next, errors: exchanged.errors };
92
+ }
93
+ flow = next;
94
+ errors = next.errors;
95
+ reason = errors[0]?.reason ?? next.attempt?.reason ?? null;
96
+ busy = false;
97
+ step = await stepFor(next.attempt);
98
+ return emit();
99
+ };
100
+ /** A captcha error on a call that has no attempt yet becomes the captcha step. */
101
+ const captchaStepFromErrors = async () => {
102
+ if (!errors.some((e) => CAPTCHA_CODES.includes(e.code)))
103
+ return false;
104
+ step = { type: 'needs_captcha', flow: captchaFlow, captcha: await loadCaptcha() };
105
+ emit();
106
+ return true;
107
+ };
108
+ return {
109
+ get flow() { return flow; },
110
+ get captchaToken() { return captchaToken; },
111
+ takeCaptchaToken() { const t = captchaToken; captchaToken = null; return t; },
112
+ setCaptchaToken(t) { captchaToken = t; },
113
+ get errors() { return errors; },
114
+ run,
115
+ captchaStepFromErrors,
116
+ setRedirect(url) { redirect = url; },
117
+ api(extra) {
118
+ return {
119
+ getSnapshot: snapshot,
120
+ subscribe(l) { listeners.add(l); return () => void listeners.delete(l); },
121
+ submitCaptcha: extra.submitCaptcha,
122
+ async solveCaptcha(container) {
123
+ const settings = await loadCaptcha();
124
+ if (!settings) {
125
+ errors = [{ code: 'CAPTCHA_UNAVAILABLE', reason: 'captcha_unavailable', message: 'No captcha is configured for this flow.' }];
126
+ reason = 'captcha_unavailable';
127
+ return emit();
128
+ }
129
+ try {
130
+ return await extra.submitCaptcha(await (0, captcha_widget_1.renderCaptchaWidget)(settings, container).token);
131
+ }
132
+ catch {
133
+ errors = [{ code: 'CAPTCHA_FAILED', reason: 'captcha_failed', message: 'The security check did not complete.' }];
134
+ reason = 'captcha_failed';
135
+ return emit();
136
+ }
137
+ },
138
+ async startOAuth(provider, redirectUrl) {
139
+ const started = await (0, redirect_1.startOauthRedirect)(client, { provider, redirectUrl });
140
+ if (!started) {
141
+ errors = [{ code: 'OAUTH_START_FAILED', reason: 'oauth_start_failed', message: 'Could not start the social sign-in.' }];
142
+ reason = 'oauth_start_failed';
143
+ return emit();
144
+ }
145
+ redirect = started.authorizationUrl;
146
+ step = { type: 'redirect', url: started.authorizationUrl };
147
+ errors = [];
148
+ reason = null;
149
+ return emit();
150
+ },
151
+ acceptPolicies: (acceptances) => run(() => (0, policies_1.acceptAttemptPolicies)(client, flow, acceptances)),
152
+ reset() {
153
+ flow = fapi_1.initialFlow;
154
+ step = { type: 'needs_identifier' };
155
+ errors = [];
156
+ reason = null;
157
+ captchaToken = null;
158
+ redirect = null;
159
+ return emit();
160
+ },
161
+ };
162
+ },
163
+ };
164
+ }
165
+ function createSignInFlow(opts) {
166
+ const core = makeCore(opts, 'signIn');
167
+ const { client } = opts;
168
+ let identifier = '';
169
+ const attemptId = () => core.flow.attempt?.id ?? '';
170
+ const start = (id) => {
171
+ identifier = id;
172
+ return core.run(() => (0, fapi_1.advance)(client, { ...fapi_1.initialFlow }, { identifier: id, ...(core.captchaToken ? { captcha_token: core.takeCaptchaToken() } : {}) }));
173
+ };
174
+ // A captcha asked for by the passkey button is answered by trying the passkey again, not by an identifier.
175
+ let viaPasskey = false;
176
+ const passkey = async () => {
177
+ viaPasskey = true;
178
+ const snap = await core.run(() => (0, passkey_sign_in_1.signInWithPasskey)(client, { captcha: core.captchaToken ? async () => core.takeCaptchaToken() : null }));
179
+ viaPasskey = await core.captchaStepFromErrors();
180
+ return viaPasskey ? api.getSnapshot() : snap;
181
+ };
182
+ const submitCaptcha = async (token) => {
183
+ core.setCaptchaToken(token);
184
+ return viaPasskey ? passkey() : start(core.flow.attempt?.identifier ?? identifier);
185
+ };
186
+ const api = core.api({ submitCaptcha });
187
+ return {
188
+ ...api,
189
+ submitIdentifier: (id) => {
190
+ viaPasskey = false;
191
+ return start(id);
192
+ },
193
+ submitPassword: (password) => core.run(() => (0, fapi_1.advance)(client, core.flow, { password })),
194
+ sendEmailCode: () => core.run(() => (0, fapi_1.prepareFactor)(client, core.flow, 'email_code')),
195
+ submitEmailCode: (code) => core.run(() => (0, fapi_1.advance)(client, core.flow, { code })),
196
+ signInWithPasskey: passkey,
197
+ submitSecondFactor: (code, strategy = 'totp', options = {}) => core.run(() => (0, fapi_1.advance)(client, core.flow, {
198
+ code,
199
+ ...(strategy === 'email_code' ? { strategy } : {}),
200
+ ...(options.rememberDevice ? { remember_device: 'true' } : {}),
201
+ })),
202
+ async sendSecondFactorCode(strategy) {
203
+ const res = await client.post(`/v1/client/sign_ins/${encodeURIComponent(attemptId())}/prepare_second_factor`, { strategy });
204
+ return core.run(async () => ({ ...core.flow, errors: res.ok ? [] : res.errors }));
205
+ },
206
+ };
207
+ }
208
+ function createSignUpFlow(opts) {
209
+ const core = makeCore(opts, 'signUp');
210
+ const { client } = opts;
211
+ let last = null;
212
+ const submit = async (input) => {
213
+ last = input;
214
+ const token = core.takeCaptchaToken();
215
+ const snap = await core.run(() => (0, fapi_1.startSignUp)(client, { ...input, ...(token ? { captchaToken: token } : {}) }));
216
+ if (!(await core.captchaStepFromErrors()))
217
+ return snap;
218
+ return api.getSnapshot();
219
+ };
220
+ const submitCaptcha = async (token) => {
221
+ core.setCaptchaToken(token);
222
+ return last ? submit(last) : api.getSnapshot();
223
+ };
224
+ const api = core.api({ submitCaptcha });
225
+ return {
226
+ ...api,
227
+ submit,
228
+ submitEmailCode: (code) => core.run(() => (0, fapi_1.advance)(client, core.flow, { code })),
229
+ resendEmailCode: () => core.run(() => (0, fapi_1.resendSignUpVerification)(client, core.flow)),
230
+ };
231
+ }
232
+ //# sourceMappingURL=sign-in-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-in-flow.js","sourceRoot":"","sources":["../src/sign-in-flow.ts"],"names":[],"mappings":"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"}
package/dist/step-up.d.ts CHANGED
@@ -13,6 +13,7 @@
13
13
  * email_code POST /v1/client/me/step_up/email_code, then { strategy: 'email_code', code }
14
14
  * passkey POST /v1/client/me/step_up/passkey (challenge), then the assertion
15
15
  */
16
+ import type { FieldError } from './attempt';
16
17
  import type { FapiClient, FapiResponse } from './fapi';
17
18
  export type StepUpInput = {
18
19
  strategy: 'password';
@@ -50,3 +51,48 @@ export declare function sendStepUpEmailCode(client: FapiClient): Promise<FapiRes
50
51
  export declare function authenticatedWithin(claims: {
51
52
  auth_time?: unknown;
52
53
  }, maxAgeSeconds: number, nowMs?: number): boolean;
54
+ /** What a STEP_UP_REQUIRED refusal asks for, read off the refusal alone. */
55
+ export interface StepUpRequirement {
56
+ /** The action that was refused (`email_change`, `api_key_create`, …), when the server named it. */
57
+ action: string | null;
58
+ /** The factor strategies `stepUp()` accepts for it, e.g. `password`, `passkey`, `totp`. */
59
+ acceptedFactors: string[];
60
+ /** How recent the proof must be, in seconds; null when any multi-factor sign-in on the session counts. */
61
+ maxAgeSeconds: number | null;
62
+ }
63
+ /** The step-up a refusal asks for, or null when `errors` holds no STEP_UP_REQUIRED. */
64
+ export declare function stepUpRequirement(errors: readonly FieldError[]): StepUpRequirement | null;
65
+ /** What your prompt is asked to collect. */
66
+ export interface StepUpPrompt extends StepUpRequirement {
67
+ /** The previous credential was wrong: show this error and ask again. */
68
+ error: FieldError | null;
69
+ /** Email the step-up code (for the `email_code` factor). */
70
+ sendEmailCode(): Promise<FapiResponse<unknown>>;
71
+ }
72
+ /** Thrown by {@link requireStepUp} when the prompt gives up (returns null). */
73
+ export declare class StepUpCancelledError extends Error {
74
+ readonly code = "STEP_UP_CANCELLED";
75
+ constructor();
76
+ }
77
+ export interface RequireStepUpOptions {
78
+ client: FapiClient;
79
+ /** Ask the person for a credential; return null to cancel. */
80
+ prompt: (request: StepUpPrompt) => Promise<StepUpInput | null> | StepUpInput | null;
81
+ /** The refusal that triggered this, so the prompt knows the factors and window. */
82
+ requirement?: StepUpRequirement;
83
+ /** Wrong credentials allowed before the last error is thrown. Default 3. */
84
+ maxAttempts?: number;
85
+ }
86
+ /**
87
+ * Re-authenticate for `action`: ask `prompt` for a credential, send it to
88
+ * `POST /v1/client/me/step_up`, and resolve once the server accepts it. A wrong
89
+ * credential asks again (up to `maxAttempts`). Throws {@link StepUpCancelledError}
90
+ * when the prompt returns null.
91
+ */
92
+ export declare function requireStepUp(action: string, opts: RequireStepUpOptions): Promise<StepUpResult>;
93
+ /**
94
+ * Run `call`; if the server refuses it with STEP_UP_REQUIRED, re-authenticate
95
+ * with {@link requireStepUp} (using the refusal's own factors and window) and
96
+ * run it once more. Any other outcome is returned as is.
97
+ */
98
+ export declare function retryWithStepUp<T>(call: () => Promise<FapiResponse<T>>, opts: Omit<RequireStepUpOptions, 'requirement'>): Promise<FapiResponse<T>>;
package/dist/step-up.js CHANGED
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StepUpCancelledError = void 0;
3
4
  exports.stepUp = stepUp;
4
5
  exports.sendStepUpEmailCode = sendStepUpEmailCode;
5
6
  exports.authenticatedWithin = authenticatedWithin;
7
+ exports.stepUpRequirement = stepUpRequirement;
8
+ exports.requireStepUp = requireStepUp;
9
+ exports.retryWithStepUp = retryWithStepUp;
6
10
  /** Prove a credential of the current session again. A wrong credential is a 401. */
7
11
  function stepUp(client, input) {
8
12
  return client.post('/v1/client/me/step_up', input);
@@ -21,4 +25,60 @@ function authenticatedWithin(claims, maxAgeSeconds, nowMs = Date.now()) {
21
25
  return false;
22
26
  return nowMs / 1000 - at <= maxAgeSeconds;
23
27
  }
28
+ const DEFAULT_FACTORS = ['password', 'passkey', 'totp', 'backup_code', 'email_code'];
29
+ /** The step-up a refusal asks for, or null when `errors` holds no STEP_UP_REQUIRED. */
30
+ function stepUpRequirement(errors) {
31
+ const error = errors.find((e) => e.code === 'STEP_UP_REQUIRED');
32
+ if (!error)
33
+ return null;
34
+ const meta = error.meta ?? {};
35
+ const factors = Array.isArray(meta.accepted_factors) ? meta.accepted_factors.filter((f) => typeof f === 'string') : [];
36
+ return {
37
+ action: typeof meta.action === 'string' ? meta.action : null,
38
+ acceptedFactors: factors.length ? factors : [...DEFAULT_FACTORS],
39
+ maxAgeSeconds: typeof meta.max_age_seconds === 'number' ? meta.max_age_seconds : null,
40
+ };
41
+ }
42
+ /** Thrown by {@link requireStepUp} when the prompt gives up (returns null). */
43
+ class StepUpCancelledError extends Error {
44
+ code = 'STEP_UP_CANCELLED';
45
+ constructor() {
46
+ super('The re-authentication was cancelled.');
47
+ this.name = 'StepUpCancelledError';
48
+ }
49
+ }
50
+ exports.StepUpCancelledError = StepUpCancelledError;
51
+ /**
52
+ * Re-authenticate for `action`: ask `prompt` for a credential, send it to
53
+ * `POST /v1/client/me/step_up`, and resolve once the server accepts it. A wrong
54
+ * credential asks again (up to `maxAttempts`). Throws {@link StepUpCancelledError}
55
+ * when the prompt returns null.
56
+ */
57
+ async function requireStepUp(action, opts) {
58
+ const base = opts.requirement ?? { action, acceptedFactors: [...DEFAULT_FACTORS], maxAgeSeconds: null };
59
+ let error = null;
60
+ for (let attempt = 0; attempt < (opts.maxAttempts ?? 3); attempt++) {
61
+ const input = await opts.prompt({ ...base, action: base.action ?? action, error, sendEmailCode: () => sendStepUpEmailCode(opts.client) });
62
+ if (!input)
63
+ throw new StepUpCancelledError();
64
+ const res = await stepUp(opts.client, input);
65
+ if (res.ok && res.data)
66
+ return res.data;
67
+ error = res.errors[0] ?? { code: 'UNAUTHENTICATED', message: 'Re-authentication failed.' };
68
+ }
69
+ throw Object.assign(new Error(error?.message ?? 'Re-authentication failed.'), { code: error?.code, reason: error?.reason });
70
+ }
71
+ /**
72
+ * Run `call`; if the server refuses it with STEP_UP_REQUIRED, re-authenticate
73
+ * with {@link requireStepUp} (using the refusal's own factors and window) and
74
+ * run it once more. Any other outcome is returned as is.
75
+ */
76
+ async function retryWithStepUp(call, opts) {
77
+ const first = await call();
78
+ const requirement = first.ok ? null : stepUpRequirement(first.errors);
79
+ if (!requirement)
80
+ return first;
81
+ await requireStepUp(requirement.action ?? 'sensitive_action', { ...opts, requirement });
82
+ return call();
83
+ }
24
84
  //# sourceMappingURL=step-up.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-up.js","sourceRoot":"","sources":["../src/step-up.ts"],"names":[],"mappings":";;AA0CA,wBAEC;AAGD,kDAEC;AAMD,kDAIC;AAlBD,oFAAoF;AACpF,SAAgB,MAAM,CAAC,MAAkB,EAAE,KAAkB;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAe,uBAAuB,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,qHAAqH;AACrH,SAAgB,mBAAmB,CAAC,MAAkB;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAA+B,EAAE,aAAqB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IACpH,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,aAAa,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"step-up.js","sourceRoot":"","sources":["../src/step-up.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -4,4 +4,4 @@
4
4
  * package.json at runtime) so the bundle stays dependency-free and tests stay
5
5
  * deterministic; `version.test.ts` fails when it drifts from package.json.
6
6
  */
7
- export declare const ATLAS_JS_VERSION = "0.37.0";
7
+ export declare const ATLAS_JS_VERSION = "0.38.0";
package/dist/version.js CHANGED
@@ -7,5 +7,5 @@ exports.ATLAS_JS_VERSION = void 0;
7
7
  * package.json at runtime) so the bundle stays dependency-free and tests stay
8
8
  * deterministic; `version.test.ts` fails when it drifts from package.json.
9
9
  */
10
- exports.ATLAS_JS_VERSION = '0.37.0';
10
+ exports.ATLAS_JS_VERSION = '0.38.0';
11
11
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasauth/js",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {