@bitgo/sdk-coin-canton 1.23.2 → 1.24.0

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.
Files changed (61) hide show
  1. package/dist/src/canton.d.ts +2 -0
  2. package/dist/src/canton.d.ts.map +1 -1
  3. package/dist/src/canton.js +5 -1
  4. package/dist/src/lib/cantonCommandBuilder.d.ts +9 -0
  5. package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/cantonCommandBuilder.js +20 -2
  7. package/dist/src/lib/clearSigning.d.ts +58 -0
  8. package/dist/src/lib/clearSigning.d.ts.map +1 -0
  9. package/dist/src/lib/clearSigning.js +66 -0
  10. package/dist/src/lib/iface.d.ts +1 -0
  11. package/dist/src/lib/iface.d.ts.map +1 -1
  12. package/dist/src/lib/iface.js +1 -1
  13. package/dist/src/lib/index.d.ts +2 -0
  14. package/dist/src/lib/index.d.ts.map +1 -1
  15. package/dist/src/lib/index.js +6 -1
  16. package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
  17. package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
  18. package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
  19. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
  20. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
  21. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
  22. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
  23. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
  25. package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
  26. package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
  27. package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
  28. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
  29. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
  30. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
  31. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
  32. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
  34. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
  35. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
  36. package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
  37. package/dist/src/lib/messages/index.d.ts +5 -0
  38. package/dist/src/lib/messages/index.d.ts.map +1 -0
  39. package/dist/src/lib/messages/index.js +21 -0
  40. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  41. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  42. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  43. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +45 -1
  44. package/dist/test/unit/canton.js +17 -1
  45. package/dist/test/unit/index.d.ts +4 -0
  46. package/dist/test/unit/index.d.ts.map +1 -1
  47. package/dist/test/unit/index.js +5 -1
  48. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
  49. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
  50. package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
  51. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
  52. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
  53. package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
  54. package/dist/test/unit/messages/clearSigning.d.ts +2 -0
  55. package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
  56. package/dist/test/unit/messages/clearSigning.js +72 -0
  57. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  58. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  59. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +6 -6
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw4Q0FBc0U7QUFDdEUsc0hBQW1IO0FBRW5ILGlGQUFpRjtBQUNqRixNQUFNLG9CQUFvQixHQUFHLGtEQUFrRCxDQUFDO0FBRWhGLFNBQVMsV0FBVyxDQUFDLE9BQU8sR0FBRyxvQkFBb0I7SUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtJQUNwQyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLO1lBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUkscURBQXlCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxLQUFLO1lBQzNGLHFHQUFxRztZQUNyRyxNQUFNLElBQUksR0FBRyxrREFBa0QsQ0FBQztZQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRixNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1lBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUkscURBQXlCLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBNZXNzYWdlT3B0aW9ucywgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3kvY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZSc7XG5cbi8vIEEgcmVhbCBiYXNlNjQtZW5jb2RlZCB0b3BvbG9neSBoYXNoIChtdWx0aUhhc2ggZnJvbSBHZW5lcmF0ZVRvcG9sb2d5UmVzcG9uc2UpLlxuY29uc3QgU0FNUExFX1RPUE9MT0dZX0hBU0ggPSAnRWlEUWt5K1V4bzJ6RXdGcCtKYWJlYXpJTE1NZDdRUjYzOS9CL3UrT0dSK25wZz09JztcblxuZnVuY3Rpb24gbWFrZU9wdGlvbnMocGF5bG9hZCA9IFNBTVBMRV9UT1BPTE9HWV9IQVNIKTogTWVzc2FnZU9wdGlvbnMge1xuICByZXR1cm4geyBjb2luQ29uZmlnOiB7fSBhcyBhbnksIHBheWxvYWQgfTtcbn1cblxuZGVzY3JpYmUoJ0NhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB0eXBlIHRvIENBTlRPTl9TSUdOX1RPUE9MT0dZJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2UobWFrZU9wdGlvbnMoKSk7XG4gICAgICBtc2cuZ2V0VHlwZSgpLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RvcmUgdGhlIHBheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIG1zZy5nZXRQYXlsb2FkKCkuc2hvdWxkLmVxdWFsKFNBTVBMRV9UT1BPTE9HWV9IQVNIKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNpZ25hYmxlUGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRlY29kZSBiYXNlNjQgdG9wb2xvZ3kgaGFzaCB0byByYXcgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIGNvbnN0IHNpZ25hYmxlID0gYXdhaXQgbXNnLmdldFNpZ25hYmxlUGF5bG9hZCgpO1xuICAgICAgc2hvdWxkLm9rKEJ1ZmZlci5pc0J1ZmZlcihzaWduYWJsZSkpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduYWJsZSBhcyBCdWZmZXIsIEJ1ZmZlci5mcm9tKFNBTVBMRV9UT1BPTE9HWV9IQVNILCAnYmFzZTY0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHNhbWUgYnl0ZSBzdHJ1Y3R1cmUgYXMgQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04gZm9yIGVxdWl2YWxlbnQgaGFzaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJvdGggbWVzc2FnZSB0eXBlcyBkZWNvZGUgYmFzZTY0IOKGkiByYXcgYnl0ZXMgaWRlbnRpY2FsbHk7IHRoZSB0eXBlIGlzIHRoZSBIU00gZm9ybWF0IGRpc2NyaW1pbmF0b3JcbiAgICAgIGNvbnN0IGhhc2ggPSAnRWlEUWt5K1V4bzJ6RXdGcCtKYWJlYXpJTE1NZDdRUjYzOS9CL3UrT0dSK25wZz09JztcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlKHsgY29pbkNvbmZpZzoge30gYXMgYW55LCBwYXlsb2FkOiBoYXNoIH0pO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtc2cuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25hYmxlIGFzIEJ1ZmZlciwgQnVmZmVyLmZyb20oaGFzaCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBwYXlsb2FkIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZSh7IC4uLm1ha2VPcHRpb25zKCksIHBheWxvYWQ6ICcnIH0pO1xuICAgICAgYXdhaXQgbXNnLmdldFNpZ25hYmxlUGF5bG9hZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01lc3NhZ2UgcGF5bG9hZCBpcyBtaXNzaW5nJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cantonSignTransactionMessage.d.ts.map
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9tZXNzYWdlcy9jYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw4Q0FBc0U7QUFDdEUsK0hBQTRIO0FBRTVILDBGQUEwRjtBQUMxRixpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQUcsOENBQThDLENBQUM7QUFFdEUsU0FBUyxXQUFXLENBQUMsT0FBTyxHQUFHLGNBQWM7SUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtJQUN2QyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNoRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsK0RBQStEO1lBQy9ELGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxLQUFLO1lBQzVGLHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSwyREFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDaEQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEtBQUs7WUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSwyREFBNEIsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEYsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IE1lc3NhZ2VPcHRpb25zLCBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL2NhbnRvblNpZ25UcmFuc2FjdGlvbi9jYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlJztcblxuLy8gQSByZWFsIGJhc2U2NC1lbmNvZGVkIHByZXBhcmVkVHJhbnNhY3Rpb25IYXNoIGZyb20gQ2FudG9uJ3MgcHJlcGFyZVN1Ym1pc3Npb24gcmVzcG9uc2UuXG4vLyBUaGlzIGlzIGV4YWN0bHkgd2hhdCBDYW50b24ncyBzaWduVHJhbnNhY3Rpb24gc2VuZHMgYXMgdHhIYXNoLlxuY29uc3QgU0FNUExFX1RYX0hBU0ggPSAnN0V5NFEyVHFXUWNLMWVBbDZwMTVVVDAyTTRteDkyVHZvOWlmdnR6bG01bz0nO1xuXG5mdW5jdGlvbiBtYWtlT3B0aW9ucyhwYXlsb2FkID0gU0FNUExFX1RYX0hBU0gpOiBNZXNzYWdlT3B0aW9ucyB7XG4gIHJldHVybiB7IGNvaW5Db25maWc6IHt9IGFzIGFueSwgcGF5bG9hZCB9O1xufVxuXG5kZXNjcmliZSgnQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHR5cGUgdG8gQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIG1zZy5nZXRUeXBlKCkuc2hvdWxkLmVxdWFsKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdG9yZSB0aGUgcGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgbXNnLmdldFBheWxvYWQoKS5zaG91bGQuZXF1YWwoU0FNUExFX1RYX0hBU0gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVjb2RlIGJhc2U2NCB0eEhhc2ggdG8gcmF3IGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UobWFrZU9wdGlvbnMoKSk7XG4gICAgICBjb25zdCBzaWduYWJsZSA9IGF3YWl0IG1zZy5nZXRTaWduYWJsZVBheWxvYWQoKTtcbiAgICAgIHNob3VsZC5vayhCdWZmZXIuaXNCdWZmZXIoc2lnbmFibGUpKTtcbiAgICAgIC8vIERlY29kaW5nIHRoZSBiYXNlNjQgdHhIYXNoIGFuZCByZS1lbmNvZGluZyBzaG91bGQgcm91bmQtdHJpcFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduYWJsZSBhcyBCdWZmZXIsIEJ1ZmZlci5mcm9tKFNBTVBMRV9UWF9IQVNILCAnYmFzZTY0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHRoZSBzYW1lIGJ5dGVzIGFzIHRoZSB0cmFuc2FjdGlvbiBzaWduYWJsZVBheWxvYWQgaW4gbm9ybWFsIHR4IGZsb3cnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBJbiB0aGUgbm9ybWFsIHR4IGZsb3c6IEJ1ZmZlci5mcm9tKHByZXBhcmVkVHJhbnNhY3Rpb25IYXNoLCAnYmFzZTY0JylcbiAgICAgIC8vIHR4SGFzaCBJUyB0aGUgcHJlcGFyZWRUcmFuc2FjdGlvbkhhc2gg4oCUIHRoZXkgbXVzdCBiZSBpZGVudGljYWxcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtc2cuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25hYmxlIGFzIEJ1ZmZlciwgQnVmZmVyLmZyb20oU0FNUExFX1RYX0hBU0gsICdiYXNlNjQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcGF5bG9hZCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UoeyAuLi5tYWtlT3B0aW9ucygpLCBwYXlsb2FkOiAnJyB9KTtcbiAgICAgIGF3YWl0IG1zZy5nZXRTaWduYWJsZVBheWxvYWQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdNZXNzYWdlIHBheWxvYWQgaXMgbWlzc2luZycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clearSigning.d.ts.map
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXJTaWduaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL2NsZWFyU2lnbmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsOENBQXNEO0FBQ3RELGdFQUEwRztBQUMxRywrQ0FBdUY7QUFFdkYsOEVBQThFO0FBQzlFLE1BQU0sV0FBVyxHQUFHLG9DQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXJFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixRQUFRLENBQUMsZ0NBQWdDLEVBQUU7UUFDekMsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLElBQUEsNkNBQThCLEVBQUMsc0NBQTBCLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUEsNkNBQThCLEVBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRTtZQUN6RSw4REFBOEQ7WUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRixNQUFNLElBQUksR0FBRyxJQUFBLDZDQUE4QixFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUFtQixDQUFDLG9CQUFv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LElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN2QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLGFBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUsIGRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NsZWFyU2lnbmluZyc7XG5pbXBvcnQgeyBQcmVwYXJlZFRyYW5zYWN0aW9uUmF3RGF0YSwgR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcblxuLy8gQSBzaW5nbGUgdG9wb2xvZ3kgdHJhbnNhY3Rpb24gYnl0ZSBzdHJpbmcg4oCUIG5vdCBhIFByZXBhcmVkVHJhbnNhY3Rpb24gcHJvdG9cbmNvbnN0IFRPUE9MT0dZX1RYID0gR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLnRvcG9sb2d5VHJhbnNhY3Rpb25zWzBdO1xuXG5kZXNjcmliZSgnQ2FudG9uIGNsZWFyU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2RldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRldGVjdCBhIERhbWwgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYXMgQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eXBlID0gZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIHR5cGUuc2hvdWxkLmVxdWFsKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgYSB0b3BvbG9neSB0cmFuc2FjdGlvbiBhcyBDQU5UT05fU0lHTl9UT1BPTE9HWScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUoVE9QT0xPR1lfVFgpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBDQU5UT05fU0lHTl9UT1BPTE9HWSBmb3IgYnl0ZXMgdGhhdCBmYWlsIHByb3RvIHBhcnNpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBSYW5kb20gYmFzZTY0IHRoYXQgaXMgbm90IGEgdmFsaWQgUHJlcGFyZWRUcmFuc2FjdGlvbiBwcm90b1xuICAgICAgY29uc3QgcmFuZG9tQnl0ZXMgPSBCdWZmZXIuZnJvbSgnbm90LWEtdmFsaWQtcHJvdG8tcGF5bG9hZCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUocmFuZG9tQnl0ZXMpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBDQU5UT05fU0lHTl9UT1BPTE9HWSBmb3IgZW1wdHkgYnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eXBlID0gZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlKEJ1ZmZlci5hbGxvYygwKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uIOKAlCBpbnZhbGlkIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIHRvcG9sb2d5IGJ5dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihUT1BPTE9HWV9UWCksXG4gICAgICAgIC9ub3QgYSBEYW1sIFByZXBhcmVkVHJhbnNhY3Rpb24uKmRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGEgZGVzY3JpcHRpdmUgZXJyb3Igd2hlbiBjYWxsZWQgd2l0aCByYW5kb20gYnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByYW5kb21CeXRlcyA9IEJ1ZmZlci5mcm9tKCdub3QtYS12YWxpZC1wcm90by1wYXlsb2FkJykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihyYW5kb21CeXRlcyksXG4gICAgICAgIC9ub3QgYSBEYW1sIFByZXBhcmVkVHJhbnNhY3Rpb24uKmRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZS9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVjb2RlIGEgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYW5kIHJldHVybiBzdHJ1Y3R1cmVkIGNvbW1hbmQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmtpbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQudGVtcGxhdGVJZCk7XG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZC50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQudGVtcGxhdGVJZC5lbnRpdHlOYW1lKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmFyZ3VtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVkIHRlbXBsYXRlSWQgc2hvdWxkIGhhdmUgbW9kdWxlIGFuZCBlbnRpdHkgbmFtZSBmaWVsZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihQcmVwYXJlZFRyYW5zYWN0aW9uUmF3RGF0YSk7XG4gICAgICBkZWNvZGVkLnRlbXBsYXRlSWQubW9kdWxlTmFtZS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmVtcHR5KCk7XG4gICAgICBkZWNvZGVkLnRlbXBsYXRlSWQuZW50aXR5TmFtZS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlZCBraW5kIHNob3VsZCBiZSBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIGFzc2VydC5vayhcbiAgICAgICAgZGVjb2RlZC5raW5kID09PSAnQ3JlYXRlQ29tbWFuZCcgfHwgZGVjb2RlZC5raW5kID09PSAnRXhlcmNpc2VDb21tYW5kJyxcbiAgICAgICAgYGV4cGVjdGVkIENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kLCBnb3Q6ICR7ZGVjb2RlZC5raW5kfWBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnRXhlcmNpc2VDb21tYW5kIHNob3VsZCBpbmNsdWRlIGNob2ljZSBhbmQgYWN0aW5nUGFydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIGlmIChkZWNvZGVkLmtpbmQgPT09ICdFeGVyY2lzZUNvbW1hbmQnKSB7XG4gICAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmNob2ljZSk7XG4gICAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmFjdGluZ1BhcnRpZXMpO1xuICAgICAgICBkZWNvZGVkLmFjdGluZ1BhcnRpZXMhLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messageBuilderFactory.d.ts.map
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZUJ1aWxkZXJGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL21lc3NhZ2VCdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4Q0FBc0Q7QUFDdEQsMkZBQXdGO0FBQ3hGLDZJQUEwSTtBQUMxSSxvSUFBaUk7QUFFakksUUFBUSxDQUFDLDhCQUE4QixFQUFFO0lBQ3ZDLElBQUksT0FBOEIsQ0FBQztJQUVuQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSw2Q0FBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLEVBQUUsQ0FBQywrRUFBK0UsRUFBRTtZQUNsRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMseUVBQW1DLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRTtZQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUVBQWdDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtZQUN4RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUM5RyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUM5RyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsYUFBb0MsQ0FBQyxFQUNyRSxzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJGQUEyRixFQUFFLEtBQUs7WUFDbkcsTUFBTSxNQUFNLEdBQUcsOENBQThDLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLDhCQUFtQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDdkYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3BELGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwQyxRQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RkFBd0YsRUFBRSxLQUFLO1lBQ2hHLE1BQU0sUUFBUSxHQUFHLGtEQUFrRCxDQUFDO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNwRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEMsUUFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvbWVzc2FnZXMvbWVzc2FnZUJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2VCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9tZXNzYWdlcy9jYW50b25TaWduVHJhbnNhY3Rpb24vY2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZUJ1aWxkZXInO1xuaW1wb3J0IHsgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL2NhbnRvblNpZ25Ub3BvbG9neS9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlQnVpbGRlcic7XG5cbmRlc2NyaWJlKCdDYW50b24gTWVzc2FnZUJ1aWxkZXJGYWN0b3J5JywgZnVuY3Rpb24gKCkge1xuICBsZXQgZmFjdG9yeTogTWVzc2FnZUJ1aWxkZXJGYWN0b3J5O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGZhY3RvcnkgPSBuZXcgTWVzc2FnZUJ1aWxkZXJGYWN0b3J5KHsgbmFtZTogJ2NhbnRvbicgfSBhcyBCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRNZXNzYWdlQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlQnVpbGRlciBmb3IgQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RSQU5TQUNUSU9OKTtcbiAgICAgIHNob3VsZC5leGlzdChidWlsZGVyKTtcbiAgICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmluc3RhbmNlb2YoQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZUJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZUJ1aWxkZXIgZm9yIENBTlRPTl9TSUdOX1RPUE9MT0dZJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgICBzaG91bGQuZXhpc3QoYnVpbGRlcik7XG4gICAgICBidWlsZGVyLnNob3VsZC5iZS5pbnN0YW5jZW9mKENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2VCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIG1lc3NhZ2Ugc3RhbmRhcmQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpLCAvSW52YWxpZCBtZXNzYWdlIHN0YW5kYXJkIFNJTVBMRS8pO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxKSwgL0ludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCBFSVAxOTEvKTtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoJ1VOU1VQUE9SVEVEJyBhcyBNZXNzYWdlU3RhbmRhcmRUeXBlKSxcbiAgICAgICAgL0ludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCBVTlNVUFBPUlRFRC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbWVzc2FnZSB3aXRoIENBTlRPTl9TSUdOX1RSQU5TQUNUSU9OIHRoYXQgcmV0dXJucyBjb3JyZWN0IHNpZ25hYmxlIHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhhc2ggPSAnN0V5NFEyVHFXUWNLMWVBbDZwMTVVVDAyTTRteDkyVHZvOWlmdnR6bG01bz0nO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UUkFOU0FDVElPTik7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQodHhIYXNoKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBzaWduYWJsZSA9IGF3YWl0IG1lc3NhZ2UuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBzaG91bGQub2soQnVmZmVyLmlzQnVmZmVyKHNpZ25hYmxlKSk7XG4gICAgICAoc2lnbmFibGUgYXMgQnVmZmVyKS5zaG91bGQuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKHR4SGFzaCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBtZXNzYWdlIHdpdGggQ0FOVE9OX1NJR05fVE9QT0xPR1kgdGhhdCByZXR1cm5zIGNvcnJlY3Qgc2lnbmFibGUgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRvcG9IYXNoID0gJ0VpRFFreStVeG8yekV3RnArSmFiZWF6SUxNTWQ3UVI2MzkvQi91K09HUitucGc9PSc7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZCh0b3BvSGFzaCk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtZXNzYWdlLmdldFNpZ25hYmxlUGF5bG9hZCgpO1xuICAgICAgc2hvdWxkLm9rKEJ1ZmZlci5pc0J1ZmZlcihzaWduYWJsZSkpO1xuICAgICAgKHNpZ25hYmxlIGFzIEJ1ZmZlcikuc2hvdWxkLmRlZXBFcXVhbChCdWZmZXIuZnJvbSh0b3BvSGFzaCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==