@fairmint/canton-node-sdk 0.0.218 → 0.0.220
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/build/src/core/config/CantonRuntimeCredentials.d.ts +63 -0
- package/build/src/core/config/CantonRuntimeCredentials.d.ts.map +1 -0
- package/build/src/core/config/CantonRuntimeCredentials.js +146 -0
- package/build/src/core/config/CantonRuntimeCredentials.js.map +1 -0
- package/build/src/core/config/index.d.ts +1 -0
- package/build/src/core/config/index.d.ts.map +1 -1
- package/build/src/core/config/index.js +1 -0
- package/build/src/core/config/index.js.map +1 -1
- package/build/src/utils/amulet/external-party-transfer-offer.d.ts.map +1 -1
- package/build/src/utils/amulet/external-party-transfer-offer.js +10 -36
- package/build/src/utils/amulet/external-party-transfer-offer.js.map +1 -1
- package/build/src/utils/external-signing/external-party-onboarding.d.ts +53 -0
- package/build/src/utils/external-signing/external-party-onboarding.d.ts.map +1 -1
- package/build/src/utils/external-signing/external-party-onboarding.js +109 -0
- package/build/src/utils/external-signing/external-party-onboarding.js.map +1 -1
- package/build/src/utils/external-signing/external-party-wallet.d.ts.map +1 -1
- package/build/src/utils/external-signing/external-party-wallet.js +5 -30
- package/build/src/utils/external-signing/external-party-wallet.js.map +1 -1
- package/build/src/utils/index.d.ts +1 -0
- package/build/src/utils/index.d.ts.map +1 -1
- package/build/src/utils/index.js +1 -0
- package/build/src/utils/index.js.map +1 -1
- package/build/src/utils/party-readiness/index.d.ts +65 -0
- package/build/src/utils/party-readiness/index.d.ts.map +1 -0
- package/build/src/utils/party-readiness/index.js +238 -0
- package/build/src/utils/party-readiness/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listConnectedSynchronizerIds = listConnectedSynchronizerIds;
|
|
4
|
+
exports.checkPartySynchronizerReadiness = checkPartySynchronizerReadiness;
|
|
5
|
+
exports.assertPartySynchronizerReady = assertPartySynchronizerReady;
|
|
6
|
+
exports.resolveCommonSynchronizerIds = resolveCommonSynchronizerIds;
|
|
7
|
+
exports.assertCommonSynchronizerReady = assertCommonSynchronizerReady;
|
|
8
|
+
exports.assertSingleConnectedSynchronizerId = assertSingleConnectedSynchronizerId;
|
|
9
|
+
exports.readSingleConnectedSynchronizerId = readSingleConnectedSynchronizerId;
|
|
10
|
+
exports.readConnectedSynchronizers = readConnectedSynchronizers;
|
|
11
|
+
exports.canSubmitWithPermission = canSubmitWithPermission;
|
|
12
|
+
const errors_1 = require("../../core/errors");
|
|
13
|
+
const utils_1 = require("../../core/utils");
|
|
14
|
+
async function listConnectedSynchronizerIds(options) {
|
|
15
|
+
const party = validateRequiredString('party', options.party);
|
|
16
|
+
const participantId = options.participantId === undefined ? undefined : validateRequiredString('participantId', options.participantId);
|
|
17
|
+
const raw = await options.ledgerClient.getConnectedSynchronizers({
|
|
18
|
+
party,
|
|
19
|
+
...(participantId !== undefined ? { participantId } : {}),
|
|
20
|
+
});
|
|
21
|
+
const synchronizers = readConnectedSynchronizers(raw);
|
|
22
|
+
return {
|
|
23
|
+
party,
|
|
24
|
+
synchronizerIds: synchronizers.map((synchronizer) => synchronizer.synchronizerId),
|
|
25
|
+
synchronizers,
|
|
26
|
+
raw,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async function checkPartySynchronizerReadiness(options) {
|
|
30
|
+
const synchronizerId = validateRequiredString('synchronizerId', options.synchronizerId);
|
|
31
|
+
const connected = await listConnectedSynchronizerIds(options);
|
|
32
|
+
const matchedSynchronizer = connected.synchronizers.find((synchronizer) => synchronizer.synchronizerId === synchronizerId);
|
|
33
|
+
const isConnected = matchedSynchronizer !== undefined;
|
|
34
|
+
const canSubmit = matchedSynchronizer ? canSubmitWithPermission(matchedSynchronizer.permission) : false;
|
|
35
|
+
const ready = isConnected && canSubmit;
|
|
36
|
+
return {
|
|
37
|
+
party: connected.party,
|
|
38
|
+
synchronizerId,
|
|
39
|
+
ready,
|
|
40
|
+
connected: isConnected,
|
|
41
|
+
canSubmit,
|
|
42
|
+
connectedSynchronizerIds: connected.synchronizerIds,
|
|
43
|
+
...(matchedSynchronizer !== undefined ? { matchedSynchronizer } : {}),
|
|
44
|
+
...(!isConnected
|
|
45
|
+
? { reason: 'not-connected' }
|
|
46
|
+
: !canSubmit
|
|
47
|
+
? { reason: 'not-submit-capable' }
|
|
48
|
+
: {}),
|
|
49
|
+
raw: connected.raw,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async function assertPartySynchronizerReady(options) {
|
|
53
|
+
const readiness = await checkPartySynchronizerReadiness(options);
|
|
54
|
+
if (readiness.ready)
|
|
55
|
+
return readiness;
|
|
56
|
+
throw new errors_1.OperationError(readiness.connected
|
|
57
|
+
? 'Canton party is connected to the synchronizer without submit permission'
|
|
58
|
+
: 'Canton party is not connected to the synchronizer', errors_1.OperationErrorCode.MISSING_DOMAIN_ID, {
|
|
59
|
+
party: readiness.party,
|
|
60
|
+
synchronizerId: readiness.synchronizerId,
|
|
61
|
+
connectedSynchronizerIds: readiness.connectedSynchronizerIds,
|
|
62
|
+
...(readiness.matchedSynchronizer?.permission ? { permission: readiness.matchedSynchronizer.permission } : {}),
|
|
63
|
+
reason: readiness.reason,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async function resolveCommonSynchronizerIds(options) {
|
|
67
|
+
const parties = normalizePartyList(options.parties);
|
|
68
|
+
const partySynchronizers = await Promise.all(parties.map(async (party) => listConnectedSynchronizerIds({
|
|
69
|
+
ledgerClient: options.ledgerClient,
|
|
70
|
+
party,
|
|
71
|
+
...(options.participantId !== undefined ? { participantId: options.participantId } : {}),
|
|
72
|
+
})));
|
|
73
|
+
const commonIds = intersectSynchronizerIds(partySynchronizers.map((partyResult) => options.requireSubmitPermission === false
|
|
74
|
+
? partyResult.synchronizers
|
|
75
|
+
: partyResult.synchronizers.filter((synchronizer) => canSubmitWithPermission(synchronizer.permission))));
|
|
76
|
+
return {
|
|
77
|
+
parties,
|
|
78
|
+
synchronizerIds: commonIds,
|
|
79
|
+
partySynchronizers,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function assertCommonSynchronizerReady(options) {
|
|
83
|
+
const common = await resolveCommonSynchronizerIds(options);
|
|
84
|
+
const synchronizerId = options.synchronizerId === undefined
|
|
85
|
+
? common.synchronizerIds[0]
|
|
86
|
+
: validateRequiredString('synchronizerId', options.synchronizerId);
|
|
87
|
+
if (!synchronizerId) {
|
|
88
|
+
throw new errors_1.OperationError('Canton parties do not share a connected synchronizer', errors_1.OperationErrorCode.MISSING_DOMAIN_ID, {
|
|
89
|
+
parties: common.parties,
|
|
90
|
+
partySynchronizers: common.partySynchronizers.map((partyResult) => ({
|
|
91
|
+
party: partyResult.party,
|
|
92
|
+
synchronizerIds: partyResult.synchronizerIds,
|
|
93
|
+
})),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
const missingParties = common.partySynchronizers
|
|
97
|
+
.filter((partyResult) => !partyResult.synchronizerIds.includes(synchronizerId))
|
|
98
|
+
.map((partyResult) => partyResult.party);
|
|
99
|
+
const nonSubmitParties = options.requireSubmitPermission === false
|
|
100
|
+
? []
|
|
101
|
+
: common.partySynchronizers
|
|
102
|
+
.filter((partyResult) => {
|
|
103
|
+
const match = partyResult.synchronizers.find((synchronizer) => synchronizer.synchronizerId === synchronizerId);
|
|
104
|
+
return match !== undefined && !canSubmitWithPermission(match.permission);
|
|
105
|
+
})
|
|
106
|
+
.map((partyResult) => partyResult.party);
|
|
107
|
+
if (missingParties.length > 0 || nonSubmitParties.length > 0) {
|
|
108
|
+
throw new errors_1.OperationError('Canton parties are not ready on the requested synchronizer', errors_1.OperationErrorCode.MISSING_DOMAIN_ID, {
|
|
109
|
+
parties: common.parties,
|
|
110
|
+
synchronizerId,
|
|
111
|
+
missingParties,
|
|
112
|
+
nonSubmitParties,
|
|
113
|
+
partySynchronizers: common.partySynchronizers.map((partyResult) => ({
|
|
114
|
+
party: partyResult.party,
|
|
115
|
+
synchronizerIds: partyResult.synchronizerIds,
|
|
116
|
+
})),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
...common,
|
|
121
|
+
synchronizerId,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function assertSingleConnectedSynchronizerId(raw) {
|
|
125
|
+
const synchronizerId = readSingleConnectedSynchronizerId(raw);
|
|
126
|
+
if (synchronizerId)
|
|
127
|
+
return synchronizerId;
|
|
128
|
+
throw new errors_1.OperationError('Canton party did not report a connected synchronizer', errors_1.OperationErrorCode.MISSING_DOMAIN_ID);
|
|
129
|
+
}
|
|
130
|
+
function readSingleConnectedSynchronizerId(raw) {
|
|
131
|
+
const synchronizerIds = readConnectedSynchronizers(raw).map((synchronizer) => synchronizer.synchronizerId);
|
|
132
|
+
const uniqueSynchronizerIds = [...new Set(synchronizerIds)];
|
|
133
|
+
if (uniqueSynchronizerIds.length > 1) {
|
|
134
|
+
throw new errors_1.OperationError('Canton party reported multiple connected synchronizers', errors_1.OperationErrorCode.MISSING_DOMAIN_ID, { synchronizerIds });
|
|
135
|
+
}
|
|
136
|
+
return uniqueSynchronizerIds[0] ?? null;
|
|
137
|
+
}
|
|
138
|
+
function readConnectedSynchronizers(raw) {
|
|
139
|
+
const items = readConnectedSynchronizerItems(raw);
|
|
140
|
+
const synchronizers = [];
|
|
141
|
+
const seen = new Set();
|
|
142
|
+
for (const item of items) {
|
|
143
|
+
const synchronizer = readConnectedSynchronizer(item);
|
|
144
|
+
if (!synchronizer || seen.has(synchronizer.synchronizerId))
|
|
145
|
+
continue;
|
|
146
|
+
seen.add(synchronizer.synchronizerId);
|
|
147
|
+
synchronizers.push(synchronizer);
|
|
148
|
+
}
|
|
149
|
+
return synchronizers;
|
|
150
|
+
}
|
|
151
|
+
function canSubmitWithPermission(permission) {
|
|
152
|
+
if (!permission?.trim())
|
|
153
|
+
return true;
|
|
154
|
+
const normalized = normalizePermission(permission);
|
|
155
|
+
if (normalized.includes('observation') || normalized.includes('observer'))
|
|
156
|
+
return false;
|
|
157
|
+
return normalized.includes('submission') || normalized.includes('confirmation');
|
|
158
|
+
}
|
|
159
|
+
function readConnectedSynchronizerItems(raw) {
|
|
160
|
+
if (Array.isArray(raw))
|
|
161
|
+
return raw;
|
|
162
|
+
if (!(0, utils_1.isRecord)(raw))
|
|
163
|
+
return [];
|
|
164
|
+
for (const key of ['connectedSynchronizers', 'connected_synchronizers', 'items', 'synchronizers']) {
|
|
165
|
+
const value = raw[key];
|
|
166
|
+
if (Array.isArray(value))
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
function readConnectedSynchronizer(item) {
|
|
172
|
+
if (typeof item === 'string' && item.trim()) {
|
|
173
|
+
return {
|
|
174
|
+
synchronizerId: item.trim(),
|
|
175
|
+
raw: item,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
if (!(0, utils_1.isRecord)(item))
|
|
179
|
+
return null;
|
|
180
|
+
const synchronizerId = readFirstString(item, [
|
|
181
|
+
'synchronizerId',
|
|
182
|
+
'synchronizer_id',
|
|
183
|
+
'synchronizer',
|
|
184
|
+
'domainId',
|
|
185
|
+
'domain_id',
|
|
186
|
+
'id',
|
|
187
|
+
]);
|
|
188
|
+
if (!synchronizerId)
|
|
189
|
+
return null;
|
|
190
|
+
const synchronizerAlias = readFirstString(item, ['synchronizerAlias', 'synchronizer_alias', 'alias']);
|
|
191
|
+
const permission = readFirstString(item, ['permission', 'participantPermission', 'participant_permission']);
|
|
192
|
+
return {
|
|
193
|
+
synchronizerId,
|
|
194
|
+
...(synchronizerAlias ? { synchronizerAlias } : {}),
|
|
195
|
+
...(permission ? { permission } : {}),
|
|
196
|
+
raw: item,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function normalizePartyList(parties) {
|
|
200
|
+
const normalized = [...new Set(parties.map((party) => validateRequiredString('parties', party)))];
|
|
201
|
+
if (normalized.length === 0) {
|
|
202
|
+
throw new errors_1.ValidationError('parties must include at least one party');
|
|
203
|
+
}
|
|
204
|
+
return normalized;
|
|
205
|
+
}
|
|
206
|
+
function intersectSynchronizerIds(synchronizerGroups) {
|
|
207
|
+
const [firstGroup, ...restGroups] = synchronizerGroups;
|
|
208
|
+
if (!firstGroup)
|
|
209
|
+
return [];
|
|
210
|
+
const common = new Set(firstGroup.map((synchronizer) => synchronizer.synchronizerId));
|
|
211
|
+
for (const group of restGroups) {
|
|
212
|
+
const groupIds = new Set(group.map((synchronizer) => synchronizer.synchronizerId));
|
|
213
|
+
for (const synchronizerId of [...common]) {
|
|
214
|
+
if (!groupIds.has(synchronizerId))
|
|
215
|
+
common.delete(synchronizerId);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return [...common].sort();
|
|
219
|
+
}
|
|
220
|
+
function validateRequiredString(name, value) {
|
|
221
|
+
const normalized = value.trim();
|
|
222
|
+
if (!normalized) {
|
|
223
|
+
throw new errors_1.ValidationError(`${name} is required`, { [name]: value });
|
|
224
|
+
}
|
|
225
|
+
return normalized;
|
|
226
|
+
}
|
|
227
|
+
function readFirstString(record, keys) {
|
|
228
|
+
for (const key of keys) {
|
|
229
|
+
const value = record[key];
|
|
230
|
+
if (typeof value === 'string' && value.trim())
|
|
231
|
+
return value.trim();
|
|
232
|
+
}
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
function normalizePermission(permission) {
|
|
236
|
+
return permission.toLowerCase().replace(/[^a-z]/g, '');
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/party-readiness/index.ts"],"names":[],"mappings":"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"}
|