@bcts/frost-hubert 1.0.0-alpha.21 → 1.0.0-alpha.23
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/dist/bin/frost.cjs +3 -5
- package/dist/bin/frost.cjs.map +1 -1
- package/dist/bin/frost.mjs +3 -5
- package/dist/bin/frost.mjs.map +1 -1
- package/dist/{chunk-uaV2rQ02.cjs → chunk-CZWwpsFl.cjs} +22 -32
- package/dist/{chunk-ClPoSABd.mjs → chunk-CjcI7cDX.mjs} +6 -12
- package/dist/cmd/index.cjs +40 -43
- package/dist/cmd/index.d.cts +1 -3
- package/dist/cmd/index.d.mts +1 -3
- package/dist/cmd/index.mjs +3 -6
- package/dist/{sign-D8C3HJ4B.mjs → cmd-5yLeC_QL.mjs} +16 -44
- package/dist/cmd-5yLeC_QL.mjs.map +1 -0
- package/dist/{sign-2bOp18Fs.cjs → cmd-BfZjC3Uh.cjs} +182 -210
- package/dist/cmd-BfZjC3Uh.cjs.map +1 -0
- package/dist/dkg/index.cjs +341 -7
- package/dist/dkg/index.cjs.map +1 -0
- package/dist/dkg/index.d.cts +1 -1
- package/dist/dkg/index.d.mts +1 -1
- package/dist/dkg/index.mjs +335 -2
- package/dist/dkg/index.mjs.map +1 -0
- package/dist/frost/index.cjs +8 -9
- package/dist/frost/index.cjs.map +1 -1
- package/dist/frost/index.mjs +2 -3
- package/dist/frost/index.mjs.map +1 -1
- package/dist/{index-CcvTi5EA.d.cts → index-BJlwbPYu.d.cts} +3 -3
- package/dist/{index-CcvTi5EA.d.cts.map → index-BJlwbPYu.d.cts.map} +1 -1
- package/dist/{registry-impl-CE76sTXQ.d.cts → index-BMbPgH0W.d.cts} +1 -1
- package/dist/index-BMbPgH0W.d.cts.map +1 -0
- package/dist/{group-invite-Dz1Jmiky.d.cts → index-BkqLimZT.d.mts} +2 -2
- package/dist/index-BkqLimZT.d.mts.map +1 -0
- package/dist/{group-invite-Wk9CIbHL.d.mts → index-DmxfT59Y.d.cts} +2 -2
- package/dist/index-DmxfT59Y.d.cts.map +1 -0
- package/dist/{registry-impl-BETn_lEO.d.mts → index-DoV5HFvV.d.mts} +1 -1
- package/dist/index-DoV5HFvV.d.mts.map +1 -0
- package/dist/{index-DNCPeLNM.d.mts → index-Dzm1v4_4.d.mts} +3 -3
- package/dist/{index-DNCPeLNM.d.mts.map → index-Dzm1v4_4.d.mts.map} +1 -1
- package/dist/index.cjs +64 -68
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -6
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -6
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +5 -9
- package/dist/index.mjs.map +1 -1
- package/dist/registry/index.cjs +806 -13
- package/dist/registry/index.cjs.map +1 -0
- package/dist/registry/index.d.cts +1 -1
- package/dist/registry/index.d.mts +1 -1
- package/dist/registry/index.mjs +792 -2
- package/dist/registry/index.mjs.map +1 -0
- package/dist/{registry-BDnNV1Rk.mjs → registry-CgrCZ4En.mjs} +7 -10
- package/dist/{registry-BDnNV1Rk.mjs.map → registry-CgrCZ4En.mjs.map} +1 -1
- package/dist/{registry-FMU-ec5K.cjs → registry-loI1_Mh1.cjs} +28 -31
- package/dist/registry-loI1_Mh1.cjs.map +1 -0
- package/package.json +17 -17
- package/src/cmd/dkg/participant/finalize.ts +1 -1
- package/src/dkg/proposed-participant.ts +1 -2
- package/src/frost/index.ts +1 -1
- package/src/registry/owner-record.ts +1 -2
- package/src/registry/participant-record.ts +1 -2
- package/dist/group-invite-CrbOabFL.cjs +0 -368
- package/dist/group-invite-CrbOabFL.cjs.map +0 -1
- package/dist/group-invite-Dz1Jmiky.d.cts.map +0 -1
- package/dist/group-invite-RPElq-fm.mjs +0 -338
- package/dist/group-invite-RPElq-fm.mjs.map +0 -1
- package/dist/group-invite-Wk9CIbHL.d.mts.map +0 -1
- package/dist/registry-FMU-ec5K.cjs.map +0 -1
- package/dist/registry-impl-BETn_lEO.d.mts.map +0 -1
- package/dist/registry-impl-C7w4awTv.cjs +0 -865
- package/dist/registry-impl-C7w4awTv.cjs.map +0 -1
- package/dist/registry-impl-CE76sTXQ.d.cts.map +0 -1
- package/dist/registry-impl-eYXVSPwM.mjs +0 -797
- package/dist/registry-impl-eYXVSPwM.mjs.map +0 -1
- package/dist/sign-2bOp18Fs.cjs.map +0 -1
- package/dist/sign-D8C3HJ4B.mjs.map +0 -1
package/dist/registry/index.cjs
CHANGED
|
@@ -1,14 +1,807 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
2
|
-
const
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_chunk = require("../chunk-CZWwpsFl.cjs");
|
|
3
|
+
let _bcts_components = require("@bcts/components");
|
|
4
|
+
let _bcts_envelope = require("@bcts/envelope");
|
|
5
|
+
let _bcts_xid = require("@bcts/xid");
|
|
6
|
+
let _bcts_uniform_resources = require("@bcts/uniform-resources");
|
|
7
|
+
let node_fs = require("node:fs");
|
|
8
|
+
node_fs = require_chunk.__toESM(node_fs, 1);
|
|
9
|
+
let node_path = require("node:path");
|
|
10
|
+
node_path = require_chunk.__toESM(node_path, 1);
|
|
11
|
+
//#region src/registry/group-record.ts
|
|
12
|
+
/**
|
|
13
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
14
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
15
|
+
*
|
|
16
|
+
*
|
|
17
|
+
* Group record for the registry.
|
|
18
|
+
*
|
|
19
|
+
* Port of registry/group_record.rs from frost-hubert-rust.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* A participant in a group.
|
|
25
|
+
*
|
|
26
|
+
* Port of `struct GroupParticipant` from group_record.rs lines 9-13.
|
|
27
|
+
*/
|
|
28
|
+
var GroupParticipant = class GroupParticipant {
|
|
29
|
+
_xid;
|
|
30
|
+
constructor(xid) {
|
|
31
|
+
this._xid = xid;
|
|
32
|
+
}
|
|
33
|
+
xid() {
|
|
34
|
+
return this._xid;
|
|
35
|
+
}
|
|
36
|
+
toJSON() {
|
|
37
|
+
return this._xid.urString();
|
|
38
|
+
}
|
|
39
|
+
static fromJSON(value) {
|
|
40
|
+
return new GroupParticipant(_bcts_components.XID.fromURString(value));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Contribution paths for DKG state files.
|
|
45
|
+
*
|
|
46
|
+
* Port of `struct ContributionPaths` from group_record.rs lines 21-29.
|
|
47
|
+
*/
|
|
48
|
+
var ContributionPaths = class ContributionPaths {
|
|
49
|
+
round1Secret;
|
|
50
|
+
round1Package;
|
|
51
|
+
round2Secret;
|
|
52
|
+
keyPackage;
|
|
53
|
+
constructor(init) {
|
|
54
|
+
if (init !== void 0) {
|
|
55
|
+
this.round1Secret = init.round1Secret;
|
|
56
|
+
this.round1Package = init.round1Package;
|
|
57
|
+
this.round2Secret = init.round2Secret;
|
|
58
|
+
this.keyPackage = init.keyPackage;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Merge missing fields from another ContributionPaths.
|
|
63
|
+
*
|
|
64
|
+
* Port of `ContributionPaths::merge_missing()` from group_record.rs lines 32-45.
|
|
65
|
+
*/
|
|
66
|
+
mergeMissing(other) {
|
|
67
|
+
this.round1Secret ??= other.round1Secret;
|
|
68
|
+
this.round1Package ??= other.round1Package;
|
|
69
|
+
this.round2Secret ??= other.round2Secret;
|
|
70
|
+
this.keyPackage ??= other.keyPackage;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if all fields are empty.
|
|
74
|
+
*
|
|
75
|
+
* Port of `ContributionPaths::is_empty()` from group_record.rs lines 47-53.
|
|
76
|
+
*/
|
|
77
|
+
isEmpty() {
|
|
78
|
+
return this.round1Secret === void 0 && this.round1Package === void 0 && this.round2Secret === void 0 && this.keyPackage === void 0;
|
|
79
|
+
}
|
|
80
|
+
toJSON() {
|
|
81
|
+
const obj = {};
|
|
82
|
+
if (this.round1Secret !== void 0) obj["round1_secret"] = this.round1Secret;
|
|
83
|
+
if (this.round1Package !== void 0) obj["round1_package"] = this.round1Package;
|
|
84
|
+
if (this.round2Secret !== void 0) obj["round2_secret"] = this.round2Secret;
|
|
85
|
+
if (this.keyPackage !== void 0) obj["key_package"] = this.keyPackage;
|
|
86
|
+
return obj;
|
|
87
|
+
}
|
|
88
|
+
static fromJSON(json) {
|
|
89
|
+
return new ContributionPaths({
|
|
90
|
+
round1Secret: json["round1_secret"],
|
|
91
|
+
round1Package: json["round1_package"],
|
|
92
|
+
round2Secret: json["round2_secret"],
|
|
93
|
+
keyPackage: json["key_package"]
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Tracks pending communication with participants (coordinator-side).
|
|
99
|
+
*
|
|
100
|
+
* Port of `struct PendingRequests` from group_record.rs lines 71-75.
|
|
101
|
+
*/
|
|
102
|
+
var PendingRequests = class PendingRequests {
|
|
103
|
+
requests = [];
|
|
104
|
+
/**
|
|
105
|
+
* Add a pending request where we only know where to collect from.
|
|
106
|
+
*
|
|
107
|
+
* Port of `PendingRequests::add_collect_only()` from group_record.rs lines 90-99.
|
|
108
|
+
*/
|
|
109
|
+
addCollectOnly(participant, collectFromArid) {
|
|
110
|
+
this.requests.push({
|
|
111
|
+
participant,
|
|
112
|
+
sendToArid: void 0,
|
|
113
|
+
collectFromArid
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Add a pending request where we know where to send AND where to collect.
|
|
118
|
+
*
|
|
119
|
+
* Port of `PendingRequests::add_send_and_collect()` from group_record.rs lines 103-115.
|
|
120
|
+
*/
|
|
121
|
+
addSendAndCollect(participant, sendToArid, collectFromArid) {
|
|
122
|
+
this.requests.push({
|
|
123
|
+
participant,
|
|
124
|
+
sendToArid,
|
|
125
|
+
collectFromArid
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Add a pending request where we only know where to send.
|
|
130
|
+
*
|
|
131
|
+
* Port of `PendingRequests::add_send_only()` from group_record.rs lines 118-127.
|
|
132
|
+
*/
|
|
133
|
+
addSendOnly(participant, sendToArid) {
|
|
134
|
+
this.requests.push({
|
|
135
|
+
participant,
|
|
136
|
+
sendToArid,
|
|
137
|
+
collectFromArid: sendToArid
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if there are no pending requests.
|
|
142
|
+
*
|
|
143
|
+
* Port of `PendingRequests::is_empty()` from group_record.rs line 129.
|
|
144
|
+
*/
|
|
145
|
+
isEmpty() {
|
|
146
|
+
return this.requests.length === 0;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get the number of pending requests.
|
|
150
|
+
*
|
|
151
|
+
* Port of `PendingRequests::len()` from group_record.rs line 165.
|
|
152
|
+
*/
|
|
153
|
+
len() {
|
|
154
|
+
return this.requests.length;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Iterate over (participant, collectFromArid) pairs.
|
|
158
|
+
*
|
|
159
|
+
* Port of `PendingRequests::iter_collect()` from group_record.rs lines 132-138.
|
|
160
|
+
*/
|
|
161
|
+
*iterCollect() {
|
|
162
|
+
for (const r of this.requests) yield [r.participant, r.collectFromArid];
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Iterate over (participant, sendToArid) pairs.
|
|
166
|
+
*
|
|
167
|
+
* Port of `PendingRequests::iter_send()` from group_record.rs lines 141-150.
|
|
168
|
+
*/
|
|
169
|
+
*iterSend() {
|
|
170
|
+
for (const r of this.requests) {
|
|
171
|
+
if (r.sendToArid === void 0) throw new Error("send_to_arid not set for this request");
|
|
172
|
+
yield [r.participant, r.sendToArid];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Iterate over full (participant, sendToArid, collectFromArid) tuples.
|
|
177
|
+
*
|
|
178
|
+
* Port of `PendingRequests::iter_full()` from group_record.rs lines 153-163.
|
|
179
|
+
*/
|
|
180
|
+
*iterFull() {
|
|
181
|
+
for (const r of this.requests) yield [
|
|
182
|
+
r.participant,
|
|
183
|
+
r.sendToArid,
|
|
184
|
+
r.collectFromArid
|
|
185
|
+
];
|
|
186
|
+
}
|
|
187
|
+
toJSON() {
|
|
188
|
+
return this.requests.map((r) => ({
|
|
189
|
+
participant: r.participant.urString(),
|
|
190
|
+
send_to_arid: r.sendToArid?.urString(),
|
|
191
|
+
collect_from_arid: r.collectFromArid.urString()
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
static fromJSON(json) {
|
|
195
|
+
const pr = new PendingRequests();
|
|
196
|
+
for (const entry of json) {
|
|
197
|
+
const participant = _bcts_components.XID.fromURString(entry["participant"]);
|
|
198
|
+
const sendToArid = entry["send_to_arid"] !== void 0 && entry["send_to_arid"] !== "" ? _bcts_components.ARID.fromURString(entry["send_to_arid"]) : void 0;
|
|
199
|
+
const collectFromArid = _bcts_components.ARID.fromURString(entry["collect_from_arid"]);
|
|
200
|
+
pr.requests.push({
|
|
201
|
+
participant,
|
|
202
|
+
sendToArid,
|
|
203
|
+
collectFromArid
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return pr;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Record of a DKG group.
|
|
211
|
+
*
|
|
212
|
+
* Port of `struct GroupRecord` from group_record.rs lines 168-186.
|
|
213
|
+
*/
|
|
214
|
+
var GroupRecord = class GroupRecord {
|
|
215
|
+
_charter;
|
|
216
|
+
_minSigners;
|
|
217
|
+
_coordinator;
|
|
218
|
+
_participants;
|
|
219
|
+
_contributions;
|
|
220
|
+
_listeningAtArid;
|
|
221
|
+
_pendingRequests;
|
|
222
|
+
_verifyingKey;
|
|
223
|
+
constructor(charter, minSigners, coordinator, participants) {
|
|
224
|
+
this._charter = charter;
|
|
225
|
+
this._minSigners = minSigners;
|
|
226
|
+
this._coordinator = coordinator;
|
|
227
|
+
this._participants = participants;
|
|
228
|
+
this._contributions = new ContributionPaths();
|
|
229
|
+
this._listeningAtArid = void 0;
|
|
230
|
+
this._pendingRequests = new PendingRequests();
|
|
231
|
+
this._verifyingKey = void 0;
|
|
232
|
+
}
|
|
233
|
+
coordinator() {
|
|
234
|
+
return this._coordinator;
|
|
235
|
+
}
|
|
236
|
+
participants() {
|
|
237
|
+
return this._participants;
|
|
238
|
+
}
|
|
239
|
+
minSigners() {
|
|
240
|
+
return this._minSigners;
|
|
241
|
+
}
|
|
242
|
+
charter() {
|
|
243
|
+
return this._charter;
|
|
244
|
+
}
|
|
245
|
+
contributions() {
|
|
246
|
+
return this._contributions;
|
|
247
|
+
}
|
|
248
|
+
setContributions(contributions) {
|
|
249
|
+
this._contributions = contributions;
|
|
250
|
+
}
|
|
251
|
+
mergeContributions(other) {
|
|
252
|
+
this._contributions.mergeMissing(other);
|
|
253
|
+
}
|
|
254
|
+
listeningAtArid() {
|
|
255
|
+
return this._listeningAtArid;
|
|
256
|
+
}
|
|
257
|
+
setListeningAtArid(arid) {
|
|
258
|
+
this._listeningAtArid = arid;
|
|
259
|
+
}
|
|
260
|
+
clearListeningAtArid() {
|
|
261
|
+
this._listeningAtArid = void 0;
|
|
262
|
+
}
|
|
263
|
+
pendingRequests() {
|
|
264
|
+
return this._pendingRequests;
|
|
265
|
+
}
|
|
266
|
+
setPendingRequests(requests) {
|
|
267
|
+
this._pendingRequests = requests;
|
|
268
|
+
}
|
|
269
|
+
clearPendingRequests() {
|
|
270
|
+
this._pendingRequests = new PendingRequests();
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if the config matches another group record.
|
|
274
|
+
*
|
|
275
|
+
* Port of `GroupRecord::config_matches()` from group_record.rs lines 247-253.
|
|
276
|
+
*/
|
|
277
|
+
configMatches(other) {
|
|
278
|
+
return this._charter === other._charter && this._minSigners === other._minSigners && this._coordinator.xid().toString() === other._coordinator.xid().toString() && this._participants.length === other._participants.length && this._participants.every((p, i) => p.xid().toString() === other._participants[i].xid().toString());
|
|
279
|
+
}
|
|
280
|
+
verifyingKey() {
|
|
281
|
+
return this._verifyingKey;
|
|
282
|
+
}
|
|
283
|
+
setVerifyingKey(key) {
|
|
284
|
+
this._verifyingKey = key;
|
|
285
|
+
}
|
|
286
|
+
toJSON() {
|
|
287
|
+
const obj = {
|
|
288
|
+
charter: this._charter,
|
|
289
|
+
min_signers: this._minSigners,
|
|
290
|
+
coordinator: this._coordinator.toJSON(),
|
|
291
|
+
participants: this._participants.map((p) => p.toJSON())
|
|
292
|
+
};
|
|
293
|
+
if (!this._contributions.isEmpty()) obj["contributions"] = this._contributions.toJSON();
|
|
294
|
+
if (this._listeningAtArid !== void 0) obj["listening_at_arid"] = this._listeningAtArid.urString();
|
|
295
|
+
if (!this._pendingRequests.isEmpty()) obj["pending_requests"] = this._pendingRequests.toJSON();
|
|
296
|
+
if (this._verifyingKey !== void 0) obj["verifying_key"] = this._verifyingKey.urString();
|
|
297
|
+
return obj;
|
|
298
|
+
}
|
|
299
|
+
static fromJSON(json) {
|
|
300
|
+
const charter = json["charter"];
|
|
301
|
+
const minSigners = json["min_signers"];
|
|
302
|
+
const record = new GroupRecord(charter, minSigners, GroupParticipant.fromJSON(json["coordinator"]), json["participants"].map((p) => GroupParticipant.fromJSON(p)));
|
|
303
|
+
if (json["contributions"] !== void 0) record._contributions = ContributionPaths.fromJSON(json["contributions"]);
|
|
304
|
+
if (json["listening_at_arid"] !== void 0) record._listeningAtArid = _bcts_components.ARID.fromURString(json["listening_at_arid"]);
|
|
305
|
+
if (json["pending_requests"] !== void 0) record._pendingRequests = PendingRequests.fromJSON(json["pending_requests"]);
|
|
306
|
+
if (json["verifying_key"] !== void 0) record._verifyingKey = _bcts_components.SigningPublicKey.fromURString(json["verifying_key"]);
|
|
307
|
+
return record;
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
//#endregion
|
|
311
|
+
//#region src/registry/owner-record.ts
|
|
312
|
+
/**
|
|
313
|
+
* Record of the registry owner (coordinator).
|
|
314
|
+
*
|
|
315
|
+
* Port of `struct OwnerRecord` from owner_record.rs lines 13-17.
|
|
316
|
+
*/
|
|
317
|
+
var OwnerRecord = class OwnerRecord {
|
|
318
|
+
_xidDocumentUr;
|
|
319
|
+
_xidDocument;
|
|
320
|
+
_petName;
|
|
321
|
+
constructor(xidDocumentUr, xidDocument, petName) {
|
|
322
|
+
this._xidDocumentUr = xidDocumentUr;
|
|
323
|
+
this._xidDocument = xidDocument;
|
|
324
|
+
this._petName = petName;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Create an owner record from a signed XID UR string.
|
|
328
|
+
*
|
|
329
|
+
* Port of `OwnerRecord::from_signed_xid_ur()` from owner_record.rs lines 20-32.
|
|
330
|
+
*/
|
|
331
|
+
static fromSignedXidUr(xidDocumentUr, petName) {
|
|
332
|
+
const [raw, document] = parseRelaxedXidDocument(xidDocumentUr);
|
|
333
|
+
if (document.inceptionPrivateKeys() === void 0) throw new Error("Owner XID document must include private keys");
|
|
334
|
+
return new OwnerRecord(raw, document, petName);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Get the XID of the owner.
|
|
338
|
+
*
|
|
339
|
+
* Port of `OwnerRecord::xid()` from owner_record.rs line 34.
|
|
340
|
+
*/
|
|
341
|
+
xid() {
|
|
342
|
+
return this._xidDocument.xid();
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Get the XID document of the owner.
|
|
346
|
+
*
|
|
347
|
+
* Port of `OwnerRecord::xid_document()` from owner_record.rs line 36.
|
|
348
|
+
*/
|
|
349
|
+
xidDocument() {
|
|
350
|
+
return this._xidDocument;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get the UR string of the XID document.
|
|
354
|
+
*
|
|
355
|
+
* Port of `OwnerRecord::xid_document_ur()` from owner_record.rs line 38.
|
|
356
|
+
*/
|
|
357
|
+
xidDocumentUr() {
|
|
358
|
+
return this._xidDocumentUr;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get the pet name of the owner.
|
|
362
|
+
*
|
|
363
|
+
* Port of `OwnerRecord::pet_name()` from owner_record.rs line 40.
|
|
364
|
+
*/
|
|
365
|
+
petName() {
|
|
366
|
+
return this._petName;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Serialize to JSON object.
|
|
370
|
+
*/
|
|
371
|
+
toJSON() {
|
|
372
|
+
const obj = { xid_document: this._xidDocumentUr };
|
|
373
|
+
if (this._petName !== void 0) obj["pet_name"] = this._petName;
|
|
374
|
+
return obj;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Deserialize from JSON object.
|
|
378
|
+
*/
|
|
379
|
+
static fromJSON(json) {
|
|
380
|
+
const xidDocumentUr = json["xid_document"];
|
|
381
|
+
const petName = json["pet_name"];
|
|
382
|
+
return OwnerRecord.fromSignedXidUr(xidDocumentUr, petName);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
/**
|
|
386
|
+
* Parse a XID document with relaxed validation (no signature verification).
|
|
387
|
+
*
|
|
388
|
+
* Port of `parse_relaxed_xid_document()` from owner_record.rs lines 144-165.
|
|
389
|
+
*/
|
|
390
|
+
function parseRelaxedXidDocument(xidDocumentUr) {
|
|
391
|
+
const sanitized = sanitizeXidUr$1(xidDocumentUr);
|
|
392
|
+
const ur = _bcts_uniform_resources.UR.fromURString(sanitized);
|
|
393
|
+
if (ur.urTypeStr() !== "xid" && ur.urTypeStr() !== "envelope") throw new Error(`Expected a ur:xid document, found ur:${ur.urTypeStr()}`);
|
|
394
|
+
const envelopeCbor = ur.cbor();
|
|
395
|
+
let envelope;
|
|
396
|
+
try {
|
|
397
|
+
envelope = _bcts_envelope.Envelope.fromTaggedCbor(envelopeCbor);
|
|
398
|
+
} catch {
|
|
399
|
+
envelope = _bcts_envelope.Envelope.fromUntaggedCbor(envelopeCbor);
|
|
400
|
+
}
|
|
401
|
+
return [sanitized, _bcts_xid.XIDDocument.fromEnvelope(envelope, void 0, _bcts_xid.XIDVerifySignature.None)];
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Sanitize XID UR input.
|
|
405
|
+
*
|
|
406
|
+
* Port of `sanitize_xid_ur()` from owner_record.rs lines 167-174.
|
|
407
|
+
*/
|
|
408
|
+
function sanitizeXidUr$1(input) {
|
|
409
|
+
const trimmed = input.trim();
|
|
410
|
+
if (trimmed.length === 0) throw new Error("XID document is required");
|
|
411
|
+
return trimmed;
|
|
412
|
+
}
|
|
413
|
+
//#endregion
|
|
414
|
+
//#region src/registry/participant-record.ts
|
|
415
|
+
/**
|
|
416
|
+
* Record of a participant in the registry.
|
|
417
|
+
*
|
|
418
|
+
* Port of `struct ParticipantRecord` from participant_record.rs lines 12-17.
|
|
419
|
+
*/
|
|
420
|
+
var ParticipantRecord = class ParticipantRecord {
|
|
421
|
+
_xidDocumentUr;
|
|
422
|
+
_xidDocument;
|
|
423
|
+
_publicKeys;
|
|
424
|
+
_petName;
|
|
425
|
+
constructor(xidDocumentUr, xidDocument, publicKeys, petName) {
|
|
426
|
+
this._xidDocumentUr = xidDocumentUr;
|
|
427
|
+
this._xidDocument = xidDocument;
|
|
428
|
+
this._publicKeys = publicKeys;
|
|
429
|
+
this._petName = petName;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Create a participant record from a signed XID UR string.
|
|
433
|
+
*
|
|
434
|
+
* Port of `ParticipantRecord::from_signed_xid_ur()` from participant_record.rs lines 20-26.
|
|
435
|
+
*/
|
|
436
|
+
static fromSignedXidUr(xidDocumentUr, petName) {
|
|
437
|
+
const [raw, document] = parseSignedXidDocument(xidDocumentUr);
|
|
438
|
+
return ParticipantRecord.buildFromParts(document, raw, petName);
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Get the pet name of the participant.
|
|
442
|
+
*
|
|
443
|
+
* Port of `ParticipantRecord::pet_name()` from participant_record.rs line 28.
|
|
444
|
+
*/
|
|
445
|
+
petName() {
|
|
446
|
+
return this._petName;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Get the public keys of the participant.
|
|
450
|
+
*
|
|
451
|
+
* Port of `ParticipantRecord::public_keys()` from participant_record.rs line 29.
|
|
452
|
+
*/
|
|
453
|
+
publicKeys() {
|
|
454
|
+
return this._publicKeys;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Get the XID of the participant.
|
|
458
|
+
*
|
|
459
|
+
* Port of `ParticipantRecord::xid()` from participant_record.rs line 30.
|
|
460
|
+
*/
|
|
461
|
+
xid() {
|
|
462
|
+
return this._xidDocument.xid();
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Get the XID document of the participant.
|
|
466
|
+
*
|
|
467
|
+
* Port of `ParticipantRecord::xid_document()` from participant_record.rs line 31.
|
|
468
|
+
*/
|
|
469
|
+
xidDocument() {
|
|
470
|
+
return this._xidDocument;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Get the UR string of the XID document.
|
|
474
|
+
*
|
|
475
|
+
* Port of `ParticipantRecord::xid_document_ur()` from participant_record.rs line 32.
|
|
476
|
+
*/
|
|
477
|
+
xidDocumentUr() {
|
|
478
|
+
return this._xidDocumentUr;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Build from constituent parts.
|
|
482
|
+
*
|
|
483
|
+
* Port of `ParticipantRecord::build_from_parts()` from participant_record.rs lines 34-49.
|
|
484
|
+
*/
|
|
485
|
+
static buildFromParts(document, xidDocumentUr, petName) {
|
|
486
|
+
const inceptionKey = document.inceptionKey();
|
|
487
|
+
if (inceptionKey === void 0) throw new Error("XID document missing inception key");
|
|
488
|
+
return new ParticipantRecord(xidDocumentUr, document, inceptionKey.publicKeys(), petName);
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Recreate from serialized data.
|
|
492
|
+
*
|
|
493
|
+
* Port of `ParticipantRecord::recreate_from_serialized()` from participant_record.rs lines 51-57.
|
|
494
|
+
*/
|
|
495
|
+
static recreateFromSerialized(xidDocumentUr, petName) {
|
|
496
|
+
const [raw, document] = parseSignedXidDocument(xidDocumentUr);
|
|
497
|
+
return ParticipantRecord.buildFromParts(document, raw, petName);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Serialize to JSON object.
|
|
501
|
+
*/
|
|
502
|
+
toJSON() {
|
|
503
|
+
const obj = { xid_document: this._xidDocumentUr };
|
|
504
|
+
if (this._petName !== void 0) obj["pet_name"] = this._petName;
|
|
505
|
+
return obj;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Deserialize from JSON object.
|
|
509
|
+
*/
|
|
510
|
+
static fromJSON(json) {
|
|
511
|
+
const xidDocumentUr = json["xid_document"];
|
|
512
|
+
const petName = json["pet_name"];
|
|
513
|
+
return ParticipantRecord.recreateFromSerialized(xidDocumentUr, petName);
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
/**
|
|
517
|
+
* Parse a signed XID document from a UR string.
|
|
518
|
+
*
|
|
519
|
+
* Port of `parse_signed_xid_document()` from participant_record.rs lines 170-194.
|
|
520
|
+
*/
|
|
521
|
+
function parseSignedXidDocument(xidDocumentUr) {
|
|
522
|
+
const sanitized = sanitizeXidUr(xidDocumentUr);
|
|
523
|
+
const ur = _bcts_uniform_resources.UR.fromURString(sanitized);
|
|
524
|
+
if (ur.urTypeStr() !== "xid" && ur.urTypeStr() !== "envelope") throw new Error(`Expected a ur:xid document, found ur:${ur.urTypeStr()}`);
|
|
525
|
+
const envelopeCbor = ur.cbor();
|
|
526
|
+
let envelope;
|
|
527
|
+
try {
|
|
528
|
+
envelope = _bcts_envelope.Envelope.fromTaggedCbor(envelopeCbor);
|
|
529
|
+
} catch {
|
|
530
|
+
envelope = _bcts_envelope.Envelope.fromUntaggedCbor(envelopeCbor);
|
|
531
|
+
}
|
|
532
|
+
return [sanitized, _bcts_xid.XIDDocument.fromEnvelope(envelope, void 0, _bcts_xid.XIDVerifySignature.Inception)];
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Sanitize XID UR input.
|
|
536
|
+
*
|
|
537
|
+
* Port of `sanitize_xid_ur()` from participant_record.rs lines 196-203.
|
|
538
|
+
*/
|
|
539
|
+
function sanitizeXidUr(input) {
|
|
540
|
+
const trimmed = input.trim();
|
|
541
|
+
if (trimmed.length === 0) throw new Error("XID document is required");
|
|
542
|
+
return trimmed;
|
|
543
|
+
}
|
|
544
|
+
//#endregion
|
|
545
|
+
//#region src/registry/registry-impl.ts
|
|
546
|
+
/**
|
|
547
|
+
* Copyright © 2023-2026 Blockchain Commons, LLC
|
|
548
|
+
* Copyright © 2025-2026 Parity Technologies
|
|
549
|
+
*
|
|
550
|
+
*
|
|
551
|
+
* Registry implementation for managing participants and groups.
|
|
552
|
+
*
|
|
553
|
+
* Port of registry/registry_impl.rs from frost-hubert-rust.
|
|
554
|
+
*
|
|
555
|
+
* @module
|
|
556
|
+
*/
|
|
557
|
+
/**
|
|
558
|
+
* Outcome of adding a participant to the registry.
|
|
559
|
+
*
|
|
560
|
+
* Port of `enum AddOutcome` from registry_impl.rs.
|
|
561
|
+
*/
|
|
562
|
+
let AddOutcome = /* @__PURE__ */ function(AddOutcome) {
|
|
563
|
+
/** Participant was already present in the registry */
|
|
564
|
+
AddOutcome["AlreadyPresent"] = "already_present";
|
|
565
|
+
/** Participant was successfully inserted */
|
|
566
|
+
AddOutcome["Inserted"] = "inserted";
|
|
567
|
+
return AddOutcome;
|
|
568
|
+
}({});
|
|
569
|
+
/**
|
|
570
|
+
* Outcome of setting the owner in the registry.
|
|
571
|
+
*
|
|
572
|
+
* Port of `enum OwnerOutcome` from registry_impl.rs.
|
|
573
|
+
*/
|
|
574
|
+
let OwnerOutcome = /* @__PURE__ */ function(OwnerOutcome) {
|
|
575
|
+
/** Owner was already present in the registry */
|
|
576
|
+
OwnerOutcome["AlreadyPresent"] = "already_present";
|
|
577
|
+
/** Owner was successfully inserted */
|
|
578
|
+
OwnerOutcome["Inserted"] = "inserted";
|
|
579
|
+
return OwnerOutcome;
|
|
580
|
+
}({});
|
|
581
|
+
/**
|
|
582
|
+
* Outcome of recording a group in the registry.
|
|
583
|
+
*
|
|
584
|
+
* Port of `enum GroupOutcome` from registry_impl.rs.
|
|
585
|
+
*/
|
|
586
|
+
let GroupOutcome = /* @__PURE__ */ function(GroupOutcome) {
|
|
587
|
+
/** Group was successfully inserted as new */
|
|
588
|
+
GroupOutcome["Inserted"] = "inserted";
|
|
589
|
+
/** Group already existed and was updated (contributions merged) */
|
|
590
|
+
GroupOutcome["Updated"] = "updated";
|
|
591
|
+
return GroupOutcome;
|
|
592
|
+
}({});
|
|
593
|
+
/**
|
|
594
|
+
* Registry for managing participants and groups.
|
|
595
|
+
*
|
|
596
|
+
* Port of `struct Registry` from registry_impl.rs lines 22-26.
|
|
597
|
+
*/
|
|
598
|
+
var Registry = class Registry {
|
|
599
|
+
_owner;
|
|
600
|
+
_participants;
|
|
601
|
+
_groups;
|
|
602
|
+
constructor() {
|
|
603
|
+
this._owner = void 0;
|
|
604
|
+
this._participants = /* @__PURE__ */ new Map();
|
|
605
|
+
this._groups = /* @__PURE__ */ new Map();
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Get the owner record.
|
|
609
|
+
*/
|
|
610
|
+
owner() {
|
|
611
|
+
return this._owner;
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Set the owner record.
|
|
615
|
+
*
|
|
616
|
+
* Returns the outcome indicating whether the owner was already present or newly inserted.
|
|
617
|
+
*
|
|
618
|
+
* Port of `Registry::set_owner()` from registry_impl.rs.
|
|
619
|
+
*/
|
|
620
|
+
setOwner(owner) {
|
|
621
|
+
const petName = owner.petName();
|
|
622
|
+
if (petName !== void 0) {
|
|
623
|
+
if (this.participantByPetName(petName)?.[1].petName() === petName) throw new Error(`Pet name '${petName}' already used by a participant`);
|
|
624
|
+
}
|
|
625
|
+
if (this._owner === void 0) {
|
|
626
|
+
this._owner = owner;
|
|
627
|
+
return "inserted";
|
|
628
|
+
}
|
|
629
|
+
const existing = this._owner;
|
|
630
|
+
const existingXidUr = existing.xid().urString();
|
|
631
|
+
const ownerXidUr = owner.xid().urString();
|
|
632
|
+
if (existingXidUr === ownerXidUr && existing.xidDocumentUr() === owner.xidDocumentUr() && existing.petName() === owner.petName()) return "already_present";
|
|
633
|
+
if (existingXidUr === ownerXidUr) {
|
|
634
|
+
if (existing.xidDocumentUr() !== owner.xidDocumentUr()) throw new Error("Owner already exists with different keys");
|
|
635
|
+
this._owner = owner;
|
|
636
|
+
return "inserted";
|
|
637
|
+
}
|
|
638
|
+
throw new Error(`Owner already recorded for ${existing.xid().toString()}`);
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* Get all participants.
|
|
642
|
+
*/
|
|
643
|
+
participants() {
|
|
644
|
+
return this._participants;
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Get a participant by XID.
|
|
648
|
+
*/
|
|
649
|
+
participant(xid) {
|
|
650
|
+
return this._participants.get(xid.urString());
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Add a participant.
|
|
654
|
+
*
|
|
655
|
+
* Returns the outcome indicating whether the participant was already present or newly inserted.
|
|
656
|
+
*/
|
|
657
|
+
addParticipant(xid, record) {
|
|
658
|
+
const xidUr = xid.urString();
|
|
659
|
+
if (this._participants.has(xidUr)) return "already_present";
|
|
660
|
+
const petName = record.petName();
|
|
661
|
+
if (petName !== void 0 && this.petNameExists(petName)) throw new Error(`Pet name "${petName}" is already used by another participant`);
|
|
662
|
+
this._participants.set(xidUr, record);
|
|
663
|
+
return "inserted";
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Check if a pet name is already used.
|
|
667
|
+
*/
|
|
668
|
+
petNameExists(petName) {
|
|
669
|
+
for (const record of this._participants.values()) if (record.petName() === petName) return true;
|
|
670
|
+
return false;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Find a participant by pet name.
|
|
674
|
+
*
|
|
675
|
+
* Port of `Registry::participant_by_pet_name()` from registry_impl.rs.
|
|
676
|
+
*/
|
|
677
|
+
participantByPetName(petName) {
|
|
678
|
+
for (const record of this._participants.values()) if (record.petName() === petName) return [record.xid(), record];
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* Get all groups.
|
|
682
|
+
*/
|
|
683
|
+
groups() {
|
|
684
|
+
return this._groups;
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Get a group by ARID.
|
|
688
|
+
*/
|
|
689
|
+
group(arid) {
|
|
690
|
+
return this._groups.get(arid.hex());
|
|
691
|
+
}
|
|
692
|
+
/**
|
|
693
|
+
* Get a mutable reference to a group by ARID.
|
|
694
|
+
*/
|
|
695
|
+
groupMut(arid) {
|
|
696
|
+
return this._groups.get(arid.hex());
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* Record a group in the registry.
|
|
700
|
+
*
|
|
701
|
+
* If the group already exists:
|
|
702
|
+
* - Validates that the config matches
|
|
703
|
+
* - Merges contributions from the new record
|
|
704
|
+
* - Updates verifying key if not already set
|
|
705
|
+
*
|
|
706
|
+
* Port of `Registry::record_group()` from registry_impl.rs.
|
|
707
|
+
*/
|
|
708
|
+
recordGroup(groupId, record) {
|
|
709
|
+
const key = groupId.hex();
|
|
710
|
+
const existing = this._groups.get(key);
|
|
711
|
+
if (existing !== void 0) {
|
|
712
|
+
if (!existing.configMatches(record)) throw new Error(`Group ${groupId.hex()} already exists with a different configuration`);
|
|
713
|
+
existing.mergeContributions(record.contributions());
|
|
714
|
+
const existingKey = existing.verifyingKey();
|
|
715
|
+
const recordKey = record.verifyingKey();
|
|
716
|
+
if (existingKey === void 0 && recordKey !== void 0) existing.setVerifyingKey(recordKey);
|
|
717
|
+
else if (existingKey !== void 0 && recordKey !== void 0 && existingKey.urString() !== recordKey.urString()) throw new Error(`Group ${groupId.hex()} already exists with a different verifying key`);
|
|
718
|
+
return "updated";
|
|
719
|
+
}
|
|
720
|
+
this._groups.set(key, record);
|
|
721
|
+
return "inserted";
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* Add a group (simple variant without merge logic).
|
|
725
|
+
*
|
|
726
|
+
* @deprecated Use recordGroup() for proper merge behavior.
|
|
727
|
+
*/
|
|
728
|
+
addGroup(arid, record) {
|
|
729
|
+
this._groups.set(arid.hex(), record);
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Load a registry from a file.
|
|
733
|
+
*/
|
|
734
|
+
static load(filePath) {
|
|
735
|
+
if (!node_fs.existsSync(filePath)) return new Registry();
|
|
736
|
+
const content = node_fs.readFileSync(filePath, "utf-8");
|
|
737
|
+
const json = JSON.parse(content);
|
|
738
|
+
return Registry.fromJSON(json);
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* Save the registry to a file.
|
|
742
|
+
*/
|
|
743
|
+
save(filePath) {
|
|
744
|
+
const dir = node_path.dirname(filePath);
|
|
745
|
+
if (!node_fs.existsSync(dir)) node_fs.mkdirSync(dir, { recursive: true });
|
|
746
|
+
const json = this.toJSON();
|
|
747
|
+
node_fs.writeFileSync(filePath, JSON.stringify(json, null, 2));
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* Serialize to JSON object.
|
|
751
|
+
*/
|
|
752
|
+
toJSON() {
|
|
753
|
+
const participants = {};
|
|
754
|
+
for (const [xidUr, record] of this._participants) participants[xidUr] = record.toJSON();
|
|
755
|
+
const groups = {};
|
|
756
|
+
for (const [aridHex, record] of this._groups) groups[aridHex] = record.toJSON();
|
|
757
|
+
const obj = {
|
|
758
|
+
groups,
|
|
759
|
+
participants
|
|
760
|
+
};
|
|
761
|
+
if (this._owner !== void 0) obj["owner"] = this._owner.toJSON();
|
|
762
|
+
return obj;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Deserialize from JSON object.
|
|
766
|
+
*/
|
|
767
|
+
static fromJSON(json) {
|
|
768
|
+
const registry = new Registry();
|
|
769
|
+
if (json["owner"] !== void 0) registry._owner = OwnerRecord.fromJSON(json["owner"]);
|
|
770
|
+
const participantsJson = json["participants"];
|
|
771
|
+
if (participantsJson !== void 0) for (const [, recordJson] of Object.entries(participantsJson)) {
|
|
772
|
+
const record = ParticipantRecord.fromJSON(recordJson);
|
|
773
|
+
registry._participants.set(record.xid().urString(), record);
|
|
774
|
+
}
|
|
775
|
+
const groupsJson = json["groups"];
|
|
776
|
+
if (groupsJson !== void 0) for (const [aridHex, recordJson] of Object.entries(groupsJson)) {
|
|
777
|
+
const record = GroupRecord.fromJSON(recordJson);
|
|
778
|
+
registry._groups.set(aridHex, record);
|
|
779
|
+
}
|
|
780
|
+
return registry;
|
|
781
|
+
}
|
|
782
|
+
};
|
|
783
|
+
/**
|
|
784
|
+
* Resolve the registry file path from a given argument.
|
|
785
|
+
*
|
|
786
|
+
* Port of `resolve_registry_path()` from registry/mod.rs lines 49-78.
|
|
787
|
+
*/
|
|
788
|
+
function resolveRegistryPath(registryArg, cwd) {
|
|
789
|
+
if (registryArg === void 0 || registryArg === "") return node_path.join(cwd, "registry.json");
|
|
790
|
+
if (registryArg.endsWith("/") || registryArg.endsWith(node_path.sep)) return node_path.join(cwd, registryArg, "registry.json");
|
|
791
|
+
if (!registryArg.includes("/") && !registryArg.includes(node_path.sep)) return node_path.join(cwd, registryArg);
|
|
792
|
+
return node_path.resolve(cwd, registryArg);
|
|
793
|
+
}
|
|
794
|
+
//#endregion
|
|
795
|
+
exports.AddOutcome = AddOutcome;
|
|
796
|
+
exports.ContributionPaths = ContributionPaths;
|
|
797
|
+
exports.GroupOutcome = GroupOutcome;
|
|
798
|
+
exports.GroupParticipant = GroupParticipant;
|
|
799
|
+
exports.GroupRecord = GroupRecord;
|
|
800
|
+
exports.OwnerOutcome = OwnerOutcome;
|
|
801
|
+
exports.OwnerRecord = OwnerRecord;
|
|
802
|
+
exports.ParticipantRecord = ParticipantRecord;
|
|
803
|
+
exports.PendingRequests = PendingRequests;
|
|
804
|
+
exports.Registry = Registry;
|
|
805
|
+
exports.resolveRegistryPath = resolveRegistryPath;
|
|
3
806
|
|
|
4
|
-
|
|
5
|
-
exports.ContributionPaths = require_registry_impl.ContributionPaths;
|
|
6
|
-
exports.GroupOutcome = require_registry_impl.GroupOutcome;
|
|
7
|
-
exports.GroupParticipant = require_registry_impl.GroupParticipant;
|
|
8
|
-
exports.GroupRecord = require_registry_impl.GroupRecord;
|
|
9
|
-
exports.OwnerOutcome = require_registry_impl.OwnerOutcome;
|
|
10
|
-
exports.OwnerRecord = require_registry_impl.OwnerRecord;
|
|
11
|
-
exports.ParticipantRecord = require_registry_impl.ParticipantRecord;
|
|
12
|
-
exports.PendingRequests = require_registry_impl.PendingRequests;
|
|
13
|
-
exports.Registry = require_registry_impl.Registry;
|
|
14
|
-
exports.resolveRegistryPath = require_registry_impl.resolveRegistryPath;
|
|
807
|
+
//# sourceMappingURL=index.cjs.map
|