@openvtc/trust-tasks 0.22.1 → 0.22.3
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 +27 -0
- package/dist/_shared/components.d.ts +3 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/vetting/_shared/0.1/identity-vetting.d.ts +1 -1
- package/dist/vtc/_shared/0.1/endorsement.d.ts +1 -1
- package/dist/vtc/community/profile/show/0.1/payload.d.ts +4 -4
- package/dist/vtc/community/profile/show/0.1/payload.js +2 -2
- package/dist/vtc/community/profile/show/0.1/payload.js.map +1 -1
- package/dist/vtc/community/profile/update/0.1/payload.d.ts +4 -4
- package/dist/vtc/community/profile/update/0.1/payload.js +2 -2
- package/dist/vtc/community/profile/update/0.1/payload.js.map +1 -1
- package/dist/vtc/config/export/0.1/payload.d.ts +4 -4
- package/dist/vtc/config/export/0.1/payload.js +2 -2
- package/dist/vtc/config/export/0.1/payload.js.map +1 -1
- package/dist/vtc/config/import/0.1/payload.d.ts +4 -4
- package/dist/vtc/config/import/0.1/payload.js +2 -2
- package/dist/vtc/config/import/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsement-types/list/0.1/payload.d.ts +4 -4
- package/dist/vtc/endorsement-types/list/0.1/payload.js +2 -2
- package/dist/vtc/endorsement-types/list/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsement-types/register/0.1/payload.d.ts +7 -7
- package/dist/vtc/endorsement-types/register/0.1/payload.js +3 -3
- package/dist/vtc/endorsement-types/register/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/issue/0.1/payload.d.ts +15 -15
- package/dist/vtc/endorsements/issue/0.1/payload.js +6 -6
- package/dist/vtc/endorsements/issue/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/list/0.1/payload.d.ts +7 -7
- package/dist/vtc/endorsements/list/0.1/payload.js +3 -3
- package/dist/vtc/endorsements/list/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/revoke/0.1/payload.d.ts +5 -5
- package/dist/vtc/endorsements/revoke/0.1/payload.js +2 -2
- package/dist/vtc/endorsements/revoke/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/show/0.1/payload.d.ts +4 -4
- package/dist/vtc/endorsements/show/0.1/payload.js +2 -2
- package/dist/vtc/endorsements/show/0.1/payload.js.map +1 -1
- package/dist/vtc/members/step-up-passkey-notice/0.1/payload.d.ts +176 -0
- package/dist/vtc/members/step-up-passkey-notice/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/members/step-up-passkey-notice/0.1/payload.js +95 -0
- package/dist/vtc/members/step-up-passkey-notice/0.1/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +3 -3
- package/src/index.ts +1 -0
- package/src/vetting/_shared/0.1/identity-vetting.ts +1 -1
- package/src/vtc/_shared/0.1/endorsement.ts +1 -1
- package/src/vtc/community/profile/show/0.1/payload.ts +2 -2
- package/src/vtc/community/profile/update/0.1/payload.ts +2 -2
- package/src/vtc/config/export/0.1/payload.ts +2 -2
- package/src/vtc/config/import/0.1/payload.ts +2 -2
- package/src/vtc/endorsement-types/list/0.1/payload.ts +2 -2
- package/src/vtc/endorsement-types/register/0.1/payload.ts +4 -4
- package/src/vtc/endorsements/issue/0.1/payload.ts +9 -9
- package/src/vtc/endorsements/list/0.1/payload.ts +4 -4
- package/src/vtc/endorsements/revoke/0.1/payload.ts +3 -3
- package/src/vtc/endorsements/show/0.1/payload.ts +2 -2
- package/src/vtc/members/step-up-passkey-notice/0.1/payload.ts +137 -0
|
@@ -12,11 +12,11 @@ export interface VTCEndorsementsIssuePayload {
|
|
|
12
12
|
*/
|
|
13
13
|
subjectDid: string;
|
|
14
14
|
/**
|
|
15
|
-
* The predicate IRI the statement carries as `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/endorses/1` for a favourable claim with community-defined content, or another predicate the community registered. It MUST already be registered via vtc/endorsement-types/register; unregistered predicates are refused.
|
|
15
|
+
* The predicate IRI the statement carries as `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/endorses/1` for a favourable claim with community-defined content, or another predicate the community registered. It MUST already be registered via vtc/endorsement-types/register; unregistered predicates are refused. `https://registry.trustoverip.org/dtg/vsc/vetted/1` records an identity check the community's own operators carried out.
|
|
16
16
|
*/
|
|
17
17
|
typeUri: string;
|
|
18
18
|
/**
|
|
19
|
-
* The claim body to attest, issued as the statement's `credentialSubject.object.value
|
|
19
|
+
* The claim body to attest, issued as the statement's `credentialSubject.object.value`. Capped at 8 KiB serialised, and validated against the registered predicate's claimSchema when it declares one. Under `vetted/1` it MUST validate against the registry's vetting schema (`https://registry.trustoverip.org/dtg/vsc/vetted/1/vetting.schema.json`), its `community` MUST be this community's DID, and it MUST NOT carry the vetter-only members `identityCommitment`, `cardDigestMultibase` or `declaredRelationship`.
|
|
20
20
|
*/
|
|
21
21
|
claim: {};
|
|
22
22
|
/**
|
|
@@ -28,7 +28,7 @@ export interface VTCEndorsementsIssuePayload {
|
|
|
28
28
|
export interface VTCEndorsementsIssueResponsePayload {
|
|
29
29
|
endorsement: Endorsement;
|
|
30
30
|
/**
|
|
31
|
-
* The signed
|
|
31
|
+
* The signed statement just minted: a DTG Verifiable Statement Credential (`StatementCredential`) issued by the community with `issuerScope` public, `credentialSubject.predicate` = `typeUri` and `credentialSubject.object.value` = `claim`. Under `vetted/1` it also carries `taskContext` = this request's `id` and `taskDigestMultibase` = this request's task digest (SPEC §4.9.3), which are this exchange's outcome evidence binding. Present only here: handing back the credential is the point of an issue call, and the issuer is the only party that can. Reads carry `endorsement.issued` — the reference — instead.
|
|
32
32
|
*/
|
|
33
33
|
credential: {};
|
|
34
34
|
ext?: Ext;
|
|
@@ -79,12 +79,12 @@ export const PAYLOAD_SCHEMA = {
|
|
|
79
79
|
"type": "string",
|
|
80
80
|
"minLength": 1,
|
|
81
81
|
"maxLength": 512,
|
|
82
|
-
"description": "The predicate IRI the statement carries as `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/endorses/1` for a favourable claim with community-defined content, or another predicate the community registered. It MUST already be registered via vtc/endorsement-types/register; unregistered predicates are refused.
|
|
82
|
+
"description": "The predicate IRI the statement carries as `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/endorses/1` for a favourable claim with community-defined content, or another predicate the community registered. It MUST already be registered via vtc/endorsement-types/register; unregistered predicates are refused. `https://registry.trustoverip.org/dtg/vsc/vetted/1` records an identity check the community's own operators carried out."
|
|
83
83
|
},
|
|
84
84
|
"claim": {
|
|
85
85
|
"type": "object",
|
|
86
86
|
"minProperties": 1,
|
|
87
|
-
"description": "The claim body to attest, issued as the statement's `credentialSubject.object.value
|
|
87
|
+
"description": "The claim body to attest, issued as the statement's `credentialSubject.object.value`. Capped at 8 KiB serialised, and validated against the registered predicate's claimSchema when it declares one. Under `vetted/1` it MUST validate against the registry's vetting schema (`https://registry.trustoverip.org/dtg/vsc/vetted/1/vetting.schema.json`), its `community` MUST be this community's DID, and it MUST NOT carry the vetter-only members `identityCommitment`, `cardDigestMultibase` or `declaredRelationship`."
|
|
88
88
|
},
|
|
89
89
|
"validitySeconds": {
|
|
90
90
|
"type": "integer",
|
|
@@ -111,7 +111,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
111
111
|
},
|
|
112
112
|
"credential": {
|
|
113
113
|
"type": "object",
|
|
114
|
-
"description": "The signed
|
|
114
|
+
"description": "The signed statement just minted: a DTG Verifiable Statement Credential (`StatementCredential`) issued by the community with `issuerScope` public, `credentialSubject.predicate` = `typeUri` and `credentialSubject.object.value` = `claim`. Under `vetted/1` it also carries `taskContext` = this request's `id` and `taskDigestMultibase` = this request's task digest (SPEC §4.9.3), which are this exchange's outcome evidence binding. Present only here: handing back the credential is the point of an issue call, and the issuer is the only party that can. Reads carry `endorsement.issued` — the reference — instead."
|
|
115
115
|
},
|
|
116
116
|
"ext": {
|
|
117
117
|
"$ref": "#/$defs/Ext"
|
|
@@ -150,7 +150,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
150
150
|
"type": "string",
|
|
151
151
|
"minLength": 1,
|
|
152
152
|
"maxLength": 512,
|
|
153
|
-
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant.
|
|
153
|
+
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`."
|
|
154
154
|
},
|
|
155
155
|
"subjectDid": {
|
|
156
156
|
"type": "string",
|
|
@@ -238,7 +238,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
238
238
|
},
|
|
239
239
|
"credential": {
|
|
240
240
|
"type": "object",
|
|
241
|
-
"description": "The signed
|
|
241
|
+
"description": "The signed statement just minted: a DTG Verifiable Statement Credential (`StatementCredential`) issued by the community with `issuerScope` public, `credentialSubject.predicate` = `typeUri` and `credentialSubject.object.value` = `claim`. Under `vetted/1` it also carries `taskContext` = this request's `id` and `taskDigestMultibase` = this request's task digest (SPEC §4.9.3), which are this exchange's outcome evidence binding. Present only here: handing back the credential is the point of an issue call, and the issuer is the only party that can. Reads carry `endorsement.issued` — the reference — instead."
|
|
242
242
|
},
|
|
243
243
|
"ext": {
|
|
244
244
|
"$ref": "#/$defs/Ext"
|
|
@@ -277,7 +277,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
277
277
|
"type": "string",
|
|
278
278
|
"minLength": 1,
|
|
279
279
|
"maxLength": 512,
|
|
280
|
-
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant.
|
|
280
|
+
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`."
|
|
281
281
|
},
|
|
282
282
|
"subjectDid": {
|
|
283
283
|
"type": "string",
|
|
@@ -8,7 +8,7 @@ import type { CredentialId, CredentialReference, Endorsement, Ext } from "../../
|
|
|
8
8
|
|
|
9
9
|
export interface VTCEndorsementsListPayload {
|
|
10
10
|
/**
|
|
11
|
-
* Filter to rows of this kind: a registered predicate IRI (statements whose `credentialSubject.predicate` it is),
|
|
11
|
+
* Filter to rows of this kind: a registered predicate IRI (statements whose `credentialSubject.predicate` it is), or `role:vetter`.
|
|
12
12
|
*/
|
|
13
13
|
typeUri?: string;
|
|
14
14
|
/**
|
|
@@ -77,7 +77,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
77
77
|
"type": "string",
|
|
78
78
|
"minLength": 1,
|
|
79
79
|
"maxLength": 512,
|
|
80
|
-
"description": "Filter to rows of this kind: a registered predicate IRI (statements whose `credentialSubject.predicate` it is),
|
|
80
|
+
"description": "Filter to rows of this kind: a registered predicate IRI (statements whose `credentialSubject.predicate` it is), or `role:vetter`."
|
|
81
81
|
},
|
|
82
82
|
"subjectDid": {
|
|
83
83
|
"type": "string",
|
|
@@ -169,7 +169,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
169
169
|
"type": "string",
|
|
170
170
|
"minLength": 1,
|
|
171
171
|
"maxLength": 512,
|
|
172
|
-
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant.
|
|
172
|
+
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`."
|
|
173
173
|
},
|
|
174
174
|
"subjectDid": {
|
|
175
175
|
"type": "string",
|
|
@@ -308,7 +308,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
308
308
|
"type": "string",
|
|
309
309
|
"minLength": 1,
|
|
310
310
|
"maxLength": 512,
|
|
311
|
-
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant.
|
|
311
|
+
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`."
|
|
312
312
|
},
|
|
313
313
|
"subjectDid": {
|
|
314
314
|
"type": "string",
|
|
@@ -17,7 +17,7 @@ export interface VTCEndorsementsRevokePayload {
|
|
|
17
17
|
export interface VTCEndorsementsRevokeResponsePayload {
|
|
18
18
|
endorsementId: string;
|
|
19
19
|
/**
|
|
20
|
-
* The registry-wide revocation receipt for the underlying credential — the statement credential,
|
|
20
|
+
* The registry-wide revocation receipt for the underlying credential — the statement credential, or a vetter role credential (VAC).
|
|
21
21
|
*/
|
|
22
22
|
revocation: RevocationReceipt;
|
|
23
23
|
/**
|
|
@@ -92,7 +92,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
92
92
|
},
|
|
93
93
|
"revocation": {
|
|
94
94
|
"$ref": "#/$defs/RevocationReceipt",
|
|
95
|
-
"description": "The registry-wide revocation receipt for the underlying credential — the statement credential,
|
|
95
|
+
"description": "The registry-wide revocation receipt for the underlying credential — the statement credential, or a vetter role credential (VAC)."
|
|
96
96
|
},
|
|
97
97
|
"statusListIndex": {
|
|
98
98
|
"type": "integer",
|
|
@@ -167,7 +167,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
167
167
|
},
|
|
168
168
|
"revocation": {
|
|
169
169
|
"$ref": "#/$defs/RevocationReceipt",
|
|
170
|
-
"description": "The registry-wide revocation receipt for the underlying credential — the statement credential,
|
|
170
|
+
"description": "The registry-wide revocation receipt for the underlying credential — the statement credential, or a vetter role credential (VAC)."
|
|
171
171
|
},
|
|
172
172
|
"statusListIndex": {
|
|
173
173
|
"type": "integer",
|
|
@@ -107,7 +107,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
107
107
|
"type": "string",
|
|
108
108
|
"minLength": 1,
|
|
109
109
|
"maxLength": 512,
|
|
110
|
-
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant.
|
|
110
|
+
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`."
|
|
111
111
|
},
|
|
112
112
|
"subjectDid": {
|
|
113
113
|
"type": "string",
|
|
@@ -229,7 +229,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
229
229
|
"type": "string",
|
|
230
230
|
"minLength": 1,
|
|
231
231
|
"maxLength": 512,
|
|
232
|
-
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant.
|
|
232
|
+
"description": "What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`."
|
|
233
233
|
},
|
|
234
234
|
"subjectDid": {
|
|
235
235
|
"type": "string",
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/vtc/members/step-up-passkey-notice/0.1/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Ext } from "../../../../_shared/components.js";
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The VTC tells a member that a step-up passkey was enrolled for them or revoked from them, naming who acted and when. Unsolicited: the member did not ask, and may be offline.
|
|
11
|
+
*/
|
|
12
|
+
export interface VTCMembersStepUpPasskeyNoticePayload {
|
|
13
|
+
/**
|
|
14
|
+
* `enrolled` — a step-up passkey (auth/passkey/enroll/invite or auth/passkey/enroll/finish, purpose stepUp) is now bound to the member. `revoked` — one was unbound (auth/passkey/revoke/finish).
|
|
15
|
+
*/
|
|
16
|
+
event: "enrolled" | "revoked";
|
|
17
|
+
/**
|
|
18
|
+
* The member's own DID — the notice's recipient. Carried in the payload as well as the envelope so that a forwarded notice, detached from its transport, still names its subject.
|
|
19
|
+
*/
|
|
20
|
+
did: string;
|
|
21
|
+
/**
|
|
22
|
+
* Durable identifier of the step-up credential, as auth/passkey/revoke/start and auth/passkey/admin-list carry it: opaque, non-secret metadata, never key material. Lets the member recognise or distinguish a credential without disclosing anything that would help an attacker.
|
|
23
|
+
*/
|
|
24
|
+
credentialId: string;
|
|
25
|
+
/**
|
|
26
|
+
* Who acted: the member themselves (equal to `did`) when they enrolled or revoked it on their own session, or an administrator's DID when they invited the enrollment or revoked for the member. A `by` other than `did` is the signal this task exists to carry — act on someone else's behalf is exactly the account-takeover shape a silent change would hide.
|
|
27
|
+
*/
|
|
28
|
+
by: string;
|
|
29
|
+
/**
|
|
30
|
+
* When the event took effect at the VTC — not when the notice was sent, which differs whenever the member was offline.
|
|
31
|
+
*/
|
|
32
|
+
at: string;
|
|
33
|
+
/**
|
|
34
|
+
* The acting administrator's stated reason, verbatim, when one was given. Absent rather than empty when none was: a community that chose not to explain is itself information. Never populated for a member acting on their own credential — they already know why.
|
|
35
|
+
*/
|
|
36
|
+
reason?: string;
|
|
37
|
+
ext?: Ext;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
41
|
+
export type { Ext };
|
|
42
|
+
|
|
43
|
+
/** Trust Task type URI. */
|
|
44
|
+
export const TYPE_URI = "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1" as const;
|
|
45
|
+
|
|
46
|
+
/** Stable alias for this specification's request payload shape. */
|
|
47
|
+
export type Payload = VTCMembersStepUpPasskeyNoticePayload;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* This specification's payload schema, as a value.
|
|
51
|
+
*
|
|
52
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
53
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
54
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
55
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
56
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
57
|
+
*/
|
|
58
|
+
export const PAYLOAD_SCHEMA = {
|
|
59
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
60
|
+
"$id": "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1",
|
|
61
|
+
"title": "VTC Members — Step-up Passkey Notice — payload",
|
|
62
|
+
"description": "The VTC tells a member that a step-up passkey was enrolled for them or revoked from them, naming who acted and when. Unsolicited: the member did not ask, and may be offline.",
|
|
63
|
+
"type": "object",
|
|
64
|
+
"additionalProperties": false,
|
|
65
|
+
"required": [
|
|
66
|
+
"event",
|
|
67
|
+
"did",
|
|
68
|
+
"credentialId",
|
|
69
|
+
"by",
|
|
70
|
+
"at"
|
|
71
|
+
],
|
|
72
|
+
"properties": {
|
|
73
|
+
"event": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"enum": [
|
|
76
|
+
"enrolled",
|
|
77
|
+
"revoked"
|
|
78
|
+
],
|
|
79
|
+
"description": "`enrolled` — a step-up passkey (auth/passkey/enroll/invite or auth/passkey/enroll/finish, purpose stepUp) is now bound to the member. `revoked` — one was unbound (auth/passkey/revoke/finish)."
|
|
80
|
+
},
|
|
81
|
+
"did": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"minLength": 1,
|
|
84
|
+
"description": "The member's own DID — the notice's recipient. Carried in the payload as well as the envelope so that a forwarded notice, detached from its transport, still names its subject."
|
|
85
|
+
},
|
|
86
|
+
"credentialId": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"minLength": 1,
|
|
89
|
+
"description": "Durable identifier of the step-up credential, as auth/passkey/revoke/start and auth/passkey/admin-list carry it: opaque, non-secret metadata, never key material. Lets the member recognise or distinguish a credential without disclosing anything that would help an attacker."
|
|
90
|
+
},
|
|
91
|
+
"by": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"minLength": 1,
|
|
94
|
+
"description": "Who acted: the member themselves (equal to `did`) when they enrolled or revoked it on their own session, or an administrator's DID when they invited the enrollment or revoked for the member. A `by` other than `did` is the signal this task exists to carry — act on someone else's behalf is exactly the account-takeover shape a silent change would hide."
|
|
95
|
+
},
|
|
96
|
+
"at": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"format": "date-time",
|
|
99
|
+
"description": "When the event took effect at the VTC — not when the notice was sent, which differs whenever the member was offline."
|
|
100
|
+
},
|
|
101
|
+
"reason": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"maxLength": 1024,
|
|
104
|
+
"description": "The acting administrator's stated reason, verbatim, when one was given. Absent rather than empty when none was: a community that chose not to explain is itself information. Never populated for a member acting on their own credential — they already know why."
|
|
105
|
+
},
|
|
106
|
+
"ext": {
|
|
107
|
+
"$ref": "#/$defs/Ext"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"$defs": {
|
|
111
|
+
"Ext": {
|
|
112
|
+
"title": "Ext",
|
|
113
|
+
"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.",
|
|
114
|
+
"type": "object",
|
|
115
|
+
"minProperties": 1,
|
|
116
|
+
"additionalProperties": true,
|
|
117
|
+
"propertyNames": {
|
|
118
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
} as const;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
126
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
127
|
+
* per-specification and cannot be derived from the document alone, and
|
|
128
|
+
* item 2 needs the schema this carries.
|
|
129
|
+
*/
|
|
130
|
+
export const SPEC = {
|
|
131
|
+
typeUri: TYPE_URI,
|
|
132
|
+
isBearer: false,
|
|
133
|
+
isProofRequired: true,
|
|
134
|
+
isRecipientRequired: true,
|
|
135
|
+
isIssuedAtRequired: true,
|
|
136
|
+
payloadSchema: PAYLOAD_SCHEMA,
|
|
137
|
+
} as const;
|