@atlasauth/backend 0.24.0 → 0.26.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 +39 -1
- package/dist/client/abac.d.ts +521 -0
- package/dist/client/abac.js +146 -0
- package/dist/client/abac.js.map +1 -0
- package/dist/client/access-policies.d.ts +100 -0
- package/dist/client/access-policies.js +29 -0
- package/dist/client/access-policies.js.map +1 -0
- package/dist/client/action-gallery.d.ts +1 -1
- package/dist/client/action-gallery.js.map +1 -1
- package/dist/client/actions.d.ts +129 -6
- package/dist/client/actions.js +4 -0
- package/dist/client/actions.js.map +1 -1
- package/dist/client/analytics-reports.d.ts +215 -0
- package/dist/client/analytics-reports.js +56 -0
- package/dist/client/analytics-reports.js.map +1 -0
- package/dist/client/app-catalog.d.ts +74 -0
- package/dist/client/app-catalog.js +30 -0
- package/dist/client/app-catalog.js.map +1 -0
- package/dist/client/attack-protection.d.ts +10 -0
- package/dist/client/attack-protection.js +8 -0
- package/dist/client/attack-protection.js.map +1 -1
- package/dist/client/audit-events.d.ts +71 -0
- package/dist/client/audit-events.js +28 -0
- package/dist/client/audit-events.js.map +1 -1
- package/dist/client/authz-decisions.d.ts +108 -0
- package/dist/client/authz-decisions.js +40 -0
- package/dist/client/authz-decisions.js.map +1 -0
- package/dist/client/connections.d.ts +507 -0
- package/dist/client/connections.js +164 -0
- package/dist/client/connections.js.map +1 -0
- package/dist/client/credentials.d.ts +8 -0
- package/dist/client/credentials.js.map +1 -1
- package/dist/client/custom-oauth-providers.d.ts +15 -0
- package/dist/client/custom-oauth-providers.js.map +1 -1
- package/dist/client/delegated-ui-proxy.d.ts +25 -0
- package/dist/client/delegated-ui-proxy.js +46 -0
- package/dist/client/delegated-ui-proxy.js.map +1 -0
- package/dist/client/desktop-mfa.d.ts +104 -0
- package/dist/client/desktop-mfa.js +44 -0
- package/dist/client/desktop-mfa.js.map +1 -0
- package/dist/client/devices.d.ts +44 -0
- package/dist/client/devices.js +26 -0
- package/dist/client/devices.js.map +1 -0
- package/dist/client/email-templates.d.ts +1 -1
- package/dist/client/email-templates.js.map +1 -1
- package/dist/client/fga.d.ts +125 -4
- package/dist/client/fga.js +40 -0
- package/dist/client/fga.js.map +1 -1
- package/dist/client/flags.d.ts +101 -0
- package/dist/client/flags.js +104 -0
- package/dist/client/flags.js.map +1 -0
- package/dist/client/groups.d.ts +146 -0
- package/dist/client/groups.js +67 -0
- package/dist/client/groups.js.map +1 -0
- package/dist/client/identity-verification.d.ts +62 -0
- package/dist/client/identity-verification.js +39 -0
- package/dist/client/identity-verification.js.map +1 -0
- package/dist/client/iga.d.ts +436 -0
- package/dist/client/iga.js +82 -0
- package/dist/client/iga.js.map +1 -0
- package/dist/client/index.d.ts +1433 -4
- package/dist/client/index.js +96 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/journeys.d.ts +108 -0
- package/dist/client/journeys.js +35 -0
- package/dist/client/journeys.js.map +1 -0
- package/dist/client/least-privilege.d.ts +95 -0
- package/dist/client/least-privilege.js +28 -0
- package/dist/client/least-privilege.js.map +1 -0
- package/dist/client/log-streams.d.ts +1 -1
- package/dist/client/managed-grants.d.ts +52 -0
- package/dist/client/managed-grants.js +28 -0
- package/dist/client/managed-grants.js.map +1 -0
- package/dist/client/marketing.d.ts +67 -0
- package/dist/client/marketing.js +26 -0
- package/dist/client/marketing.js.map +1 -0
- package/dist/client/mcp-gateways.d.ts +126 -0
- package/dist/client/mcp-gateways.js +47 -0
- package/dist/client/mcp-gateways.js.map +1 -0
- package/dist/client/messaging.d.ts +14 -3
- package/dist/client/messaging.js.map +1 -1
- package/dist/client/mfa-factors.d.ts +120 -0
- package/dist/client/mfa-factors.js +73 -0
- package/dist/client/mfa-factors.js.map +1 -0
- package/dist/client/migrations.d.ts +1 -1
- package/dist/client/migrations.js.map +1 -1
- package/dist/client/network-acls.d.ts +6 -1
- package/dist/client/network-acls.js.map +1 -1
- package/dist/client/network-zones.d.ts +56 -0
- package/dist/client/network-zones.js +29 -0
- package/dist/client/network-zones.js.map +1 -0
- package/dist/client/notifications.d.ts +1 -1
- package/dist/client/notifications.js.map +1 -1
- package/dist/client/oauth-clients.d.ts +187 -3
- package/dist/client/oauth-clients.js +64 -0
- package/dist/client/oauth-clients.js.map +1 -1
- package/dist/client/openfga.d.ts +90 -3
- package/dist/client/openfga.js +27 -1
- package/dist/client/openfga.js.map +1 -1
- package/dist/client/org-role-grants.d.ts +57 -0
- package/dist/client/org-role-grants.js +40 -0
- package/dist/client/org-role-grants.js.map +1 -0
- package/dist/client/organizations.d.ts +52 -0
- package/dist/client/organizations.js +44 -0
- package/dist/client/organizations.js.map +1 -1
- package/dist/client/page-templates.d.ts +78 -0
- package/dist/client/page-templates.js +31 -0
- package/dist/client/page-templates.js.map +1 -0
- package/dist/client/passkey-api.d.ts +73 -0
- package/dist/client/passkey-api.js +34 -0
- package/dist/client/passkey-api.js.map +1 -0
- package/dist/client/policy-bundles.d.ts +105 -0
- package/dist/client/policy-bundles.js +38 -0
- package/dist/client/policy-bundles.js.map +1 -0
- package/dist/client/resources.d.ts +150 -0
- package/dist/client/resources.js +73 -0
- package/dist/client/resources.js.map +1 -0
- package/dist/client/risk-based-mfa.d.ts +147 -0
- package/dist/client/risk-based-mfa.js +30 -0
- package/dist/client/risk-based-mfa.js.map +1 -1
- package/dist/client/roles.d.ts +4 -0
- package/dist/client/roles.js.map +1 -1
- package/dist/client/service-connectors.d.ts +83 -0
- package/dist/client/service-connectors.js +33 -0
- package/dist/client/service-connectors.js.map +1 -0
- package/dist/client/ssf.d.ts +112 -0
- package/dist/client/ssf.js +49 -0
- package/dist/client/ssf.js.map +1 -0
- package/dist/client/sso-onboarding.d.ts +6 -0
- package/dist/client/sso-onboarding.js.map +1 -1
- package/dist/client/users.d.ts +302 -0
- package/dist/client/users.js +125 -0
- package/dist/client/users.js.map +1 -1
- package/dist/client/vault.d.ts +85 -0
- package/dist/client/vault.js +50 -0
- package/dist/client/vault.js.map +1 -0
- package/dist/client/vc.d.ts +136 -0
- package/dist/client/vc.js +43 -0
- package/dist/client/vc.js.map +1 -0
- package/dist/client/webhooks.d.ts +31 -2
- package/dist/client/webhooks.js.map +1 -1
- package/dist/client/workflows.d.ts +131 -0
- package/dist/client/workflows.js +36 -0
- package/dist/client/workflows.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/magic-did.d.ts +5 -0
- package/dist/magic-did.js +49 -0
- package/dist/magic-did.js.map +1 -0
- package/dist/migration-bridge.d.ts +9 -0
- package/dist/migration-bridge.js +28 -2
- package/dist/migration-bridge.js.map +1 -1
- package/dist/migration-presets-g3.d.ts +2 -0
- package/dist/migration-presets-g3.js +254 -0
- package/dist/migration-presets-g3.js.map +1 -0
- package/dist/migration-presets-g4/authentik.d.ts +14 -0
- package/dist/migration-presets-g4/authentik.js +37 -0
- package/dist/migration-presets-g4/authentik.js.map +1 -0
- package/dist/migration-presets-g4/fusionauth.d.ts +2 -0
- package/dist/migration-presets-g4/fusionauth.js +52 -0
- package/dist/migration-presets-g4/fusionauth.js.map +1 -0
- package/dist/migration-presets-g4/hanko.d.ts +12 -0
- package/dist/migration-presets-g4/hanko.js +46 -0
- package/dist/migration-presets-g4/hanko.js.map +1 -0
- package/dist/migration-presets-g4/keycloak.d.ts +16 -0
- package/dist/migration-presets-g4/keycloak.js +37 -0
- package/dist/migration-presets-g4/keycloak.js.map +1 -0
- package/dist/migration-presets-g4/logto.d.ts +12 -0
- package/dist/migration-presets-g4/logto.js +35 -0
- package/dist/migration-presets-g4/logto.js.map +1 -0
- package/dist/migration-presets-g4/ory.d.ts +2 -0
- package/dist/migration-presets-g4/ory.js +67 -0
- package/dist/migration-presets-g4/ory.js.map +1 -0
- package/dist/migration-presets-g4/supertokens.d.ts +13 -0
- package/dist/migration-presets-g4/supertokens.js +35 -0
- package/dist/migration-presets-g4/supertokens.js.map +1 -0
- package/dist/migration-presets-g4/zitadel.d.ts +2 -0
- package/dist/migration-presets-g4/zitadel.js +36 -0
- package/dist/migration-presets-g4/zitadel.js.map +1 -0
- package/dist/migration-presets-g4.d.ts +10 -0
- package/dist/migration-presets-g4.js +30 -0
- package/dist/migration-presets-g4.js.map +1 -0
- package/dist/migration-presets.d.ts +6 -0
- package/dist/migration-presets.js +102 -6
- package/dist/migration-presets.js.map +1 -1
- package/dist/policy-bundle.d.ts +110 -0
- package/dist/policy-bundle.js +289 -0
- package/dist/policy-bundle.js.map +1 -0
- package/dist/request-auth.d.ts +32 -0
- package/dist/request-auth.js +72 -0
- package/dist/request-auth.js.map +1 -0
- package/dist/uma.d.ts +77 -0
- package/dist/uma.js +95 -0
- package/dist/uma.js.map +1 -0
- package/dist/verify.d.ts +2 -0
- package/dist/verify.js.map +1 -1
- package/dist/workos-session.d.ts +30 -0
- package/dist/workos-session.js +123 -0
- package/dist/workos-session.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.connectionsResource = connectionsResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
const SKEW_MS = 60_000;
|
|
6
|
+
async function sha256Hex(text) {
|
|
7
|
+
const d = await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(text));
|
|
8
|
+
return [...new Uint8Array(d)].map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
9
|
+
}
|
|
10
|
+
/** Org- or user-owned provider connections and their stored tokens. */
|
|
11
|
+
function connectionsResource(request) {
|
|
12
|
+
// Tokens read by this client, reused until shortly before the provider's `expires_at`. A token with no expiry is never cached.
|
|
13
|
+
const cache = new Map();
|
|
14
|
+
const live = (t, minTtlSeconds) => !!t && t.expires_at !== null && t.expires_at - Date.now() > Math.max(minTtlSeconds * 1000, SKEW_MS);
|
|
15
|
+
const remember = (t) => {
|
|
16
|
+
if (t.expires_at !== null)
|
|
17
|
+
cache.set(t.connection_id, t);
|
|
18
|
+
else
|
|
19
|
+
cache.delete(t.connection_id);
|
|
20
|
+
return t;
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
create(body, idempotencyKey) {
|
|
24
|
+
return request({ method: 'POST', path: '/v1/connections', body, idempotencyKey });
|
|
25
|
+
},
|
|
26
|
+
list(params = {}) {
|
|
27
|
+
return request({ method: 'GET', path: '/v1/connections', query: { ...params } });
|
|
28
|
+
},
|
|
29
|
+
get(id) {
|
|
30
|
+
return request({ method: 'GET', path: `/v1/connections/${(0, request_1.enc)(id)}` });
|
|
31
|
+
},
|
|
32
|
+
update(id, body) {
|
|
33
|
+
return request({ method: 'PATCH', path: `/v1/connections/${(0, request_1.enc)(id)}`, body });
|
|
34
|
+
},
|
|
35
|
+
/** Delete a connection. Pass `{ revoke: true }` to revoke at the provider first and learn what it said. */
|
|
36
|
+
delete(id, options = {}) {
|
|
37
|
+
cache.delete(id);
|
|
38
|
+
return request({ method: 'DELETE', path: `/v1/connections/${(0, request_1.enc)(id)}`, query: options.revoke ? { revoke: 'true' } : undefined });
|
|
39
|
+
},
|
|
40
|
+
/** Start the provider authorization; send the owner to `authorization_url`. */
|
|
41
|
+
connect(id, body) {
|
|
42
|
+
return request({ method: 'POST', path: `/v1/connections/${(0, request_1.enc)(id)}/connect`, body });
|
|
43
|
+
},
|
|
44
|
+
/** Revoke at the provider and forget the stored token. The answer says what the provider said (`provider_revoked`). */
|
|
45
|
+
revoke(id) {
|
|
46
|
+
cache.delete(id);
|
|
47
|
+
return request({ method: 'POST', path: `/v1/connections/${(0, request_1.enc)(id)}/revoke` });
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* The live token for your backend (refreshed when needed). Needs the `connections:token` scope.
|
|
51
|
+
* Reads are cached in this client until shortly before `expires_at` (and a cached read is `refreshed: false`),
|
|
52
|
+
* so calling it in a hot loop costs one request per connection per token lifetime.
|
|
53
|
+
*/
|
|
54
|
+
async token(id, options = {}) {
|
|
55
|
+
const minTtl = options.minTtlSeconds ?? 0;
|
|
56
|
+
const hit = cache.get(id);
|
|
57
|
+
if (options.subject) {
|
|
58
|
+
return request({ method: 'GET', path: `/v1/connections/${(0, request_1.enc)(id)}/token`, query: { subject: options.subject, ...(options.refresh ? { refresh: 'true' } : {}) } });
|
|
59
|
+
}
|
|
60
|
+
if (!options.refresh && !options.noCache && live(hit, minTtl))
|
|
61
|
+
return { ...hit, refreshed: false };
|
|
62
|
+
const t = await request({
|
|
63
|
+
method: 'GET',
|
|
64
|
+
path: `/v1/connections/${(0, request_1.enc)(id)}/token`,
|
|
65
|
+
query: { ...(options.refresh ? { refresh: 'true' } : {}), ...(minTtl ? { min_ttl_seconds: String(minTtl) } : {}) },
|
|
66
|
+
});
|
|
67
|
+
return remember(t);
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* Call this when the provider answers 401 to a token you got from here. Pass the access token you were refused with
|
|
71
|
+
* (`staleAccessToken`): if Atlas already holds a newer one, you get it back without another call to the provider.
|
|
72
|
+
*/
|
|
73
|
+
async refreshToken(id, options = {}) {
|
|
74
|
+
cache.delete(id);
|
|
75
|
+
const t = await request({
|
|
76
|
+
method: 'POST',
|
|
77
|
+
path: `/v1/connections/${(0, request_1.enc)(id)}/token/refresh`,
|
|
78
|
+
body: { reason: options.reason ?? 'provider_401', ...(options.staleAccessToken ? { stale_token_hash: await sha256Hex(options.staleAccessToken) } : {}) },
|
|
79
|
+
});
|
|
80
|
+
return remember(t);
|
|
81
|
+
},
|
|
82
|
+
/** Read up to 100 connections' tokens in one call. Each id has its own result, so one dead connection does not fail the rest. */
|
|
83
|
+
async tokens(ids, options = {}) {
|
|
84
|
+
const r = await request({
|
|
85
|
+
method: 'POST',
|
|
86
|
+
path: '/v1/connections/tokens/batch',
|
|
87
|
+
body: { ids, ...(options.minTtlSeconds ? { min_ttl_seconds: options.minTtlSeconds } : {}) },
|
|
88
|
+
});
|
|
89
|
+
for (const item of r.data)
|
|
90
|
+
if (item.status === 'ok' && item.token)
|
|
91
|
+
remember(item.token);
|
|
92
|
+
return r;
|
|
93
|
+
},
|
|
94
|
+
/** Bulk-import existing provider refresh tokens (up to 500 per call). Needs the `connections:import` scope. */
|
|
95
|
+
importConnections(body, idempotencyKey) {
|
|
96
|
+
return request({ method: 'POST', path: '/v1/connections/import', body, idempotencyKey });
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* Export connections. Without `include_secrets` it lists metadata. With it (scope `connections:export_secrets`) the tokens
|
|
100
|
+
* come back as one compact JWE sealed to `recipient_public_key`; open it with the matching private key.
|
|
101
|
+
*/
|
|
102
|
+
exportConnections(body = {}) {
|
|
103
|
+
return request({ method: 'POST', path: '/v1/connections/export', body, headers: body.include_secrets ? { 'x-atlas-confirm': 'export-secrets' } : undefined });
|
|
104
|
+
},
|
|
105
|
+
/** Enter the credential of a non-OAuth connection (write-only; sealed in the vault, never returned). */
|
|
106
|
+
setCredentials(id, body) {
|
|
107
|
+
return request({ method: 'PUT', path: `/v1/connections/${(0, request_1.enc)(id)}/credentials`, body });
|
|
108
|
+
},
|
|
109
|
+
/** Rotate the credential; the replaced version stays valid for `overlap_seconds`. */
|
|
110
|
+
rotateCredentials(id, body) {
|
|
111
|
+
return request({ method: 'POST', path: `/v1/connections/${(0, request_1.enc)(id)}/credentials/rotate`, body });
|
|
112
|
+
},
|
|
113
|
+
/** The credential's vault versions (numbers and times, never values). */
|
|
114
|
+
secretVersions(id) {
|
|
115
|
+
return request({ method: 'GET', path: `/v1/connections/${(0, request_1.enc)(id)}/credentials/versions` });
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Read an api_key, bearer, basic, custom_header or hmac_secret credential. Needs the `connections:secret_read`
|
|
119
|
+
* scope; every read is audited. `version` is `current` (default), `previous` (inside a rotation's overlap
|
|
120
|
+
* window) or a number. With `organizationId` the connection must belong to that organization (404 otherwise).
|
|
121
|
+
*/
|
|
122
|
+
secret(id, options = {}) {
|
|
123
|
+
const path = options.organizationId ? `/v1/organizations/${(0, request_1.enc)(options.organizationId)}/connections/${(0, request_1.enc)(id)}/secret` : `/v1/connections/${(0, request_1.enc)(id)}/secret`;
|
|
124
|
+
return request({ method: 'GET', path, query: options.version === undefined ? undefined : { version: String(options.version) } });
|
|
125
|
+
},
|
|
126
|
+
/** Have Atlas sign a request with an oauth1 connection (needs `connections:sign`). */
|
|
127
|
+
oauth1Sign(id, body) {
|
|
128
|
+
return request({ method: 'POST', path: `/v1/connections/${(0, request_1.enc)(id)}/oauth1/sign`, body });
|
|
129
|
+
},
|
|
130
|
+
webhooks: {
|
|
131
|
+
/** Verify a provider webhook signature (needs `connections:webhook_verify`). */
|
|
132
|
+
verify(id, body) {
|
|
133
|
+
return request({ method: 'POST', path: `/v1/connections/${(0, request_1.enc)(id)}/webhooks/verify`, body });
|
|
134
|
+
},
|
|
135
|
+
createEndpoint(id, body) {
|
|
136
|
+
return request({ method: 'POST', path: `/v1/connections/${(0, request_1.enc)(id)}/webhook_endpoints`, body });
|
|
137
|
+
},
|
|
138
|
+
listEndpoints(id) {
|
|
139
|
+
return request({ method: 'GET', path: `/v1/connections/${(0, request_1.enc)(id)}/webhook_endpoints` });
|
|
140
|
+
},
|
|
141
|
+
updateEndpoint(id, endpointId, body) {
|
|
142
|
+
return request({ method: 'PATCH', path: `/v1/connections/${(0, request_1.enc)(id)}/webhook_endpoints/${(0, request_1.enc)(endpointId)}`, body });
|
|
143
|
+
},
|
|
144
|
+
deleteEndpoint(id, endpointId) {
|
|
145
|
+
return request({ method: 'DELETE', path: `/v1/connections/${(0, request_1.enc)(id)}/webhook_endpoints/${(0, request_1.enc)(endpointId)}` });
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
oauthClients: {
|
|
149
|
+
set(body) {
|
|
150
|
+
return request({ method: 'PUT', path: '/v1/connections/oauth_clients', body });
|
|
151
|
+
},
|
|
152
|
+
list(params = {}) {
|
|
153
|
+
return request({ method: 'GET', path: '/v1/connections/oauth_clients', query: { ...params } });
|
|
154
|
+
},
|
|
155
|
+
get(id) {
|
|
156
|
+
return request({ method: 'GET', path: `/v1/connections/oauth_clients/${(0, request_1.enc)(id)}` });
|
|
157
|
+
},
|
|
158
|
+
delete(id) {
|
|
159
|
+
return request({ method: 'DELETE', path: `/v1/connections/oauth_clients/${(0, request_1.enc)(id)}` });
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=connections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/client/connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,8 @@ export interface SecretKey extends StandardKey {
|
|
|
39
39
|
allowed_ips: string[];
|
|
40
40
|
/** Alias of `origin_allowlist`: browser origins the key may be used from (empty = any). */
|
|
41
41
|
allowed_origins: string[];
|
|
42
|
+
/** Partner admin: the organizations the key is limited to (empty = unrestricted). */
|
|
43
|
+
organization_ids: string[];
|
|
42
44
|
rotated_from: string | null;
|
|
43
45
|
/** Provisioning tags (filter the list with `metadata`). */
|
|
44
46
|
metadata?: Record<string, string | number | boolean>;
|
|
@@ -63,6 +65,10 @@ export interface CreateSecretKeyBody {
|
|
|
63
65
|
allowed_ips?: string[];
|
|
64
66
|
/** Browser origins (`https://app.example.com`, `https://*.example.com`) a request with an Origin must come from. */
|
|
65
67
|
allowed_origins?: string[];
|
|
68
|
+
/**
|
|
69
|
+
* Partner admin: limit the key to these organizations. A limited key may call only the organization routes for them.
|
|
70
|
+
*/
|
|
71
|
+
organization_ids?: string[];
|
|
66
72
|
/** The person or service responsible. Default: whoever creates the key. */
|
|
67
73
|
owner?: string | null;
|
|
68
74
|
/** `atlas` (default) or `legacy`. */
|
|
@@ -260,6 +266,8 @@ export declare function secretKeysResource(request: RequestFn): {
|
|
|
260
266
|
expires_at?: number | string | null;
|
|
261
267
|
allowed_ips?: string[];
|
|
262
268
|
allowed_origins?: string[];
|
|
269
|
+
/** `[]` lifts an organization limit. */
|
|
270
|
+
organization_ids?: string[];
|
|
263
271
|
metadata?: Record<string, string | number | boolean> | null;
|
|
264
272
|
}): Promise<SecretKey>;
|
|
265
273
|
/** New key with the same scopes; the old one works for `overlap_seconds` (default 72 h, 0 = now). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/client/credentials.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/client/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,11 @@ export interface ProfileMapping {
|
|
|
42
42
|
update_on_sign_in?: boolean;
|
|
43
43
|
}
|
|
44
44
|
export type TokenEndpointAuthMethod = 'client_secret_basic' | 'client_secret_post' | 'client_secret_jwt' | 'private_key_jwt' | 'none';
|
|
45
|
+
/** One connect-time host value: `{name}` in an endpoint URL is filled from `host_params.name`, which must match `pattern` as a whole. */
|
|
46
|
+
export interface HostParamsSchemaEntry {
|
|
47
|
+
name: string;
|
|
48
|
+
pattern: string;
|
|
49
|
+
}
|
|
45
50
|
export interface UpstreamLogoutSettings {
|
|
46
51
|
/** On Atlas sign-out, hand back the provider end-session URL to send the browser to. */
|
|
47
52
|
rp_initiated?: boolean;
|
|
@@ -88,6 +93,11 @@ export interface CustomOAuthProviderSettings {
|
|
|
88
93
|
userinfo_endpoint?: string | null;
|
|
89
94
|
jwks_uri?: string | null;
|
|
90
95
|
end_session_endpoint?: string | null;
|
|
96
|
+
revocation_endpoint?: string | null;
|
|
97
|
+
/** The connect-time `host_params` the `{name}` templates in the endpoints take (data-only providers, OAuth 2.0). */
|
|
98
|
+
host_params_schema?: HostParamsSchemaEntry[] | null;
|
|
99
|
+
/** Never a sign-in method: only connections use it. Required for endpoints with `{name}` templates. */
|
|
100
|
+
data_only?: boolean;
|
|
91
101
|
scopes?: string[];
|
|
92
102
|
scope_separator?: ' ' | ',' | '+';
|
|
93
103
|
pkce?: boolean;
|
|
@@ -125,6 +135,11 @@ export interface CustomOAuthProvider extends UpstreamUrls {
|
|
|
125
135
|
userinfo_endpoint: string | null;
|
|
126
136
|
jwks_uri: string | null;
|
|
127
137
|
end_session_endpoint: string | null;
|
|
138
|
+
/** RFC 7009 revoke endpoint; may carry `{name}` host templates. */
|
|
139
|
+
revocation_endpoint: string | null;
|
|
140
|
+
host_params_schema: HostParamsSchemaEntry[];
|
|
141
|
+
/** A data-only provider serves connections and is never a sign-in method. */
|
|
142
|
+
data_only: boolean;
|
|
128
143
|
scopes: string[];
|
|
129
144
|
scope_separator: ' ' | ',' | '+';
|
|
130
145
|
pkce: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-oauth-providers.js","sourceRoot":"","sources":["../../src/client/custom-oauth-providers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"custom-oauth-providers.js","sourceRoot":"","sources":["../../src/client/custom-oauth-providers.ts"],"names":[],"mappings":";;AAqPA,kDAcC;AAED,oEAqCC;AA1SD,uCAAgD;AAoPhD,kFAAkF;AAClF,SAAgB,mBAAmB,CAAC,OAAkB,EAAE,IAAY;IAClE,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,sFAAsF;QACtF,MAAM,CAAC,OAA8C,EAAE,EAAE,cAAuB;YAC9E,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,oDAAoD;QACpD,MAAM,CAAC,GAAW;YAChB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,iBAAiB,IAAA,aAAG,EAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACtF,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,4BAA4B,CAAC,OAAkB;IAC7D,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,8BAA8B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,CAAC;IACrE,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,IAAmC,EAAE,cAAuB;YACjE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAiC,EAAE,cAAuB;YAC3E,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,wEAAwE;QACxE,QAAQ,CAAC,IAAgD;YACvD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,CAAC;QACD;;;WAGG;QACH,qBAAqB,CAAC,IAA+B,EAAE,EAAW;YAChE,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,oDAAoD;gBACvG,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QACD,WAAW,CAAC,EAAU;YACpB,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AtlasClient } from './index';
|
|
2
|
+
type Atlas = Pick<AtlasClient, 'oauthClients'>;
|
|
3
|
+
export interface ProxyRequest {
|
|
4
|
+
method: string;
|
|
5
|
+
/** Path under your mount point: `login`, `login/accept`, `login/reject`, `consent`, `consent/accept`, `consent/reject`. */
|
|
6
|
+
path: string;
|
|
7
|
+
query: Record<string, string | undefined>;
|
|
8
|
+
body?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface ProxyResponse {
|
|
11
|
+
status: number;
|
|
12
|
+
body: unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The backend half of the browser helper `createDelegatedUiClient` (@atlasauth/js).
|
|
16
|
+
* Mount it under any route; it forwards the challenge calls to Atlas with your
|
|
17
|
+
* secret key. YOU must authenticate the visitor before letting an `accept`
|
|
18
|
+
* through: pass `authorize` to decide (return the Atlas user id for a login
|
|
19
|
+
* accept, or throw / return null to refuse).
|
|
20
|
+
*/
|
|
21
|
+
export declare function delegatedUiProxy(atlas: Atlas, opts: {
|
|
22
|
+
/** Called for `login/accept` and `consent/*`; return the Atlas user id the visitor is, or null to refuse. */
|
|
23
|
+
authorize: (req: ProxyRequest) => Promise<string | null> | string | null;
|
|
24
|
+
}): (req: ProxyRequest) => Promise<ProxyResponse>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.delegatedUiProxy = delegatedUiProxy;
|
|
4
|
+
/**
|
|
5
|
+
* The backend half of the browser helper `createDelegatedUiClient` (@atlasauth/js).
|
|
6
|
+
* Mount it under any route; it forwards the challenge calls to Atlas with your
|
|
7
|
+
* secret key. YOU must authenticate the visitor before letting an `accept`
|
|
8
|
+
* through: pass `authorize` to decide (return the Atlas user id for a login
|
|
9
|
+
* accept, or throw / return null to refuse).
|
|
10
|
+
*/
|
|
11
|
+
function delegatedUiProxy(atlas, opts) {
|
|
12
|
+
return async function handle(req) {
|
|
13
|
+
const login = req.query.login_challenge;
|
|
14
|
+
const consent = req.query.consent_challenge;
|
|
15
|
+
const body = (req.body ?? {});
|
|
16
|
+
try {
|
|
17
|
+
const route = `${req.method.toUpperCase()} ${req.path.replace(/^\/|\/$/g, '')}`;
|
|
18
|
+
if (route === 'GET login' && login)
|
|
19
|
+
return { status: 200, body: await atlas.oauthClients.loginRequests.get(login) };
|
|
20
|
+
if (route === 'GET consent' && consent)
|
|
21
|
+
return { status: 200, body: await atlas.oauthClients.consentRequests.get(consent) };
|
|
22
|
+
if (route === 'POST login/reject' && login)
|
|
23
|
+
return { status: 200, body: await atlas.oauthClients.loginRequests.reject(login, body) };
|
|
24
|
+
if (route === 'POST consent/reject' && consent)
|
|
25
|
+
return { status: 200, body: await atlas.oauthClients.consentRequests.reject(consent, body) };
|
|
26
|
+
if (route === 'POST login/accept' && login) {
|
|
27
|
+
const subject = await opts.authorize(req);
|
|
28
|
+
if (!subject)
|
|
29
|
+
return { status: 401, body: { error: { message: 'Not signed in.' } } };
|
|
30
|
+
// The subject is decided by your authorize(), never by the browser.
|
|
31
|
+
return { status: 200, body: await atlas.oauthClients.loginRequests.accept(login, { ...body, subject }) };
|
|
32
|
+
}
|
|
33
|
+
if (route === 'POST consent/accept' && consent) {
|
|
34
|
+
if (!(await opts.authorize(req)))
|
|
35
|
+
return { status: 401, body: { error: { message: 'Not signed in.' } } };
|
|
36
|
+
return { status: 200, body: await atlas.oauthClients.consentRequests.accept(consent, body) };
|
|
37
|
+
}
|
|
38
|
+
return { status: 404, body: { error: { message: 'Unknown route.' } } };
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
const status = e.status ?? 502;
|
|
42
|
+
return { status, body: { error: { message: e instanceof Error ? e.message : 'Request failed.' } } };
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=delegated-ui-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegated-ui-proxy.js","sourceRoot":"","sources":["../../src/client/delegated-ui-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
export type DesktopMfaFactor = 'push' | 'totp' | 'passkey';
|
|
3
|
+
/** Who must pass a second factor at workstation login, with which factors, and how long offline unlock lasts. */
|
|
4
|
+
export interface DesktopMfaPolicy {
|
|
5
|
+
object: 'desktop_mfa_policy';
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
applies_to: 'all' | 'selected';
|
|
8
|
+
user_ids: string[];
|
|
9
|
+
org_ids: string[];
|
|
10
|
+
allowed_factors: DesktopMfaFactor[];
|
|
11
|
+
offline_enabled: boolean;
|
|
12
|
+
offline_grace_hours: number;
|
|
13
|
+
offline_pin_required: boolean;
|
|
14
|
+
/** `account`: any passkey the user holds answers the passkey factor. `device`: only keys registered through that workstation. */
|
|
15
|
+
passkey_scope: 'account' | 'device';
|
|
16
|
+
/** Relying-party domain the agents use; null uses the application's passkey RP id. */
|
|
17
|
+
passkey_rp_id: string | null;
|
|
18
|
+
passkey_require_uv: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** A passkey registered through a workstation. It answers the desktop passkey factor and never a web sign-in. */
|
|
21
|
+
export interface DesktopPasskey {
|
|
22
|
+
object: 'desktop_passkey';
|
|
23
|
+
id: string;
|
|
24
|
+
device_id: string;
|
|
25
|
+
user_id: string;
|
|
26
|
+
name: string | null;
|
|
27
|
+
aaguid: string | null;
|
|
28
|
+
transports: string[];
|
|
29
|
+
backed_up: boolean;
|
|
30
|
+
last_used_at: number | null;
|
|
31
|
+
created_at: number;
|
|
32
|
+
}
|
|
33
|
+
export type UpdateDesktopMfaPolicyBody = Partial<Omit<DesktopMfaPolicy, 'object'>>;
|
|
34
|
+
/** A workstation running the Atlas Windows or macOS login agent. */
|
|
35
|
+
export interface DesktopDevice {
|
|
36
|
+
object: 'desktop_device';
|
|
37
|
+
id: string;
|
|
38
|
+
user_id: string;
|
|
39
|
+
device_key_id: string;
|
|
40
|
+
hostname: string | null;
|
|
41
|
+
platform: 'windows' | 'macos' | 'linux';
|
|
42
|
+
agent_version: string | null;
|
|
43
|
+
status: 'active' | 'revoked';
|
|
44
|
+
offline_pin_set: boolean;
|
|
45
|
+
/** Raised to void every offline verifier issued so far. */
|
|
46
|
+
bundle_generation: number;
|
|
47
|
+
last_seen_at: number | null;
|
|
48
|
+
revoked_at: number | null;
|
|
49
|
+
created_at: number;
|
|
50
|
+
}
|
|
51
|
+
export interface DesktopDeviceDetail extends DesktopDevice {
|
|
52
|
+
offline_bundles: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
generation: number;
|
|
55
|
+
issued_at: number;
|
|
56
|
+
expires_at: number;
|
|
57
|
+
revoked_at: number | null;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
export interface DesktopEnrolmentCode {
|
|
61
|
+
object: 'desktop_enrolment_code';
|
|
62
|
+
/** Shown once. The user types it into the workstation agent. */
|
|
63
|
+
code: string;
|
|
64
|
+
expires_at: number;
|
|
65
|
+
user_id: string;
|
|
66
|
+
}
|
|
67
|
+
/** Desktop-login MFA: policy, enrolment codes and enrolled workstations. */
|
|
68
|
+
export declare function desktopMfaResource(request: RequestFn): {
|
|
69
|
+
getPolicy(): Promise<DesktopMfaPolicy>;
|
|
70
|
+
/** Send only the fields to change. */
|
|
71
|
+
updatePolicy(body: UpdateDesktopMfaPolicyBody): Promise<DesktopMfaPolicy>;
|
|
72
|
+
/** A single-use code for a user to enrol a workstation (default 60 minutes, at most 7 days). */
|
|
73
|
+
createEnrolmentCode(body: {
|
|
74
|
+
user_id: string;
|
|
75
|
+
expires_in_minutes?: number;
|
|
76
|
+
}): Promise<DesktopEnrolmentCode>;
|
|
77
|
+
listDevices(query?: {
|
|
78
|
+
user_id?: string;
|
|
79
|
+
}): Promise<{
|
|
80
|
+
object: "list";
|
|
81
|
+
data: DesktopDevice[];
|
|
82
|
+
has_more: boolean;
|
|
83
|
+
}>;
|
|
84
|
+
getDevice(id: string): Promise<DesktopDeviceDetail>;
|
|
85
|
+
listDevicePasskeys(id: string): Promise<{
|
|
86
|
+
object: "list";
|
|
87
|
+
data: DesktopPasskey[];
|
|
88
|
+
has_more: boolean;
|
|
89
|
+
}>;
|
|
90
|
+
deleteDevicePasskey(id: string, passkeyId: string): Promise<{
|
|
91
|
+
object: "desktop_passkey";
|
|
92
|
+
id: string;
|
|
93
|
+
deleted: boolean;
|
|
94
|
+
}>;
|
|
95
|
+
/** The workstation's next call is refused and it wipes its offline cache. */
|
|
96
|
+
revokeDevice(id: string): Promise<DesktopDevice>;
|
|
97
|
+
/** Void every offline verifier without revoking the workstation; it gets a fresh one on its next sync. */
|
|
98
|
+
revokeOfflineCache(id: string): Promise<DesktopDevice>;
|
|
99
|
+
deleteDevice(id: string): Promise<{
|
|
100
|
+
object: "desktop_device";
|
|
101
|
+
id: string;
|
|
102
|
+
deleted: boolean;
|
|
103
|
+
}>;
|
|
104
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.desktopMfaResource = desktopMfaResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
/** Desktop-login MFA: policy, enrolment codes and enrolled workstations. */
|
|
6
|
+
function desktopMfaResource(request) {
|
|
7
|
+
return {
|
|
8
|
+
getPolicy() {
|
|
9
|
+
return request({ method: 'GET', path: '/v1/desktop_mfa/policy' });
|
|
10
|
+
},
|
|
11
|
+
/** Send only the fields to change. */
|
|
12
|
+
updatePolicy(body) {
|
|
13
|
+
return request({ method: 'PUT', path: '/v1/desktop_mfa/policy', body });
|
|
14
|
+
},
|
|
15
|
+
/** A single-use code for a user to enrol a workstation (default 60 minutes, at most 7 days). */
|
|
16
|
+
createEnrolmentCode(body) {
|
|
17
|
+
return request({ method: 'POST', path: '/v1/desktop_mfa/enrolment_codes', body });
|
|
18
|
+
},
|
|
19
|
+
listDevices(query = {}) {
|
|
20
|
+
return request({ method: 'GET', path: '/v1/desktop_mfa/devices', query });
|
|
21
|
+
},
|
|
22
|
+
getDevice(id) {
|
|
23
|
+
return request({ method: 'GET', path: `/v1/desktop_mfa/devices/${(0, request_1.enc)(id)}` });
|
|
24
|
+
},
|
|
25
|
+
listDevicePasskeys(id) {
|
|
26
|
+
return request({ method: 'GET', path: `/v1/desktop_mfa/devices/${(0, request_1.enc)(id)}/passkeys` });
|
|
27
|
+
},
|
|
28
|
+
deleteDevicePasskey(id, passkeyId) {
|
|
29
|
+
return request({ method: 'DELETE', path: `/v1/desktop_mfa/devices/${(0, request_1.enc)(id)}/passkeys/${(0, request_1.enc)(passkeyId)}` });
|
|
30
|
+
},
|
|
31
|
+
/** The workstation's next call is refused and it wipes its offline cache. */
|
|
32
|
+
revokeDevice(id) {
|
|
33
|
+
return request({ method: 'POST', path: `/v1/desktop_mfa/devices/${(0, request_1.enc)(id)}/revoke` });
|
|
34
|
+
},
|
|
35
|
+
/** Void every offline verifier without revoking the workstation; it gets a fresh one on its next sync. */
|
|
36
|
+
revokeOfflineCache(id) {
|
|
37
|
+
return request({ method: 'POST', path: `/v1/desktop_mfa/devices/${(0, request_1.enc)(id)}/revoke_offline_cache` });
|
|
38
|
+
},
|
|
39
|
+
deleteDevice(id) {
|
|
40
|
+
return request({ method: 'DELETE', path: `/v1/desktop_mfa/devices/${(0, request_1.enc)(id)}` });
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=desktop-mfa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-mfa.js","sourceRoot":"","sources":["../../src/client/desktop-mfa.ts"],"names":[],"mappings":";;AAqEA,gDAqCC;AA1GD,uCAAgD;AAoEhD,4EAA4E;AAC5E,SAAgB,kBAAkB,CAAC,OAAkB;IACnD,OAAO;QACL,SAAS;YACP,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,sCAAsC;QACtC,YAAY,CAAC,IAAgC;YAC3C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,gGAAgG;QAChG,mBAAmB,CAAC,IAAsD;YACxE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,WAAW,CAAC,QAA8B,EAAE;YAC1C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,SAAS,CAAC,EAAU;YAClB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,kBAAkB,CAAC,EAAU;YAC3B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,mBAAmB,CAAC,EAAU,EAAE,SAAiB;YAC/C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,aAAa,IAAA,aAAG,EAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,6EAA6E;QAC7E,YAAY,CAAC,EAAU;YACrB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,0GAA0G;QAC1G,kBAAkB,CAAC,EAAU;YAC3B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,YAAY,CAAC,EAAU;YACrB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
import type { ListPage } from './types';
|
|
3
|
+
export interface Device {
|
|
4
|
+
object: 'device';
|
|
5
|
+
id: string;
|
|
6
|
+
user_id: string | null;
|
|
7
|
+
source: string;
|
|
8
|
+
external_id: string;
|
|
9
|
+
name: string | null;
|
|
10
|
+
platform: string | null;
|
|
11
|
+
managed: boolean;
|
|
12
|
+
compliant: boolean;
|
|
13
|
+
posture: Record<string, unknown>;
|
|
14
|
+
last_reported_at: number;
|
|
15
|
+
created_at: number;
|
|
16
|
+
}
|
|
17
|
+
/** One posture report. Identify the owner with `user_id` or a verified `user_email`. */
|
|
18
|
+
export interface DeviceReportBody {
|
|
19
|
+
external_id: string;
|
|
20
|
+
/** Who reported it (`intune`, `jamf`, …); defaults to `api`. */
|
|
21
|
+
source?: string;
|
|
22
|
+
user_id?: string | null;
|
|
23
|
+
user_email?: string;
|
|
24
|
+
name?: string | null;
|
|
25
|
+
platform?: string | null;
|
|
26
|
+
managed?: boolean;
|
|
27
|
+
compliant?: boolean;
|
|
28
|
+
posture?: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
export declare function devicesResource(request: RequestFn): {
|
|
31
|
+
list(query?: {
|
|
32
|
+
user_id?: string;
|
|
33
|
+
source?: string;
|
|
34
|
+
}): Promise<ListPage<Device>>;
|
|
35
|
+
get(id: string): Promise<Device>;
|
|
36
|
+
report(body: DeviceReportBody): Promise<Device>;
|
|
37
|
+
/** Bulk posture ingestion, up to 500 reports. */
|
|
38
|
+
ingestPosture(devices: DeviceReportBody[]): Promise<ListPage<Device>>;
|
|
39
|
+
remove(id: string): Promise<{
|
|
40
|
+
object: "device";
|
|
41
|
+
id: string;
|
|
42
|
+
deleted: true;
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.devicesResource = devicesResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
function devicesResource(request) {
|
|
6
|
+
return {
|
|
7
|
+
list(query = {}) {
|
|
8
|
+
const q = new URLSearchParams(Object.entries(query).filter((e) => e[1] !== undefined)).toString();
|
|
9
|
+
return request({ method: 'GET', path: `/v1/devices${q ? `?${q}` : ''}` });
|
|
10
|
+
},
|
|
11
|
+
get(id) {
|
|
12
|
+
return request({ method: 'GET', path: `/v1/devices/${(0, request_1.enc)(id)}` });
|
|
13
|
+
},
|
|
14
|
+
report(body) {
|
|
15
|
+
return request({ method: 'PUT', path: '/v1/devices', body });
|
|
16
|
+
},
|
|
17
|
+
/** Bulk posture ingestion, up to 500 reports. */
|
|
18
|
+
ingestPosture(devices) {
|
|
19
|
+
return request({ method: 'POST', path: '/v1/device_posture', body: { devices } });
|
|
20
|
+
},
|
|
21
|
+
remove(id) {
|
|
22
|
+
return request({ method: 'DELETE', path: `/v1/devices/${(0, request_1.enc)(id)}` });
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/client/devices.ts"],"names":[],"mappings":";;AAgCA,0CAoBC;AApDD,uCAAgD;AAgChD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,IAAI,CAAC,QAA+C,EAAE;YACpD,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzH,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,IAAsB;YAC3B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,iDAAiD;QACjD,aAAa,CAAC,OAA2B;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type RequestFn } from './request';
|
|
2
2
|
import type { ListPage } from './types';
|
|
3
3
|
/** The transactional email a template drives. */
|
|
4
|
-
export type EmailTemplateName = 'verification_code' | 'magic_link' | 'password_reset' | 'password_changed' | 'account_exists_notice' | 'organization_invitation' | 'new_device_sign_in' | 'session_revoked_token_reuse' | 'account_locked' | 'account_secured' | 'team_member_added' | 'team_role_changed' | 'email_changed' | 'verification_link' | 'password_reset_link' | 'account_reactivated';
|
|
4
|
+
export type EmailTemplateName = 'verification_code' | 'magic_link' | 'password_reset' | 'password_changed' | 'account_exists_notice' | 'organization_invitation' | 'new_device_sign_in' | 'session_revoked_token_reuse' | 'account_locked' | 'account_secured' | 'team_member_added' | 'team_role_changed' | 'email_changed' | 'email_change_confirm' | 'parental_consent_request' | 'phone_changed' | 'identity_linked' | 'identity_unlinked' | 'passkey_added' | 'passkey_removed' | 'recovery_codes_regenerated' | 'factor_removed' | 'device_key_added' | 'device_key_removed' | 'uma_request_submitted' | 'risk_alert' | 'verification_link' | 'password_reset_link' | 'account_reactivated';
|
|
5
5
|
/** The customizable body of a template: a subject line and a text body. */
|
|
6
6
|
export interface EmailTemplateBody {
|
|
7
7
|
subject?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-templates.js","sourceRoot":"","sources":["../../src/client/email-templates.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"email-templates.js","sourceRoot":"","sources":["../../src/client/email-templates.ts"],"names":[],"mappings":";;AA0EA,wDAkBC;AA5FD,uCAAgD;AA0EhD,SAAgB,sBAAsB,CAAC,OAAkB;IACvD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,2EAA2E;QAC3E,OAAO,CAAC,IAAY,EAAE,OAA0B,EAAE;YAChD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,IAAA,aAAG,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,2DAA2D;QAC3D,MAAM,CAAC,IAAY,EAAE,IAAuB;YAC1C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,IAAA,aAAG,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,8BAA8B;QAC9B,MAAM,CAAC,IAAY;YACjB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,IAAA,aAAG,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;KACF,CAAC;AACJ,CAAC"}
|