@bitgo/sdk-coin-rune 1.6.2 → 1.6.3

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const sdk_core_1 = require("@bitgo/sdk-core");
40
+ const should_1 = __importDefault(require("should"));
41
+ const sdk_api_1 = require("@bitgo/sdk-api");
42
+ const sdk_test_1 = require("@bitgo/sdk-test");
43
+ const src_1 = require("../../../src");
44
+ const testData = __importStar(require("../../resources/trune"));
45
+ describe('Rune Transaction Builder', async () => {
46
+ let bitgo;
47
+ let basecoin;
48
+ let factory;
49
+ before(function () {
50
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
51
+ bitgo.safeRegister('thorchain:rune', src_1.Rune.createInstance);
52
+ bitgo.safeRegister('tthorchain:rune', src_1.Trune.createInstance);
53
+ bitgo.initializeTestVars();
54
+ basecoin = bitgo.coin('tthorchain:rune');
55
+ factory = basecoin.getBuilder();
56
+ });
57
+ const testTxData = testData.TEST_SEND_TX;
58
+ let data;
59
+ beforeEach(() => {
60
+ data = [
61
+ {
62
+ type: sdk_core_1.TransactionType.Send,
63
+ testTx: testData.TEST_SEND_TX,
64
+ builder: factory.getTransferBuilder(),
65
+ },
66
+ ];
67
+ });
68
+ it('should build a signed tx from signed tx data', async function () {
69
+ const txBuilder = factory.from(testTxData.signedTxBase64);
70
+ const tx = await txBuilder.build();
71
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
72
+ // Should recreate the same raw tx data when re-build and turned to broadcast format
73
+ const rawTx = tx.toBroadcastFormat();
74
+ should_1.default.equal(rawTx, testTxData.signedTxBase64);
75
+ });
76
+ describe('gasBudget tests', async () => {
77
+ it('should succeed for valid gasBudget', function () {
78
+ for (const { builder } of data) {
79
+ should_1.default.doesNotThrow(() => builder.gasBudget(testTxData.gasBudget));
80
+ }
81
+ });
82
+ it('should throw for invalid gasBudget', function () {
83
+ const invalidGasBudget = 0;
84
+ for (const { builder } of data) {
85
+ (0, should_1.default)(() => builder.gasBudget({ gasLimit: invalidGasBudget })).throw('Invalid gas limit ' + invalidGasBudget);
86
+ }
87
+ });
88
+ });
89
+ it('validateAddress', function () {
90
+ const invalidAddress = { address: 'randomString' };
91
+ for (const { builder } of data) {
92
+ should_1.default.doesNotThrow(() => builder.validateAddress({ address: testTxData.sender }));
93
+ (0, should_1.default)(() => builder.validateAddress(invalidAddress)).throwError('transactionBuilder: address isValidAddress check failed: ' + invalidAddress.address);
94
+ }
95
+ });
96
+ });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBa0Q7QUFDbEQsb0RBQTRCO0FBRTVCLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFDMUQsc0NBQTJDO0FBQzNDLGdFQUFrRDtBQUVsRCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDOUMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxPQUFPLENBQUM7SUFDWixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFELEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDekMsSUFBSSxJQUFJLENBQUM7SUFFVCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsSUFBSSxHQUFHO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLDBCQUFlLENBQUMsSUFBSTtnQkFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZO2dCQUM3QixPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFO2FBQ3RDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7UUFDdEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLG9GQUFvRjtRQUNwRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2QyxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDM0IsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQy9CLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ25ELEtBQUssTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9CLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRixJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FDOUQsMkRBQTJELEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FDckYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBSdW5lLCBUcnVuZSB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHJ1bmUnO1xuXG5kZXNjcmliZSgnUnVuZSBUcmFuc2FjdGlvbiBCdWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgZmFjdG9yeTtcbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3Rob3JjaGFpbjpydW5lJywgUnVuZS5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0dGhvcmNoYWluOnJ1bmUnLCBUcnVuZS5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dGhvcmNoYWluOnJ1bmUnKTtcbiAgICBmYWN0b3J5ID0gYmFzZWNvaW4uZ2V0QnVpbGRlcigpO1xuICB9KTtcblxuICBjb25zdCB0ZXN0VHhEYXRhID0gdGVzdERhdGEuVEVTVF9TRU5EX1RYO1xuICBsZXQgZGF0YTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkYXRhID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCxcbiAgICAgICAgdGVzdFR4OiB0ZXN0RGF0YS5URVNUX1NFTkRfVFgsXG4gICAgICAgIGJ1aWxkZXI6IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCksXG4gICAgICB9LFxuICAgIF07XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgdHggZnJvbSBzaWduZWQgdHggZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdFR4RGF0YS5zaWduZWRUeEJhc2U2NCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIC8vIFNob3VsZCByZWNyZWF0ZSB0aGUgc2FtZSByYXcgdHggZGF0YSB3aGVuIHJlLWJ1aWxkIGFuZCB0dXJuZWQgdG8gYnJvYWRjYXN0IGZvcm1hdFxuICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3RUeERhdGEuc2lnbmVkVHhCYXNlNjQpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2FzQnVkZ2V0IHRlc3RzJywgYXN5bmMgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgZ2FzQnVkZ2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCB7IGJ1aWxkZXIgfSBvZiBkYXRhKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5nYXNCdWRnZXQodGVzdFR4RGF0YS5nYXNCdWRnZXQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgZ2FzQnVkZ2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEdhc0J1ZGdldCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IHsgYnVpbGRlciB9IG9mIGRhdGEpIHtcbiAgICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIuZ2FzQnVkZ2V0KHsgZ2FzTGltaXQ6IGludmFsaWRHYXNCdWRnZXQgfSkpLnRocm93KCdJbnZhbGlkIGdhcyBsaW1pdCAnICsgaW52YWxpZEdhc0J1ZGdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSB7IGFkZHJlc3M6ICdyYW5kb21TdHJpbmcnIH07XG4gICAgZm9yIChjb25zdCB7IGJ1aWxkZXIgfSBvZiBkYXRhKSB7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogdGVzdFR4RGF0YS5zZW5kZXIgfSkpO1xuICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIudmFsaWRhdGVBZGRyZXNzKGludmFsaWRBZGRyZXNzKSkudGhyb3dFcnJvcihcbiAgICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogYWRkcmVzcyBpc1ZhbGlkQWRkcmVzcyBjaGVjayBmYWlsZWQ6ICcgKyBpbnZhbGlkQWRkcmVzcy5hZGRyZXNzXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const sdk_api_1 = require("@bitgo/sdk-api");
40
+ const sdk_core_1 = require("@bitgo/sdk-core");
41
+ const sdk_test_1 = require("@bitgo/sdk-test");
42
+ const encoding_1 = require("@cosmjs/encoding");
43
+ const should_1 = __importDefault(require("should"));
44
+ const src_1 = require("../../../src");
45
+ const testData = __importStar(require("../../resources/trune"));
46
+ const bech32 = require('bech32-buffer');
47
+ describe('Rune Transfer Builder', () => {
48
+ let bitgo;
49
+ let basecoin;
50
+ let factory;
51
+ let testTx;
52
+ let testTxWithMemo;
53
+ before(function () {
54
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
55
+ bitgo.safeRegister('thorchain:rune', src_1.Rune.createInstance);
56
+ bitgo.safeRegister('tthorchain:rune', src_1.Trune.createInstance);
57
+ bitgo.initializeTestVars();
58
+ basecoin = bitgo.coin('tthorchain:rune');
59
+ factory = basecoin.getBuilder();
60
+ testTx = testData.TEST_SEND_TX;
61
+ testTxWithMemo = testData.TEST_TX_WITH_MEMO;
62
+ });
63
+ it('should build a Transfer tx with signature', async function () {
64
+ const txBuilder = factory.getTransferBuilder();
65
+ txBuilder.sequence(testTx.sequence);
66
+ txBuilder.gasBudget(testTx.gasBudget);
67
+ txBuilder.messages([testTx.sendMessage.value]);
68
+ txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
69
+ txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)) }, Buffer.from(testTx.signature, 'base64'));
70
+ const tx = await txBuilder.build();
71
+ const json = await (await txBuilder.build()).toJson();
72
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
73
+ should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
74
+ should_1.default.deepEqual(json.sendMessages[0].typeUrl, testTx.sendMessage.typeUrl);
75
+ should_1.default.deepEqual(json.sendMessages[0].value.amount, testTx.sendMessage.value.amount);
76
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.fromAddress), testTx.sendMessage.value.fromAddress);
77
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.toAddress), testTx.sendMessage.value.toAddress);
78
+ should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
79
+ should_1.default.deepEqual(json.sequence, testTx.sequence);
80
+ const rawTx = tx.toBroadcastFormat();
81
+ should_1.default.equal(rawTx, testTx.signedTxBase64);
82
+ should_1.default.deepEqual(tx.inputs, [
83
+ {
84
+ address: bech32.decode(testData.TEST_SEND_TX.sender).data,
85
+ value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
86
+ coin: basecoin.getChain(),
87
+ },
88
+ ]);
89
+ should_1.default.deepEqual(tx.outputs, [
90
+ {
91
+ address: bech32.decode(testData.TEST_SEND_TX.sendMessage.value.toAddress).data,
92
+ value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
93
+ coin: basecoin.getChain(),
94
+ },
95
+ ]);
96
+ });
97
+ it('should build a Transfer tx with signature and memo', async function () {
98
+ const txBuilder = factory.getTransferBuilder();
99
+ txBuilder.sequence(testTxWithMemo.sequence);
100
+ txBuilder.gasBudget(testTxWithMemo.gasBudget);
101
+ txBuilder.messages([testTxWithMemo.sendMessage.value]);
102
+ txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)));
103
+ txBuilder.memo(testTxWithMemo.memo);
104
+ txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)) }, Buffer.from(testTxWithMemo.signature, 'base64'));
105
+ const tx = await txBuilder.build();
106
+ const json = await (await txBuilder.build()).toJson();
107
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
108
+ should_1.default.deepEqual(json.gasBudget, testTxWithMemo.gasBudget);
109
+ should_1.default.deepEqual(json.sendMessages[0].typeUrl, testTx.sendMessage.typeUrl);
110
+ should_1.default.deepEqual(json.sendMessages[0].value.amount, testTx.sendMessage.value.amount);
111
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.fromAddress), testTx.sendMessage.value.fromAddress);
112
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.toAddress), testTx.sendMessage.value.toAddress);
113
+ should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)));
114
+ should_1.default.deepEqual(json.sequence, testTxWithMemo.sequence);
115
+ should_1.default.equal(json.memo, testTxWithMemo.memo);
116
+ const rawTx = tx.toBroadcastFormat();
117
+ should_1.default.equal(rawTx, testTxWithMemo.signedTxBase64);
118
+ should_1.default.deepEqual(tx.inputs, [
119
+ {
120
+ address: bech32.decode(testTxWithMemo.sendMessage.value.fromAddress).data,
121
+ value: testTxWithMemo.sendMessage.value.amount[0].amount,
122
+ coin: basecoin.getChain(),
123
+ },
124
+ ]);
125
+ should_1.default.deepEqual(tx.outputs, [
126
+ {
127
+ address: bech32.decode(testTxWithMemo.sendMessage.value.toAddress).data,
128
+ value: testTxWithMemo.sendMessage.value.amount[0].amount,
129
+ coin: basecoin.getChain(),
130
+ },
131
+ ]);
132
+ });
133
+ it('should build a Transfer tx without signature', async function () {
134
+ const txBuilder = factory.getTransferBuilder();
135
+ txBuilder.sequence(testTx.sequence);
136
+ txBuilder.gasBudget(testTx.gasBudget);
137
+ txBuilder.messages([testTx.sendMessage.value]);
138
+ txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
139
+ const tx = await txBuilder.build();
140
+ const json = await (await txBuilder.build()).toJson();
141
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
142
+ should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
143
+ should_1.default.deepEqual(json.sendMessages[0].typeUrl, testTx.sendMessage.typeUrl);
144
+ should_1.default.deepEqual(json.sendMessages[0].value.amount, testTx.sendMessage.value.amount);
145
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.fromAddress), testTx.sendMessage.value.fromAddress);
146
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.toAddress), testTx.sendMessage.value.toAddress);
147
+ should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
148
+ should_1.default.deepEqual(json.sequence, testTx.sequence);
149
+ tx.toBroadcastFormat();
150
+ should_1.default.deepEqual(tx.inputs, [
151
+ {
152
+ address: bech32.decode(testData.TEST_SEND_TX.sender).data,
153
+ value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
154
+ coin: basecoin.getChain(),
155
+ },
156
+ ]);
157
+ should_1.default.deepEqual(tx.outputs, [
158
+ {
159
+ address: bech32.decode(testData.TEST_SEND_TX.sendMessage.value.toAddress).data,
160
+ value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
161
+ coin: basecoin.getChain(),
162
+ },
163
+ ]);
164
+ });
165
+ it('should sign a Transfer tx', async function () {
166
+ const txBuilder = factory.getTransferBuilder();
167
+ txBuilder.sequence(testTx.sequence);
168
+ txBuilder.gasBudget(testTx.gasBudget);
169
+ txBuilder.messages([testTx.sendMessage.value]);
170
+ txBuilder.accountNumber(testTx.accountNumber);
171
+ txBuilder.chainId(testTx.chainId);
172
+ txBuilder.sign({ key: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.privateKey)) });
173
+ const tx = await txBuilder.build();
174
+ const json = await (await txBuilder.build()).toJson();
175
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
176
+ should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
177
+ should_1.default.deepEqual(json.sendMessages[0].typeUrl, testTx.sendMessage.typeUrl);
178
+ should_1.default.deepEqual(json.sendMessages[0].value.amount, testTx.sendMessage.value.amount);
179
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.fromAddress), testTx.sendMessage.value.fromAddress);
180
+ should_1.default.deepEqual(bech32.encode('sthor', json.sendMessages[0].value.toAddress), testTx.sendMessage.value.toAddress);
181
+ should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
182
+ should_1.default.deepEqual(json.sequence, testTx.sequence);
183
+ const rawTx = tx.toBroadcastFormat();
184
+ should_1.default.equal(tx.signature[0], (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.signature)));
185
+ should_1.default.equal(rawTx, testTx.signedTxBase64);
186
+ should_1.default.deepEqual(tx.inputs, [
187
+ {
188
+ address: bech32.decode(testData.TEST_SEND_TX.sender).data,
189
+ value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
190
+ coin: basecoin.getChain(),
191
+ },
192
+ ]);
193
+ should_1.default.deepEqual(tx.outputs, [
194
+ {
195
+ address: bech32.decode(testData.TEST_SEND_TX.sendMessage.value.toAddress).data,
196
+ value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
197
+ coin: basecoin.getChain(),
198
+ },
199
+ ]);
200
+ });
201
+ });
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEM7QUFDMUMsOENBQWtEO0FBQ2xELDhDQUEwRDtBQUMxRCwrQ0FBcUQ7QUFDckQsb0RBQTRCO0FBQzVCLHNDQUEyQztBQUMzQyxnRUFBa0Q7QUFDbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXhDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksY0FBYyxDQUFDO0lBQ25CLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxXQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6QyxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQy9CLGNBQWMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDOUMs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QixFQUFFLENBQUM7UUFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBLGdCQUFLLEVBQUMsSUFBQSxxQkFBVSxFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzFCO2dCQUNFLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSTtnQkFDekQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDL0QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUU7YUFDMUI7U0FDRixDQUFDLENBQUM7UUFDSCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFO1lBQzNCO2dCQUNFLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJO2dCQUM5RSxLQUFLLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUMvRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRTthQUMxQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBmcm9tQmFzZTY0LCB0b0hleCB9IGZyb20gJ0Bjb3NtanMvZW5jb2RpbmcnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgUnVuZSwgVHJ1bmUgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3RydW5lJztcbmNvbnN0IGJlY2gzMiA9IHJlcXVpcmUoJ2JlY2gzMi1idWZmZXInKTtcblxuZGVzY3JpYmUoJ1J1bmUgVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IGZhY3Rvcnk7XG4gIGxldCB0ZXN0VHg7XG4gIGxldCB0ZXN0VHhXaXRoTWVtbztcbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3Rob3JjaGFpbjpydW5lJywgUnVuZS5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0dGhvcmNoYWluOnJ1bmUnLCBUcnVuZS5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dGhvcmNoYWluOnJ1bmUnKTtcbiAgICBmYWN0b3J5ID0gYmFzZWNvaW4uZ2V0QnVpbGRlcigpO1xuICAgIHRlc3RUeCA9IHRlc3REYXRhLlRFU1RfU0VORF9UWDtcbiAgICB0ZXN0VHhXaXRoTWVtbyA9IHRlc3REYXRhLlRFU1RfVFhfV0lUSF9NRU1PO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4LnNlcXVlbmNlKTtcbiAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHR4QnVpbGRlci5tZXNzYWdlcyhbdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0b0hleChmcm9tQmFzZTY0KHRlc3RUeC5wdWJLZXkpKSk7XG4gICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkgfSwgQnVmZmVyLmZyb20odGVzdFR4LnNpZ25hdHVyZSwgJ2Jhc2U2NCcpKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0VHguZ2FzQnVkZ2V0KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzWzBdLnR5cGVVcmwsIHRlc3RUeC5zZW5kTWVzc2FnZS50eXBlVXJsKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzWzBdLnZhbHVlLmFtb3VudCwgdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGJlY2gzMi5lbmNvZGUoJ3N0aG9yJywganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUuZnJvbUFkZHJlc3MpLFxuICAgICAgdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLmZyb21BZGRyZXNzXG4gICAgKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGJlY2gzMi5lbmNvZGUoJ3N0aG9yJywganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUudG9BZGRyZXNzKSwgdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnB1YmxpY0tleSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZXF1ZW5jZSwgdGVzdFR4LnNlcXVlbmNlKTtcbiAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHguc2lnbmVkVHhCYXNlNjQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHguaW5wdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGJlY2gzMi5kZWNvZGUodGVzdERhdGEuVEVTVF9TRU5EX1RYLnNlbmRlcikuZGF0YSxcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kTWVzc2FnZS52YWx1ZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICBjb2luOiBiYXNlY29pbi5nZXRDaGFpbigpLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4Lm91dHB1dHMsIFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogYmVjaDMyLmRlY29kZSh0ZXN0RGF0YS5URVNUX1NFTkRfVFguc2VuZE1lc3NhZ2UudmFsdWUudG9BZGRyZXNzKS5kYXRhLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEuVEVTVF9TRU5EX1RYLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgIGNvaW46IGJhc2Vjb2luLmdldENoYWluKCksXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aCBzaWduYXR1cmUgYW5kIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4V2l0aE1lbW8uc2VxdWVuY2UpO1xuICAgIHR4QnVpbGRlci5nYXNCdWRnZXQodGVzdFR4V2l0aE1lbW8uZ2FzQnVkZ2V0KTtcbiAgICB0eEJ1aWxkZXIubWVzc2FnZXMoW3Rlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0b0hleChmcm9tQmFzZTY0KHRlc3RUeFdpdGhNZW1vLnB1YktleSkpKTtcbiAgICB0eEJ1aWxkZXIubWVtbyh0ZXN0VHhXaXRoTWVtby5tZW1vKTtcbiAgICB0eEJ1aWxkZXIuYWRkU2lnbmF0dXJlKFxuICAgICAgeyBwdWI6IHRvSGV4KGZyb21CYXNlNjQodGVzdFR4V2l0aE1lbW8ucHViS2V5KSkgfSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRlc3RUeFdpdGhNZW1vLnNpZ25hdHVyZSwgJ2Jhc2U2NCcpXG4gICAgKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0VHhXaXRoTWVtby5nYXNCdWRnZXQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXNbMF0udHlwZVVybCwgdGVzdFR4LnNlbmRNZXNzYWdlLnR5cGVVcmwpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUuYW1vdW50LCB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgYmVjaDMyLmVuY29kZSgnc3Rob3InLCBqc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZS5mcm9tQWRkcmVzcyksXG4gICAgICB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUuZnJvbUFkZHJlc3NcbiAgICApO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoYmVjaDMyLmVuY29kZSgnc3Rob3InLCBqc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZS50b0FkZHJlc3MpLCB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUudG9BZGRyZXNzKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24ucHVibGljS2V5LCB0b0hleChmcm9tQmFzZTY0KHRlc3RUeFdpdGhNZW1vLnB1YktleSkpKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VxdWVuY2UsIHRlc3RUeFdpdGhNZW1vLnNlcXVlbmNlKTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5tZW1vLCB0ZXN0VHhXaXRoTWVtby5tZW1vKTtcbiAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHhXaXRoTWVtby5zaWduZWRUeEJhc2U2NCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5pbnB1dHMsIFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogYmVjaDMyLmRlY29kZSh0ZXN0VHhXaXRoTWVtby5zZW5kTWVzc2FnZS52YWx1ZS5mcm9tQWRkcmVzcykuZGF0YSxcbiAgICAgICAgdmFsdWU6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgIGNvaW46IGJhc2Vjb2luLmdldENoYWluKCksXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHgub3V0cHV0cywgW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiBiZWNoMzIuZGVjb2RlKHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcykuZGF0YSxcbiAgICAgICAgdmFsdWU6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgIGNvaW46IGJhc2Vjb2luLmdldENoYWluKCksXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aG91dCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4LnNlcXVlbmNlKTtcbiAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHR4QnVpbGRlci5tZXNzYWdlcyhbdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0b0hleChmcm9tQmFzZTY0KHRlc3RUeC5wdWJLZXkpKSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5nYXNCdWRnZXQsIHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXNbMF0udHlwZVVybCwgdGVzdFR4LnNlbmRNZXNzYWdlLnR5cGVVcmwpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUuYW1vdW50LCB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgYmVjaDMyLmVuY29kZSgnc3Rob3InLCBqc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZS5mcm9tQWRkcmVzcyksXG4gICAgICB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUuZnJvbUFkZHJlc3NcbiAgICApO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoYmVjaDMyLmVuY29kZSgnc3Rob3InLCBqc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZS50b0FkZHJlc3MpLCB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUudG9BZGRyZXNzKTtcblxuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5wdWJsaWNLZXksIHRvSGV4KGZyb21CYXNlNjQodGVzdFR4LnB1YktleSkpKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VxdWVuY2UsIHRlc3RUeC5zZXF1ZW5jZSk7XG4gICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiBiZWNoMzIuZGVjb2RlKHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kZXIpLmRhdGEsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5URVNUX1NFTkRfVFguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogYmFzZWNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGJlY2gzMi5kZWNvZGUodGVzdERhdGEuVEVTVF9TRU5EX1RYLnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcykuZGF0YSxcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kTWVzc2FnZS52YWx1ZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICBjb2luOiBiYXNlY29pbi5nZXRDaGFpbigpLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGEgVHJhbnNmZXIgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4LnNlcXVlbmNlKTtcbiAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHR4QnVpbGRlci5tZXNzYWdlcyhbdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLmFjY291bnROdW1iZXIodGVzdFR4LmFjY291bnROdW1iZXIpO1xuICAgIHR4QnVpbGRlci5jaGFpbklkKHRlc3RUeC5jaGFpbklkKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHJpdmF0ZUtleSkpIH0pO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0VHguZ2FzQnVkZ2V0KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzWzBdLnR5cGVVcmwsIHRlc3RUeC5zZW5kTWVzc2FnZS50eXBlVXJsKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzWzBdLnZhbHVlLmFtb3VudCwgdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGJlY2gzMi5lbmNvZGUoJ3N0aG9yJywganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUuZnJvbUFkZHJlc3MpLFxuICAgICAgdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLmZyb21BZGRyZXNzXG4gICAgKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGJlY2gzMi5lbmNvZGUoJ3N0aG9yJywganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUudG9BZGRyZXNzKSwgdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnB1YmxpY0tleSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZXF1ZW5jZSwgdGVzdFR4LnNlcXVlbmNlKTtcbiAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnNpZ25hdHVyZVswXSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHguc2lnbmF0dXJlKSkpO1xuICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdFR4LnNpZ25lZFR4QmFzZTY0KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiBiZWNoMzIuZGVjb2RlKHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kZXIpLmRhdGEsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5URVNUX1NFTkRfVFguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogYmFzZWNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGJlY2gzMi5kZWNvZGUodGVzdERhdGEuVEVTVF9TRU5EX1RYLnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcykuZGF0YSxcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kTWVzc2FnZS52YWx1ZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICBjb2luOiBiYXNlY29pbi5nZXRDaGFpbigpLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
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 statics_1 = require("@bitgo/statics");
7
+ const should_1 = __importDefault(require("should"));
8
+ const utils_1 = require("../../src/lib/utils");
9
+ const constants_1 = require("../../src/lib/constants");
10
+ const rune_1 = require("../resources/rune");
11
+ const trune_1 = require("../resources/trune");
12
+ const bech32 = require('bech32-buffer');
13
+ describe('utils', () => {
14
+ const mainnetUtils = new utils_1.RuneUtils(statics_1.NetworkType.MAINNET);
15
+ const testnetUtils = new utils_1.RuneUtils(statics_1.NetworkType.TESTNET);
16
+ const testnetDecodedAddress = bech32.decode(trune_1.testnetAddress.address1).data;
17
+ const mainnetDecodedAddress = bech32.decode(rune_1.mainnetAddress.address1).data;
18
+ it('should validate block hash correctly', () => {
19
+ should_1.default.equal(mainnetUtils.isValidBlockId(rune_1.blockHash.hash1), true);
20
+ should_1.default.equal(mainnetUtils.isValidBlockId(rune_1.blockHash.hash2), true);
21
+ // param is coming as undefined so it was causing an issue
22
+ should_1.default.equal(mainnetUtils.isValidBlockId(undefined), false);
23
+ should_1.default.equal(mainnetUtils.isValidBlockId(''), false);
24
+ });
25
+ it('should validate invalid block hash correctly', () => {
26
+ should_1.default.equal(mainnetUtils.isValidBlockId(''), false);
27
+ should_1.default.equal(mainnetUtils.isValidBlockId('0xade35465gfvdcsxsz24300'), false);
28
+ should_1.default.equal(mainnetUtils.isValidBlockId(rune_1.blockHash.hash2 + 'ff'), false);
29
+ should_1.default.equal(mainnetUtils.isValidBlockId('latest'), false);
30
+ });
31
+ it('should validate transaction id correctly', () => {
32
+ should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash1), true);
33
+ should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash2), true);
34
+ should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash3), true);
35
+ });
36
+ it('should validate invalid transaction id correctly', () => {
37
+ should_1.default.equal(mainnetUtils.isValidTransactionId(''), false);
38
+ should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash1.slice(3)), false);
39
+ should_1.default.equal(mainnetUtils.isValidTransactionId(rune_1.txIds.hash3 + '00'), false);
40
+ should_1.default.equal(mainnetUtils.isValidTransactionId('dalij43ta0ga2dadda02'), false);
41
+ });
42
+ it('validateAmount', function () {
43
+ should_1.default.doesNotThrow(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount1]));
44
+ should_1.default.doesNotThrow(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount2]));
45
+ should_1.default.doesNotThrow(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount3]));
46
+ (0, should_1.default)(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount4])).throwError('transactionBuilder: validateAmount: Invalid amount: ' + rune_1.mainnetCoinAmounts.amount4.amount);
47
+ (0, should_1.default)(() => mainnetUtils.validateAmountData([rune_1.mainnetCoinAmounts.amount5])).throwError('transactionBuilder: validateAmount: Invalid denom: ' + rune_1.mainnetCoinAmounts.amount5.denom);
48
+ should_1.default.doesNotThrow(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount1]));
49
+ should_1.default.doesNotThrow(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount2]));
50
+ should_1.default.doesNotThrow(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount3]));
51
+ (0, should_1.default)(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount4])).throwError('transactionBuilder: validateAmount: Invalid amount: ' + trune_1.testnetCoinAmounts.amount4.amount);
52
+ (0, should_1.default)(() => testnetUtils.validateAmountData([trune_1.testnetCoinAmounts.amount5])).throwError('transactionBuilder: validateAmount: Invalid denom: ' + trune_1.testnetCoinAmounts.amount5.denom);
53
+ });
54
+ it('validate gas amount', function () {
55
+ const gasBudget = { amount: [rune_1.mainnetGasAmounts.positiveGasAmount], gasLimit: 1 };
56
+ should_1.default.doesNotThrow(() => mainnetUtils.validateGasBudget(gasBudget));
57
+ gasBudget.amount[0] = rune_1.mainnetGasAmounts.zeroGasAmount;
58
+ should_1.default.doesNotThrow(() => mainnetUtils.validateGasBudget(gasBudget));
59
+ gasBudget.amount[0] = rune_1.mainnetGasAmounts.emptyGasAmount;
60
+ (0, should_1.default)(() => mainnetUtils.validateGasBudget(gasBudget)).throwError('transactionBuilder: validateAmount: Invalid amount: ');
61
+ gasBudget.amount[0] = rune_1.mainnetGasAmounts.alphabeticGasAmount;
62
+ (0, should_1.default)(() => mainnetUtils.validateGasBudget(gasBudget)).throwError('transactionBuilder: validateAmount: Invalid amount: xyz');
63
+ });
64
+ it('should validate mainnet address', () => {
65
+ should_1.default.equal(mainnetUtils.isValidAddress(rune_1.mainnetAddress.address1), true);
66
+ should_1.default.equal(mainnetUtils.isValidAddress(rune_1.mainnetAddress.validMemoIdAddress), true);
67
+ should_1.default.equal(mainnetUtils.isValidAddress(mainnetDecodedAddress), true);
68
+ should_1.default.equal(mainnetUtils.isValidAddress(trune_1.testnetAddress.address1), false);
69
+ should_1.default.equal(mainnetUtils.isValidAddress('12345'), false);
70
+ });
71
+ it('should validate testnet address', () => {
72
+ should_1.default.equal(testnetUtils.isValidAddress(trune_1.testnetAddress.address1), true);
73
+ should_1.default.equal(testnetUtils.isValidAddress(trune_1.testnetAddress.validMemoIdAddress), true);
74
+ should_1.default.equal(mainnetUtils.isValidAddress(testnetDecodedAddress), true);
75
+ should_1.default.equal(testnetUtils.isValidAddress(rune_1.mainnetAddress.address1), false);
76
+ should_1.default.equal(testnetUtils.isValidAddress('12345'), false);
77
+ });
78
+ it('should convert string type testnet address to Uint8Array', () => {
79
+ const decodedAddress = testnetUtils.getDecodedAddress(trune_1.testnetAddress.address1);
80
+ should_1.default.equal(decodedAddress.length, 20);
81
+ });
82
+ it('should convert string type mainnet address to Uint8Array', () => {
83
+ const decodedAddress = mainnetUtils.getDecodedAddress(rune_1.mainnetAddress.address1);
84
+ should_1.default.equal(decodedAddress.length, 20);
85
+ });
86
+ it('should convert Uint8Array type testnet address to string', () => {
87
+ const encodedAddress = testnetUtils.getEncodedAddress(testnetDecodedAddress);
88
+ should_1.default.equal(encodedAddress, trune_1.testnetAddress.address1);
89
+ should_1.default.equal(typeof encodedAddress, 'string');
90
+ should_1.default.equal(encodedAddress.length, 44);
91
+ should_1.default.equal(encodedAddress.startsWith(constants_1.TESTNET_ADDRESS_PREFIX), true);
92
+ });
93
+ it('should convert Uint8Array type mainnet address to string', () => {
94
+ const encodedAddress = mainnetUtils.getEncodedAddress(mainnetDecodedAddress);
95
+ should_1.default.equal(encodedAddress, rune_1.mainnetAddress.address1);
96
+ should_1.default.equal(typeof encodedAddress, 'string');
97
+ should_1.default.equal(encodedAddress.length, 43);
98
+ should_1.default.equal(encodedAddress.startsWith(constants_1.MAINNET_ADDRESS_PREFIX), true);
99
+ });
100
+ });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBNkM7QUFDN0Msb0RBQTRCO0FBQzVCLCtDQUFnRDtBQUNoRCx1REFBeUY7QUFDekYsNENBQTRHO0FBQzVHLDhDQUF3RTtBQUN4RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFeEMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckIsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBUyxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUUxRSxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsZ0JBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGdCQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakUsMERBQTBEO1FBQzFELGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBOEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FB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d29ya1R5cGUgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBSdW5lVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IE1BSU5ORVRfQUREUkVTU19QUkVGSVgsIFRFU1RORVRfQUREUkVTU19QUkVGSVggfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBibG9ja0hhc2gsIG1haW5uZXRDb2luQW1vdW50cywgdHhJZHMsIG1haW5uZXRBZGRyZXNzLCBtYWlubmV0R2FzQW1vdW50cyB9IGZyb20gJy4uL3Jlc291cmNlcy9ydW5lJztcbmltcG9ydCB7IHRlc3RuZXRDb2luQW1vdW50cywgdGVzdG5ldEFkZHJlc3MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHJ1bmUnO1xuY29uc3QgYmVjaDMyID0gcmVxdWlyZSgnYmVjaDMyLWJ1ZmZlcicpO1xuXG5kZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIGNvbnN0IG1haW5uZXRVdGlscyA9IG5ldyBSdW5lVXRpbHMoTmV0d29ya1R5cGUuTUFJTk5FVCk7XG4gIGNvbnN0IHRlc3RuZXRVdGlscyA9IG5ldyBSdW5lVXRpbHMoTmV0d29ya1R5cGUuVEVTVE5FVCk7XG5cbiAgY29uc3QgdGVzdG5ldERlY29kZWRBZGRyZXNzID0gYmVjaDMyLmRlY29kZSh0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSkuZGF0YTtcbiAgY29uc3QgbWFpbm5ldERlY29kZWRBZGRyZXNzID0gYmVjaDMyLmRlY29kZShtYWlubmV0QWRkcmVzcy5hZGRyZXNzMSkuZGF0YTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJsb2NrIGhhc2ggY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoLmhhc2gxKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2guaGFzaDIpLCB0cnVlKTtcbiAgICAvLyBwYXJhbSBpcyBjb21pbmcgYXMgdW5kZWZpbmVkIHNvIGl0IHdhcyBjYXVzaW5nIGFuIGlzc3VlXG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBpbnZhbGlkIGJsb2NrIGhhc2ggY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEJsb2NrSWQoJycpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCgnMHhhZGUzNTQ2NWdmdmRjc3hzejI0MzAwJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaC5oYXNoMiArICdmZicpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQmxvY2tJZCgnbGF0ZXN0JyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0cmFuc2FjdGlvbiBpZCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDIpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gzKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgaW52YWxpZCB0cmFuc2FjdGlvbiBpZCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gxLnNsaWNlKDMpKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDMgKyAnMDAnKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ2RhbGlqNDN0YTBnYTJkYWRkYTAyJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlQW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gbWFpbm5ldFV0aWxzLnZhbGlkYXRlQW1vdW50RGF0YShbbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDFdKSk7XG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFttYWlubmV0Q29pbkFtb3VudHMuYW1vdW50Ml0pKTtcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IG1haW5uZXRVdGlscy52YWxpZGF0ZUFtb3VudERhdGEoW21haW5uZXRDb2luQW1vdW50cy5hbW91bnQzXSkpO1xuICAgIHNob3VsZCgoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFttYWlubmV0Q29pbkFtb3VudHMuYW1vdW50NF0pKS50aHJvd0Vycm9yKFxuICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogdmFsaWRhdGVBbW91bnQ6IEludmFsaWQgYW1vdW50OiAnICsgbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDQuYW1vdW50XG4gICAgKTtcbiAgICBzaG91bGQoKCkgPT4gbWFpbm5ldFV0aWxzLnZhbGlkYXRlQW1vdW50RGF0YShbbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDVdKSkudGhyb3dFcnJvcihcbiAgICAgICd0cmFuc2FjdGlvbkJ1aWxkZXI6IHZhbGlkYXRlQW1vdW50OiBJbnZhbGlkIGRlbm9tOiAnICsgbWFpbm5ldENvaW5BbW91bnRzLmFtb3VudDUuZGVub21cbiAgICApO1xuXG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0ZXN0bmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50MV0pKTtcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHRlc3RuZXRVdGlscy52YWxpZGF0ZUFtb3VudERhdGEoW3Rlc3RuZXRDb2luQW1vdW50cy5hbW91bnQyXSkpO1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdGVzdG5ldFV0aWxzLnZhbGlkYXRlQW1vdW50RGF0YShbdGVzdG5ldENvaW5BbW91bnRzLmFtb3VudDNdKSk7XG4gICAgc2hvdWxkKCgpID0+IHRlc3RuZXRVdGlscy52YWxpZGF0ZUFtb3VudERhdGEoW3Rlc3RuZXRDb2luQW1vdW50cy5hbW91bnQ0XSkpLnRocm93RXJyb3IoXG4gICAgICAndHJhbnNhY3Rpb25CdWlsZGVyOiB2YWxpZGF0ZUFtb3VudDogSW52YWxpZCBhbW91bnQ6ICcgKyB0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50NC5hbW91bnRcbiAgICApO1xuICAgIHNob3VsZCgoKSA9PiB0ZXN0bmV0VXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50NV0pKS50aHJvd0Vycm9yKFxuICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogdmFsaWRhdGVBbW91bnQ6IEludmFsaWQgZGVub206ICcgKyB0ZXN0bmV0Q29pbkFtb3VudHMuYW1vdW50NS5kZW5vbVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZSBnYXMgYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGdhc0J1ZGdldCA9IHsgYW1vdW50OiBbbWFpbm5ldEdhc0Ftb3VudHMucG9zaXRpdmVHYXNBbW91bnRdLCBnYXNMaW1pdDogMSB9O1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gbWFpbm5ldFV0aWxzLnZhbGlkYXRlR2FzQnVkZ2V0KGdhc0J1ZGdldCkpO1xuXG4gICAgZ2FzQnVkZ2V0LmFtb3VudFswXSA9IG1haW5uZXRHYXNBbW91bnRzLnplcm9HYXNBbW91bnQ7XG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVHYXNCdWRnZXQoZ2FzQnVkZ2V0KSk7XG5cbiAgICBnYXNCdWRnZXQuYW1vdW50WzBdID0gbWFpbm5ldEdhc0Ftb3VudHMuZW1wdHlHYXNBbW91bnQ7XG4gICAgc2hvdWxkKCgpID0+IG1haW5uZXRVdGlscy52YWxpZGF0ZUdhc0J1ZGdldChnYXNCdWRnZXQpKS50aHJvd0Vycm9yKFxuICAgICAgJ3RyYW5zYWN0aW9uQnVpbGRlcjogdmFsaWRhdGVBbW91bnQ6IEludmFsaWQgYW1vdW50OiAnXG4gICAgKTtcblxuICAgIGdhc0J1ZGdldC5hbW91bnRbMF0gPSBtYWlubmV0R2FzQW1vdW50cy5hbHBoYWJldGljR2FzQW1vdW50O1xuICAgIHNob3VsZCgoKSA9PiBtYWlubmV0VXRpbHMudmFsaWRhdGVHYXNCdWRnZXQoZ2FzQnVkZ2V0KSkudGhyb3dFcnJvcihcbiAgICAgICd0cmFuc2FjdGlvbkJ1aWxkZXI6IHZhbGlkYXRlQW1vdW50OiBJbnZhbGlkIGFtb3VudDogeHl6J1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgbWFpbm5ldCBhZGRyZXNzJywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEFkZHJlc3MobWFpbm5ldEFkZHJlc3MuYWRkcmVzczEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKG1haW5uZXRBZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEFkZHJlc3MobWFpbm5ldERlY29kZWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKG1haW5uZXRVdGlscy5pc1ZhbGlkQWRkcmVzcyh0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwobWFpbm5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKCcxMjM0NScpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgdGVzdG5ldCBhZGRyZXNzJywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbCh0ZXN0bmV0VXRpbHMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldEFkZHJlc3MuYWRkcmVzczEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwodGVzdG5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRBZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChtYWlubmV0VXRpbHMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldERlY29kZWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKHRlc3RuZXRVdGlscy5pc1ZhbGlkQWRkcmVzcyhtYWlubmV0QWRkcmVzcy5hZGRyZXNzMSksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodGVzdG5ldFV0aWxzLmlzVmFsaWRBZGRyZXNzKCcxMjM0NScpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBzdHJpbmcgdHlwZSB0ZXN0bmV0IGFkZHJlc3MgdG8gVWludDhBcnJheScsICgpID0+IHtcbiAgICBjb25zdCBkZWNvZGVkQWRkcmVzcyA9IHRlc3RuZXRVdGlscy5nZXREZWNvZGVkQWRkcmVzcyh0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRBZGRyZXNzLmxlbmd0aCwgMjApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNvbnZlcnQgc3RyaW5nIHR5cGUgbWFpbm5ldCBhZGRyZXNzIHRvIFVpbnQ4QXJyYXknLCAoKSA9PiB7XG4gICAgY29uc3QgZGVjb2RlZEFkZHJlc3MgPSBtYWlubmV0VXRpbHMuZ2V0RGVjb2RlZEFkZHJlc3MobWFpbm5ldEFkZHJlc3MuYWRkcmVzczEpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkQWRkcmVzcy5sZW5ndGgsIDIwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb252ZXJ0IFVpbnQ4QXJyYXkgdHlwZSB0ZXN0bmV0IGFkZHJlc3MgdG8gc3RyaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRBZGRyZXNzID0gdGVzdG5ldFV0aWxzLmdldEVuY29kZWRBZGRyZXNzKHRlc3RuZXREZWNvZGVkQWRkcmVzcyk7XG4gICAgc2hvdWxkLmVxdWFsKGVuY29kZWRBZGRyZXNzLCB0ZXN0bmV0QWRkcmVzcy5hZGRyZXNzMSk7XG4gICAgc2hvdWxkLmVxdWFsKHR5cGVvZiBlbmNvZGVkQWRkcmVzcywgJ3N0cmluZycpO1xuICAgIHNob3VsZC5lcXVhbChlbmNvZGVkQWRkcmVzcy5sZW5ndGgsIDQ0KTtcbiAgICBzaG91bGQuZXF1YWwoZW5jb2RlZEFkZHJlc3Muc3RhcnRzV2l0aChURVNUTkVUX0FERFJFU1NfUFJFRklYKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBVaW50OEFycmF5IHR5cGUgbWFpbm5ldCBhZGRyZXNzIHRvIHN0cmluZycsICgpID0+IHtcbiAgICBjb25zdCBlbmNvZGVkQWRkcmVzcyA9IG1haW5uZXRVdGlscy5nZXRFbmNvZGVkQWRkcmVzcyhtYWlubmV0RGVjb2RlZEFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChlbmNvZGVkQWRkcmVzcywgbWFpbm5ldEFkZHJlc3MuYWRkcmVzczEpO1xuICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgZW5jb2RlZEFkZHJlc3MsICdzdHJpbmcnKTtcbiAgICBzaG91bGQuZXF1YWwoZW5jb2RlZEFkZHJlc3MubGVuZ3RoLCA0Myk7XG4gICAgc2hvdWxkLmVxdWFsKGVuY29kZWRBZGRyZXNzLnN0YXJ0c1dpdGgoTUFJTk5FVF9BRERSRVNTX1BSRUZJWCksIHRydWUpO1xuICB9KTtcbn0pO1xuIl19