@atlasauth/backend 0.5.0 → 0.7.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.
Files changed (119) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +227 -0
  3. package/dist/client/activity.d.ts +104 -0
  4. package/dist/client/activity.js +29 -0
  5. package/dist/client/activity.js.map +1 -0
  6. package/dist/client/api-keys.d.ts +100 -0
  7. package/dist/client/api-keys.js +15 -0
  8. package/dist/client/api-keys.js.map +1 -1
  9. package/dist/client/audit-events.d.ts +103 -0
  10. package/dist/client/audit-events.js +43 -0
  11. package/dist/client/audit-events.js.map +1 -0
  12. package/dist/client/billing-plans.d.ts +43 -0
  13. package/dist/client/billing-plans.js +26 -0
  14. package/dist/client/billing-plans.js.map +1 -1
  15. package/dist/client/connectors.d.ts +174 -0
  16. package/dist/client/connectors.js +54 -0
  17. package/dist/client/connectors.js.map +1 -0
  18. package/dist/client/data-subject-requests.d.ts +21 -0
  19. package/dist/client/data-subject-requests.js +15 -0
  20. package/dist/client/data-subject-requests.js.map +1 -1
  21. package/dist/client/design.d.ts +295 -0
  22. package/dist/client/design.js +76 -0
  23. package/dist/client/design.js.map +1 -0
  24. package/dist/client/diagnostics.d.ts +53 -0
  25. package/dist/client/diagnostics.js +24 -0
  26. package/dist/client/diagnostics.js.map +1 -0
  27. package/dist/client/email-addresses.d.ts +22 -0
  28. package/dist/client/email-addresses.js +17 -0
  29. package/dist/client/email-addresses.js.map +1 -0
  30. package/dist/client/entitlement-overrides.d.ts +50 -0
  31. package/dist/client/entitlement-overrides.js +20 -0
  32. package/dist/client/entitlement-overrides.js.map +1 -0
  33. package/dist/client/error.d.ts +34 -0
  34. package/dist/client/error.js +33 -1
  35. package/dist/client/error.js.map +1 -1
  36. package/dist/client/import-export.d.ts +2 -0
  37. package/dist/client/import-export.js.map +1 -1
  38. package/dist/client/index.d.ts +461 -16
  39. package/dist/client/index.js +76 -2
  40. package/dist/client/index.js.map +1 -1
  41. package/dist/client/instance.d.ts +54 -0
  42. package/dist/client/instance.js +18 -0
  43. package/dist/client/instance.js.map +1 -1
  44. package/dist/client/invitations.d.ts +14 -0
  45. package/dist/client/invitations.js +9 -0
  46. package/dist/client/invitations.js.map +1 -1
  47. package/dist/client/legacy-auth.d.ts +45 -0
  48. package/dist/client/legacy-auth.js +18 -0
  49. package/dist/client/legacy-auth.js.map +1 -0
  50. package/dist/client/mcp.d.ts +86 -0
  51. package/dist/client/mcp.js +47 -0
  52. package/dist/client/mcp.js.map +1 -0
  53. package/dist/client/notifications.d.ts +92 -0
  54. package/dist/client/notifications.js +55 -0
  55. package/dist/client/notifications.js.map +1 -0
  56. package/dist/client/oauth-clients.d.ts +46 -2
  57. package/dist/client/oauth-clients.js +4 -0
  58. package/dist/client/oauth-clients.js.map +1 -1
  59. package/dist/client/oauth-providers.d.ts +67 -7
  60. package/dist/client/oauth-providers.js +7 -2
  61. package/dist/client/oauth-providers.js.map +1 -1
  62. package/dist/client/openfga.d.ts +137 -0
  63. package/dist/client/openfga.js +72 -0
  64. package/dist/client/openfga.js.map +1 -0
  65. package/dist/client/org-ldap-connections.d.ts +75 -0
  66. package/dist/client/org-ldap-connections.js +36 -0
  67. package/dist/client/org-ldap-connections.js.map +1 -0
  68. package/dist/client/organization-settings-schema.d.ts +24 -0
  69. package/dist/client/organization-settings-schema.js +30 -0
  70. package/dist/client/organization-settings-schema.js.map +1 -0
  71. package/dist/client/organizations.d.ts +205 -4
  72. package/dist/client/organizations.js +109 -0
  73. package/dist/client/organizations.js.map +1 -1
  74. package/dist/client/pca.d.ts +59 -0
  75. package/dist/client/pca.js +40 -0
  76. package/dist/client/pca.js.map +1 -0
  77. package/dist/client/platform.d.ts +328 -0
  78. package/dist/client/platform.js +187 -0
  79. package/dist/client/platform.js.map +1 -0
  80. package/dist/client/redirect-urls.d.ts +23 -0
  81. package/dist/client/redirect-urls.js +22 -0
  82. package/dist/client/redirect-urls.js.map +1 -0
  83. package/dist/client/request.d.ts +45 -0
  84. package/dist/client/request.js +35 -2
  85. package/dist/client/request.js.map +1 -1
  86. package/dist/client/session-exchange-apps.d.ts +43 -0
  87. package/dist/client/session-exchange-apps.js +25 -0
  88. package/dist/client/session-exchange-apps.js.map +1 -0
  89. package/dist/client/sessions.d.ts +28 -0
  90. package/dist/client/sessions.js +20 -0
  91. package/dist/client/sessions.js.map +1 -1
  92. package/dist/client/sign-in-tokens.d.ts +13 -1
  93. package/dist/client/sign-in-tokens.js +11 -0
  94. package/dist/client/sign-in-tokens.js.map +1 -1
  95. package/dist/client/test-mode.d.ts +44 -0
  96. package/dist/client/test-mode.js +26 -0
  97. package/dist/client/test-mode.js.map +1 -0
  98. package/dist/client/tickets.d.ts +49 -0
  99. package/dist/client/tickets.js +19 -0
  100. package/dist/client/tickets.js.map +1 -0
  101. package/dist/client/users.d.ts +351 -0
  102. package/dist/client/users.js +228 -0
  103. package/dist/client/users.js.map +1 -1
  104. package/dist/client/waitlist.d.ts +21 -0
  105. package/dist/client/waitlist.js +16 -0
  106. package/dist/client/waitlist.js.map +1 -1
  107. package/dist/client/webhooks.d.ts +60 -6
  108. package/dist/client/webhooks.js +36 -2
  109. package/dist/client/webhooks.js.map +1 -1
  110. package/dist/index.d.ts +2 -0
  111. package/dist/index.js +9 -1
  112. package/dist/index.js.map +1 -1
  113. package/dist/logout-token.d.ts +97 -0
  114. package/dist/logout-token.js +182 -0
  115. package/dist/logout-token.js.map +1 -0
  116. package/dist/verify.d.ts +7 -0
  117. package/dist/verify.js +13 -0
  118. package/dist/verify.js.map +1 -1
  119. package/package.json +3 -2
@@ -4,6 +4,7 @@ exports.DEFAULT_API_URL = void 0;
4
4
  exports.serializeQuery = serializeQuery;
5
5
  exports.enc = enc;
6
6
  exports.createRequest = createRequest;
7
+ exports.createKeyedRequest = createKeyedRequest;
7
8
  const error_1 = require("./error");
8
9
  /** The default BAPI origin, overridable per instance via `apiUrl`. */
9
10
  exports.DEFAULT_API_URL = 'https://api.atlasauth.net';
@@ -35,6 +36,13 @@ function createRequest(config) {
35
36
  if (!config.secretKey) {
36
37
  throw new Error('createAtlasClient requires a secretKey.');
37
38
  }
39
+ return createKeyedRequest(config.secretKey, config);
40
+ }
41
+ /**
42
+ * The request core for any bearer key: the secret key (`sk_...`) of the
43
+ * management client or the platform key (`psk_...`) of the platform client.
44
+ */
45
+ function createKeyedRequest(key, config) {
38
46
  const base = config.apiUrl ?? exports.DEFAULT_API_URL;
39
47
  const fetchImpl = config.fetch ?? globalThis.fetch;
40
48
  if (typeof fetchImpl !== 'function') {
@@ -43,21 +51,46 @@ function createRequest(config) {
43
51
  return async function request(options) {
44
52
  const url = joinUrl(base, options.path) + serializeQuery(options.query);
45
53
  const headers = {
46
- authorization: `Bearer ${config.secretKey}`,
54
+ authorization: `Bearer ${key}`,
47
55
  accept: 'application/json',
48
56
  };
49
57
  let body;
50
- if (options.body !== undefined) {
58
+ if (options.rawBody !== undefined) {
59
+ const { data, contentType } = options.rawBody;
60
+ const type = contentType ?? (typeof Blob !== 'undefined' && data instanceof Blob ? data.type : '');
61
+ if (!type) {
62
+ throw new Error('A raw upload needs a contentType (for example image/png).');
63
+ }
64
+ headers['content-type'] = type;
65
+ body = data;
66
+ }
67
+ else if (options.body !== undefined) {
51
68
  headers['content-type'] = 'application/json';
52
69
  body = JSON.stringify(options.body);
53
70
  }
54
71
  if (options.idempotencyKey) {
55
72
  headers['idempotency-key'] = options.idempotencyKey;
56
73
  }
74
+ const strict = options.strict ?? config.strict;
75
+ if (strict !== undefined && options.method !== 'GET') {
76
+ headers['atlas-strict'] = strict ? 'true' : 'false';
77
+ }
57
78
  const response = await fetchImpl(url, { method: options.method, headers, body });
58
79
  if (!response.ok) {
59
80
  throw await toApiError(response);
60
81
  }
82
+ if (config.onUnknownFields) {
83
+ const ignored = response.headers?.get?.('atlas-unknown-fields');
84
+ if (ignored) {
85
+ const fields = ignored
86
+ .split(',')
87
+ .map((f) => f.trim())
88
+ .filter(Boolean);
89
+ if (fields.length) {
90
+ config.onUnknownFields({ method: options.method, path: options.path, fields });
91
+ }
92
+ }
93
+ }
61
94
  // 204 and other empty bodies: nothing to parse.
62
95
  if (response.status === 204)
63
96
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/client/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/client/request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type RequestFn } from './request';
2
+ import type { ListPage } from './types';
3
+ /**
4
+ * A downstream app that exchanges an Atlas session for its own. When the Atlas
5
+ * session ends, Atlas POSTs a signed `logout_token` to `backchannel_logout_uri`
6
+ * (verify it with `verifyLogoutToken`).
7
+ */
8
+ export interface SessionExchangeApp {
9
+ object: 'session_exchange_app';
10
+ id: string;
11
+ name: string;
12
+ backchannel_logout_uri: string;
13
+ /** The `aud` claim the logout_token carries. */
14
+ audience: string;
15
+ created_at: number;
16
+ updated_at: number;
17
+ }
18
+ export interface CreateSessionExchangeAppBody {
19
+ name: string;
20
+ /** Public https endpoint that receives `logout_token=<jwt>` (form-encoded). */
21
+ backchannel_logout_uri: string;
22
+ /** Override for the logout_token `aud`. Defaults to the app id. */
23
+ audience?: string | null;
24
+ }
25
+ export interface UpdateSessionExchangeAppBody {
26
+ name?: string;
27
+ backchannel_logout_uri?: string;
28
+ audience?: string | null;
29
+ }
30
+ export declare function sessionExchangeAppsResource(request: RequestFn): {
31
+ list(): Promise<ListPage<SessionExchangeApp> & {
32
+ next_cursor?: string | null;
33
+ }>;
34
+ create(body: CreateSessionExchangeAppBody, idempotencyKey?: string): Promise<SessionExchangeApp>;
35
+ get(id: string): Promise<SessionExchangeApp>;
36
+ update(id: string, body: UpdateSessionExchangeAppBody): Promise<SessionExchangeApp>;
37
+ /** Queued back-channel logout deliveries are deleted with it. */
38
+ delete(id: string): Promise<{
39
+ object: "session_exchange_app";
40
+ id: string;
41
+ deleted: true;
42
+ }>;
43
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sessionExchangeAppsResource = sessionExchangeAppsResource;
4
+ const request_1 = require("./request");
5
+ function sessionExchangeAppsResource(request) {
6
+ return {
7
+ list() {
8
+ return request({ method: 'GET', path: '/v1/session_exchange_apps' });
9
+ },
10
+ create(body, idempotencyKey) {
11
+ return request({ method: 'POST', path: '/v1/session_exchange_apps', body, idempotencyKey });
12
+ },
13
+ get(id) {
14
+ return request({ method: 'GET', path: `/v1/session_exchange_apps/${(0, request_1.enc)(id)}` });
15
+ },
16
+ update(id, body) {
17
+ return request({ method: 'PATCH', path: `/v1/session_exchange_apps/${(0, request_1.enc)(id)}`, body });
18
+ },
19
+ /** Queued back-channel logout deliveries are deleted with it. */
20
+ delete(id) {
21
+ return request({ method: 'DELETE', path: `/v1/session_exchange_apps/${(0, request_1.enc)(id)}` });
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=session-exchange-apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-exchange-apps.js","sourceRoot":"","sources":["../../src/client/session-exchange-apps.ts"],"names":[],"mappings":";;AAiCA,kEAmBC;AApDD,uCAAgD;AAiChD,SAAgB,2BAA2B,CAAC,OAAkB;IAC5D,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,CAAC,IAAkC,EAAE,cAAuB;YAChE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,6BAA6B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAkC;YACnD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,iEAAiE;QACjE,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -10,8 +10,16 @@ export interface Session {
10
10
  last_active_at: number;
11
11
  expire_at: number;
12
12
  abandon_at: number;
13
+ /** Epoch ms the session ends from inactivity unless there is activity first (same value as `abandon_at`). */
14
+ idle_expires_at?: number;
13
15
  created_at: number;
14
16
  }
17
+ /** The session after a keep-alive {@link sessionsResource} `touch`. */
18
+ export interface TouchedSession extends Session {
19
+ idle_expires_at: number;
20
+ /** true when this touch moved the inactivity window; false when one within the last 60 seconds already had. */
21
+ extended: boolean;
22
+ }
15
23
  export interface ListSessionsParams {
16
24
  /** Required by the BAPI: sessions are always scoped to one user. */
17
25
  user_id: string;
@@ -41,6 +49,13 @@ export interface MintedSession {
41
49
  sub: string;
42
50
  };
43
51
  }
52
+ /** A JWT minted from a named JWT template. */
53
+ export interface SessionTemplateToken {
54
+ object: string;
55
+ jwt: string;
56
+ /** Seconds until the token expires. */
57
+ expires_in: number;
58
+ }
44
59
  export declare function sessionsResource(request: RequestFn): {
45
60
  /**
46
61
  * `POST /v1/sessions` — mint a session for a user without the sign-in flow.
@@ -55,4 +70,17 @@ export declare function sessionsResource(request: RequestFn): {
55
70
  id: string;
56
71
  status: "revoked";
57
72
  }>;
73
+ /**
74
+ * `POST /v1/sessions/:id/touch` — keep a session alive from your backend:
75
+ * slides its inactivity window as if the user had just loaded a page. Never
76
+ * extends past the absolute expiry and never revives an ended session (409
77
+ * `SESSION_REVOKED` / `SESSION_IDLE_EXPIRED` / `SESSION_EXPIRED`). At most one
78
+ * effective write per minute, so calling it on every request is safe.
79
+ */
80
+ touch(id: string): Promise<TouchedSession>;
81
+ /**
82
+ * `POST /v1/sessions/:id/tokens/:template` — mint a token from a named JWT
83
+ * template for this session. The reserved name `session` is refused.
84
+ */
85
+ getToken(id: string, template: string): Promise<SessionTemplateToken>;
58
86
  };
@@ -21,6 +21,26 @@ function sessionsResource(request) {
21
21
  revoke(id) {
22
22
  return request({ method: 'POST', path: `/v1/sessions/${(0, request_1.enc)(id)}/revoke` });
23
23
  },
24
+ /**
25
+ * `POST /v1/sessions/:id/touch` — keep a session alive from your backend:
26
+ * slides its inactivity window as if the user had just loaded a page. Never
27
+ * extends past the absolute expiry and never revives an ended session (409
28
+ * `SESSION_REVOKED` / `SESSION_IDLE_EXPIRED` / `SESSION_EXPIRED`). At most one
29
+ * effective write per minute, so calling it on every request is safe.
30
+ */
31
+ touch(id) {
32
+ return request({ method: 'POST', path: `/v1/sessions/${(0, request_1.enc)(id)}/touch` });
33
+ },
34
+ /**
35
+ * `POST /v1/sessions/:id/tokens/:template` — mint a token from a named JWT
36
+ * template for this session. The reserved name `session` is refused.
37
+ */
38
+ getToken(id, template) {
39
+ return request({
40
+ method: 'POST',
41
+ path: `/v1/sessions/${(0, request_1.enc)(id)}/tokens/${(0, request_1.enc)(template)}`,
42
+ });
43
+ },
24
44
  };
25
45
  }
26
46
  //# sourceMappingURL=sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/client/sessions.ts"],"names":[],"mappings":";;AA4CA,4CAoBC;AAhED,uCAAgD;AA4ChD,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,OAAO;QACL;;;WAGG;QACH,MAAM,CAAC,MAA2B;YAChC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,wDAAwD;QACxD,IAAI,CAAC,MAA0B;YAC7B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7E,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/client/sessions.ts"],"names":[],"mappings":";;AA6DA,4CAwCC;AArGD,uCAAgD;AA6DhD,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,OAAO;QACL;;;WAGG;QACH,MAAM,CAAC,MAA2B;YAChC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,wDAAwD;QACxD,IAAI,CAAC,MAA0B;YAC7B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD;;;;;;WAMG;QACH,KAAK,CAAC,EAAU;YACd,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD;;;WAGG;QACH,QAAQ,CAAC,EAAU,EAAE,QAAgB;YACnC,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,WAAW,IAAA,aAAG,EAAC,QAAQ,CAAC,EAAE;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { RequestFn } from './request';
1
+ import { type RequestFn } from './request';
2
2
  export interface SignInToken {
3
3
  object: 'sign_in_token';
4
4
  user_id: string;
@@ -15,4 +15,16 @@ export interface CreateSignInTokenBody {
15
15
  }
16
16
  export declare function signInTokensResource(request: RequestFn): {
17
17
  create(body: CreateSignInTokenBody, idempotencyKey?: string): Promise<SignInToken>;
18
+ /**
19
+ * `POST /v1/sign_in_tokens/:id/revoke` — revoke an unused sign-in token
20
+ * before its 60-second window elapses.
21
+ *
22
+ * @deprecated The sign-in token API is deprecated (sunset 2027-04-01).
23
+ * Mint a session directly with `sessions.create()` instead.
24
+ */
25
+ revoke(id: string): Promise<{
26
+ object: "sign_in_token";
27
+ id: string;
28
+ revoked: true;
29
+ }>;
18
30
  };
@@ -1,11 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.signInTokensResource = signInTokensResource;
4
+ const request_1 = require("./request");
4
5
  function signInTokensResource(request) {
5
6
  return {
6
7
  create(body, idempotencyKey) {
7
8
  return request({ method: 'POST', path: '/v1/sign_in_tokens', body, idempotencyKey });
8
9
  },
10
+ /**
11
+ * `POST /v1/sign_in_tokens/:id/revoke` — revoke an unused sign-in token
12
+ * before its 60-second window elapses.
13
+ *
14
+ * @deprecated The sign-in token API is deprecated (sunset 2027-04-01).
15
+ * Mint a session directly with `sessions.create()` instead.
16
+ */
17
+ revoke(id) {
18
+ return request({ method: 'POST', path: `/v1/sign_in_tokens/${(0, request_1.enc)(id)}/revoke` });
19
+ },
9
20
  };
10
21
  }
11
22
  //# sourceMappingURL=sign-in-tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sign-in-tokens.js","sourceRoot":"","sources":["../../src/client/sign-in-tokens.ts"],"names":[],"mappings":";;AAkBA,oDAMC;AAND,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,MAAM,CAAC,IAA2B,EAAE,cAAuB;YACzD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvF,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sign-in-tokens.js","sourceRoot":"","sources":["../../src/client/sign-in-tokens.ts"],"names":[],"mappings":";;AAkBA,oDAgBC;AAlCD,uCAAgD;AAkBhD,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,MAAM,CAAC,IAA2B,EAAE,cAAuB;YACzD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvF,CAAC;QACD;;;;;;WAMG;QACH,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { RequestFn } from './request';
2
+ /** The production instance's paired development (test-mode) sibling. */
3
+ export interface TestInstance {
4
+ object: 'test_instance';
5
+ instance_id: string;
6
+ environment: 'development';
7
+ publishable_key: string;
8
+ /** True when this call created the sibling. */
9
+ created: boolean;
10
+ /** The `sk_test_…` — returned ONLY on create or rotate. Store it now. */
11
+ secret_key?: string;
12
+ }
13
+ export interface TestUsersPurgeResult {
14
+ object: string;
15
+ purged: number;
16
+ /** Loop until this is false. */
17
+ has_more: boolean;
18
+ }
19
+ /** A short-lived token that lets `@atlasauth/testing` skip the sign-in CAPTCHA. */
20
+ export interface TestingToken {
21
+ object: 'testing_token';
22
+ jwt: string;
23
+ token_use: 'testing';
24
+ /** Lifetime in seconds. */
25
+ expires_in: number;
26
+ }
27
+ export declare function testModeResource(request: RequestFn): {
28
+ /**
29
+ * Get (creating on first call) the paired development instance. Call with
30
+ * the LIVE instance's secret key. `rotate_secret: true` mints a fresh `sk_test`.
31
+ */
32
+ testInstance(body?: {
33
+ rotate_secret?: boolean;
34
+ }): Promise<TestInstance>;
35
+ /**
36
+ * Soft-delete users whose email carries a reserved test marker
37
+ * (`+atlas_test`, `+clerk_test`). Development instances only.
38
+ */
39
+ purgeTestUsers(body?: {
40
+ limit?: number;
41
+ }): Promise<TestUsersPurgeResult>;
42
+ /** Mint a testing token. Development instances only (403 TESTING_UNAVAILABLE otherwise). */
43
+ createTestingToken(): Promise<TestingToken>;
44
+ };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testModeResource = testModeResource;
4
+ function testModeResource(request) {
5
+ return {
6
+ /**
7
+ * Get (creating on first call) the paired development instance. Call with
8
+ * the LIVE instance's secret key. `rotate_secret: true` mints a fresh `sk_test`.
9
+ */
10
+ testInstance(body = {}) {
11
+ return request({ method: 'POST', path: '/v1/test_instance', body });
12
+ },
13
+ /**
14
+ * Soft-delete users whose email carries a reserved test marker
15
+ * (`+atlas_test`, `+clerk_test`). Development instances only.
16
+ */
17
+ purgeTestUsers(body = {}) {
18
+ return request({ method: 'POST', path: '/v1/test_users/purge', body });
19
+ },
20
+ /** Mint a testing token. Development instances only (403 TESTING_UNAVAILABLE otherwise). */
21
+ createTestingToken() {
22
+ return request({ method: 'POST', path: '/v1/testing_tokens' });
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=test-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-mode.js","sourceRoot":"","sources":["../../src/client/test-mode.ts"],"names":[],"mappings":";;AA8BA,4CAqBC;AArBD,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,OAAO;QACL;;;WAGG;QACH,YAAY,CAAC,OAAoC,EAAE;YACjD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD;;;WAGG;QACH,cAAc,CAAC,OAA2B,EAAE;YAC1C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,4FAA4F;QAC5F,kBAAkB;YAChB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { RequestFn } from './request';
2
+ export interface CreateTicketBody {
3
+ /** Lifetime in seconds; must be positive, clamped to 86400 (24h). */
4
+ ttl_seconds: number;
5
+ /** Arbitrary JSON returned to whoever redeems the ticket. Defaults to `{}`. */
6
+ payload?: unknown;
7
+ /** Default true: the first successful redeem consumes it. */
8
+ single_use?: boolean;
9
+ /** Only a redeemer acting as this user may redeem. */
10
+ bound_user?: string;
11
+ /** Only a redeemer acting for this organization may redeem. */
12
+ bound_org?: string;
13
+ }
14
+ /** A minted capability ticket. `ticket` (the `tkt_…` secret) is returned only here. */
15
+ export interface CapabilityTicket {
16
+ object: 'ticket';
17
+ id: string;
18
+ ticket: string;
19
+ single_use: boolean;
20
+ bound_user: string | null;
21
+ bound_org: string | null;
22
+ created_at: number;
23
+ expires_at: number;
24
+ }
25
+ export interface RedeemTicketBody {
26
+ /** The `tkt_…` secret. */
27
+ ticket: string;
28
+ /** Who this redemption is on behalf of (matched against `bound_user`). */
29
+ for_user?: string;
30
+ /** The organization it is for (matched against `bound_org`). */
31
+ for_org?: string;
32
+ }
33
+ export interface TicketRedemption<P = unknown> {
34
+ object: 'ticket_redemption';
35
+ /** The redeemed ticket id. */
36
+ id: string;
37
+ /** The payload the ticket carried, verbatim. */
38
+ payload: P;
39
+ single_use: boolean;
40
+ }
41
+ export declare function ticketsResource(request: RequestFn): {
42
+ /** Mint a one-time capability ticket. */
43
+ create(body: CreateTicketBody, idempotencyKey?: string): Promise<CapabilityTicket>;
44
+ /**
45
+ * Redeem a ticket server-to-server. Unknown, expired or used tickets are a
46
+ * 404; a binding mismatch is a 403.
47
+ */
48
+ redeem<P = unknown>(body: RedeemTicketBody): Promise<TicketRedemption<P>>;
49
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ticketsResource = ticketsResource;
4
+ function ticketsResource(request) {
5
+ return {
6
+ /** Mint a one-time capability ticket. */
7
+ create(body, idempotencyKey) {
8
+ return request({ method: 'POST', path: '/v1/tickets', body, idempotencyKey });
9
+ },
10
+ /**
11
+ * Redeem a ticket server-to-server. Unknown, expired or used tickets are a
12
+ * 404; a binding mismatch is a 403.
13
+ */
14
+ redeem(body) {
15
+ return request({ method: 'POST', path: '/v1/tickets/redeem', body });
16
+ },
17
+ };
18
+ }
19
+ //# sourceMappingURL=tickets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../src/client/tickets.ts"],"names":[],"mappings":";;AA6CA,0CAcC;AAdD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,yCAAyC;QACzC,MAAM,CAAC,IAAsB,EAAE,cAAuB;YACpD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAChF,CAAC;QACD;;;WAGG;QACH,MAAM,CAAc,IAAsB;YACxC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;KACF,CAAC;AACJ,CAAC"}