@openvtc/trust-tasks 0.20.6 → 0.20.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.
- package/CHANGELOG.md +51 -0
- package/dist/_shared/components.d.ts +55 -6
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/git-ns/_shared/0.1/git-ns.d.ts +1 -1
- package/dist/git-ns/_shared/0.1/git-ns.d.ts.map +1 -1
- package/dist/git-ns/_shared/0.2/git-ns.d.ts +1 -1
- package/dist/git-ns/_shared/0.2/git-ns.d.ts.map +1 -1
- package/dist/git-ns/_shared/0.3/git-ns.d.ts +16 -0
- package/dist/git-ns/_shared/0.3/git-ns.d.ts.map +1 -0
- package/dist/git-ns/_shared/0.3/git-ns.js +6 -0
- package/dist/git-ns/_shared/0.3/git-ns.js.map +1 -0
- package/dist/git-ns/bridge/job/0.1/payload.d.ts +1 -1
- package/dist/git-ns/bridge/job/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/bridge/job/0.2/payload.d.ts +1 -1
- package/dist/git-ns/bridge/job/0.2/payload.d.ts.map +1 -1
- package/dist/git-ns/bridge/job/0.3/payload.d.ts +1068 -0
- package/dist/git-ns/bridge/job/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/bridge/job/0.3/payload.js +573 -0
- package/dist/git-ns/bridge/job/0.3/payload.js.map +1 -0
- package/dist/git-ns/drift/resolve/0.1/payload.d.ts +1 -1
- package/dist/git-ns/drift/resolve/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/drift/resolve/0.2/payload.d.ts +1060 -0
- package/dist/git-ns/drift/resolve/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/drift/resolve/0.2/payload.js +630 -0
- package/dist/git-ns/drift/resolve/0.2/payload.js.map +1 -0
- package/dist/git-ns/namespace/reseat/0.1/payload.d.ts +1 -1
- package/dist/git-ns/namespace/reseat/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/namespace/reseat/0.2/payload.d.ts +515 -0
- package/dist/git-ns/namespace/reseat/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/namespace/reseat/0.2/payload.js +296 -0
- package/dist/git-ns/namespace/reseat/0.2/payload.js.map +1 -0
- package/dist/git-ns/repo/adopt/0.1/payload.d.ts +1 -1
- package/dist/git-ns/repo/adopt/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/repo/adopt/0.2/payload.d.ts +962 -0
- package/dist/git-ns/repo/adopt/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/repo/adopt/0.2/payload.js +583 -0
- package/dist/git-ns/repo/adopt/0.2/payload.js.map +1 -0
- package/dist/git-ns/repo/archive/0.1/payload.d.ts +1 -1
- package/dist/git-ns/repo/archive/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/repo/archive/0.2/payload.d.ts +959 -0
- package/dist/git-ns/repo/archive/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/repo/archive/0.2/payload.js +584 -0
- package/dist/git-ns/repo/archive/0.2/payload.js.map +1 -0
- package/dist/git-ns/repo/create/0.1/payload.d.ts +1 -1
- package/dist/git-ns/repo/create/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/repo/create/0.2/payload.d.ts +1074 -0
- package/dist/git-ns/repo/create/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/repo/create/0.2/payload.js +636 -0
- package/dist/git-ns/repo/create/0.2/payload.js.map +1 -0
- package/dist/git-ns/repo/transfer/0.1/payload.d.ts +1 -1
- package/dist/git-ns/repo/transfer/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/repo/transfer/0.2/payload.d.ts +947 -0
- package/dist/git-ns/repo/transfer/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/repo/transfer/0.2/payload.js +577 -0
- package/dist/git-ns/repo/transfer/0.2/payload.js.map +1 -0
- package/dist/git-ns/right/grant/0.1/payload.d.ts +1 -1
- package/dist/git-ns/right/grant/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/right/grant/0.2/payload.d.ts +506 -0
- package/dist/git-ns/right/grant/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/right/grant/0.2/payload.js +289 -0
- package/dist/git-ns/right/grant/0.2/payload.js.map +1 -0
- package/dist/git-ns/right/revoke/0.1/payload.d.ts +1 -1
- package/dist/git-ns/right/revoke/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/right/revoke/0.2/payload.d.ts +492 -0
- package/dist/git-ns/right/revoke/0.2/payload.d.ts.map +1 -0
- package/dist/git-ns/right/revoke/0.2/payload.js +284 -0
- package/dist/git-ns/right/revoke/0.2/payload.js.map +1 -0
- package/dist/git-ns/view/0.1/payload.d.ts +1 -1
- package/dist/git-ns/view/0.1/payload.d.ts.map +1 -1
- package/dist/git-ns/view/0.2/payload.d.ts +1 -1
- package/dist/git-ns/view/0.2/payload.d.ts.map +1 -1
- package/dist/git-ns/view/0.3/payload.d.ts +1524 -0
- package/dist/git-ns/view/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/view/0.3/payload.js +918 -0
- package/dist/git-ns/view/0.3/payload.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +55 -6
- package/src/git-ns/_shared/0.1/git-ns.ts +1 -1
- package/src/git-ns/_shared/0.2/git-ns.ts +1 -1
- package/src/git-ns/_shared/0.3/git-ns.ts +17 -0
- package/src/git-ns/bridge/job/0.1/payload.ts +1 -1
- package/src/git-ns/bridge/job/0.2/payload.ts +1 -1
- package/src/git-ns/bridge/job/0.3/payload.ts +691 -0
- package/src/git-ns/drift/resolve/0.1/payload.ts +1 -1
- package/src/git-ns/drift/resolve/0.2/payload.ts +699 -0
- package/src/git-ns/namespace/reseat/0.1/payload.ts +1 -1
- package/src/git-ns/namespace/reseat/0.2/payload.ts +342 -0
- package/src/git-ns/repo/adopt/0.1/payload.ts +1 -1
- package/src/git-ns/repo/adopt/0.2/payload.ts +628 -0
- package/src/git-ns/repo/archive/0.1/payload.ts +1 -1
- package/src/git-ns/repo/archive/0.2/payload.ts +626 -0
- package/src/git-ns/repo/create/0.1/payload.ts +1 -1
- package/src/git-ns/repo/create/0.2/payload.ts +689 -0
- package/src/git-ns/repo/transfer/0.1/payload.ts +1 -1
- package/src/git-ns/repo/transfer/0.2/payload.ts +619 -0
- package/src/git-ns/right/grant/0.1/payload.ts +1 -1
- package/src/git-ns/right/grant/0.2/payload.ts +340 -0
- package/src/git-ns/right/revoke/0.1/payload.ts +1 -1
- package/src/git-ns/right/revoke/0.2/payload.ts +331 -0
- package/src/git-ns/view/0.1/payload.ts +1 -1
- package/src/git-ns/view/0.2/payload.ts +1 -1
- package/src/git-ns/view/0.3/payload.ts +981 -0
- package/src/index.ts +11 -0
|
@@ -0,0 +1,691 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/git-ns/bridge/job/0.3/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Did_GitNsV0_3 as Did, Ext, ForgeAccount, ForgeHost, ForgeId, NamespaceId, RepoResource, RepoVisibility, Right, Segment } from "../../../../_shared/components.js";
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* One step of a forge adapter's plan. Forge-neutral names: `create`, `workflow`, `keyring`, `variables`, `requiredCheck`, `roles`, `archive`. An adapter MAY add its own (`mergeStyle`, `runner`), which a VTC displays but need not understand.
|
|
11
|
+
*/
|
|
12
|
+
export type StepName = string;
|
|
13
|
+
/**
|
|
14
|
+
* The VTC's identifier for a job, unique across the VTC's jobs.
|
|
15
|
+
*/
|
|
16
|
+
export type JobId = string;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The VTC asks its bridge to do one piece of forge work in a namespace. The job names what to do (`kind`) and carries the desired state, never forge credentials — the bridge holds those. Which optional members a job carries is fixed by its `kind` (see the specification's kind table); a bridge refuses a job that carries a member its kind does not use, or lacks one its kind requires.
|
|
20
|
+
*/
|
|
21
|
+
export interface GitNamespacesBridgeJobPayload {
|
|
22
|
+
/**
|
|
23
|
+
* The VTC's identifier for this job. The bridge reports on it with git-ns/bridge/result.
|
|
24
|
+
*/
|
|
25
|
+
jobId: string;
|
|
26
|
+
/**
|
|
27
|
+
* The namespace the job acts in. It also selects the bridge's forge credentials for it.
|
|
28
|
+
*/
|
|
29
|
+
namespace: NamespaceId;
|
|
30
|
+
/**
|
|
31
|
+
* What to do. `projectRoles` — converge forge roles to `desiredRoles`, and remove whatever role each of `removeAccounts` holds on `repo`. `createRepo` — create `repo`, run the bootstrap plan, and project `desiredRoles`. `bootstrap` — run the bootstrap plan, or the listed `steps` of it, on an existing `repo`. `archive` — archive `repo`. `inspect` — compare the forge with the projection for `repo`, or for the whole namespace. `beginBind` — start the proof that the binding admin controls `target`. `beginAccountLink` — start linking `subject`'s account on this namespace's forge.
|
|
32
|
+
*/
|
|
33
|
+
kind: "projectRoles" | "createRepo" | "bootstrap" | "archive" | "inspect" | "beginBind" | "beginAccountLink";
|
|
34
|
+
/**
|
|
35
|
+
* The repository. Required for `createRepo`, `bootstrap` and `archive`. For `projectRoles`, absent means the namespace-level roles (organisation owners), where only `git.ns.admin` is projected. For `inspect`, absent means a sweep of every repository in the namespace.
|
|
36
|
+
*/
|
|
37
|
+
repo?: RepoResource;
|
|
38
|
+
spec?: RepoSpec;
|
|
39
|
+
/**
|
|
40
|
+
* The complete set of people who should hold a forge role on the target. The bridge converges to exactly this set among the roles it manages: it adds or changes roles to match and removes managed roles not listed. `projectRoles` and `createRepo` only.
|
|
41
|
+
*/
|
|
42
|
+
desiredRoles?: DesiredRole[];
|
|
43
|
+
/**
|
|
44
|
+
* Accounts whose direct role on `repo` the bridge removes, whatever that role is — including a role the bridge does not manage and would otherwise only report as drift. Matched by `forge` and `id`; `login` is display only. No account listed here may also appear in `desiredRoles`. `projectRoles` with `repo` only.
|
|
45
|
+
*
|
|
46
|
+
* @minItems 1
|
|
47
|
+
*/
|
|
48
|
+
removeAccounts?: [ForgeAccount, ...ForgeAccount[]];
|
|
49
|
+
/**
|
|
50
|
+
* Run only these steps of the adapter's bootstrap plan, in the plan's order. Absent: the whole plan. `bootstrap` only.
|
|
51
|
+
*
|
|
52
|
+
* @minItems 1
|
|
53
|
+
*/
|
|
54
|
+
steps?: [StepName, ...StepName[]];
|
|
55
|
+
target?: BindTarget;
|
|
56
|
+
/**
|
|
57
|
+
* The member whose forge account is being linked. `beginAccountLink` only.
|
|
58
|
+
*/
|
|
59
|
+
subject?: Did;
|
|
60
|
+
ext?: Ext;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* How to create the repository. `createRepo` only.
|
|
64
|
+
*/
|
|
65
|
+
export interface RepoSpec {
|
|
66
|
+
visibility: RepoVisibility;
|
|
67
|
+
description?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface DesiredRole {
|
|
70
|
+
subject: Did;
|
|
71
|
+
/**
|
|
72
|
+
* The subject's linked account on this namespace's forge.
|
|
73
|
+
*/
|
|
74
|
+
account: ForgeAccount;
|
|
75
|
+
/**
|
|
76
|
+
* The subject's highest effective right on the target, which the forge adapter maps to one of its roles.
|
|
77
|
+
*/
|
|
78
|
+
right: Right;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* `beginBind` only.
|
|
82
|
+
*/
|
|
83
|
+
export interface BindTarget {
|
|
84
|
+
forge: ForgeHost;
|
|
85
|
+
owner: Segment;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether the bridge took the job.
|
|
89
|
+
*/
|
|
90
|
+
export interface GitNamespacesBridgeJobResponsePayload {
|
|
91
|
+
jobId: JobId;
|
|
92
|
+
/**
|
|
93
|
+
* `true` — the job is durably queued, or was already queued or running under this `jobId`; a git-ns/bridge/result follows. `false` — the bridge already finished this `jobId`; it does not run it again, and sends its git-ns/bridge/result again.
|
|
94
|
+
*/
|
|
95
|
+
accepted: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* For `beginBind` and `beginAccountLink` when `accepted` is `true`: where the VTC sends the person.
|
|
98
|
+
*/
|
|
99
|
+
next?: {
|
|
100
|
+
url: string;
|
|
101
|
+
/**
|
|
102
|
+
* The device-flow code, for a forge that uses one.
|
|
103
|
+
*/
|
|
104
|
+
userCode?: string;
|
|
105
|
+
expiresAt: string;
|
|
106
|
+
};
|
|
107
|
+
ext?: Ext;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
111
|
+
export type { Did, Ext, ForgeAccount, ForgeHost, ForgeId, NamespaceId, RepoResource, RepoVisibility, Right, Segment };
|
|
112
|
+
|
|
113
|
+
/** Trust Task type URI. */
|
|
114
|
+
export const TYPE_URI = "https://trusttasks.org/spec/git-ns/bridge/job/0.3" as const;
|
|
115
|
+
|
|
116
|
+
/** Stable alias for this specification's request payload shape. */
|
|
117
|
+
export type Payload = GitNamespacesBridgeJobPayload;
|
|
118
|
+
|
|
119
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
120
|
+
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/git-ns/bridge/job/0.3#response" as const;
|
|
121
|
+
|
|
122
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
123
|
+
export type Response = GitNamespacesBridgeJobResponsePayload;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* This specification's payload schema, as a value.
|
|
127
|
+
*
|
|
128
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
129
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
130
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
131
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
132
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
133
|
+
*/
|
|
134
|
+
export const PAYLOAD_SCHEMA = {
|
|
135
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
136
|
+
"$id": "https://trusttasks.org/spec/git-ns/bridge/job/0.3",
|
|
137
|
+
"title": "Git Namespaces — Bridge Job — payload",
|
|
138
|
+
"description": "The VTC asks its bridge to do one piece of forge work in a namespace. The job names what to do (`kind`) and carries the desired state, never forge credentials — the bridge holds those. Which optional members a job carries is fixed by its `kind` (see the specification's kind table); a bridge refuses a job that carries a member its kind does not use, or lacks one its kind requires.",
|
|
139
|
+
"type": "object",
|
|
140
|
+
"additionalProperties": false,
|
|
141
|
+
"required": [
|
|
142
|
+
"jobId",
|
|
143
|
+
"namespace",
|
|
144
|
+
"kind"
|
|
145
|
+
],
|
|
146
|
+
"properties": {
|
|
147
|
+
"jobId": {
|
|
148
|
+
"$ref": "#/$defs/JobId",
|
|
149
|
+
"description": "The VTC's identifier for this job. The bridge reports on it with git-ns/bridge/result."
|
|
150
|
+
},
|
|
151
|
+
"namespace": {
|
|
152
|
+
"$ref": "#/$defs/NamespaceId",
|
|
153
|
+
"description": "The namespace the job acts in. It also selects the bridge's forge credentials for it."
|
|
154
|
+
},
|
|
155
|
+
"kind": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"enum": [
|
|
158
|
+
"projectRoles",
|
|
159
|
+
"createRepo",
|
|
160
|
+
"bootstrap",
|
|
161
|
+
"archive",
|
|
162
|
+
"inspect",
|
|
163
|
+
"beginBind",
|
|
164
|
+
"beginAccountLink"
|
|
165
|
+
],
|
|
166
|
+
"description": "What to do. `projectRoles` — converge forge roles to `desiredRoles`, and remove whatever role each of `removeAccounts` holds on `repo`. `createRepo` — create `repo`, run the bootstrap plan, and project `desiredRoles`. `bootstrap` — run the bootstrap plan, or the listed `steps` of it, on an existing `repo`. `archive` — archive `repo`. `inspect` — compare the forge with the projection for `repo`, or for the whole namespace. `beginBind` — start the proof that the binding admin controls `target`. `beginAccountLink` — start linking `subject`'s account on this namespace's forge."
|
|
167
|
+
},
|
|
168
|
+
"repo": {
|
|
169
|
+
"$ref": "#/$defs/RepoResource",
|
|
170
|
+
"description": "The repository. Required for `createRepo`, `bootstrap` and `archive`. For `projectRoles`, absent means the namespace-level roles (organisation owners), where only `git.ns.admin` is projected. For `inspect`, absent means a sweep of every repository in the namespace."
|
|
171
|
+
},
|
|
172
|
+
"spec": {
|
|
173
|
+
"$ref": "#/$defs/RepoSpec",
|
|
174
|
+
"description": "How to create the repository. `createRepo` only."
|
|
175
|
+
},
|
|
176
|
+
"desiredRoles": {
|
|
177
|
+
"type": "array",
|
|
178
|
+
"uniqueItems": true,
|
|
179
|
+
"items": {
|
|
180
|
+
"$ref": "#/$defs/DesiredRole"
|
|
181
|
+
},
|
|
182
|
+
"description": "The complete set of people who should hold a forge role on the target. The bridge converges to exactly this set among the roles it manages: it adds or changes roles to match and removes managed roles not listed. `projectRoles` and `createRepo` only."
|
|
183
|
+
},
|
|
184
|
+
"removeAccounts": {
|
|
185
|
+
"type": "array",
|
|
186
|
+
"minItems": 1,
|
|
187
|
+
"uniqueItems": true,
|
|
188
|
+
"items": {
|
|
189
|
+
"$ref": "#/$defs/ForgeAccount"
|
|
190
|
+
},
|
|
191
|
+
"description": "Accounts whose direct role on `repo` the bridge removes, whatever that role is — including a role the bridge does not manage and would otherwise only report as drift. Matched by `forge` and `id`; `login` is display only. No account listed here may also appear in `desiredRoles`. `projectRoles` with `repo` only."
|
|
192
|
+
},
|
|
193
|
+
"steps": {
|
|
194
|
+
"type": "array",
|
|
195
|
+
"minItems": 1,
|
|
196
|
+
"uniqueItems": true,
|
|
197
|
+
"items": {
|
|
198
|
+
"$ref": "#/$defs/StepName"
|
|
199
|
+
},
|
|
200
|
+
"description": "Run only these steps of the adapter's bootstrap plan, in the plan's order. Absent: the whole plan. `bootstrap` only."
|
|
201
|
+
},
|
|
202
|
+
"target": {
|
|
203
|
+
"$ref": "#/$defs/BindTarget",
|
|
204
|
+
"description": "`beginBind` only."
|
|
205
|
+
},
|
|
206
|
+
"subject": {
|
|
207
|
+
"$ref": "#/$defs/Did",
|
|
208
|
+
"description": "The member whose forge account is being linked. `beginAccountLink` only."
|
|
209
|
+
},
|
|
210
|
+
"ext": {
|
|
211
|
+
"$ref": "#/$defs/Ext"
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"$defs": {
|
|
215
|
+
"JobId": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"minLength": 1,
|
|
218
|
+
"maxLength": 128,
|
|
219
|
+
"description": "The VTC's identifier for a job, unique across the VTC's jobs."
|
|
220
|
+
},
|
|
221
|
+
"StepName": {
|
|
222
|
+
"type": "string",
|
|
223
|
+
"minLength": 1,
|
|
224
|
+
"maxLength": 64,
|
|
225
|
+
"pattern": "^[a-z][A-Za-z0-9]*$",
|
|
226
|
+
"description": "One step of a forge adapter's plan. Forge-neutral names: `create`, `workflow`, `keyring`, `variables`, `requiredCheck`, `roles`, `archive`. An adapter MAY add its own (`mergeStyle`, `runner`), which a VTC displays but need not understand."
|
|
227
|
+
},
|
|
228
|
+
"DesiredRole": {
|
|
229
|
+
"type": "object",
|
|
230
|
+
"additionalProperties": false,
|
|
231
|
+
"required": [
|
|
232
|
+
"subject",
|
|
233
|
+
"account",
|
|
234
|
+
"right"
|
|
235
|
+
],
|
|
236
|
+
"properties": {
|
|
237
|
+
"subject": {
|
|
238
|
+
"$ref": "#/$defs/Did"
|
|
239
|
+
},
|
|
240
|
+
"account": {
|
|
241
|
+
"$ref": "#/$defs/ForgeAccount",
|
|
242
|
+
"description": "The subject's linked account on this namespace's forge."
|
|
243
|
+
},
|
|
244
|
+
"right": {
|
|
245
|
+
"$ref": "#/$defs/Right",
|
|
246
|
+
"description": "The subject's highest effective right on the target, which the forge adapter maps to one of its roles."
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"RepoSpec": {
|
|
251
|
+
"type": "object",
|
|
252
|
+
"additionalProperties": false,
|
|
253
|
+
"required": [
|
|
254
|
+
"visibility"
|
|
255
|
+
],
|
|
256
|
+
"properties": {
|
|
257
|
+
"visibility": {
|
|
258
|
+
"$ref": "#/$defs/RepoVisibility"
|
|
259
|
+
},
|
|
260
|
+
"description": {
|
|
261
|
+
"type": "string",
|
|
262
|
+
"maxLength": 350
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"BindTarget": {
|
|
267
|
+
"title": "BindTarget",
|
|
268
|
+
"description": "The forge owner whose control the binding admin is to prove.",
|
|
269
|
+
"type": "object",
|
|
270
|
+
"additionalProperties": false,
|
|
271
|
+
"required": [
|
|
272
|
+
"forge",
|
|
273
|
+
"owner"
|
|
274
|
+
],
|
|
275
|
+
"properties": {
|
|
276
|
+
"forge": {
|
|
277
|
+
"$ref": "#/$defs/ForgeHost"
|
|
278
|
+
},
|
|
279
|
+
"owner": {
|
|
280
|
+
"$ref": "#/$defs/Segment"
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
"Response": {
|
|
285
|
+
"$anchor": "response",
|
|
286
|
+
"title": "Git Namespaces — Bridge Job — response payload",
|
|
287
|
+
"description": "Whether the bridge took the job.",
|
|
288
|
+
"type": "object",
|
|
289
|
+
"additionalProperties": false,
|
|
290
|
+
"required": [
|
|
291
|
+
"jobId",
|
|
292
|
+
"accepted"
|
|
293
|
+
],
|
|
294
|
+
"properties": {
|
|
295
|
+
"jobId": {
|
|
296
|
+
"$ref": "#/$defs/JobId"
|
|
297
|
+
},
|
|
298
|
+
"accepted": {
|
|
299
|
+
"type": "boolean",
|
|
300
|
+
"description": "`true` — the job is durably queued, or was already queued or running under this `jobId`; a git-ns/bridge/result follows. `false` — the bridge already finished this `jobId`; it does not run it again, and sends its git-ns/bridge/result again."
|
|
301
|
+
},
|
|
302
|
+
"next": {
|
|
303
|
+
"type": "object",
|
|
304
|
+
"additionalProperties": false,
|
|
305
|
+
"required": [
|
|
306
|
+
"url",
|
|
307
|
+
"expiresAt"
|
|
308
|
+
],
|
|
309
|
+
"description": "For `beginBind` and `beginAccountLink` when `accepted` is `true`: where the VTC sends the person.",
|
|
310
|
+
"properties": {
|
|
311
|
+
"url": {
|
|
312
|
+
"type": "string",
|
|
313
|
+
"format": "uri",
|
|
314
|
+
"maxLength": 2048,
|
|
315
|
+
"pattern": "^https://"
|
|
316
|
+
},
|
|
317
|
+
"userCode": {
|
|
318
|
+
"type": "string",
|
|
319
|
+
"minLength": 1,
|
|
320
|
+
"maxLength": 64,
|
|
321
|
+
"description": "The device-flow code, for a forge that uses one."
|
|
322
|
+
},
|
|
323
|
+
"expiresAt": {
|
|
324
|
+
"type": "string",
|
|
325
|
+
"format": "date-time"
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
"ext": {
|
|
330
|
+
"$ref": "#/$defs/Ext"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"Ext": {
|
|
335
|
+
"title": "Ext",
|
|
336
|
+
"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.",
|
|
337
|
+
"type": "object",
|
|
338
|
+
"minProperties": 1,
|
|
339
|
+
"additionalProperties": true,
|
|
340
|
+
"propertyNames": {
|
|
341
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
"Segment": {
|
|
345
|
+
"title": "Segment",
|
|
346
|
+
"description": "One lowercased owner or repository name. Forges compare these case-insensitively, so the wire form is always lowercase and a producer lowercases before sending. A leading `.` is refused, which rules out `.` and `..`.",
|
|
347
|
+
"type": "string",
|
|
348
|
+
"minLength": 1,
|
|
349
|
+
"maxLength": 100,
|
|
350
|
+
"pattern": "^[a-z0-9_-][a-z0-9._-]*$"
|
|
351
|
+
},
|
|
352
|
+
"ForgeHost": {
|
|
353
|
+
"title": "ForgeHost",
|
|
354
|
+
"description": "The lowercased DNS host of a forge: `github.com`, a GitHub Enterprise Server host, `codeberg.org`, or a self-hosted Forgejo instance such as `git.example.org`. No scheme, no port, no path. The host is a segment of every resource, so a right never crosses forges.",
|
|
355
|
+
"type": "string",
|
|
356
|
+
"minLength": 3,
|
|
357
|
+
"maxLength": 253,
|
|
358
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$"
|
|
359
|
+
},
|
|
360
|
+
"RepoVisibility": {
|
|
361
|
+
"title": "RepoVisibility",
|
|
362
|
+
"type": "string",
|
|
363
|
+
"enum": [
|
|
364
|
+
"public",
|
|
365
|
+
"private"
|
|
366
|
+
],
|
|
367
|
+
"description": "Repository visibility on the forge."
|
|
368
|
+
},
|
|
369
|
+
"Right": {
|
|
370
|
+
"title": "Right",
|
|
371
|
+
"description": "One of the five git rights. Each string is also the TRQP `action` the VTC publishes the right under in its Trust Registry, so it is carried verbatim. `git.ns.admin` and `git.repo.create` apply to a namespace resource; `git.repo.own` and `git.repo.maintain` to a repository resource; `git.commit.sign` to either.",
|
|
372
|
+
"type": "string",
|
|
373
|
+
"enum": [
|
|
374
|
+
"git.ns.admin",
|
|
375
|
+
"git.repo.create",
|
|
376
|
+
"git.repo.own",
|
|
377
|
+
"git.repo.maintain",
|
|
378
|
+
"git.commit.sign"
|
|
379
|
+
]
|
|
380
|
+
},
|
|
381
|
+
"ForgeAccount": {
|
|
382
|
+
"title": "ForgeAccount",
|
|
383
|
+
"description": "A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.",
|
|
384
|
+
"type": "object",
|
|
385
|
+
"additionalProperties": false,
|
|
386
|
+
"required": [
|
|
387
|
+
"forge",
|
|
388
|
+
"id",
|
|
389
|
+
"login"
|
|
390
|
+
],
|
|
391
|
+
"properties": {
|
|
392
|
+
"forge": {
|
|
393
|
+
"$ref": "#/$defs/ForgeHost"
|
|
394
|
+
},
|
|
395
|
+
"id": {
|
|
396
|
+
"$ref": "#/$defs/ForgeId"
|
|
397
|
+
},
|
|
398
|
+
"login": {
|
|
399
|
+
"type": "string",
|
|
400
|
+
"minLength": 1,
|
|
401
|
+
"maxLength": 100,
|
|
402
|
+
"description": "The account's current login, as the forge reported it when last seen. Display only."
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
"ForgeId": {
|
|
407
|
+
"title": "ForgeId",
|
|
408
|
+
"description": "An identifier the forge itself assigns — a repository id, a user or organisation id — carried as a string so a forge whose ids are not numbers needs no new version. GitHub and Forgejo ids are decimal integers written as strings (`\"812736451\"`). Unlike a name, it survives renames and transfers, which is why rights and bindings are keyed by it.",
|
|
409
|
+
"type": "string",
|
|
410
|
+
"minLength": 1,
|
|
411
|
+
"maxLength": 64
|
|
412
|
+
},
|
|
413
|
+
"Did": {
|
|
414
|
+
"title": "Did",
|
|
415
|
+
"description": "A bare DID in the W3C DID Core syntax (§3.1): `did:`, a method name of lowercase letters and digits, `:`, and a method-specific id of colon-separated segments drawn from `A-Z a-z 0-9 . - _` and percent-encoded octets, the last segment non-empty. A DID URL is not a DID: no path, query or fragment (`/`, `?`, `#`), so a verification-method id such as `did:key:z6Mk…#z6Mk…` is refused. Compared by exact string equality — no case folding or percent-decoding. A consumer MUST still treat the value as data: the pattern keeps shell metacharacters, whitespace and quotes out of the wire form, but it does not make a DID safe to splice into a command or markup.",
|
|
416
|
+
"type": "string",
|
|
417
|
+
"maxLength": 2048,
|
|
418
|
+
"pattern": "^did:[a-z0-9]+:(?:(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})*:)*(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})+$"
|
|
419
|
+
},
|
|
420
|
+
"RepoResource": {
|
|
421
|
+
"title": "RepoResource",
|
|
422
|
+
"description": "A forge-qualified resource naming exactly one repository: `<forge-host>/<owner>/<repo>`, lowercase.",
|
|
423
|
+
"type": "string",
|
|
424
|
+
"maxLength": 455,
|
|
425
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+/[a-z0-9_-][a-z0-9._-]{0,99}/[a-z0-9_-][a-z0-9._-]{0,99}$"
|
|
426
|
+
},
|
|
427
|
+
"NamespaceId": {
|
|
428
|
+
"title": "NamespaceId",
|
|
429
|
+
"description": "The VTC's opaque identifier for a namespace, assigned when it is bound. Stable for the life of the binding; never reused for another binding.",
|
|
430
|
+
"type": "string",
|
|
431
|
+
"minLength": 1,
|
|
432
|
+
"maxLength": 128
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
} as const;
|
|
436
|
+
|
|
437
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
438
|
+
export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
439
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
440
|
+
"$ref": "#/$defs/Response",
|
|
441
|
+
"$defs": {
|
|
442
|
+
"JobId": {
|
|
443
|
+
"type": "string",
|
|
444
|
+
"minLength": 1,
|
|
445
|
+
"maxLength": 128,
|
|
446
|
+
"description": "The VTC's identifier for a job, unique across the VTC's jobs."
|
|
447
|
+
},
|
|
448
|
+
"StepName": {
|
|
449
|
+
"type": "string",
|
|
450
|
+
"minLength": 1,
|
|
451
|
+
"maxLength": 64,
|
|
452
|
+
"pattern": "^[a-z][A-Za-z0-9]*$",
|
|
453
|
+
"description": "One step of a forge adapter's plan. Forge-neutral names: `create`, `workflow`, `keyring`, `variables`, `requiredCheck`, `roles`, `archive`. An adapter MAY add its own (`mergeStyle`, `runner`), which a VTC displays but need not understand."
|
|
454
|
+
},
|
|
455
|
+
"DesiredRole": {
|
|
456
|
+
"type": "object",
|
|
457
|
+
"additionalProperties": false,
|
|
458
|
+
"required": [
|
|
459
|
+
"subject",
|
|
460
|
+
"account",
|
|
461
|
+
"right"
|
|
462
|
+
],
|
|
463
|
+
"properties": {
|
|
464
|
+
"subject": {
|
|
465
|
+
"$ref": "#/$defs/Did"
|
|
466
|
+
},
|
|
467
|
+
"account": {
|
|
468
|
+
"$ref": "#/$defs/ForgeAccount",
|
|
469
|
+
"description": "The subject's linked account on this namespace's forge."
|
|
470
|
+
},
|
|
471
|
+
"right": {
|
|
472
|
+
"$ref": "#/$defs/Right",
|
|
473
|
+
"description": "The subject's highest effective right on the target, which the forge adapter maps to one of its roles."
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
"RepoSpec": {
|
|
478
|
+
"type": "object",
|
|
479
|
+
"additionalProperties": false,
|
|
480
|
+
"required": [
|
|
481
|
+
"visibility"
|
|
482
|
+
],
|
|
483
|
+
"properties": {
|
|
484
|
+
"visibility": {
|
|
485
|
+
"$ref": "#/$defs/RepoVisibility"
|
|
486
|
+
},
|
|
487
|
+
"description": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"maxLength": 350
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
"BindTarget": {
|
|
494
|
+
"title": "BindTarget",
|
|
495
|
+
"description": "The forge owner whose control the binding admin is to prove.",
|
|
496
|
+
"type": "object",
|
|
497
|
+
"additionalProperties": false,
|
|
498
|
+
"required": [
|
|
499
|
+
"forge",
|
|
500
|
+
"owner"
|
|
501
|
+
],
|
|
502
|
+
"properties": {
|
|
503
|
+
"forge": {
|
|
504
|
+
"$ref": "#/$defs/ForgeHost"
|
|
505
|
+
},
|
|
506
|
+
"owner": {
|
|
507
|
+
"$ref": "#/$defs/Segment"
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
},
|
|
511
|
+
"Response": {
|
|
512
|
+
"$anchor": "response",
|
|
513
|
+
"title": "Git Namespaces — Bridge Job — response payload",
|
|
514
|
+
"description": "Whether the bridge took the job.",
|
|
515
|
+
"type": "object",
|
|
516
|
+
"additionalProperties": false,
|
|
517
|
+
"required": [
|
|
518
|
+
"jobId",
|
|
519
|
+
"accepted"
|
|
520
|
+
],
|
|
521
|
+
"properties": {
|
|
522
|
+
"jobId": {
|
|
523
|
+
"$ref": "#/$defs/JobId"
|
|
524
|
+
},
|
|
525
|
+
"accepted": {
|
|
526
|
+
"type": "boolean",
|
|
527
|
+
"description": "`true` — the job is durably queued, or was already queued or running under this `jobId`; a git-ns/bridge/result follows. `false` — the bridge already finished this `jobId`; it does not run it again, and sends its git-ns/bridge/result again."
|
|
528
|
+
},
|
|
529
|
+
"next": {
|
|
530
|
+
"type": "object",
|
|
531
|
+
"additionalProperties": false,
|
|
532
|
+
"required": [
|
|
533
|
+
"url",
|
|
534
|
+
"expiresAt"
|
|
535
|
+
],
|
|
536
|
+
"description": "For `beginBind` and `beginAccountLink` when `accepted` is `true`: where the VTC sends the person.",
|
|
537
|
+
"properties": {
|
|
538
|
+
"url": {
|
|
539
|
+
"type": "string",
|
|
540
|
+
"format": "uri",
|
|
541
|
+
"maxLength": 2048,
|
|
542
|
+
"pattern": "^https://"
|
|
543
|
+
},
|
|
544
|
+
"userCode": {
|
|
545
|
+
"type": "string",
|
|
546
|
+
"minLength": 1,
|
|
547
|
+
"maxLength": 64,
|
|
548
|
+
"description": "The device-flow code, for a forge that uses one."
|
|
549
|
+
},
|
|
550
|
+
"expiresAt": {
|
|
551
|
+
"type": "string",
|
|
552
|
+
"format": "date-time"
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
"ext": {
|
|
557
|
+
"$ref": "#/$defs/Ext"
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
"Ext": {
|
|
562
|
+
"title": "Ext",
|
|
563
|
+
"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.",
|
|
564
|
+
"type": "object",
|
|
565
|
+
"minProperties": 1,
|
|
566
|
+
"additionalProperties": true,
|
|
567
|
+
"propertyNames": {
|
|
568
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
"Segment": {
|
|
572
|
+
"title": "Segment",
|
|
573
|
+
"description": "One lowercased owner or repository name. Forges compare these case-insensitively, so the wire form is always lowercase and a producer lowercases before sending. A leading `.` is refused, which rules out `.` and `..`.",
|
|
574
|
+
"type": "string",
|
|
575
|
+
"minLength": 1,
|
|
576
|
+
"maxLength": 100,
|
|
577
|
+
"pattern": "^[a-z0-9_-][a-z0-9._-]*$"
|
|
578
|
+
},
|
|
579
|
+
"ForgeHost": {
|
|
580
|
+
"title": "ForgeHost",
|
|
581
|
+
"description": "The lowercased DNS host of a forge: `github.com`, a GitHub Enterprise Server host, `codeberg.org`, or a self-hosted Forgejo instance such as `git.example.org`. No scheme, no port, no path. The host is a segment of every resource, so a right never crosses forges.",
|
|
582
|
+
"type": "string",
|
|
583
|
+
"minLength": 3,
|
|
584
|
+
"maxLength": 253,
|
|
585
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$"
|
|
586
|
+
},
|
|
587
|
+
"RepoVisibility": {
|
|
588
|
+
"title": "RepoVisibility",
|
|
589
|
+
"type": "string",
|
|
590
|
+
"enum": [
|
|
591
|
+
"public",
|
|
592
|
+
"private"
|
|
593
|
+
],
|
|
594
|
+
"description": "Repository visibility on the forge."
|
|
595
|
+
},
|
|
596
|
+
"Right": {
|
|
597
|
+
"title": "Right",
|
|
598
|
+
"description": "One of the five git rights. Each string is also the TRQP `action` the VTC publishes the right under in its Trust Registry, so it is carried verbatim. `git.ns.admin` and `git.repo.create` apply to a namespace resource; `git.repo.own` and `git.repo.maintain` to a repository resource; `git.commit.sign` to either.",
|
|
599
|
+
"type": "string",
|
|
600
|
+
"enum": [
|
|
601
|
+
"git.ns.admin",
|
|
602
|
+
"git.repo.create",
|
|
603
|
+
"git.repo.own",
|
|
604
|
+
"git.repo.maintain",
|
|
605
|
+
"git.commit.sign"
|
|
606
|
+
]
|
|
607
|
+
},
|
|
608
|
+
"ForgeAccount": {
|
|
609
|
+
"title": "ForgeAccount",
|
|
610
|
+
"description": "A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.",
|
|
611
|
+
"type": "object",
|
|
612
|
+
"additionalProperties": false,
|
|
613
|
+
"required": [
|
|
614
|
+
"forge",
|
|
615
|
+
"id",
|
|
616
|
+
"login"
|
|
617
|
+
],
|
|
618
|
+
"properties": {
|
|
619
|
+
"forge": {
|
|
620
|
+
"$ref": "#/$defs/ForgeHost"
|
|
621
|
+
},
|
|
622
|
+
"id": {
|
|
623
|
+
"$ref": "#/$defs/ForgeId"
|
|
624
|
+
},
|
|
625
|
+
"login": {
|
|
626
|
+
"type": "string",
|
|
627
|
+
"minLength": 1,
|
|
628
|
+
"maxLength": 100,
|
|
629
|
+
"description": "The account's current login, as the forge reported it when last seen. Display only."
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
},
|
|
633
|
+
"ForgeId": {
|
|
634
|
+
"title": "ForgeId",
|
|
635
|
+
"description": "An identifier the forge itself assigns — a repository id, a user or organisation id — carried as a string so a forge whose ids are not numbers needs no new version. GitHub and Forgejo ids are decimal integers written as strings (`\"812736451\"`). Unlike a name, it survives renames and transfers, which is why rights and bindings are keyed by it.",
|
|
636
|
+
"type": "string",
|
|
637
|
+
"minLength": 1,
|
|
638
|
+
"maxLength": 64
|
|
639
|
+
},
|
|
640
|
+
"Did": {
|
|
641
|
+
"title": "Did",
|
|
642
|
+
"description": "A bare DID in the W3C DID Core syntax (§3.1): `did:`, a method name of lowercase letters and digits, `:`, and a method-specific id of colon-separated segments drawn from `A-Z a-z 0-9 . - _` and percent-encoded octets, the last segment non-empty. A DID URL is not a DID: no path, query or fragment (`/`, `?`, `#`), so a verification-method id such as `did:key:z6Mk…#z6Mk…` is refused. Compared by exact string equality — no case folding or percent-decoding. A consumer MUST still treat the value as data: the pattern keeps shell metacharacters, whitespace and quotes out of the wire form, but it does not make a DID safe to splice into a command or markup.",
|
|
643
|
+
"type": "string",
|
|
644
|
+
"maxLength": 2048,
|
|
645
|
+
"pattern": "^did:[a-z0-9]+:(?:(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})*:)*(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})+$"
|
|
646
|
+
},
|
|
647
|
+
"RepoResource": {
|
|
648
|
+
"title": "RepoResource",
|
|
649
|
+
"description": "A forge-qualified resource naming exactly one repository: `<forge-host>/<owner>/<repo>`, lowercase.",
|
|
650
|
+
"type": "string",
|
|
651
|
+
"maxLength": 455,
|
|
652
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+/[a-z0-9_-][a-z0-9._-]{0,99}/[a-z0-9_-][a-z0-9._-]{0,99}$"
|
|
653
|
+
},
|
|
654
|
+
"NamespaceId": {
|
|
655
|
+
"title": "NamespaceId",
|
|
656
|
+
"description": "The VTC's opaque identifier for a namespace, assigned when it is bound. Stable for the life of the binding; never reused for another binding.",
|
|
657
|
+
"type": "string",
|
|
658
|
+
"minLength": 1,
|
|
659
|
+
"maxLength": 128
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
} as const;
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
666
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
667
|
+
* per-specification and cannot be derived from the document alone, and
|
|
668
|
+
* item 2 needs the schema this carries.
|
|
669
|
+
*/
|
|
670
|
+
export const SPEC = {
|
|
671
|
+
typeUri: TYPE_URI,
|
|
672
|
+
isBearer: false,
|
|
673
|
+
isProofRequired: true,
|
|
674
|
+
isRecipientRequired: true,
|
|
675
|
+
isIssuedAtRequired: true,
|
|
676
|
+
payloadSchema: PAYLOAD_SCHEMA,
|
|
677
|
+
} as const;
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
681
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
682
|
+
* parties (§7.3 item 5).
|
|
683
|
+
*/
|
|
684
|
+
export const RESPONSE_SPEC = {
|
|
685
|
+
typeUri: RESPONSE_TYPE_URI,
|
|
686
|
+
isBearer: false,
|
|
687
|
+
isProofRequired: true,
|
|
688
|
+
isRecipientRequired: true,
|
|
689
|
+
isIssuedAtRequired: true,
|
|
690
|
+
payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
|
|
691
|
+
} as const;
|