@fairmint/canton-node-sdk 0.0.209 → 0.0.211
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/Canton.d.ts +42 -2
- package/build/src/Canton.d.ts.map +1 -1
- package/build/src/Canton.js +113 -2
- package/build/src/Canton.js.map +1 -1
- package/build/src/clients/validator-api/ValidatorApiClient.generated.d.ts +6 -0
- package/build/src/clients/validator-api/ValidatorApiClient.generated.d.ts.map +1 -1
- package/build/src/clients/validator-api/ValidatorApiClient.generated.js +4 -0
- package/build/src/clients/validator-api/ValidatorApiClient.generated.js.map +1 -1
- package/build/src/clients/validator-api/operations/v0/health.d.ts +21 -0
- package/build/src/clients/validator-api/operations/v0/health.d.ts.map +1 -0
- package/build/src/clients/validator-api/operations/v0/health.js +37 -0
- package/build/src/clients/validator-api/operations/v0/health.js.map +1 -0
- package/build/src/clients/validator-api/operations/v0/index.d.ts +1 -0
- package/build/src/clients/validator-api/operations/v0/index.d.ts.map +1 -1
- package/build/src/clients/validator-api/operations/v0/index.js +1 -0
- package/build/src/clients/validator-api/operations/v0/index.js.map +1 -1
- package/build/src/index.d.ts +1 -1
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js.map +1 -1
- package/build/src/utils/amulet/external-party-transfer-offer.d.ts +73 -0
- package/build/src/utils/amulet/external-party-transfer-offer.d.ts.map +1 -0
- package/build/src/utils/amulet/external-party-transfer-offer.js +308 -0
- package/build/src/utils/amulet/external-party-transfer-offer.js.map +1 -0
- package/build/src/utils/amulet/index.d.ts +1 -0
- package/build/src/utils/amulet/index.d.ts.map +1 -1
- package/build/src/utils/amulet/index.js +1 -0
- package/build/src/utils/amulet/index.js.map +1 -1
- package/build/src/utils/canton-response-utils.d.ts +3 -0
- package/build/src/utils/canton-response-utils.d.ts.map +1 -0
- package/build/src/utils/canton-response-utils.js +18 -0
- package/build/src/utils/canton-response-utils.js.map +1 -0
- package/build/src/utils/external-signing/canton-protocol.d.ts +57 -0
- package/build/src/utils/external-signing/canton-protocol.d.ts.map +1 -0
- package/build/src/utils/external-signing/canton-protocol.js +339 -0
- package/build/src/utils/external-signing/canton-protocol.js.map +1 -0
- package/build/src/utils/external-signing/execute-external-transaction.d.ts +11 -0
- package/build/src/utils/external-signing/execute-external-transaction.d.ts.map +1 -1
- package/build/src/utils/external-signing/execute-external-transaction.js +24 -2
- package/build/src/utils/external-signing/execute-external-transaction.js.map +1 -1
- package/build/src/utils/external-signing/external-party-onboarding.d.ts +65 -0
- package/build/src/utils/external-signing/external-party-onboarding.d.ts.map +1 -0
- package/build/src/utils/external-signing/external-party-onboarding.js +249 -0
- package/build/src/utils/external-signing/external-party-onboarding.js.map +1 -0
- package/build/src/utils/external-signing/index.d.ts +2 -0
- package/build/src/utils/external-signing/index.d.ts.map +1 -1
- package/build/src/utils/external-signing/index.js +2 -0
- package/build/src/utils/external-signing/index.js.map +1 -1
- package/build/src/utils/health/index.d.ts +2 -0
- package/build/src/utils/health/index.d.ts.map +1 -0
- package/build/src/utils/health/index.js +18 -0
- package/build/src/utils/health/index.js.map +1 -0
- package/build/src/utils/health/wait-for-ready.d.ts +13 -0
- package/build/src/utils/health/wait-for-ready.d.ts.map +1 -0
- package/build/src/utils/health/wait-for-ready.js +20 -0
- package/build/src/utils/health/wait-for-ready.js.map +1 -0
- 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/package.json +1 -1
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeEd25519PublicKeyForCanton = normalizeEd25519PublicKeyForCanton;
|
|
4
|
+
exports.extractRawEd25519PublicKey = extractRawEd25519PublicKey;
|
|
5
|
+
exports.deriveSolanaAddressFromEd25519PublicKeyBase64 = deriveSolanaAddressFromEd25519PublicKeyBase64;
|
|
6
|
+
exports.deriveCantonEd25519PublicKeyFingerprint = deriveCantonEd25519PublicKeyFingerprint;
|
|
7
|
+
exports.buildExternalPartyId = buildExternalPartyId;
|
|
8
|
+
exports.extractPublicKeyFingerprint = extractPublicKeyFingerprint;
|
|
9
|
+
exports.assertCantonPartyMatchesPublicKey = assertCantonPartyMatchesPublicKey;
|
|
10
|
+
exports.normalizeCantonHashToHex = normalizeCantonHashToHex;
|
|
11
|
+
exports.assertCantonSha256MultihashHex = assertCantonSha256MultihashHex;
|
|
12
|
+
exports.hashHexToBase64 = hashHexToBase64;
|
|
13
|
+
exports.assertCantonHashSignature = assertCantonHashSignature;
|
|
14
|
+
exports.assertEd25519Signature = assertEd25519Signature;
|
|
15
|
+
exports.canonicalizeCantonProtocolPayload = canonicalizeCantonProtocolPayload;
|
|
16
|
+
exports.hashCantonProtocolPayload = hashCantonProtocolPayload;
|
|
17
|
+
exports.buildCantonPrepareToken = buildCantonPrepareToken;
|
|
18
|
+
exports.assertCantonPrepareToken = assertCantonPrepareToken;
|
|
19
|
+
exports.hashPreparedTransaction = hashPreparedTransaction;
|
|
20
|
+
exports.preparedTransactionHashToHex = preparedTransactionHashToHex;
|
|
21
|
+
const node_crypto_1 = require("node:crypto");
|
|
22
|
+
const errors_1 = require("../../core/errors");
|
|
23
|
+
const utils_1 = require("../../core/utils");
|
|
24
|
+
const stellar_utils_1 = require("./stellar-utils");
|
|
25
|
+
const ED25519_DER_X509_PREFIX_HEX = '302a300506032b6570032100';
|
|
26
|
+
const ED25519_DER_X509_PREFIX = Buffer.from(ED25519_DER_X509_PREFIX_HEX, 'hex');
|
|
27
|
+
const ED25519_RAW_PUBLIC_KEY_LENGTH = 32;
|
|
28
|
+
const ED25519_DER_X509_PUBLIC_KEY_LENGTH = ED25519_DER_X509_PREFIX.length + ED25519_RAW_PUBLIC_KEY_LENGTH;
|
|
29
|
+
const CANTON_PUBLIC_KEY_FINGERPRINT_HASH_PURPOSE = 12;
|
|
30
|
+
const CANTON_SHA256_MULTIHASH_PREFIX_HEX = '1220';
|
|
31
|
+
const CANTON_SHA256_MULTIHASH_BYTE_LENGTH = 34;
|
|
32
|
+
const CANTON_SHA256_MULTIHASH_HEX_LENGTH = CANTON_SHA256_MULTIHASH_BYTE_LENGTH * 2;
|
|
33
|
+
const ED25519_FIELD_PRIME_LE = Buffer.from('edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f', 'hex');
|
|
34
|
+
const ED25519_SMALL_ORDER_PUBLIC_KEYS_HEX = new Set([
|
|
35
|
+
'0000000000000000000000000000000000000000000000000000000000000000',
|
|
36
|
+
'0100000000000000000000000000000000000000000000000000000000000000',
|
|
37
|
+
'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',
|
|
38
|
+
'edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',
|
|
39
|
+
'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39cccecfd7792ac037a900',
|
|
40
|
+
'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39cccecfd7792ac037a980',
|
|
41
|
+
'26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',
|
|
42
|
+
'26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',
|
|
43
|
+
]);
|
|
44
|
+
const SOLANA_BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
45
|
+
/** Normalizes a raw or DER-wrapped Ed25519 public key into Canton's DER X.509 SubjectPublicKeyInfo base64 format. */
|
|
46
|
+
function normalizeEd25519PublicKeyForCanton(publicKeyBase64) {
|
|
47
|
+
return (0, stellar_utils_1.wrapEd25519PublicKeyInDER)(extractRawEd25519PublicKey(publicKeyBase64)).toString('base64');
|
|
48
|
+
}
|
|
49
|
+
/** Extracts and validates the raw 32-byte Ed25519 public key from raw or DER X.509 base64 input. */
|
|
50
|
+
function extractRawEd25519PublicKey(publicKeyBase64) {
|
|
51
|
+
const key = decodeBase64(publicKeyBase64, 'publicKeyBase64');
|
|
52
|
+
if (key.length === ED25519_RAW_PUBLIC_KEY_LENGTH) {
|
|
53
|
+
assertCanonicalEd25519PublicKey(key);
|
|
54
|
+
return key;
|
|
55
|
+
}
|
|
56
|
+
if (isEd25519DerX509PublicKey(key)) {
|
|
57
|
+
const rawKey = key.subarray(ED25519_DER_X509_PREFIX.length);
|
|
58
|
+
assertCanonicalEd25519PublicKey(rawKey);
|
|
59
|
+
return rawKey;
|
|
60
|
+
}
|
|
61
|
+
throw invalidEd25519PublicKeyLength(key.length);
|
|
62
|
+
}
|
|
63
|
+
/** Converts a raw or DER-wrapped Ed25519 public key into the equivalent Solana address. */
|
|
64
|
+
function deriveSolanaAddressFromEd25519PublicKeyBase64(publicKeyBase64) {
|
|
65
|
+
return encodeSolanaBase58(extractRawEd25519PublicKey(publicKeyBase64));
|
|
66
|
+
}
|
|
67
|
+
/** Derives the Canton fingerprint suffix for an Ed25519 external-party key. */
|
|
68
|
+
function deriveCantonEd25519PublicKeyFingerprint(publicKeyBase64) {
|
|
69
|
+
const rawPublicKey = extractRawEd25519PublicKey(publicKeyBase64);
|
|
70
|
+
const purpose = Buffer.alloc(4);
|
|
71
|
+
purpose.writeInt32BE(CANTON_PUBLIC_KEY_FINGERPRINT_HASH_PURPOSE);
|
|
72
|
+
const digest = (0, node_crypto_1.createHash)('sha256').update(purpose).update(rawPublicKey).digest('hex');
|
|
73
|
+
return `${CANTON_SHA256_MULTIHASH_PREFIX_HEX}${digest}`;
|
|
74
|
+
}
|
|
75
|
+
/** Builds a deterministic external party id from a party hint/prefix and a Canton public-key fingerprint. */
|
|
76
|
+
function buildExternalPartyId(partyHint, publicKeyFingerprint) {
|
|
77
|
+
const normalizedHint = partyHint.trim();
|
|
78
|
+
if (!normalizedHint) {
|
|
79
|
+
throw new errors_1.ValidationError('partyHint is required');
|
|
80
|
+
}
|
|
81
|
+
if (normalizedHint.includes('::')) {
|
|
82
|
+
throw new errors_1.ValidationError('partyHint cannot include the reserved "::" separator', { partyHint });
|
|
83
|
+
}
|
|
84
|
+
const fingerprint = assertCantonSha256MultihashHex(publicKeyFingerprint);
|
|
85
|
+
return `${normalizedHint}::${fingerprint}`;
|
|
86
|
+
}
|
|
87
|
+
/** Extracts the public-key fingerprint suffix from a Canton party id. */
|
|
88
|
+
function extractPublicKeyFingerprint(partyId) {
|
|
89
|
+
return extractCantonPartyFingerprint(partyId, () => new errors_1.ValidationError('Expected a Canton party ID with one public key fingerprint suffix', { partyId }));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Verifies that a party id fingerprint and optional caller-supplied fingerprint match a submitted Ed25519 public key.
|
|
93
|
+
*
|
|
94
|
+
* Returns the derived fingerprint when the party/key binding is valid.
|
|
95
|
+
*/
|
|
96
|
+
function assertCantonPartyMatchesPublicKey(input) {
|
|
97
|
+
const partyFingerprint = extractPublicKeyFingerprint(input.partyId);
|
|
98
|
+
const keyFingerprint = deriveCantonEd25519PublicKeyFingerprint(input.publicKeyBase64);
|
|
99
|
+
const suppliedFingerprint = input.publicKeyFingerprint?.trim();
|
|
100
|
+
if (suppliedFingerprint && suppliedFingerprint !== keyFingerprint) {
|
|
101
|
+
throw new errors_1.ValidationError('Submitted public key fingerprint does not match the public key', {
|
|
102
|
+
suppliedFingerprint,
|
|
103
|
+
keyFingerprint,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (partyFingerprint !== keyFingerprint) {
|
|
107
|
+
throw new errors_1.ValidationError('Canton party ID does not match the submitted public key', {
|
|
108
|
+
partyFingerprint,
|
|
109
|
+
keyFingerprint,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return keyFingerprint;
|
|
113
|
+
}
|
|
114
|
+
/** Converts a Canton hash from hex, base64, or base64url into lowercase hex. */
|
|
115
|
+
function normalizeCantonHashToHex(hash, operation = 'operation') {
|
|
116
|
+
const normalized = hash.trim();
|
|
117
|
+
if (isCantonSha256MultihashHex(normalized)) {
|
|
118
|
+
return normalized.toLowerCase();
|
|
119
|
+
}
|
|
120
|
+
const base64 = normalized.replace(/-/g, '+').replace(/_/g, '/');
|
|
121
|
+
if (!/^[A-Za-z0-9+/]+={0,2}$/.test(base64) || base64.length % 4 === 1) {
|
|
122
|
+
throw invalidCantonHash(operation);
|
|
123
|
+
}
|
|
124
|
+
const paddedBase64 = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), '=');
|
|
125
|
+
const decoded = Buffer.from(paddedBase64, 'base64');
|
|
126
|
+
if (!decoded.length || decoded.toString('base64').replace(/=+$/, '') !== base64.replace(/=+$/, '')) {
|
|
127
|
+
throw invalidCantonHash(operation);
|
|
128
|
+
}
|
|
129
|
+
assertCantonSha256Multihash(decoded, operation);
|
|
130
|
+
return decoded.toString('hex');
|
|
131
|
+
}
|
|
132
|
+
/** Validates and lowercases a submitted Canton SHA-256 multihash hex value. */
|
|
133
|
+
function assertCantonSha256MultihashHex(value) {
|
|
134
|
+
const normalized = value.trim();
|
|
135
|
+
if (!isCantonSha256MultihashHex(normalized)) {
|
|
136
|
+
throw new errors_1.ValidationError('Expected a Canton SHA-256 multihash hex string', { value });
|
|
137
|
+
}
|
|
138
|
+
return normalized.toLowerCase();
|
|
139
|
+
}
|
|
140
|
+
/** Converts a hex-encoded hash into base64 bytes for browser wallet signing. */
|
|
141
|
+
function hashHexToBase64(hashHex) {
|
|
142
|
+
return decodeHashHex(hashHex).toString('base64');
|
|
143
|
+
}
|
|
144
|
+
/** Verifies an Ed25519 signature over a hex-encoded Canton hash. */
|
|
145
|
+
function assertCantonHashSignature(input) {
|
|
146
|
+
assertEd25519Signature({
|
|
147
|
+
publicKeyBase64: input.publicKeyBase64,
|
|
148
|
+
payload: decodeHashHex(input.hashHex),
|
|
149
|
+
signatureBase64: input.signatureBase64,
|
|
150
|
+
failureMessage: 'Invalid Canton hash signature',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/** Verifies an Ed25519 signature against a raw payload using a raw or DER-wrapped public key. */
|
|
154
|
+
function assertEd25519Signature(input) {
|
|
155
|
+
const derPublicKey = decodeBase64(normalizeEd25519PublicKeyForCanton(input.publicKeyBase64), 'publicKeyBase64');
|
|
156
|
+
const signature = decodeBase64(input.signatureBase64, 'signatureBase64');
|
|
157
|
+
const payload = normalizeSignaturePayload(input.payload);
|
|
158
|
+
const verified = (0, node_crypto_1.verify)(null, payload, { key: derPublicKey, format: 'der', type: 'spki' }, signature);
|
|
159
|
+
if (!verified) {
|
|
160
|
+
throw new errors_1.ValidationError(input.failureMessage ?? 'Invalid Ed25519 signature');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** Produces stable JSON for token/signature payloads by sorting object keys and omitting undefined values. */
|
|
164
|
+
function canonicalizeCantonProtocolPayload(payload) {
|
|
165
|
+
return JSON.stringify(normalizeCantonProtocolPayload(payload));
|
|
166
|
+
}
|
|
167
|
+
/** Hashes a canonicalized protocol payload with SHA-256. */
|
|
168
|
+
function hashCantonProtocolPayload(payload) {
|
|
169
|
+
return (0, node_crypto_1.createHash)('sha256').update(canonicalizeCantonProtocolPayload(payload), 'utf8').digest('hex');
|
|
170
|
+
}
|
|
171
|
+
/** Builds an HMAC-bound token for a prepared Canton transaction or topology payload. */
|
|
172
|
+
function buildCantonPrepareToken(secret, payload) {
|
|
173
|
+
assertNonEmptyPrepareTokenSecret(secret);
|
|
174
|
+
const encodedPayload = Buffer.from(canonicalizeCantonProtocolPayload(payload)).toString('base64url');
|
|
175
|
+
const signature = (0, node_crypto_1.createHmac)('sha256', secret).update(encodedPayload).digest('base64url');
|
|
176
|
+
return `${encodedPayload}.${signature}`;
|
|
177
|
+
}
|
|
178
|
+
/** Verifies that a submitted prepare token exactly binds to the expected prepared Canton payload. */
|
|
179
|
+
function assertCantonPrepareToken(secret, token, expectedPayload) {
|
|
180
|
+
assertNonEmptyPrepareTokenSecret(secret);
|
|
181
|
+
const expectedToken = buildCantonPrepareToken(secret, expectedPayload);
|
|
182
|
+
const actual = Buffer.from(token);
|
|
183
|
+
const expected = Buffer.from(expectedToken);
|
|
184
|
+
if (actual.length !== expected.length || !(0, node_crypto_1.timingSafeEqual)(actual, expected)) {
|
|
185
|
+
throw new errors_1.ValidationError('Prepared Canton transaction token does not match the submitted details. Prepare a fresh transaction and sign it again');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function assertNonEmptyPrepareTokenSecret(secret) {
|
|
189
|
+
if (!secret.trim()) {
|
|
190
|
+
throw new errors_1.ValidationError('Prepare token secret is required');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** Computes the SHA-256 hex digest of a base64 prepared transaction blob for token binding. */
|
|
194
|
+
function hashPreparedTransaction(preparedTransaction) {
|
|
195
|
+
return (0, node_crypto_1.createHash)('sha256').update(preparedTransaction).digest('hex');
|
|
196
|
+
}
|
|
197
|
+
/** Converts a base64/base64url prepared transaction hash returned by interactive submission into lowercase hex. */
|
|
198
|
+
function preparedTransactionHashToHex(hashBase64, operation = 'interactive submission prepare') {
|
|
199
|
+
const normalized = hashBase64.trim().replace(/-/g, '+').replace(/_/g, '/');
|
|
200
|
+
if (!/^[A-Za-z0-9+/]+={0,2}$/.test(normalized) || normalized.length % 4 === 1) {
|
|
201
|
+
throw new errors_1.OperationError(`Canton ${operation} response did not include a valid prepared hash`, errors_1.OperationErrorCode.TRANSACTION_FAILED);
|
|
202
|
+
}
|
|
203
|
+
const padded = normalized.padEnd(normalized.length + ((4 - (normalized.length % 4)) % 4), '=');
|
|
204
|
+
const decoded = Buffer.from(padded, 'base64');
|
|
205
|
+
if (!decoded.length || decoded.toString('base64').replace(/=+$/, '') !== normalized.replace(/=+$/, '')) {
|
|
206
|
+
throw new errors_1.OperationError(`Canton ${operation} response did not include a valid prepared hash`, errors_1.OperationErrorCode.TRANSACTION_FAILED);
|
|
207
|
+
}
|
|
208
|
+
return decoded.toString('hex');
|
|
209
|
+
}
|
|
210
|
+
function normalizeSignaturePayload(payload) {
|
|
211
|
+
if (typeof payload === 'string') {
|
|
212
|
+
return Buffer.from(payload, 'utf8');
|
|
213
|
+
}
|
|
214
|
+
return Buffer.from(payload);
|
|
215
|
+
}
|
|
216
|
+
function isCantonSha256MultihashHex(value) {
|
|
217
|
+
return (value.length === CANTON_SHA256_MULTIHASH_HEX_LENGTH &&
|
|
218
|
+
value.toLowerCase().startsWith(CANTON_SHA256_MULTIHASH_PREFIX_HEX) &&
|
|
219
|
+
/^[0-9a-fA-F]+$/.test(value));
|
|
220
|
+
}
|
|
221
|
+
function assertCantonSha256Multihash(hash, operation) {
|
|
222
|
+
if (hash.length !== CANTON_SHA256_MULTIHASH_BYTE_LENGTH ||
|
|
223
|
+
hash.subarray(0, 2).toString('hex') !== CANTON_SHA256_MULTIHASH_PREFIX_HEX) {
|
|
224
|
+
throw invalidCantonHash(operation);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function invalidCantonHash(operation) {
|
|
228
|
+
return new errors_1.OperationError(`Canton ${operation} response did not include a valid SHA-256 multihash`, errors_1.OperationErrorCode.TRANSACTION_FAILED);
|
|
229
|
+
}
|
|
230
|
+
function decodeBase64(value, label) {
|
|
231
|
+
const normalized = value.trim().replace(/-/g, '+').replace(/_/g, '/');
|
|
232
|
+
if (!/^[A-Za-z0-9+/]+={0,2}$/.test(normalized) || normalized.length % 4 === 1) {
|
|
233
|
+
throw new errors_1.ValidationError(`${label} must be base64-encoded`, { [label]: value });
|
|
234
|
+
}
|
|
235
|
+
const padded = normalized.padEnd(normalized.length + ((4 - (normalized.length % 4)) % 4), '=');
|
|
236
|
+
const decoded = Buffer.from(padded, 'base64');
|
|
237
|
+
if (decoded.toString('base64').replace(/=+$/, '') !== normalized.replace(/=+$/, '')) {
|
|
238
|
+
throw new errors_1.ValidationError(`${label} must be base64-encoded`, { [label]: value });
|
|
239
|
+
}
|
|
240
|
+
return decoded;
|
|
241
|
+
}
|
|
242
|
+
function decodeHashHex(hashHex) {
|
|
243
|
+
const normalized = hashHex.trim();
|
|
244
|
+
if (!/^[0-9a-fA-F]+$/.test(normalized) || normalized.length % 2 !== 0) {
|
|
245
|
+
throw new errors_1.ValidationError('Expected a hex-encoded Canton hash', { hashHex });
|
|
246
|
+
}
|
|
247
|
+
return Buffer.from(normalized, 'hex');
|
|
248
|
+
}
|
|
249
|
+
function encodeSolanaBase58(bytes) {
|
|
250
|
+
const digits = [];
|
|
251
|
+
for (const byte of bytes) {
|
|
252
|
+
let carry = byte;
|
|
253
|
+
for (let index = 0; index < digits.length; index += 1) {
|
|
254
|
+
const currentDigit = digits[index] ?? 0;
|
|
255
|
+
const value = currentDigit * 256 + carry;
|
|
256
|
+
digits[index] = value % 58;
|
|
257
|
+
carry = Math.floor(value / 58);
|
|
258
|
+
}
|
|
259
|
+
while (carry > 0) {
|
|
260
|
+
digits.push(carry % 58);
|
|
261
|
+
carry = Math.floor(carry / 58);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
let leadingZeroes = 0;
|
|
265
|
+
while (leadingZeroes < bytes.length && bytes[leadingZeroes] === 0) {
|
|
266
|
+
leadingZeroes += 1;
|
|
267
|
+
}
|
|
268
|
+
return (SOLANA_BASE58_ALPHABET.charAt(0).repeat(leadingZeroes) +
|
|
269
|
+
digits
|
|
270
|
+
.reverse()
|
|
271
|
+
.map((digit) => SOLANA_BASE58_ALPHABET.charAt(digit))
|
|
272
|
+
.join(''));
|
|
273
|
+
}
|
|
274
|
+
function isEd25519DerX509PublicKey(key) {
|
|
275
|
+
return (key.length === ED25519_DER_X509_PUBLIC_KEY_LENGTH &&
|
|
276
|
+
key.subarray(0, ED25519_DER_X509_PREFIX.length).equals(ED25519_DER_X509_PREFIX));
|
|
277
|
+
}
|
|
278
|
+
function assertCanonicalEd25519PublicKey(rawPublicKey) {
|
|
279
|
+
if (ED25519_SMALL_ORDER_PUBLIC_KEYS_HEX.has(rawPublicKey.toString('hex').toLowerCase())) {
|
|
280
|
+
throw new errors_1.ValidationError('Invalid Ed25519 public key');
|
|
281
|
+
}
|
|
282
|
+
const encodedY = Buffer.from(rawPublicKey);
|
|
283
|
+
encodedY[31] = (encodedY[31] ?? 0) & 0x7f;
|
|
284
|
+
if (compareLittleEndian(encodedY, ED25519_FIELD_PRIME_LE) >= 0) {
|
|
285
|
+
throw new errors_1.ValidationError('Invalid Ed25519 public key');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function compareLittleEndian(left, right) {
|
|
289
|
+
for (let index = Math.max(left.length, right.length) - 1; index >= 0; index -= 1) {
|
|
290
|
+
const leftByte = left[index] ?? 0;
|
|
291
|
+
const rightByte = right[index] ?? 0;
|
|
292
|
+
if (leftByte !== rightByte)
|
|
293
|
+
return leftByte - rightByte;
|
|
294
|
+
}
|
|
295
|
+
return 0;
|
|
296
|
+
}
|
|
297
|
+
function invalidEd25519PublicKeyLength(length) {
|
|
298
|
+
return new errors_1.ValidationError(`Invalid Ed25519 public key length: ${length}; expected raw 32 bytes or DER-wrapped 44 bytes`, {
|
|
299
|
+
actualLength: length,
|
|
300
|
+
expectedRawLength: ED25519_RAW_PUBLIC_KEY_LENGTH,
|
|
301
|
+
expectedDerLength: ED25519_DER_X509_PUBLIC_KEY_LENGTH,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
function extractCantonPartyFingerprint(partyId, createError) {
|
|
305
|
+
const trimmed = partyId.trim();
|
|
306
|
+
const separatorIndex = trimmed.indexOf('::');
|
|
307
|
+
if (separatorIndex <= 0 || separatorIndex !== trimmed.lastIndexOf('::')) {
|
|
308
|
+
throw createError();
|
|
309
|
+
}
|
|
310
|
+
const fingerprint = trimmed.slice(separatorIndex + 2).trim();
|
|
311
|
+
if (!fingerprint) {
|
|
312
|
+
throw createError();
|
|
313
|
+
}
|
|
314
|
+
return fingerprint;
|
|
315
|
+
}
|
|
316
|
+
function normalizeCantonProtocolPayload(payload) {
|
|
317
|
+
if (payload === undefined)
|
|
318
|
+
return null;
|
|
319
|
+
if (payload === null || typeof payload === 'string' || typeof payload === 'boolean') {
|
|
320
|
+
return payload;
|
|
321
|
+
}
|
|
322
|
+
if (typeof payload === 'number') {
|
|
323
|
+
if (!Number.isFinite(payload)) {
|
|
324
|
+
throw new errors_1.ValidationError('Canton protocol payload contains a non-finite number');
|
|
325
|
+
}
|
|
326
|
+
return payload;
|
|
327
|
+
}
|
|
328
|
+
if (Array.isArray(payload)) {
|
|
329
|
+
return payload.map((item) => normalizeCantonProtocolPayload(item));
|
|
330
|
+
}
|
|
331
|
+
if ((0, utils_1.isRecord)(payload)) {
|
|
332
|
+
return Object.fromEntries(Object.entries(payload)
|
|
333
|
+
.filter(([, value]) => value !== undefined)
|
|
334
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
335
|
+
.map(([key, value]) => [key, normalizeCantonProtocolPayload(value)]));
|
|
336
|
+
}
|
|
337
|
+
throw new errors_1.ValidationError('Canton protocol payload contains an unsupported value');
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=canton-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canton-protocol.js","sourceRoot":"","sources":["../../../../src/utils/external-signing/canton-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,10 @@ export interface ExecuteExternalTransactionOptions {
|
|
|
10
10
|
readonly hashingSchemeVersion?: string;
|
|
11
11
|
readonly deduplicationPeriod?: InteractiveSubmissionExecuteRequest['deduplicationPeriod'];
|
|
12
12
|
}
|
|
13
|
+
export interface ExecuteExternalTransactionAndWaitResult {
|
|
14
|
+
readonly updateId: string;
|
|
15
|
+
readonly raw: Record<string, unknown>;
|
|
16
|
+
}
|
|
13
17
|
/**
|
|
14
18
|
* Executes an interactive submission after offline signing (`interactiveSubmissionExecute`).
|
|
15
19
|
*
|
|
@@ -17,4 +21,11 @@ export interface ExecuteExternalTransactionOptions {
|
|
|
17
21
|
* @returns Validator response payload from interactive submission execute
|
|
18
22
|
*/
|
|
19
23
|
export declare function executeExternalTransaction(options: ExecuteExternalTransactionOptions): Promise<InteractiveSubmissionExecuteResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Executes an interactive submission and waits for the resulting update id.
|
|
26
|
+
*
|
|
27
|
+
* This uses Ledger JSON API's `executeAndWait` endpoint, which is useful for applications that need to link users to a
|
|
28
|
+
* transaction/update explorer after an externally signed submission.
|
|
29
|
+
*/
|
|
30
|
+
export declare function executeExternalTransactionAndWait(options: ExecuteExternalTransactionOptions): Promise<ExecuteExternalTransactionAndWaitResult>;
|
|
20
31
|
//# sourceMappingURL=execute-external-transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-external-transaction.d.ts","sourceRoot":"","sources":["../../../../src/utils/external-signing/execute-external-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,KAAK,mCAAmC,EACxC,KAAK,oCAAoC,EAC1C,MAAM,kEAAkE,CAAC;
|
|
1
|
+
{"version":3,"file":"execute-external-transaction.d.ts","sourceRoot":"","sources":["../../../../src/utils/external-signing/execute-external-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,KAAK,mCAAmC,EACxC,KAAK,oCAAoC,EAC1C,MAAM,kEAAkE,CAAC;AAG1E,MAAM,MAAM,cAAc,GAAG,mCAAmC,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1G,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mCAAmC,CAAC,qBAAqB,CAAC,CAAC;CAC3F;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,oCAAoC,CAAC,CAE/C;AAED;;;;;GAKG;AACH,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,uCAAuC,CAAC,CAclD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.executeExternalTransaction = executeExternalTransaction;
|
|
4
|
+
exports.executeExternalTransactionAndWait = executeExternalTransactionAndWait;
|
|
5
|
+
const canton_response_utils_1 = require("../canton-response-utils");
|
|
4
6
|
/**
|
|
5
7
|
* Executes an interactive submission after offline signing (`interactiveSubmissionExecute`).
|
|
6
8
|
*
|
|
@@ -8,7 +10,27 @@ exports.executeExternalTransaction = executeExternalTransaction;
|
|
|
8
10
|
* @returns Validator response payload from interactive submission execute
|
|
9
11
|
*/
|
|
10
12
|
async function executeExternalTransaction(options) {
|
|
11
|
-
return options.ledgerClient.interactiveSubmissionExecute(
|
|
13
|
+
return options.ledgerClient.interactiveSubmissionExecute(buildExecuteExternalTransactionRequest(options));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Executes an interactive submission and waits for the resulting update id.
|
|
17
|
+
*
|
|
18
|
+
* This uses Ledger JSON API's `executeAndWait` endpoint, which is useful for applications that need to link users to a
|
|
19
|
+
* transaction/update explorer after an externally signed submission.
|
|
20
|
+
*/
|
|
21
|
+
async function executeExternalTransactionAndWait(options) {
|
|
22
|
+
const raw = await options.ledgerClient.makePostRequest(`${options.ledgerClient.getApiUrl()}/v2/interactive-submission/executeAndWait`, buildExecuteExternalTransactionRequest(options), {
|
|
23
|
+
contentType: 'application/json',
|
|
24
|
+
includeBearerToken: true,
|
|
25
|
+
});
|
|
26
|
+
const updateId = (0, canton_response_utils_1.readRequiredString)(raw, 'updateId', 'interactive submission executeAndWait');
|
|
27
|
+
return {
|
|
28
|
+
updateId,
|
|
29
|
+
raw: (0, canton_response_utils_1.objectOrEmpty)(raw),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildExecuteExternalTransactionRequest(options) {
|
|
33
|
+
return {
|
|
12
34
|
userId: options.userId,
|
|
13
35
|
preparedTransaction: options.preparedTransaction,
|
|
14
36
|
hashingSchemeVersion: options.hashingSchemeVersion ?? 'HASHING_SCHEME_VERSION_V2',
|
|
@@ -21,6 +43,6 @@ async function executeExternalTransaction(options) {
|
|
|
21
43
|
partySignatures: {
|
|
22
44
|
signatures: [...options.partySignatures],
|
|
23
45
|
},
|
|
24
|
-
}
|
|
46
|
+
};
|
|
25
47
|
}
|
|
26
48
|
//# sourceMappingURL=execute-external-transaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-external-transaction.js","sourceRoot":"","sources":["../../../../src/utils/external-signing/execute-external-transaction.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"execute-external-transaction.js","sourceRoot":"","sources":["../../../../src/utils/external-signing/execute-external-transaction.ts"],"names":[],"mappings":";;AA8BA,gEAIC;AAQD,8EAgBC;AArDD,oEAA6E;AAmB7E;;;;;GAKG;AACI,KAAK,UAAU,0BAA0B,CAC9C,OAA0C;IAE1C,OAAO,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,iCAAiC,CACrD,OAA0C;IAE1C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,CACpD,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,2CAA2C,EAC9E,sCAAsC,CAAC,OAAO,CAAC,EAC/C;QACE,WAAW,EAAE,kBAAkB;QAC/B,kBAAkB,EAAE,IAAI;KACzB,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,0CAAkB,EAAC,GAAG,EAAE,UAAU,EAAE,uCAAuC,CAAC,CAAC;IAC9F,OAAO;QACL,QAAQ;QACR,GAAG,EAAE,IAAA,qCAAa,EAAC,GAAG,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,sCAAsC,CAC7C,OAA0C;IAE1C,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,2BAA2B;QACjF,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI;YAClD,qBAAqB,EAAE;gBACrB,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;aAC3B;SACF;QACD,eAAe,EAAE;YACf,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;SACzC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type LedgerJsonApiClient } from '../../clients/ledger-json-api';
|
|
2
|
+
export declare const CANTON_DER_X509_PUBLIC_KEY_FORMAT = "CRYPTO_KEY_FORMAT_DER_X509_SUBJECT_PUBLIC_KEY_INFO";
|
|
3
|
+
export declare const CANTON_EC_CURVE25519_PUBLIC_KEY_SPEC = "SIGNING_KEY_SPEC_EC_CURVE25519";
|
|
4
|
+
export declare const CANTON_RAW_SIGNATURE_FORMAT = "SIGNATURE_FORMAT_RAW";
|
|
5
|
+
export declare const CANTON_ED25519_SIGNATURE_ALGORITHM = "SIGNING_ALGORITHM_SPEC_ED25519";
|
|
6
|
+
export declare const DEFAULT_CANTON_IDENTITY_PROVIDER_ID = "";
|
|
7
|
+
export interface PrepareExternalPartyOnboardingOptions {
|
|
8
|
+
readonly ledgerClient: LedgerJsonApiClient;
|
|
9
|
+
readonly synchronizerId: string;
|
|
10
|
+
readonly partyHint: string;
|
|
11
|
+
readonly publicKeyBase64: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PreparedExternalPartyOnboarding {
|
|
14
|
+
readonly partyId: string;
|
|
15
|
+
readonly publicKeyFingerprint: string;
|
|
16
|
+
readonly multiHashHex: string;
|
|
17
|
+
readonly synchronizerId: string;
|
|
18
|
+
readonly topologyTransactions: readonly string[];
|
|
19
|
+
readonly publicKeyFormat: typeof CANTON_DER_X509_PUBLIC_KEY_FORMAT;
|
|
20
|
+
readonly signingAlgorithmSpec: typeof CANTON_ED25519_SIGNATURE_ALGORITHM;
|
|
21
|
+
readonly raw: unknown;
|
|
22
|
+
}
|
|
23
|
+
export interface SubmitExternalPartyOnboardingOptions {
|
|
24
|
+
readonly ledgerClient: LedgerJsonApiClient;
|
|
25
|
+
readonly synchronizerId: string;
|
|
26
|
+
readonly partyId: string;
|
|
27
|
+
readonly publicKeyBase64: string;
|
|
28
|
+
readonly multiHashHex: string;
|
|
29
|
+
readonly topologyTransactions: readonly string[];
|
|
30
|
+
readonly multiHashSignatureBase64: string;
|
|
31
|
+
readonly publicKeyFingerprint?: string | null;
|
|
32
|
+
readonly identityProviderId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Treat a 409 allocation conflict as success when the party already exists and the party details endpoint confirms
|
|
35
|
+
* it.
|
|
36
|
+
*/
|
|
37
|
+
readonly allowAlreadyExists?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface SubmittedExternalPartyOnboarding {
|
|
40
|
+
readonly partyId: string;
|
|
41
|
+
readonly raw: Record<string, unknown>;
|
|
42
|
+
readonly alreadyExisted: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Prepares external-party topology for a raw or DER-wrapped Ed25519 public key.
|
|
46
|
+
*
|
|
47
|
+
* The caller should ask the end-user wallet to sign `multiHashHex` before calling {@link submitExternalPartyOnboarding}.
|
|
48
|
+
*/
|
|
49
|
+
export declare function prepareExternalPartyOnboarding(options: PrepareExternalPartyOnboardingOptions): Promise<PreparedExternalPartyOnboarding>;
|
|
50
|
+
/** Verifies the end-user Ed25519 signature and submits prepared external-party topology to Canton. */
|
|
51
|
+
export declare function submitExternalPartyOnboarding(options: SubmitExternalPartyOnboardingOptions): Promise<SubmittedExternalPartyOnboarding>;
|
|
52
|
+
/** Lists party ids whose suffix matches the supplied Ed25519 public key fingerprint. */
|
|
53
|
+
export declare function listExternalPartyIdsForPublicKey(ledgerClient: LedgerJsonApiClient, publicKeyBase64: string): Promise<{
|
|
54
|
+
readonly publicKeyFingerprint: string;
|
|
55
|
+
readonly parties: readonly string[];
|
|
56
|
+
readonly raw: unknown;
|
|
57
|
+
}>;
|
|
58
|
+
/** Checks one exact external-party id built from party hint and public key. */
|
|
59
|
+
export declare function getExternalPartyIdForHintAndPublicKey(ledgerClient: LedgerJsonApiClient, partyHint: string, publicKeyBase64: string, identityProviderId?: string): Promise<{
|
|
60
|
+
readonly publicKeyFingerprint: string;
|
|
61
|
+
readonly partyId: string;
|
|
62
|
+
readonly exists: boolean;
|
|
63
|
+
readonly raw: unknown;
|
|
64
|
+
}>;
|
|
65
|
+
//# sourceMappingURL=external-party-onboarding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-party-onboarding.d.ts","sourceRoot":"","sources":["../../../../src/utils/external-signing/external-party-onboarding.ts"],"names":[],"mappings":"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"}
|