@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,100 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
import type { ListPage } from './types';
|
|
3
|
+
export type AccessPolicyStage = 'sign_in' | 'authorize' | 'token';
|
|
4
|
+
export type AccessPolicyGrantType = 'allow' | 'block' | 'require_mfa' | 'require_acr' | 'require_policy_acceptance' | 'require_action';
|
|
5
|
+
export interface AccessPolicyGrant {
|
|
6
|
+
type: AccessPolicyGrantType;
|
|
7
|
+
/** require_acr: the acr; require_policy_acceptance: the policy key; require_action: the action name. */
|
|
8
|
+
value?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Every present condition must match; an absent one matches anything. */
|
|
11
|
+
export interface AccessPolicyConditions {
|
|
12
|
+
applications?: string[];
|
|
13
|
+
userIds?: string[];
|
|
14
|
+
groups?: string[];
|
|
15
|
+
orgs?: string[];
|
|
16
|
+
roles?: string[];
|
|
17
|
+
networkZones?: {
|
|
18
|
+
include?: string[];
|
|
19
|
+
exclude?: string[];
|
|
20
|
+
};
|
|
21
|
+
countries?: string[];
|
|
22
|
+
riskLevels?: Array<'low' | 'medium' | 'high'>;
|
|
23
|
+
deviceTrust?: Array<'trusted' | 'untrusted' | 'unknown'>;
|
|
24
|
+
authMethods?: string[];
|
|
25
|
+
timeWindow?: {
|
|
26
|
+
days?: number[];
|
|
27
|
+
start: string;
|
|
28
|
+
end: string;
|
|
29
|
+
timezone?: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** A conditional-access policy, evaluated at sign-in, /authorize and token issuance. */
|
|
33
|
+
export interface AccessPolicy {
|
|
34
|
+
object: 'access_policy';
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
description: string | null;
|
|
38
|
+
enabled: boolean;
|
|
39
|
+
priority: number;
|
|
40
|
+
stages: AccessPolicyStage[];
|
|
41
|
+
conditions: AccessPolicyConditions;
|
|
42
|
+
grants: AccessPolicyGrant[];
|
|
43
|
+
created_at: number;
|
|
44
|
+
updated_at: number;
|
|
45
|
+
}
|
|
46
|
+
export interface CreateAccessPolicyBody {
|
|
47
|
+
name: string;
|
|
48
|
+
description?: string | null;
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
priority?: number;
|
|
51
|
+
stages?: AccessPolicyStage[];
|
|
52
|
+
conditions?: AccessPolicyConditions;
|
|
53
|
+
grants: AccessPolicyGrant[];
|
|
54
|
+
}
|
|
55
|
+
export type UpdateAccessPolicyBody = Partial<CreateAccessPolicyBody>;
|
|
56
|
+
export interface SimulateAccessBody {
|
|
57
|
+
policy_id?: string;
|
|
58
|
+
stage?: AccessPolicyStage;
|
|
59
|
+
ip?: string;
|
|
60
|
+
application_id?: string;
|
|
61
|
+
user_id?: string;
|
|
62
|
+
groups?: string[];
|
|
63
|
+
orgs?: string[];
|
|
64
|
+
roles?: string[];
|
|
65
|
+
country?: string;
|
|
66
|
+
risk_level?: 'low' | 'medium' | 'high';
|
|
67
|
+
device_trust?: 'trusted' | 'untrusted' | 'unknown';
|
|
68
|
+
auth_methods?: string[];
|
|
69
|
+
mfa_verified?: boolean;
|
|
70
|
+
acr?: string[];
|
|
71
|
+
/** Epoch ms; default now. */
|
|
72
|
+
now?: number;
|
|
73
|
+
}
|
|
74
|
+
export interface AccessPolicySimulation {
|
|
75
|
+
object: 'access_policy_simulation';
|
|
76
|
+
decision: 'allow' | 'block' | 'step_up';
|
|
77
|
+
matched: string[];
|
|
78
|
+
blocked_by: string | null;
|
|
79
|
+
requirements: {
|
|
80
|
+
mfa: boolean;
|
|
81
|
+
acr: string[];
|
|
82
|
+
policy_acceptance: string[];
|
|
83
|
+
actions: string[];
|
|
84
|
+
};
|
|
85
|
+
unmet: string[];
|
|
86
|
+
}
|
|
87
|
+
/** CRUD over conditional-access policies, plus a what-if `simulate`. */
|
|
88
|
+
export declare function accessPoliciesResource(request: RequestFn): {
|
|
89
|
+
list(): Promise<ListPage<AccessPolicy>>;
|
|
90
|
+
get(id: string): Promise<AccessPolicy>;
|
|
91
|
+
create(body: CreateAccessPolicyBody, idempotencyKey?: string): Promise<AccessPolicy>;
|
|
92
|
+
update(id: string, body: UpdateAccessPolicyBody): Promise<AccessPolicy>;
|
|
93
|
+
delete(id: string): Promise<{
|
|
94
|
+
object: "access_policy";
|
|
95
|
+
id: string;
|
|
96
|
+
deleted: true;
|
|
97
|
+
}>;
|
|
98
|
+
/** What would the policies decide for this request? */
|
|
99
|
+
simulate(body: SimulateAccessBody): Promise<AccessPolicySimulation>;
|
|
100
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accessPoliciesResource = accessPoliciesResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
/** CRUD over conditional-access policies, plus a what-if `simulate`. */
|
|
6
|
+
function accessPoliciesResource(request) {
|
|
7
|
+
return {
|
|
8
|
+
list() {
|
|
9
|
+
return request({ method: 'GET', path: '/v1/access_policies' });
|
|
10
|
+
},
|
|
11
|
+
get(id) {
|
|
12
|
+
return request({ method: 'GET', path: `/v1/access_policies/${(0, request_1.enc)(id)}` });
|
|
13
|
+
},
|
|
14
|
+
create(body, idempotencyKey) {
|
|
15
|
+
return request({ method: 'POST', path: '/v1/access_policies', body, idempotencyKey });
|
|
16
|
+
},
|
|
17
|
+
update(id, body) {
|
|
18
|
+
return request({ method: 'PATCH', path: `/v1/access_policies/${(0, request_1.enc)(id)}`, body });
|
|
19
|
+
},
|
|
20
|
+
delete(id) {
|
|
21
|
+
return request({ method: 'DELETE', path: `/v1/access_policies/${(0, request_1.enc)(id)}` });
|
|
22
|
+
},
|
|
23
|
+
/** What would the policies decide for this request? */
|
|
24
|
+
simulate(body) {
|
|
25
|
+
return request({ method: 'POST', path: '/v1/access_policies/simulate', body });
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=access-policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-policies.js","sourceRoot":"","sources":["../../src/client/access-policies.ts"],"names":[],"mappings":";;AAmFA,wDAsBC;AAzGD,uCAAgD;AAkFhD,wEAAwE;AACxE,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,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,IAA4B,EAAE,cAAuB;YAC1D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAA4B;YAC7C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,uDAAuD;QACvD,QAAQ,CAAC,IAAwB;YAC/B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -7,7 +7,7 @@ import type { ListPage } from './types';
|
|
|
7
7
|
* actions up to date, and publish your own templates for review.
|
|
8
8
|
*/
|
|
9
9
|
/** Every trigger a template can target (a superset of the classic three). */
|
|
10
|
-
export type GalleryTrigger = ActionTrigger
|
|
10
|
+
export type GalleryTrigger = ActionTrigger;
|
|
11
11
|
/** A secret a template reads, declared by NAME; values are never part of a template. */
|
|
12
12
|
export interface ActionTemplateSecret {
|
|
13
13
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-gallery.js","sourceRoot":"","sources":["../../src/client/action-gallery.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"action-gallery.js","sourceRoot":"","sources":["../../src/client/action-gallery.ts"],"names":[],"mappings":"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"}
|
package/dist/client/actions.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type RequestFn } from './request';
|
|
2
2
|
import type { ListPage } from './types';
|
|
3
3
|
/** The fixed point in the auth pipeline an action runs at. */
|
|
4
|
-
export type ActionTrigger = 'post_login' | 'pre_user_registration' | 'post_user_registration';
|
|
4
|
+
export type ActionTrigger = 'post_login' | 'pre_user_registration' | 'post_user_registration' | 'pre_organization_create' | 'pre_member_add' | 'pre_invitation_create' | 'pre_authentication' | 'pre_token' | 'post_token_exchange' | 'pre_user_update' | 'mfa_verification_attempt' | 'password_verification_attempt' | 'account_link_decision' | 'billing_plan_selected' | 'post_change_password' | 'post_password_reset' | 'post_user_update' | 'post_email_verified' | 'post_mfa_enroll' | 'post_mfa_remove' | 'post_logout' | 'org_membership_changed' | 'custom_challenge_create' | 'custom_challenge_verify' | 'workflow_step';
|
|
5
5
|
/**
|
|
6
6
|
* Tenant code run in the hardened isolate at a trigger. Secret VALUES are
|
|
7
7
|
* write-only and never returned — a read reports only `secret_names`. Timestamps
|
|
@@ -12,27 +12,96 @@ export interface Action {
|
|
|
12
12
|
id: string;
|
|
13
13
|
name: string;
|
|
14
14
|
trigger: ActionTrigger;
|
|
15
|
+
/** The JavaScript of a `node` Action; empty for an `http` one. */
|
|
15
16
|
code: string;
|
|
16
|
-
|
|
17
|
+
/** `node` runs `code` in the sandbox; `http` calls `http_target.url`. */
|
|
18
|
+
runtime: 'node' | 'http' | (string & {});
|
|
19
|
+
/** An `http` Action's endpoint; null for a `node` one. */
|
|
20
|
+
http_target: ActionHttpTarget | null;
|
|
17
21
|
enabled: boolean;
|
|
18
22
|
secret_names: string[];
|
|
19
23
|
created_at: number;
|
|
20
24
|
updated_at: number;
|
|
21
25
|
}
|
|
26
|
+
/** Where an `http` Action sends the event. Timestamps are epoch milliseconds. */
|
|
27
|
+
export interface ActionHttpTarget {
|
|
28
|
+
url: string;
|
|
29
|
+
/** 500 to 5000; default 3000. */
|
|
30
|
+
timeout_ms: number;
|
|
31
|
+
/** What a failed call does: `closed` (default) refuses a gate, `open` carries on. */
|
|
32
|
+
failure_mode: 'open' | 'closed';
|
|
33
|
+
}
|
|
22
34
|
export interface CreateActionBody {
|
|
23
35
|
name: string;
|
|
24
36
|
trigger: ActionTrigger;
|
|
25
|
-
|
|
37
|
+
/** Required for a `node` Action; an `http` Action has none. */
|
|
38
|
+
code?: string;
|
|
39
|
+
/** `node` (default) or `http`: call your own HTTPS endpoint instead of running code. */
|
|
40
|
+
runtime?: 'node' | 'http';
|
|
41
|
+
/** Required when `runtime` is `http`. */
|
|
42
|
+
http_target?: {
|
|
43
|
+
url: string;
|
|
44
|
+
timeout_ms?: number;
|
|
45
|
+
failure_mode?: 'open' | 'closed';
|
|
46
|
+
};
|
|
47
|
+
/** `http` only: your own 16 to 512 character secret. Omit it and Atlas generates one, returned once. */
|
|
48
|
+
signing_secret?: string;
|
|
26
49
|
enabled?: boolean;
|
|
27
50
|
/** Write-only, encrypted at rest, never read back. */
|
|
28
51
|
secrets?: Record<string, string>;
|
|
29
52
|
}
|
|
53
|
+
/** The create/update response of an `http` Action carries a generated signing secret once. */
|
|
54
|
+
export type ActionWithSecret = Action & {
|
|
55
|
+
signing_secret?: string;
|
|
56
|
+
};
|
|
30
57
|
export interface UpdateActionBody {
|
|
31
58
|
name?: string;
|
|
32
59
|
code?: string;
|
|
60
|
+
/** `http` only; omitted settings keep their value. */
|
|
61
|
+
http_target?: {
|
|
62
|
+
url?: string;
|
|
63
|
+
timeout_ms?: number;
|
|
64
|
+
failure_mode?: 'open' | 'closed';
|
|
65
|
+
};
|
|
66
|
+
/** `http` only: replace the signing secret with your own. */
|
|
67
|
+
signing_secret?: string;
|
|
68
|
+
/** `http` only: generate a new signing secret, returned once on the response. */
|
|
69
|
+
rotate_signing_secret?: boolean;
|
|
33
70
|
enabled?: boolean;
|
|
34
71
|
secrets?: Record<string, string>;
|
|
35
72
|
}
|
|
73
|
+
/** One call to an `http` Action's endpoint. */
|
|
74
|
+
export interface ActionHttpCall {
|
|
75
|
+
object: 'action_http_call';
|
|
76
|
+
id: string;
|
|
77
|
+
action_id: string;
|
|
78
|
+
trigger: ActionTrigger;
|
|
79
|
+
user_id: string | null;
|
|
80
|
+
/** A dry-run test call; kept out of the stats. */
|
|
81
|
+
test: boolean;
|
|
82
|
+
status: 'ok' | 'denied' | 'timeout' | 'error' | 'invalid_response';
|
|
83
|
+
http_status: number | null;
|
|
84
|
+
latency_ms: number | null;
|
|
85
|
+
error: string | null;
|
|
86
|
+
/** What the endpoint answered with, reduced to the names it set. */
|
|
87
|
+
answer: Record<string, unknown> | null;
|
|
88
|
+
created_at: number;
|
|
89
|
+
}
|
|
90
|
+
export interface ActionHttpCallList {
|
|
91
|
+
object: 'list';
|
|
92
|
+
data: ActionHttpCall[];
|
|
93
|
+
has_more: boolean;
|
|
94
|
+
next_cursor: string | null;
|
|
95
|
+
/** Real (non-test) calls in the last 24 hours. */
|
|
96
|
+
stats: {
|
|
97
|
+
calls_24h: number;
|
|
98
|
+
denied_24h: number;
|
|
99
|
+
failed_24h: number;
|
|
100
|
+
timeouts_24h: number;
|
|
101
|
+
p95_latency_ms: number | null;
|
|
102
|
+
last_failed_at: number | null;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
36
105
|
/** The sample event a dry-run runs against; every field has a stand-in default. */
|
|
37
106
|
export interface ActionTestEvent {
|
|
38
107
|
user?: {
|
|
@@ -50,6 +119,7 @@ export interface ActionTestEvent {
|
|
|
50
119
|
};
|
|
51
120
|
connection?: {
|
|
52
121
|
strategy?: string;
|
|
122
|
+
method?: string;
|
|
53
123
|
};
|
|
54
124
|
/** `country` is the ISO code `event.request.country` should carry. */
|
|
55
125
|
request?: {
|
|
@@ -57,6 +127,16 @@ export interface ActionTestEvent {
|
|
|
57
127
|
user_agent?: string;
|
|
58
128
|
country?: string;
|
|
59
129
|
};
|
|
130
|
+
/** The per-trigger `event.context` (token type, changed fields, MFA result, …). */
|
|
131
|
+
context?: Record<string, unknown>;
|
|
132
|
+
/** Registration triggers: the typed sign-up field values (`event.signUpFields`). */
|
|
133
|
+
sign_up_fields?: Record<string, string>;
|
|
134
|
+
/** Organization triggers: `event.organization`. */
|
|
135
|
+
organization?: {
|
|
136
|
+
id?: string | null;
|
|
137
|
+
name?: string;
|
|
138
|
+
slug?: string;
|
|
139
|
+
};
|
|
60
140
|
}
|
|
61
141
|
/** An outbound request the code queued with `api.http` (a dry run sends nothing). */
|
|
62
142
|
export interface ActionTestHttpRequest {
|
|
@@ -68,6 +148,17 @@ export interface ActionTestHttpRequest {
|
|
|
68
148
|
has_body: boolean;
|
|
69
149
|
save_response_as: string | null;
|
|
70
150
|
}
|
|
151
|
+
/** Edits to the user an Action asked for. */
|
|
152
|
+
export interface ActionUserEdits {
|
|
153
|
+
banned?: {
|
|
154
|
+
value: boolean;
|
|
155
|
+
reason: string | null;
|
|
156
|
+
};
|
|
157
|
+
emailVerified?: boolean;
|
|
158
|
+
firstName?: string | null;
|
|
159
|
+
lastName?: string | null;
|
|
160
|
+
imageUrl?: string | null;
|
|
161
|
+
}
|
|
71
162
|
/** What an action produced against a sample event — no real data is touched. */
|
|
72
163
|
export interface ActionTestResult {
|
|
73
164
|
object: 'action_test_result';
|
|
@@ -77,8 +168,33 @@ export interface ActionTestResult {
|
|
|
77
168
|
access_token_claims: Record<string, unknown>;
|
|
78
169
|
id_token_claims: Record<string, unknown>;
|
|
79
170
|
app_metadata: Record<string, unknown>;
|
|
171
|
+
/** Set when the code called `api.access.lock()`; a real run locks the account for 15 minutes. */
|
|
172
|
+
lock_reason?: string | null;
|
|
173
|
+
challenge?: {
|
|
174
|
+
prompt: string;
|
|
175
|
+
hint: string | null;
|
|
176
|
+
state: unknown;
|
|
177
|
+
} | null;
|
|
178
|
+
challenge_accepted?: {
|
|
179
|
+
amr: string[];
|
|
180
|
+
} | null;
|
|
181
|
+
/** `pre_token`: the claims the code asked to remove. */
|
|
182
|
+
suppressed_access_claims?: string[];
|
|
183
|
+
suppressed_id_claims?: string[];
|
|
184
|
+
/** An `http` Action only: how the endpoint call went (the test really calls it, flagged `test`). */
|
|
185
|
+
http_call?: {
|
|
186
|
+
status: string;
|
|
187
|
+
http_status: number | null;
|
|
188
|
+
latency_ms: number | null;
|
|
189
|
+
error: string | null;
|
|
190
|
+
};
|
|
191
|
+
/** `api.user.setBanned/setEmailVerified/setName/setImage`, as a real run would apply them. */
|
|
192
|
+
user_edits?: ActionUserEdits;
|
|
193
|
+
/** Registration triggers: `api.signUp.prefill` and `modify`. */
|
|
194
|
+
sign_up_prefill?: Record<string, string>;
|
|
195
|
+
sign_up_modify?: Record<string, string>;
|
|
80
196
|
logs: string[];
|
|
81
|
-
/** What the code queued with `api.http`; sent only on a real post_login
|
|
197
|
+
/** What the code queued with `api.http`; sent only on a real run of a post_login or side-effect trigger. */
|
|
82
198
|
http_requests?: ActionTestHttpRequest[];
|
|
83
199
|
error: string | null;
|
|
84
200
|
}
|
|
@@ -90,9 +206,9 @@ export interface ActionBindingList {
|
|
|
90
206
|
}
|
|
91
207
|
export declare function actionsResource(request: RequestFn): {
|
|
92
208
|
list(): Promise<ListPage<Action>>;
|
|
93
|
-
create(body: CreateActionBody, idempotencyKey?: string): Promise<
|
|
209
|
+
create(body: CreateActionBody, idempotencyKey?: string): Promise<ActionWithSecret>;
|
|
94
210
|
get(id: string): Promise<Action>;
|
|
95
|
-
update(id: string, body: UpdateActionBody): Promise<
|
|
211
|
+
update(id: string, body: UpdateActionBody): Promise<ActionWithSecret>;
|
|
96
212
|
delete(id: string): Promise<{
|
|
97
213
|
object: "action";
|
|
98
214
|
id: string;
|
|
@@ -100,6 +216,13 @@ export declare function actionsResource(request: RequestFn): {
|
|
|
100
216
|
}>;
|
|
101
217
|
/** Dry-run against a sample event in the sandbox; nothing is persisted. */
|
|
102
218
|
test(id: string, event?: ActionTestEvent): Promise<ActionTestResult>;
|
|
219
|
+
/** The call log of an `http` Action, newest first, with 24 hour stats. */
|
|
220
|
+
calls(id: string, query?: {
|
|
221
|
+
limit?: number;
|
|
222
|
+
status?: "ok" | "denied" | "failed" | "timeout" | "error" | "invalid_response";
|
|
223
|
+
test?: boolean;
|
|
224
|
+
starting_after?: string;
|
|
225
|
+
}): Promise<ActionHttpCallList>;
|
|
103
226
|
/** The actions bound to a trigger, in run order. */
|
|
104
227
|
getBindings(trigger: ActionTrigger): Promise<ActionBindingList>;
|
|
105
228
|
/** Replace a trigger's ordered binding set. */
|
package/dist/client/actions.js
CHANGED
|
@@ -23,6 +23,10 @@ function actionsResource(request) {
|
|
|
23
23
|
test(id, event = {}) {
|
|
24
24
|
return request({ method: 'POST', path: `/v1/actions/${(0, request_1.enc)(id)}/test`, body: { event } });
|
|
25
25
|
},
|
|
26
|
+
/** The call log of an `http` Action, newest first, with 24 hour stats. */
|
|
27
|
+
calls(id, query = {}) {
|
|
28
|
+
return request({ method: 'GET', path: `/v1/actions/${(0, request_1.enc)(id)}/calls`, query });
|
|
29
|
+
},
|
|
26
30
|
/** The actions bound to a trigger, in run order. */
|
|
27
31
|
getBindings(trigger) {
|
|
28
32
|
return request({ method: 'GET', path: `/v1/actions/bindings/${(0, request_1.enc)(trigger)}` });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":";;AA8MA,0CAyCC;AAvPD,uCAAgD;AA8MhD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,IAAsB,EAAE,cAAuB;YACpD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,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,EAAU,EAAE,IAAsB;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,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;QACD,2EAA2E;QAC3E,IAAI,CAAC,EAAU,EAAE,QAAyB,EAAE;YAC1C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,0EAA0E;QAC1E,KAAK,CACH,EAAU,EACV,QAAqJ,EAAE;YAEvJ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,oDAAoD;QACpD,WAAW,CAAC,OAAsB;YAChC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,+CAA+C;QAC/C,WAAW,CAAC,OAAsB,EAAE,SAAmB;YACrD,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE;gBAC5C,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
import type { DeletedObject } from './types';
|
|
3
|
+
/** The window every analytics read takes: `from`/`to` (epoch ms or ISO 8601) or `days`, at most 180. */
|
|
4
|
+
export interface AnalyticsParams {
|
|
5
|
+
from?: number | string;
|
|
6
|
+
to?: number | string;
|
|
7
|
+
days?: number;
|
|
8
|
+
granularity?: 'day' | 'week' | 'month';
|
|
9
|
+
/** Only members of this organization (not available for failures). */
|
|
10
|
+
organization_id?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AnalyticsReport<Row> {
|
|
13
|
+
object: string;
|
|
14
|
+
window: {
|
|
15
|
+
from: number;
|
|
16
|
+
to: number;
|
|
17
|
+
granularity: string;
|
|
18
|
+
organization_id: string | null;
|
|
19
|
+
};
|
|
20
|
+
data: Row[];
|
|
21
|
+
[meta: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
export interface FunnelRow {
|
|
24
|
+
method: string;
|
|
25
|
+
started: number;
|
|
26
|
+
completed: number;
|
|
27
|
+
abandoned: number;
|
|
28
|
+
in_progress: number;
|
|
29
|
+
needs_first_factor: number;
|
|
30
|
+
needs_second_factor: number;
|
|
31
|
+
needs_email_verification: number;
|
|
32
|
+
completion_rate: number;
|
|
33
|
+
}
|
|
34
|
+
export interface JourneyFunnelRow {
|
|
35
|
+
step: string;
|
|
36
|
+
held: number;
|
|
37
|
+
completed: number;
|
|
38
|
+
applied: number;
|
|
39
|
+
denied: number;
|
|
40
|
+
completion_rate: number;
|
|
41
|
+
}
|
|
42
|
+
export interface FailureRow {
|
|
43
|
+
phase: string;
|
|
44
|
+
reason: string;
|
|
45
|
+
method: string;
|
|
46
|
+
count: number;
|
|
47
|
+
share: number;
|
|
48
|
+
}
|
|
49
|
+
export interface BreakdownRow {
|
|
50
|
+
value: string;
|
|
51
|
+
count: number;
|
|
52
|
+
share: number;
|
|
53
|
+
}
|
|
54
|
+
export interface ActiveUsersRow {
|
|
55
|
+
bucket: string;
|
|
56
|
+
active_users: number;
|
|
57
|
+
new_users: number;
|
|
58
|
+
returning_users: number;
|
|
59
|
+
sign_ins: number;
|
|
60
|
+
}
|
|
61
|
+
export interface PasskeyAdoptionRow {
|
|
62
|
+
bucket: string;
|
|
63
|
+
passkey_sign_ins: number;
|
|
64
|
+
sign_ins: number;
|
|
65
|
+
passkey_share: number;
|
|
66
|
+
}
|
|
67
|
+
export interface InactiveUserRow {
|
|
68
|
+
user_id: string;
|
|
69
|
+
email: string | null;
|
|
70
|
+
last_sign_in_at: string | null;
|
|
71
|
+
created_at: string;
|
|
72
|
+
}
|
|
73
|
+
export interface MfaCoverageRow {
|
|
74
|
+
protection: string;
|
|
75
|
+
users: number;
|
|
76
|
+
share: number;
|
|
77
|
+
}
|
|
78
|
+
export interface AccessByAppRow {
|
|
79
|
+
client_id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
users: number;
|
|
82
|
+
active_grants: number;
|
|
83
|
+
users_in_window: number;
|
|
84
|
+
}
|
|
85
|
+
export type AlertMetric = 'sign_in_success_rate' | 'failed_passkey_ratio' | 'failed_sign_ins' | 'sign_in_p95_seconds' | 'api_usage_spike';
|
|
86
|
+
export type UsageSubjectType = 'api_key' | 'end_user_api_key' | 'organization';
|
|
87
|
+
/** One key's or organization's API usage against its 7-day hourly baseline. */
|
|
88
|
+
export interface ApiUsageSubject {
|
|
89
|
+
type: UsageSubjectType;
|
|
90
|
+
id: string;
|
|
91
|
+
current: number;
|
|
92
|
+
current_per_hour: number;
|
|
93
|
+
baseline_per_hour: number;
|
|
94
|
+
/** current_per_hour / baseline_per_hour (the baseline is floored at 1 request an hour). */
|
|
95
|
+
ratio: number;
|
|
96
|
+
error_rate: number;
|
|
97
|
+
}
|
|
98
|
+
export interface AnalyticsAlertRule {
|
|
99
|
+
object: 'analytics_alert_rule';
|
|
100
|
+
id: string;
|
|
101
|
+
name: string;
|
|
102
|
+
metric: AlertMetric;
|
|
103
|
+
comparator: 'lt' | 'gt';
|
|
104
|
+
threshold: number;
|
|
105
|
+
window_minutes: number;
|
|
106
|
+
min_sample: number;
|
|
107
|
+
cooldown_minutes: number;
|
|
108
|
+
email_contacts: string[];
|
|
109
|
+
webhook_url: string | null;
|
|
110
|
+
has_webhook_secret: boolean;
|
|
111
|
+
enabled: boolean;
|
|
112
|
+
subject_type: UsageSubjectType | null;
|
|
113
|
+
subject_id: string | null;
|
|
114
|
+
ssf: boolean;
|
|
115
|
+
state: 'ok' | 'firing';
|
|
116
|
+
last_value: number | null;
|
|
117
|
+
last_evaluated_at: number | null;
|
|
118
|
+
last_triggered_at: number | null;
|
|
119
|
+
last_error: string | null;
|
|
120
|
+
created_at: number;
|
|
121
|
+
}
|
|
122
|
+
export interface AnalyticsAlertRuleInput {
|
|
123
|
+
name: string;
|
|
124
|
+
metric: AlertMetric;
|
|
125
|
+
comparator: 'lt' | 'gt';
|
|
126
|
+
threshold: number;
|
|
127
|
+
/** 5 to 1440 (default 60). */
|
|
128
|
+
window_minutes?: number;
|
|
129
|
+
/** Ratios and latency are not evaluated on fewer observations (default 20). */
|
|
130
|
+
min_sample?: number;
|
|
131
|
+
/** Minutes between notifications while the rule stays firing (default 60). */
|
|
132
|
+
cooldown_minutes?: number;
|
|
133
|
+
email_contacts?: string[];
|
|
134
|
+
/** A public HTTPS endpoint; the body is signed like any Atlas webhook. */
|
|
135
|
+
webhook_url?: string | null;
|
|
136
|
+
enabled?: boolean;
|
|
137
|
+
/** api_usage_spike: which kind of subject to watch (null = all). */
|
|
138
|
+
subject_type?: UsageSubjectType | null;
|
|
139
|
+
/** api_usage_spike: one key or organization (needs subject_type). */
|
|
140
|
+
subject_id?: string | null;
|
|
141
|
+
/** Also raise a Shared Signals event when the rule fires. */
|
|
142
|
+
ssf?: boolean;
|
|
143
|
+
}
|
|
144
|
+
export declare function analyticsResource(request: RequestFn): {
|
|
145
|
+
/** Where sign-in (or sign-up) attempts end, per method. */
|
|
146
|
+
funnel: (params?: AnalyticsParams & {
|
|
147
|
+
kind?: "sign_in" | "sign_up";
|
|
148
|
+
}) => Promise<AnalyticsReport<FunnelRow>>;
|
|
149
|
+
/** What happened at each step of a sign-in journey. */
|
|
150
|
+
journeyFunnel: (params: Omit<AnalyticsParams, "organization_id"> & {
|
|
151
|
+
journey_id: string;
|
|
152
|
+
}) => Promise<AnalyticsReport<JourneyFunnelRow>>;
|
|
153
|
+
/** Failed attempts by reason and method. */
|
|
154
|
+
failures: (params?: Omit<AnalyticsParams, "organization_id">) => Promise<AnalyticsReport<FailureRow>>;
|
|
155
|
+
/** Sign-ins by method, device, browser, os or country. */
|
|
156
|
+
breakdown: (params?: AnalyticsParams & {
|
|
157
|
+
dimension?: "method" | "device" | "browser" | "os" | "country";
|
|
158
|
+
}) => Promise<AnalyticsReport<BreakdownRow>>;
|
|
159
|
+
/** DAU/WAU/MAU and a series, with new vs returning users. */
|
|
160
|
+
activeUsers: (params?: AnalyticsParams) => Promise<AnalyticsReport<ActiveUsersRow>>;
|
|
161
|
+
passkeyAdoption: (params?: AnalyticsParams) => Promise<AnalyticsReport<PasskeyAdoptionRow>>;
|
|
162
|
+
/** API usage per secret key, end-user API key or organization against its own baseline, highest ratio first. */
|
|
163
|
+
apiUsage: (params?: {
|
|
164
|
+
subject_type?: UsageSubjectType;
|
|
165
|
+
subject_id?: string;
|
|
166
|
+
window_minutes?: number;
|
|
167
|
+
}) => Promise<{
|
|
168
|
+
object: "api_usage";
|
|
169
|
+
window_minutes: number;
|
|
170
|
+
baseline_hours: number;
|
|
171
|
+
generated_at: number;
|
|
172
|
+
data: ApiUsageSubject[];
|
|
173
|
+
}>;
|
|
174
|
+
reports: {
|
|
175
|
+
inactiveUsers: (params?: AnalyticsParams & {
|
|
176
|
+
inactive_days?: number;
|
|
177
|
+
limit?: number;
|
|
178
|
+
starting_after?: string;
|
|
179
|
+
}) => Promise<AnalyticsReport<InactiveUserRow>>;
|
|
180
|
+
mfaCoverage: (params?: AnalyticsParams) => Promise<AnalyticsReport<MfaCoverageRow>>;
|
|
181
|
+
accessByApp: (params?: AnalyticsParams) => Promise<AnalyticsReport<AccessByAppRow>>;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* Any analytics read as CSV text, e.g. `exportCsv('breakdown', { dimension: 'country' })`.
|
|
185
|
+
* For Parquet call the same path with `format=parquet` over HTTP (a binary body).
|
|
186
|
+
*/
|
|
187
|
+
exportCsv: (report: "funnel" | "failures" | "breakdown" | "active_users" | "passkey_adoption" | "reports/inactive_users" | "reports/mfa_coverage" | "reports/access_by_app", params?: object) => Promise<string>;
|
|
188
|
+
alertRules: {
|
|
189
|
+
list(): Promise<{
|
|
190
|
+
object: "list";
|
|
191
|
+
data: AnalyticsAlertRule[];
|
|
192
|
+
has_more: boolean;
|
|
193
|
+
}>;
|
|
194
|
+
get(id: string): Promise<AnalyticsAlertRule>;
|
|
195
|
+
/** A webhook rule's `webhook_secret` is in this response only. */
|
|
196
|
+
create(body: AnalyticsAlertRuleInput, idempotencyKey?: string): Promise<AnalyticsAlertRule & {
|
|
197
|
+
webhook_secret?: string;
|
|
198
|
+
}>;
|
|
199
|
+
update(id: string, body: Partial<AnalyticsAlertRuleInput>): Promise<AnalyticsAlertRule & {
|
|
200
|
+
webhook_secret?: string;
|
|
201
|
+
}>;
|
|
202
|
+
delete(id: string): Promise<DeletedObject>;
|
|
203
|
+
/** Measure now; `notify: true` also sends the rule's email and webhook. */
|
|
204
|
+
test(id: string, body?: {
|
|
205
|
+
notify?: boolean;
|
|
206
|
+
}): Promise<{
|
|
207
|
+
object: "analytics_alert_test";
|
|
208
|
+
value: number | null;
|
|
209
|
+
sample: number;
|
|
210
|
+
subject: ApiUsageSubject | null;
|
|
211
|
+
notified: boolean;
|
|
212
|
+
error: string | null;
|
|
213
|
+
}>;
|
|
214
|
+
};
|
|
215
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyticsResource = analyticsResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
function analyticsResource(request) {
|
|
6
|
+
const read = (path, params) => request({ method: 'GET', path, query: { ...params } });
|
|
7
|
+
const csv = (path, params) => request({ method: 'GET', path, query: { ...params, format: 'csv' }, raw: true });
|
|
8
|
+
return {
|
|
9
|
+
/** Where sign-in (or sign-up) attempts end, per method. */
|
|
10
|
+
funnel: (params = {}) => read('/v1/analytics/funnel', params),
|
|
11
|
+
/** What happened at each step of a sign-in journey. */
|
|
12
|
+
journeyFunnel: (params) => read('/v1/analytics/journey_funnel', params),
|
|
13
|
+
/** Failed attempts by reason and method. */
|
|
14
|
+
failures: (params = {}) => read('/v1/analytics/failures', params),
|
|
15
|
+
/** Sign-ins by method, device, browser, os or country. */
|
|
16
|
+
breakdown: (params = {}) => read('/v1/analytics/breakdown', params),
|
|
17
|
+
/** DAU/WAU/MAU and a series, with new vs returning users. */
|
|
18
|
+
activeUsers: (params = {}) => read('/v1/analytics/active_users', params),
|
|
19
|
+
passkeyAdoption: (params = {}) => read('/v1/analytics/passkey_adoption', params),
|
|
20
|
+
/** API usage per secret key, end-user API key or organization against its own baseline, highest ratio first. */
|
|
21
|
+
apiUsage: (params = {}) => request({ method: 'GET', path: '/v1/analytics/api_usage', query: { ...params } }),
|
|
22
|
+
reports: {
|
|
23
|
+
inactiveUsers: (params = {}) => read('/v1/analytics/reports/inactive_users', params),
|
|
24
|
+
mfaCoverage: (params = {}) => read('/v1/analytics/reports/mfa_coverage', params),
|
|
25
|
+
accessByApp: (params = {}) => read('/v1/analytics/reports/access_by_app', params),
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* Any analytics read as CSV text, e.g. `exportCsv('breakdown', { dimension: 'country' })`.
|
|
29
|
+
* For Parquet call the same path with `format=parquet` over HTTP (a binary body).
|
|
30
|
+
*/
|
|
31
|
+
exportCsv: (report, params = {}) => csv(`/v1/analytics/${report}`, params),
|
|
32
|
+
alertRules: {
|
|
33
|
+
list() {
|
|
34
|
+
return request({ method: 'GET', path: '/v1/analytics/alert_rules' });
|
|
35
|
+
},
|
|
36
|
+
get(id) {
|
|
37
|
+
return request({ method: 'GET', path: `/v1/analytics/alert_rules/${(0, request_1.enc)(id)}` });
|
|
38
|
+
},
|
|
39
|
+
/** A webhook rule's `webhook_secret` is in this response only. */
|
|
40
|
+
create(body, idempotencyKey) {
|
|
41
|
+
return request({ method: 'POST', path: '/v1/analytics/alert_rules', body, idempotencyKey });
|
|
42
|
+
},
|
|
43
|
+
update(id, body) {
|
|
44
|
+
return request({ method: 'PATCH', path: `/v1/analytics/alert_rules/${(0, request_1.enc)(id)}`, body });
|
|
45
|
+
},
|
|
46
|
+
delete(id) {
|
|
47
|
+
return request({ method: 'DELETE', path: `/v1/analytics/alert_rules/${(0, request_1.enc)(id)}` });
|
|
48
|
+
},
|
|
49
|
+
/** Measure now; `notify: true` also sends the rule's email and webhook. */
|
|
50
|
+
test(id, body = {}) {
|
|
51
|
+
return request({ method: 'POST', path: `/v1/analytics/alert_rules/${(0, request_1.enc)(id)}/test`, body });
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=analytics-reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-reports.js","sourceRoot":"","sources":["../../src/client/analytics-reports.ts"],"names":[],"mappings":"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"}
|