@openvtc/trust-tasks 0.17.4 → 0.17.6
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 +86 -0
- package/dist/_shared/components.d.ts +17 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/auth/step-up/approve-response/0.3/payload.d.ts +887 -0
- package/dist/auth/step-up/approve-response/0.3/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approve-response/0.3/payload.js +505 -0
- package/dist/auth/step-up/approve-response/0.3/payload.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/persona/claim-types/list/1.0/payload.d.ts +772 -0
- package/dist/persona/claim-types/list/1.0/payload.d.ts.map +1 -0
- package/dist/persona/claim-types/list/1.0/payload.js +389 -0
- package/dist/persona/claim-types/list/1.0/payload.js.map +1 -0
- package/dist/rooms/_shared/0.1/room.d.ts +1 -1
- package/dist/rooms/_shared/0.1/room.d.ts.map +1 -1
- package/dist/rooms/epoch/chain/0.1/payload.d.ts +490 -0
- package/dist/rooms/epoch/chain/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/epoch/chain/0.1/payload.js +272 -0
- package/dist/rooms/epoch/chain/0.1/payload.js.map +1 -0
- package/dist/rooms/epoch/mint/0.1/payload.d.ts +104 -2
- package/dist/rooms/epoch/mint/0.1/payload.d.ts.map +1 -1
- package/dist/rooms/epoch/mint/0.1/payload.js +57 -0
- package/dist/rooms/epoch/mint/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +17 -0
- package/src/auth/step-up/approve-response/0.3/payload.ts +594 -0
- package/src/index.ts +3 -0
- package/src/persona/claim-types/list/1.0/payload.ts +590 -0
- package/src/rooms/_shared/0.1/room.ts +1 -1
- package/src/rooms/epoch/chain/0.1/payload.ts +323 -0
- package/src/rooms/epoch/mint/0.1/payload.ts +63 -2
|
@@ -0,0 +1,887 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/auth/step-up/approve-response/0.3/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
import type { AuthenticatorAssertionResponseLogin, Ext, Session } from "../../../../_shared/components.js";
|
|
6
|
+
/**
|
|
7
|
+
* How the approver demonstrated the factor backing this elevation. A tagged union on `kind`. When `evidence` is absent the elevation is gated solely by the document's framework `proof` (equivalent to `kind: did-signed`). When `kind: webauthn` is supplied, the carried WebAuthn assertion over `challenge` is the gate and the framework `proof` MAY be omitted.
|
|
8
|
+
*/
|
|
9
|
+
export type StepUpEvidence = DidSigned | WebAuthn;
|
|
10
|
+
/**
|
|
11
|
+
* The approver's signed ratification of a step-up: subject + sessionId + challenge are echoed inside a proof-bearing document so the relying party can elevate the session.
|
|
12
|
+
*/
|
|
13
|
+
export interface AuthStepUpApproveResponse {
|
|
14
|
+
/**
|
|
15
|
+
* Echoed from the matching approve-request. The relying party verifies it equals the session's subject.
|
|
16
|
+
*/
|
|
17
|
+
subject: string;
|
|
18
|
+
/**
|
|
19
|
+
* Echoed from the matching approve-request. The relying party uses it to locate the session to elevate.
|
|
20
|
+
*/
|
|
21
|
+
sessionId: string;
|
|
22
|
+
/**
|
|
23
|
+
* Echoed from the matching approve-request. The relying party verifies it equals the bound challenge.
|
|
24
|
+
*/
|
|
25
|
+
challenge: string;
|
|
26
|
+
/**
|
|
27
|
+
* `approved` elevates the session per the relying party's policy. `denied` is a signed refusal — useful for audit even though it elevates nothing.
|
|
28
|
+
*/
|
|
29
|
+
decision: "approved" | "denied";
|
|
30
|
+
/**
|
|
31
|
+
* Required when decision is `denied`. Human-readable rationale the user provided (or which the approver inferred).
|
|
32
|
+
*/
|
|
33
|
+
deniedReason?: string;
|
|
34
|
+
/**
|
|
35
|
+
* The acr the approver believes it has cryptographically demonstrated. The relying party MAY accept this, MAY upgrade to a lower value, but MUST NOT exceed it.
|
|
36
|
+
*/
|
|
37
|
+
grantedAcr?: string;
|
|
38
|
+
evidence?: StepUpEvidence;
|
|
39
|
+
ext?: Ext;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The elevation is gated by the document's framework `proof` — a Data Integrity signature from a key the subject controls (SPEC §4.7). This is the default when `evidence` is omitted. `amr` reflects "vta"/"did".
|
|
43
|
+
*/
|
|
44
|
+
export interface DidSigned {
|
|
45
|
+
kind: "didSigned";
|
|
46
|
+
}
|
|
47
|
+
export interface WebAuthn {
|
|
48
|
+
kind: "webauthn";
|
|
49
|
+
/**
|
|
50
|
+
* The unmodified AuthenticatorAssertionResponse from the platform WebAuthn API (`navigator.credentials.get` / ASAuthorization / Credential Manager). Its `clientDataJSON` challenge MUST equal the step-up `challenge`. The relying party verifies it per WebAuthn Level 2 §7.2 exactly as auth/passkey/login/finish does; the assertion is the gate and `amr` reflects "passkey".
|
|
51
|
+
*/
|
|
52
|
+
assertion: AuthenticatorAssertionResponseLogin;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Acknowledgement the relying party returns after processing the approval. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response.
|
|
56
|
+
*/
|
|
57
|
+
export interface AuthStepUpApproveResponseRelyingPartyAck {
|
|
58
|
+
/**
|
|
59
|
+
* `elevated` — the approval was applied and the session's assurance level was raised. `recorded` — the approval was applied to the single operation it was bound to, and NO session was elevated; see `boundTo`. `rejected` — the approval was not applied.
|
|
60
|
+
*/
|
|
61
|
+
status: "elevated" | "recorded" | "rejected";
|
|
62
|
+
/**
|
|
63
|
+
* Present when status is `elevated`. The session's updated amr/acr after the approval was applied. Absent for `recorded`, which changes no session — a consumer reading it as a fallback would report an elevation that did not happen.
|
|
64
|
+
*/
|
|
65
|
+
session?: Session;
|
|
66
|
+
/**
|
|
67
|
+
* Present when status is `recorded`. An opaque relying-party identifier for the single operation this approval authorised — for a `release: stepUp` disclosure, the `previewId`. Opaque on purpose: it is echoed for the approver's audit trail and is not a capability, since the approval it names is the relying party's own state and cannot be spent by presenting this value.
|
|
68
|
+
*/
|
|
69
|
+
boundTo?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Present when status is `rejected` (e.g. "challenge expired", "session not found", "acr ceiling exceeded").
|
|
72
|
+
*/
|
|
73
|
+
reason?: string;
|
|
74
|
+
ext?: Ext;
|
|
75
|
+
}
|
|
76
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
77
|
+
export type { AuthenticatorAssertionResponseLogin, Ext, Session };
|
|
78
|
+
/** Trust Task type URI. */
|
|
79
|
+
export declare const TYPE_URI: "https://trusttasks.org/spec/auth/step-up/approve-response/0.3";
|
|
80
|
+
/** Stable alias for this specification's request payload shape. */
|
|
81
|
+
export type Payload = AuthStepUpApproveResponse;
|
|
82
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
83
|
+
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response";
|
|
84
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
85
|
+
export type Response = AuthStepUpApproveResponseRelyingPartyAck;
|
|
86
|
+
/**
|
|
87
|
+
* This specification's payload schema, as a value.
|
|
88
|
+
*
|
|
89
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
90
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
91
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
92
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
93
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
94
|
+
*/
|
|
95
|
+
export declare const PAYLOAD_SCHEMA: {
|
|
96
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
97
|
+
readonly $id: "https://trusttasks.org/spec/auth/step-up/approve-response/0.3";
|
|
98
|
+
readonly title: "Auth — Step-up Approve Response";
|
|
99
|
+
readonly description: "The approver's signed ratification of a step-up: subject + sessionId + challenge are echoed inside a proof-bearing document so the relying party can elevate the session.";
|
|
100
|
+
readonly type: "object";
|
|
101
|
+
readonly additionalProperties: false;
|
|
102
|
+
readonly required: readonly ["subject", "sessionId", "challenge", "decision"];
|
|
103
|
+
readonly properties: {
|
|
104
|
+
readonly subject: {
|
|
105
|
+
readonly type: "string";
|
|
106
|
+
readonly minLength: 1;
|
|
107
|
+
readonly description: "Echoed from the matching approve-request. The relying party verifies it equals the session's subject.";
|
|
108
|
+
};
|
|
109
|
+
readonly sessionId: {
|
|
110
|
+
readonly type: "string";
|
|
111
|
+
readonly minLength: 1;
|
|
112
|
+
readonly description: "Echoed from the matching approve-request. The relying party uses it to locate the session to elevate.";
|
|
113
|
+
};
|
|
114
|
+
readonly challenge: {
|
|
115
|
+
readonly type: "string";
|
|
116
|
+
readonly minLength: 16;
|
|
117
|
+
readonly description: "Echoed from the matching approve-request. The relying party verifies it equals the bound challenge.";
|
|
118
|
+
};
|
|
119
|
+
readonly decision: {
|
|
120
|
+
readonly type: "string";
|
|
121
|
+
readonly enum: readonly ["approved", "denied"];
|
|
122
|
+
readonly description: "`approved` elevates the session per the relying party's policy. `denied` is a signed refusal — useful for audit even though it elevates nothing.";
|
|
123
|
+
};
|
|
124
|
+
readonly deniedReason: {
|
|
125
|
+
readonly type: "string";
|
|
126
|
+
readonly maxLength: 500;
|
|
127
|
+
readonly description: "Required when decision is `denied`. Human-readable rationale the user provided (or which the approver inferred).";
|
|
128
|
+
};
|
|
129
|
+
readonly grantedAcr: {
|
|
130
|
+
readonly type: "string";
|
|
131
|
+
readonly description: "The acr the approver believes it has cryptographically demonstrated. The relying party MAY accept this, MAY upgrade to a lower value, but MUST NOT exceed it.";
|
|
132
|
+
};
|
|
133
|
+
readonly evidence: {
|
|
134
|
+
readonly $ref: "#/$defs/Evidence";
|
|
135
|
+
readonly description: "How the approver demonstrated the factor backing this elevation. A tagged union on `kind`. When `evidence` is absent the elevation is gated solely by the document's framework `proof` (equivalent to `kind: did-signed`). When `kind: webauthn` is supplied, the carried WebAuthn assertion over `challenge` is the gate and the framework `proof` MAY be omitted.";
|
|
136
|
+
};
|
|
137
|
+
readonly ext: {
|
|
138
|
+
readonly $ref: "#/$defs/Ext";
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
readonly $defs: {
|
|
142
|
+
readonly Evidence: {
|
|
143
|
+
readonly $anchor: "evidence";
|
|
144
|
+
readonly title: "Step-up Evidence";
|
|
145
|
+
readonly description: "Tagged union over `kind` describing the cryptographic factor the approver presents to back the elevation. Pluggable so new factor kinds can be added without disturbing existing consumers (SPEC §4.5.1 ext rules apply to unknown kinds at the producer's discretion).";
|
|
146
|
+
readonly oneOf: readonly [{
|
|
147
|
+
readonly title: "DidSigned";
|
|
148
|
+
readonly type: "object";
|
|
149
|
+
readonly additionalProperties: false;
|
|
150
|
+
readonly required: readonly ["kind"];
|
|
151
|
+
readonly properties: {
|
|
152
|
+
readonly kind: {
|
|
153
|
+
readonly const: "didSigned";
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
readonly description: "The elevation is gated by the document's framework `proof` — a Data Integrity signature from a key the subject controls (SPEC §4.7). This is the default when `evidence` is omitted. `amr` reflects \"vta\"/\"did\".";
|
|
157
|
+
}, {
|
|
158
|
+
readonly title: "WebAuthn";
|
|
159
|
+
readonly type: "object";
|
|
160
|
+
readonly additionalProperties: false;
|
|
161
|
+
readonly required: readonly ["kind", "assertion"];
|
|
162
|
+
readonly properties: {
|
|
163
|
+
readonly kind: {
|
|
164
|
+
readonly const: "webauthn";
|
|
165
|
+
};
|
|
166
|
+
readonly assertion: {
|
|
167
|
+
readonly $ref: "#/$defs/AssertionResponse";
|
|
168
|
+
readonly description: "The unmodified AuthenticatorAssertionResponse from the platform WebAuthn API (`navigator.credentials.get` / ASAuthorization / Credential Manager). Its `clientDataJSON` challenge MUST equal the step-up `challenge`. The relying party verifies it per WebAuthn Level 2 §7.2 exactly as auth/passkey/login/finish does; the assertion is the gate and `amr` reflects \"passkey\".";
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
}];
|
|
172
|
+
};
|
|
173
|
+
readonly Response: {
|
|
174
|
+
readonly $anchor: "response";
|
|
175
|
+
readonly title: "Auth Step-up Approve Response — relying party ack";
|
|
176
|
+
readonly description: "Acknowledgement the relying party returns after processing the approval. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response.";
|
|
177
|
+
readonly type: "object";
|
|
178
|
+
readonly additionalProperties: false;
|
|
179
|
+
readonly required: readonly ["status"];
|
|
180
|
+
readonly properties: {
|
|
181
|
+
readonly status: {
|
|
182
|
+
readonly type: "string";
|
|
183
|
+
readonly enum: readonly ["elevated", "recorded", "rejected"];
|
|
184
|
+
readonly description: "`elevated` — the approval was applied and the session's assurance level was raised. `recorded` — the approval was applied to the single operation it was bound to, and NO session was elevated; see `boundTo`. `rejected` — the approval was not applied.";
|
|
185
|
+
};
|
|
186
|
+
readonly session: {
|
|
187
|
+
readonly $ref: "#/$defs/Session";
|
|
188
|
+
readonly description: "Present when status is `elevated`. The session's updated amr/acr after the approval was applied. Absent for `recorded`, which changes no session — a consumer reading it as a fallback would report an elevation that did not happen.";
|
|
189
|
+
};
|
|
190
|
+
readonly boundTo: {
|
|
191
|
+
readonly type: "string";
|
|
192
|
+
readonly maxLength: 256;
|
|
193
|
+
readonly description: "Present when status is `recorded`. An opaque relying-party identifier for the single operation this approval authorised — for a `release: stepUp` disclosure, the `previewId`. Opaque on purpose: it is echoed for the approver's audit trail and is not a capability, since the approval it names is the relying party's own state and cannot be spent by presenting this value.";
|
|
194
|
+
};
|
|
195
|
+
readonly reason: {
|
|
196
|
+
readonly type: "string";
|
|
197
|
+
readonly maxLength: 1024;
|
|
198
|
+
readonly description: "Present when status is `rejected` (e.g. \"challenge expired\", \"session not found\", \"acr ceiling exceeded\").";
|
|
199
|
+
};
|
|
200
|
+
readonly ext: {
|
|
201
|
+
readonly $ref: "#/$defs/Ext";
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
readonly Ext: {
|
|
206
|
+
readonly title: "Ext";
|
|
207
|
+
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.";
|
|
208
|
+
readonly type: "object";
|
|
209
|
+
readonly minProperties: 1;
|
|
210
|
+
readonly additionalProperties: true;
|
|
211
|
+
readonly propertyNames: {
|
|
212
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
readonly Session: {
|
|
216
|
+
readonly $anchor: "session";
|
|
217
|
+
readonly title: "Session";
|
|
218
|
+
readonly description: "A logical authentication context bound to a subject. Producers and consumers exchange Session-shaped data in challenge issuance, authentication responses, and introspection (whoami).";
|
|
219
|
+
readonly type: "object";
|
|
220
|
+
readonly additionalProperties: false;
|
|
221
|
+
readonly required: readonly ["id", "subject", "issuedAt", "expiresAt"];
|
|
222
|
+
readonly properties: {
|
|
223
|
+
readonly id: {
|
|
224
|
+
readonly type: "string";
|
|
225
|
+
readonly minLength: 1;
|
|
226
|
+
readonly description: "Opaque, server-chosen session identifier. Stable for the lifetime of the session. Consumers MUST treat the value as opaque; no structure is implied.";
|
|
227
|
+
};
|
|
228
|
+
readonly subject: {
|
|
229
|
+
readonly type: "string";
|
|
230
|
+
readonly minLength: 1;
|
|
231
|
+
readonly description: "The authenticated party's VID (typically a DID URL).";
|
|
232
|
+
};
|
|
233
|
+
readonly issuedAt: {
|
|
234
|
+
readonly type: "string";
|
|
235
|
+
readonly format: "date-time";
|
|
236
|
+
readonly description: "ISO-8601 timestamp when the session was created.";
|
|
237
|
+
};
|
|
238
|
+
readonly expiresAt: {
|
|
239
|
+
readonly type: "string";
|
|
240
|
+
readonly format: "date-time";
|
|
241
|
+
readonly description: "ISO-8601 timestamp when the session ceases to be valid. Producers SHOULD refresh before this time; consumers MUST reject after.";
|
|
242
|
+
};
|
|
243
|
+
readonly amr: {
|
|
244
|
+
readonly type: "array";
|
|
245
|
+
readonly minItems: 1;
|
|
246
|
+
readonly items: {
|
|
247
|
+
readonly type: "string";
|
|
248
|
+
readonly minLength: 1;
|
|
249
|
+
};
|
|
250
|
+
readonly description: "Authentication Methods References per [RFC 8176]. Typical values: \"did\" (challenge-response), \"passkey\" (WebAuthn), \"vta\" (verifiable-trust agent approval). Multi-factor sessions list every method used.";
|
|
251
|
+
};
|
|
252
|
+
readonly acr: {
|
|
253
|
+
readonly type: "string";
|
|
254
|
+
readonly description: "Authentication Context Class Reference per [OIDC Core §2]. Profiles define their own values; the recommended set is \"aal1\" (single-factor DID auth), \"aal2\" (a second possession-or-biometric factor confirmed), and \"aal3\" (hardware-bound second factor).";
|
|
255
|
+
};
|
|
256
|
+
readonly ext: {
|
|
257
|
+
readonly $ref: "#/$defs/Ext";
|
|
258
|
+
readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
readonly AssertionResponse: {
|
|
263
|
+
readonly $anchor: "assertionResponse";
|
|
264
|
+
readonly title: "AuthenticatorAssertionResponse (login)";
|
|
265
|
+
readonly description: "The credential the client returns from `navigator.credentials.get`. Binary fields are base64url-encoded.";
|
|
266
|
+
readonly type: "object";
|
|
267
|
+
readonly additionalProperties: false;
|
|
268
|
+
readonly required: readonly ["id", "rawId", "type", "response"];
|
|
269
|
+
readonly properties: {
|
|
270
|
+
readonly id: {
|
|
271
|
+
readonly type: "string";
|
|
272
|
+
};
|
|
273
|
+
readonly rawId: {
|
|
274
|
+
readonly type: "string";
|
|
275
|
+
};
|
|
276
|
+
readonly type: {
|
|
277
|
+
readonly const: "public-key";
|
|
278
|
+
};
|
|
279
|
+
readonly response: {
|
|
280
|
+
readonly type: "object";
|
|
281
|
+
readonly additionalProperties: false;
|
|
282
|
+
readonly required: readonly ["clientDataJSON", "authenticatorData", "signature"];
|
|
283
|
+
readonly properties: {
|
|
284
|
+
readonly clientDataJSON: {
|
|
285
|
+
readonly type: "string";
|
|
286
|
+
};
|
|
287
|
+
readonly authenticatorData: {
|
|
288
|
+
readonly type: "string";
|
|
289
|
+
};
|
|
290
|
+
readonly signature: {
|
|
291
|
+
readonly type: "string";
|
|
292
|
+
};
|
|
293
|
+
readonly userHandle: {
|
|
294
|
+
readonly type: readonly ["string", "null"];
|
|
295
|
+
};
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
readonly authenticatorAttachment: {
|
|
299
|
+
readonly enum: readonly ["platform", "cross-platform"];
|
|
300
|
+
};
|
|
301
|
+
readonly clientExtensionResults: {
|
|
302
|
+
readonly type: "object";
|
|
303
|
+
};
|
|
304
|
+
};
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
};
|
|
308
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
309
|
+
export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
310
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
311
|
+
readonly $ref: "#/$defs/Response";
|
|
312
|
+
readonly $defs: {
|
|
313
|
+
readonly Evidence: {
|
|
314
|
+
readonly $anchor: "evidence";
|
|
315
|
+
readonly title: "Step-up Evidence";
|
|
316
|
+
readonly description: "Tagged union over `kind` describing the cryptographic factor the approver presents to back the elevation. Pluggable so new factor kinds can be added without disturbing existing consumers (SPEC §4.5.1 ext rules apply to unknown kinds at the producer's discretion).";
|
|
317
|
+
readonly oneOf: readonly [{
|
|
318
|
+
readonly title: "DidSigned";
|
|
319
|
+
readonly type: "object";
|
|
320
|
+
readonly additionalProperties: false;
|
|
321
|
+
readonly required: readonly ["kind"];
|
|
322
|
+
readonly properties: {
|
|
323
|
+
readonly kind: {
|
|
324
|
+
readonly const: "didSigned";
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
readonly description: "The elevation is gated by the document's framework `proof` — a Data Integrity signature from a key the subject controls (SPEC §4.7). This is the default when `evidence` is omitted. `amr` reflects \"vta\"/\"did\".";
|
|
328
|
+
}, {
|
|
329
|
+
readonly title: "WebAuthn";
|
|
330
|
+
readonly type: "object";
|
|
331
|
+
readonly additionalProperties: false;
|
|
332
|
+
readonly required: readonly ["kind", "assertion"];
|
|
333
|
+
readonly properties: {
|
|
334
|
+
readonly kind: {
|
|
335
|
+
readonly const: "webauthn";
|
|
336
|
+
};
|
|
337
|
+
readonly assertion: {
|
|
338
|
+
readonly $ref: "#/$defs/AssertionResponse";
|
|
339
|
+
readonly description: "The unmodified AuthenticatorAssertionResponse from the platform WebAuthn API (`navigator.credentials.get` / ASAuthorization / Credential Manager). Its `clientDataJSON` challenge MUST equal the step-up `challenge`. The relying party verifies it per WebAuthn Level 2 §7.2 exactly as auth/passkey/login/finish does; the assertion is the gate and `amr` reflects \"passkey\".";
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
}];
|
|
343
|
+
};
|
|
344
|
+
readonly Response: {
|
|
345
|
+
readonly $anchor: "response";
|
|
346
|
+
readonly title: "Auth Step-up Approve Response — relying party ack";
|
|
347
|
+
readonly description: "Acknowledgement the relying party returns after processing the approval. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response.";
|
|
348
|
+
readonly type: "object";
|
|
349
|
+
readonly additionalProperties: false;
|
|
350
|
+
readonly required: readonly ["status"];
|
|
351
|
+
readonly properties: {
|
|
352
|
+
readonly status: {
|
|
353
|
+
readonly type: "string";
|
|
354
|
+
readonly enum: readonly ["elevated", "recorded", "rejected"];
|
|
355
|
+
readonly description: "`elevated` — the approval was applied and the session's assurance level was raised. `recorded` — the approval was applied to the single operation it was bound to, and NO session was elevated; see `boundTo`. `rejected` — the approval was not applied.";
|
|
356
|
+
};
|
|
357
|
+
readonly session: {
|
|
358
|
+
readonly $ref: "#/$defs/Session";
|
|
359
|
+
readonly description: "Present when status is `elevated`. The session's updated amr/acr after the approval was applied. Absent for `recorded`, which changes no session — a consumer reading it as a fallback would report an elevation that did not happen.";
|
|
360
|
+
};
|
|
361
|
+
readonly boundTo: {
|
|
362
|
+
readonly type: "string";
|
|
363
|
+
readonly maxLength: 256;
|
|
364
|
+
readonly description: "Present when status is `recorded`. An opaque relying-party identifier for the single operation this approval authorised — for a `release: stepUp` disclosure, the `previewId`. Opaque on purpose: it is echoed for the approver's audit trail and is not a capability, since the approval it names is the relying party's own state and cannot be spent by presenting this value.";
|
|
365
|
+
};
|
|
366
|
+
readonly reason: {
|
|
367
|
+
readonly type: "string";
|
|
368
|
+
readonly maxLength: 1024;
|
|
369
|
+
readonly description: "Present when status is `rejected` (e.g. \"challenge expired\", \"session not found\", \"acr ceiling exceeded\").";
|
|
370
|
+
};
|
|
371
|
+
readonly ext: {
|
|
372
|
+
readonly $ref: "#/$defs/Ext";
|
|
373
|
+
};
|
|
374
|
+
};
|
|
375
|
+
};
|
|
376
|
+
readonly Ext: {
|
|
377
|
+
readonly title: "Ext";
|
|
378
|
+
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.";
|
|
379
|
+
readonly type: "object";
|
|
380
|
+
readonly minProperties: 1;
|
|
381
|
+
readonly additionalProperties: true;
|
|
382
|
+
readonly propertyNames: {
|
|
383
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
384
|
+
};
|
|
385
|
+
};
|
|
386
|
+
readonly Session: {
|
|
387
|
+
readonly $anchor: "session";
|
|
388
|
+
readonly title: "Session";
|
|
389
|
+
readonly description: "A logical authentication context bound to a subject. Producers and consumers exchange Session-shaped data in challenge issuance, authentication responses, and introspection (whoami).";
|
|
390
|
+
readonly type: "object";
|
|
391
|
+
readonly additionalProperties: false;
|
|
392
|
+
readonly required: readonly ["id", "subject", "issuedAt", "expiresAt"];
|
|
393
|
+
readonly properties: {
|
|
394
|
+
readonly id: {
|
|
395
|
+
readonly type: "string";
|
|
396
|
+
readonly minLength: 1;
|
|
397
|
+
readonly description: "Opaque, server-chosen session identifier. Stable for the lifetime of the session. Consumers MUST treat the value as opaque; no structure is implied.";
|
|
398
|
+
};
|
|
399
|
+
readonly subject: {
|
|
400
|
+
readonly type: "string";
|
|
401
|
+
readonly minLength: 1;
|
|
402
|
+
readonly description: "The authenticated party's VID (typically a DID URL).";
|
|
403
|
+
};
|
|
404
|
+
readonly issuedAt: {
|
|
405
|
+
readonly type: "string";
|
|
406
|
+
readonly format: "date-time";
|
|
407
|
+
readonly description: "ISO-8601 timestamp when the session was created.";
|
|
408
|
+
};
|
|
409
|
+
readonly expiresAt: {
|
|
410
|
+
readonly type: "string";
|
|
411
|
+
readonly format: "date-time";
|
|
412
|
+
readonly description: "ISO-8601 timestamp when the session ceases to be valid. Producers SHOULD refresh before this time; consumers MUST reject after.";
|
|
413
|
+
};
|
|
414
|
+
readonly amr: {
|
|
415
|
+
readonly type: "array";
|
|
416
|
+
readonly minItems: 1;
|
|
417
|
+
readonly items: {
|
|
418
|
+
readonly type: "string";
|
|
419
|
+
readonly minLength: 1;
|
|
420
|
+
};
|
|
421
|
+
readonly description: "Authentication Methods References per [RFC 8176]. Typical values: \"did\" (challenge-response), \"passkey\" (WebAuthn), \"vta\" (verifiable-trust agent approval). Multi-factor sessions list every method used.";
|
|
422
|
+
};
|
|
423
|
+
readonly acr: {
|
|
424
|
+
readonly type: "string";
|
|
425
|
+
readonly description: "Authentication Context Class Reference per [OIDC Core §2]. Profiles define their own values; the recommended set is \"aal1\" (single-factor DID auth), \"aal2\" (a second possession-or-biometric factor confirmed), and \"aal3\" (hardware-bound second factor).";
|
|
426
|
+
};
|
|
427
|
+
readonly ext: {
|
|
428
|
+
readonly $ref: "#/$defs/Ext";
|
|
429
|
+
readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
|
|
430
|
+
};
|
|
431
|
+
};
|
|
432
|
+
};
|
|
433
|
+
readonly AssertionResponse: {
|
|
434
|
+
readonly $anchor: "assertionResponse";
|
|
435
|
+
readonly title: "AuthenticatorAssertionResponse (login)";
|
|
436
|
+
readonly description: "The credential the client returns from `navigator.credentials.get`. Binary fields are base64url-encoded.";
|
|
437
|
+
readonly type: "object";
|
|
438
|
+
readonly additionalProperties: false;
|
|
439
|
+
readonly required: readonly ["id", "rawId", "type", "response"];
|
|
440
|
+
readonly properties: {
|
|
441
|
+
readonly id: {
|
|
442
|
+
readonly type: "string";
|
|
443
|
+
};
|
|
444
|
+
readonly rawId: {
|
|
445
|
+
readonly type: "string";
|
|
446
|
+
};
|
|
447
|
+
readonly type: {
|
|
448
|
+
readonly const: "public-key";
|
|
449
|
+
};
|
|
450
|
+
readonly response: {
|
|
451
|
+
readonly type: "object";
|
|
452
|
+
readonly additionalProperties: false;
|
|
453
|
+
readonly required: readonly ["clientDataJSON", "authenticatorData", "signature"];
|
|
454
|
+
readonly properties: {
|
|
455
|
+
readonly clientDataJSON: {
|
|
456
|
+
readonly type: "string";
|
|
457
|
+
};
|
|
458
|
+
readonly authenticatorData: {
|
|
459
|
+
readonly type: "string";
|
|
460
|
+
};
|
|
461
|
+
readonly signature: {
|
|
462
|
+
readonly type: "string";
|
|
463
|
+
};
|
|
464
|
+
readonly userHandle: {
|
|
465
|
+
readonly type: readonly ["string", "null"];
|
|
466
|
+
};
|
|
467
|
+
};
|
|
468
|
+
};
|
|
469
|
+
readonly authenticatorAttachment: {
|
|
470
|
+
readonly enum: readonly ["platform", "cross-platform"];
|
|
471
|
+
};
|
|
472
|
+
readonly clientExtensionResults: {
|
|
473
|
+
readonly type: "object";
|
|
474
|
+
};
|
|
475
|
+
};
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
};
|
|
479
|
+
/**
|
|
480
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
481
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
482
|
+
* per-specification and cannot be derived from the document alone, and
|
|
483
|
+
* item 2 needs the schema this carries.
|
|
484
|
+
*/
|
|
485
|
+
export declare const SPEC: {
|
|
486
|
+
readonly typeUri: "https://trusttasks.org/spec/auth/step-up/approve-response/0.3";
|
|
487
|
+
readonly isBearer: false;
|
|
488
|
+
readonly isProofRequired: false;
|
|
489
|
+
readonly isRecipientRequired: true;
|
|
490
|
+
readonly isIssuedAtRequired: true;
|
|
491
|
+
readonly payloadSchema: {
|
|
492
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
493
|
+
readonly $id: "https://trusttasks.org/spec/auth/step-up/approve-response/0.3";
|
|
494
|
+
readonly title: "Auth — Step-up Approve Response";
|
|
495
|
+
readonly description: "The approver's signed ratification of a step-up: subject + sessionId + challenge are echoed inside a proof-bearing document so the relying party can elevate the session.";
|
|
496
|
+
readonly type: "object";
|
|
497
|
+
readonly additionalProperties: false;
|
|
498
|
+
readonly required: readonly ["subject", "sessionId", "challenge", "decision"];
|
|
499
|
+
readonly properties: {
|
|
500
|
+
readonly subject: {
|
|
501
|
+
readonly type: "string";
|
|
502
|
+
readonly minLength: 1;
|
|
503
|
+
readonly description: "Echoed from the matching approve-request. The relying party verifies it equals the session's subject.";
|
|
504
|
+
};
|
|
505
|
+
readonly sessionId: {
|
|
506
|
+
readonly type: "string";
|
|
507
|
+
readonly minLength: 1;
|
|
508
|
+
readonly description: "Echoed from the matching approve-request. The relying party uses it to locate the session to elevate.";
|
|
509
|
+
};
|
|
510
|
+
readonly challenge: {
|
|
511
|
+
readonly type: "string";
|
|
512
|
+
readonly minLength: 16;
|
|
513
|
+
readonly description: "Echoed from the matching approve-request. The relying party verifies it equals the bound challenge.";
|
|
514
|
+
};
|
|
515
|
+
readonly decision: {
|
|
516
|
+
readonly type: "string";
|
|
517
|
+
readonly enum: readonly ["approved", "denied"];
|
|
518
|
+
readonly description: "`approved` elevates the session per the relying party's policy. `denied` is a signed refusal — useful for audit even though it elevates nothing.";
|
|
519
|
+
};
|
|
520
|
+
readonly deniedReason: {
|
|
521
|
+
readonly type: "string";
|
|
522
|
+
readonly maxLength: 500;
|
|
523
|
+
readonly description: "Required when decision is `denied`. Human-readable rationale the user provided (or which the approver inferred).";
|
|
524
|
+
};
|
|
525
|
+
readonly grantedAcr: {
|
|
526
|
+
readonly type: "string";
|
|
527
|
+
readonly description: "The acr the approver believes it has cryptographically demonstrated. The relying party MAY accept this, MAY upgrade to a lower value, but MUST NOT exceed it.";
|
|
528
|
+
};
|
|
529
|
+
readonly evidence: {
|
|
530
|
+
readonly $ref: "#/$defs/Evidence";
|
|
531
|
+
readonly description: "How the approver demonstrated the factor backing this elevation. A tagged union on `kind`. When `evidence` is absent the elevation is gated solely by the document's framework `proof` (equivalent to `kind: did-signed`). When `kind: webauthn` is supplied, the carried WebAuthn assertion over `challenge` is the gate and the framework `proof` MAY be omitted.";
|
|
532
|
+
};
|
|
533
|
+
readonly ext: {
|
|
534
|
+
readonly $ref: "#/$defs/Ext";
|
|
535
|
+
};
|
|
536
|
+
};
|
|
537
|
+
readonly $defs: {
|
|
538
|
+
readonly Evidence: {
|
|
539
|
+
readonly $anchor: "evidence";
|
|
540
|
+
readonly title: "Step-up Evidence";
|
|
541
|
+
readonly description: "Tagged union over `kind` describing the cryptographic factor the approver presents to back the elevation. Pluggable so new factor kinds can be added without disturbing existing consumers (SPEC §4.5.1 ext rules apply to unknown kinds at the producer's discretion).";
|
|
542
|
+
readonly oneOf: readonly [{
|
|
543
|
+
readonly title: "DidSigned";
|
|
544
|
+
readonly type: "object";
|
|
545
|
+
readonly additionalProperties: false;
|
|
546
|
+
readonly required: readonly ["kind"];
|
|
547
|
+
readonly properties: {
|
|
548
|
+
readonly kind: {
|
|
549
|
+
readonly const: "didSigned";
|
|
550
|
+
};
|
|
551
|
+
};
|
|
552
|
+
readonly description: "The elevation is gated by the document's framework `proof` — a Data Integrity signature from a key the subject controls (SPEC §4.7). This is the default when `evidence` is omitted. `amr` reflects \"vta\"/\"did\".";
|
|
553
|
+
}, {
|
|
554
|
+
readonly title: "WebAuthn";
|
|
555
|
+
readonly type: "object";
|
|
556
|
+
readonly additionalProperties: false;
|
|
557
|
+
readonly required: readonly ["kind", "assertion"];
|
|
558
|
+
readonly properties: {
|
|
559
|
+
readonly kind: {
|
|
560
|
+
readonly const: "webauthn";
|
|
561
|
+
};
|
|
562
|
+
readonly assertion: {
|
|
563
|
+
readonly $ref: "#/$defs/AssertionResponse";
|
|
564
|
+
readonly description: "The unmodified AuthenticatorAssertionResponse from the platform WebAuthn API (`navigator.credentials.get` / ASAuthorization / Credential Manager). Its `clientDataJSON` challenge MUST equal the step-up `challenge`. The relying party verifies it per WebAuthn Level 2 §7.2 exactly as auth/passkey/login/finish does; the assertion is the gate and `amr` reflects \"passkey\".";
|
|
565
|
+
};
|
|
566
|
+
};
|
|
567
|
+
}];
|
|
568
|
+
};
|
|
569
|
+
readonly Response: {
|
|
570
|
+
readonly $anchor: "response";
|
|
571
|
+
readonly title: "Auth Step-up Approve Response — relying party ack";
|
|
572
|
+
readonly description: "Acknowledgement the relying party returns after processing the approval. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response.";
|
|
573
|
+
readonly type: "object";
|
|
574
|
+
readonly additionalProperties: false;
|
|
575
|
+
readonly required: readonly ["status"];
|
|
576
|
+
readonly properties: {
|
|
577
|
+
readonly status: {
|
|
578
|
+
readonly type: "string";
|
|
579
|
+
readonly enum: readonly ["elevated", "recorded", "rejected"];
|
|
580
|
+
readonly description: "`elevated` — the approval was applied and the session's assurance level was raised. `recorded` — the approval was applied to the single operation it was bound to, and NO session was elevated; see `boundTo`. `rejected` — the approval was not applied.";
|
|
581
|
+
};
|
|
582
|
+
readonly session: {
|
|
583
|
+
readonly $ref: "#/$defs/Session";
|
|
584
|
+
readonly description: "Present when status is `elevated`. The session's updated amr/acr after the approval was applied. Absent for `recorded`, which changes no session — a consumer reading it as a fallback would report an elevation that did not happen.";
|
|
585
|
+
};
|
|
586
|
+
readonly boundTo: {
|
|
587
|
+
readonly type: "string";
|
|
588
|
+
readonly maxLength: 256;
|
|
589
|
+
readonly description: "Present when status is `recorded`. An opaque relying-party identifier for the single operation this approval authorised — for a `release: stepUp` disclosure, the `previewId`. Opaque on purpose: it is echoed for the approver's audit trail and is not a capability, since the approval it names is the relying party's own state and cannot be spent by presenting this value.";
|
|
590
|
+
};
|
|
591
|
+
readonly reason: {
|
|
592
|
+
readonly type: "string";
|
|
593
|
+
readonly maxLength: 1024;
|
|
594
|
+
readonly description: "Present when status is `rejected` (e.g. \"challenge expired\", \"session not found\", \"acr ceiling exceeded\").";
|
|
595
|
+
};
|
|
596
|
+
readonly ext: {
|
|
597
|
+
readonly $ref: "#/$defs/Ext";
|
|
598
|
+
};
|
|
599
|
+
};
|
|
600
|
+
};
|
|
601
|
+
readonly Ext: {
|
|
602
|
+
readonly title: "Ext";
|
|
603
|
+
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.";
|
|
604
|
+
readonly type: "object";
|
|
605
|
+
readonly minProperties: 1;
|
|
606
|
+
readonly additionalProperties: true;
|
|
607
|
+
readonly propertyNames: {
|
|
608
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
609
|
+
};
|
|
610
|
+
};
|
|
611
|
+
readonly Session: {
|
|
612
|
+
readonly $anchor: "session";
|
|
613
|
+
readonly title: "Session";
|
|
614
|
+
readonly description: "A logical authentication context bound to a subject. Producers and consumers exchange Session-shaped data in challenge issuance, authentication responses, and introspection (whoami).";
|
|
615
|
+
readonly type: "object";
|
|
616
|
+
readonly additionalProperties: false;
|
|
617
|
+
readonly required: readonly ["id", "subject", "issuedAt", "expiresAt"];
|
|
618
|
+
readonly properties: {
|
|
619
|
+
readonly id: {
|
|
620
|
+
readonly type: "string";
|
|
621
|
+
readonly minLength: 1;
|
|
622
|
+
readonly description: "Opaque, server-chosen session identifier. Stable for the lifetime of the session. Consumers MUST treat the value as opaque; no structure is implied.";
|
|
623
|
+
};
|
|
624
|
+
readonly subject: {
|
|
625
|
+
readonly type: "string";
|
|
626
|
+
readonly minLength: 1;
|
|
627
|
+
readonly description: "The authenticated party's VID (typically a DID URL).";
|
|
628
|
+
};
|
|
629
|
+
readonly issuedAt: {
|
|
630
|
+
readonly type: "string";
|
|
631
|
+
readonly format: "date-time";
|
|
632
|
+
readonly description: "ISO-8601 timestamp when the session was created.";
|
|
633
|
+
};
|
|
634
|
+
readonly expiresAt: {
|
|
635
|
+
readonly type: "string";
|
|
636
|
+
readonly format: "date-time";
|
|
637
|
+
readonly description: "ISO-8601 timestamp when the session ceases to be valid. Producers SHOULD refresh before this time; consumers MUST reject after.";
|
|
638
|
+
};
|
|
639
|
+
readonly amr: {
|
|
640
|
+
readonly type: "array";
|
|
641
|
+
readonly minItems: 1;
|
|
642
|
+
readonly items: {
|
|
643
|
+
readonly type: "string";
|
|
644
|
+
readonly minLength: 1;
|
|
645
|
+
};
|
|
646
|
+
readonly description: "Authentication Methods References per [RFC 8176]. Typical values: \"did\" (challenge-response), \"passkey\" (WebAuthn), \"vta\" (verifiable-trust agent approval). Multi-factor sessions list every method used.";
|
|
647
|
+
};
|
|
648
|
+
readonly acr: {
|
|
649
|
+
readonly type: "string";
|
|
650
|
+
readonly description: "Authentication Context Class Reference per [OIDC Core §2]. Profiles define their own values; the recommended set is \"aal1\" (single-factor DID auth), \"aal2\" (a second possession-or-biometric factor confirmed), and \"aal3\" (hardware-bound second factor).";
|
|
651
|
+
};
|
|
652
|
+
readonly ext: {
|
|
653
|
+
readonly $ref: "#/$defs/Ext";
|
|
654
|
+
readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
|
|
655
|
+
};
|
|
656
|
+
};
|
|
657
|
+
};
|
|
658
|
+
readonly AssertionResponse: {
|
|
659
|
+
readonly $anchor: "assertionResponse";
|
|
660
|
+
readonly title: "AuthenticatorAssertionResponse (login)";
|
|
661
|
+
readonly description: "The credential the client returns from `navigator.credentials.get`. Binary fields are base64url-encoded.";
|
|
662
|
+
readonly type: "object";
|
|
663
|
+
readonly additionalProperties: false;
|
|
664
|
+
readonly required: readonly ["id", "rawId", "type", "response"];
|
|
665
|
+
readonly properties: {
|
|
666
|
+
readonly id: {
|
|
667
|
+
readonly type: "string";
|
|
668
|
+
};
|
|
669
|
+
readonly rawId: {
|
|
670
|
+
readonly type: "string";
|
|
671
|
+
};
|
|
672
|
+
readonly type: {
|
|
673
|
+
readonly const: "public-key";
|
|
674
|
+
};
|
|
675
|
+
readonly response: {
|
|
676
|
+
readonly type: "object";
|
|
677
|
+
readonly additionalProperties: false;
|
|
678
|
+
readonly required: readonly ["clientDataJSON", "authenticatorData", "signature"];
|
|
679
|
+
readonly properties: {
|
|
680
|
+
readonly clientDataJSON: {
|
|
681
|
+
readonly type: "string";
|
|
682
|
+
};
|
|
683
|
+
readonly authenticatorData: {
|
|
684
|
+
readonly type: "string";
|
|
685
|
+
};
|
|
686
|
+
readonly signature: {
|
|
687
|
+
readonly type: "string";
|
|
688
|
+
};
|
|
689
|
+
readonly userHandle: {
|
|
690
|
+
readonly type: readonly ["string", "null"];
|
|
691
|
+
};
|
|
692
|
+
};
|
|
693
|
+
};
|
|
694
|
+
readonly authenticatorAttachment: {
|
|
695
|
+
readonly enum: readonly ["platform", "cross-platform"];
|
|
696
|
+
};
|
|
697
|
+
readonly clientExtensionResults: {
|
|
698
|
+
readonly type: "object";
|
|
699
|
+
};
|
|
700
|
+
};
|
|
701
|
+
};
|
|
702
|
+
};
|
|
703
|
+
};
|
|
704
|
+
};
|
|
705
|
+
/**
|
|
706
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
707
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
708
|
+
* parties (§7.3 item 5).
|
|
709
|
+
*/
|
|
710
|
+
export declare const RESPONSE_SPEC: {
|
|
711
|
+
readonly typeUri: "https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response";
|
|
712
|
+
readonly isBearer: false;
|
|
713
|
+
readonly isProofRequired: false;
|
|
714
|
+
readonly isRecipientRequired: true;
|
|
715
|
+
readonly isIssuedAtRequired: true;
|
|
716
|
+
readonly payloadSchema: {
|
|
717
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
718
|
+
readonly $ref: "#/$defs/Response";
|
|
719
|
+
readonly $defs: {
|
|
720
|
+
readonly Evidence: {
|
|
721
|
+
readonly $anchor: "evidence";
|
|
722
|
+
readonly title: "Step-up Evidence";
|
|
723
|
+
readonly description: "Tagged union over `kind` describing the cryptographic factor the approver presents to back the elevation. Pluggable so new factor kinds can be added without disturbing existing consumers (SPEC §4.5.1 ext rules apply to unknown kinds at the producer's discretion).";
|
|
724
|
+
readonly oneOf: readonly [{
|
|
725
|
+
readonly title: "DidSigned";
|
|
726
|
+
readonly type: "object";
|
|
727
|
+
readonly additionalProperties: false;
|
|
728
|
+
readonly required: readonly ["kind"];
|
|
729
|
+
readonly properties: {
|
|
730
|
+
readonly kind: {
|
|
731
|
+
readonly const: "didSigned";
|
|
732
|
+
};
|
|
733
|
+
};
|
|
734
|
+
readonly description: "The elevation is gated by the document's framework `proof` — a Data Integrity signature from a key the subject controls (SPEC §4.7). This is the default when `evidence` is omitted. `amr` reflects \"vta\"/\"did\".";
|
|
735
|
+
}, {
|
|
736
|
+
readonly title: "WebAuthn";
|
|
737
|
+
readonly type: "object";
|
|
738
|
+
readonly additionalProperties: false;
|
|
739
|
+
readonly required: readonly ["kind", "assertion"];
|
|
740
|
+
readonly properties: {
|
|
741
|
+
readonly kind: {
|
|
742
|
+
readonly const: "webauthn";
|
|
743
|
+
};
|
|
744
|
+
readonly assertion: {
|
|
745
|
+
readonly $ref: "#/$defs/AssertionResponse";
|
|
746
|
+
readonly description: "The unmodified AuthenticatorAssertionResponse from the platform WebAuthn API (`navigator.credentials.get` / ASAuthorization / Credential Manager). Its `clientDataJSON` challenge MUST equal the step-up `challenge`. The relying party verifies it per WebAuthn Level 2 §7.2 exactly as auth/passkey/login/finish does; the assertion is the gate and `amr` reflects \"passkey\".";
|
|
747
|
+
};
|
|
748
|
+
};
|
|
749
|
+
}];
|
|
750
|
+
};
|
|
751
|
+
readonly Response: {
|
|
752
|
+
readonly $anchor: "response";
|
|
753
|
+
readonly title: "Auth Step-up Approve Response — relying party ack";
|
|
754
|
+
readonly description: "Acknowledgement the relying party returns after processing the approval. Carried in a Trust Task document whose type is https://trusttasks.org/spec/auth/step-up/approve-response/0.3#response.";
|
|
755
|
+
readonly type: "object";
|
|
756
|
+
readonly additionalProperties: false;
|
|
757
|
+
readonly required: readonly ["status"];
|
|
758
|
+
readonly properties: {
|
|
759
|
+
readonly status: {
|
|
760
|
+
readonly type: "string";
|
|
761
|
+
readonly enum: readonly ["elevated", "recorded", "rejected"];
|
|
762
|
+
readonly description: "`elevated` — the approval was applied and the session's assurance level was raised. `recorded` — the approval was applied to the single operation it was bound to, and NO session was elevated; see `boundTo`. `rejected` — the approval was not applied.";
|
|
763
|
+
};
|
|
764
|
+
readonly session: {
|
|
765
|
+
readonly $ref: "#/$defs/Session";
|
|
766
|
+
readonly description: "Present when status is `elevated`. The session's updated amr/acr after the approval was applied. Absent for `recorded`, which changes no session — a consumer reading it as a fallback would report an elevation that did not happen.";
|
|
767
|
+
};
|
|
768
|
+
readonly boundTo: {
|
|
769
|
+
readonly type: "string";
|
|
770
|
+
readonly maxLength: 256;
|
|
771
|
+
readonly description: "Present when status is `recorded`. An opaque relying-party identifier for the single operation this approval authorised — for a `release: stepUp` disclosure, the `previewId`. Opaque on purpose: it is echoed for the approver's audit trail and is not a capability, since the approval it names is the relying party's own state and cannot be spent by presenting this value.";
|
|
772
|
+
};
|
|
773
|
+
readonly reason: {
|
|
774
|
+
readonly type: "string";
|
|
775
|
+
readonly maxLength: 1024;
|
|
776
|
+
readonly description: "Present when status is `rejected` (e.g. \"challenge expired\", \"session not found\", \"acr ceiling exceeded\").";
|
|
777
|
+
};
|
|
778
|
+
readonly ext: {
|
|
779
|
+
readonly $ref: "#/$defs/Ext";
|
|
780
|
+
};
|
|
781
|
+
};
|
|
782
|
+
};
|
|
783
|
+
readonly Ext: {
|
|
784
|
+
readonly title: "Ext";
|
|
785
|
+
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.";
|
|
786
|
+
readonly type: "object";
|
|
787
|
+
readonly minProperties: 1;
|
|
788
|
+
readonly additionalProperties: true;
|
|
789
|
+
readonly propertyNames: {
|
|
790
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
791
|
+
};
|
|
792
|
+
};
|
|
793
|
+
readonly Session: {
|
|
794
|
+
readonly $anchor: "session";
|
|
795
|
+
readonly title: "Session";
|
|
796
|
+
readonly description: "A logical authentication context bound to a subject. Producers and consumers exchange Session-shaped data in challenge issuance, authentication responses, and introspection (whoami).";
|
|
797
|
+
readonly type: "object";
|
|
798
|
+
readonly additionalProperties: false;
|
|
799
|
+
readonly required: readonly ["id", "subject", "issuedAt", "expiresAt"];
|
|
800
|
+
readonly properties: {
|
|
801
|
+
readonly id: {
|
|
802
|
+
readonly type: "string";
|
|
803
|
+
readonly minLength: 1;
|
|
804
|
+
readonly description: "Opaque, server-chosen session identifier. Stable for the lifetime of the session. Consumers MUST treat the value as opaque; no structure is implied.";
|
|
805
|
+
};
|
|
806
|
+
readonly subject: {
|
|
807
|
+
readonly type: "string";
|
|
808
|
+
readonly minLength: 1;
|
|
809
|
+
readonly description: "The authenticated party's VID (typically a DID URL).";
|
|
810
|
+
};
|
|
811
|
+
readonly issuedAt: {
|
|
812
|
+
readonly type: "string";
|
|
813
|
+
readonly format: "date-time";
|
|
814
|
+
readonly description: "ISO-8601 timestamp when the session was created.";
|
|
815
|
+
};
|
|
816
|
+
readonly expiresAt: {
|
|
817
|
+
readonly type: "string";
|
|
818
|
+
readonly format: "date-time";
|
|
819
|
+
readonly description: "ISO-8601 timestamp when the session ceases to be valid. Producers SHOULD refresh before this time; consumers MUST reject after.";
|
|
820
|
+
};
|
|
821
|
+
readonly amr: {
|
|
822
|
+
readonly type: "array";
|
|
823
|
+
readonly minItems: 1;
|
|
824
|
+
readonly items: {
|
|
825
|
+
readonly type: "string";
|
|
826
|
+
readonly minLength: 1;
|
|
827
|
+
};
|
|
828
|
+
readonly description: "Authentication Methods References per [RFC 8176]. Typical values: \"did\" (challenge-response), \"passkey\" (WebAuthn), \"vta\" (verifiable-trust agent approval). Multi-factor sessions list every method used.";
|
|
829
|
+
};
|
|
830
|
+
readonly acr: {
|
|
831
|
+
readonly type: "string";
|
|
832
|
+
readonly description: "Authentication Context Class Reference per [OIDC Core §2]. Profiles define their own values; the recommended set is \"aal1\" (single-factor DID auth), \"aal2\" (a second possession-or-biometric factor confirmed), and \"aal3\" (hardware-bound second factor).";
|
|
833
|
+
};
|
|
834
|
+
readonly ext: {
|
|
835
|
+
readonly $ref: "#/$defs/Ext";
|
|
836
|
+
readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
|
|
837
|
+
};
|
|
838
|
+
};
|
|
839
|
+
};
|
|
840
|
+
readonly AssertionResponse: {
|
|
841
|
+
readonly $anchor: "assertionResponse";
|
|
842
|
+
readonly title: "AuthenticatorAssertionResponse (login)";
|
|
843
|
+
readonly description: "The credential the client returns from `navigator.credentials.get`. Binary fields are base64url-encoded.";
|
|
844
|
+
readonly type: "object";
|
|
845
|
+
readonly additionalProperties: false;
|
|
846
|
+
readonly required: readonly ["id", "rawId", "type", "response"];
|
|
847
|
+
readonly properties: {
|
|
848
|
+
readonly id: {
|
|
849
|
+
readonly type: "string";
|
|
850
|
+
};
|
|
851
|
+
readonly rawId: {
|
|
852
|
+
readonly type: "string";
|
|
853
|
+
};
|
|
854
|
+
readonly type: {
|
|
855
|
+
readonly const: "public-key";
|
|
856
|
+
};
|
|
857
|
+
readonly response: {
|
|
858
|
+
readonly type: "object";
|
|
859
|
+
readonly additionalProperties: false;
|
|
860
|
+
readonly required: readonly ["clientDataJSON", "authenticatorData", "signature"];
|
|
861
|
+
readonly properties: {
|
|
862
|
+
readonly clientDataJSON: {
|
|
863
|
+
readonly type: "string";
|
|
864
|
+
};
|
|
865
|
+
readonly authenticatorData: {
|
|
866
|
+
readonly type: "string";
|
|
867
|
+
};
|
|
868
|
+
readonly signature: {
|
|
869
|
+
readonly type: "string";
|
|
870
|
+
};
|
|
871
|
+
readonly userHandle: {
|
|
872
|
+
readonly type: readonly ["string", "null"];
|
|
873
|
+
};
|
|
874
|
+
};
|
|
875
|
+
};
|
|
876
|
+
readonly authenticatorAttachment: {
|
|
877
|
+
readonly enum: readonly ["platform", "cross-platform"];
|
|
878
|
+
};
|
|
879
|
+
readonly clientExtensionResults: {
|
|
880
|
+
readonly type: "object";
|
|
881
|
+
};
|
|
882
|
+
};
|
|
883
|
+
};
|
|
884
|
+
};
|
|
885
|
+
};
|
|
886
|
+
};
|
|
887
|
+
//# sourceMappingURL=payload.d.ts.map
|