@openvtc/trust-tasks 0.26.5 → 0.26.7

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.
Files changed (48) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dist/_shared/components.d.ts +3 -3
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/device/list/0.1/payload.d.ts +4 -4
  5. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  6. package/dist/device/list/0.1/payload.js +4 -2
  7. package/dist/device/list/0.1/payload.js.map +1 -1
  8. package/dist/device/list/0.2/payload.d.ts +4 -4
  9. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  10. package/dist/device/list/0.2/payload.js +4 -2
  11. package/dist/device/list/0.2/payload.js.map +1 -1
  12. package/dist/device/register/0.1/payload.d.ts +4 -4
  13. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  14. package/dist/device/register/0.1/payload.js +4 -2
  15. package/dist/device/register/0.1/payload.js.map +1 -1
  16. package/dist/device/register/0.2/payload.d.ts +4 -4
  17. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  18. package/dist/device/register/0.2/payload.js +4 -2
  19. package/dist/device/register/0.2/payload.js.map +1 -1
  20. package/dist/external/accounts/secret/set/0.1/payload.d.ts +4 -4
  21. package/dist/external/accounts/secret/set/0.1/payload.js +2 -2
  22. package/dist/external/accounts/secret/set/0.1/payload.js.map +1 -1
  23. package/dist/external/credentials/issue/0.1/payload.d.ts +4 -4
  24. package/dist/external/credentials/issue/0.1/payload.js +2 -2
  25. package/dist/external/credentials/issue/0.1/payload.js.map +1 -1
  26. package/dist/external/credentials/issue/0.2/payload.d.ts +1517 -0
  27. package/dist/external/credentials/issue/0.2/payload.d.ts.map +1 -0
  28. package/dist/external/credentials/issue/0.2/payload.js +845 -0
  29. package/dist/external/credentials/issue/0.2/payload.js.map +1 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/vta/witness/request/0.1/payload.d.ts +597 -0
  35. package/dist/vta/witness/request/0.1/payload.d.ts.map +1 -0
  36. package/dist/vta/witness/request/0.1/payload.js +311 -0
  37. package/dist/vta/witness/request/0.1/payload.js.map +1 -0
  38. package/package.json +1 -1
  39. package/src/_shared/components.ts +5 -3
  40. package/src/device/list/0.1/payload.ts +4 -2
  41. package/src/device/list/0.2/payload.ts +4 -2
  42. package/src/device/register/0.1/payload.ts +4 -2
  43. package/src/device/register/0.2/payload.ts +4 -2
  44. package/src/external/accounts/secret/set/0.1/payload.ts +2 -2
  45. package/src/external/credentials/issue/0.1/payload.ts +2 -2
  46. package/src/external/credentials/issue/0.2/payload.ts +995 -0
  47. package/src/index.ts +2 -0
  48. package/src/vta/witness/request/0.1/payload.ts +405 -0
@@ -0,0 +1,1517 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/external/credentials/issue/0.2/payload.schema.json
4
+ */
5
+ import type { AccountContextId, AccountId, CredentialScope, Ext, ProviderObjectAction, ProviderObjectPrefix } from "../../../../_shared/components.js";
6
+ /**
7
+ * Obtain a short-lived, downscoped provider credential from an external account, sealed to the caller: session or token credentials under `scope`, or a batch of presigned requests on one object under `presign`. The outer document members are owned by the framework — SPEC §6.3.
8
+ */
9
+ export type ExternalCredentialsIssuePayload = {
10
+ context: AccountContextId;
11
+ account: AccountId;
12
+ /**
13
+ * For every brokered model but `s3-static-presign`: the prefix and actions, or the OAuth scopes, the session or token is downscoped to. `objectKey` is not used in this version.
14
+ */
15
+ scope?: CredentialScope;
16
+ presign?: PresignBatch;
17
+ /**
18
+ * Requested lifetime; never more than the binding's `maxTtlSeconds`. For `presign`, the lifetime of every URL in the batch.
19
+ */
20
+ ttlSeconds: number;
21
+ ext?: Ext;
22
+ } & {
23
+ [k: string]: unknown | undefined;
24
+ };
25
+ /**
26
+ * One operation to presign, discriminated by `operation`. The ceiling action each needs is in `PresignOperation`.
27
+ */
28
+ export type PresignRequest = PresignPut | PresignGet | PresignHead | PresignDelete | PresignCreateMultipart | PresignUploadPart | PresignListParts | PresignCompleteMultipart | PresignAbortMultipart;
29
+ /**
30
+ * A SHA-256 digest in standard base64 (RFC 4648 §4, padded), as S3 carries it in `x-amz-checksum-sha256`.
31
+ */
32
+ export type ChecksumSha256 = string;
33
+ export type ExternalCredentialsIssueResponsePayload = {
34
+ [k: string]: unknown | undefined;
35
+ };
36
+ /**
37
+ * `s3-static-presign` only: up to 128 operations on **one** object, `prefix` + `objectKey`, and at most one multipart upload of it. Each operation becomes one presigned request, sealed together. Consistency rules JSON Schema cannot state, which the custodian enforces: `uploadId` is present exactly when an operation needs it (`upload-part`, `list-parts`, `complete-multipart`, `abort-multipart`) and absent when the batch holds `create-multipart`; no two operations are identical; no two `upload-part` operations name the same `partNumber`.
38
+ */
39
+ export interface PresignBatch {
40
+ prefix: ProviderObjectPrefix;
41
+ /**
42
+ * The object's name within `prefix`. Every request in the batch names `prefix` + `objectKey` and no other object.
43
+ */
44
+ objectKey: string;
45
+ /**
46
+ * The multipart upload the batch's multipart operations act on, as storage returned it from CreateMultipartUpload. Signed into each such request's query, percent-encoded by the SigV4 encoder, never interpolated.
47
+ */
48
+ uploadId?: string;
49
+ /**
50
+ * @minItems 1
51
+ * @maxItems 128
52
+ */
53
+ requests: [PresignRequest, ...PresignRequest[]];
54
+ }
55
+ /**
56
+ * PutObject of the whole object, bound to its exact length and SHA-256.
57
+ */
58
+ export interface PresignPut {
59
+ operation: "put";
60
+ /**
61
+ * The object's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's single-request ceiling.
62
+ */
63
+ contentLength: number;
64
+ checksumSha256: ChecksumSha256;
65
+ }
66
+ /**
67
+ * GetObject.
68
+ */
69
+ export interface PresignGet {
70
+ operation: "get";
71
+ }
72
+ /**
73
+ * HeadObject, with `x-amz-checksum-mode: ENABLED` signed so storage reports the object's checksum.
74
+ */
75
+ export interface PresignHead {
76
+ operation: "head";
77
+ }
78
+ /**
79
+ * DeleteObject.
80
+ */
81
+ export interface PresignDelete {
82
+ operation: "delete";
83
+ }
84
+ /**
85
+ * CreateMultipartUpload, with `x-amz-checksum-algorithm: SHA256` signed so every part of the upload must carry a SHA-256 checksum.
86
+ */
87
+ export interface PresignCreateMultipart {
88
+ operation: "create-multipart";
89
+ }
90
+ /**
91
+ * UploadPart of one part of `uploadId`, bound to its number, its exact length and its SHA-256.
92
+ */
93
+ export interface PresignUploadPart {
94
+ operation: "upload-part";
95
+ partNumber: number;
96
+ /**
97
+ * The part's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's part ceiling.
98
+ */
99
+ contentLength: number;
100
+ checksumSha256: ChecksumSha256;
101
+ }
102
+ /**
103
+ * ListParts of `uploadId`: each part's number, length, ETag and checksum, up to 1000 per page.
104
+ */
105
+ export interface PresignListParts {
106
+ operation: "list-parts";
107
+ /**
108
+ * List parts after this number. Absent, from the first.
109
+ */
110
+ partNumberMarker?: number;
111
+ }
112
+ /**
113
+ * CompleteMultipartUpload of `uploadId`, bound to the assembled object's exact length.
114
+ */
115
+ export interface PresignCompleteMultipart {
116
+ operation: "complete-multipart";
117
+ /**
118
+ * The assembled object's exact length in bytes, signed into the request as `x-amz-mp-object-size`, so storage refuses a completion that would assemble any other size. At most 5 TiB, S3's object ceiling.
119
+ */
120
+ contentLength: number;
121
+ }
122
+ /**
123
+ * AbortMultipartUpload of `uploadId`.
124
+ */
125
+ export interface PresignAbortMultipart {
126
+ operation: "abort-multipart";
127
+ }
128
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
129
+ export type { AccountContextId, AccountId, CredentialScope, Ext, ProviderObjectAction, ProviderObjectPrefix };
130
+ /** Trust Task type URI. */
131
+ export declare const TYPE_URI: "https://trusttasks.org/spec/external/credentials/issue/0.2";
132
+ /** Stable alias for this specification's request payload shape. */
133
+ export type Payload = ExternalCredentialsIssuePayload;
134
+ /** Trust Task response type URI (request type URI + "#response"). */
135
+ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/external/credentials/issue/0.2#response";
136
+ /** Stable alias for this specification's success-response payload shape. */
137
+ export type Response = ExternalCredentialsIssueResponsePayload;
138
+ /**
139
+ * This specification's payload schema, as a value.
140
+ *
141
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
142
+ * rather than only as a `.json` file because TypeScript types are erased
143
+ * at runtime: without a schema a consumer has nothing to validate, and
144
+ * every REQUIRED payload member is optional in practice. Cross-file
145
+ * `$ref`s are already inlined, so it needs no resolver.
146
+ */
147
+ export declare const PAYLOAD_SCHEMA: {
148
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
149
+ readonly $id: "https://trusttasks.org/spec/external/credentials/issue/0.2";
150
+ readonly title: "External Credentials — Issue — payload";
151
+ readonly description: "Obtain a short-lived, downscoped provider credential from an external account, sealed to the caller: session or token credentials under `scope`, or a batch of presigned requests on one object under `presign`. The outer document members are owned by the framework — SPEC §6.3.";
152
+ readonly type: "object";
153
+ readonly additionalProperties: false;
154
+ readonly required: readonly ["context", "account", "ttlSeconds"];
155
+ readonly oneOf: readonly [{
156
+ readonly required: readonly ["scope"];
157
+ readonly not: {
158
+ readonly required: readonly ["presign"];
159
+ };
160
+ }, {
161
+ readonly required: readonly ["presign"];
162
+ readonly not: {
163
+ readonly required: readonly ["scope"];
164
+ };
165
+ }];
166
+ readonly properties: {
167
+ readonly context: {
168
+ readonly $ref: "#/$defs/AccountContextId";
169
+ };
170
+ readonly account: {
171
+ readonly $ref: "#/$defs/AccountId";
172
+ };
173
+ readonly scope: {
174
+ readonly $ref: "#/$defs/CredentialScope";
175
+ readonly description: "For every brokered model but `s3-static-presign`: the prefix and actions, or the OAuth scopes, the session or token is downscoped to. `objectKey` is not used in this version.";
176
+ };
177
+ readonly presign: {
178
+ readonly $ref: "#/$defs/PresignBatch";
179
+ };
180
+ readonly ttlSeconds: {
181
+ readonly type: "integer";
182
+ readonly minimum: 60;
183
+ readonly maximum: 3600;
184
+ readonly description: "Requested lifetime; never more than the binding's `maxTtlSeconds`. For `presign`, the lifetime of every URL in the batch.";
185
+ };
186
+ readonly ext: {
187
+ readonly $ref: "#/$defs/Ext";
188
+ };
189
+ };
190
+ readonly $defs: {
191
+ readonly ChecksumSha256: {
192
+ readonly title: "ChecksumSha256";
193
+ readonly type: "string";
194
+ readonly minLength: 44;
195
+ readonly maxLength: 44;
196
+ readonly pattern: "^[A-Za-z0-9+/]{43}=$";
197
+ readonly description: "A SHA-256 digest in standard base64 (RFC 4648 §4, padded), as S3 carries it in `x-amz-checksum-sha256`.";
198
+ };
199
+ readonly PresignBatch: {
200
+ readonly title: "PresignBatch";
201
+ readonly type: "object";
202
+ readonly additionalProperties: false;
203
+ readonly required: readonly ["prefix", "objectKey", "requests"];
204
+ readonly description: "`s3-static-presign` only: up to 128 operations on **one** object, `prefix` + `objectKey`, and at most one multipart upload of it. Each operation becomes one presigned request, sealed together. Consistency rules JSON Schema cannot state, which the custodian enforces: `uploadId` is present exactly when an operation needs it (`upload-part`, `list-parts`, `complete-multipart`, `abort-multipart`) and absent when the batch holds `create-multipart`; no two operations are identical; no two `upload-part` operations name the same `partNumber`.";
205
+ readonly properties: {
206
+ readonly prefix: {
207
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
208
+ };
209
+ readonly objectKey: {
210
+ readonly type: "string";
211
+ readonly minLength: 1;
212
+ readonly maxLength: 1024;
213
+ readonly pattern: "^[A-Za-z0-9._-]+$";
214
+ readonly description: "The object's name within `prefix`. Every request in the batch names `prefix` + `objectKey` and no other object.";
215
+ };
216
+ readonly uploadId: {
217
+ readonly type: "string";
218
+ readonly minLength: 1;
219
+ readonly maxLength: 1024;
220
+ readonly pattern: "^[A-Za-z0-9._~+/=-]+$";
221
+ readonly description: "The multipart upload the batch's multipart operations act on, as storage returned it from CreateMultipartUpload. Signed into each such request's query, percent-encoded by the SigV4 encoder, never interpolated.";
222
+ };
223
+ readonly requests: {
224
+ readonly type: "array";
225
+ readonly minItems: 1;
226
+ readonly maxItems: 128;
227
+ readonly items: {
228
+ readonly $ref: "#/$defs/PresignRequest";
229
+ };
230
+ };
231
+ };
232
+ };
233
+ readonly PresignRequest: {
234
+ readonly title: "PresignRequest";
235
+ readonly description: "One operation to presign, discriminated by `operation`. The ceiling action each needs is in `PresignOperation`.";
236
+ readonly oneOf: readonly [{
237
+ readonly title: "PresignPut";
238
+ readonly type: "object";
239
+ readonly additionalProperties: false;
240
+ readonly required: readonly ["operation", "contentLength", "checksumSha256"];
241
+ readonly description: "PutObject of the whole object, bound to its exact length and SHA-256.";
242
+ readonly properties: {
243
+ readonly operation: {
244
+ readonly type: "string";
245
+ readonly const: "put";
246
+ };
247
+ readonly contentLength: {
248
+ readonly type: "integer";
249
+ readonly minimum: 0;
250
+ readonly maximum: 5368709120;
251
+ readonly description: "The object's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's single-request ceiling.";
252
+ };
253
+ readonly checksumSha256: {
254
+ readonly $ref: "#/$defs/ChecksumSha256";
255
+ };
256
+ };
257
+ }, {
258
+ readonly title: "PresignGet";
259
+ readonly type: "object";
260
+ readonly additionalProperties: false;
261
+ readonly required: readonly ["operation"];
262
+ readonly description: "GetObject.";
263
+ readonly properties: {
264
+ readonly operation: {
265
+ readonly type: "string";
266
+ readonly const: "get";
267
+ };
268
+ };
269
+ }, {
270
+ readonly title: "PresignHead";
271
+ readonly type: "object";
272
+ readonly additionalProperties: false;
273
+ readonly required: readonly ["operation"];
274
+ readonly description: "HeadObject, with `x-amz-checksum-mode: ENABLED` signed so storage reports the object's checksum.";
275
+ readonly properties: {
276
+ readonly operation: {
277
+ readonly type: "string";
278
+ readonly const: "head";
279
+ };
280
+ };
281
+ }, {
282
+ readonly title: "PresignDelete";
283
+ readonly type: "object";
284
+ readonly additionalProperties: false;
285
+ readonly required: readonly ["operation"];
286
+ readonly description: "DeleteObject.";
287
+ readonly properties: {
288
+ readonly operation: {
289
+ readonly type: "string";
290
+ readonly const: "delete";
291
+ };
292
+ };
293
+ }, {
294
+ readonly title: "PresignCreateMultipart";
295
+ readonly type: "object";
296
+ readonly additionalProperties: false;
297
+ readonly required: readonly ["operation"];
298
+ readonly description: "CreateMultipartUpload, with `x-amz-checksum-algorithm: SHA256` signed so every part of the upload must carry a SHA-256 checksum.";
299
+ readonly properties: {
300
+ readonly operation: {
301
+ readonly type: "string";
302
+ readonly const: "create-multipart";
303
+ };
304
+ };
305
+ }, {
306
+ readonly title: "PresignUploadPart";
307
+ readonly type: "object";
308
+ readonly additionalProperties: false;
309
+ readonly required: readonly ["operation", "partNumber", "contentLength", "checksumSha256"];
310
+ readonly description: "UploadPart of one part of `uploadId`, bound to its number, its exact length and its SHA-256.";
311
+ readonly properties: {
312
+ readonly operation: {
313
+ readonly type: "string";
314
+ readonly const: "upload-part";
315
+ };
316
+ readonly partNumber: {
317
+ readonly type: "integer";
318
+ readonly minimum: 1;
319
+ readonly maximum: 10000;
320
+ };
321
+ readonly contentLength: {
322
+ readonly type: "integer";
323
+ readonly minimum: 1;
324
+ readonly maximum: 5368709120;
325
+ readonly description: "The part's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's part ceiling.";
326
+ };
327
+ readonly checksumSha256: {
328
+ readonly $ref: "#/$defs/ChecksumSha256";
329
+ };
330
+ };
331
+ }, {
332
+ readonly title: "PresignListParts";
333
+ readonly type: "object";
334
+ readonly additionalProperties: false;
335
+ readonly required: readonly ["operation"];
336
+ readonly description: "ListParts of `uploadId`: each part's number, length, ETag and checksum, up to 1000 per page.";
337
+ readonly properties: {
338
+ readonly operation: {
339
+ readonly type: "string";
340
+ readonly const: "list-parts";
341
+ };
342
+ readonly partNumberMarker: {
343
+ readonly type: "integer";
344
+ readonly minimum: 0;
345
+ readonly maximum: 10000;
346
+ readonly description: "List parts after this number. Absent, from the first.";
347
+ };
348
+ };
349
+ }, {
350
+ readonly title: "PresignCompleteMultipart";
351
+ readonly type: "object";
352
+ readonly additionalProperties: false;
353
+ readonly required: readonly ["operation", "contentLength"];
354
+ readonly description: "CompleteMultipartUpload of `uploadId`, bound to the assembled object's exact length.";
355
+ readonly properties: {
356
+ readonly operation: {
357
+ readonly type: "string";
358
+ readonly const: "complete-multipart";
359
+ };
360
+ readonly contentLength: {
361
+ readonly type: "integer";
362
+ readonly minimum: 0;
363
+ readonly maximum: 5497558138880;
364
+ readonly description: "The assembled object's exact length in bytes, signed into the request as `x-amz-mp-object-size`, so storage refuses a completion that would assemble any other size. At most 5 TiB, S3's object ceiling.";
365
+ };
366
+ };
367
+ }, {
368
+ readonly title: "PresignAbortMultipart";
369
+ readonly type: "object";
370
+ readonly additionalProperties: false;
371
+ readonly required: readonly ["operation"];
372
+ readonly description: "AbortMultipartUpload of `uploadId`.";
373
+ readonly properties: {
374
+ readonly operation: {
375
+ readonly type: "string";
376
+ readonly const: "abort-multipart";
377
+ };
378
+ };
379
+ }];
380
+ };
381
+ readonly Response: {
382
+ readonly $anchor: "response";
383
+ readonly title: "External Credentials — Issue — response payload";
384
+ readonly type: "object";
385
+ readonly additionalProperties: false;
386
+ readonly required: readonly ["sealedCredential", "expiresAt"];
387
+ readonly oneOf: readonly [{
388
+ readonly required: readonly ["scope"];
389
+ readonly not: {
390
+ readonly required: readonly ["presign"];
391
+ };
392
+ }, {
393
+ readonly required: readonly ["presign"];
394
+ readonly not: {
395
+ readonly required: readonly ["scope"];
396
+ };
397
+ }];
398
+ readonly properties: {
399
+ readonly sealedCredential: {
400
+ readonly type: "string";
401
+ readonly minLength: 64;
402
+ readonly maxLength: 262144;
403
+ readonly pattern: "^-----BEGIN VTA SEALED BUNDLE-----[\\s\\S]+-----END VTA SEALED BUNDLE-----\\s*$";
404
+ readonly description: "A `SealedTransferBundle` (external/_shared/0.1), sealed to the caller's key-agreement key, whose cleartext is an `ExternalCredentialPayload` for `scope` or a `PresignedRequestSet` for `presign`. Bounded at 256 KiB rather than the shared 64 KiB because a batch of 128 presigned requests does not fit 64 KiB.";
405
+ };
406
+ readonly expiresAt: {
407
+ readonly type: "string";
408
+ readonly format: "date-time";
409
+ readonly description: "The provider's expiry for the credential, in the clear; for `presign`, the earliest expiry in the batch.";
410
+ };
411
+ readonly scope: {
412
+ readonly $ref: "#/$defs/CredentialScope";
413
+ readonly description: "The scope actually granted, which equals the requested one.";
414
+ };
415
+ readonly presign: {
416
+ readonly $ref: "#/$defs/PresignBatch";
417
+ readonly description: "The batch actually presigned, which equals the requested one.";
418
+ };
419
+ readonly ext: {
420
+ readonly $ref: "#/$defs/Ext";
421
+ };
422
+ };
423
+ };
424
+ readonly Ext: {
425
+ readonly title: "Ext";
426
+ 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.";
427
+ readonly type: "object";
428
+ readonly minProperties: 1;
429
+ readonly additionalProperties: true;
430
+ readonly propertyNames: {
431
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
432
+ };
433
+ };
434
+ readonly CredentialScope: {
435
+ readonly title: "CredentialScope";
436
+ readonly type: "object";
437
+ readonly additionalProperties: false;
438
+ readonly description: "What one issuance may do. For storage models, `prefix` and `actions` (both required, a rule this schema leaves to the custodian because other models use neither); for `s3-static-presign`, also `objectKey`, since a presigned URL is one operation on one object; for `oauth2-private-key-jwt`, `scopes`.";
439
+ readonly properties: {
440
+ readonly prefix: {
441
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
442
+ };
443
+ readonly actions: {
444
+ readonly type: "array";
445
+ readonly minItems: 1;
446
+ readonly maxItems: 3;
447
+ readonly uniqueItems: true;
448
+ readonly items: {
449
+ readonly $ref: "#/$defs/ProviderObjectAction";
450
+ };
451
+ };
452
+ readonly objectKey: {
453
+ readonly type: "string";
454
+ readonly minLength: 1;
455
+ readonly maxLength: 1024;
456
+ readonly pattern: "^[A-Za-z0-9._-]+$";
457
+ readonly description: "`s3-static-presign` only: the object's name within `prefix`. The presigned URL names `prefix` + `objectKey` and nothing else, and `actions` must hold exactly one action.";
458
+ };
459
+ readonly scopes: {
460
+ readonly type: "array";
461
+ readonly maxItems: 64;
462
+ readonly uniqueItems: true;
463
+ readonly items: {
464
+ readonly type: "string";
465
+ readonly maxLength: 256;
466
+ readonly pattern: "^[!#-\\[\\]-~]+$";
467
+ };
468
+ readonly description: "`oauth2-private-key-jwt` only: the OAuth scopes requested.";
469
+ };
470
+ };
471
+ };
472
+ readonly ProviderObjectAction: {
473
+ readonly title: "ProviderObjectAction";
474
+ readonly type: "string";
475
+ readonly enum: readonly ["put", "get", "delete"];
476
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
477
+ };
478
+ readonly ProviderObjectPrefix: {
479
+ readonly title: "ProviderObjectPrefix";
480
+ readonly type: "string";
481
+ readonly minLength: 2;
482
+ readonly maxLength: 512;
483
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
484
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
485
+ };
486
+ readonly AccountId: {
487
+ readonly title: "AccountId";
488
+ readonly type: "string";
489
+ readonly minLength: 1;
490
+ readonly maxLength: 64;
491
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
492
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
493
+ };
494
+ readonly AccountContextId: {
495
+ readonly title: "AccountContextId";
496
+ readonly type: "string";
497
+ readonly minLength: 1;
498
+ readonly maxLength: 256;
499
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
500
+ };
501
+ };
502
+ };
503
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
504
+ export declare const RESPONSE_PAYLOAD_SCHEMA: {
505
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
506
+ readonly $ref: "#/$defs/Response";
507
+ readonly $defs: {
508
+ readonly ChecksumSha256: {
509
+ readonly title: "ChecksumSha256";
510
+ readonly type: "string";
511
+ readonly minLength: 44;
512
+ readonly maxLength: 44;
513
+ readonly pattern: "^[A-Za-z0-9+/]{43}=$";
514
+ readonly description: "A SHA-256 digest in standard base64 (RFC 4648 §4, padded), as S3 carries it in `x-amz-checksum-sha256`.";
515
+ };
516
+ readonly PresignBatch: {
517
+ readonly title: "PresignBatch";
518
+ readonly type: "object";
519
+ readonly additionalProperties: false;
520
+ readonly required: readonly ["prefix", "objectKey", "requests"];
521
+ readonly description: "`s3-static-presign` only: up to 128 operations on **one** object, `prefix` + `objectKey`, and at most one multipart upload of it. Each operation becomes one presigned request, sealed together. Consistency rules JSON Schema cannot state, which the custodian enforces: `uploadId` is present exactly when an operation needs it (`upload-part`, `list-parts`, `complete-multipart`, `abort-multipart`) and absent when the batch holds `create-multipart`; no two operations are identical; no two `upload-part` operations name the same `partNumber`.";
522
+ readonly properties: {
523
+ readonly prefix: {
524
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
525
+ };
526
+ readonly objectKey: {
527
+ readonly type: "string";
528
+ readonly minLength: 1;
529
+ readonly maxLength: 1024;
530
+ readonly pattern: "^[A-Za-z0-9._-]+$";
531
+ readonly description: "The object's name within `prefix`. Every request in the batch names `prefix` + `objectKey` and no other object.";
532
+ };
533
+ readonly uploadId: {
534
+ readonly type: "string";
535
+ readonly minLength: 1;
536
+ readonly maxLength: 1024;
537
+ readonly pattern: "^[A-Za-z0-9._~+/=-]+$";
538
+ readonly description: "The multipart upload the batch's multipart operations act on, as storage returned it from CreateMultipartUpload. Signed into each such request's query, percent-encoded by the SigV4 encoder, never interpolated.";
539
+ };
540
+ readonly requests: {
541
+ readonly type: "array";
542
+ readonly minItems: 1;
543
+ readonly maxItems: 128;
544
+ readonly items: {
545
+ readonly $ref: "#/$defs/PresignRequest";
546
+ };
547
+ };
548
+ };
549
+ };
550
+ readonly PresignRequest: {
551
+ readonly title: "PresignRequest";
552
+ readonly description: "One operation to presign, discriminated by `operation`. The ceiling action each needs is in `PresignOperation`.";
553
+ readonly oneOf: readonly [{
554
+ readonly title: "PresignPut";
555
+ readonly type: "object";
556
+ readonly additionalProperties: false;
557
+ readonly required: readonly ["operation", "contentLength", "checksumSha256"];
558
+ readonly description: "PutObject of the whole object, bound to its exact length and SHA-256.";
559
+ readonly properties: {
560
+ readonly operation: {
561
+ readonly type: "string";
562
+ readonly const: "put";
563
+ };
564
+ readonly contentLength: {
565
+ readonly type: "integer";
566
+ readonly minimum: 0;
567
+ readonly maximum: 5368709120;
568
+ readonly description: "The object's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's single-request ceiling.";
569
+ };
570
+ readonly checksumSha256: {
571
+ readonly $ref: "#/$defs/ChecksumSha256";
572
+ };
573
+ };
574
+ }, {
575
+ readonly title: "PresignGet";
576
+ readonly type: "object";
577
+ readonly additionalProperties: false;
578
+ readonly required: readonly ["operation"];
579
+ readonly description: "GetObject.";
580
+ readonly properties: {
581
+ readonly operation: {
582
+ readonly type: "string";
583
+ readonly const: "get";
584
+ };
585
+ };
586
+ }, {
587
+ readonly title: "PresignHead";
588
+ readonly type: "object";
589
+ readonly additionalProperties: false;
590
+ readonly required: readonly ["operation"];
591
+ readonly description: "HeadObject, with `x-amz-checksum-mode: ENABLED` signed so storage reports the object's checksum.";
592
+ readonly properties: {
593
+ readonly operation: {
594
+ readonly type: "string";
595
+ readonly const: "head";
596
+ };
597
+ };
598
+ }, {
599
+ readonly title: "PresignDelete";
600
+ readonly type: "object";
601
+ readonly additionalProperties: false;
602
+ readonly required: readonly ["operation"];
603
+ readonly description: "DeleteObject.";
604
+ readonly properties: {
605
+ readonly operation: {
606
+ readonly type: "string";
607
+ readonly const: "delete";
608
+ };
609
+ };
610
+ }, {
611
+ readonly title: "PresignCreateMultipart";
612
+ readonly type: "object";
613
+ readonly additionalProperties: false;
614
+ readonly required: readonly ["operation"];
615
+ readonly description: "CreateMultipartUpload, with `x-amz-checksum-algorithm: SHA256` signed so every part of the upload must carry a SHA-256 checksum.";
616
+ readonly properties: {
617
+ readonly operation: {
618
+ readonly type: "string";
619
+ readonly const: "create-multipart";
620
+ };
621
+ };
622
+ }, {
623
+ readonly title: "PresignUploadPart";
624
+ readonly type: "object";
625
+ readonly additionalProperties: false;
626
+ readonly required: readonly ["operation", "partNumber", "contentLength", "checksumSha256"];
627
+ readonly description: "UploadPart of one part of `uploadId`, bound to its number, its exact length and its SHA-256.";
628
+ readonly properties: {
629
+ readonly operation: {
630
+ readonly type: "string";
631
+ readonly const: "upload-part";
632
+ };
633
+ readonly partNumber: {
634
+ readonly type: "integer";
635
+ readonly minimum: 1;
636
+ readonly maximum: 10000;
637
+ };
638
+ readonly contentLength: {
639
+ readonly type: "integer";
640
+ readonly minimum: 1;
641
+ readonly maximum: 5368709120;
642
+ readonly description: "The part's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's part ceiling.";
643
+ };
644
+ readonly checksumSha256: {
645
+ readonly $ref: "#/$defs/ChecksumSha256";
646
+ };
647
+ };
648
+ }, {
649
+ readonly title: "PresignListParts";
650
+ readonly type: "object";
651
+ readonly additionalProperties: false;
652
+ readonly required: readonly ["operation"];
653
+ readonly description: "ListParts of `uploadId`: each part's number, length, ETag and checksum, up to 1000 per page.";
654
+ readonly properties: {
655
+ readonly operation: {
656
+ readonly type: "string";
657
+ readonly const: "list-parts";
658
+ };
659
+ readonly partNumberMarker: {
660
+ readonly type: "integer";
661
+ readonly minimum: 0;
662
+ readonly maximum: 10000;
663
+ readonly description: "List parts after this number. Absent, from the first.";
664
+ };
665
+ };
666
+ }, {
667
+ readonly title: "PresignCompleteMultipart";
668
+ readonly type: "object";
669
+ readonly additionalProperties: false;
670
+ readonly required: readonly ["operation", "contentLength"];
671
+ readonly description: "CompleteMultipartUpload of `uploadId`, bound to the assembled object's exact length.";
672
+ readonly properties: {
673
+ readonly operation: {
674
+ readonly type: "string";
675
+ readonly const: "complete-multipart";
676
+ };
677
+ readonly contentLength: {
678
+ readonly type: "integer";
679
+ readonly minimum: 0;
680
+ readonly maximum: 5497558138880;
681
+ readonly description: "The assembled object's exact length in bytes, signed into the request as `x-amz-mp-object-size`, so storage refuses a completion that would assemble any other size. At most 5 TiB, S3's object ceiling.";
682
+ };
683
+ };
684
+ }, {
685
+ readonly title: "PresignAbortMultipart";
686
+ readonly type: "object";
687
+ readonly additionalProperties: false;
688
+ readonly required: readonly ["operation"];
689
+ readonly description: "AbortMultipartUpload of `uploadId`.";
690
+ readonly properties: {
691
+ readonly operation: {
692
+ readonly type: "string";
693
+ readonly const: "abort-multipart";
694
+ };
695
+ };
696
+ }];
697
+ };
698
+ readonly Response: {
699
+ readonly $anchor: "response";
700
+ readonly title: "External Credentials — Issue — response payload";
701
+ readonly type: "object";
702
+ readonly additionalProperties: false;
703
+ readonly required: readonly ["sealedCredential", "expiresAt"];
704
+ readonly oneOf: readonly [{
705
+ readonly required: readonly ["scope"];
706
+ readonly not: {
707
+ readonly required: readonly ["presign"];
708
+ };
709
+ }, {
710
+ readonly required: readonly ["presign"];
711
+ readonly not: {
712
+ readonly required: readonly ["scope"];
713
+ };
714
+ }];
715
+ readonly properties: {
716
+ readonly sealedCredential: {
717
+ readonly type: "string";
718
+ readonly minLength: 64;
719
+ readonly maxLength: 262144;
720
+ readonly pattern: "^-----BEGIN VTA SEALED BUNDLE-----[\\s\\S]+-----END VTA SEALED BUNDLE-----\\s*$";
721
+ readonly description: "A `SealedTransferBundle` (external/_shared/0.1), sealed to the caller's key-agreement key, whose cleartext is an `ExternalCredentialPayload` for `scope` or a `PresignedRequestSet` for `presign`. Bounded at 256 KiB rather than the shared 64 KiB because a batch of 128 presigned requests does not fit 64 KiB.";
722
+ };
723
+ readonly expiresAt: {
724
+ readonly type: "string";
725
+ readonly format: "date-time";
726
+ readonly description: "The provider's expiry for the credential, in the clear; for `presign`, the earliest expiry in the batch.";
727
+ };
728
+ readonly scope: {
729
+ readonly $ref: "#/$defs/CredentialScope";
730
+ readonly description: "The scope actually granted, which equals the requested one.";
731
+ };
732
+ readonly presign: {
733
+ readonly $ref: "#/$defs/PresignBatch";
734
+ readonly description: "The batch actually presigned, which equals the requested one.";
735
+ };
736
+ readonly ext: {
737
+ readonly $ref: "#/$defs/Ext";
738
+ };
739
+ };
740
+ };
741
+ readonly Ext: {
742
+ readonly title: "Ext";
743
+ 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.";
744
+ readonly type: "object";
745
+ readonly minProperties: 1;
746
+ readonly additionalProperties: true;
747
+ readonly propertyNames: {
748
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
749
+ };
750
+ };
751
+ readonly CredentialScope: {
752
+ readonly title: "CredentialScope";
753
+ readonly type: "object";
754
+ readonly additionalProperties: false;
755
+ readonly description: "What one issuance may do. For storage models, `prefix` and `actions` (both required, a rule this schema leaves to the custodian because other models use neither); for `s3-static-presign`, also `objectKey`, since a presigned URL is one operation on one object; for `oauth2-private-key-jwt`, `scopes`.";
756
+ readonly properties: {
757
+ readonly prefix: {
758
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
759
+ };
760
+ readonly actions: {
761
+ readonly type: "array";
762
+ readonly minItems: 1;
763
+ readonly maxItems: 3;
764
+ readonly uniqueItems: true;
765
+ readonly items: {
766
+ readonly $ref: "#/$defs/ProviderObjectAction";
767
+ };
768
+ };
769
+ readonly objectKey: {
770
+ readonly type: "string";
771
+ readonly minLength: 1;
772
+ readonly maxLength: 1024;
773
+ readonly pattern: "^[A-Za-z0-9._-]+$";
774
+ readonly description: "`s3-static-presign` only: the object's name within `prefix`. The presigned URL names `prefix` + `objectKey` and nothing else, and `actions` must hold exactly one action.";
775
+ };
776
+ readonly scopes: {
777
+ readonly type: "array";
778
+ readonly maxItems: 64;
779
+ readonly uniqueItems: true;
780
+ readonly items: {
781
+ readonly type: "string";
782
+ readonly maxLength: 256;
783
+ readonly pattern: "^[!#-\\[\\]-~]+$";
784
+ };
785
+ readonly description: "`oauth2-private-key-jwt` only: the OAuth scopes requested.";
786
+ };
787
+ };
788
+ };
789
+ readonly ProviderObjectAction: {
790
+ readonly title: "ProviderObjectAction";
791
+ readonly type: "string";
792
+ readonly enum: readonly ["put", "get", "delete"];
793
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
794
+ };
795
+ readonly ProviderObjectPrefix: {
796
+ readonly title: "ProviderObjectPrefix";
797
+ readonly type: "string";
798
+ readonly minLength: 2;
799
+ readonly maxLength: 512;
800
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
801
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
802
+ };
803
+ readonly AccountId: {
804
+ readonly title: "AccountId";
805
+ readonly type: "string";
806
+ readonly minLength: 1;
807
+ readonly maxLength: 64;
808
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
809
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
810
+ };
811
+ readonly AccountContextId: {
812
+ readonly title: "AccountContextId";
813
+ readonly type: "string";
814
+ readonly minLength: 1;
815
+ readonly maxLength: 256;
816
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
817
+ };
818
+ };
819
+ };
820
+ /**
821
+ * SPEC.md §7.2 policy for the request variant, from this specification's
822
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
823
+ * per-specification and cannot be derived from the document alone, and
824
+ * item 2 needs the schema this carries.
825
+ */
826
+ export declare const SPEC: {
827
+ readonly typeUri: "https://trusttasks.org/spec/external/credentials/issue/0.2";
828
+ readonly isBearer: false;
829
+ readonly isProofRequired: true;
830
+ readonly isRecipientRequired: true;
831
+ readonly isIssuedAtRequired: true;
832
+ readonly payloadSchema: {
833
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
834
+ readonly $id: "https://trusttasks.org/spec/external/credentials/issue/0.2";
835
+ readonly title: "External Credentials — Issue — payload";
836
+ readonly description: "Obtain a short-lived, downscoped provider credential from an external account, sealed to the caller: session or token credentials under `scope`, or a batch of presigned requests on one object under `presign`. The outer document members are owned by the framework — SPEC §6.3.";
837
+ readonly type: "object";
838
+ readonly additionalProperties: false;
839
+ readonly required: readonly ["context", "account", "ttlSeconds"];
840
+ readonly oneOf: readonly [{
841
+ readonly required: readonly ["scope"];
842
+ readonly not: {
843
+ readonly required: readonly ["presign"];
844
+ };
845
+ }, {
846
+ readonly required: readonly ["presign"];
847
+ readonly not: {
848
+ readonly required: readonly ["scope"];
849
+ };
850
+ }];
851
+ readonly properties: {
852
+ readonly context: {
853
+ readonly $ref: "#/$defs/AccountContextId";
854
+ };
855
+ readonly account: {
856
+ readonly $ref: "#/$defs/AccountId";
857
+ };
858
+ readonly scope: {
859
+ readonly $ref: "#/$defs/CredentialScope";
860
+ readonly description: "For every brokered model but `s3-static-presign`: the prefix and actions, or the OAuth scopes, the session or token is downscoped to. `objectKey` is not used in this version.";
861
+ };
862
+ readonly presign: {
863
+ readonly $ref: "#/$defs/PresignBatch";
864
+ };
865
+ readonly ttlSeconds: {
866
+ readonly type: "integer";
867
+ readonly minimum: 60;
868
+ readonly maximum: 3600;
869
+ readonly description: "Requested lifetime; never more than the binding's `maxTtlSeconds`. For `presign`, the lifetime of every URL in the batch.";
870
+ };
871
+ readonly ext: {
872
+ readonly $ref: "#/$defs/Ext";
873
+ };
874
+ };
875
+ readonly $defs: {
876
+ readonly ChecksumSha256: {
877
+ readonly title: "ChecksumSha256";
878
+ readonly type: "string";
879
+ readonly minLength: 44;
880
+ readonly maxLength: 44;
881
+ readonly pattern: "^[A-Za-z0-9+/]{43}=$";
882
+ readonly description: "A SHA-256 digest in standard base64 (RFC 4648 §4, padded), as S3 carries it in `x-amz-checksum-sha256`.";
883
+ };
884
+ readonly PresignBatch: {
885
+ readonly title: "PresignBatch";
886
+ readonly type: "object";
887
+ readonly additionalProperties: false;
888
+ readonly required: readonly ["prefix", "objectKey", "requests"];
889
+ readonly description: "`s3-static-presign` only: up to 128 operations on **one** object, `prefix` + `objectKey`, and at most one multipart upload of it. Each operation becomes one presigned request, sealed together. Consistency rules JSON Schema cannot state, which the custodian enforces: `uploadId` is present exactly when an operation needs it (`upload-part`, `list-parts`, `complete-multipart`, `abort-multipart`) and absent when the batch holds `create-multipart`; no two operations are identical; no two `upload-part` operations name the same `partNumber`.";
890
+ readonly properties: {
891
+ readonly prefix: {
892
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
893
+ };
894
+ readonly objectKey: {
895
+ readonly type: "string";
896
+ readonly minLength: 1;
897
+ readonly maxLength: 1024;
898
+ readonly pattern: "^[A-Za-z0-9._-]+$";
899
+ readonly description: "The object's name within `prefix`. Every request in the batch names `prefix` + `objectKey` and no other object.";
900
+ };
901
+ readonly uploadId: {
902
+ readonly type: "string";
903
+ readonly minLength: 1;
904
+ readonly maxLength: 1024;
905
+ readonly pattern: "^[A-Za-z0-9._~+/=-]+$";
906
+ readonly description: "The multipart upload the batch's multipart operations act on, as storage returned it from CreateMultipartUpload. Signed into each such request's query, percent-encoded by the SigV4 encoder, never interpolated.";
907
+ };
908
+ readonly requests: {
909
+ readonly type: "array";
910
+ readonly minItems: 1;
911
+ readonly maxItems: 128;
912
+ readonly items: {
913
+ readonly $ref: "#/$defs/PresignRequest";
914
+ };
915
+ };
916
+ };
917
+ };
918
+ readonly PresignRequest: {
919
+ readonly title: "PresignRequest";
920
+ readonly description: "One operation to presign, discriminated by `operation`. The ceiling action each needs is in `PresignOperation`.";
921
+ readonly oneOf: readonly [{
922
+ readonly title: "PresignPut";
923
+ readonly type: "object";
924
+ readonly additionalProperties: false;
925
+ readonly required: readonly ["operation", "contentLength", "checksumSha256"];
926
+ readonly description: "PutObject of the whole object, bound to its exact length and SHA-256.";
927
+ readonly properties: {
928
+ readonly operation: {
929
+ readonly type: "string";
930
+ readonly const: "put";
931
+ };
932
+ readonly contentLength: {
933
+ readonly type: "integer";
934
+ readonly minimum: 0;
935
+ readonly maximum: 5368709120;
936
+ readonly description: "The object's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's single-request ceiling.";
937
+ };
938
+ readonly checksumSha256: {
939
+ readonly $ref: "#/$defs/ChecksumSha256";
940
+ };
941
+ };
942
+ }, {
943
+ readonly title: "PresignGet";
944
+ readonly type: "object";
945
+ readonly additionalProperties: false;
946
+ readonly required: readonly ["operation"];
947
+ readonly description: "GetObject.";
948
+ readonly properties: {
949
+ readonly operation: {
950
+ readonly type: "string";
951
+ readonly const: "get";
952
+ };
953
+ };
954
+ }, {
955
+ readonly title: "PresignHead";
956
+ readonly type: "object";
957
+ readonly additionalProperties: false;
958
+ readonly required: readonly ["operation"];
959
+ readonly description: "HeadObject, with `x-amz-checksum-mode: ENABLED` signed so storage reports the object's checksum.";
960
+ readonly properties: {
961
+ readonly operation: {
962
+ readonly type: "string";
963
+ readonly const: "head";
964
+ };
965
+ };
966
+ }, {
967
+ readonly title: "PresignDelete";
968
+ readonly type: "object";
969
+ readonly additionalProperties: false;
970
+ readonly required: readonly ["operation"];
971
+ readonly description: "DeleteObject.";
972
+ readonly properties: {
973
+ readonly operation: {
974
+ readonly type: "string";
975
+ readonly const: "delete";
976
+ };
977
+ };
978
+ }, {
979
+ readonly title: "PresignCreateMultipart";
980
+ readonly type: "object";
981
+ readonly additionalProperties: false;
982
+ readonly required: readonly ["operation"];
983
+ readonly description: "CreateMultipartUpload, with `x-amz-checksum-algorithm: SHA256` signed so every part of the upload must carry a SHA-256 checksum.";
984
+ readonly properties: {
985
+ readonly operation: {
986
+ readonly type: "string";
987
+ readonly const: "create-multipart";
988
+ };
989
+ };
990
+ }, {
991
+ readonly title: "PresignUploadPart";
992
+ readonly type: "object";
993
+ readonly additionalProperties: false;
994
+ readonly required: readonly ["operation", "partNumber", "contentLength", "checksumSha256"];
995
+ readonly description: "UploadPart of one part of `uploadId`, bound to its number, its exact length and its SHA-256.";
996
+ readonly properties: {
997
+ readonly operation: {
998
+ readonly type: "string";
999
+ readonly const: "upload-part";
1000
+ };
1001
+ readonly partNumber: {
1002
+ readonly type: "integer";
1003
+ readonly minimum: 1;
1004
+ readonly maximum: 10000;
1005
+ };
1006
+ readonly contentLength: {
1007
+ readonly type: "integer";
1008
+ readonly minimum: 1;
1009
+ readonly maximum: 5368709120;
1010
+ readonly description: "The part's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's part ceiling.";
1011
+ };
1012
+ readonly checksumSha256: {
1013
+ readonly $ref: "#/$defs/ChecksumSha256";
1014
+ };
1015
+ };
1016
+ }, {
1017
+ readonly title: "PresignListParts";
1018
+ readonly type: "object";
1019
+ readonly additionalProperties: false;
1020
+ readonly required: readonly ["operation"];
1021
+ readonly description: "ListParts of `uploadId`: each part's number, length, ETag and checksum, up to 1000 per page.";
1022
+ readonly properties: {
1023
+ readonly operation: {
1024
+ readonly type: "string";
1025
+ readonly const: "list-parts";
1026
+ };
1027
+ readonly partNumberMarker: {
1028
+ readonly type: "integer";
1029
+ readonly minimum: 0;
1030
+ readonly maximum: 10000;
1031
+ readonly description: "List parts after this number. Absent, from the first.";
1032
+ };
1033
+ };
1034
+ }, {
1035
+ readonly title: "PresignCompleteMultipart";
1036
+ readonly type: "object";
1037
+ readonly additionalProperties: false;
1038
+ readonly required: readonly ["operation", "contentLength"];
1039
+ readonly description: "CompleteMultipartUpload of `uploadId`, bound to the assembled object's exact length.";
1040
+ readonly properties: {
1041
+ readonly operation: {
1042
+ readonly type: "string";
1043
+ readonly const: "complete-multipart";
1044
+ };
1045
+ readonly contentLength: {
1046
+ readonly type: "integer";
1047
+ readonly minimum: 0;
1048
+ readonly maximum: 5497558138880;
1049
+ readonly description: "The assembled object's exact length in bytes, signed into the request as `x-amz-mp-object-size`, so storage refuses a completion that would assemble any other size. At most 5 TiB, S3's object ceiling.";
1050
+ };
1051
+ };
1052
+ }, {
1053
+ readonly title: "PresignAbortMultipart";
1054
+ readonly type: "object";
1055
+ readonly additionalProperties: false;
1056
+ readonly required: readonly ["operation"];
1057
+ readonly description: "AbortMultipartUpload of `uploadId`.";
1058
+ readonly properties: {
1059
+ readonly operation: {
1060
+ readonly type: "string";
1061
+ readonly const: "abort-multipart";
1062
+ };
1063
+ };
1064
+ }];
1065
+ };
1066
+ readonly Response: {
1067
+ readonly $anchor: "response";
1068
+ readonly title: "External Credentials — Issue — response payload";
1069
+ readonly type: "object";
1070
+ readonly additionalProperties: false;
1071
+ readonly required: readonly ["sealedCredential", "expiresAt"];
1072
+ readonly oneOf: readonly [{
1073
+ readonly required: readonly ["scope"];
1074
+ readonly not: {
1075
+ readonly required: readonly ["presign"];
1076
+ };
1077
+ }, {
1078
+ readonly required: readonly ["presign"];
1079
+ readonly not: {
1080
+ readonly required: readonly ["scope"];
1081
+ };
1082
+ }];
1083
+ readonly properties: {
1084
+ readonly sealedCredential: {
1085
+ readonly type: "string";
1086
+ readonly minLength: 64;
1087
+ readonly maxLength: 262144;
1088
+ readonly pattern: "^-----BEGIN VTA SEALED BUNDLE-----[\\s\\S]+-----END VTA SEALED BUNDLE-----\\s*$";
1089
+ readonly description: "A `SealedTransferBundle` (external/_shared/0.1), sealed to the caller's key-agreement key, whose cleartext is an `ExternalCredentialPayload` for `scope` or a `PresignedRequestSet` for `presign`. Bounded at 256 KiB rather than the shared 64 KiB because a batch of 128 presigned requests does not fit 64 KiB.";
1090
+ };
1091
+ readonly expiresAt: {
1092
+ readonly type: "string";
1093
+ readonly format: "date-time";
1094
+ readonly description: "The provider's expiry for the credential, in the clear; for `presign`, the earliest expiry in the batch.";
1095
+ };
1096
+ readonly scope: {
1097
+ readonly $ref: "#/$defs/CredentialScope";
1098
+ readonly description: "The scope actually granted, which equals the requested one.";
1099
+ };
1100
+ readonly presign: {
1101
+ readonly $ref: "#/$defs/PresignBatch";
1102
+ readonly description: "The batch actually presigned, which equals the requested one.";
1103
+ };
1104
+ readonly ext: {
1105
+ readonly $ref: "#/$defs/Ext";
1106
+ };
1107
+ };
1108
+ };
1109
+ readonly Ext: {
1110
+ readonly title: "Ext";
1111
+ 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.";
1112
+ readonly type: "object";
1113
+ readonly minProperties: 1;
1114
+ readonly additionalProperties: true;
1115
+ readonly propertyNames: {
1116
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
1117
+ };
1118
+ };
1119
+ readonly CredentialScope: {
1120
+ readonly title: "CredentialScope";
1121
+ readonly type: "object";
1122
+ readonly additionalProperties: false;
1123
+ readonly description: "What one issuance may do. For storage models, `prefix` and `actions` (both required, a rule this schema leaves to the custodian because other models use neither); for `s3-static-presign`, also `objectKey`, since a presigned URL is one operation on one object; for `oauth2-private-key-jwt`, `scopes`.";
1124
+ readonly properties: {
1125
+ readonly prefix: {
1126
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1127
+ };
1128
+ readonly actions: {
1129
+ readonly type: "array";
1130
+ readonly minItems: 1;
1131
+ readonly maxItems: 3;
1132
+ readonly uniqueItems: true;
1133
+ readonly items: {
1134
+ readonly $ref: "#/$defs/ProviderObjectAction";
1135
+ };
1136
+ };
1137
+ readonly objectKey: {
1138
+ readonly type: "string";
1139
+ readonly minLength: 1;
1140
+ readonly maxLength: 1024;
1141
+ readonly pattern: "^[A-Za-z0-9._-]+$";
1142
+ readonly description: "`s3-static-presign` only: the object's name within `prefix`. The presigned URL names `prefix` + `objectKey` and nothing else, and `actions` must hold exactly one action.";
1143
+ };
1144
+ readonly scopes: {
1145
+ readonly type: "array";
1146
+ readonly maxItems: 64;
1147
+ readonly uniqueItems: true;
1148
+ readonly items: {
1149
+ readonly type: "string";
1150
+ readonly maxLength: 256;
1151
+ readonly pattern: "^[!#-\\[\\]-~]+$";
1152
+ };
1153
+ readonly description: "`oauth2-private-key-jwt` only: the OAuth scopes requested.";
1154
+ };
1155
+ };
1156
+ };
1157
+ readonly ProviderObjectAction: {
1158
+ readonly title: "ProviderObjectAction";
1159
+ readonly type: "string";
1160
+ readonly enum: readonly ["put", "get", "delete"];
1161
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
1162
+ };
1163
+ readonly ProviderObjectPrefix: {
1164
+ readonly title: "ProviderObjectPrefix";
1165
+ readonly type: "string";
1166
+ readonly minLength: 2;
1167
+ readonly maxLength: 512;
1168
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
1169
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
1170
+ };
1171
+ readonly AccountId: {
1172
+ readonly title: "AccountId";
1173
+ readonly type: "string";
1174
+ readonly minLength: 1;
1175
+ readonly maxLength: 64;
1176
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
1177
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
1178
+ };
1179
+ readonly AccountContextId: {
1180
+ readonly title: "AccountContextId";
1181
+ readonly type: "string";
1182
+ readonly minLength: 1;
1183
+ readonly maxLength: 256;
1184
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
1185
+ };
1186
+ };
1187
+ };
1188
+ };
1189
+ /**
1190
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
1191
+ * tracks the *issuer* party's requirement because a response swaps the
1192
+ * parties (§7.3 item 5).
1193
+ */
1194
+ export declare const RESPONSE_SPEC: {
1195
+ readonly typeUri: "https://trusttasks.org/spec/external/credentials/issue/0.2#response";
1196
+ readonly isBearer: false;
1197
+ readonly isProofRequired: true;
1198
+ readonly isRecipientRequired: true;
1199
+ readonly isIssuedAtRequired: true;
1200
+ readonly payloadSchema: {
1201
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
1202
+ readonly $ref: "#/$defs/Response";
1203
+ readonly $defs: {
1204
+ readonly ChecksumSha256: {
1205
+ readonly title: "ChecksumSha256";
1206
+ readonly type: "string";
1207
+ readonly minLength: 44;
1208
+ readonly maxLength: 44;
1209
+ readonly pattern: "^[A-Za-z0-9+/]{43}=$";
1210
+ readonly description: "A SHA-256 digest in standard base64 (RFC 4648 §4, padded), as S3 carries it in `x-amz-checksum-sha256`.";
1211
+ };
1212
+ readonly PresignBatch: {
1213
+ readonly title: "PresignBatch";
1214
+ readonly type: "object";
1215
+ readonly additionalProperties: false;
1216
+ readonly required: readonly ["prefix", "objectKey", "requests"];
1217
+ readonly description: "`s3-static-presign` only: up to 128 operations on **one** object, `prefix` + `objectKey`, and at most one multipart upload of it. Each operation becomes one presigned request, sealed together. Consistency rules JSON Schema cannot state, which the custodian enforces: `uploadId` is present exactly when an operation needs it (`upload-part`, `list-parts`, `complete-multipart`, `abort-multipart`) and absent when the batch holds `create-multipart`; no two operations are identical; no two `upload-part` operations name the same `partNumber`.";
1218
+ readonly properties: {
1219
+ readonly prefix: {
1220
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1221
+ };
1222
+ readonly objectKey: {
1223
+ readonly type: "string";
1224
+ readonly minLength: 1;
1225
+ readonly maxLength: 1024;
1226
+ readonly pattern: "^[A-Za-z0-9._-]+$";
1227
+ readonly description: "The object's name within `prefix`. Every request in the batch names `prefix` + `objectKey` and no other object.";
1228
+ };
1229
+ readonly uploadId: {
1230
+ readonly type: "string";
1231
+ readonly minLength: 1;
1232
+ readonly maxLength: 1024;
1233
+ readonly pattern: "^[A-Za-z0-9._~+/=-]+$";
1234
+ readonly description: "The multipart upload the batch's multipart operations act on, as storage returned it from CreateMultipartUpload. Signed into each such request's query, percent-encoded by the SigV4 encoder, never interpolated.";
1235
+ };
1236
+ readonly requests: {
1237
+ readonly type: "array";
1238
+ readonly minItems: 1;
1239
+ readonly maxItems: 128;
1240
+ readonly items: {
1241
+ readonly $ref: "#/$defs/PresignRequest";
1242
+ };
1243
+ };
1244
+ };
1245
+ };
1246
+ readonly PresignRequest: {
1247
+ readonly title: "PresignRequest";
1248
+ readonly description: "One operation to presign, discriminated by `operation`. The ceiling action each needs is in `PresignOperation`.";
1249
+ readonly oneOf: readonly [{
1250
+ readonly title: "PresignPut";
1251
+ readonly type: "object";
1252
+ readonly additionalProperties: false;
1253
+ readonly required: readonly ["operation", "contentLength", "checksumSha256"];
1254
+ readonly description: "PutObject of the whole object, bound to its exact length and SHA-256.";
1255
+ readonly properties: {
1256
+ readonly operation: {
1257
+ readonly type: "string";
1258
+ readonly const: "put";
1259
+ };
1260
+ readonly contentLength: {
1261
+ readonly type: "integer";
1262
+ readonly minimum: 0;
1263
+ readonly maximum: 5368709120;
1264
+ readonly description: "The object's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's single-request ceiling.";
1265
+ };
1266
+ readonly checksumSha256: {
1267
+ readonly $ref: "#/$defs/ChecksumSha256";
1268
+ };
1269
+ };
1270
+ }, {
1271
+ readonly title: "PresignGet";
1272
+ readonly type: "object";
1273
+ readonly additionalProperties: false;
1274
+ readonly required: readonly ["operation"];
1275
+ readonly description: "GetObject.";
1276
+ readonly properties: {
1277
+ readonly operation: {
1278
+ readonly type: "string";
1279
+ readonly const: "get";
1280
+ };
1281
+ };
1282
+ }, {
1283
+ readonly title: "PresignHead";
1284
+ readonly type: "object";
1285
+ readonly additionalProperties: false;
1286
+ readonly required: readonly ["operation"];
1287
+ readonly description: "HeadObject, with `x-amz-checksum-mode: ENABLED` signed so storage reports the object's checksum.";
1288
+ readonly properties: {
1289
+ readonly operation: {
1290
+ readonly type: "string";
1291
+ readonly const: "head";
1292
+ };
1293
+ };
1294
+ }, {
1295
+ readonly title: "PresignDelete";
1296
+ readonly type: "object";
1297
+ readonly additionalProperties: false;
1298
+ readonly required: readonly ["operation"];
1299
+ readonly description: "DeleteObject.";
1300
+ readonly properties: {
1301
+ readonly operation: {
1302
+ readonly type: "string";
1303
+ readonly const: "delete";
1304
+ };
1305
+ };
1306
+ }, {
1307
+ readonly title: "PresignCreateMultipart";
1308
+ readonly type: "object";
1309
+ readonly additionalProperties: false;
1310
+ readonly required: readonly ["operation"];
1311
+ readonly description: "CreateMultipartUpload, with `x-amz-checksum-algorithm: SHA256` signed so every part of the upload must carry a SHA-256 checksum.";
1312
+ readonly properties: {
1313
+ readonly operation: {
1314
+ readonly type: "string";
1315
+ readonly const: "create-multipart";
1316
+ };
1317
+ };
1318
+ }, {
1319
+ readonly title: "PresignUploadPart";
1320
+ readonly type: "object";
1321
+ readonly additionalProperties: false;
1322
+ readonly required: readonly ["operation", "partNumber", "contentLength", "checksumSha256"];
1323
+ readonly description: "UploadPart of one part of `uploadId`, bound to its number, its exact length and its SHA-256.";
1324
+ readonly properties: {
1325
+ readonly operation: {
1326
+ readonly type: "string";
1327
+ readonly const: "upload-part";
1328
+ };
1329
+ readonly partNumber: {
1330
+ readonly type: "integer";
1331
+ readonly minimum: 1;
1332
+ readonly maximum: 10000;
1333
+ };
1334
+ readonly contentLength: {
1335
+ readonly type: "integer";
1336
+ readonly minimum: 1;
1337
+ readonly maximum: 5368709120;
1338
+ readonly description: "The part's exact length in bytes, signed into the request as `Content-Length`. At most 5 GiB, S3's part ceiling.";
1339
+ };
1340
+ readonly checksumSha256: {
1341
+ readonly $ref: "#/$defs/ChecksumSha256";
1342
+ };
1343
+ };
1344
+ }, {
1345
+ readonly title: "PresignListParts";
1346
+ readonly type: "object";
1347
+ readonly additionalProperties: false;
1348
+ readonly required: readonly ["operation"];
1349
+ readonly description: "ListParts of `uploadId`: each part's number, length, ETag and checksum, up to 1000 per page.";
1350
+ readonly properties: {
1351
+ readonly operation: {
1352
+ readonly type: "string";
1353
+ readonly const: "list-parts";
1354
+ };
1355
+ readonly partNumberMarker: {
1356
+ readonly type: "integer";
1357
+ readonly minimum: 0;
1358
+ readonly maximum: 10000;
1359
+ readonly description: "List parts after this number. Absent, from the first.";
1360
+ };
1361
+ };
1362
+ }, {
1363
+ readonly title: "PresignCompleteMultipart";
1364
+ readonly type: "object";
1365
+ readonly additionalProperties: false;
1366
+ readonly required: readonly ["operation", "contentLength"];
1367
+ readonly description: "CompleteMultipartUpload of `uploadId`, bound to the assembled object's exact length.";
1368
+ readonly properties: {
1369
+ readonly operation: {
1370
+ readonly type: "string";
1371
+ readonly const: "complete-multipart";
1372
+ };
1373
+ readonly contentLength: {
1374
+ readonly type: "integer";
1375
+ readonly minimum: 0;
1376
+ readonly maximum: 5497558138880;
1377
+ readonly description: "The assembled object's exact length in bytes, signed into the request as `x-amz-mp-object-size`, so storage refuses a completion that would assemble any other size. At most 5 TiB, S3's object ceiling.";
1378
+ };
1379
+ };
1380
+ }, {
1381
+ readonly title: "PresignAbortMultipart";
1382
+ readonly type: "object";
1383
+ readonly additionalProperties: false;
1384
+ readonly required: readonly ["operation"];
1385
+ readonly description: "AbortMultipartUpload of `uploadId`.";
1386
+ readonly properties: {
1387
+ readonly operation: {
1388
+ readonly type: "string";
1389
+ readonly const: "abort-multipart";
1390
+ };
1391
+ };
1392
+ }];
1393
+ };
1394
+ readonly Response: {
1395
+ readonly $anchor: "response";
1396
+ readonly title: "External Credentials — Issue — response payload";
1397
+ readonly type: "object";
1398
+ readonly additionalProperties: false;
1399
+ readonly required: readonly ["sealedCredential", "expiresAt"];
1400
+ readonly oneOf: readonly [{
1401
+ readonly required: readonly ["scope"];
1402
+ readonly not: {
1403
+ readonly required: readonly ["presign"];
1404
+ };
1405
+ }, {
1406
+ readonly required: readonly ["presign"];
1407
+ readonly not: {
1408
+ readonly required: readonly ["scope"];
1409
+ };
1410
+ }];
1411
+ readonly properties: {
1412
+ readonly sealedCredential: {
1413
+ readonly type: "string";
1414
+ readonly minLength: 64;
1415
+ readonly maxLength: 262144;
1416
+ readonly pattern: "^-----BEGIN VTA SEALED BUNDLE-----[\\s\\S]+-----END VTA SEALED BUNDLE-----\\s*$";
1417
+ readonly description: "A `SealedTransferBundle` (external/_shared/0.1), sealed to the caller's key-agreement key, whose cleartext is an `ExternalCredentialPayload` for `scope` or a `PresignedRequestSet` for `presign`. Bounded at 256 KiB rather than the shared 64 KiB because a batch of 128 presigned requests does not fit 64 KiB.";
1418
+ };
1419
+ readonly expiresAt: {
1420
+ readonly type: "string";
1421
+ readonly format: "date-time";
1422
+ readonly description: "The provider's expiry for the credential, in the clear; for `presign`, the earliest expiry in the batch.";
1423
+ };
1424
+ readonly scope: {
1425
+ readonly $ref: "#/$defs/CredentialScope";
1426
+ readonly description: "The scope actually granted, which equals the requested one.";
1427
+ };
1428
+ readonly presign: {
1429
+ readonly $ref: "#/$defs/PresignBatch";
1430
+ readonly description: "The batch actually presigned, which equals the requested one.";
1431
+ };
1432
+ readonly ext: {
1433
+ readonly $ref: "#/$defs/Ext";
1434
+ };
1435
+ };
1436
+ };
1437
+ readonly Ext: {
1438
+ readonly title: "Ext";
1439
+ 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.";
1440
+ readonly type: "object";
1441
+ readonly minProperties: 1;
1442
+ readonly additionalProperties: true;
1443
+ readonly propertyNames: {
1444
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
1445
+ };
1446
+ };
1447
+ readonly CredentialScope: {
1448
+ readonly title: "CredentialScope";
1449
+ readonly type: "object";
1450
+ readonly additionalProperties: false;
1451
+ readonly description: "What one issuance may do. For storage models, `prefix` and `actions` (both required, a rule this schema leaves to the custodian because other models use neither); for `s3-static-presign`, also `objectKey`, since a presigned URL is one operation on one object; for `oauth2-private-key-jwt`, `scopes`.";
1452
+ readonly properties: {
1453
+ readonly prefix: {
1454
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1455
+ };
1456
+ readonly actions: {
1457
+ readonly type: "array";
1458
+ readonly minItems: 1;
1459
+ readonly maxItems: 3;
1460
+ readonly uniqueItems: true;
1461
+ readonly items: {
1462
+ readonly $ref: "#/$defs/ProviderObjectAction";
1463
+ };
1464
+ };
1465
+ readonly objectKey: {
1466
+ readonly type: "string";
1467
+ readonly minLength: 1;
1468
+ readonly maxLength: 1024;
1469
+ readonly pattern: "^[A-Za-z0-9._-]+$";
1470
+ readonly description: "`s3-static-presign` only: the object's name within `prefix`. The presigned URL names `prefix` + `objectKey` and nothing else, and `actions` must hold exactly one action.";
1471
+ };
1472
+ readonly scopes: {
1473
+ readonly type: "array";
1474
+ readonly maxItems: 64;
1475
+ readonly uniqueItems: true;
1476
+ readonly items: {
1477
+ readonly type: "string";
1478
+ readonly maxLength: 256;
1479
+ readonly pattern: "^[!#-\\[\\]-~]+$";
1480
+ };
1481
+ readonly description: "`oauth2-private-key-jwt` only: the OAuth scopes requested.";
1482
+ };
1483
+ };
1484
+ };
1485
+ readonly ProviderObjectAction: {
1486
+ readonly title: "ProviderObjectAction";
1487
+ readonly type: "string";
1488
+ readonly enum: readonly ["put", "get", "delete"];
1489
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
1490
+ };
1491
+ readonly ProviderObjectPrefix: {
1492
+ readonly title: "ProviderObjectPrefix";
1493
+ readonly type: "string";
1494
+ readonly minLength: 2;
1495
+ readonly maxLength: 512;
1496
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
1497
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
1498
+ };
1499
+ readonly AccountId: {
1500
+ readonly title: "AccountId";
1501
+ readonly type: "string";
1502
+ readonly minLength: 1;
1503
+ readonly maxLength: 64;
1504
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
1505
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
1506
+ };
1507
+ readonly AccountContextId: {
1508
+ readonly title: "AccountContextId";
1509
+ readonly type: "string";
1510
+ readonly minLength: 1;
1511
+ readonly maxLength: 256;
1512
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
1513
+ };
1514
+ };
1515
+ };
1516
+ };
1517
+ //# sourceMappingURL=payload.d.ts.map