@atlasauth/backend 0.23.0 → 0.25.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 +14 -0
- package/dist/auth0-session.d.ts +23 -0
- package/dist/auth0-session.js +80 -0
- package/dist/auth0-session.js.map +1 -0
- package/dist/better-auth.d.ts +4 -8
- package/dist/better-auth.js +42 -150
- package/dist/better-auth.js.map +1 -1
- package/dist/client/abac.d.ts +132 -0
- package/dist/client/abac.js +48 -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/credentials.d.ts +8 -0
- package/dist/client/credentials.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/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/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/index.d.ts +997 -2
- package/dist/client/index.js +77 -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/log-streams.d.ts +1 -1
- 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 +54 -0
- package/dist/client/mcp-gateways.js +25 -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 +286 -0
- package/dist/client/migrations.js +103 -0
- package/dist/client/migrations.js.map +1 -0
- 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 +183 -3
- package/dist/client/oauth-clients.js +64 -0
- package/dist/client/oauth-clients.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/resources.d.ts +149 -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 +111 -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 +128 -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/framework-bridge.d.ts +98 -0
- package/dist/framework-bridge.js +264 -0
- package/dist/framework-bridge.js.map +1 -0
- package/dist/framework-sessions.d.ts +147 -0
- package/dist/framework-sessions.js +544 -0
- package/dist/framework-sessions.js.map +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy-issuer-presets.d.ts +85 -0
- package/dist/legacy-issuer-presets.js +165 -0
- package/dist/legacy-issuer-presets.js.map +1 -0
- package/dist/legacy-issuers.d.ts +16 -2
- package/dist/legacy-issuers.js +16 -1
- package/dist/legacy-issuers.js.map +1 -1
- package/dist/legacy-verify.d.ts +103 -0
- package/dist/legacy-verify.js +244 -0
- package/dist/legacy-verify.js.map +1 -0
- 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 +162 -0
- package/dist/migration-bridge.js +354 -0
- package/dist/migration-bridge.js.map +1 -0
- 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 +156 -0
- package/dist/migration-presets.js +536 -0
- package/dist/migration-presets.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/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 +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
export interface AppPreset {
|
|
3
|
+
object: 'app_preset';
|
|
4
|
+
id: string;
|
|
5
|
+
protocol: 'saml' | 'oidc';
|
|
6
|
+
name: string;
|
|
7
|
+
category: string;
|
|
8
|
+
icon_domain: string;
|
|
9
|
+
/** False: the values could not be confirmed in the vendor's docs; check them against the app's SSO settings. */
|
|
10
|
+
verified: boolean;
|
|
11
|
+
/** The vendor SSO documentation the values come from. */
|
|
12
|
+
source_url: string | null;
|
|
13
|
+
params: Array<{
|
|
14
|
+
key: string;
|
|
15
|
+
label: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/** Who may open an installed app; `assigned` admits only the listed users, groups, organizations and roles. */
|
|
19
|
+
export interface AppAssignment {
|
|
20
|
+
mode: 'everyone' | 'assigned';
|
|
21
|
+
user_ids?: string[];
|
|
22
|
+
/** Instance group ids or slugs (members of child groups count). */
|
|
23
|
+
groups?: string[];
|
|
24
|
+
organizations?: string[];
|
|
25
|
+
/** Organization role keys. */
|
|
26
|
+
roles?: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface InstalledApp {
|
|
29
|
+
object: 'installed_app';
|
|
30
|
+
id: string;
|
|
31
|
+
protocol: 'saml' | 'oidc';
|
|
32
|
+
name: string;
|
|
33
|
+
preset_id: string | null;
|
|
34
|
+
entity_id: string | null;
|
|
35
|
+
acs_url: string | null;
|
|
36
|
+
client_id: string | null;
|
|
37
|
+
launch_url: string | null;
|
|
38
|
+
allowed_email_domains: string[];
|
|
39
|
+
assignment: Required<AppAssignment>;
|
|
40
|
+
}
|
|
41
|
+
export interface InstallAppBody {
|
|
42
|
+
params?: Record<string, string>;
|
|
43
|
+
installed_id?: string;
|
|
44
|
+
name?: string;
|
|
45
|
+
allowed_email_domains?: string[];
|
|
46
|
+
assignment?: AppAssignment;
|
|
47
|
+
}
|
|
48
|
+
/** The app catalog: SAML and OpenID Connect presets, installs, and who may open each app. */
|
|
49
|
+
export declare function appCatalogResource(request: RequestFn): {
|
|
50
|
+
/** `GET /v1/app_catalog` — every preset with its protocol and parameters. */
|
|
51
|
+
presets(): Promise<{
|
|
52
|
+
object: "list";
|
|
53
|
+
data: AppPreset[];
|
|
54
|
+
}>;
|
|
55
|
+
/** `GET /v1/app_catalog/installed` */
|
|
56
|
+
installed(): Promise<{
|
|
57
|
+
object: "list";
|
|
58
|
+
data: InstalledApp[];
|
|
59
|
+
}>;
|
|
60
|
+
/** `POST /v1/app_catalog/:presetId/install` — an OIDC app's `client_secret` is in this response only. */
|
|
61
|
+
install(presetId: string, body?: InstallAppBody, idempotencyKey?: string): Promise<InstalledApp & {
|
|
62
|
+
client_secret?: string;
|
|
63
|
+
redirect_uri?: string;
|
|
64
|
+
issuer?: string;
|
|
65
|
+
}>;
|
|
66
|
+
/** `PATCH /v1/app_catalog/installed/:id` — name, allowed_email_domains, assignment. */
|
|
67
|
+
update(id: string, body: Pick<InstallAppBody, "name" | "allowed_email_domains" | "assignment">): Promise<InstalledApp>;
|
|
68
|
+
/** `DELETE /v1/app_catalog/installed/:id` */
|
|
69
|
+
uninstall(id: string): Promise<{
|
|
70
|
+
object: "installed_app";
|
|
71
|
+
id: string;
|
|
72
|
+
deleted: true;
|
|
73
|
+
}>;
|
|
74
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.appCatalogResource = appCatalogResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
/** The app catalog: SAML and OpenID Connect presets, installs, and who may open each app. */
|
|
6
|
+
function appCatalogResource(request) {
|
|
7
|
+
return {
|
|
8
|
+
/** `GET /v1/app_catalog` — every preset with its protocol and parameters. */
|
|
9
|
+
presets() {
|
|
10
|
+
return request({ method: 'GET', path: '/v1/app_catalog' });
|
|
11
|
+
},
|
|
12
|
+
/** `GET /v1/app_catalog/installed` */
|
|
13
|
+
installed() {
|
|
14
|
+
return request({ method: 'GET', path: '/v1/app_catalog/installed' });
|
|
15
|
+
},
|
|
16
|
+
/** `POST /v1/app_catalog/:presetId/install` — an OIDC app's `client_secret` is in this response only. */
|
|
17
|
+
install(presetId, body = {}, idempotencyKey) {
|
|
18
|
+
return request({ method: 'POST', path: `/v1/app_catalog/${(0, request_1.enc)(presetId)}/install`, body, idempotencyKey });
|
|
19
|
+
},
|
|
20
|
+
/** `PATCH /v1/app_catalog/installed/:id` — name, allowed_email_domains, assignment. */
|
|
21
|
+
update(id, body) {
|
|
22
|
+
return request({ method: 'PATCH', path: `/v1/app_catalog/installed/${(0, request_1.enc)(id)}`, body });
|
|
23
|
+
},
|
|
24
|
+
/** `DELETE /v1/app_catalog/installed/:id` */
|
|
25
|
+
uninstall(id) {
|
|
26
|
+
return request({ method: 'DELETE', path: `/v1/app_catalog/installed/${(0, request_1.enc)(id)}` });
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=app-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-catalog.js","sourceRoot":"","sources":["../../src/client/app-catalog.ts"],"names":[],"mappings":";;AAkDA,gDAuBC;AAzED,uCAAgD;AAiDhD,6FAA6F;AAC7F,SAAgB,kBAAkB,CAAC,OAAkB;IACnD,OAAO;QACL,6EAA6E;QAC7E,OAAO;YACL,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,sCAAsC;QACtC,SAAS;YACP,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,yGAAyG;QACzG,OAAO,CAAC,QAAgB,EAAE,OAAuB,EAAE,EAAE,cAAuB;YAC1E,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,uFAAuF;QACvF,MAAM,CAAC,EAAU,EAAE,IAA2E;YAC5F,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,6CAA6C;QAC7C,SAAS,CAAC,EAAU;YAClB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -70,4 +70,14 @@ export interface UpdateAttackProtectionBody {
|
|
|
70
70
|
export declare function attackProtectionResource(request: RequestFn): {
|
|
71
71
|
get(): Promise<AttackProtection>;
|
|
72
72
|
update(body: UpdateAttackProtectionBody): Promise<AttackProtection>;
|
|
73
|
+
/** Store the Play Integrity response-decryption key (base64 AES-256) for app attestation. Write-only. */
|
|
74
|
+
/** Store the Play Integrity decryption key (default) or, with kind 'devicecheck', the Apple DeviceCheck .p8 key. Write-only. */
|
|
75
|
+
setAppAttestationSecret(secret: string, kind?: "play_integrity" | "devicecheck"): Promise<{
|
|
76
|
+
object: "app_attestation_secret";
|
|
77
|
+
set: true;
|
|
78
|
+
}>;
|
|
79
|
+
removeAppAttestationSecret(kind?: "play_integrity" | "devicecheck"): Promise<{
|
|
80
|
+
object: "app_attestation_secret";
|
|
81
|
+
deleted: true;
|
|
82
|
+
}>;
|
|
73
83
|
};
|
|
@@ -9,6 +9,14 @@ function attackProtectionResource(request) {
|
|
|
9
9
|
update(body) {
|
|
10
10
|
return request({ method: 'PATCH', path: '/v1/attack_protection', body });
|
|
11
11
|
},
|
|
12
|
+
/** Store the Play Integrity response-decryption key (base64 AES-256) for app attestation. Write-only. */
|
|
13
|
+
/** Store the Play Integrity decryption key (default) or, with kind 'devicecheck', the Apple DeviceCheck .p8 key. Write-only. */
|
|
14
|
+
setAppAttestationSecret(secret, kind = 'play_integrity') {
|
|
15
|
+
return request({ method: 'PUT', path: '/v1/attack_protection/app_attestation_secret', body: { secret, kind } });
|
|
16
|
+
},
|
|
17
|
+
removeAppAttestationSecret(kind = 'play_integrity') {
|
|
18
|
+
return request({ method: 'DELETE', path: '/v1/attack_protection/app_attestation_secret', query: { kind } });
|
|
19
|
+
},
|
|
12
20
|
};
|
|
13
21
|
}
|
|
14
22
|
//# sourceMappingURL=attack-protection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attack-protection.js","sourceRoot":"","sources":["../../src/client/attack-protection.ts"],"names":[],"mappings":";;AA8DA,
|
|
1
|
+
{"version":3,"file":"attack-protection.js","sourceRoot":"","sources":["../../src/client/attack-protection.ts"],"names":[],"mappings":";;AA8DA,4DAiBC;AAjBD,SAAgB,wBAAwB,CAAC,OAAkB;IACzD,OAAO;QACL,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,CAAC,IAAgC;YACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,yGAAyG;QACzG,gIAAgI;QAChI,uBAAuB,CAAC,MAAc,EAAE,OAAyC,gBAAgB;YAC/F,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,8CAA8C,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,0BAA0B,CAAC,OAAyC,gBAAgB;YAClF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,8CAA8C,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -25,6 +25,8 @@ export interface CustomAuditEvent {
|
|
|
25
25
|
/** When it happened in your system (epoch ms). */
|
|
26
26
|
occurred_at: number;
|
|
27
27
|
metadata: unknown;
|
|
28
|
+
/** The registered schema version this event satisfied; null when its action has no schema. */
|
|
29
|
+
schema_version?: number | null;
|
|
28
30
|
/** When Atlas received it (epoch ms). */
|
|
29
31
|
created_at: number;
|
|
30
32
|
}
|
|
@@ -45,6 +47,8 @@ export interface CreateCustomAuditEventBody {
|
|
|
45
47
|
occurred_at?: number;
|
|
46
48
|
/** Non-secret structured context. */
|
|
47
49
|
metadata?: Record<string, unknown>;
|
|
50
|
+
/** Pin to a registered schema version; default the latest active one for the action. */
|
|
51
|
+
schema_version?: number;
|
|
48
52
|
}
|
|
49
53
|
/** Shared filters of the list and export endpoints. */
|
|
50
54
|
export interface CustomAuditEventFilters {
|
|
@@ -101,3 +105,70 @@ export declare function auditEventsResource(request: RequestFn): {
|
|
|
101
105
|
deleted: number;
|
|
102
106
|
}>;
|
|
103
107
|
};
|
|
108
|
+
/** A registered audit event schema: what an action's events must look like. */
|
|
109
|
+
export interface AuditEventSchema {
|
|
110
|
+
object: 'audit_event_schema';
|
|
111
|
+
id: string;
|
|
112
|
+
action: string;
|
|
113
|
+
version: number;
|
|
114
|
+
description: string | null;
|
|
115
|
+
/** Allowed `target.type` values (empty = any). */
|
|
116
|
+
target_types: string[];
|
|
117
|
+
/** Allowed `actor.type` values (empty = any). */
|
|
118
|
+
actor_types: string[];
|
|
119
|
+
/** A JSON Schema the event's metadata must satisfy. */
|
|
120
|
+
metadata_schema: Record<string, unknown>;
|
|
121
|
+
status: 'active' | 'deprecated';
|
|
122
|
+
created_at: number;
|
|
123
|
+
}
|
|
124
|
+
export interface RegisterAuditEventSchemaBody {
|
|
125
|
+
action: string;
|
|
126
|
+
/** Defaults to the next version for the action; a version is immutable. */
|
|
127
|
+
version?: number;
|
|
128
|
+
description?: string;
|
|
129
|
+
target_types?: string[];
|
|
130
|
+
actor_types?: string[];
|
|
131
|
+
metadata_schema?: Record<string, unknown>;
|
|
132
|
+
}
|
|
133
|
+
export declare function auditEventSchemasResource(request: RequestFn): {
|
|
134
|
+
list(): Promise<{
|
|
135
|
+
object: "list";
|
|
136
|
+
data: AuditEventSchema[];
|
|
137
|
+
has_more: false;
|
|
138
|
+
}>;
|
|
139
|
+
get(id: string): Promise<AuditEventSchema>;
|
|
140
|
+
/** Events with this action are validated against it from now on. Change a schema by registering a new version. */
|
|
141
|
+
register(body: RegisterAuditEventSchemaBody): Promise<AuditEventSchema>;
|
|
142
|
+
update(id: string, body: {
|
|
143
|
+
description?: string | null;
|
|
144
|
+
status?: "active" | "deprecated";
|
|
145
|
+
}): Promise<AuditEventSchema>;
|
|
146
|
+
delete(id: string): Promise<{
|
|
147
|
+
object: "audit_event_schema";
|
|
148
|
+
id: string;
|
|
149
|
+
deleted: true;
|
|
150
|
+
}>;
|
|
151
|
+
/** Blank fields of one event (`actor_id`, `target_id`, `target_name`, `metadata.<path>`); logged, never deleted. */
|
|
152
|
+
redact(eventId: string, body: {
|
|
153
|
+
fields: string[];
|
|
154
|
+
reason: string;
|
|
155
|
+
}): Promise<{
|
|
156
|
+
object: "audit_event_redaction";
|
|
157
|
+
event_id: string;
|
|
158
|
+
redacted: string[];
|
|
159
|
+
unchanged: string[];
|
|
160
|
+
reason: string;
|
|
161
|
+
}>;
|
|
162
|
+
redactions(eventId: string): Promise<{
|
|
163
|
+
object: "list";
|
|
164
|
+
data: Array<{
|
|
165
|
+
id: string;
|
|
166
|
+
event_id: string;
|
|
167
|
+
fields: string[];
|
|
168
|
+
reason: string;
|
|
169
|
+
redacted_by: string | null;
|
|
170
|
+
created_at: number;
|
|
171
|
+
}>;
|
|
172
|
+
has_more: false;
|
|
173
|
+
}>;
|
|
174
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.auditEventsResource = auditEventsResource;
|
|
4
|
+
exports.auditEventSchemasResource = auditEventSchemasResource;
|
|
4
5
|
function auditEventsResource(request) {
|
|
5
6
|
return {
|
|
6
7
|
create(body, idempotencyKey) {
|
|
@@ -40,4 +41,31 @@ function auditEventsResource(request) {
|
|
|
40
41
|
},
|
|
41
42
|
};
|
|
42
43
|
}
|
|
44
|
+
function auditEventSchemasResource(request) {
|
|
45
|
+
return {
|
|
46
|
+
list() {
|
|
47
|
+
return request({ method: 'GET', path: '/v1/audit_event_schemas' });
|
|
48
|
+
},
|
|
49
|
+
get(id) {
|
|
50
|
+
return request({ method: 'GET', path: `/v1/audit_event_schemas/${encodeURIComponent(id)}` });
|
|
51
|
+
},
|
|
52
|
+
/** Events with this action are validated against it from now on. Change a schema by registering a new version. */
|
|
53
|
+
register(body) {
|
|
54
|
+
return request({ method: 'POST', path: '/v1/audit_event_schemas', body });
|
|
55
|
+
},
|
|
56
|
+
update(id, body) {
|
|
57
|
+
return request({ method: 'PATCH', path: `/v1/audit_event_schemas/${encodeURIComponent(id)}`, body });
|
|
58
|
+
},
|
|
59
|
+
delete(id) {
|
|
60
|
+
return request({ method: 'DELETE', path: `/v1/audit_event_schemas/${encodeURIComponent(id)}` });
|
|
61
|
+
},
|
|
62
|
+
/** Blank fields of one event (`actor_id`, `target_id`, `target_name`, `metadata.<path>`); logged, never deleted. */
|
|
63
|
+
redact(eventId, body) {
|
|
64
|
+
return request({ method: 'POST', path: `/v1/audit_events/${encodeURIComponent(eventId)}/redact`, body });
|
|
65
|
+
},
|
|
66
|
+
redactions(eventId) {
|
|
67
|
+
return request({ method: 'GET', path: `/v1/audit_events/${encodeURIComponent(eventId)}/redactions` });
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
43
71
|
//# sourceMappingURL=audit-events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-events.js","sourceRoot":"","sources":["../../src/client/audit-events.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"audit-events.js","sourceRoot":"","sources":["../../src/client/audit-events.ts"],"names":[],"mappings":";;AAwEA,kDA2CC;AA6BD,8DA0BC;AAlGD,SAAgB,mBAAmB,CAAC,OAAkB;IACpD,OAAO;QACL,MAAM,CAAC,IAAgC,EAAE,cAAuB;YAC9D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,kFAAkF;QAClF,WAAW,CACT,MAAoC,EACpC,cAAuB;YAEvB,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,EAAE,MAAM,EAAE;gBAChB,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,sCAAsC;QACtC,IAAI,CAAC,SAAsC,EAAE;YAC3C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;QACD;;;WAGG;QACH,MAAM,CAAC,SAAwC,EAAE;YAC/C,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,yBAAyB;gBAC/B,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE;gBACpB,GAAG,EAAE,IAAI;aACV,CAAC,CAAC;QACL,CAAC;QACD;;;WAGG;QACH,SAAS,CACP,SAAwD,EAAE;YAE1D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;KACF,CAAC;AACJ,CAAC;AA6BD,SAAgB,yBAAyB,CAAC,OAAkB;IAC1D,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,kHAAkH;QAClH,QAAQ,CAAC,IAAkC;YACzC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAuE;YACxF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,2BAA2B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,oHAAoH;QACpH,MAAM,CAAC,OAAe,EAAE,IAA0C;YAChE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,UAAU,CAAC,OAAe;YACxB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxG,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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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"}
|
|
@@ -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":";;AAuBA,4CAiCC;AAxCD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,KAAY,EACZ,IAGC;IAED,OAAO,KAAK,UAAU,MAAM,CAAC,GAAiB;QAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;YAChF,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpH,IAAI,KAAK,KAAK,aAAa,IAAI,OAAO;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5H,IAAI,KAAK,KAAK,mBAAmB,IAAI,KAAK;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACrI,IAAI,KAAK,KAAK,qBAAqB,IAAI,OAAO;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7I,IAAI,KAAK,KAAK,mBAAmB,IAAI,KAAK,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;gBACrF,oEAAoE;gBACpE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAyB,CAAC,EAAE,CAAC;YAClI,CAAC;YACD,IAAI,KAAK,KAAK,qBAAqB,IAAI,OAAO,EAAE,CAAC;gBAC/C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;gBACzG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC/F,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,MAAM,GAAI,CAAyB,CAAC,MAAM,IAAI,GAAG,CAAC;YACxD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC;QACtG,CAAC;IACH,CAAC,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' | '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":";;AAyEA,wDAkBC;AA3FD,uCAAgD;AAyEhD,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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
import type { CursorParams } from './types';
|
|
3
|
+
export type FeatureFlagType = 'boolean' | 'string' | 'int' | 'json';
|
|
4
|
+
export type FeatureFlagValue = boolean | string | number | Record<string, unknown> | unknown[];
|
|
5
|
+
/** Who a flag is evaluated for. `user_id` (else `org_id`) seeds percentage rollouts. */
|
|
6
|
+
export interface FeatureFlagSubject {
|
|
7
|
+
user_id?: string | null;
|
|
8
|
+
org_id?: string | null;
|
|
9
|
+
plan?: string | null;
|
|
10
|
+
}
|
|
11
|
+
/** Every given `match` dimension must hold; an empty rule matches everyone. */
|
|
12
|
+
export interface FeatureFlagRule {
|
|
13
|
+
match?: {
|
|
14
|
+
user_ids?: string[];
|
|
15
|
+
org_ids?: string[];
|
|
16
|
+
plans?: string[];
|
|
17
|
+
};
|
|
18
|
+
/** 0–100: the share of matching subjects, stable per flag and subject. */
|
|
19
|
+
percentage?: number;
|
|
20
|
+
value: FeatureFlagValue;
|
|
21
|
+
}
|
|
22
|
+
export interface FeatureFlag {
|
|
23
|
+
object: 'feature_flag';
|
|
24
|
+
id: string;
|
|
25
|
+
key: string;
|
|
26
|
+
type: FeatureFlagType;
|
|
27
|
+
description: string | null;
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
default_value: FeatureFlagValue;
|
|
30
|
+
/** Returned while the flag is switched off. */
|
|
31
|
+
off_value: FeatureFlagValue;
|
|
32
|
+
rules: FeatureFlagRule[];
|
|
33
|
+
created_at: number;
|
|
34
|
+
updated_at: number;
|
|
35
|
+
}
|
|
36
|
+
export interface CreateFeatureFlagBody {
|
|
37
|
+
key: string;
|
|
38
|
+
type: FeatureFlagType;
|
|
39
|
+
default_value: FeatureFlagValue;
|
|
40
|
+
description?: string;
|
|
41
|
+
enabled?: boolean;
|
|
42
|
+
off_value?: FeatureFlagValue;
|
|
43
|
+
rules?: FeatureFlagRule[];
|
|
44
|
+
}
|
|
45
|
+
export type UpdateFeatureFlagBody = Partial<Omit<CreateFeatureFlagBody, 'key' | 'type'>>;
|
|
46
|
+
export interface FeatureFlagEvaluation {
|
|
47
|
+
object: 'feature_flag_evaluation';
|
|
48
|
+
subject: FeatureFlagSubject;
|
|
49
|
+
flags: Record<string, {
|
|
50
|
+
value: FeatureFlagValue;
|
|
51
|
+
reason: string;
|
|
52
|
+
}>;
|
|
53
|
+
}
|
|
54
|
+
export interface AssignEntitlementsBody {
|
|
55
|
+
plan?: string | null;
|
|
56
|
+
features?: string[] | null;
|
|
57
|
+
limits?: Record<string, unknown> | null;
|
|
58
|
+
/** Epoch ms; omit for open-ended. */
|
|
59
|
+
expires_at?: number | null;
|
|
60
|
+
}
|
|
61
|
+
export interface AssignedEntitlements {
|
|
62
|
+
object: 'assigned_entitlements';
|
|
63
|
+
subject_type: 'user' | 'org';
|
|
64
|
+
subject_id: string;
|
|
65
|
+
plan: string | null;
|
|
66
|
+
features: string[] | null;
|
|
67
|
+
limits: Record<string, unknown> | null;
|
|
68
|
+
expires_at: number | null;
|
|
69
|
+
}
|
|
70
|
+
/** Evaluate a flag definition for a subject (first matching in-bucket rule wins, else the default). */
|
|
71
|
+
export declare function evaluateFeatureFlag(flag: FeatureFlag, subject: FeatureFlagSubject): FeatureFlagValue;
|
|
72
|
+
export declare function flagsResource(request: RequestFn, cacheTtlMs?: number): {
|
|
73
|
+
create(body: CreateFeatureFlagBody, idempotencyKey?: string): Promise<FeatureFlag>;
|
|
74
|
+
/** `starting_after` is the key of the last flag of the previous page. */
|
|
75
|
+
list(params?: CursorParams): Promise<{
|
|
76
|
+
object: "list";
|
|
77
|
+
data: FeatureFlag[];
|
|
78
|
+
has_more: boolean;
|
|
79
|
+
}>;
|
|
80
|
+
retrieve(key: string): Promise<FeatureFlag>;
|
|
81
|
+
update(key: string, body: UpdateFeatureFlagBody): Promise<FeatureFlag>;
|
|
82
|
+
delete(key: string): Promise<{
|
|
83
|
+
object: "feature_flag";
|
|
84
|
+
id: string;
|
|
85
|
+
key: string;
|
|
86
|
+
deleted: boolean;
|
|
87
|
+
}>;
|
|
88
|
+
/** Server-side evaluation; `plan` defaults to the org's (else the user's) resolved plan. */
|
|
89
|
+
evaluate(body: FeatureFlagSubject & {
|
|
90
|
+
keys?: string[];
|
|
91
|
+
}): Promise<FeatureFlagEvaluation>;
|
|
92
|
+
/** Local evaluation against cached definitions. `plan` is not looked up here — pass it for plan rules. */
|
|
93
|
+
get<T extends FeatureFlagValue>(key: string, subject: FeatureFlagSubject, fallback: T): Promise<T>;
|
|
94
|
+
/** True only for a boolean flag that evaluates to true; an unknown flag is false. */
|
|
95
|
+
isEnabled(key: string, subject?: FeatureFlagSubject): Promise<boolean>;
|
|
96
|
+
/** Drop the cached definitions (e.g. after changing a flag). */
|
|
97
|
+
invalidate(): void;
|
|
98
|
+
/** Replace the entitlements assigned to an organization (an empty body clears them). */
|
|
99
|
+
assignOrganizationEntitlements(orgId: string, body: AssignEntitlementsBody): Promise<AssignedEntitlements>;
|
|
100
|
+
assignUserEntitlements(userId: string, body: AssignEntitlementsBody): Promise<AssignedEntitlements>;
|
|
101
|
+
};
|