@atlasauth/backend 0.15.0 → 0.16.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 +19 -0
- package/dist/botid.d.ts +70 -0
- package/dist/botid.js +88 -0
- package/dist/botid.js.map +1 -0
- package/dist/client/action-gallery.d.ts +215 -0
- package/dist/client/action-gallery.js +66 -0
- package/dist/client/action-gallery.js.map +1 -0
- package/dist/client/actions.d.ts +21 -0
- package/dist/client/actions.js.map +1 -1
- package/dist/client/attack-protection.d.ts +33 -1
- package/dist/client/attack-protection.js.map +1 -1
- package/dist/client/billing-plans.d.ts +93 -0
- package/dist/client/billing-plans.js +31 -0
- package/dist/client/billing-plans.js.map +1 -1
- package/dist/client/custom-oauth-providers.d.ts +243 -0
- package/dist/client/custom-oauth-providers.js +60 -0
- package/dist/client/custom-oauth-providers.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/index.d.ts +108 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/instance-security.d.ts +70 -0
- package/dist/client/instance-security.js +20 -0
- package/dist/client/instance-security.js.map +1 -1
- package/dist/client/oauth-clients.d.ts +29 -2
- package/dist/client/oauth-clients.js.map +1 -1
- package/dist/client/resource-servers.d.ts +22 -2
- package/dist/client/resource-servers.js.map +1 -1
- package/dist/client/risk-based-mfa.d.ts +3 -0
- package/dist/client/risk-based-mfa.js.map +1 -1
- package/dist/client/sessions.d.ts +16 -0
- package/dist/client/sessions.js +15 -0
- package/dist/client/sessions.js.map +1 -1
- package/dist/client/sso-connections.d.ts +83 -0
- package/dist/client/sso-connections.js +29 -0
- package/dist/client/sso-connections.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/oauth-resource.d.ts +81 -1
- package/dist/oauth-resource.js +204 -29
- package/dist/oauth-resource.js.map +1 -1
- package/package.json +3 -3
package/dist/client/index.d.ts
CHANGED
|
@@ -180,6 +180,8 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
180
180
|
id: string;
|
|
181
181
|
status: "revoked";
|
|
182
182
|
}>;
|
|
183
|
+
setCustomData(id: string, customData: Record<string, unknown> | null): Promise<import("./sessions").Session>;
|
|
184
|
+
updateCustomData(id: string, patch: Record<string, unknown>): Promise<import("./sessions").Session>;
|
|
183
185
|
touch(id: string): Promise<import("./sessions").TouchedSession>;
|
|
184
186
|
getToken(id: string, template: string): Promise<import("./sessions").SessionTemplateToken>;
|
|
185
187
|
};
|
|
@@ -403,7 +405,23 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
403
405
|
id: string;
|
|
404
406
|
deleted: true;
|
|
405
407
|
}>;
|
|
408
|
+
previewProfileMapping(id: string, body: import("./custom-oauth-providers").ProfileMappingPreviewBody): Promise<import("./custom-oauth-providers").ProfileMappingPreview>;
|
|
409
|
+
signingKeys(id: string): {
|
|
410
|
+
list(): Promise<import("./types").ListPage<import("./custom-oauth-providers").UpstreamSigningKey>>;
|
|
411
|
+
rotate(body?: {
|
|
412
|
+
alg?: "RS256" | "PS256" | "ES256";
|
|
413
|
+
}, idempotencyKey?: string): Promise<import("./custom-oauth-providers").UpstreamSigningKey>;
|
|
414
|
+
retire(kid: string): Promise<{
|
|
415
|
+
object: "upstream_signing_key";
|
|
416
|
+
kid: string;
|
|
417
|
+
status: "retired";
|
|
418
|
+
}>;
|
|
419
|
+
};
|
|
406
420
|
samlMetadata(id: string): Promise<import("./sso-connections").SamlMetadata>;
|
|
421
|
+
getSamlEncryptionKey(id: string): Promise<import("./sso-connections").SamlEncryptionKey>;
|
|
422
|
+
createSamlEncryptionKey(id: string, idempotencyKey?: string): Promise<import("./sso-connections").SamlEncryptionKey>;
|
|
423
|
+
retirePreviousSamlEncryptionKey(id: string): Promise<import("./sso-connections").SamlEncryptionKey>;
|
|
424
|
+
deleteSamlEncryptionKey(id: string): Promise<import("./sso-connections").SamlEncryptionKey>;
|
|
407
425
|
};
|
|
408
426
|
scimTokens: {
|
|
409
427
|
list(): Promise<import("./types").ListPage<import("./scim-tokens").ScimToken>>;
|
|
@@ -853,6 +871,35 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
853
871
|
getBindings(trigger: import("./actions").ActionTrigger): Promise<import("./actions").ActionBindingList>;
|
|
854
872
|
setBindings(trigger: import("./actions").ActionTrigger, actionIds: string[]): Promise<import("./actions").ActionBindingList>;
|
|
855
873
|
};
|
|
874
|
+
actionGallery: {
|
|
875
|
+
list(filter?: import("./action-gallery").ActionGalleryFilter): Promise<import("./types").ListPage<import("./action-gallery").ActionGalleryEntry>>;
|
|
876
|
+
get(slug: string): Promise<import("./action-gallery").ActionGalleryDetail>;
|
|
877
|
+
install(slug: string, body?: import("./action-gallery").InstallTemplateBody, idempotencyKey?: string): Promise<import("./action-gallery").ActionGalleryInstallResult>;
|
|
878
|
+
installs(): Promise<import("./types").ListPage<import("./action-gallery").ActionGalleryInstallation>>;
|
|
879
|
+
update(actionId: string, body?: {
|
|
880
|
+
secrets?: Record<string, string>;
|
|
881
|
+
}): Promise<import("./action-gallery").ActionGalleryUpdateResult>;
|
|
882
|
+
};
|
|
883
|
+
actionTemplates: {
|
|
884
|
+
list(): Promise<import("./types").ListPage<import("./action-gallery").ActionTemplate>>;
|
|
885
|
+
create(body: import("./action-gallery").CreateActionTemplateBody, idempotencyKey?: string): Promise<import("./action-gallery").ActionTemplate>;
|
|
886
|
+
get(id: string): Promise<import("./action-gallery").ActionTemplate>;
|
|
887
|
+
update(id: string, body: import("./action-gallery").ActionTemplateListing): Promise<import("./action-gallery").ActionTemplate>;
|
|
888
|
+
delete(id: string): Promise<{
|
|
889
|
+
object: "action_template";
|
|
890
|
+
id: string;
|
|
891
|
+
deleted: true;
|
|
892
|
+
}>;
|
|
893
|
+
addVersion(id: string, body: import("./action-gallery").NewTemplateVersion): Promise<import("./action-gallery").ActionTemplateVersion>;
|
|
894
|
+
submitVersion(id: string, version: string): Promise<import("./action-gallery").ActionTemplateVersion>;
|
|
895
|
+
deleteVersion(id: string, version: string): Promise<{
|
|
896
|
+
object: "action_template_version";
|
|
897
|
+
version: string;
|
|
898
|
+
deleted: true;
|
|
899
|
+
}>;
|
|
900
|
+
publish(id: string): Promise<import("./action-gallery").ActionTemplate>;
|
|
901
|
+
unlist(id: string): Promise<import("./action-gallery").ActionTemplate>;
|
|
902
|
+
};
|
|
856
903
|
billing: {
|
|
857
904
|
listPlans(): Promise<import("./types").ListPage<import("./billing-plans").BillingPlan>>;
|
|
858
905
|
createPlan(body: import("./billing-plans").CreateBillingPlanBody, idempotencyKey?: string): Promise<import("./billing-plans").BillingPlan>;
|
|
@@ -864,6 +911,18 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
864
911
|
deleted: true;
|
|
865
912
|
}>;
|
|
866
913
|
listSubscriptions(params?: import("./billing-plans").ListSubscriptionsParams): Promise<import("./types").ListPage<import("./billing-plans").BillingSubscription>>;
|
|
914
|
+
getSubscription(id: string): Promise<import("./billing-plans").BillingSubscription>;
|
|
915
|
+
changeSubscription(id: string, body: import("./billing-plans").ChangeBillingSubscriptionBody): Promise<import("./billing-plans").BillingSubscription & {
|
|
916
|
+
scheduled: boolean;
|
|
917
|
+
}>;
|
|
918
|
+
cancelSubscription(id: string, body?: {
|
|
919
|
+
immediately?: boolean;
|
|
920
|
+
}): Promise<import("./billing-plans").BillingSubscription>;
|
|
921
|
+
restoreSubscription(id: string): Promise<import("./billing-plans").BillingSubscription>;
|
|
922
|
+
syncPlanEntitlements(id: string): Promise<import("./billing-plans").BillingPlan>;
|
|
923
|
+
getSettings(): Promise<import("./billing-plans").BillingSettings>;
|
|
924
|
+
updateSettings(body: import("./billing-plans").UpdateBillingSettingsBody): Promise<import("./billing-plans").BillingSettings>;
|
|
925
|
+
checkFeature(body: import("./billing-plans").CheckBillingFeatureBody): Promise<import("./billing-plans").BillingFeatureCheck>;
|
|
867
926
|
importSubscription(body: import("./billing-plans").ImportBillingSubscriptionBody, idempotencyKey?: string): Promise<import("./billing-plans").BillingSubscription>;
|
|
868
927
|
reportUsage(body: import("./billing-plans").ReportBillingUsageBody): Promise<import("./billing-plans").BillingUsageReport>;
|
|
869
928
|
syncSeats(subjectType: "user" | "org", subjectId: string): Promise<import("./billing-plans").BillingSeatSync>;
|
|
@@ -976,10 +1035,21 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
976
1035
|
data: import("./instance-security").SigningKey[];
|
|
977
1036
|
}>;
|
|
978
1037
|
rotateSigningKey(body?: import("./instance-security").RotateSigningKeyBody): Promise<import("./instance-security").SigningKeyRotation>;
|
|
1038
|
+
getSigningKeyProvider(): Promise<import("./instance-security").SigningKeyProviderSettings>;
|
|
1039
|
+
setSigningKeyProvider(body: import("./instance-security").SetSigningKeyProviderBody): Promise<import("./instance-security").SigningKeyProviderSettings & {
|
|
1040
|
+
rotation: import("./instance-security").SigningKeyRotation;
|
|
1041
|
+
}>;
|
|
1042
|
+
removeSigningKeyProvider(body?: import("./instance-security").RotateSigningKeyBody): Promise<{
|
|
1043
|
+
object: "signing_key_provider";
|
|
1044
|
+
provider: "local";
|
|
1045
|
+
deleted: true;
|
|
1046
|
+
rotation: import("./instance-security").SigningKeyRotation | null;
|
|
1047
|
+
}>;
|
|
979
1048
|
get(): Promise<import("./instance-security").InstanceSecurity>;
|
|
980
1049
|
update(body: import("./instance-security").UpdateInstanceSecurityBody): Promise<import("./instance-security").InstanceSecurityResult>;
|
|
981
1050
|
setCaptchaSecret(body: {
|
|
982
1051
|
secret: string;
|
|
1052
|
+
provider?: string;
|
|
983
1053
|
}): Promise<{
|
|
984
1054
|
object: "captcha_secret";
|
|
985
1055
|
provider: string;
|
|
@@ -990,6 +1060,14 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
990
1060
|
provider: string;
|
|
991
1061
|
deleted: true;
|
|
992
1062
|
}>;
|
|
1063
|
+
setWalletRpcSecret(body: {
|
|
1064
|
+
chain_id: number;
|
|
1065
|
+
url: string;
|
|
1066
|
+
}): Promise<{
|
|
1067
|
+
object: "wallet_rpc_secret";
|
|
1068
|
+
chain_id: number;
|
|
1069
|
+
set: boolean;
|
|
1070
|
+
}>;
|
|
993
1071
|
setKerberosSecret(body: {
|
|
994
1072
|
secret: string;
|
|
995
1073
|
}): Promise<{
|
|
@@ -1168,6 +1246,34 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
1168
1246
|
data: import("./connectors").ConnectorDirectoryEntry[];
|
|
1169
1247
|
}>;
|
|
1170
1248
|
};
|
|
1249
|
+
customOAuthProviders: {
|
|
1250
|
+
list(): Promise<import("./types").ListPage<import("./custom-oauth-providers").CustomOAuthProvider>>;
|
|
1251
|
+
get(id: string): Promise<import("./custom-oauth-providers").CustomOAuthProvider>;
|
|
1252
|
+
create(body: import("./custom-oauth-providers").CreateCustomOAuthProviderBody, idempotencyKey?: string): Promise<import("./custom-oauth-providers").CustomOAuthProvider>;
|
|
1253
|
+
update(id: string, body: import("./custom-oauth-providers").CustomOAuthProviderSettings, idempotencyKey?: string): Promise<import("./custom-oauth-providers").CustomOAuthProvider>;
|
|
1254
|
+
delete(id: string): Promise<{
|
|
1255
|
+
object: "custom_oauth_provider";
|
|
1256
|
+
id: string;
|
|
1257
|
+
provider_key: string;
|
|
1258
|
+
deleted: true;
|
|
1259
|
+
}>;
|
|
1260
|
+
discover(body: {
|
|
1261
|
+
issuer: string;
|
|
1262
|
+
discovery_url?: string;
|
|
1263
|
+
}): Promise<import("./custom-oauth-providers").OidcDiscoveryResult>;
|
|
1264
|
+
previewProfileMapping(body: import("./custom-oauth-providers").ProfileMappingPreviewBody, id?: string): Promise<import("./custom-oauth-providers").ProfileMappingPreview>;
|
|
1265
|
+
signingKeys(id: string): {
|
|
1266
|
+
list(): Promise<import("./types").ListPage<import("./custom-oauth-providers").UpstreamSigningKey>>;
|
|
1267
|
+
rotate(body?: {
|
|
1268
|
+
alg?: "RS256" | "PS256" | "ES256";
|
|
1269
|
+
}, idempotencyKey?: string): Promise<import("./custom-oauth-providers").UpstreamSigningKey>;
|
|
1270
|
+
retire(kid: string): Promise<{
|
|
1271
|
+
object: "upstream_signing_key";
|
|
1272
|
+
kid: string;
|
|
1273
|
+
status: "retired";
|
|
1274
|
+
}>;
|
|
1275
|
+
};
|
|
1276
|
+
};
|
|
1171
1277
|
notifications: {
|
|
1172
1278
|
send(body: import("./notifications").SendNotificationBody, idempotencyKey?: string): Promise<import("./notifications").SentNotification>;
|
|
1173
1279
|
categories: {
|
|
@@ -1384,6 +1490,7 @@ export * from './email-templates';
|
|
|
1384
1490
|
export * from './sms-templates';
|
|
1385
1491
|
export * from './localizations';
|
|
1386
1492
|
export * from './actions';
|
|
1493
|
+
export * from './action-gallery';
|
|
1387
1494
|
export * from './billing-plans';
|
|
1388
1495
|
export * from './messaging';
|
|
1389
1496
|
export * from './import-export';
|
|
@@ -1403,6 +1510,7 @@ export * from './organization-settings-schema';
|
|
|
1403
1510
|
export * from './email-addresses';
|
|
1404
1511
|
export * from './openfga';
|
|
1405
1512
|
export * from './connectors';
|
|
1513
|
+
export * from './custom-oauth-providers';
|
|
1406
1514
|
export * from './notifications';
|
|
1407
1515
|
export * from './audit-events';
|
|
1408
1516
|
export * from './activity';
|
package/dist/client/index.js
CHANGED
|
@@ -53,6 +53,7 @@ const email_templates_1 = require("./email-templates");
|
|
|
53
53
|
const sms_templates_1 = require("./sms-templates");
|
|
54
54
|
const localizations_1 = require("./localizations");
|
|
55
55
|
const actions_1 = require("./actions");
|
|
56
|
+
const action_gallery_1 = require("./action-gallery");
|
|
56
57
|
const billing_plans_1 = require("./billing-plans");
|
|
57
58
|
const messaging_1 = require("./messaging");
|
|
58
59
|
const import_export_1 = require("./import-export");
|
|
@@ -72,6 +73,7 @@ const organization_settings_schema_1 = require("./organization-settings-schema")
|
|
|
72
73
|
const email_addresses_1 = require("./email-addresses");
|
|
73
74
|
const openfga_1 = require("./openfga");
|
|
74
75
|
const connectors_1 = require("./connectors");
|
|
76
|
+
const custom_oauth_providers_1 = require("./custom-oauth-providers");
|
|
75
77
|
const notifications_1 = require("./notifications");
|
|
76
78
|
const audit_events_1 = require("./audit-events");
|
|
77
79
|
const activity_1 = require("./activity");
|
|
@@ -144,6 +146,8 @@ function buildNamespaces(request) {
|
|
|
144
146
|
smsTemplates: (0, sms_templates_1.smsTemplatesResource)(request),
|
|
145
147
|
localizations: (0, localizations_1.localizationsResource)(request),
|
|
146
148
|
actions: (0, actions_1.actionsResource)(request),
|
|
149
|
+
actionGallery: (0, action_gallery_1.actionGalleryResource)(request),
|
|
150
|
+
actionTemplates: (0, action_gallery_1.actionTemplatesResource)(request),
|
|
147
151
|
billing: (0, billing_plans_1.billingResource)(request),
|
|
148
152
|
messaging: (0, messaging_1.messagingResource)(request),
|
|
149
153
|
importExport: (0, import_export_1.importExportResource)(request),
|
|
@@ -169,6 +173,7 @@ function buildNamespaces(request) {
|
|
|
169
173
|
// OpenFGA-wire ReBAC stores, models and tuples.
|
|
170
174
|
openfga: (0, openfga_1.openfgaResource)(request),
|
|
171
175
|
connectors: (0, connectors_1.connectorsResource)(request),
|
|
176
|
+
customOAuthProviders: (0, custom_oauth_providers_1.customOAuthProvidersResource)(request),
|
|
172
177
|
notifications: (0, notifications_1.notificationsResource)(request),
|
|
173
178
|
// The tenant's own custom audit events (distinct from Atlas's auditLogs).
|
|
174
179
|
auditEvents: (0, audit_events_1.auditEventsResource)(request),
|
|
@@ -238,6 +243,7 @@ __exportStar(require("./email-templates"), exports);
|
|
|
238
243
|
__exportStar(require("./sms-templates"), exports);
|
|
239
244
|
__exportStar(require("./localizations"), exports);
|
|
240
245
|
__exportStar(require("./actions"), exports);
|
|
246
|
+
__exportStar(require("./action-gallery"), exports);
|
|
241
247
|
__exportStar(require("./billing-plans"), exports);
|
|
242
248
|
__exportStar(require("./messaging"), exports);
|
|
243
249
|
__exportStar(require("./import-export"), exports);
|
|
@@ -257,6 +263,7 @@ __exportStar(require("./organization-settings-schema"), exports);
|
|
|
257
263
|
__exportStar(require("./email-addresses"), exports);
|
|
258
264
|
__exportStar(require("./openfga"), exports);
|
|
259
265
|
__exportStar(require("./connectors"), exports);
|
|
266
|
+
__exportStar(require("./custom-oauth-providers"), exports);
|
|
260
267
|
__exportStar(require("./notifications"), exports);
|
|
261
268
|
__exportStar(require("./audit-events"), exports);
|
|
262
269
|
__exportStar(require("./activity"), exports);
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,43 @@ export interface SigningKey {
|
|
|
73
73
|
role: 'main' | 'secondary';
|
|
74
74
|
/** When a previous key leaves the JWKS (epoch ms); null for a current key. */
|
|
75
75
|
retires_at: number | null;
|
|
76
|
+
/** On the current main key: `local`, or the KMS that holds its private half. */
|
|
77
|
+
provider?: 'local' | SigningKeyProviderKind;
|
|
78
|
+
}
|
|
79
|
+
/** The cloud key management services a signing key can live in. */
|
|
80
|
+
export type SigningKeyProviderKind = 'aws_kms' | 'gcp_kms' | 'azure_key_vault';
|
|
81
|
+
/** The instance's key management service (`GET /v1/instance/signing_key_provider`). Never carries credentials. */
|
|
82
|
+
export interface SigningKeyProviderSettings {
|
|
83
|
+
object: 'signing_key_provider';
|
|
84
|
+
id?: string;
|
|
85
|
+
provider: 'local' | SigningKeyProviderKind;
|
|
86
|
+
/** The non-secret settings (region, key / key ring / vault, algorithm). Null for `local`. */
|
|
87
|
+
config: Record<string, unknown> | null;
|
|
88
|
+
/** True when the current main key is in this KMS. */
|
|
89
|
+
active: boolean;
|
|
90
|
+
/** The KMS key version tokens are signed with (ARN, resource name or key id). */
|
|
91
|
+
key_version: string | null;
|
|
92
|
+
last_verified_at?: number | null;
|
|
93
|
+
created_at?: number;
|
|
94
|
+
updated_at?: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Switch signing to a key in your own KMS. Config and credentials per provider:
|
|
98
|
+
* - `aws_kms`: config `{ region, key_id?, alg? }`, credentials `{ access_key_id, secret_access_key, session_token? }`
|
|
99
|
+
* - `gcp_kms`: config `{ crypto_key, key_version? }`, credentials `{ service_account_json }` (the key file)
|
|
100
|
+
* - `azure_key_vault`: config `{ vault_url, key_name, key_version?, alg? }`, credentials `{ tenant_id, client_id, client_secret }`
|
|
101
|
+
* Without a key id / version Atlas creates a new key version in the KMS. Add
|
|
102
|
+
* `config.secondary` for a second key of the other algorithm (aws: `{ alg, key_id? }`;
|
|
103
|
+
* gcp: `{ crypto_key, key_version? }`; azure: `{ key_name, key_version?, alg }`).
|
|
104
|
+
*/
|
|
105
|
+
export interface SetSigningKeyProviderBody {
|
|
106
|
+
provider: SigningKeyProviderKind;
|
|
107
|
+
config: Record<string, unknown>;
|
|
108
|
+
credentials: Record<string, unknown>;
|
|
109
|
+
/** How long the previous key stays published (default 86400, at most 2592000). */
|
|
110
|
+
grace_period_seconds?: number;
|
|
111
|
+
/** Publish only the new key now. */
|
|
112
|
+
emergency?: boolean;
|
|
76
113
|
}
|
|
77
114
|
export interface RotateSigningKeyBody {
|
|
78
115
|
/** How long the previous key stays published (default 86400, at most 2592000). */
|
|
@@ -81,6 +118,8 @@ export interface RotateSigningKeyBody {
|
|
|
81
118
|
emergency?: boolean;
|
|
82
119
|
/** The new main key's algorithm; omit to keep the current one. */
|
|
83
120
|
alg?: 'RS256' | 'ES256';
|
|
121
|
+
/** With keys in a key management service: rotate only the `main` or the `secondary` key (default both). */
|
|
122
|
+
key?: 'main' | 'secondary';
|
|
84
123
|
}
|
|
85
124
|
export interface SigningKeyRotation {
|
|
86
125
|
object: 'signing_key_rotation';
|
|
@@ -89,6 +128,10 @@ export interface SigningKeyRotation {
|
|
|
89
128
|
previous_kid: string | null;
|
|
90
129
|
previous_retires_at: number | null;
|
|
91
130
|
emergency: boolean;
|
|
131
|
+
/** Where the key lives (`local` or the key management service). */
|
|
132
|
+
provider?: 'local' | SigningKeyProviderKind;
|
|
133
|
+
/** With keys in a key management service: the current second-algorithm key, if configured. */
|
|
134
|
+
secondary_kid?: string | null;
|
|
92
135
|
}
|
|
93
136
|
export declare function instanceSecurityResource(request: RequestFn): {
|
|
94
137
|
/** The published token-signing keys, newest first. */
|
|
@@ -98,11 +141,25 @@ export declare function instanceSecurityResource(request: RequestFn): {
|
|
|
98
141
|
}>;
|
|
99
142
|
/** Rotate the signing key (optionally switching between RS256 and ES256). */
|
|
100
143
|
rotateSigningKey(body?: RotateSigningKeyBody): Promise<SigningKeyRotation>;
|
|
144
|
+
/** The key management service the signing key lives in (`local` when none). */
|
|
145
|
+
getSigningKeyProvider(): Promise<SigningKeyProviderSettings>;
|
|
146
|
+
/** Sign every token with a key in your own AWS KMS, Google Cloud KMS or Azure Key Vault. */
|
|
147
|
+
setSigningKeyProvider(body: SetSigningKeyProviderBody): Promise<SigningKeyProviderSettings & {
|
|
148
|
+
rotation: SigningKeyRotation;
|
|
149
|
+
}>;
|
|
150
|
+
/** Stop using the KMS: rotate back to a key Atlas holds and forget the credentials. */
|
|
151
|
+
removeSigningKeyProvider(body?: RotateSigningKeyBody): Promise<{
|
|
152
|
+
object: "signing_key_provider";
|
|
153
|
+
provider: "local";
|
|
154
|
+
deleted: true;
|
|
155
|
+
rotation: SigningKeyRotation | null;
|
|
156
|
+
}>;
|
|
101
157
|
get(): Promise<InstanceSecurity>;
|
|
102
158
|
update(body: UpdateInstanceSecurityBody): Promise<InstanceSecurityResult>;
|
|
103
159
|
/** Store the captcha provider secret. Refused while the provider is `none`. */
|
|
104
160
|
setCaptchaSecret(body: {
|
|
105
161
|
secret: string;
|
|
162
|
+
provider?: string;
|
|
106
163
|
}): Promise<{
|
|
107
164
|
object: "captcha_secret";
|
|
108
165
|
provider: string;
|
|
@@ -113,6 +170,19 @@ export declare function instanceSecurityResource(request: RequestFn): {
|
|
|
113
170
|
provider: string;
|
|
114
171
|
deleted: true;
|
|
115
172
|
}>;
|
|
173
|
+
/**
|
|
174
|
+
* Store (write-only, encrypted) the wallet RPC endpoint for an EIP-155 chain
|
|
175
|
+
* — used by wallet token gating and the Sign in with Ethereum ENS lookup. An
|
|
176
|
+
* empty url removes it. The URL is never returned.
|
|
177
|
+
*/
|
|
178
|
+
setWalletRpcSecret(body: {
|
|
179
|
+
chain_id: number;
|
|
180
|
+
url: string;
|
|
181
|
+
}): Promise<{
|
|
182
|
+
object: "wallet_rpc_secret";
|
|
183
|
+
chain_id: number;
|
|
184
|
+
set: boolean;
|
|
185
|
+
}>;
|
|
116
186
|
/** Store the Kerberos/IWA trusted-proxy secret. Refused while the strategy is off. */
|
|
117
187
|
setKerberosSecret(body: {
|
|
118
188
|
secret: string;
|
|
@@ -12,6 +12,18 @@ function instanceSecurityResource(request) {
|
|
|
12
12
|
rotateSigningKey(body = {}) {
|
|
13
13
|
return request({ method: 'POST', path: '/v1/instance/signing_keys/rotate', body });
|
|
14
14
|
},
|
|
15
|
+
/** The key management service the signing key lives in (`local` when none). */
|
|
16
|
+
getSigningKeyProvider() {
|
|
17
|
+
return request({ method: 'GET', path: '/v1/instance/signing_key_provider' });
|
|
18
|
+
},
|
|
19
|
+
/** Sign every token with a key in your own AWS KMS, Google Cloud KMS or Azure Key Vault. */
|
|
20
|
+
setSigningKeyProvider(body) {
|
|
21
|
+
return request({ method: 'PUT', path: '/v1/instance/signing_key_provider', body });
|
|
22
|
+
},
|
|
23
|
+
/** Stop using the KMS: rotate back to a key Atlas holds and forget the credentials. */
|
|
24
|
+
removeSigningKeyProvider(body = {}) {
|
|
25
|
+
return request({ method: 'DELETE', path: '/v1/instance/signing_key_provider', body });
|
|
26
|
+
},
|
|
15
27
|
get() {
|
|
16
28
|
return request({ method: 'GET', path: '/v1/instance/security' });
|
|
17
29
|
},
|
|
@@ -25,6 +37,14 @@ function instanceSecurityResource(request) {
|
|
|
25
37
|
deleteCaptchaSecret() {
|
|
26
38
|
return request({ method: 'DELETE', path: '/v1/instance/captcha_secret' });
|
|
27
39
|
},
|
|
40
|
+
/**
|
|
41
|
+
* Store (write-only, encrypted) the wallet RPC endpoint for an EIP-155 chain
|
|
42
|
+
* — used by wallet token gating and the Sign in with Ethereum ENS lookup. An
|
|
43
|
+
* empty url removes it. The URL is never returned.
|
|
44
|
+
*/
|
|
45
|
+
setWalletRpcSecret(body) {
|
|
46
|
+
return request({ method: 'PUT', path: '/v1/instance/wallet_rpc_secret', body });
|
|
47
|
+
},
|
|
28
48
|
/** Store the Kerberos/IWA trusted-proxy secret. Refused while the strategy is off. */
|
|
29
49
|
setKerberosSecret(body) {
|
|
30
50
|
return request({ method: 'PUT', path: '/v1/instance/kerberos_secret', body });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-security.js","sourceRoot":"","sources":["../../src/client/instance-security.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"instance-security.js","sourceRoot":"","sources":["../../src/client/instance-security.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,9 +43,36 @@ export interface OAuthClient {
|
|
|
43
43
|
sector_identifier_uri?: string | null;
|
|
44
44
|
/** When the current secret stops authenticating (epoch ms); null = never. */
|
|
45
45
|
client_secret_expires_at?: number | null;
|
|
46
|
+
/** `jwt` or `opaque` access tokens for this client; null = inherited from the API / instance. */
|
|
47
|
+
access_token_format?: AccessTokenFormat | null;
|
|
48
|
+
/** This client's token lifetime overrides (seconds); a null field is inherited. */
|
|
49
|
+
token_lifetimes?: OAuthTokenLifetimes;
|
|
46
50
|
created_at: number;
|
|
47
51
|
updated_at: number;
|
|
48
52
|
}
|
|
53
|
+
/** Signed JWT access tokens, or opaque references validated by introspection. */
|
|
54
|
+
export type AccessTokenFormat = 'jwt' | 'opaque';
|
|
55
|
+
/**
|
|
56
|
+
* Token lifetimes in seconds. A field left out (or null) inherits the API's,
|
|
57
|
+
* then the instance's, then Atlas's default. Bounds: access / id token 60–86400;
|
|
58
|
+
* refresh token 300–31536000 (idle ≤ absolute); authorization code 10–600;
|
|
59
|
+
* device code 60–1800.
|
|
60
|
+
*/
|
|
61
|
+
export interface OAuthTokenLifetimes {
|
|
62
|
+
access_token_ttl_seconds?: number | null;
|
|
63
|
+
id_token_ttl_seconds?: number | null;
|
|
64
|
+
refresh_token_absolute_ttl_seconds?: number | null;
|
|
65
|
+
refresh_token_idle_ttl_seconds?: number | null;
|
|
66
|
+
authorization_code_ttl_seconds?: number | null;
|
|
67
|
+
device_code_ttl_seconds?: number | null;
|
|
68
|
+
}
|
|
69
|
+
/** Access-token format and lifetimes, accepted on create and update. */
|
|
70
|
+
export interface OAuthClientTokenFields {
|
|
71
|
+
/** `jwt` or `opaque`; null inherits. */
|
|
72
|
+
access_token_format?: AccessTokenFormat | null;
|
|
73
|
+
/** Replaces the overrides; null clears them all. */
|
|
74
|
+
token_lifetimes?: OAuthTokenLifetimes | null;
|
|
75
|
+
}
|
|
49
76
|
/** OIDC Core §8 subject settings, accepted on create and update. */
|
|
50
77
|
export interface OAuthClientSubjectFields {
|
|
51
78
|
/** `public` (default): the user id. `pairwise`: a per-sector identifier. */
|
|
@@ -120,7 +147,7 @@ export interface ClientGrant {
|
|
|
120
147
|
created_at: number;
|
|
121
148
|
updated_at: number;
|
|
122
149
|
}
|
|
123
|
-
export interface CreateOAuthClientBody extends OAuthClientLogoutFields, OAuthClientSubjectFields {
|
|
150
|
+
export interface CreateOAuthClientBody extends OAuthClientLogoutFields, OAuthClientSubjectFields, OAuthClientTokenFields {
|
|
124
151
|
name: string;
|
|
125
152
|
redirect_uris: string[];
|
|
126
153
|
allowed_scopes?: string[];
|
|
@@ -131,7 +158,7 @@ export interface CreateOAuthClientBody extends OAuthClientLogoutFields, OAuthCli
|
|
|
131
158
|
/** How long the issued secret authenticates, in seconds; omit for no expiry. */
|
|
132
159
|
secret_expires_in_seconds?: number;
|
|
133
160
|
}
|
|
134
|
-
export interface UpdateOAuthClientBody extends OAuthClientLogoutFields, OAuthClientSubjectFields {
|
|
161
|
+
export interface UpdateOAuthClientBody extends OAuthClientLogoutFields, OAuthClientSubjectFields, OAuthClientTokenFields {
|
|
135
162
|
name?: string;
|
|
136
163
|
redirect_uris?: string[];
|
|
137
164
|
allowed_scopes?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-clients.js","sourceRoot":"","sources":["../../src/client/oauth-clients.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"oauth-clients.js","sourceRoot":"","sources":["../../src/client/oauth-clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,10 +15,30 @@ export interface ResourceServer {
|
|
|
15
15
|
signing_alg: 'RS256' | 'ES256' | string;
|
|
16
16
|
/** RFC 9728: Atlas serves protected-resource metadata for this API. */
|
|
17
17
|
publish_resource_metadata?: boolean;
|
|
18
|
+
/** `jwt` or `opaque` access tokens for this API; null = inherited from the client / instance. */
|
|
19
|
+
access_token_format?: 'jwt' | 'opaque' | null;
|
|
20
|
+
/** Refresh-token lifetimes for grants issued for this API (seconds); null = inherited. */
|
|
21
|
+
refresh_token_absolute_ttl_seconds?: number | null;
|
|
22
|
+
refresh_token_idle_ttl_seconds?: number | null;
|
|
23
|
+
/** client_ids of the confidential clients allowed to introspect this API's tokens. */
|
|
24
|
+
introspection_client_ids?: string[];
|
|
18
25
|
created_at: number;
|
|
19
26
|
updated_at: number;
|
|
20
27
|
}
|
|
21
|
-
|
|
28
|
+
/** Token settings an API can carry (create and update). */
|
|
29
|
+
export interface ResourceServerTokenFields {
|
|
30
|
+
/** The access-token lifetime, 60–86400 seconds. */
|
|
31
|
+
token_ttl_seconds?: number;
|
|
32
|
+
/** `jwt` or `opaque`; null inherits. */
|
|
33
|
+
access_token_format?: 'jwt' | 'opaque' | null;
|
|
34
|
+
/** 300–31536000 seconds; null inherits. */
|
|
35
|
+
refresh_token_absolute_ttl_seconds?: number | null;
|
|
36
|
+
/** 300–31536000 seconds, at most the absolute lifetime; null inherits. */
|
|
37
|
+
refresh_token_idle_ttl_seconds?: number | null;
|
|
38
|
+
/** client_ids of confidential clients (e.g. this API's backend) that may introspect its tokens. */
|
|
39
|
+
introspection_client_ids?: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface CreateResourceServerBody extends ResourceServerTokenFields {
|
|
22
42
|
identifier: string;
|
|
23
43
|
name: string;
|
|
24
44
|
/** Each scope is a bare string or `{ value, description? }`. */
|
|
@@ -29,7 +49,7 @@ export interface CreateResourceServerBody {
|
|
|
29
49
|
/** RFC 9728: serve protected-resource metadata for this API. */
|
|
30
50
|
publish_resource_metadata?: boolean;
|
|
31
51
|
}
|
|
32
|
-
export interface UpdateResourceServerBody {
|
|
52
|
+
export interface UpdateResourceServerBody extends ResourceServerTokenFields {
|
|
33
53
|
name?: string;
|
|
34
54
|
scopes?: Array<string | ResourceServerScope>;
|
|
35
55
|
token_ttl_seconds?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-servers.js","sourceRoot":"","sources":["../../src/client/resource-servers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resource-servers.js","sourceRoot":"","sources":["../../src/client/resource-servers.ts"],"names":[],"mappings":";;AAoEA,0DAkBC;AAtFD,uCAAgD;AAoEhD,SAAgB,uBAAuB,CAAC,OAAkB;IACxD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,CAAC,IAA8B;YACnC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAA8B;YAC/C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -10,6 +10,8 @@ export interface RiskWeights {
|
|
|
10
10
|
newIp: number;
|
|
11
11
|
velocity: number;
|
|
12
12
|
impossibleTravel: number;
|
|
13
|
+
/** The account was idle past the dormant-account threshold before this sign-in. */
|
|
14
|
+
dormantAccount?: number;
|
|
13
15
|
}
|
|
14
16
|
/** Per-signal on/off toggles. A disabled signal contributes nothing. */
|
|
15
17
|
export interface RiskSignalToggles {
|
|
@@ -18,6 +20,7 @@ export interface RiskSignalToggles {
|
|
|
18
20
|
newIp: boolean;
|
|
19
21
|
velocity: boolean;
|
|
20
22
|
impossibleTravel: boolean;
|
|
23
|
+
dormantAccount?: boolean;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
26
|
* Adaptive / risk-based MFA config (Auth0 "Adaptive MFA" parity). OFF by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"risk-based-mfa.js","sourceRoot":"","sources":["../../src/client/risk-based-mfa.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"risk-based-mfa.js","sourceRoot":"","sources":["../../src/client/risk-based-mfa.ts"],"names":[],"mappings":";;AAuDA,oDAWC;AAfD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,4CAA4C;QAC5C,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,0EAA0E;QAC1E,MAAM,CAAC,IAA4B;YACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -17,6 +17,8 @@ export interface Session {
|
|
|
17
17
|
*/
|
|
18
18
|
idle_expires_at?: number;
|
|
19
19
|
created_at: number;
|
|
20
|
+
/** Custom per-session data your backend (or a post_login Action) attached; null when none. */
|
|
21
|
+
custom_data?: Record<string, unknown> | null;
|
|
20
22
|
}
|
|
21
23
|
/** The session after a keep-alive {@link sessionsResource} `touch`. */
|
|
22
24
|
export interface TouchedSession extends Session {
|
|
@@ -35,6 +37,8 @@ export interface CreateSessionParams {
|
|
|
35
37
|
actor?: {
|
|
36
38
|
sub: string;
|
|
37
39
|
};
|
|
40
|
+
/** Custom per-session data to attach (a JSON object, at most 2 KB). */
|
|
41
|
+
custom_data?: Record<string, unknown>;
|
|
38
42
|
}
|
|
39
43
|
/**
|
|
40
44
|
* A freshly-minted session. Unlike a listed {@link Session}, this carries the
|
|
@@ -52,6 +56,7 @@ export interface MintedSession {
|
|
|
52
56
|
impersonated_by?: {
|
|
53
57
|
sub: string;
|
|
54
58
|
};
|
|
59
|
+
custom_data?: Record<string, unknown> | null;
|
|
55
60
|
}
|
|
56
61
|
/** A JWT minted from a named JWT template. */
|
|
57
62
|
export interface SessionTemplateToken {
|
|
@@ -74,6 +79,17 @@ export declare function sessionsResource(request: RequestFn): {
|
|
|
74
79
|
id: string;
|
|
75
80
|
status: "revoked";
|
|
76
81
|
}>;
|
|
82
|
+
/**
|
|
83
|
+
* `PUT /v1/sessions/:id/custom_data` — replace the session's custom data
|
|
84
|
+
* (null clears it). At most 2 KB; only an active session can be changed.
|
|
85
|
+
* Not for secrets: the signed-in user can read it.
|
|
86
|
+
*/
|
|
87
|
+
setCustomData(id: string, customData: Record<string, unknown> | null): Promise<Session>;
|
|
88
|
+
/**
|
|
89
|
+
* `PATCH /v1/sessions/:id/custom_data` — merge keys into the session's custom
|
|
90
|
+
* data; a key set to null is removed.
|
|
91
|
+
*/
|
|
92
|
+
updateCustomData(id: string, patch: Record<string, unknown>): Promise<Session>;
|
|
77
93
|
/**
|
|
78
94
|
* `POST /v1/sessions/:id/touch` — keep a session alive from your backend:
|
|
79
95
|
* slides its inactivity window as if the user had just loaded a page. Never
|
package/dist/client/sessions.js
CHANGED
|
@@ -21,6 +21,21 @@ function sessionsResource(request) {
|
|
|
21
21
|
revoke(id) {
|
|
22
22
|
return request({ method: 'POST', path: `/v1/sessions/${(0, request_1.enc)(id)}/revoke` });
|
|
23
23
|
},
|
|
24
|
+
/**
|
|
25
|
+
* `PUT /v1/sessions/:id/custom_data` — replace the session's custom data
|
|
26
|
+
* (null clears it). At most 2 KB; only an active session can be changed.
|
|
27
|
+
* Not for secrets: the signed-in user can read it.
|
|
28
|
+
*/
|
|
29
|
+
setCustomData(id, customData) {
|
|
30
|
+
return request({ method: 'PUT', path: `/v1/sessions/${(0, request_1.enc)(id)}/custom_data`, body: { custom_data: customData } });
|
|
31
|
+
},
|
|
32
|
+
/**
|
|
33
|
+
* `PATCH /v1/sessions/:id/custom_data` — merge keys into the session's custom
|
|
34
|
+
* data; a key set to null is removed.
|
|
35
|
+
*/
|
|
36
|
+
updateCustomData(id, patch) {
|
|
37
|
+
return request({ method: 'PATCH', path: `/v1/sessions/${(0, request_1.enc)(id)}/custom_data`, body: { custom_data: patch } });
|
|
38
|
+
},
|
|
24
39
|
/**
|
|
25
40
|
* `POST /v1/sessions/:id/touch` — keep a session alive from your backend:
|
|
26
41
|
* slides its inactivity window as if the user had just loaded a page. Never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/client/sessions.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/client/sessions.ts"],"names":[],"mappings":";;AAsEA,4CAuDC;AA7HD,uCAAgD;AAsEhD,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,OAAO;QACL;;;WAGG;QACH,MAAM,CAAC,MAA2B;YAChC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,wDAAwD;QACxD,IAAI,CAAC,MAA0B;YAC7B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD;;;;WAIG;QACH,aAAa,CAAC,EAAU,EAAE,UAA0C;YAClE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACpH,CAAC;QACD;;;WAGG;QACH,gBAAgB,CAAC,EAAU,EAAE,KAA8B;YACzD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACjH,CAAC;QACD;;;;;;WAMG;QACH,KAAK,CAAC,EAAU;YACd,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD;;;WAGG;QACH,QAAQ,CAAC,EAAU,EAAE,QAAgB;YACnC,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,WAAW,IAAA,aAAG,EAAC,QAAQ,CAAC,EAAE;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|