@atlasauth/backend 0.18.0 → 0.19.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 (86) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/backchannel-handlers.d.ts +87 -0
  3. package/dist/backchannel-handlers.js +137 -0
  4. package/dist/backchannel-handlers.js.map +1 -0
  5. package/dist/client/activity.d.ts +13 -2
  6. package/dist/client/activity.js.map +1 -1
  7. package/dist/client/audit-logs.d.ts +7 -0
  8. package/dist/client/audit-logs.js.map +1 -1
  9. package/dist/client/compliance.d.ts +216 -0
  10. package/dist/client/compliance.js +77 -0
  11. package/dist/client/compliance.js.map +1 -0
  12. package/dist/client/credentials.d.ts +409 -0
  13. package/dist/client/credentials.js +158 -0
  14. package/dist/client/credentials.js.map +1 -0
  15. package/dist/client/data-subject-requests.d.ts +36 -1
  16. package/dist/client/data-subject-requests.js.map +1 -1
  17. package/dist/client/design.d.ts +48 -0
  18. package/dist/client/design.js +9 -0
  19. package/dist/client/design.js.map +1 -1
  20. package/dist/client/entitlement-overrides.d.ts +30 -0
  21. package/dist/client/entitlement-overrides.js +9 -0
  22. package/dist/client/entitlement-overrides.js.map +1 -1
  23. package/dist/client/env.d.ts +16 -0
  24. package/dist/client/env.js +38 -0
  25. package/dist/client/env.js.map +1 -0
  26. package/dist/client/error.d.ts +10 -0
  27. package/dist/client/error.js +4 -0
  28. package/dist/client/error.js.map +1 -1
  29. package/dist/client/index.d.ts +312 -7
  30. package/dist/client/index.js +39 -1
  31. package/dist/client/index.js.map +1 -1
  32. package/dist/client/instance.d.ts +401 -3
  33. package/dist/client/instance.js +77 -3
  34. package/dist/client/instance.js.map +1 -1
  35. package/dist/client/integrations.d.ts +107 -0
  36. package/dist/client/integrations.js +25 -0
  37. package/dist/client/integrations.js.map +1 -0
  38. package/dist/client/messaging.d.ts +18 -4
  39. package/dist/client/messaging.js +6 -2
  40. package/dist/client/messaging.js.map +1 -1
  41. package/dist/client/oauth-clients.d.ts +11 -3
  42. package/dist/client/oauth-clients.js +4 -2
  43. package/dist/client/oauth-clients.js.map +1 -1
  44. package/dist/client/operator.d.ts +100 -0
  45. package/dist/client/operator.js +132 -0
  46. package/dist/client/operator.js.map +1 -0
  47. package/dist/client/platform.d.ts +233 -9
  48. package/dist/client/platform.js +74 -6
  49. package/dist/client/platform.js.map +1 -1
  50. package/dist/client/privacy.d.ts +127 -0
  51. package/dist/client/privacy.js +44 -0
  52. package/dist/client/privacy.js.map +1 -0
  53. package/dist/client/referrals.d.ts +53 -6
  54. package/dist/client/referrals.js +9 -0
  55. package/dist/client/referrals.js.map +1 -1
  56. package/dist/client/request.d.ts +38 -1
  57. package/dist/client/request.js +6 -2
  58. package/dist/client/request.js.map +1 -1
  59. package/dist/client/sealed-box.d.ts +7 -0
  60. package/dist/client/sealed-box.js +62 -0
  61. package/dist/client/sealed-box.js.map +1 -0
  62. package/dist/client/sessions.d.ts +16 -5
  63. package/dist/client/sessions.js +7 -10
  64. package/dist/client/sessions.js.map +1 -1
  65. package/dist/client/status.d.ts +200 -0
  66. package/dist/client/status.js +54 -0
  67. package/dist/client/status.js.map +1 -0
  68. package/dist/client/webhooks.d.ts +244 -11
  69. package/dist/client/webhooks.js +52 -3
  70. package/dist/client/webhooks.js.map +1 -1
  71. package/dist/index.d.ts +8 -6
  72. package/dist/index.js +19 -4
  73. package/dist/index.js.map +1 -1
  74. package/dist/oidc.d.ts +65 -1
  75. package/dist/oidc.js +46 -0
  76. package/dist/oidc.js.map +1 -1
  77. package/dist/referral-test-calls.d.ts +26 -13
  78. package/dist/referral-test-calls.js +40 -14
  79. package/dist/referral-test-calls.js.map +1 -1
  80. package/dist/testing.d.ts +41 -6
  81. package/dist/testing.js +34 -2
  82. package/dist/testing.js.map +1 -1
  83. package/dist/webhooks.d.ts +8 -0
  84. package/dist/webhooks.js +13 -4
  85. package/dist/webhooks.js.map +1 -1
  86. package/package.json +6 -3
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.integrationsResource = integrationsResource;
4
+ const request_1 = require("./request");
5
+ function integrationsResource(request) {
6
+ return {
7
+ /** `POST /v1/integrations/verify_errors` — record a token an integrated service refused. */
8
+ reportVerifyError(body) {
9
+ return request({ method: 'POST', path: '/v1/integrations/verify_errors', body });
10
+ },
11
+ /** `GET /v1/integrations/:integration/card` — the agent-sidebar card for a user (by token sub). */
12
+ card(integration, query) {
13
+ return request({ method: 'GET', path: `/v1/integrations/${(0, request_1.enc)(integration)}/card`, query });
14
+ },
15
+ /** `POST /v1/integrations/:integration/card/actions/revoke_sessions` — sign the user out everywhere (audited with the agent). */
16
+ revokeSessions(integration, body) {
17
+ return request({ method: 'POST', path: `/v1/integrations/${(0, request_1.enc)(integration)}/card/actions/revoke_sessions`, body });
18
+ },
19
+ /** `GET /v1/public/instances/:id` — the public metadata of an instance (no key needed). */
20
+ instanceMetadata(instanceId) {
21
+ return request({ method: 'GET', path: `/v1/public/instances/${(0, request_1.enc)(instanceId)}` });
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/client/integrations.ts"],"names":[],"mappings":";;AAuEA,oDAsBC;AA7FD,uCAAgD;AAuEhD,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,4FAA4F;QAC5F,iBAAiB,CAAC,IAA2B;YAC3C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,mGAAmG;QACnG,IAAI,CAAC,WAAmB,EAAE,KAAoC;YAC5D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,IAAA,aAAG,EAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,iIAAiI;QACjI,cAAc,CACZ,WAAmB,EACnB,IAA2F;YAE3F,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,IAAA,aAAG,EAAC,WAAW,CAAC,+BAA+B,EAAE,IAAI,EAAE,CAAC,CAAC;QACtH,CAAC;QACD,2FAA2F;QAC3F,gBAAgB,CAAC,UAAkB;YACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -278,6 +278,16 @@ export type SmsProvider = {
278
278
  }[SmsTransport];
279
279
  /** Either channel's provider. Narrow on `transport` (or `channel`) to read its config. */
280
280
  export type MessagingProvider = EmailProvider | SmsProvider;
281
+ /**
282
+ * What a singleton GET returns when nothing is configured yet (never a 404).
283
+ * A configured object carries `configured: true`.
284
+ */
285
+ export interface NotConfigured<O extends string = string> {
286
+ object: O;
287
+ configured: false;
288
+ /** What to call to configure it. */
289
+ message?: string;
290
+ }
281
291
  export interface MessagingProviders {
282
292
  object: 'messaging_providers';
283
293
  email: EmailProvider | null;
@@ -429,6 +439,10 @@ type LegacyInput<T extends string> = Omit<MessagingProviderInput, 'transport'> &
429
439
  export declare function messagingResource(request: RequestFn): {
430
440
  /** The instance's configured email and SMS providers, secrets omitted. */
431
441
  get(): Promise<MessagingProviders>;
442
+ /** One channel's provider, or `{ configured: false, channel }` when none is set. */
443
+ channel<C extends "email" | "sms">(channel: C): Promise<(C extends "email" ? EmailProvider : SmsProvider) | (NotConfigured<"messaging_provider"> & {
444
+ channel: C;
445
+ })>;
432
446
  /**
433
447
  * Configure (or update) the email provider. `config` keys are checked per
434
448
  * `transport`; on an update of the same transport, omitted keys — including
@@ -462,8 +476,8 @@ export declare function messagingResource(request: RequestFn): {
462
476
  * Atlas's sign-in emails without a verified domain ([Atlas test] subjects, capped).
463
477
  */
464
478
  developmentEmail: {
465
- /** 404 when the provider is not in development mode. */
466
- get(): Promise<DevelopmentEmail>;
479
+ /** `{ configured: false }` when the provider is not in development mode. */
480
+ get(): Promise<DevelopmentEmail | NotConfigured<"development_email">>;
467
481
  /** Turn development mode on. 409 `DEVELOPMENT_EMAIL_NOT_ALLOWED` on a production instance. */
468
482
  enable(body: EnableDevelopmentEmailBody): Promise<DevelopmentEmail>;
469
483
  /** Back to standard mode; the provider stays. */
@@ -476,8 +490,8 @@ export declare function messagingResource(request: RequestFn): {
476
490
  };
477
491
  /** Managed email: Atlas sets your sending domain up on your own Resend or Brevo account. */
478
492
  managedEmail: {
479
- /** 404 when none is configured. */
480
- get(): Promise<ManagedEmail>;
493
+ /** `{ configured: false }` when none is configured. */
494
+ get(): Promise<ManagedEmail | NotConfigured<"managed_email">>;
481
495
  /** Register the sending domain; returns the DNS `records` to publish. */
482
496
  create(body: CreateManagedEmailBody): Promise<ManagedEmail>;
483
497
  /** Re-check the DNS records now; `verified` is true once email can be sent. */
@@ -14,6 +14,10 @@ function messagingResource(request) {
14
14
  get() {
15
15
  return request({ method: 'GET', path: '/v1/messaging_providers' });
16
16
  },
17
+ /** One channel's provider, or `{ configured: false, channel }` when none is set. */
18
+ channel(channel) {
19
+ return request({ method: 'GET', path: `/v1/messaging_providers/${channel}` });
20
+ },
17
21
  /**
18
22
  * Configure (or update) the email provider. `config` keys are checked per
19
23
  * `transport`; on an update of the same transport, omitted keys — including
@@ -45,7 +49,7 @@ function messagingResource(request) {
45
49
  * Atlas's sign-in emails without a verified domain ([Atlas test] subjects, capped).
46
50
  */
47
51
  developmentEmail: {
48
- /** 404 when the provider is not in development mode. */
52
+ /** `{ configured: false }` when the provider is not in development mode. */
49
53
  get() {
50
54
  return request({ method: 'GET', path: '/v1/messaging_providers/email/development' });
51
55
  },
@@ -60,7 +64,7 @@ function messagingResource(request) {
60
64
  },
61
65
  /** Managed email: Atlas sets your sending domain up on your own Resend or Brevo account. */
62
66
  managedEmail: {
63
- /** 404 when none is configured. */
67
+ /** `{ configured: false }` when none is configured. */
64
68
  get() {
65
69
  return request({ method: 'GET', path: '/v1/messaging_providers/email/managed' });
66
70
  },
@@ -1 +1 @@
1
- {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../src/client/messaging.ts"],"names":[],"mappings":";;AAydA,8CAuGC;AAhkBD,uCAAgD;AAydhD,SAAgB,iBAAiB,CAAC,OAAkB;IAIlD,SAAS,QAAQ,CAAC,IAAa;QAC7B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAKD,SAAS,MAAM,CAAC,IAAa;QAC3B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO;QACL,0EAA0E;QAC1E,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACrE,CAAC;QACD;;;;WAIG;QACH,QAAQ;QACR;;;;WAIG;QACH,MAAM;QACN;;;;;;WAMG;QACH,aAAa,CACX,OAAwB,EACxB,UAA+B,EAAE;YAEjC,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE;gBAC/C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QACD;;;WAGG;QACH,gBAAgB,EAAE;YAChB,wDAAwD;YACxD,GAAG;gBACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2CAA2C,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,8FAA8F;YAC9F,MAAM,CAAC,IAAgC;gBACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2CAA2C,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,iDAAiD;YACjD,OAAO;gBACL,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,2CAA2C,EAAE,CAAC,CAAC;YAC1F,CAAC;SACF;QACD,4FAA4F;QAC5F,YAAY,EAAE;YACZ,mCAAmC;YACnC,GAAG;gBACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,yEAAyE;YACzE,MAAM,CAAC,IAA4B;gBACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1F,CAAC;YACD,+EAA+E;YAC/E,MAAM;gBACJ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD;;;;eAIG;YACH,MAAM,CAAC,UAA+B,EAAE;gBACtC,OAAO,OAAO,CAAC;oBACb,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,uCAAuC;oBAC7C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD,CAAC,CAAC;YACL,CAAC;SACF;QACD,gFAAgF;QAChF,IAAI,CAAC,OAAwB,EAAE,IAAoB;YACjD,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,OAAO,CAAC,OAAO;gBACpD,IAAI;aACL,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../src/client/messaging.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
+ import { type ProvisioningFields, type ProvisioningInput, type ProvisioningMetadata } from './compliance';
1
2
  import { type RequestFn } from './request';
2
3
  import type { ListPage } from './types';
3
- export interface OAuthClient {
4
+ export interface OAuthClient extends ProvisioningFields {
4
5
  object: 'oauth_client';
5
6
  id: string;
6
7
  client_id: string;
@@ -147,7 +148,7 @@ export interface ClientGrant {
147
148
  created_at: number;
148
149
  updated_at: number;
149
150
  }
150
- export interface CreateOAuthClientBody extends OAuthClientLogoutFields, OAuthClientSubjectFields, OAuthClientTokenFields {
151
+ export interface CreateOAuthClientBody extends ProvisioningInput, OAuthClientLogoutFields, OAuthClientSubjectFields, OAuthClientTokenFields {
151
152
  name: string;
152
153
  redirect_uris: string[];
153
154
  allowed_scopes?: string[];
@@ -157,8 +158,12 @@ export interface CreateOAuthClientBody extends OAuthClientLogoutFields, OAuthCli
157
158
  first_party?: boolean;
158
159
  /** How long the issued secret authenticates, in seconds; omit for no expiry. */
159
160
  secret_expires_in_seconds?: number;
161
+ /** Require PKCE. New clients default to true (confidential ones included); send false to opt out. */
162
+ require_pkce?: boolean;
160
163
  }
161
164
  export interface UpdateOAuthClientBody extends OAuthClientLogoutFields, OAuthClientSubjectFields, OAuthClientTokenFields {
165
+ /** Replaces the provisioning metadata. */
166
+ metadata?: ProvisioningMetadata;
162
167
  name?: string;
163
168
  redirect_uris?: string[];
164
169
  allowed_scopes?: string[];
@@ -250,7 +255,10 @@ export declare function oauthClientsResource(request: RequestFn): {
250
255
  import(body: {
251
256
  clients: ImportOAuthClientEntry[];
252
257
  }, idempotencyKey?: string): Promise<ListPage<ImportedOAuthClient>>;
253
- list(): Promise<ListPage<OAuthClient>>;
258
+ /** `metadata` filters on provisioning tags (`?metadata[key]=value`). */
259
+ list(params?: {
260
+ metadata?: ProvisioningMetadata;
261
+ }): Promise<ListPage<OAuthClient>>;
254
262
  get(id: string): Promise<OAuthClient>;
255
263
  create(body: CreateOAuthClientBody, idempotencyKey?: string): Promise<OAuthClientWithSecret>;
256
264
  update(id: string, body: UpdateOAuthClientBody): Promise<OAuthClient>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.oauthClientsResource = oauthClientsResource;
4
+ const compliance_1 = require("./compliance");
4
5
  const request_1 = require("./request");
5
6
  function oauthClientsResource(request) {
6
7
  return {
@@ -8,8 +9,9 @@ function oauthClientsResource(request) {
8
9
  import(body, idempotencyKey) {
9
10
  return request({ method: 'POST', path: '/v1/oauth_clients/import', body, idempotencyKey });
10
11
  },
11
- list() {
12
- return request({ method: 'GET', path: '/v1/oauth_clients' });
12
+ /** `metadata` filters on provisioning tags (`?metadata[key]=value`). */
13
+ list(params = {}) {
14
+ return request({ method: 'GET', path: '/v1/oauth_clients', query: (0, compliance_1.metadataQuery)(params.metadata) });
13
15
  },
14
16
  get(id) {
15
17
  return request({ method: 'GET', path: `/v1/oauth_clients/${(0, request_1.enc)(id)}` });
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-clients.js","sourceRoot":"","sources":["../../src/client/oauth-clients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-clients.js","sourceRoot":"","sources":["../../src/client/oauth-clients.ts"],"names":[],"mappings":";;AAiRA,oDAgGC;AAjXD,6CAAyH;AACzH,uCAAgD;AAgRhD,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,qFAAqF;QACrF,MAAM,CACJ,IAA2C,EAC3C,cAAuB;YAEvB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,wEAAwE;QACxE,IAAI,CAAC,SAA8C,EAAE;YACnD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAA,0BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,CAAC,IAA2B,EAAE,cAAuB;YACzD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAA2B;YAC5C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QACD;;;WAGG;QACH,YAAY,CACV,EAAU,EACV,OAAoC,EAAE,EACtC,cAAuB;YAEvB,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,gBAAgB;gBAClD,IAAI;gBACJ,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,mEAAmE;QACnE,yBAAyB,CACvB,EAAU,EACV,QAAoC,EAAE;YAEtC,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,yBAAyB;gBAC3D,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE;aACpB,CAAC,CAAC;QACL,CAAC;QACD,iFAAiF;QACjF,qBAAqB,CAAC,EAAU;YAC9B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,CAAC;QACnG,CAAC;QAED,yEAAyE;QACzE,mBAAmB,EAAE;YACnB,IAAI;gBACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,4CAA4C;YAC5C,MAAM,CAAC,OAAqC,EAAE;gBAC5C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,CAAC,EAAU;gBACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,mCAAmC,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,CAAC;SACF;QAED,MAAM,EAAE;YACN,IAAI,CAAC,QAAgB;gBACnB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,CACJ,QAAgB,EAChB,IAAuD;gBAEvD,OAAO,OAAO,CAAC;oBACb,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,QAAQ,CAAC,SAAS;oBACjD,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CACJ,QAAgB,EAChB,OAAe;gBAEf,OAAO,OAAO,CAAC;oBACb,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,QAAQ,CAAC,WAAW,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE;iBAClE,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Operator sign-in (`atlas login`) and token exchange, without a long-lived key.
3
+ *
4
+ * 1. `startOperatorLogin()` runs the RFC 8628 device flow against Atlas's own
5
+ * sign-in (the operator issuer) with the public `atlas-cli` client: show the
6
+ * person `verification_uri_complete` / `user_code`, then
7
+ * 2. `pollOperatorLogin()` until it returns the operator access token, then
8
+ * 3. `exchangeOperatorToken()` swaps it (RFC 8693) for a ONE-HOUR Atlas token
9
+ * bound to one instance (`ins_…`, Backend API) or app/account (`app_…` /
10
+ * `acct_…`, Platform API), with only the scopes you ask for.
11
+ *
12
+ * Root actions (create an app or instance, mint a key) need a multi-factor
13
+ * sign-in within 5 minutes; otherwise the API answers 403 STEP_UP_REQUIRED.
14
+ */
15
+ export interface OperatorConfiguration {
16
+ issuer: string;
17
+ device_authorization_endpoint: string;
18
+ token_endpoint: string;
19
+ client_id: string;
20
+ scope: string;
21
+ token_exchange_endpoint: string;
22
+ token_exchange_audience: 'atlas';
23
+ root_action_max_mfa_age_seconds: number;
24
+ }
25
+ export interface DeviceAuthorization {
26
+ device_code: string;
27
+ user_code: string;
28
+ verification_uri: string;
29
+ verification_uri_complete: string;
30
+ expires_in: number;
31
+ interval: number;
32
+ }
33
+ export interface OAuthTokenResponse {
34
+ access_token: string;
35
+ token_type: string;
36
+ expires_in: number;
37
+ scope?: string;
38
+ refresh_token?: string;
39
+ id_token?: string;
40
+ issued_token_type?: string;
41
+ }
42
+ export declare class OAuthFlowError extends Error {
43
+ readonly error: string;
44
+ readonly status: number;
45
+ constructor(error: string, message: string, status: number);
46
+ }
47
+ interface Opts {
48
+ apiUrl?: string;
49
+ fetch?: typeof fetch;
50
+ }
51
+ /** GET /v1/operator — where the operator device flow and token exchange live. */
52
+ export declare function operatorConfiguration(opts?: Opts): Promise<OperatorConfiguration>;
53
+ export declare function startOperatorLogin(opts?: Opts & {
54
+ config?: OperatorConfiguration;
55
+ }): Promise<DeviceAuthorization & {
56
+ config: OperatorConfiguration;
57
+ }>;
58
+ /**
59
+ * Poll until the person approves (resolves the operator token), denies or the
60
+ * code expires (throws). Honours `interval` and `slow_down`.
61
+ */
62
+ export declare function pollOperatorLogin(start: DeviceAuthorization & {
63
+ config: OperatorConfiguration;
64
+ }, opts?: Opts & {
65
+ sleep?: (ms: number) => Promise<void>;
66
+ signal?: AbortSignal;
67
+ }): Promise<OAuthTokenResponse>;
68
+ /** RFC 8693: swap an operator token for a one-hour, resource-bound Atlas token. */
69
+ export declare function exchangeOperatorToken(subjectToken: string, params: {
70
+ resource: string;
71
+ scope: string | string[];
72
+ }, opts?: Opts): Promise<OAuthTokenResponse & {
73
+ resource: string;
74
+ }>;
75
+ /** client_credentials with a partner link's credentials (a partner calling an instance). */
76
+ export declare function partnerLinkToken(clientId: string, clientSecret: string, opts?: Opts & {
77
+ scope?: string;
78
+ }): Promise<OAuthTokenResponse>;
79
+ /** A key pair for sealed secret delivery; pass `secretRecipient` to the client. */
80
+ export declare function generateSealKeyPair(): {
81
+ publicKey: Uint8Array;
82
+ secretKey: Uint8Array;
83
+ secretRecipient: string;
84
+ };
85
+ /** Open a `sealed_*` field (base64 libsodium sealed box) from an Atlas response. */
86
+ export declare function openSealedSecret(sealedBase64: string, keyPair: {
87
+ publicKey: Uint8Array;
88
+ secretKey: Uint8Array;
89
+ }): string;
90
+ /** POST /v1/keys/revoke_leaked — revoke leaked Atlas credentials (no key needed). */
91
+ export declare function revokeLeakedKeys(secrets: string[], opts?: Opts & {
92
+ url?: string;
93
+ }): Promise<{
94
+ results: Array<{
95
+ index: number;
96
+ kind: string;
97
+ outcome: 'revoked' | 'already_revoked' | 'not_found';
98
+ }>;
99
+ }>;
100
+ export { sealBox, openSealedBox } from './sealed-box';
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openSealedBox = exports.sealBox = exports.OAuthFlowError = void 0;
4
+ exports.operatorConfiguration = operatorConfiguration;
5
+ exports.startOperatorLogin = startOperatorLogin;
6
+ exports.pollOperatorLogin = pollOperatorLogin;
7
+ exports.exchangeOperatorToken = exchangeOperatorToken;
8
+ exports.partnerLinkToken = partnerLinkToken;
9
+ exports.generateSealKeyPair = generateSealKeyPair;
10
+ exports.openSealedSecret = openSealedSecret;
11
+ exports.revokeLeakedKeys = revokeLeakedKeys;
12
+ const sealed_box_1 = require("./sealed-box");
13
+ const toB64 = (b) => btoa(String.fromCharCode(...b));
14
+ const fromB64 = (s) => Uint8Array.from(atob(s), (c) => c.charCodeAt(0));
15
+ class OAuthFlowError extends Error {
16
+ error;
17
+ status;
18
+ constructor(error, message, status) {
19
+ super(message);
20
+ this.error = error;
21
+ this.status = status;
22
+ this.name = 'OAuthFlowError';
23
+ }
24
+ }
25
+ exports.OAuthFlowError = OAuthFlowError;
26
+ const DEFAULT_API = 'https://api.atlasauth.net';
27
+ async function form(fetchImpl, url, body) {
28
+ const res = await fetchImpl(url, {
29
+ method: 'POST',
30
+ headers: { 'content-type': 'application/x-www-form-urlencoded', accept: 'application/json' },
31
+ body: new URLSearchParams(body).toString(),
32
+ });
33
+ const json = (await res.json().catch(() => ({})));
34
+ return { ...json, _status: res.status };
35
+ }
36
+ /** GET /v1/operator — where the operator device flow and token exchange live. */
37
+ async function operatorConfiguration(opts = {}) {
38
+ const f = opts.fetch ?? globalThis.fetch;
39
+ const res = await f(`${(opts.apiUrl ?? DEFAULT_API).replace(/\/+$/, '')}/v1/operator`, { headers: { accept: 'application/json' } });
40
+ if (!res.ok)
41
+ throw new OAuthFlowError('not_configured', 'The operator issuer is not configured on this deployment.', res.status);
42
+ return (await res.json());
43
+ }
44
+ async function startOperatorLogin(opts = {}) {
45
+ const config = opts.config ?? (await operatorConfiguration(opts));
46
+ const out = await form(opts.fetch ?? globalThis.fetch, config.device_authorization_endpoint, { client_id: config.client_id, scope: config.scope });
47
+ if (out._status !== 200)
48
+ throw new OAuthFlowError(String(out.error ?? 'error'), String(out.error_description ?? 'Device authorization failed.'), out._status);
49
+ return { ...out, config };
50
+ }
51
+ /**
52
+ * Poll until the person approves (resolves the operator token), denies or the
53
+ * code expires (throws). Honours `interval` and `slow_down`.
54
+ */
55
+ async function pollOperatorLogin(start, opts = {}) {
56
+ const f = opts.fetch ?? globalThis.fetch;
57
+ const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
58
+ let interval = Math.max(1, start.interval) * 1000;
59
+ const deadline = Date.now() + start.expires_in * 1000;
60
+ while (Date.now() < deadline) {
61
+ if (opts.signal?.aborted)
62
+ throw new OAuthFlowError('aborted', 'Sign-in was cancelled.', 0);
63
+ await sleep(interval);
64
+ const out = await form(f, start.config.token_endpoint, {
65
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
66
+ device_code: start.device_code,
67
+ client_id: start.config.client_id,
68
+ });
69
+ if (out._status === 200)
70
+ return out;
71
+ if (out.error === 'authorization_pending')
72
+ continue;
73
+ if (out.error === 'slow_down') {
74
+ interval += 5000;
75
+ continue;
76
+ }
77
+ throw new OAuthFlowError(String(out.error ?? 'error'), String(out.error_description ?? 'Sign-in failed.'), out._status);
78
+ }
79
+ throw new OAuthFlowError('expired_token', 'The sign-in code expired. Run the login again.', 400);
80
+ }
81
+ /** RFC 8693: swap an operator token for a one-hour, resource-bound Atlas token. */
82
+ async function exchangeOperatorToken(subjectToken, params, opts = {}) {
83
+ const out = await form(opts.fetch ?? globalThis.fetch, `${(opts.apiUrl ?? DEFAULT_API).replace(/\/+$/, '')}/v1/oauth/token`, {
84
+ grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
85
+ subject_token: subjectToken,
86
+ subject_token_type: 'urn:ietf:params:oauth:token-type:access_token',
87
+ audience: 'atlas',
88
+ resource: params.resource,
89
+ scope: Array.isArray(params.scope) ? params.scope.join(' ') : params.scope,
90
+ });
91
+ if (out._status !== 200) {
92
+ const err = out.error ?? (Array.isArray(out.errors) ? out.errors[0].code : 'error');
93
+ const msg = out.error_description ?? (Array.isArray(out.errors) ? out.errors[0].message : 'Token exchange failed.');
94
+ throw new OAuthFlowError(String(err), String(msg), out._status);
95
+ }
96
+ return out;
97
+ }
98
+ /** client_credentials with a partner link's credentials (a partner calling an instance). */
99
+ async function partnerLinkToken(clientId, clientSecret, opts = {}) {
100
+ const body = { grant_type: 'client_credentials', client_id: clientId, client_secret: clientSecret };
101
+ if (opts.scope)
102
+ body.scope = opts.scope;
103
+ const out = await form(opts.fetch ?? globalThis.fetch, `${(opts.apiUrl ?? DEFAULT_API).replace(/\/+$/, '')}/v1/oauth/token`, body);
104
+ if (out._status !== 200)
105
+ throw new OAuthFlowError(String(out.error ?? 'error'), String(out.error_description ?? 'Token request failed.'), out._status);
106
+ return out;
107
+ }
108
+ /** A key pair for sealed secret delivery; pass `secretRecipient` to the client. */
109
+ function generateSealKeyPair() {
110
+ const pair = (0, sealed_box_1.generateSealKeyPair)();
111
+ return { ...pair, secretRecipient: `x25519:${toB64(pair.publicKey)}` };
112
+ }
113
+ /** Open a `sealed_*` field (base64 libsodium sealed box) from an Atlas response. */
114
+ function openSealedSecret(sealedBase64, keyPair) {
115
+ return new TextDecoder().decode((0, sealed_box_1.openSealedBox)(fromB64(sealedBase64), keyPair.publicKey, keyPair.secretKey));
116
+ }
117
+ /** POST /v1/keys/revoke_leaked — revoke leaked Atlas credentials (no key needed). */
118
+ async function revokeLeakedKeys(secrets, opts = {}) {
119
+ const f = opts.fetch ?? globalThis.fetch;
120
+ const res = await f(`${(opts.apiUrl ?? DEFAULT_API).replace(/\/+$/, '')}/v1/keys/revoke_leaked`, {
121
+ method: 'POST',
122
+ headers: { 'content-type': 'application/json', accept: 'application/json' },
123
+ body: JSON.stringify({ secrets, ...(opts.url ? { url: opts.url } : {}) }),
124
+ });
125
+ if (!res.ok)
126
+ throw new OAuthFlowError('request_failed', `revoke_leaked failed (${res.status}).`, res.status);
127
+ return (await res.json());
128
+ }
129
+ var sealed_box_2 = require("./sealed-box");
130
+ Object.defineProperty(exports, "sealBox", { enumerable: true, get: function () { return sealed_box_2.sealBox; } });
131
+ Object.defineProperty(exports, "openSealedBox", { enumerable: true, get: function () { return sealed_box_2.openSealedBox; } });
132
+ //# sourceMappingURL=operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator.js","sourceRoot":"","sources":["../../src/client/operator.ts"],"names":[],"mappings":"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"}