@openvtc/trust-tasks 0.20.8 → 0.21.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 +233 -0
- package/dist/_shared/components.d.ts +299 -2
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts +456 -0
- package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts.map +1 -0
- package/dist/auth/passkey/enroll/invite/0.2/payload.js +248 -0
- package/dist/auth/passkey/enroll/invite/0.2/payload.js.map +1 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts +728 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts.map +1 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js +430 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js.map +1 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts +1043 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts.map +1 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js +628 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js.map +1 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts +533 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts.map +1 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.js +315 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.js.map +1 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.d.ts +511 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.d.ts.map +1 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.js +297 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.js.map +1 -0
- package/dist/auth/step-up/approve-response/0.5/payload.d.ts +887 -0
- package/dist/auth/step-up/approve-response/0.5/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approve-response/0.5/payload.js +504 -0
- package/dist/auth/step-up/approve-response/0.5/payload.js.map +1 -0
- package/dist/device/list/0.1/payload.d.ts +4 -4
- package/dist/device/list/0.1/payload.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.js +4 -2
- package/dist/device/list/0.1/payload.js.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +4 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.1/payload.d.ts +4 -4
- package/dist/device/register/0.1/payload.d.ts.map +1 -1
- package/dist/device/register/0.1/payload.js +4 -2
- package/dist/device/register/0.1/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +4 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/git-ns/_shared/0.4/git-ns.d.ts +16 -0
- package/dist/git-ns/_shared/0.4/git-ns.d.ts.map +1 -0
- package/dist/git-ns/_shared/0.4/git-ns.js +6 -0
- package/dist/git-ns/_shared/0.4/git-ns.js.map +1 -0
- package/dist/git-ns/account/link-status/0.1/payload.d.ts +2 -2
- package/dist/git-ns/account/link-status/0.1/payload.js +2 -2
- package/dist/git-ns/account/link-status/0.1/payload.js.map +1 -1
- package/dist/git-ns/account/unlink/0.1/payload.d.ts +411 -0
- package/dist/git-ns/account/unlink/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/account/unlink/0.1/payload.js +228 -0
- package/dist/git-ns/account/unlink/0.1/payload.js.map +1 -0
- package/dist/git-ns/bridge/event/0.3/payload.d.ts +1682 -0
- package/dist/git-ns/bridge/event/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/bridge/event/0.3/payload.js +971 -0
- package/dist/git-ns/bridge/event/0.3/payload.js.map +1 -0
- package/dist/git-ns/bridge/job/0.4/payload.d.ts +1068 -0
- package/dist/git-ns/bridge/job/0.4/payload.d.ts.map +1 -0
- package/dist/git-ns/bridge/job/0.4/payload.js +573 -0
- package/dist/git-ns/bridge/job/0.4/payload.js.map +1 -0
- package/dist/git-ns/drift/resolve/0.3/payload.d.ts +1072 -0
- package/dist/git-ns/drift/resolve/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/drift/resolve/0.3/payload.js +634 -0
- package/dist/git-ns/drift/resolve/0.3/payload.js.map +1 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.d.ts +515 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.js +296 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.js.map +1 -0
- package/dist/git-ns/repo/create/0.3/payload.d.ts +1101 -0
- package/dist/git-ns/repo/create/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/repo/create/0.3/payload.js +646 -0
- package/dist/git-ns/repo/create/0.3/payload.js.map +1 -0
- package/dist/git-ns/right/break-glass/0.1/payload.d.ts +685 -0
- package/dist/git-ns/right/break-glass/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/right/break-glass/0.1/payload.js +397 -0
- package/dist/git-ns/right/break-glass/0.1/payload.js.map +1 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts +384 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.js +216 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.js.map +1 -0
- package/dist/git-ns/right/grant/0.3/payload.d.ts +678 -0
- package/dist/git-ns/right/grant/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/right/grant/0.3/payload.js +383 -0
- package/dist/git-ns/right/grant/0.3/payload.js.map +1 -0
- package/dist/git-ns/right/ratify/0.1/payload.d.ts +702 -0
- package/dist/git-ns/right/ratify/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/right/ratify/0.1/payload.js +404 -0
- package/dist/git-ns/right/ratify/0.1/payload.js.map +1 -0
- package/dist/git-ns/right/revoke/0.3/payload.d.ts +664 -0
- package/dist/git-ns/right/revoke/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/right/revoke/0.3/payload.js +378 -0
- package/dist/git-ns/right/revoke/0.3/payload.js.map +1 -0
- package/dist/git-ns/roles/reproject/0.1/payload.d.ts +325 -0
- package/dist/git-ns/roles/reproject/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/roles/reproject/0.1/payload.js +176 -0
- package/dist/git-ns/roles/reproject/0.1/payload.js.map +1 -0
- package/dist/git-ns/view/0.1/payload.d.ts +2 -2
- package/dist/git-ns/view/0.1/payload.js +2 -2
- package/dist/git-ns/view/0.1/payload.js.map +1 -1
- package/dist/git-ns/view/0.2/payload.d.ts +2 -2
- package/dist/git-ns/view/0.2/payload.js +2 -2
- package/dist/git-ns/view/0.2/payload.js.map +1 -1
- package/dist/git-ns/view/0.3/payload.d.ts +2 -2
- package/dist/git-ns/view/0.3/payload.js +2 -2
- package/dist/git-ns/view/0.3/payload.js.map +1 -1
- package/dist/git-ns/view/0.4/payload.d.ts +1696 -0
- package/dist/git-ns/view/0.4/payload.d.ts.map +1 -0
- package/dist/git-ns/view/0.4/payload.js +1012 -0
- package/dist/git-ns/view/0.4/payload.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -1
- package/dist/messaging/message/status/0.1/payload.d.ts +372 -0
- package/dist/messaging/message/status/0.1/payload.d.ts.map +1 -0
- package/dist/messaging/message/status/0.1/payload.js +214 -0
- package/dist/messaging/message/status/0.1/payload.js.map +1 -0
- package/dist/vta/_shared/0.3/did-key-roles.d.ts +16 -0
- package/dist/vta/_shared/0.3/did-key-roles.d.ts.map +1 -0
- package/dist/vta/_shared/0.3/did-key-roles.js +6 -0
- package/dist/vta/_shared/0.3/did-key-roles.js.map +1 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts +326 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts.map +1 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.js +175 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts +1914 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.js +1128 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts +1603 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.js +942 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts +1914 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.js +1123 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts +2021 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js +1168 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts +1992 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js +1151 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/update/2.0/payload.d.ts +1062 -0
- package/dist/vta/webvh/dids/update/2.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/update/2.0/payload.js +616 -0
- package/dist/vta/webvh/dids/update/2.0/payload.js.map +1 -0
- package/dist/vtc/credentials/reissue/0.1/payload.d.ts +502 -0
- package/dist/vtc/credentials/reissue/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/credentials/reissue/0.1/payload.js +282 -0
- package/dist/vtc/credentials/reissue/0.1/payload.js.map +1 -0
- package/dist/vtc/members/personhood/challenge/0.1/payload.d.ts +2 -2
- package/dist/vtc/members/personhood/challenge/0.1/payload.js +2 -2
- package/dist/vtc/members/personhood/challenge/0.1/payload.js.map +1 -1
- package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +2 -2
- package/dist/vtc/vetting/vetters/profile/0.1/payload.js +2 -2
- package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -1
- package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +2 -2
- package/dist/vtc/vetting/vetters/resend/0.1/payload.js +2 -2
- package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +313 -2
- package/src/auth/passkey/enroll/invite/0.2/payload.ts +325 -0
- package/src/auth/passkey/enroll/redeem/finish/0.1/payload.ts +499 -0
- package/src/auth/passkey/enroll/redeem/start/0.1/payload.ts +700 -0
- package/src/auth/passkey/revoke/finish/0.2/payload.ts +379 -0
- package/src/auth/passkey/revoke/start/0.2/payload.ts +349 -0
- package/src/auth/step-up/approve-response/0.5/payload.ts +593 -0
- package/src/device/list/0.1/payload.ts +4 -2
- package/src/device/list/0.2/payload.ts +4 -2
- package/src/device/register/0.1/payload.ts +4 -2
- package/src/device/register/0.2/payload.ts +4 -2
- package/src/git-ns/_shared/0.4/git-ns.ts +17 -0
- package/src/git-ns/account/link-status/0.1/payload.ts +2 -2
- package/src/git-ns/account/unlink/0.1/payload.ts +274 -0
- package/src/git-ns/bridge/event/0.3/payload.ts +1132 -0
- package/src/git-ns/bridge/job/0.4/payload.ts +691 -0
- package/src/git-ns/drift/resolve/0.3/payload.ts +707 -0
- package/src/git-ns/namespace/reseat/0.3/payload.ts +342 -0
- package/src/git-ns/repo/create/0.3/payload.ts +706 -0
- package/src/git-ns/right/break-glass/0.1/payload.ts +443 -0
- package/src/git-ns/right/break-glass-notice/0.1/payload.ts +258 -0
- package/src/git-ns/right/grant/0.3/payload.ts +434 -0
- package/src/git-ns/right/ratify/0.1/payload.ts +455 -0
- package/src/git-ns/right/revoke/0.3/payload.ts +425 -0
- package/src/git-ns/roles/reproject/0.1/payload.ts +220 -0
- package/src/git-ns/view/0.1/payload.ts +2 -2
- package/src/git-ns/view/0.2/payload.ts +2 -2
- package/src/git-ns/view/0.3/payload.ts +2 -2
- package/src/git-ns/view/0.4/payload.ts +1075 -0
- package/src/index.ts +30 -0
- package/src/messaging/message/status/0.1/payload.ts +270 -0
- package/src/vta/_shared/0.3/did-key-roles.ts +17 -0
- package/src/vta/attestation/mnemonic-export/1.0/payload.ts +232 -0
- package/src/vta/webvh/dids/keys/add/1.0/payload.ts +1217 -0
- package/src/vta/webvh/dids/keys/list/1.0/payload.ts +1004 -0
- package/src/vta/webvh/dids/keys/retire/1.0/payload.ts +1212 -0
- package/src/vta/webvh/dids/keys/revoke/1.0/payload.ts +1276 -0
- package/src/vta/webvh/dids/rotate-keys/2.0/payload.ts +1262 -0
- package/src/vta/webvh/dids/update/2.0/payload.ts +713 -0
- package/src/vtc/credentials/reissue/0.1/payload.ts +357 -0
- package/src/vtc/members/personhood/challenge/0.1/payload.ts +2 -2
- package/src/vtc/vetting/vetters/profile/0.1/payload.ts +2 -2
- package/src/vtc/vetting/vetters/resend/0.1/payload.ts +2 -2
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/auth/passkey/enroll/invite/0.2/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
import type { Ext } from "../../../../../_shared/components.js";
|
|
6
|
+
/**
|
|
7
|
+
* An administrator issues a single-use invite, redeemed with a separately delivered claim code, that binds a passkey to a subject who cannot yet authorise the binding themselves: their first passkey, or — for `purpose: stepUp` — a step-up-only passkey that never opens a session.
|
|
8
|
+
*/
|
|
9
|
+
export interface AuthPasskeyEnrollInvite {
|
|
10
|
+
/**
|
|
11
|
+
* The VID the invitee will enroll. The admin asserts this binding; the redemption ceremony verifies the invitee controls a passkey and holds the claim code, but does NOT independently verify the subject — trust flows from the admin. For `purpose: stepUp` the consumer MUST already recognise the subject (a member, say).
|
|
12
|
+
*/
|
|
13
|
+
subject: string;
|
|
14
|
+
/**
|
|
15
|
+
* What the redeemed credential may authenticate. `session` (the default, and 0.1's only behaviour): it signs the subject in, with the role and scopes the invite carries. `stepUp`: it is accepted only as the user-verification evidence of a step-up bound to one operation (auth/step-up/approve-response `evidence.kind: webauthn`), never to open or elevate a session; `role` and `scopes` MUST then be absent.
|
|
16
|
+
*/
|
|
17
|
+
purpose?: "session" | "stepUp";
|
|
18
|
+
/**
|
|
19
|
+
* Role the invitee receives on successful enrollment. Consumer-defined vocabulary; if absent the consumer applies its default role.
|
|
20
|
+
*/
|
|
21
|
+
role?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Optional scopes to attach on enrollment.
|
|
24
|
+
*/
|
|
25
|
+
scopes?: string[];
|
|
26
|
+
/**
|
|
27
|
+
* Suggested label for the credential. Used as a default; the invitee MAY override during redemption.
|
|
28
|
+
*/
|
|
29
|
+
deviceLabel?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Seconds the invite remains valid. Consumers SHOULD pick 15 min – 24 h, and MAY cap it lower; longer windows widen the attack surface.
|
|
32
|
+
*/
|
|
33
|
+
ttl?: number;
|
|
34
|
+
ext?: Ext;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The issued invite. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response.
|
|
38
|
+
*/
|
|
39
|
+
export interface AuthPasskeyEnrollInviteResponsePayload {
|
|
40
|
+
invite: {
|
|
41
|
+
/**
|
|
42
|
+
* Opaque single-use invite token. The invitee presents it to the consumer during enrollment. ≥128 bits entropy.
|
|
43
|
+
*/
|
|
44
|
+
token: string;
|
|
45
|
+
/**
|
|
46
|
+
* Operator-shareable URL that, when opened in a WebAuthn-capable browser, drives the redemption ceremony (auth/passkey/enroll/redeem/start). Carries the token. MUST NOT carry the claim code.
|
|
47
|
+
*/
|
|
48
|
+
url: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Echo of the invitee's VID.
|
|
52
|
+
*/
|
|
53
|
+
subject: string;
|
|
54
|
+
/**
|
|
55
|
+
* Echo of the purpose the redeemed credential will have.
|
|
56
|
+
*/
|
|
57
|
+
purpose: "session" | "stepUp";
|
|
58
|
+
expiresAt: string;
|
|
59
|
+
ext?: Ext;
|
|
60
|
+
/**
|
|
61
|
+
* A short code the invitee types at redemption, returned exactly once. The administrator delivers it over a different channel from `url`, so that intercepting one channel is not enough to redeem. The consumer stores only a slow hash of it.
|
|
62
|
+
*/
|
|
63
|
+
claimCode: string;
|
|
64
|
+
}
|
|
65
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
66
|
+
export type { Ext };
|
|
67
|
+
/** Trust Task type URI. */
|
|
68
|
+
export declare const TYPE_URI: "https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2";
|
|
69
|
+
/** Stable alias for this specification's request payload shape. */
|
|
70
|
+
export type Payload = AuthPasskeyEnrollInvite;
|
|
71
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
72
|
+
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response";
|
|
73
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
74
|
+
export type Response = AuthPasskeyEnrollInviteResponsePayload;
|
|
75
|
+
/**
|
|
76
|
+
* This specification's payload schema, as a value.
|
|
77
|
+
*
|
|
78
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
79
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
80
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
81
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
82
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
83
|
+
*/
|
|
84
|
+
export declare const PAYLOAD_SCHEMA: {
|
|
85
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
86
|
+
readonly $id: "https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2";
|
|
87
|
+
readonly title: "Auth — Passkey Enroll (invite)";
|
|
88
|
+
readonly description: "An administrator issues a single-use invite, redeemed with a separately delivered claim code, that binds a passkey to a subject who cannot yet authorise the binding themselves: their first passkey, or — for `purpose: stepUp` — a step-up-only passkey that never opens a session.";
|
|
89
|
+
readonly type: "object";
|
|
90
|
+
readonly additionalProperties: false;
|
|
91
|
+
readonly required: readonly ["subject"];
|
|
92
|
+
readonly properties: {
|
|
93
|
+
readonly subject: {
|
|
94
|
+
readonly type: "string";
|
|
95
|
+
readonly minLength: 1;
|
|
96
|
+
readonly description: "The VID the invitee will enroll. The admin asserts this binding; the redemption ceremony verifies the invitee controls a passkey and holds the claim code, but does NOT independently verify the subject — trust flows from the admin. For `purpose: stepUp` the consumer MUST already recognise the subject (a member, say).";
|
|
97
|
+
};
|
|
98
|
+
readonly purpose: {
|
|
99
|
+
readonly type: "string";
|
|
100
|
+
readonly enum: readonly ["session", "stepUp"];
|
|
101
|
+
readonly default: "session";
|
|
102
|
+
readonly description: "What the redeemed credential may authenticate. `session` (the default, and 0.1's only behaviour): it signs the subject in, with the role and scopes the invite carries. `stepUp`: it is accepted only as the user-verification evidence of a step-up bound to one operation (auth/step-up/approve-response `evidence.kind: webauthn`), never to open or elevate a session; `role` and `scopes` MUST then be absent.";
|
|
103
|
+
};
|
|
104
|
+
readonly role: {
|
|
105
|
+
readonly type: "string";
|
|
106
|
+
readonly description: "Role the invitee receives on successful enrollment. Consumer-defined vocabulary; if absent the consumer applies its default role.";
|
|
107
|
+
};
|
|
108
|
+
readonly scopes: {
|
|
109
|
+
readonly type: "array";
|
|
110
|
+
readonly items: {
|
|
111
|
+
readonly type: "string";
|
|
112
|
+
readonly minLength: 1;
|
|
113
|
+
};
|
|
114
|
+
readonly description: "Optional scopes to attach on enrollment.";
|
|
115
|
+
};
|
|
116
|
+
readonly deviceLabel: {
|
|
117
|
+
readonly type: "string";
|
|
118
|
+
readonly maxLength: 256;
|
|
119
|
+
readonly description: "Suggested label for the credential. Used as a default; the invitee MAY override during redemption.";
|
|
120
|
+
};
|
|
121
|
+
readonly ttl: {
|
|
122
|
+
readonly type: "integer";
|
|
123
|
+
readonly minimum: 1;
|
|
124
|
+
readonly description: "Seconds the invite remains valid. Consumers SHOULD pick 15 min – 24 h, and MAY cap it lower; longer windows widen the attack surface.";
|
|
125
|
+
};
|
|
126
|
+
readonly ext: {
|
|
127
|
+
readonly $ref: "#/$defs/Ext";
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
readonly $defs: {
|
|
131
|
+
readonly Response: {
|
|
132
|
+
readonly $anchor: "response";
|
|
133
|
+
readonly title: "Auth Passkey Enroll Invite — response payload";
|
|
134
|
+
readonly description: "The issued invite. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response.";
|
|
135
|
+
readonly type: "object";
|
|
136
|
+
readonly additionalProperties: false;
|
|
137
|
+
readonly required: readonly ["invite", "subject", "purpose", "expiresAt", "claimCode"];
|
|
138
|
+
readonly properties: {
|
|
139
|
+
readonly invite: {
|
|
140
|
+
readonly type: "object";
|
|
141
|
+
readonly additionalProperties: false;
|
|
142
|
+
readonly required: readonly ["token", "url"];
|
|
143
|
+
readonly properties: {
|
|
144
|
+
readonly token: {
|
|
145
|
+
readonly type: "string";
|
|
146
|
+
readonly minLength: 16;
|
|
147
|
+
readonly description: "Opaque single-use invite token. The invitee presents it to the consumer during enrollment. ≥128 bits entropy.";
|
|
148
|
+
};
|
|
149
|
+
readonly url: {
|
|
150
|
+
readonly type: "string";
|
|
151
|
+
readonly format: "uri";
|
|
152
|
+
readonly description: "Operator-shareable URL that, when opened in a WebAuthn-capable browser, drives the redemption ceremony (auth/passkey/enroll/redeem/start). Carries the token. MUST NOT carry the claim code.";
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
readonly subject: {
|
|
157
|
+
readonly type: "string";
|
|
158
|
+
readonly description: "Echo of the invitee's VID.";
|
|
159
|
+
};
|
|
160
|
+
readonly purpose: {
|
|
161
|
+
readonly type: "string";
|
|
162
|
+
readonly enum: readonly ["session", "stepUp"];
|
|
163
|
+
readonly description: "Echo of the purpose the redeemed credential will have.";
|
|
164
|
+
};
|
|
165
|
+
readonly expiresAt: {
|
|
166
|
+
readonly type: "string";
|
|
167
|
+
readonly format: "date-time";
|
|
168
|
+
};
|
|
169
|
+
readonly ext: {
|
|
170
|
+
readonly $ref: "#/$defs/Ext";
|
|
171
|
+
};
|
|
172
|
+
readonly claimCode: {
|
|
173
|
+
readonly type: "string";
|
|
174
|
+
readonly minLength: 8;
|
|
175
|
+
readonly maxLength: 64;
|
|
176
|
+
readonly description: "A short code the invitee types at redemption, returned exactly once. The administrator delivers it over a different channel from `url`, so that intercepting one channel is not enough to redeem. The consumer stores only a slow hash of it.";
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
readonly Ext: {
|
|
181
|
+
readonly title: "Ext";
|
|
182
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
183
|
+
readonly type: "object";
|
|
184
|
+
readonly minProperties: 1;
|
|
185
|
+
readonly additionalProperties: true;
|
|
186
|
+
readonly propertyNames: {
|
|
187
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
193
|
+
export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
194
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
195
|
+
readonly $ref: "#/$defs/Response";
|
|
196
|
+
readonly $defs: {
|
|
197
|
+
readonly Response: {
|
|
198
|
+
readonly $anchor: "response";
|
|
199
|
+
readonly title: "Auth Passkey Enroll Invite — response payload";
|
|
200
|
+
readonly description: "The issued invite. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response.";
|
|
201
|
+
readonly type: "object";
|
|
202
|
+
readonly additionalProperties: false;
|
|
203
|
+
readonly required: readonly ["invite", "subject", "purpose", "expiresAt", "claimCode"];
|
|
204
|
+
readonly properties: {
|
|
205
|
+
readonly invite: {
|
|
206
|
+
readonly type: "object";
|
|
207
|
+
readonly additionalProperties: false;
|
|
208
|
+
readonly required: readonly ["token", "url"];
|
|
209
|
+
readonly properties: {
|
|
210
|
+
readonly token: {
|
|
211
|
+
readonly type: "string";
|
|
212
|
+
readonly minLength: 16;
|
|
213
|
+
readonly description: "Opaque single-use invite token. The invitee presents it to the consumer during enrollment. ≥128 bits entropy.";
|
|
214
|
+
};
|
|
215
|
+
readonly url: {
|
|
216
|
+
readonly type: "string";
|
|
217
|
+
readonly format: "uri";
|
|
218
|
+
readonly description: "Operator-shareable URL that, when opened in a WebAuthn-capable browser, drives the redemption ceremony (auth/passkey/enroll/redeem/start). Carries the token. MUST NOT carry the claim code.";
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
readonly subject: {
|
|
223
|
+
readonly type: "string";
|
|
224
|
+
readonly description: "Echo of the invitee's VID.";
|
|
225
|
+
};
|
|
226
|
+
readonly purpose: {
|
|
227
|
+
readonly type: "string";
|
|
228
|
+
readonly enum: readonly ["session", "stepUp"];
|
|
229
|
+
readonly description: "Echo of the purpose the redeemed credential will have.";
|
|
230
|
+
};
|
|
231
|
+
readonly expiresAt: {
|
|
232
|
+
readonly type: "string";
|
|
233
|
+
readonly format: "date-time";
|
|
234
|
+
};
|
|
235
|
+
readonly ext: {
|
|
236
|
+
readonly $ref: "#/$defs/Ext";
|
|
237
|
+
};
|
|
238
|
+
readonly claimCode: {
|
|
239
|
+
readonly type: "string";
|
|
240
|
+
readonly minLength: 8;
|
|
241
|
+
readonly maxLength: 64;
|
|
242
|
+
readonly description: "A short code the invitee types at redemption, returned exactly once. The administrator delivers it over a different channel from `url`, so that intercepting one channel is not enough to redeem. The consumer stores only a slow hash of it.";
|
|
243
|
+
};
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
readonly Ext: {
|
|
247
|
+
readonly title: "Ext";
|
|
248
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
249
|
+
readonly type: "object";
|
|
250
|
+
readonly minProperties: 1;
|
|
251
|
+
readonly additionalProperties: true;
|
|
252
|
+
readonly propertyNames: {
|
|
253
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
260
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
261
|
+
* per-specification and cannot be derived from the document alone, and
|
|
262
|
+
* item 2 needs the schema this carries.
|
|
263
|
+
*/
|
|
264
|
+
export declare const SPEC: {
|
|
265
|
+
readonly typeUri: "https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2";
|
|
266
|
+
readonly isBearer: false;
|
|
267
|
+
readonly isProofRequired: true;
|
|
268
|
+
readonly isRecipientRequired: true;
|
|
269
|
+
readonly isIssuedAtRequired: true;
|
|
270
|
+
readonly payloadSchema: {
|
|
271
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
272
|
+
readonly $id: "https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2";
|
|
273
|
+
readonly title: "Auth — Passkey Enroll (invite)";
|
|
274
|
+
readonly description: "An administrator issues a single-use invite, redeemed with a separately delivered claim code, that binds a passkey to a subject who cannot yet authorise the binding themselves: their first passkey, or — for `purpose: stepUp` — a step-up-only passkey that never opens a session.";
|
|
275
|
+
readonly type: "object";
|
|
276
|
+
readonly additionalProperties: false;
|
|
277
|
+
readonly required: readonly ["subject"];
|
|
278
|
+
readonly properties: {
|
|
279
|
+
readonly subject: {
|
|
280
|
+
readonly type: "string";
|
|
281
|
+
readonly minLength: 1;
|
|
282
|
+
readonly description: "The VID the invitee will enroll. The admin asserts this binding; the redemption ceremony verifies the invitee controls a passkey and holds the claim code, but does NOT independently verify the subject — trust flows from the admin. For `purpose: stepUp` the consumer MUST already recognise the subject (a member, say).";
|
|
283
|
+
};
|
|
284
|
+
readonly purpose: {
|
|
285
|
+
readonly type: "string";
|
|
286
|
+
readonly enum: readonly ["session", "stepUp"];
|
|
287
|
+
readonly default: "session";
|
|
288
|
+
readonly description: "What the redeemed credential may authenticate. `session` (the default, and 0.1's only behaviour): it signs the subject in, with the role and scopes the invite carries. `stepUp`: it is accepted only as the user-verification evidence of a step-up bound to one operation (auth/step-up/approve-response `evidence.kind: webauthn`), never to open or elevate a session; `role` and `scopes` MUST then be absent.";
|
|
289
|
+
};
|
|
290
|
+
readonly role: {
|
|
291
|
+
readonly type: "string";
|
|
292
|
+
readonly description: "Role the invitee receives on successful enrollment. Consumer-defined vocabulary; if absent the consumer applies its default role.";
|
|
293
|
+
};
|
|
294
|
+
readonly scopes: {
|
|
295
|
+
readonly type: "array";
|
|
296
|
+
readonly items: {
|
|
297
|
+
readonly type: "string";
|
|
298
|
+
readonly minLength: 1;
|
|
299
|
+
};
|
|
300
|
+
readonly description: "Optional scopes to attach on enrollment.";
|
|
301
|
+
};
|
|
302
|
+
readonly deviceLabel: {
|
|
303
|
+
readonly type: "string";
|
|
304
|
+
readonly maxLength: 256;
|
|
305
|
+
readonly description: "Suggested label for the credential. Used as a default; the invitee MAY override during redemption.";
|
|
306
|
+
};
|
|
307
|
+
readonly ttl: {
|
|
308
|
+
readonly type: "integer";
|
|
309
|
+
readonly minimum: 1;
|
|
310
|
+
readonly description: "Seconds the invite remains valid. Consumers SHOULD pick 15 min – 24 h, and MAY cap it lower; longer windows widen the attack surface.";
|
|
311
|
+
};
|
|
312
|
+
readonly ext: {
|
|
313
|
+
readonly $ref: "#/$defs/Ext";
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
readonly $defs: {
|
|
317
|
+
readonly Response: {
|
|
318
|
+
readonly $anchor: "response";
|
|
319
|
+
readonly title: "Auth Passkey Enroll Invite — response payload";
|
|
320
|
+
readonly description: "The issued invite. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response.";
|
|
321
|
+
readonly type: "object";
|
|
322
|
+
readonly additionalProperties: false;
|
|
323
|
+
readonly required: readonly ["invite", "subject", "purpose", "expiresAt", "claimCode"];
|
|
324
|
+
readonly properties: {
|
|
325
|
+
readonly invite: {
|
|
326
|
+
readonly type: "object";
|
|
327
|
+
readonly additionalProperties: false;
|
|
328
|
+
readonly required: readonly ["token", "url"];
|
|
329
|
+
readonly properties: {
|
|
330
|
+
readonly token: {
|
|
331
|
+
readonly type: "string";
|
|
332
|
+
readonly minLength: 16;
|
|
333
|
+
readonly description: "Opaque single-use invite token. The invitee presents it to the consumer during enrollment. ≥128 bits entropy.";
|
|
334
|
+
};
|
|
335
|
+
readonly url: {
|
|
336
|
+
readonly type: "string";
|
|
337
|
+
readonly format: "uri";
|
|
338
|
+
readonly description: "Operator-shareable URL that, when opened in a WebAuthn-capable browser, drives the redemption ceremony (auth/passkey/enroll/redeem/start). Carries the token. MUST NOT carry the claim code.";
|
|
339
|
+
};
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
readonly subject: {
|
|
343
|
+
readonly type: "string";
|
|
344
|
+
readonly description: "Echo of the invitee's VID.";
|
|
345
|
+
};
|
|
346
|
+
readonly purpose: {
|
|
347
|
+
readonly type: "string";
|
|
348
|
+
readonly enum: readonly ["session", "stepUp"];
|
|
349
|
+
readonly description: "Echo of the purpose the redeemed credential will have.";
|
|
350
|
+
};
|
|
351
|
+
readonly expiresAt: {
|
|
352
|
+
readonly type: "string";
|
|
353
|
+
readonly format: "date-time";
|
|
354
|
+
};
|
|
355
|
+
readonly ext: {
|
|
356
|
+
readonly $ref: "#/$defs/Ext";
|
|
357
|
+
};
|
|
358
|
+
readonly claimCode: {
|
|
359
|
+
readonly type: "string";
|
|
360
|
+
readonly minLength: 8;
|
|
361
|
+
readonly maxLength: 64;
|
|
362
|
+
readonly description: "A short code the invitee types at redemption, returned exactly once. The administrator delivers it over a different channel from `url`, so that intercepting one channel is not enough to redeem. The consumer stores only a slow hash of it.";
|
|
363
|
+
};
|
|
364
|
+
};
|
|
365
|
+
};
|
|
366
|
+
readonly Ext: {
|
|
367
|
+
readonly title: "Ext";
|
|
368
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
369
|
+
readonly type: "object";
|
|
370
|
+
readonly minProperties: 1;
|
|
371
|
+
readonly additionalProperties: true;
|
|
372
|
+
readonly propertyNames: {
|
|
373
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
374
|
+
};
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
};
|
|
378
|
+
};
|
|
379
|
+
/**
|
|
380
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
381
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
382
|
+
* parties (§7.3 item 5).
|
|
383
|
+
*/
|
|
384
|
+
export declare const RESPONSE_SPEC: {
|
|
385
|
+
readonly typeUri: "https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response";
|
|
386
|
+
readonly isBearer: false;
|
|
387
|
+
readonly isProofRequired: true;
|
|
388
|
+
readonly isRecipientRequired: true;
|
|
389
|
+
readonly isIssuedAtRequired: true;
|
|
390
|
+
readonly payloadSchema: {
|
|
391
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
392
|
+
readonly $ref: "#/$defs/Response";
|
|
393
|
+
readonly $defs: {
|
|
394
|
+
readonly Response: {
|
|
395
|
+
readonly $anchor: "response";
|
|
396
|
+
readonly title: "Auth Passkey Enroll Invite — response payload";
|
|
397
|
+
readonly description: "The issued invite. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/passkey/enroll/invite/0.2#response.";
|
|
398
|
+
readonly type: "object";
|
|
399
|
+
readonly additionalProperties: false;
|
|
400
|
+
readonly required: readonly ["invite", "subject", "purpose", "expiresAt", "claimCode"];
|
|
401
|
+
readonly properties: {
|
|
402
|
+
readonly invite: {
|
|
403
|
+
readonly type: "object";
|
|
404
|
+
readonly additionalProperties: false;
|
|
405
|
+
readonly required: readonly ["token", "url"];
|
|
406
|
+
readonly properties: {
|
|
407
|
+
readonly token: {
|
|
408
|
+
readonly type: "string";
|
|
409
|
+
readonly minLength: 16;
|
|
410
|
+
readonly description: "Opaque single-use invite token. The invitee presents it to the consumer during enrollment. ≥128 bits entropy.";
|
|
411
|
+
};
|
|
412
|
+
readonly url: {
|
|
413
|
+
readonly type: "string";
|
|
414
|
+
readonly format: "uri";
|
|
415
|
+
readonly description: "Operator-shareable URL that, when opened in a WebAuthn-capable browser, drives the redemption ceremony (auth/passkey/enroll/redeem/start). Carries the token. MUST NOT carry the claim code.";
|
|
416
|
+
};
|
|
417
|
+
};
|
|
418
|
+
};
|
|
419
|
+
readonly subject: {
|
|
420
|
+
readonly type: "string";
|
|
421
|
+
readonly description: "Echo of the invitee's VID.";
|
|
422
|
+
};
|
|
423
|
+
readonly purpose: {
|
|
424
|
+
readonly type: "string";
|
|
425
|
+
readonly enum: readonly ["session", "stepUp"];
|
|
426
|
+
readonly description: "Echo of the purpose the redeemed credential will have.";
|
|
427
|
+
};
|
|
428
|
+
readonly expiresAt: {
|
|
429
|
+
readonly type: "string";
|
|
430
|
+
readonly format: "date-time";
|
|
431
|
+
};
|
|
432
|
+
readonly ext: {
|
|
433
|
+
readonly $ref: "#/$defs/Ext";
|
|
434
|
+
};
|
|
435
|
+
readonly claimCode: {
|
|
436
|
+
readonly type: "string";
|
|
437
|
+
readonly minLength: 8;
|
|
438
|
+
readonly maxLength: 64;
|
|
439
|
+
readonly description: "A short code the invitee types at redemption, returned exactly once. The administrator delivers it over a different channel from `url`, so that intercepting one channel is not enough to redeem. The consumer stores only a slow hash of it.";
|
|
440
|
+
};
|
|
441
|
+
};
|
|
442
|
+
};
|
|
443
|
+
readonly Ext: {
|
|
444
|
+
readonly title: "Ext";
|
|
445
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
446
|
+
readonly type: "object";
|
|
447
|
+
readonly minProperties: 1;
|
|
448
|
+
readonly additionalProperties: true;
|
|
449
|
+
readonly propertyNames: {
|
|
450
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
451
|
+
};
|
|
452
|
+
};
|
|
453
|
+
};
|
|
454
|
+
};
|
|
455
|
+
};
|
|
456
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../../src/auth/passkey/enroll/invite/0.2/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAGhE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AACD;;GAEG;AACH,MAAM,WAAW,sCAAsC;IACrD,MAAM,EAAE;QACN;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kHAAkH;AAClH,YAAY,EAAE,GAAG,EAAE,CAAC;AAEpB,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,EAAG,4DAAqE,CAAC;AAE9F,mEAAmE;AACnE,MAAM,MAAM,OAAO,GAAG,uBAAuB,CAAC;AAE9C,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAG,qEAA8E,CAAC;AAEhH,4EAA4E;AAC5E,MAAM,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AAE9D;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4HjB,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4E1B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOP,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhB,CAAC"}
|