@atlasauth/backend 0.17.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.
- package/CHANGELOG.md +40 -0
- package/dist/backchannel-handlers.d.ts +87 -0
- package/dist/backchannel-handlers.js +137 -0
- package/dist/backchannel-handlers.js.map +1 -0
- package/dist/client/activity.d.ts +13 -2
- package/dist/client/activity.js.map +1 -1
- package/dist/client/audit-logs.d.ts +7 -0
- package/dist/client/audit-logs.js.map +1 -1
- package/dist/client/compliance.d.ts +216 -0
- package/dist/client/compliance.js +77 -0
- package/dist/client/compliance.js.map +1 -0
- package/dist/client/credentials.d.ts +409 -0
- package/dist/client/credentials.js +158 -0
- package/dist/client/credentials.js.map +1 -0
- package/dist/client/data-subject-requests.d.ts +36 -1
- package/dist/client/data-subject-requests.js.map +1 -1
- package/dist/client/design.d.ts +48 -0
- package/dist/client/design.js +9 -0
- package/dist/client/design.js.map +1 -1
- package/dist/client/entitlement-overrides.d.ts +30 -0
- package/dist/client/entitlement-overrides.js +9 -0
- package/dist/client/entitlement-overrides.js.map +1 -1
- package/dist/client/env.d.ts +16 -0
- package/dist/client/env.js +38 -0
- package/dist/client/env.js.map +1 -0
- package/dist/client/error.d.ts +10 -0
- package/dist/client/error.js +4 -0
- package/dist/client/error.js.map +1 -1
- package/dist/client/index.d.ts +382 -7
- package/dist/client/index.js +44 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/instance.d.ts +401 -3
- package/dist/client/instance.js +77 -3
- package/dist/client/instance.js.map +1 -1
- package/dist/client/integrations.d.ts +107 -0
- package/dist/client/integrations.js +25 -0
- package/dist/client/integrations.js.map +1 -0
- package/dist/client/messaging.d.ts +18 -4
- package/dist/client/messaging.js +6 -2
- package/dist/client/messaging.js.map +1 -1
- package/dist/client/oauth-clients.d.ts +11 -3
- package/dist/client/oauth-clients.js +4 -2
- package/dist/client/oauth-clients.js.map +1 -1
- package/dist/client/operator.d.ts +100 -0
- package/dist/client/operator.js +132 -0
- package/dist/client/operator.js.map +1 -0
- package/dist/client/platform.d.ts +233 -9
- package/dist/client/platform.js +74 -6
- package/dist/client/platform.js.map +1 -1
- package/dist/client/policies.d.ts +316 -0
- package/dist/client/policies.js +103 -0
- package/dist/client/policies.js.map +1 -0
- package/dist/client/privacy.d.ts +127 -0
- package/dist/client/privacy.js +44 -0
- package/dist/client/privacy.js.map +1 -0
- package/dist/client/referrals.d.ts +53 -6
- package/dist/client/referrals.js +9 -0
- package/dist/client/referrals.js.map +1 -1
- package/dist/client/request.d.ts +38 -1
- package/dist/client/request.js +6 -2
- package/dist/client/request.js.map +1 -1
- package/dist/client/sealed-box.d.ts +7 -0
- package/dist/client/sealed-box.js +62 -0
- package/dist/client/sealed-box.js.map +1 -0
- package/dist/client/sessions.d.ts +16 -5
- package/dist/client/sessions.js +7 -10
- package/dist/client/sessions.js.map +1 -1
- package/dist/client/status.d.ts +200 -0
- package/dist/client/status.js +54 -0
- package/dist/client/status.js.map +1 -0
- package/dist/client/users.d.ts +15 -0
- package/dist/client/webhooks.d.ts +244 -11
- package/dist/client/webhooks.js +52 -3
- package/dist/client/webhooks.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.js +20 -4
- package/dist/index.js.map +1 -1
- package/dist/oidc.d.ts +65 -1
- package/dist/oidc.js +46 -0
- package/dist/oidc.js.map +1 -1
- package/dist/policy-source.d.ts +104 -0
- package/dist/policy-source.js +99 -0
- package/dist/policy-source.js.map +1 -0
- package/dist/referral-test-calls.d.ts +26 -13
- package/dist/referral-test-calls.js +40 -14
- package/dist/referral-test-calls.js.map +1 -1
- package/dist/testing.d.ts +41 -6
- package/dist/testing.js +34 -2
- package/dist/testing.js.map +1 -1
- package/dist/webhooks.d.ts +8 -0
- package/dist/webhooks.js +13 -4
- package/dist/webhooks.js.map +1 -1
- package/package.json +6 -3
package/dist/client/instance.js
CHANGED
|
@@ -10,8 +10,20 @@ function instanceResource(request) {
|
|
|
10
10
|
return request({ method: 'PATCH', path: '/v1/instance', body });
|
|
11
11
|
},
|
|
12
12
|
/** Check your setup in one call: configuration the server can see is broken or risky. */
|
|
13
|
-
preflight() {
|
|
14
|
-
return request({ method: 'GET', path: '/v1/instance/preflight' });
|
|
13
|
+
preflight(params = {}) {
|
|
14
|
+
return request({ method: 'GET', path: '/v1/instance/preflight', query: { ...params } });
|
|
15
|
+
},
|
|
16
|
+
/**
|
|
17
|
+
* The unknown body fields your writes sent over the last `days` (1-90,
|
|
18
|
+
* default 30): fix every row with an `ignored_count`, then turn
|
|
19
|
+
* `auth_config.strictRequestBodies` on.
|
|
20
|
+
*/
|
|
21
|
+
unknownFieldsReport(params = {}) {
|
|
22
|
+
return request({ method: 'GET', path: '/v1/instance/unknown_fields_report', query: { ...params } });
|
|
23
|
+
},
|
|
24
|
+
/** What changed in the API since a date (YYYY-MM-DD): operations added, deprecated and removed. */
|
|
25
|
+
openapiDiff(params) {
|
|
26
|
+
return request({ method: 'GET', path: '/v1/openapi/diff', query: { ...params } });
|
|
15
27
|
},
|
|
16
28
|
/**
|
|
17
29
|
* Move every URL that points at one origin to another (a domain move), across
|
|
@@ -21,12 +33,74 @@ function instanceResource(request) {
|
|
|
21
33
|
moveOrigin(body) {
|
|
22
34
|
return request({ method: 'POST', path: '/v1/instance/move_origin', body });
|
|
23
35
|
},
|
|
36
|
+
/**
|
|
37
|
+
* One report of everything that connects the instance to the outside world
|
|
38
|
+
* (setup checks, webhooks with the failing hop, back-channel logout,
|
|
39
|
+
* referrals, email, consent manager, SDK versions). `only` limits the
|
|
40
|
+
* sources; `probe: false` skips live reachability probes.
|
|
41
|
+
*/
|
|
42
|
+
integrationHealth(params = {}) {
|
|
43
|
+
return request({
|
|
44
|
+
method: 'GET',
|
|
45
|
+
path: '/v1/integration-health',
|
|
46
|
+
query: { only: params.only?.join(','), probe: params.probe === undefined ? undefined : String(params.probe) },
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
/** The integration-health check sources this deployment reports. */
|
|
50
|
+
integrationHealthProviders() {
|
|
51
|
+
return request({ method: 'GET', path: '/v1/integration-health/providers' });
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* The embed manifest for an instance (public; no key needed): CSP sources per
|
|
55
|
+
* surface with its hosts filled in, and the merged policy in `tenant.policy`.
|
|
56
|
+
*/
|
|
57
|
+
embed(params) {
|
|
58
|
+
return request({ method: 'GET', path: '/v1/embed', query: { ...params } });
|
|
59
|
+
},
|
|
24
60
|
/** The instance's links to other platforms and their health. Read-only. */
|
|
25
61
|
connections() {
|
|
26
62
|
return request({ method: 'GET', path: '/v1/instance/connections' });
|
|
27
63
|
},
|
|
28
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* Identity integrations: presets and custom integrations (generic), plus the
|
|
66
|
+
* earlier per-product helpers (`chatly`, `forumulate`) on the same records.
|
|
67
|
+
*/
|
|
29
68
|
integrations: {
|
|
69
|
+
/** Every integration (the presets, connected or not, and every custom one) with its health. */
|
|
70
|
+
list() {
|
|
71
|
+
return request({ method: 'GET', path: '/v1/instance/integrations' });
|
|
72
|
+
},
|
|
73
|
+
get(id) {
|
|
74
|
+
return request({ method: 'GET', path: `/v1/instance/integrations/${encodeURIComponent(id)}` });
|
|
75
|
+
},
|
|
76
|
+
/** Connect or replace an integration. `{ dryRun: true }` validates and saves nothing. */
|
|
77
|
+
set(id, body, opts = {}) {
|
|
78
|
+
return request({
|
|
79
|
+
method: 'PUT',
|
|
80
|
+
path: `/v1/instance/integrations/${encodeURIComponent(id)}`,
|
|
81
|
+
body,
|
|
82
|
+
...(opts.dryRun ? { query: { dry_run: 'true' } } : {}),
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
remove(id) {
|
|
86
|
+
return request({ method: 'DELETE', path: `/v1/instance/integrations/${encodeURIComponent(id)}` });
|
|
87
|
+
},
|
|
88
|
+
/** Event and back-channel logout deliveries, newest first; `trace` finds one operation. */
|
|
89
|
+
deliveries(id, query = {}) {
|
|
90
|
+
return request({ method: 'GET', path: `/v1/instance/integrations/${encodeURIComponent(id)}/deliveries`, query });
|
|
91
|
+
},
|
|
92
|
+
/** Reveal the event receiver's signing secret (audited). */
|
|
93
|
+
revealEventsSecret(id) {
|
|
94
|
+
return request({ method: 'POST', path: `/v1/instance/integrations/${encodeURIComponent(id)}/events_secret` });
|
|
95
|
+
},
|
|
96
|
+
/** An integration token for a Sign in with Atlas user (their Atlas ID access token). */
|
|
97
|
+
atlasIdToken(id, accessToken) {
|
|
98
|
+
return request({
|
|
99
|
+
method: 'POST',
|
|
100
|
+
path: `/v1/instance/integrations/${encodeURIComponent(id)}/atlas_id_tokens`,
|
|
101
|
+
body: { access_token: accessToken },
|
|
102
|
+
});
|
|
103
|
+
},
|
|
30
104
|
chatly: {
|
|
31
105
|
get() {
|
|
32
106
|
return request({ method: 'GET', path: '/v1/instance/integrations/chatly' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/client/instance.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/client/instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
/**
|
|
3
|
+
* The integration-facing routes, called with the instance secret key (an
|
|
4
|
+
* integrated service calls the same routes with the partner link the instance
|
|
5
|
+
* owner granted it): report a token a service refused, read the agent-sidebar
|
|
6
|
+
* card for a user and run its actions, and read an instance's public metadata.
|
|
7
|
+
*/
|
|
8
|
+
export type IntegrationVerifyErrorCode = 'aud_mismatch' | 'expired' | 'bad_signature' | 'unknown_kid' | 'session_revoked' | 'invalid_claims' | 'other';
|
|
9
|
+
export interface ReportVerifyErrorBody {
|
|
10
|
+
/** The integration id the token was minted for (a preset or a custom id). */
|
|
11
|
+
integration: string;
|
|
12
|
+
error: IntegrationVerifyErrorCode;
|
|
13
|
+
audience?: string;
|
|
14
|
+
/** Epoch ms (or seconds) or an ISO time. Default now. */
|
|
15
|
+
at?: number | string;
|
|
16
|
+
kid?: string;
|
|
17
|
+
sid?: string;
|
|
18
|
+
detail?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface IntegrationVerifyError {
|
|
21
|
+
object: 'integration_verify_error';
|
|
22
|
+
id: string;
|
|
23
|
+
integration: string;
|
|
24
|
+
audience: string | null;
|
|
25
|
+
error: IntegrationVerifyErrorCode;
|
|
26
|
+
at: number;
|
|
27
|
+
trace_id: string | null;
|
|
28
|
+
created_at: number;
|
|
29
|
+
}
|
|
30
|
+
export interface IntegrationCard {
|
|
31
|
+
object: 'integration_card';
|
|
32
|
+
integration: string;
|
|
33
|
+
user: {
|
|
34
|
+
id: string;
|
|
35
|
+
email: string | null;
|
|
36
|
+
email_verified: boolean;
|
|
37
|
+
name: string | null;
|
|
38
|
+
external_id: string | null;
|
|
39
|
+
banned: boolean;
|
|
40
|
+
mfa_enabled: boolean;
|
|
41
|
+
last_sign_in_at: number | null;
|
|
42
|
+
created_at: number;
|
|
43
|
+
organizations: Array<{
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
role: string;
|
|
47
|
+
}>;
|
|
48
|
+
};
|
|
49
|
+
sessions_active: number;
|
|
50
|
+
actions: Array<{
|
|
51
|
+
id: 'revoke_sessions';
|
|
52
|
+
label: string;
|
|
53
|
+
confirm: boolean;
|
|
54
|
+
available: boolean;
|
|
55
|
+
requires_scope: string;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
export interface InstanceMetadata {
|
|
59
|
+
object: 'instance_metadata';
|
|
60
|
+
id: string;
|
|
61
|
+
issuer: string;
|
|
62
|
+
jwks_uri: string;
|
|
63
|
+
token_schema: string;
|
|
64
|
+
integrations: Record<string, {
|
|
65
|
+
audience: string;
|
|
66
|
+
preset: string | null;
|
|
67
|
+
ttl_seconds: number;
|
|
68
|
+
additional_issuers?: string[];
|
|
69
|
+
}>;
|
|
70
|
+
trusted_issuers: Array<{
|
|
71
|
+
issuer: string;
|
|
72
|
+
jwks_uri: string;
|
|
73
|
+
kind: 'instance' | 'atlas_id';
|
|
74
|
+
}>;
|
|
75
|
+
previous_issuers: Array<{
|
|
76
|
+
issuer: string;
|
|
77
|
+
jwks_uri: string;
|
|
78
|
+
replaced_at: number;
|
|
79
|
+
}>;
|
|
80
|
+
}
|
|
81
|
+
export declare function integrationsResource(request: RequestFn): {
|
|
82
|
+
/** `POST /v1/integrations/verify_errors` — record a token an integrated service refused. */
|
|
83
|
+
reportVerifyError(body: ReportVerifyErrorBody): Promise<IntegrationVerifyError>;
|
|
84
|
+
/** `GET /v1/integrations/:integration/card` — the agent-sidebar card for a user (by token sub). */
|
|
85
|
+
card(integration: string, query: {
|
|
86
|
+
sub: string;
|
|
87
|
+
iss?: string;
|
|
88
|
+
}): Promise<IntegrationCard>;
|
|
89
|
+
/** `POST /v1/integrations/:integration/card/actions/revoke_sessions` — sign the user out everywhere (audited with the agent). */
|
|
90
|
+
revokeSessions(integration: string, body: {
|
|
91
|
+
sub: string;
|
|
92
|
+
iss?: string;
|
|
93
|
+
agent?: {
|
|
94
|
+
id?: string;
|
|
95
|
+
name?: string;
|
|
96
|
+
email?: string;
|
|
97
|
+
};
|
|
98
|
+
}): Promise<{
|
|
99
|
+
object: "integration_card_action";
|
|
100
|
+
integration: string;
|
|
101
|
+
action: "revoke_sessions";
|
|
102
|
+
ok: boolean;
|
|
103
|
+
sessions_revoked: number;
|
|
104
|
+
}>;
|
|
105
|
+
/** `GET /v1/public/instances/:id` — the public metadata of an instance (no key needed). */
|
|
106
|
+
instanceMetadata(instanceId: string): Promise<InstanceMetadata>;
|
|
107
|
+
};
|
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
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. */
|
package/dist/client/messaging.js
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../src/client/messaging.ts"],"names":[],"mappings":";;AAoeA,8CA6GC;AAjlBD,uCAAgD;AAoehD,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,oFAAoF;QACpF,OAAO,CACL,OAAU;YAEV,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,OAAO,EAAE,EAAE,CAAC,CAAC;QAChF,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,4EAA4E;YAC5E,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,uDAAuD;YACvD,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,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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"oauth-clients.js","sourceRoot":"","sources":["../../src/client/oauth-clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -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';
|