@bitgo-beta/sdk-coin-canton 1.0.1-beta.82 → 1.0.1-beta.821
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/src/canton.d.ts +22 -1
- package/dist/src/canton.d.ts.map +1 -1
- package/dist/src/canton.js +293 -10
- package/dist/src/cantonToken.d.ts +19 -0
- package/dist/src/cantonToken.d.ts.map +1 -0
- package/dist/src/cantonToken.js +52 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/allocationAllocateBuilder.d.ts +126 -0
- package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationAllocateBuilder.js +248 -0
- package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts +67 -0
- package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationAllocateWithdrawnBuilder.js +130 -0
- package/dist/src/lib/allocationRejectBuilder.d.ts +51 -0
- package/dist/src/lib/allocationRejectBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationRejectBuilder.js +107 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts +116 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationRequestBuilder.js +243 -0
- package/dist/src/lib/amount.d.ts +8 -0
- package/dist/src/lib/amount.d.ts.map +1 -0
- package/dist/src/lib/amount.js +33 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts +72 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/src/lib/cantonCommandBuilder.js +173 -0
- package/dist/src/lib/clearSigning.d.ts +58 -0
- package/dist/src/lib/clearSigning.d.ts.map +1 -0
- package/dist/src/lib/clearSigning.js +66 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts +56 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts.map +1 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.js +112 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.d.ts +60 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.d.ts.map +1 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.js +111 -0
- package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts +58 -0
- package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
- package/dist/src/lib/endInvestorOnboardingOfferBuilder.js +112 -0
- package/dist/src/lib/iface.d.ts +141 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +3 -1
- package/dist/src/lib/index.d.ts +13 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +29 -2
- package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
- package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
- package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
- package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
- package/dist/src/lib/messages/index.d.ts +5 -0
- package/dist/src/lib/messages/index.d.ts.map +1 -0
- package/dist/src/lib/messages/index.js +21 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +8 -0
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -1
- package/dist/src/lib/oneStepPreApprovalBuilder.js +15 -1
- package/dist/src/lib/resourcesInterface.d.ts +1 -1
- package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
- package/dist/src/lib/resourcesInterface.js +1 -1
- package/dist/src/lib/transaction/transaction.d.ts +17 -1
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +307 -16
- package/dist/src/lib/transactionBuilderFactory.d.ts +22 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +78 -1
- package/dist/src/lib/transferAcknowledgeBuilder.d.ts +4 -4
- package/dist/src/lib/transferAcknowledgeBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferAcknowledgeBuilder.js +5 -7
- package/dist/src/lib/transferBuilder.d.ts +84 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +164 -2
- package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts +67 -0
- package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferOfferWithdrawnBuilder.js +130 -0
- package/dist/src/lib/transferPreapprovalCancelBuilder.d.ts +68 -0
- package/dist/src/lib/transferPreapprovalCancelBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferPreapprovalCancelBuilder.js +124 -0
- package/dist/src/lib/utils.d.ts +45 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +776 -66
- package/dist/src/lib/walletInitBuilder.d.ts +2 -1
- package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
- package/dist/src/lib/walletInitBuilder.js +4 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +2 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.js +14 -1
- package/dist/src/register.d.ts +2 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +19 -2
- package/dist/test/helper.d.ts +3 -0
- package/dist/test/helper.d.ts.map +1 -0
- package/dist/test/helper.js +9 -0
- package/dist/test/integration/canton.integration.d.ts +2 -0
- package/dist/test/integration/canton.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.integration.js +157 -0
- package/dist/test/integration/canton.token.integration.d.ts +2 -0
- package/dist/test/integration/canton.token.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.token.integration.js +51 -0
- package/dist/test/resources.d.ts +263 -2
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +269 -7
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +368 -0
- package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.js +133 -0
- package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.js +121 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +437 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +340 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +116 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.js +74 -0
- package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts +2 -0
- package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.js +116 -0
- package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +20 -1
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transfer/transferBuilder.js +100 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +65 -1
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.js +34 -1
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.js +64 -0
- package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.js +74 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +41 -1
- package/dist/test/unit/canton.d.ts +2 -0
- package/dist/test/unit/canton.d.ts.map +1 -0
- package/dist/test/unit/canton.js +853 -0
- package/dist/test/unit/index.d.ts +5 -0
- package/dist/test/unit/index.d.ts.map +1 -1
- package/dist/test/unit/index.js +6 -1
- package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
- package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
- package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
- package/dist/test/unit/messages/clearSigning.d.ts +2 -0
- package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
- package/dist/test/unit/messages/clearSigning.js +72 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +65 -0
- package/dist/test/unit/utils.js +389 -9
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAKhB,OAAO,UAAU,CAAC;AAClB,OAAO,yBAAyB,CAAC;AACjC,OAAO,yCAAyC,CAAC;AACjD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,kCAAkC,CAAC"}
|
package/dist/test/unit/index.js
CHANGED
|
@@ -4,6 +4,11 @@ require("should");
|
|
|
4
4
|
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
5
5
|
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
6
6
|
const src_1 = require("../../src");
|
|
7
|
+
require("./canton");
|
|
8
|
+
require("./messages/clearSigning");
|
|
9
|
+
require("./messages/cantonSignTransactionMessage");
|
|
10
|
+
require("./messages/cantonSignTopologyMessage");
|
|
11
|
+
require("./messages/messageBuilderFactory");
|
|
7
12
|
describe('Canton:', function () {
|
|
8
13
|
let bitgo;
|
|
9
14
|
before(function () {
|
|
@@ -13,4 +18,4 @@ describe('Canton:', function () {
|
|
|
13
18
|
bitgo.initializeTestVars();
|
|
14
19
|
});
|
|
15
20
|
});
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsaURBQStDO0FBQy9DLG1EQUErRDtBQUMvRCxtQ0FBNEM7QUFFNUMsb0JBQWtCO0FBQ2xCLG1DQUFpQztBQUNqQyxtREFBaUQ7QUFDakQsZ0RBQThDO0FBQzlDLDRDQUEwQztBQUUxQyxRQUFRLENBQUMsU0FBUyxFQUFFO0lBQ2xCLElBQUksS0FBbUIsQ0FBQztJQUV4QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IENhbnRvbiwgVGNhbnRvbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCAnLi9jYW50b24nO1xuaW1wb3J0ICcuL21lc3NhZ2VzL2NsZWFyU2lnbmluZyc7XG5pbXBvcnQgJy4vbWVzc2FnZXMvY2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZSc7XG5pbXBvcnQgJy4vbWVzc2FnZXMvY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZSc7XG5pbXBvcnQgJy4vbWVzc2FnZXMvbWVzc2FnZUJ1aWxkZXJGYWN0b3J5JztcblxuZGVzY3JpYmUoJ0NhbnRvbjonLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonSignTopologyMessage.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/cantonSignTopologyMessage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const cantonSignTopologyMessage_1 = require("../../../src/lib/messages/cantonSignTopology/cantonSignTopologyMessage");
|
|
10
|
+
// A real base64-encoded topology hash (multiHash from GenerateTopologyResponse).
|
|
11
|
+
const SAMPLE_TOPOLOGY_HASH = 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/B/u+OGR+npg==';
|
|
12
|
+
function makeOptions(payload = SAMPLE_TOPOLOGY_HASH) {
|
|
13
|
+
return { coinConfig: {}, payload };
|
|
14
|
+
}
|
|
15
|
+
describe('CantonSignTopologyMessage', function () {
|
|
16
|
+
describe('constructor', function () {
|
|
17
|
+
it('should set type to CANTON_SIGN_TOPOLOGY', function () {
|
|
18
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage(makeOptions());
|
|
19
|
+
msg.getType().should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
20
|
+
});
|
|
21
|
+
it('should store the payload', function () {
|
|
22
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage(makeOptions());
|
|
23
|
+
msg.getPayload().should.equal(SAMPLE_TOPOLOGY_HASH);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('getSignablePayload', function () {
|
|
27
|
+
it('should decode base64 topology hash to raw bytes', async function () {
|
|
28
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage(makeOptions());
|
|
29
|
+
const signable = await msg.getSignablePayload();
|
|
30
|
+
should_1.default.ok(Buffer.isBuffer(signable));
|
|
31
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(SAMPLE_TOPOLOGY_HASH, 'base64'));
|
|
32
|
+
});
|
|
33
|
+
it('should produce same byte structure as CANTON_SIGN_TRANSACTION for equivalent hash', async function () {
|
|
34
|
+
// Both message types decode base64 → raw bytes identically; the type is the HSM format discriminator
|
|
35
|
+
const hash = 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/B/u+OGR+npg==';
|
|
36
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage({ coinConfig: {}, payload: hash });
|
|
37
|
+
const signable = await msg.getSignablePayload();
|
|
38
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(hash, 'base64'));
|
|
39
|
+
});
|
|
40
|
+
it('should throw when payload is missing', async function () {
|
|
41
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage({ ...makeOptions(), payload: '' });
|
|
42
|
+
await msg.getSignablePayload().should.be.rejectedWith('Message payload is missing');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixtREFBMkU7QUFDM0Usc0hBQW1IO0FBRW5ILGlGQUFpRjtBQUNqRixNQUFNLG9CQUFvQixHQUFHLGtEQUFrRCxDQUFDO0FBRWhGLFNBQVMsV0FBVyxDQUFDLE9BQU8sR0FBRyxvQkFBb0I7SUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtJQUNwQyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLO1lBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUkscURBQXlCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxLQUFLO1lBQzNGLHFHQUFxRztZQUNyRyxNQUFNLElBQUksR0FBRyxrREFBa0QsQ0FBQztZQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRixNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1lBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUkscURBQXlCLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBNZXNzYWdlT3B0aW9ucywgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL2NhbnRvblNpZ25Ub3BvbG9neS9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlJztcblxuLy8gQSByZWFsIGJhc2U2NC1lbmNvZGVkIHRvcG9sb2d5IGhhc2ggKG11bHRpSGFzaCBmcm9tIEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZSkuXG5jb25zdCBTQU1QTEVfVE9QT0xPR1lfSEFTSCA9ICdFaURRa3krVXhvMnpFd0ZwK0phYmVheklMTU1kN1FSNjM5L0IvdStPR1IrbnBnPT0nO1xuXG5mdW5jdGlvbiBtYWtlT3B0aW9ucyhwYXlsb2FkID0gU0FNUExFX1RPUE9MT0dZX0hBU0gpOiBNZXNzYWdlT3B0aW9ucyB7XG4gIHJldHVybiB7IGNvaW5Db25maWc6IHt9IGFzIGFueSwgcGF5bG9hZCB9O1xufVxuXG5kZXNjcmliZSgnQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHR5cGUgdG8gQ0FOVE9OX1NJR05fVE9QT0xPR1knLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIG1zZy5nZXRUeXBlKCkuc2hvdWxkLmVxdWFsKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVE9QT0xPR1kpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdG9yZSB0aGUgcGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgbXNnLmdldFBheWxvYWQoKS5zaG91bGQuZXF1YWwoU0FNUExFX1RPUE9MT0dZX0hBU0gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVjb2RlIGJhc2U2NCB0b3BvbG9neSBoYXNoIHRvIHJhdyBieXRlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtc2cuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBzaG91bGQub2soQnVmZmVyLmlzQnVmZmVyKHNpZ25hYmxlKSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25hYmxlIGFzIEJ1ZmZlciwgQnVmZmVyLmZyb20oU0FNUExFX1RPUE9MT0dZX0hBU0gsICdiYXNlNjQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2Ugc2FtZSBieXRlIHN0cnVjdHVyZSBhcyBDQU5UT05fU0lHTl9UUkFOU0FDVElPTiBmb3IgZXF1aXZhbGVudCBoYXNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQm90aCBtZXNzYWdlIHR5cGVzIGRlY29kZSBiYXNlNjQg4oaSIHJhdyBieXRlcyBpZGVudGljYWxseTsgdGhlIHR5cGUgaXMgdGhlIEhTTSBmb3JtYXQgZGlzY3JpbWluYXRvclxuICAgICAgY29uc3QgaGFzaCA9ICdFaURRa3krVXhvMnpFd0ZwK0phYmVheklMTU1kN1FSNjM5L0IvdStPR1IrbnBnPT0nO1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2UoeyBjb2luQ29uZmlnOiB7fSBhcyBhbnksIHBheWxvYWQ6IGhhc2ggfSk7XG4gICAgICBjb25zdCBzaWduYWJsZSA9IGF3YWl0IG1zZy5nZXRTaWduYWJsZVBheWxvYWQoKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2lnbmFibGUgYXMgQnVmZmVyLCBCdWZmZXIuZnJvbShoYXNoLCAnYmFzZTY0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHBheWxvYWQgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlKHsgLi4ubWFrZU9wdGlvbnMoKSwgcGF5bG9hZDogJycgfSk7XG4gICAgICBhd2FpdCBtc2cuZ2V0U2lnbmFibGVQYXlsb2FkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnTWVzc2FnZSBwYXlsb2FkIGlzIG1pc3NpbmcnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonSignTransactionMessage.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/cantonSignTransactionMessage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const cantonSignTransactionMessage_1 = require("../../../src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage");
|
|
10
|
+
// A real base64-encoded preparedTransactionHash from Canton's prepareSubmission response.
|
|
11
|
+
// This is exactly what Canton's signTransaction sends as txHash.
|
|
12
|
+
const SAMPLE_TX_HASH = '7Ey4Q2TqWQcK1eAl6p15UT02M4mx92Tvo9ifvtzlm5o=';
|
|
13
|
+
function makeOptions(payload = SAMPLE_TX_HASH) {
|
|
14
|
+
return { coinConfig: {}, payload };
|
|
15
|
+
}
|
|
16
|
+
describe('CantonSignTransactionMessage', function () {
|
|
17
|
+
describe('constructor', function () {
|
|
18
|
+
it('should set type to CANTON_SIGN_TRANSACTION', function () {
|
|
19
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
20
|
+
msg.getType().should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
|
|
21
|
+
});
|
|
22
|
+
it('should store the payload', function () {
|
|
23
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
24
|
+
msg.getPayload().should.equal(SAMPLE_TX_HASH);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('getSignablePayload', function () {
|
|
28
|
+
it('should decode base64 txHash to raw bytes', async function () {
|
|
29
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
30
|
+
const signable = await msg.getSignablePayload();
|
|
31
|
+
should_1.default.ok(Buffer.isBuffer(signable));
|
|
32
|
+
// Decoding the base64 txHash and re-encoding should round-trip
|
|
33
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(SAMPLE_TX_HASH, 'base64'));
|
|
34
|
+
});
|
|
35
|
+
it('should produce the same bytes as the transaction signablePayload in normal tx flow', async function () {
|
|
36
|
+
// In the normal tx flow: Buffer.from(preparedTransactionHash, 'base64')
|
|
37
|
+
// txHash IS the preparedTransactionHash — they must be identical
|
|
38
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
39
|
+
const signable = await msg.getSignablePayload();
|
|
40
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(SAMPLE_TX_HASH, 'base64'));
|
|
41
|
+
});
|
|
42
|
+
it('should throw when payload is missing', async function () {
|
|
43
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage({ ...makeOptions(), payload: '' });
|
|
44
|
+
await msg.getSignablePayload().should.be.rejectedWith('Message payload is missing');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9tZXNzYWdlcy9jYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixtREFBMkU7QUFDM0UsK0hBQTRIO0FBRTVILDBGQUEwRjtBQUMxRixpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQUcsOENBQThDLENBQUM7QUFFdEUsU0FBUyxXQUFXLENBQUMsT0FBTyxHQUFHLGNBQWM7SUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtJQUN2QyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNoRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsK0RBQStEO1lBQy9ELGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxLQUFLO1lBQzVGLHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSwyREFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDaEQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEtBQUs7WUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSwyREFBNEIsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEYsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IE1lc3NhZ2VPcHRpb25zLCBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvbWVzc2FnZXMvY2FudG9uU2lnblRyYW5zYWN0aW9uL2NhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UnO1xuXG4vLyBBIHJlYWwgYmFzZTY0LWVuY29kZWQgcHJlcGFyZWRUcmFuc2FjdGlvbkhhc2ggZnJvbSBDYW50b24ncyBwcmVwYXJlU3VibWlzc2lvbiByZXNwb25zZS5cbi8vIFRoaXMgaXMgZXhhY3RseSB3aGF0IENhbnRvbidzIHNpZ25UcmFuc2FjdGlvbiBzZW5kcyBhcyB0eEhhc2guXG5jb25zdCBTQU1QTEVfVFhfSEFTSCA9ICc3RXk0UTJUcVdRY0sxZUFsNnAxNVVUMDJNNG14OTJUdm85aWZ2dHpsbTVvPSc7XG5cbmZ1bmN0aW9uIG1ha2VPcHRpb25zKHBheWxvYWQgPSBTQU1QTEVfVFhfSEFTSCk6IE1lc3NhZ2VPcHRpb25zIHtcbiAgcmV0dXJuIHsgY29pbkNvbmZpZzoge30gYXMgYW55LCBwYXlsb2FkIH07XG59XG5cbmRlc2NyaWJlKCdDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdHlwZSB0byBDQU5UT05fU0lHTl9UUkFOU0FDVElPTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgbXNnLmdldFR5cGUoKS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UUkFOU0FDVElPTik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN0b3JlIHRoZSBwYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UobWFrZU9wdGlvbnMoKSk7XG4gICAgICBtc2cuZ2V0UGF5bG9hZCgpLnNob3VsZC5lcXVhbChTQU1QTEVfVFhfSEFTSCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTaWduYWJsZVBheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgYmFzZTY0IHR4SGFzaCB0byByYXcgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIGNvbnN0IHNpZ25hYmxlID0gYXdhaXQgbXNnLmdldFNpZ25hYmxlUGF5bG9hZCgpO1xuICAgICAgc2hvdWxkLm9rKEJ1ZmZlci5pc0J1ZmZlcihzaWduYWJsZSkpO1xuICAgICAgLy8gRGVjb2RpbmcgdGhlIGJhc2U2NCB0eEhhc2ggYW5kIHJlLWVuY29kaW5nIHNob3VsZCByb3VuZC10cmlwXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25hYmxlIGFzIEJ1ZmZlciwgQnVmZmVyLmZyb20oU0FNUExFX1RYX0hBU0gsICdiYXNlNjQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgYnl0ZXMgYXMgdGhlIHRyYW5zYWN0aW9uIHNpZ25hYmxlUGF5bG9hZCBpbiBub3JtYWwgdHggZmxvdycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEluIHRoZSBub3JtYWwgdHggZmxvdzogQnVmZmVyLmZyb20ocHJlcGFyZWRUcmFuc2FjdGlvbkhhc2gsICdiYXNlNjQnKVxuICAgICAgLy8gdHhIYXNoIElTIHRoZSBwcmVwYXJlZFRyYW5zYWN0aW9uSGFzaCDigJQgdGhleSBtdXN0IGJlIGlkZW50aWNhbFxuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UobWFrZU9wdGlvbnMoKSk7XG4gICAgICBjb25zdCBzaWduYWJsZSA9IGF3YWl0IG1zZy5nZXRTaWduYWJsZVBheWxvYWQoKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2lnbmFibGUgYXMgQnVmZmVyLCBCdWZmZXIuZnJvbShTQU1QTEVfVFhfSEFTSCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBwYXlsb2FkIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZSh7IC4uLm1ha2VPcHRpb25zKCksIHBheWxvYWQ6ICcnIH0pO1xuICAgICAgYXdhaXQgbXNnLmdldFNpZ25hYmxlUGF5bG9hZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01lc3NhZ2UgcGF5bG9hZCBpcyBtaXNzaW5nJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearSigning.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/clearSigning.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const clearSigning_1 = require("../../../src/lib/clearSigning");
|
|
10
|
+
const resources_1 = require("../../resources");
|
|
11
|
+
// A single topology transaction byte string — not a PreparedTransaction proto
|
|
12
|
+
const TOPOLOGY_TX = resources_1.GenerateTopologyResponse.topologyTransactions[0];
|
|
13
|
+
describe('Canton clearSigning', function () {
|
|
14
|
+
describe('detectCantonSigningPayloadType', function () {
|
|
15
|
+
it('should detect a Daml prepared transaction as CANTON_SIGN_TRANSACTION', function () {
|
|
16
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(resources_1.PreparedTransactionRawData);
|
|
17
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
|
|
18
|
+
});
|
|
19
|
+
it('should detect a topology transaction as CANTON_SIGN_TOPOLOGY', function () {
|
|
20
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(TOPOLOGY_TX);
|
|
21
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
22
|
+
});
|
|
23
|
+
it('should return CANTON_SIGN_TOPOLOGY for bytes that fail proto parsing', function () {
|
|
24
|
+
// Random base64 that is not a valid PreparedTransaction proto
|
|
25
|
+
const randomBytes = Buffer.from('not-a-valid-proto-payload').toString('base64');
|
|
26
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(randomBytes);
|
|
27
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
28
|
+
});
|
|
29
|
+
it('should return CANTON_SIGN_TOPOLOGY for empty bytes', function () {
|
|
30
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(Buffer.alloc(0).toString('base64'));
|
|
31
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('decodePreparedTransaction — invalid input', function () {
|
|
35
|
+
it('should throw a descriptive error when called with topology bytes', function () {
|
|
36
|
+
should_1.default.throws(() => (0, clearSigning_1.decodePreparedTransaction)(TOPOLOGY_TX), /not a Daml PreparedTransaction.*detectCantonSigningPayloadType/);
|
|
37
|
+
});
|
|
38
|
+
it('should throw a descriptive error when called with random bytes', function () {
|
|
39
|
+
const randomBytes = Buffer.from('not-a-valid-proto-payload').toString('base64');
|
|
40
|
+
should_1.default.throws(() => (0, clearSigning_1.decodePreparedTransaction)(randomBytes), /not a Daml PreparedTransaction.*detectCantonSigningPayloadType/);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('decodePreparedTransaction', function () {
|
|
44
|
+
it('should decode a prepared transaction and return structured command info', function () {
|
|
45
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
46
|
+
should_1.default.exist(decoded);
|
|
47
|
+
should_1.default.exist(decoded.kind);
|
|
48
|
+
should_1.default.exist(decoded.templateId);
|
|
49
|
+
should_1.default.exist(decoded.templateId.moduleName);
|
|
50
|
+
should_1.default.exist(decoded.templateId.entityName);
|
|
51
|
+
should_1.default.exist(decoded.argument);
|
|
52
|
+
});
|
|
53
|
+
it('decoded templateId should have module and entity name fields', function () {
|
|
54
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
55
|
+
decoded.templateId.moduleName.should.be.a.String().and.not.empty();
|
|
56
|
+
decoded.templateId.entityName.should.be.a.String().and.not.empty();
|
|
57
|
+
});
|
|
58
|
+
it('decoded kind should be CreateCommand or ExerciseCommand', function () {
|
|
59
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
60
|
+
assert_1.default.ok(decoded.kind === 'CreateCommand' || decoded.kind === 'ExerciseCommand', `expected CreateCommand or ExerciseCommand, got: ${decoded.kind}`);
|
|
61
|
+
});
|
|
62
|
+
it('ExerciseCommand should include choice and actingParties', function () {
|
|
63
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
64
|
+
if (decoded.kind === 'ExerciseCommand') {
|
|
65
|
+
should_1.default.exist(decoded.choice);
|
|
66
|
+
should_1.default.exist(decoded.actingParties);
|
|
67
|
+
decoded.actingParties.should.be.an.Array();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXJTaWduaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL2NsZWFyU2lnbmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsbURBQTJEO0FBQzNELGdFQUEwRztBQUMxRywrQ0FBdUY7QUFFdkYsOEVBQThFO0FBQzlFLE1BQU0sV0FBVyxHQUFHLG9DQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXJFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixRQUFRLENBQUMsZ0NBQWdDLEVBQUU7UUFDekMsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLElBQUEsNkNBQThCLEVBQUMsc0NBQTBCLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUEsNkNBQThCLEVBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRTtZQUN6RSw4REFBOEQ7WUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRixNQUFNLElBQUksR0FBRyxJQUFBLDZDQUE4QixFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUFtQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBQSw2Q0FBOEIsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUFtQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQ0FBMkMsRUFBRTtRQUNwRCxFQUFFLENBQUMsa0VBQWtFLEVBQUU7WUFDckUsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsSUFBQSx3Q0FBeUIsRUFBQyxXQUFXLENBQUMsRUFDNUMsZ0VBQWdFLENBQ2pFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRTtZQUNuRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hGLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLElBQUEsd0NBQXlCLEVBQUMsV0FBVyxDQUFDLEVBQzVDLGdFQUFnRSxDQUNqRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxFQUFFLENBQUMseUVBQXlFLEVBQUU7WUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBQSx3Q0FBeUIsRUFBQyxzQ0FBMEIsQ0FBQyxDQUFDO1lBQ3RFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFBLHdDQUF5QixFQUFDLHNDQUEwQixDQUFDLENBQUM7WUFDdEUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuRSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUEsd0NBQXlCLEVBQUMsc0NBQTBCLENBQUMsQ0FBQztZQUN0RSxnQkFBTSxDQUFDLEVBQUUsQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUN0RSxtREFBbUQsT0FBTyxDQUFDLElBQUksRUFBRSxDQUNsRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBQSx3Q0FBeUIsRUFBQyxzQ0FBMEIsQ0FBQyxDQUFDO1lBQ3RFLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN2QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLGFBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZSwgZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvY2xlYXJTaWduaW5nJztcbmltcG9ydCB7IFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhLCBHZW5lcmF0ZVRvcG9sb2d5UmVzcG9uc2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuXG4vLyBBIHNpbmdsZSB0b3BvbG9neSB0cmFuc2FjdGlvbiBieXRlIHN0cmluZyDigJQgbm90IGEgUHJlcGFyZWRUcmFuc2FjdGlvbiBwcm90b1xuY29uc3QgVE9QT0xPR1lfVFggPSBHZW5lcmF0ZVRvcG9sb2d5UmVzcG9uc2UudG9wb2xvZ3lUcmFuc2FjdGlvbnNbMF07XG5cbmRlc2NyaWJlKCdDYW50b24gY2xlYXJTaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGEgRGFtbCBwcmVwYXJlZCB0cmFuc2FjdGlvbiBhcyBDQU5UT05fU0lHTl9UUkFOU0FDVElPTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUoUHJlcGFyZWRUcmFuc2FjdGlvblJhd0RhdGEpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UUkFOU0FDVElPTik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBhIHRvcG9sb2d5IHRyYW5zYWN0aW9uIGFzIENBTlRPTl9TSUdOX1RPUE9MT0dZJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHlwZSA9IGRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZShUT1BPTE9HWV9UWCk7XG4gICAgICB0eXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIENBTlRPTl9TSUdOX1RPUE9MT0dZIGZvciBieXRlcyB0aGF0IGZhaWwgcHJvdG8gcGFyc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJhbmRvbSBiYXNlNjQgdGhhdCBpcyBub3QgYSB2YWxpZCBQcmVwYXJlZFRyYW5zYWN0aW9uIHByb3RvXG4gICAgICBjb25zdCByYW5kb21CeXRlcyA9IEJ1ZmZlci5mcm9tKCdub3QtYS12YWxpZC1wcm90by1wYXlsb2FkJykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgY29uc3QgdHlwZSA9IGRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZShyYW5kb21CeXRlcyk7XG4gICAgICB0eXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIENBTlRPTl9TSUdOX1RPUE9MT0dZIGZvciBlbXB0eSBieXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUoQnVmZmVyLmFsbG9jKDApLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICB0eXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24g4oCUIGludmFsaWQgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhIGRlc2NyaXB0aXZlIGVycm9yIHdoZW4gY2FsbGVkIHdpdGggdG9wb2xvZ3kgYnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFRPUE9MT0dZX1RYKSxcbiAgICAgICAgL25vdCBhIERhbWwgUHJlcGFyZWRUcmFuc2FjdGlvbi4qZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIHJhbmRvbSBieXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJhbmRvbUJ5dGVzID0gQnVmZmVyLmZyb20oJ25vdC1hLXZhbGlkLXByb3RvLXBheWxvYWQnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKHJhbmRvbUJ5dGVzKSxcbiAgICAgICAgL25vdCBhIERhbWwgUHJlcGFyZWRUcmFuc2FjdGlvbi4qZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgYSBwcmVwYXJlZCB0cmFuc2FjdGlvbiBhbmQgcmV0dXJuIHN0cnVjdHVyZWQgY29tbWFuZCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24oUHJlcGFyZWRUcmFuc2FjdGlvblJhd0RhdGEpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQua2luZCk7XG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZC50ZW1wbGF0ZUlkKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLnRlbXBsYXRlSWQubW9kdWxlTmFtZSk7XG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZC50ZW1wbGF0ZUlkLmVudGl0eU5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQuYXJndW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY29kZWQgdGVtcGxhdGVJZCBzaG91bGQgaGF2ZSBtb2R1bGUgYW5kIGVudGl0eSBuYW1lIGZpZWxkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIGRlY29kZWQudGVtcGxhdGVJZC5tb2R1bGVOYW1lLnNob3VsZC5iZS5hLlN0cmluZygpLmFuZC5ub3QuZW1wdHkoKTtcbiAgICAgIGRlY29kZWQudGVtcGxhdGVJZC5lbnRpdHlOYW1lLnNob3VsZC5iZS5hLlN0cmluZygpLmFuZC5ub3QuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVkIGtpbmQgc2hvdWxkIGJlIENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24oUHJlcGFyZWRUcmFuc2FjdGlvblJhd0RhdGEpO1xuICAgICAgYXNzZXJ0Lm9rKFxuICAgICAgICBkZWNvZGVkLmtpbmQgPT09ICdDcmVhdGVDb21tYW5kJyB8fCBkZWNvZGVkLmtpbmQgPT09ICdFeGVyY2lzZUNvbW1hbmQnLFxuICAgICAgICBgZXhwZWN0ZWQgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQsIGdvdDogJHtkZWNvZGVkLmtpbmR9YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdFeGVyY2lzZUNvbW1hbmQgc2hvdWxkIGluY2x1ZGUgY2hvaWNlIGFuZCBhY3RpbmdQYXJ0aWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24oUHJlcGFyZWRUcmFuc2FjdGlvblJhd0RhdGEpO1xuICAgICAgaWYgKGRlY29kZWQua2luZCA9PT0gJ0V4ZXJjaXNlQ29tbWFuZCcpIHtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQuY2hvaWNlKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQuYWN0aW5nUGFydGllcyk7XG4gICAgICAgIGRlY29kZWQuYWN0aW5nUGFydGllcyEuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/messageBuilderFactory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const messageBuilderFactory_1 = require("../../../src/lib/messages/messageBuilderFactory");
|
|
9
|
+
const cantonSignTransactionMessageBuilder_1 = require("../../../src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder");
|
|
10
|
+
const cantonSignTopologyMessageBuilder_1 = require("../../../src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder");
|
|
11
|
+
describe('Canton MessageBuilderFactory', function () {
|
|
12
|
+
let factory;
|
|
13
|
+
beforeEach(function () {
|
|
14
|
+
factory = new messageBuilderFactory_1.MessageBuilderFactory({ name: 'canton' });
|
|
15
|
+
});
|
|
16
|
+
describe('getMessageBuilder', function () {
|
|
17
|
+
it('should return CantonSignTransactionMessageBuilder for CANTON_SIGN_TRANSACTION', function () {
|
|
18
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
|
|
19
|
+
should_1.default.exist(builder);
|
|
20
|
+
builder.should.be.instanceof(cantonSignTransactionMessageBuilder_1.CantonSignTransactionMessageBuilder);
|
|
21
|
+
});
|
|
22
|
+
it('should return CantonSignTopologyMessageBuilder for CANTON_SIGN_TOPOLOGY', function () {
|
|
23
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
24
|
+
should_1.default.exist(builder);
|
|
25
|
+
builder.should.be.instanceof(cantonSignTopologyMessageBuilder_1.CantonSignTopologyMessageBuilder);
|
|
26
|
+
});
|
|
27
|
+
it('should throw for unsupported message standard types', function () {
|
|
28
|
+
should_1.default.throws(() => factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE), /Invalid message standard SIMPLE/);
|
|
29
|
+
should_1.default.throws(() => factory.getMessageBuilder(sdk_core_1.MessageStandardType.EIP191), /Invalid message standard EIP191/);
|
|
30
|
+
should_1.default.throws(() => factory.getMessageBuilder('UNSUPPORTED'), /Invalid message standard UNSUPPORTED/);
|
|
31
|
+
});
|
|
32
|
+
it('should build a message with CANTON_SIGN_TRANSACTION that returns correct signable payload', async function () {
|
|
33
|
+
const txHash = '7Ey4Q2TqWQcK1eAl6p15UT02M4mx92Tvo9ifvtzlm5o=';
|
|
34
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
|
|
35
|
+
builder.setPayload(txHash);
|
|
36
|
+
const message = await builder.build();
|
|
37
|
+
const signable = await message.getSignablePayload();
|
|
38
|
+
should_1.default.ok(Buffer.isBuffer(signable));
|
|
39
|
+
signable.should.deepEqual(Buffer.from(txHash, 'base64'));
|
|
40
|
+
});
|
|
41
|
+
it('should build a message with CANTON_SIGN_TOPOLOGY that returns correct signable payload', async function () {
|
|
42
|
+
const topoHash = 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/B/u+OGR+npg==';
|
|
43
|
+
const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
44
|
+
builder.setPayload(topoHash);
|
|
45
|
+
const message = await builder.build();
|
|
46
|
+
const signable = await message.getSignablePayload();
|
|
47
|
+
should_1.default.ok(Buffer.isBuffer(signable));
|
|
48
|
+
signable.should.deepEqual(Buffer.from(topoHash, 'base64'));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZUJ1aWxkZXJGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL21lc3NhZ2VCdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1QixtREFBMkQ7QUFDM0QsMkZBQXdGO0FBQ3hGLDZJQUEwSTtBQUMxSSxvSUFBaUk7QUFFakksUUFBUSxDQUFDLDhCQUE4QixFQUFFO0lBQ3ZDLElBQUksT0FBOEIsQ0FBQztJQUVuQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSw2Q0FBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLEVBQUUsQ0FBQywrRUFBK0UsRUFBRTtZQUNsRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMseUVBQW1DLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRTtZQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUVBQWdDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtZQUN4RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUM5RyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUM5RyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsYUFBb0MsQ0FBQyxFQUNyRSxzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJGQUEyRixFQUFFLEtBQUs7WUFDbkcsTUFBTSxNQUFNLEdBQUcsOENBQThDLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLDhCQUFtQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDdkYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3BELGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwQyxRQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RkFBd0YsRUFBRSxLQUFLO1lBQ2hHLE1BQU0sUUFBUSxHQUFHLGtEQUFrRCxDQUFDO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNwRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEMsUUFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IE1lc3NhZ2VTdGFuZGFyZFR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL21lc3NhZ2VCdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvbWVzc2FnZXMvY2FudG9uU2lnblRyYW5zYWN0aW9uL2NhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2VCdWlsZGVyJztcbmltcG9ydCB7IENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2VCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3kvY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZUJ1aWxkZXInO1xuXG5kZXNjcmliZSgnQ2FudG9uIE1lc3NhZ2VCdWlsZGVyRmFjdG9yeScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGZhY3Rvcnk6IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBmYWN0b3J5ID0gbmV3IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSh7IG5hbWU6ICdjYW50b24nIH0gYXMgQmFzZUNvaW4pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0TWVzc2FnZUJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZUJ1aWxkZXIgZm9yIENBTlRPTl9TSUdOX1RSQU5TQUNUSU9OJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UUkFOU0FDVElPTik7XG4gICAgICBzaG91bGQuZXhpc3QoYnVpbGRlcik7XG4gICAgICBidWlsZGVyLnNob3VsZC5iZS5pbnN0YW5jZW9mKENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2VCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2VCdWlsZGVyIGZvciBDQU5UT05fU0lHTl9UT1BPTE9HWScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVE9QT0xPR1kpO1xuICAgICAgc2hvdWxkLmV4aXN0KGJ1aWxkZXIpO1xuICAgICAgYnVpbGRlci5zaG91bGQuYmUuaW5zdGFuY2VvZihDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlQnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciB1bnN1cHBvcnRlZCBtZXNzYWdlIHN0YW5kYXJkIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKSwgL0ludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCBTSU1QTEUvKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSksIC9JbnZhbGlkIG1lc3NhZ2Ugc3RhbmRhcmQgRUlQMTkxLyk7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKCdVTlNVUFBPUlRFRCcgYXMgTWVzc2FnZVN0YW5kYXJkVHlwZSksXG4gICAgICAgIC9JbnZhbGlkIG1lc3NhZ2Ugc3RhbmRhcmQgVU5TVVBQT1JURUQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIG1lc3NhZ2Ugd2l0aCBDQU5UT05fU0lHTl9UUkFOU0FDVElPTiB0aGF0IHJldHVybnMgY29ycmVjdCBzaWduYWJsZSBwYXlsb2FkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIYXNoID0gJzdFeTRRMlRxV1FjSzFlQWw2cDE1VVQwMk00bXg5MlR2bzlpZnZ0emxtNW89JztcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04pO1xuICAgICAgYnVpbGRlci5zZXRQYXlsb2FkKHR4SGFzaCk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtZXNzYWdlLmdldFNpZ25hYmxlUGF5bG9hZCgpO1xuICAgICAgc2hvdWxkLm9rKEJ1ZmZlci5pc0J1ZmZlcihzaWduYWJsZSkpO1xuICAgICAgKHNpZ25hYmxlIGFzIEJ1ZmZlcikuc2hvdWxkLmRlZXBFcXVhbChCdWZmZXIuZnJvbSh0eEhhc2gsICdiYXNlNjQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbWVzc2FnZSB3aXRoIENBTlRPTl9TSUdOX1RPUE9MT0dZIHRoYXQgcmV0dXJucyBjb3JyZWN0IHNpZ25hYmxlIHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b3BvSGFzaCA9ICdFaURRa3krVXhvMnpFd0ZwK0phYmVheklMTU1kN1FSNjM5L0IvdStPR1IrbnBnPT0nO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQodG9wb0hhc2gpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNpZ25hYmxlID0gYXdhaXQgbWVzc2FnZS5nZXRTaWduYWJsZVBheWxvYWQoKTtcbiAgICAgIHNob3VsZC5vayhCdWZmZXIuaXNCdWZmZXIoc2lnbmFibGUpKTtcbiAgICAgIChzaWduYWJsZSBhcyBCdWZmZXIpLnNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20odG9wb0hhc2gsICdiYXNlNjQnKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../test/unit/register.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
11
|
+
const register_1 = require("../../src/register");
|
|
12
|
+
const cantonToken_1 = require("../../src/cantonToken");
|
|
13
|
+
describe('Canton Register', function () {
|
|
14
|
+
let bitgo;
|
|
15
|
+
let registerSpy;
|
|
16
|
+
let registerTokenSpy;
|
|
17
|
+
beforeEach(function () {
|
|
18
|
+
bitgo = new sdk_api_1.BitGoAPI({ env: 'test' });
|
|
19
|
+
registerSpy = sinon_1.default.spy(bitgo, 'register');
|
|
20
|
+
registerTokenSpy = sinon_1.default.spy(sdk_core_1.GlobalCoinFactory, 'registerToken');
|
|
21
|
+
});
|
|
22
|
+
afterEach(function () {
|
|
23
|
+
registerSpy.restore();
|
|
24
|
+
registerTokenSpy.restore();
|
|
25
|
+
});
|
|
26
|
+
describe('register', function () {
|
|
27
|
+
it('should register base coins and token constructors', function () {
|
|
28
|
+
(0, register_1.register)(bitgo);
|
|
29
|
+
const registeredNames = registerSpy.getCalls().map((call) => call.args[0]);
|
|
30
|
+
// Base coins should be registered
|
|
31
|
+
assert_1.default.ok(registeredNames.includes('canton'));
|
|
32
|
+
assert_1.default.ok(registeredNames.includes('tcanton'));
|
|
33
|
+
// Canton tokens from statics should be registered
|
|
34
|
+
const cantonTokenCount = cantonToken_1.CantonToken.createTokenConstructors().length;
|
|
35
|
+
assert_1.default.strictEqual(registerSpy.callCount, 2 + cantonTokenCount);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('registerWithCoinMap', function () {
|
|
39
|
+
it('should call register internally for base coins and tokens', function () {
|
|
40
|
+
(0, register_1.registerWithCoinMap)(bitgo, statics_1.coins);
|
|
41
|
+
const registeredNames = registerSpy.getCalls().map((call) => call.args[0]);
|
|
42
|
+
// Base coins should be registered
|
|
43
|
+
assert_1.default.ok(registeredNames.includes('canton'));
|
|
44
|
+
assert_1.default.ok(registeredNames.includes('tcanton'));
|
|
45
|
+
});
|
|
46
|
+
it('should add dynamic Canton tokens to the global coin map', function () {
|
|
47
|
+
(0, register_1.registerWithCoinMap)(bitgo, statics_1.coins);
|
|
48
|
+
// registerToken should have been called for Canton tokens in the coin map
|
|
49
|
+
assert_1.default.ok(registerTokenSpy.callCount > 0);
|
|
50
|
+
// Each call should pass a valid coin from the coinMap
|
|
51
|
+
for (let i = 0; i < registerTokenSpy.callCount; i++) {
|
|
52
|
+
const call = registerTokenSpy.getCall(i);
|
|
53
|
+
const staticsCoin = call.args[0];
|
|
54
|
+
assert_1.default.ok(statics_1.coins.has(staticsCoin.name), `${staticsCoin.name} should exist in the coin map`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
it('should not add tokens to the global coin map when coin map has no Canton tokens', function () {
|
|
58
|
+
const limitedCoinMap = statics_1.coins.filter((coin) => !(coin instanceof statics_1.CantonToken));
|
|
59
|
+
(0, register_1.registerWithCoinMap)(bitgo, limitedCoinMap);
|
|
60
|
+
// registerToken should not be called since no Canton tokens are in the map
|
|
61
|
+
assert_1.default.strictEqual(registerTokenSpy.callCount, 0);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGlEQUErQztBQUMvQyxtREFBeUQ7QUFDekQsaURBQXlEO0FBQ3pELGlEQUFtRTtBQUNuRSx1REFBc0U7QUFFdEUsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLElBQUksS0FBZSxDQUFDO0lBQ3BCLElBQUksV0FBMkIsQ0FBQztJQUNoQyxJQUFJLGdCQUFnQyxDQUFDO0lBRXJDLFVBQVUsQ0FBQztRQUNULEtBQUssR0FBRyxJQUFJLGtCQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0QyxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyw0QkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUU7UUFDbkIsRUFBRSxDQUFDLG1EQUFtRCxFQUFFO1lBQ3RELElBQUEsbUJBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUVoQixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0Usa0NBQWtDO1lBQ2xDLGdCQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFFL0Msa0RBQWtEO1lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcseUJBQWMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUN6RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMscUJBQXFCLEVBQUU7UUFDOUIsRUFBRSxDQUFDLDJEQUEyRCxFQUFFO1lBQzlELElBQUEsOEJBQW1CLEVBQUMsS0FBSyxFQUFFLGVBQUssQ0FBQyxDQUFDO1lBRWxDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzRSxrQ0FBa0M7WUFDbEMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzlDLGdCQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRTtZQUM1RCxJQUFBLDhCQUFtQixFQUFDLEtBQUssRUFBRSxlQUFLLENBQUMsQ0FBQztZQUVsQywwRUFBMEU7WUFDMUUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRTFDLHNEQUFzRDtZQUN0RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxDQUFDO1lBQzdGLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpRkFBaUYsRUFBRTtZQUNwRixNQUFNLGNBQWMsR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLHFCQUFXLENBQUMsQ0FBQyxDQUFDO1lBRTlFLElBQUEsOEJBQW1CLEVBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRTNDLDJFQUEyRTtZQUMzRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBHbG9iYWxDb2luRmFjdG9yeSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zLCBDYW50b25Ub2tlbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgcmVnaXN0ZXIsIHJlZ2lzdGVyV2l0aENvaW5NYXAgfSBmcm9tICcuLi8uLi9zcmMvcmVnaXN0ZXInO1xuaW1wb3J0IHsgQ2FudG9uVG9rZW4gYXMgU2RrQ2FudG9uVG9rZW4gfSBmcm9tICcuLi8uLi9zcmMvY2FudG9uVG9rZW4nO1xuXG5kZXNjcmliZSgnQ2FudG9uIFJlZ2lzdGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IEJpdEdvQVBJO1xuICBsZXQgcmVnaXN0ZXJTcHk6IHNpbm9uLlNpbm9uU3B5O1xuICBsZXQgcmVnaXN0ZXJUb2tlblNweTogc2lub24uU2lub25TcHk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICByZWdpc3RlclNweSA9IHNpbm9uLnNweShiaXRnbywgJ3JlZ2lzdGVyJyk7XG4gICAgcmVnaXN0ZXJUb2tlblNweSA9IHNpbm9uLnNweShHbG9iYWxDb2luRmFjdG9yeSwgJ3JlZ2lzdGVyVG9rZW4nKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICByZWdpc3RlclNweS5yZXN0b3JlKCk7XG4gICAgcmVnaXN0ZXJUb2tlblNweS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWdpc3RlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGJhc2UgY29pbnMgYW5kIHRva2VuIGNvbnN0cnVjdG9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZ2lzdGVyKGJpdGdvKTtcblxuICAgICAgY29uc3QgcmVnaXN0ZXJlZE5hbWVzID0gcmVnaXN0ZXJTcHkuZ2V0Q2FsbHMoKS5tYXAoKGNhbGwpID0+IGNhbGwuYXJnc1swXSk7XG5cbiAgICAgIC8vIEJhc2UgY29pbnMgc2hvdWxkIGJlIHJlZ2lzdGVyZWRcbiAgICAgIGFzc2VydC5vayhyZWdpc3RlcmVkTmFtZXMuaW5jbHVkZXMoJ2NhbnRvbicpKTtcbiAgICAgIGFzc2VydC5vayhyZWdpc3RlcmVkTmFtZXMuaW5jbHVkZXMoJ3RjYW50b24nKSk7XG5cbiAgICAgIC8vIENhbnRvbiB0b2tlbnMgZnJvbSBzdGF0aWNzIHNob3VsZCBiZSByZWdpc3RlcmVkXG4gICAgICBjb25zdCBjYW50b25Ub2tlbkNvdW50ID0gU2RrQ2FudG9uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5sZW5ndGg7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVnaXN0ZXJTcHkuY2FsbENvdW50LCAyICsgY2FudG9uVG9rZW5Db3VudCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWdpc3RlcldpdGhDb2luTWFwJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2FsbCByZWdpc3RlciBpbnRlcm5hbGx5IGZvciBiYXNlIGNvaW5zIGFuZCB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZWdpc3RlcldpdGhDb2luTWFwKGJpdGdvLCBjb2lucyk7XG5cbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWROYW1lcyA9IHJlZ2lzdGVyU3B5LmdldENhbGxzKCkubWFwKChjYWxsKSA9PiBjYWxsLmFyZ3NbMF0pO1xuXG4gICAgICAvLyBCYXNlIGNvaW5zIHNob3VsZCBiZSByZWdpc3RlcmVkXG4gICAgICBhc3NlcnQub2socmVnaXN0ZXJlZE5hbWVzLmluY2x1ZGVzKCdjYW50b24nKSk7XG4gICAgICBhc3NlcnQub2socmVnaXN0ZXJlZE5hbWVzLmluY2x1ZGVzKCd0Y2FudG9uJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhZGQgZHluYW1pYyBDYW50b24gdG9rZW5zIHRvIHRoZSBnbG9iYWwgY29pbiBtYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZWdpc3RlcldpdGhDb2luTWFwKGJpdGdvLCBjb2lucyk7XG5cbiAgICAgIC8vIHJlZ2lzdGVyVG9rZW4gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgZm9yIENhbnRvbiB0b2tlbnMgaW4gdGhlIGNvaW4gbWFwXG4gICAgICBhc3NlcnQub2socmVnaXN0ZXJUb2tlblNweS5jYWxsQ291bnQgPiAwKTtcblxuICAgICAgLy8gRWFjaCBjYWxsIHNob3VsZCBwYXNzIGEgdmFsaWQgY29pbiBmcm9tIHRoZSBjb2luTWFwXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZ2lzdGVyVG9rZW5TcHkuY2FsbENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgY2FsbCA9IHJlZ2lzdGVyVG9rZW5TcHkuZ2V0Q2FsbChpKTtcbiAgICAgICAgY29uc3Qgc3RhdGljc0NvaW4gPSBjYWxsLmFyZ3NbMF07XG4gICAgICAgIGFzc2VydC5vayhjb2lucy5oYXMoc3RhdGljc0NvaW4ubmFtZSksIGAke3N0YXRpY3NDb2luLm5hbWV9IHNob3VsZCBleGlzdCBpbiB0aGUgY29pbiBtYXBgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFkZCB0b2tlbnMgdG8gdGhlIGdsb2JhbCBjb2luIG1hcCB3aGVuIGNvaW4gbWFwIGhhcyBubyBDYW50b24gdG9rZW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbGltaXRlZENvaW5NYXAgPSBjb2lucy5maWx0ZXIoKGNvaW4pID0+ICEoY29pbiBpbnN0YW5jZW9mIENhbnRvblRva2VuKSk7XG5cbiAgICAgIHJlZ2lzdGVyV2l0aENvaW5NYXAoYml0Z28sIGxpbWl0ZWRDb2luTWFwKTtcblxuICAgICAgLy8gcmVnaXN0ZXJUb2tlbiBzaG91bGQgbm90IGJlIGNhbGxlZCBzaW5jZSBubyBDYW50b24gdG9rZW5zIGFyZSBpbiB0aGUgbWFwXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVnaXN0ZXJUb2tlblNweS5jYWxsQ291bnQsIDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|