@atlasauth/backend 0.24.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 +7 -0
- 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 +943 -2
- package/dist/client/index.js +73 -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 +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 +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/index.d.ts +3 -0
- package/dist/index.js +8 -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/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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.25.0 — 2026-10-26
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- `mfaFactors` client resource for the additional authentication factors: `setYubicoSecret` / `removeYubicoSecret`, `setDuoSecret` / `removeDuoSecret` / `duoHealthCheck`, `setSmartCardSecret` / `removeSmartCardSecret` (all write-only), `yubikeys` (`list`, `register`, `remove`), `smartCardMappings` (`list`, `add`, `remove`) and `resetSecurityQuestions`.
|
|
10
|
+
- `users.create({ mfa })` is typed (`ImportedMfa`): an authenticator (`totp`: SHA-1/256/512, 6 or 8 digits, 30 or 60 seconds) or a counter-based token (`hotp`), plus recovery codes.
|
|
11
|
+
|
|
5
12
|
## 0.24.0 — 2026-10-25
|
|
6
13
|
|
|
7
14
|
### Added
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { type RequestFn } from './request';
|
|
2
|
+
import type { ListPage } from './types';
|
|
3
|
+
export interface AbacPolicyTestCase {
|
|
4
|
+
name: string;
|
|
5
|
+
/** principal, action, resource, context and optional entities. */
|
|
6
|
+
request: Record<string, unknown>;
|
|
7
|
+
expect: 'allow' | 'deny';
|
|
8
|
+
}
|
|
9
|
+
/** An ABAC policy: named, versioned source in the Cedar-subset policy language. */
|
|
10
|
+
export interface AbacPolicy {
|
|
11
|
+
object: 'abac_policy';
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string | null;
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
current_version: number;
|
|
17
|
+
/** The FGA store `fga.check(...)` in the source consults. */
|
|
18
|
+
fga_store_id: string | null;
|
|
19
|
+
source: string;
|
|
20
|
+
tests: AbacPolicyTestCase[];
|
|
21
|
+
created_at: number;
|
|
22
|
+
updated_at: number;
|
|
23
|
+
}
|
|
24
|
+
export interface AbacPolicyVersion {
|
|
25
|
+
object: 'abac_policy_version';
|
|
26
|
+
policy_id: string;
|
|
27
|
+
version: number;
|
|
28
|
+
source: string;
|
|
29
|
+
tests: AbacPolicyTestCase[];
|
|
30
|
+
current: boolean;
|
|
31
|
+
created_at: number;
|
|
32
|
+
}
|
|
33
|
+
export interface CreateAbacPolicyBody {
|
|
34
|
+
name: string;
|
|
35
|
+
description?: string | null;
|
|
36
|
+
enabled?: boolean;
|
|
37
|
+
fga_store_id?: string | null;
|
|
38
|
+
source: string;
|
|
39
|
+
tests?: AbacPolicyTestCase[];
|
|
40
|
+
}
|
|
41
|
+
/** Sending `source` appends a new version; `current_version` (without source) rolls back. */
|
|
42
|
+
export type UpdateAbacPolicyBody = Partial<CreateAbacPolicyBody> & {
|
|
43
|
+
current_version?: number;
|
|
44
|
+
};
|
|
45
|
+
export interface AbacEntity {
|
|
46
|
+
type: string;
|
|
47
|
+
id: string;
|
|
48
|
+
attributes?: Record<string, unknown>;
|
|
49
|
+
/** `Type::id` uids this entity is a member of (for `in`). */
|
|
50
|
+
parents?: string[];
|
|
51
|
+
}
|
|
52
|
+
export interface AbacEvaluateBody {
|
|
53
|
+
principal: AbacEntity;
|
|
54
|
+
action: string;
|
|
55
|
+
resource: AbacEntity;
|
|
56
|
+
context?: Record<string, unknown>;
|
|
57
|
+
entities?: AbacEntity[];
|
|
58
|
+
/** Evaluate only these policies (default: every enabled one). */
|
|
59
|
+
policy_ids?: string[];
|
|
60
|
+
}
|
|
61
|
+
export interface AbacDecision {
|
|
62
|
+
object: 'abac_decision';
|
|
63
|
+
decision: 'allow' | 'deny';
|
|
64
|
+
reasons: string[];
|
|
65
|
+
errors: string[];
|
|
66
|
+
}
|
|
67
|
+
export interface AbacTestRun {
|
|
68
|
+
object: 'abac_policy_test_run';
|
|
69
|
+
passed: boolean;
|
|
70
|
+
results: Array<{
|
|
71
|
+
name: string;
|
|
72
|
+
expect: 'allow' | 'deny';
|
|
73
|
+
actual: 'allow' | 'deny';
|
|
74
|
+
passed: boolean;
|
|
75
|
+
}>;
|
|
76
|
+
}
|
|
77
|
+
export interface AuthzenEvaluation {
|
|
78
|
+
subject?: {
|
|
79
|
+
type: string;
|
|
80
|
+
id: string;
|
|
81
|
+
properties?: Record<string, unknown>;
|
|
82
|
+
};
|
|
83
|
+
resource?: {
|
|
84
|
+
type: string;
|
|
85
|
+
id: string;
|
|
86
|
+
properties?: Record<string, unknown>;
|
|
87
|
+
};
|
|
88
|
+
action?: {
|
|
89
|
+
name: string;
|
|
90
|
+
properties?: Record<string, unknown>;
|
|
91
|
+
};
|
|
92
|
+
context?: Record<string, unknown>;
|
|
93
|
+
}
|
|
94
|
+
/** ABAC policies and the policy decision point (including the AuthZEN endpoints). */
|
|
95
|
+
export declare function abacResource(request: RequestFn): {
|
|
96
|
+
list(): Promise<ListPage<AbacPolicy>>;
|
|
97
|
+
get(id: string): Promise<AbacPolicy>;
|
|
98
|
+
create(body: CreateAbacPolicyBody, idempotencyKey?: string): Promise<AbacPolicy>;
|
|
99
|
+
update(id: string, body: UpdateAbacPolicyBody): Promise<AbacPolicy>;
|
|
100
|
+
delete(id: string): Promise<{
|
|
101
|
+
object: "abac_policy";
|
|
102
|
+
id: string;
|
|
103
|
+
deleted: true;
|
|
104
|
+
}>;
|
|
105
|
+
versions(id: string): Promise<ListPage<AbacPolicyVersion>>;
|
|
106
|
+
/** Run a version's tests (default: current), or a draft `source` and `tests`, without saving. */
|
|
107
|
+
test(id: string, body?: {
|
|
108
|
+
version?: number;
|
|
109
|
+
source?: string;
|
|
110
|
+
tests?: AbacPolicyTestCase[];
|
|
111
|
+
}): Promise<AbacTestRun>;
|
|
112
|
+
/** May `principal` perform `action` on `resource`? */
|
|
113
|
+
evaluate(body: AbacEvaluateBody): Promise<AbacDecision>;
|
|
114
|
+
/** Convenience: the boolean answer to {@link evaluate}. */
|
|
115
|
+
isAllowed(body: AbacEvaluateBody): Promise<boolean>;
|
|
116
|
+
/** AuthZEN 1.0 Access Evaluation. */
|
|
117
|
+
authzenEvaluation(body: AuthzenEvaluation): Promise<{
|
|
118
|
+
decision: boolean;
|
|
119
|
+
context?: Record<string, unknown>;
|
|
120
|
+
}>;
|
|
121
|
+
/** AuthZEN 1.0 Access Evaluations (batch). */
|
|
122
|
+
authzenEvaluations(body: AuthzenEvaluation & {
|
|
123
|
+
evaluations?: AuthzenEvaluation[];
|
|
124
|
+
options?: {
|
|
125
|
+
evaluations_semantic?: "execute_all" | "deny_on_first_deny" | "permit_on_first_permit";
|
|
126
|
+
};
|
|
127
|
+
}): Promise<{
|
|
128
|
+
evaluations: Array<{
|
|
129
|
+
decision: boolean;
|
|
130
|
+
}>;
|
|
131
|
+
}>;
|
|
132
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.abacResource = abacResource;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
/** ABAC policies and the policy decision point (including the AuthZEN endpoints). */
|
|
6
|
+
function abacResource(request) {
|
|
7
|
+
return {
|
|
8
|
+
list() {
|
|
9
|
+
return request({ method: 'GET', path: '/v1/abac_policies' });
|
|
10
|
+
},
|
|
11
|
+
get(id) {
|
|
12
|
+
return request({ method: 'GET', path: `/v1/abac_policies/${(0, request_1.enc)(id)}` });
|
|
13
|
+
},
|
|
14
|
+
create(body, idempotencyKey) {
|
|
15
|
+
return request({ method: 'POST', path: '/v1/abac_policies', body, idempotencyKey });
|
|
16
|
+
},
|
|
17
|
+
update(id, body) {
|
|
18
|
+
return request({ method: 'PATCH', path: `/v1/abac_policies/${(0, request_1.enc)(id)}`, body });
|
|
19
|
+
},
|
|
20
|
+
delete(id) {
|
|
21
|
+
return request({ method: 'DELETE', path: `/v1/abac_policies/${(0, request_1.enc)(id)}` });
|
|
22
|
+
},
|
|
23
|
+
versions(id) {
|
|
24
|
+
return request({ method: 'GET', path: `/v1/abac_policies/${(0, request_1.enc)(id)}/versions` });
|
|
25
|
+
},
|
|
26
|
+
/** Run a version's tests (default: current), or a draft `source` and `tests`, without saving. */
|
|
27
|
+
test(id, body = {}) {
|
|
28
|
+
return request({ method: 'POST', path: `/v1/abac_policies/${(0, request_1.enc)(id)}/test`, body });
|
|
29
|
+
},
|
|
30
|
+
/** May `principal` perform `action` on `resource`? */
|
|
31
|
+
evaluate(body) {
|
|
32
|
+
return request({ method: 'POST', path: '/v1/abac/evaluate', body });
|
|
33
|
+
},
|
|
34
|
+
/** Convenience: the boolean answer to {@link evaluate}. */
|
|
35
|
+
async isAllowed(body) {
|
|
36
|
+
return (await request({ method: 'POST', path: '/v1/abac/evaluate', body })).decision === 'allow';
|
|
37
|
+
},
|
|
38
|
+
/** AuthZEN 1.0 Access Evaluation. */
|
|
39
|
+
authzenEvaluation(body) {
|
|
40
|
+
return request({ method: 'POST', path: '/v1/authzen/access/v1/evaluation', body });
|
|
41
|
+
},
|
|
42
|
+
/** AuthZEN 1.0 Access Evaluations (batch). */
|
|
43
|
+
authzenEvaluations(body) {
|
|
44
|
+
return request({ method: 'POST', path: '/v1/authzen/access/v1/evaluations', body });
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=abac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abac.js","sourceRoot":"","sources":["../../src/client/abac.ts"],"names":[],"mappings":";;AAuFA,oCA2CC;AAlID,uCAAgD;AAsFhD,qFAAqF;AACrF,SAAgB,YAAY,CAAC,OAAkB;IAC7C,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,CAAC,IAA0B,EAAE,cAAuB;YACxD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAA0B;YAC3C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,QAAQ,CAAC,EAAU;YACjB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,iGAAiG;QACjG,IAAI,CAAC,EAAU,EAAE,OAA4E,EAAE;YAC7F,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,sDAAsD;QACtD,QAAQ,CAAC,IAAsB;YAC7B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,2DAA2D;QAC3D,KAAK,CAAC,SAAS,CAAC,IAAsB;YACpC,OAAO,CAAC,MAAM,OAAO,CAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;QACjH,CAAC;QACD,qCAAqC;QACrC,iBAAiB,CAAC,IAAuB;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,8CAA8C;QAC9C,kBAAkB,CAChB,IAAqK;YAErK,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|