@fairmint/canton-node-sdk 0.0.234 → 0.0.235
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/errors.d.ts +2 -0
- package/build/src/core/errors.d.ts.map +1 -1
- package/build/src/core/errors.js +14 -0
- package/build/src/core/errors.js.map +1 -1
- package/build/src/core/utils/abort.d.ts +3 -0
- package/build/src/core/utils/abort.d.ts.map +1 -0
- package/build/src/core/utils/abort.js +57 -0
- package/build/src/core/utils/abort.js.map +1 -0
- package/build/src/utils/external-signing/canton-ed25519-signer.d.ts +64 -0
- package/build/src/utils/external-signing/canton-ed25519-signer.d.ts.map +1 -0
- package/build/src/utils/external-signing/canton-ed25519-signer.js +206 -0
- package/build/src/utils/external-signing/canton-ed25519-signer.js.map +1 -0
- package/build/src/utils/external-signing/execute-external-transaction.d.ts +16 -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 +17 -5
- package/build/src/utils/external-signing/execute-external-transaction.js.map +1 -1
- package/build/src/utils/external-signing/external-party-details.d.ts +3 -0
- package/build/src/utils/external-signing/external-party-details.d.ts.map +1 -0
- package/build/src/utils/external-signing/external-party-details.js +23 -0
- package/build/src/utils/external-signing/external-party-details.js.map +1 -0
- package/build/src/utils/external-signing/external-party-lifecycle.d.ts +95 -0
- package/build/src/utils/external-signing/external-party-lifecycle.d.ts.map +1 -0
- package/build/src/utils/external-signing/external-party-lifecycle.js +207 -0
- package/build/src/utils/external-signing/external-party-lifecycle.js.map +1 -0
- package/build/src/utils/external-signing/external-party-onboarding.d.ts +3 -7
- package/build/src/utils/external-signing/external-party-onboarding.d.ts.map +1 -1
- package/build/src/utils/external-signing/external-party-onboarding.js +12 -55
- package/build/src/utils/external-signing/external-party-onboarding.js.map +1 -1
- package/build/src/utils/external-signing/external-signing-client.d.ts +114 -0
- package/build/src/utils/external-signing/external-signing-client.d.ts.map +1 -0
- package/build/src/utils/external-signing/external-signing-client.js +271 -0
- package/build/src/utils/external-signing/external-signing-client.js.map +1 -0
- package/build/src/utils/external-signing/index.d.ts +3 -0
- package/build/src/utils/external-signing/index.d.ts.map +1 -1
- package/build/src/utils/external-signing/index.js +3 -0
- package/build/src/utils/external-signing/index.js.map +1 -1
- package/build/src/utils/party-readiness/index.d.ts +2 -0
- package/build/src/utils/party-readiness/index.d.ts.map +1 -1
- package/build/src/utils/party-readiness/index.js +22 -12
- package/build/src/utils/party-readiness/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -88,4 +88,6 @@ export declare class OperationError extends CantonError {
|
|
|
88
88
|
export declare function normalizeCantonError(error: unknown): NormalizedCantonErrorDetails | null;
|
|
89
89
|
/** Return true when a Canton error represents a non-retryable 4xx mutation rejection. */
|
|
90
90
|
export declare function isDefiniteCantonMutationRejection(error: unknown): boolean;
|
|
91
|
+
/** Read Canton's structured mutation-outcome signal when the API supplies one. */
|
|
92
|
+
export declare function readCantonDefiniteAnswer(error: unknown): boolean | undefined;
|
|
91
93
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
package/build/src/core/errors.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.OperationError = exports.OperationErrorCode = exports.NetworkError = exports.ValidationError = exports.ApiError = exports.AuthenticationError = exports.ConfigurationError = exports.CantonError = exports.ErrorCode = void 0;
|
|
4
4
|
exports.normalizeCantonError = normalizeCantonError;
|
|
5
5
|
exports.isDefiniteCantonMutationRejection = isDefiniteCantonMutationRejection;
|
|
6
|
+
exports.readCantonDefiniteAnswer = readCantonDefiniteAnswer;
|
|
6
7
|
const rest_client_1 = require("@hardlydifficult/rest-client");
|
|
7
8
|
/** Base error codes for standard SDK errors. */
|
|
8
9
|
exports.ErrorCode = {
|
|
@@ -133,6 +134,19 @@ function isDefiniteCantonMutationRejection(error) {
|
|
|
133
134
|
return false;
|
|
134
135
|
return status >= 400 && status < 500 && status !== 408 && status !== 425 && status !== 429;
|
|
135
136
|
}
|
|
137
|
+
/** Read Canton's structured mutation-outcome signal when the API supplies one. */
|
|
138
|
+
function readCantonDefiniteAnswer(error) {
|
|
139
|
+
const direct = readDefiniteAnswerProperty(error);
|
|
140
|
+
if (direct !== undefined)
|
|
141
|
+
return direct;
|
|
142
|
+
return readDefiniteAnswerProperty(normalizeCantonError(error)?.context);
|
|
143
|
+
}
|
|
144
|
+
function readDefiniteAnswerProperty(source) {
|
|
145
|
+
if (!isObjectRecord(source))
|
|
146
|
+
return undefined;
|
|
147
|
+
const value = source['definiteAnswer'] ?? source['definite_answer'];
|
|
148
|
+
return typeof value === 'boolean' ? value : undefined;
|
|
149
|
+
}
|
|
136
150
|
/** Return true when a Canton API status/code pair is known to be transient. */
|
|
137
151
|
function isRetryableCantonApiCode(status, code) {
|
|
138
152
|
return ((status === 400 && code === 'UNKNOWN_CONTRACT_SYNCHRONIZERS') ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function runWithAbortSignal<T>(signal: AbortSignal | undefined, createAbortError: () => Error, operation: () => Promise<T>): Promise<T>;
|
|
2
|
+
export declare function delayWithAbortSignal(ms: number, signal: AbortSignal | undefined, createAbortError: () => Error): Promise<void>;
|
|
3
|
+
//# sourceMappingURL=abort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/abort.ts"],"names":[],"mappings":"AAAA,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,gBAAgB,EAAE,MAAM,KAAK,EAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,gBAAgB,EAAE,MAAM,KAAK,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runWithAbortSignal = runWithAbortSignal;
|
|
4
|
+
exports.delayWithAbortSignal = delayWithAbortSignal;
|
|
5
|
+
async function runWithAbortSignal(signal, createAbortError, operation) {
|
|
6
|
+
if (!signal)
|
|
7
|
+
return operation();
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
let settled = false;
|
|
10
|
+
const cleanup = () => signal.removeEventListener('abort', onAbort);
|
|
11
|
+
const finish = (callback) => {
|
|
12
|
+
if (settled)
|
|
13
|
+
return;
|
|
14
|
+
settled = true;
|
|
15
|
+
cleanup();
|
|
16
|
+
callback();
|
|
17
|
+
};
|
|
18
|
+
const onAbort = () => {
|
|
19
|
+
// Preserve event order when the operation fulfilled before a synchronous abort but its handler has not run yet.
|
|
20
|
+
queueMicrotask(() => finish(() => reject(createAbortError())));
|
|
21
|
+
};
|
|
22
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
23
|
+
if (signal.aborted) {
|
|
24
|
+
onAbort();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
let pending;
|
|
28
|
+
try {
|
|
29
|
+
pending = operation();
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
finish(() => reject(error));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
pending.then((value) => finish(() => resolve(value)), (error) => finish(() => reject(error)));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function delayWithAbortSignal(ms, signal, createAbortError) {
|
|
39
|
+
if (!signal)
|
|
40
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
const timeout = setTimeout(() => {
|
|
43
|
+
signal.removeEventListener('abort', onAbort);
|
|
44
|
+
resolve();
|
|
45
|
+
}, ms);
|
|
46
|
+
const onAbort = () => {
|
|
47
|
+
clearTimeout(timeout);
|
|
48
|
+
signal.removeEventListener('abort', onAbort);
|
|
49
|
+
reject(createAbortError());
|
|
50
|
+
};
|
|
51
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
52
|
+
if (signal.aborted) {
|
|
53
|
+
onAbort();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.js","sourceRoot":"","sources":["../../../../src/core/utils/abort.ts"],"names":[],"mappings":";;;;AAAO,KAAK,6BACV,MAA+B,EAC/B,gBAA6B,EAC7B,SAA2B;IAE3B,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,EAAE,CAAC;IAEhC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,CAAC,QAAoB,EAAQ,EAAE;YAC5C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,gHAAgH;YAChH,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,SAAS,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CACV,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACvC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,+BACV,EAAU,EACV,MAA+B,EAC/B,gBAA6B;IAE7B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAEtE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export declare const CantonEd25519SigningPurpose: {
|
|
2
|
+
readonly EXTERNAL_PARTY_TOPOLOGY: 'external-party-topology';
|
|
3
|
+
readonly INTERACTIVE_SUBMISSION: 'interactive-submission';
|
|
4
|
+
};
|
|
5
|
+
export type CantonEd25519SigningPurposeType = (typeof CantonEd25519SigningPurpose)[keyof typeof CantonEd25519SigningPurpose];
|
|
6
|
+
export declare const DEFAULT_CANTON_ED25519_SIGNING_REQUEST_TTL_MS: number;
|
|
7
|
+
export declare const MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS: number;
|
|
8
|
+
export type CantonEd25519SigningContextValue = string | number | boolean | null;
|
|
9
|
+
export type CantonEd25519SigningContext = Readonly<Record<string, CantonEd25519SigningContextValue>>;
|
|
10
|
+
/**
|
|
11
|
+
* A provider-neutral Canton payload that must be signed by an externally held Ed25519 key.
|
|
12
|
+
*
|
|
13
|
+
* Signers should display or enforce policy using `purpose`, `operationId`, `partyId`, and `synchronizerId`. Only the
|
|
14
|
+
* decoded bytes represented by `payloadHex`/`payloadBase64` are signed; the contextual fields are not part of the
|
|
15
|
+
* signed payload.
|
|
16
|
+
*/
|
|
17
|
+
export interface CantonEd25519SigningRequest {
|
|
18
|
+
readonly purpose: CantonEd25519SigningPurposeType;
|
|
19
|
+
readonly operationId: string;
|
|
20
|
+
readonly partyId: string;
|
|
21
|
+
readonly publicKeyBase64: string;
|
|
22
|
+
readonly publicKeyFingerprint: string;
|
|
23
|
+
readonly synchronizerId: string;
|
|
24
|
+
readonly payloadHex: string;
|
|
25
|
+
readonly payloadBase64: string;
|
|
26
|
+
readonly issuedAt: string;
|
|
27
|
+
readonly expiresAt: string;
|
|
28
|
+
readonly context?: CantonEd25519SigningContext;
|
|
29
|
+
}
|
|
30
|
+
export type CantonEd25519Signature = {
|
|
31
|
+
readonly signatureBase64: string;
|
|
32
|
+
} | {
|
|
33
|
+
readonly signatureHex: string;
|
|
34
|
+
} | {
|
|
35
|
+
readonly signatureBytes: Uint8Array;
|
|
36
|
+
};
|
|
37
|
+
/** Provider-neutral external key that can sign Canton topology and interactive-submission hashes. */
|
|
38
|
+
export interface CantonEd25519Signer {
|
|
39
|
+
readonly publicKeyBase64: string;
|
|
40
|
+
readonly signCantonPayload: (request: CantonEd25519SigningRequest, options?: {
|
|
41
|
+
readonly signal?: AbortSignal;
|
|
42
|
+
}) => CantonEd25519Signature | Promise<CantonEd25519Signature>;
|
|
43
|
+
}
|
|
44
|
+
export interface SignAndVerifyCantonEd25519PayloadOptions {
|
|
45
|
+
readonly signer: CantonEd25519Signer;
|
|
46
|
+
readonly purpose: CantonEd25519SigningPurposeType;
|
|
47
|
+
readonly operationId: string;
|
|
48
|
+
readonly partyId: string;
|
|
49
|
+
readonly synchronizerId: string;
|
|
50
|
+
readonly payloadHex: string;
|
|
51
|
+
readonly context?: CantonEd25519SigningContext;
|
|
52
|
+
readonly requestTtlMs?: number;
|
|
53
|
+
readonly now?: () => number;
|
|
54
|
+
readonly signal?: AbortSignal;
|
|
55
|
+
}
|
|
56
|
+
export interface SignedCantonEd25519Payload {
|
|
57
|
+
readonly request: CantonEd25519SigningRequest;
|
|
58
|
+
readonly signatureBase64: string;
|
|
59
|
+
}
|
|
60
|
+
/** Calls an external signer and independently verifies its response against the signer's declared public key. */
|
|
61
|
+
export declare function signAndVerifyCantonEd25519Payload(options: SignAndVerifyCantonEd25519PayloadOptions): Promise<SignedCantonEd25519Payload>;
|
|
62
|
+
/** Normalizes supported signer outputs into canonical, padded base64. */
|
|
63
|
+
export declare function normalizeCantonEd25519Signature(signature: CantonEd25519Signature): string;
|
|
64
|
+
//# sourceMappingURL=canton-ed25519-signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canton-ed25519-signer.d.ts","sourceRoot":"","sources":["../../../../src/utils/external-signing/canton-ed25519-signer.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,2BAA2B;aACtC,uBAAuB,EAAE,yBAAyB;aAClD,sBAAsB,EAAE,wBAAwB;CACxC,CAAC;AAEX,MAAM,MAAM,+BAA+B,GACzC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAC;AAEjF,eAAO,MAAM,6CAA6C,QAAiB,CAAC;AAC5E,eAAO,MAAM,yCAAyC,QAAkB,CAAC;AAEzE,MAAM,MAAM,gCAAgC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAChF,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,CAAC;AAErG;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;CAChD;AAED,MAAM,MAAM,sBAAsB,GAC9B;IACE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,GACD;IACE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC;CACrC,CAAC;AAEN,qGAAqG;AACrG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,OAAO,EAAE,2BAA2B,EACpC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KACxC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,iHAAiH;AACjH,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,wCAAwC,GAChD,OAAO,CAAC,0BAA0B,CAAC,CA+CrC;AAmED,yEAAyE;AACzE,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,sBAAsB,GAAG,MAAM,CAQzF"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS = exports.DEFAULT_CANTON_ED25519_SIGNING_REQUEST_TTL_MS = exports.CantonEd25519SigningPurpose = void 0;
|
|
4
|
+
exports.signAndVerifyCantonEd25519Payload = signAndVerifyCantonEd25519Payload;
|
|
5
|
+
exports.normalizeCantonEd25519Signature = normalizeCantonEd25519Signature;
|
|
6
|
+
const errors_1 = require("../../core/errors");
|
|
7
|
+
const canton_protocol_1 = require("./canton-protocol");
|
|
8
|
+
exports.CantonEd25519SigningPurpose = {
|
|
9
|
+
EXTERNAL_PARTY_TOPOLOGY: 'external-party-topology',
|
|
10
|
+
INTERACTIVE_SUBMISSION: 'interactive-submission',
|
|
11
|
+
};
|
|
12
|
+
exports.DEFAULT_CANTON_ED25519_SIGNING_REQUEST_TTL_MS = 5 * 60 * 1000;
|
|
13
|
+
exports.MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS = 15 * 60 * 1000;
|
|
14
|
+
/** Calls an external signer and independently verifies its response against the signer's declared public key. */
|
|
15
|
+
async function signAndVerifyCantonEd25519Payload(options) {
|
|
16
|
+
const purpose = validateSigningPurpose(options.purpose);
|
|
17
|
+
const operationId = validateRequiredString('operationId', options.operationId);
|
|
18
|
+
const synchronizerId = validateRequiredString('synchronizerId', options.synchronizerId);
|
|
19
|
+
const payloadHex = normalizeHexPayload(options.payloadHex);
|
|
20
|
+
const requestTtlMs = validateRequestTtlMs(options.requestTtlMs ?? exports.DEFAULT_CANTON_ED25519_SIGNING_REQUEST_TTL_MS);
|
|
21
|
+
const now = options.now ?? Date.now;
|
|
22
|
+
const issuedAtMs = validateTimestamp(now());
|
|
23
|
+
const issuedAt = new Date(issuedAtMs).toISOString();
|
|
24
|
+
const expiresAt = new Date(issuedAtMs + requestTtlMs).toISOString();
|
|
25
|
+
const context = options.context === undefined ? undefined : normalizeSigningContext(options.context);
|
|
26
|
+
const publicKeyBase64 = (0, canton_protocol_1.normalizeEd25519PublicKeyForCanton)(options.signer.publicKeyBase64);
|
|
27
|
+
const publicKeyFingerprint = (0, canton_protocol_1.assertCantonPartyMatchesPublicKey)({
|
|
28
|
+
partyId: options.partyId,
|
|
29
|
+
publicKeyBase64,
|
|
30
|
+
});
|
|
31
|
+
const request = {
|
|
32
|
+
purpose,
|
|
33
|
+
operationId,
|
|
34
|
+
partyId: options.partyId,
|
|
35
|
+
publicKeyBase64,
|
|
36
|
+
publicKeyFingerprint,
|
|
37
|
+
synchronizerId,
|
|
38
|
+
payloadHex,
|
|
39
|
+
payloadBase64: (0, canton_protocol_1.hashHexToBase64)(payloadHex),
|
|
40
|
+
issuedAt,
|
|
41
|
+
expiresAt,
|
|
42
|
+
...(context !== undefined ? { context } : {}),
|
|
43
|
+
};
|
|
44
|
+
const signatureBase64 = normalizeCantonEd25519Signature(await waitForCantonSigner(options.signer, request, requestTtlMs, options.signal));
|
|
45
|
+
if (validateTimestamp(now()) >= issuedAtMs + requestTtlMs) {
|
|
46
|
+
throw new errors_1.ValidationError('Canton Ed25519 signing request expired before the signer completed', {
|
|
47
|
+
operationId,
|
|
48
|
+
expiresAt,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
(0, canton_protocol_1.assertEd25519Signature)({
|
|
52
|
+
publicKeyBase64,
|
|
53
|
+
payload: Buffer.from(payloadHex, 'hex'),
|
|
54
|
+
signatureBase64,
|
|
55
|
+
failureMessage: 'External Canton signer returned an invalid Ed25519 signature',
|
|
56
|
+
});
|
|
57
|
+
return { request, signatureBase64 };
|
|
58
|
+
}
|
|
59
|
+
async function waitForCantonSigner(signer, request, requestTtlMs, externalSignal) {
|
|
60
|
+
if (externalSignal?.aborted) {
|
|
61
|
+
throw signingAborted(request.operationId);
|
|
62
|
+
}
|
|
63
|
+
const controller = new AbortController();
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
let settled = false;
|
|
66
|
+
const finish = (callback) => {
|
|
67
|
+
if (settled)
|
|
68
|
+
return;
|
|
69
|
+
settled = true;
|
|
70
|
+
clearTimeout(timeout);
|
|
71
|
+
externalSignal?.removeEventListener('abort', onAbort);
|
|
72
|
+
callback();
|
|
73
|
+
};
|
|
74
|
+
const onAbort = () => {
|
|
75
|
+
// Preserve a signer result that settled before abort but whose promise handler is already queued.
|
|
76
|
+
queueMicrotask(() => finish(() => reject(signingAborted(request.operationId))));
|
|
77
|
+
controller.abort();
|
|
78
|
+
};
|
|
79
|
+
const timeout = setTimeout(() => {
|
|
80
|
+
controller.abort();
|
|
81
|
+
finish(() => reject(new errors_1.ValidationError('Canton Ed25519 signing request expired before the signer completed', {
|
|
82
|
+
operationId: request.operationId,
|
|
83
|
+
expiresAt: request.expiresAt,
|
|
84
|
+
})));
|
|
85
|
+
}, requestTtlMs);
|
|
86
|
+
externalSignal?.addEventListener('abort', onAbort, { once: true });
|
|
87
|
+
if (externalSignal?.aborted) {
|
|
88
|
+
onAbort();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
queueMicrotask(() => {
|
|
92
|
+
if (settled || controller.signal.aborted) {
|
|
93
|
+
finish(() => reject(signingAborted(request.operationId)));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let pending;
|
|
97
|
+
try {
|
|
98
|
+
pending = signer.signCantonPayload(request, { signal: controller.signal });
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
finish(() => reject(error));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
Promise.resolve(pending).then((signature) => finish(() => resolve(signature)), (error) => finish(() => reject(error)));
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function signingAborted(operationId) {
|
|
109
|
+
return new errors_1.ValidationError('Canton Ed25519 signing request was aborted', { operationId });
|
|
110
|
+
}
|
|
111
|
+
/** Normalizes supported signer outputs into canonical, padded base64. */
|
|
112
|
+
function normalizeCantonEd25519Signature(signature) {
|
|
113
|
+
if ('signatureBase64' in signature) {
|
|
114
|
+
return encodeSignatureBytes(decodeBase64Signature(signature.signatureBase64));
|
|
115
|
+
}
|
|
116
|
+
if ('signatureHex' in signature) {
|
|
117
|
+
return encodeSignatureBytes(decodeHexSignature(signature.signatureHex));
|
|
118
|
+
}
|
|
119
|
+
return encodeSignatureBytes(Buffer.from(signature.signatureBytes));
|
|
120
|
+
}
|
|
121
|
+
function decodeBase64Signature(value) {
|
|
122
|
+
const normalized = value.trim().replace(/-/g, '+').replace(/_/g, '/');
|
|
123
|
+
if (!/^[A-Za-z0-9+/]+={0,2}$/.test(normalized) || normalized.length % 4 === 1) {
|
|
124
|
+
throw invalidCantonEd25519Signature();
|
|
125
|
+
}
|
|
126
|
+
const padded = normalized.padEnd(normalized.length + ((4 - (normalized.length % 4)) % 4), '=');
|
|
127
|
+
const decoded = Buffer.from(padded, 'base64');
|
|
128
|
+
if (decoded.toString('base64').replace(/=+$/, '') !== normalized.replace(/=+$/, '')) {
|
|
129
|
+
throw invalidCantonEd25519Signature();
|
|
130
|
+
}
|
|
131
|
+
return decoded;
|
|
132
|
+
}
|
|
133
|
+
function decodeHexSignature(value) {
|
|
134
|
+
const normalized = value.trim().replace(/^0x/i, '');
|
|
135
|
+
if (!/^[0-9a-fA-F]+$/.test(normalized) || normalized.length % 2 !== 0) {
|
|
136
|
+
throw invalidCantonEd25519Signature();
|
|
137
|
+
}
|
|
138
|
+
return Buffer.from(normalized, 'hex');
|
|
139
|
+
}
|
|
140
|
+
function encodeSignatureBytes(signature) {
|
|
141
|
+
if (signature.length !== 64) {
|
|
142
|
+
throw invalidCantonEd25519Signature(signature.length);
|
|
143
|
+
}
|
|
144
|
+
return signature.toString('base64');
|
|
145
|
+
}
|
|
146
|
+
function invalidCantonEd25519Signature(actualLength) {
|
|
147
|
+
return new errors_1.ValidationError('External Canton signer must return a 64-byte Ed25519 signature', {
|
|
148
|
+
...(actualLength !== undefined ? { actualLength } : {}),
|
|
149
|
+
expectedLength: 64,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function normalizeHexPayload(value) {
|
|
153
|
+
const normalized = value.trim();
|
|
154
|
+
if (!/^(?:[0-9a-fA-F]{2})+$/.test(normalized)) {
|
|
155
|
+
throw new errors_1.ValidationError('payloadHex must be non-empty, even-length hexadecimal bytes', { payloadHex: value });
|
|
156
|
+
}
|
|
157
|
+
return normalized.toLowerCase();
|
|
158
|
+
}
|
|
159
|
+
function validateRequiredString(name, value) {
|
|
160
|
+
const normalized = value.trim();
|
|
161
|
+
if (!normalized) {
|
|
162
|
+
throw new errors_1.ValidationError(`${name} is required`, { [name]: value });
|
|
163
|
+
}
|
|
164
|
+
return normalized;
|
|
165
|
+
}
|
|
166
|
+
function validateRequestTtlMs(value) {
|
|
167
|
+
if (!Number.isSafeInteger(value) || value <= 0 || value > exports.MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS) {
|
|
168
|
+
throw new errors_1.ValidationError(`requestTtlMs must be a positive safe integer no greater than ${exports.MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS}`, { requestTtlMs: value, maxRequestTtlMs: exports.MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS });
|
|
169
|
+
}
|
|
170
|
+
return value;
|
|
171
|
+
}
|
|
172
|
+
function validateTimestamp(value) {
|
|
173
|
+
const latestIssuedAtMs = 8640000000000000 - exports.MAX_CANTON_ED25519_SIGNING_REQUEST_TTL_MS;
|
|
174
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > latestIssuedAtMs) {
|
|
175
|
+
throw new errors_1.ValidationError('now must return a non-negative, valid Unix timestamp in milliseconds', { now: value });
|
|
176
|
+
}
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
function normalizeSigningContext(context) {
|
|
180
|
+
if (typeof context !== 'object' || context === null || Array.isArray(context)) {
|
|
181
|
+
throw new errors_1.ValidationError('Canton signing context must be an object of primitive JSON values');
|
|
182
|
+
}
|
|
183
|
+
const entries = [];
|
|
184
|
+
for (const [key, value] of Object.entries(context)) {
|
|
185
|
+
if (!key.trim()) {
|
|
186
|
+
throw new errors_1.ValidationError('Canton signing context keys must not be empty');
|
|
187
|
+
}
|
|
188
|
+
if (value !== null &&
|
|
189
|
+
typeof value !== 'string' &&
|
|
190
|
+
typeof value !== 'boolean' &&
|
|
191
|
+
(typeof value !== 'number' || !Number.isFinite(value))) {
|
|
192
|
+
throw new errors_1.ValidationError('Canton signing context values must be primitive JSON values', { key });
|
|
193
|
+
}
|
|
194
|
+
entries.push([key, value]);
|
|
195
|
+
}
|
|
196
|
+
// Object.fromEntries defines `__proto__` as an own data property instead of invoking Object.prototype's setter.
|
|
197
|
+
return Object.fromEntries(entries);
|
|
198
|
+
}
|
|
199
|
+
function validateSigningPurpose(value) {
|
|
200
|
+
if (value !== exports.CantonEd25519SigningPurpose.EXTERNAL_PARTY_TOPOLOGY &&
|
|
201
|
+
value !== exports.CantonEd25519SigningPurpose.INTERACTIVE_SUBMISSION) {
|
|
202
|
+
throw new errors_1.ValidationError('Unsupported Canton Ed25519 signing purpose', { purpose: value });
|
|
203
|
+
}
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=canton-ed25519-signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canton-ed25519-signer.js","sourceRoot":"","sources":["../../../../src/utils/external-signing/canton-ed25519-signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { type LedgerJsonApiClient } from '../../clients/ledger-json-api';
|
|
2
2
|
import { type InteractiveSubmissionExecuteRequest, type InteractiveSubmissionExecuteResponse } from '../../clients/ledger-json-api/schemas/api/interactive-submission';
|
|
3
3
|
export type PartySignature = InteractiveSubmissionExecuteRequest['partySignatures']['signatures'][number];
|
|
4
|
+
/** Immutable compatibility value. Use the factory below when building a submission request. */
|
|
5
|
+
export declare const DEFAULT_INTERACTIVE_SUBMISSION_DEDUPLICATION_PERIOD: Readonly<{
|
|
6
|
+
DeduplicationDuration: Readonly<{
|
|
7
|
+
value: Readonly<{
|
|
8
|
+
duration: "30s";
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
/** Returns an isolated default deduplication period for one interactive submission. */
|
|
13
|
+
export declare function createDefaultInteractiveSubmissionDeduplicationPeriod(): {
|
|
14
|
+
DeduplicationDuration: {
|
|
15
|
+
value: {
|
|
16
|
+
duration: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
4
20
|
export interface ExecuteExternalTransactionOptions {
|
|
5
21
|
readonly ledgerClient: LedgerJsonApiClient;
|
|
6
22
|
readonly userId: string;
|
|
@@ -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;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
|
+
{"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,+FAA+F;AAC/F,eAAO,MAAM,mDAAmD;;;;;;EAIoB,CAAC;AAErF,uFAAuF;AACvF,wBAAgB,qDAAqD,IAAI;IACvE,qBAAqB,EAAE;QAAE,KAAK,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CACxD,CAMA;AAED,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,8 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_INTERACTIVE_SUBMISSION_DEDUPLICATION_PERIOD = void 0;
|
|
4
|
+
exports.createDefaultInteractiveSubmissionDeduplicationPeriod = createDefaultInteractiveSubmissionDeduplicationPeriod;
|
|
3
5
|
exports.executeExternalTransaction = executeExternalTransaction;
|
|
4
6
|
exports.executeExternalTransactionAndWait = executeExternalTransactionAndWait;
|
|
5
7
|
const canton_response_utils_1 = require("../canton-response-utils");
|
|
8
|
+
/** Immutable compatibility value. Use the factory below when building a submission request. */
|
|
9
|
+
exports.DEFAULT_INTERACTIVE_SUBMISSION_DEDUPLICATION_PERIOD = Object.freeze({
|
|
10
|
+
DeduplicationDuration: Object.freeze({
|
|
11
|
+
value: Object.freeze({ duration: '30s' }),
|
|
12
|
+
}),
|
|
13
|
+
});
|
|
14
|
+
/** Returns an isolated default deduplication period for one interactive submission. */
|
|
15
|
+
function createDefaultInteractiveSubmissionDeduplicationPeriod() {
|
|
16
|
+
return {
|
|
17
|
+
DeduplicationDuration: {
|
|
18
|
+
value: { duration: exports.DEFAULT_INTERACTIVE_SUBMISSION_DEDUPLICATION_PERIOD.DeduplicationDuration.value.duration },
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
6
22
|
/**
|
|
7
23
|
* Executes an interactive submission after offline signing (`interactiveSubmissionExecute`).
|
|
8
24
|
*
|
|
@@ -35,11 +51,7 @@ function buildExecuteExternalTransactionRequest(options) {
|
|
|
35
51
|
preparedTransaction: options.preparedTransaction,
|
|
36
52
|
hashingSchemeVersion: options.hashingSchemeVersion ?? 'HASHING_SCHEME_VERSION_V2',
|
|
37
53
|
submissionId: options.submissionId,
|
|
38
|
-
deduplicationPeriod: options.deduplicationPeriod ??
|
|
39
|
-
DeduplicationDuration: {
|
|
40
|
-
value: { duration: '30s' },
|
|
41
|
-
},
|
|
42
|
-
},
|
|
54
|
+
deduplicationPeriod: options.deduplicationPeriod ?? createDefaultInteractiveSubmissionDeduplicationPeriod(),
|
|
43
55
|
partySignatures: {
|
|
44
56
|
signatures: [...options.partySignatures],
|
|
45
57
|
},
|
|
@@ -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":";;;;;;AAKA,oEAA6E;AAI7E,+FAA+F;AAClF,QAAA,mDAAmD,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/E,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC;QACnC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC;CACH,CAAmF,CAAC;AAErF,uFAAuF;AACvF;IAGE,OAAO;QACL,qBAAqB,EAAE;YACrB,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAA,mDAAmD,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE;SAC9G;KACgF,CAAC;AACtF,CAAC;AAiBD;;;;;GAKG;AACI,KAAK,qCACV,OAA0C;IAE1C,OAAO,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED;;;;;GAKG;AACI,KAAK,4CACV,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,qDAAqD,EAAE;QAC3G,eAAe,EAAE;YACf,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;SACzC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-party-details.d.ts","sourceRoot":"","sources":["../../../../src/utils/external-signing/external-party-details.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYlH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readMatchingExternalPartyDetails = readMatchingExternalPartyDetails;
|
|
4
|
+
const utils_1 = require("../../core/utils");
|
|
5
|
+
/** Reads the first valid party-details record, optionally requiring one exact party id. */
|
|
6
|
+
function readMatchingExternalPartyDetails(source, partyId) {
|
|
7
|
+
if (!(0, utils_1.isRecord)(source))
|
|
8
|
+
return null;
|
|
9
|
+
const { partyDetails } = source;
|
|
10
|
+
const details = Array.isArray(partyDetails) ? partyDetails : [partyDetails];
|
|
11
|
+
for (const detail of details) {
|
|
12
|
+
if (!(0, utils_1.isRecord)(detail))
|
|
13
|
+
continue;
|
|
14
|
+
const { party } = detail;
|
|
15
|
+
if (typeof party !== 'string' || !party.trim())
|
|
16
|
+
continue;
|
|
17
|
+
if (partyId !== undefined && party !== partyId)
|
|
18
|
+
continue;
|
|
19
|
+
return detail;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=external-party-details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-party-details.js","sourceRoot":"","sources":["../../../../src/utils/external-signing/external-party-details.ts"],"names":[],"mappings":";;;AAAA,4CAA4C;AAE5C,2FAA2F;AAC3F,0CAAiD,MAAe,EAAE,OAAgB;IAChF,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAChC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC;YAAE,SAAS;QAChC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,SAAS;QACzD,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;YAAE,SAAS;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|