@bitgo/sdk-coin-stx 4.3.0 → 5.0.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 (83) hide show
  1. package/dist/src/lib/abstractContractBuilder.d.ts +18 -2
  2. package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
  3. package/dist/src/lib/abstractContractBuilder.js +40 -7
  4. package/dist/src/lib/constants.d.ts +0 -1
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +2 -4
  7. package/dist/src/lib/contractBuilder.d.ts +14 -0
  8. package/dist/src/lib/contractBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/contractBuilder.js +29 -5
  10. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -1
  11. package/dist/src/lib/fungibleTokenTransferBuilder.js +10 -5
  12. package/dist/src/lib/index.d.ts +1 -0
  13. package/dist/src/lib/index.d.ts.map +1 -1
  14. package/dist/src/lib/index.js +2 -1
  15. package/dist/src/lib/keyPair.d.ts +1 -1
  16. package/dist/src/lib/keyPair.d.ts.map +1 -1
  17. package/dist/src/lib/keyPair.js +8 -4
  18. package/dist/src/lib/network.d.ts.map +1 -1
  19. package/dist/src/lib/network.js +4 -3
  20. package/dist/src/lib/postConditions.d.ts +31 -0
  21. package/dist/src/lib/postConditions.d.ts.map +1 -0
  22. package/dist/src/lib/postConditions.js +61 -0
  23. package/dist/src/lib/sbtcWithdrawBuilder.d.ts +1 -1
  24. package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
  25. package/dist/src/lib/sbtcWithdrawBuilder.js +11 -9
  26. package/dist/src/lib/sendmanyBuilder.d.ts +1 -1
  27. package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -1
  28. package/dist/src/lib/sendmanyBuilder.js +5 -3
  29. package/dist/src/lib/transaction.d.ts +3 -3
  30. package/dist/src/lib/transaction.d.ts.map +1 -1
  31. package/dist/src/lib/transaction.js +22 -20
  32. package/dist/src/lib/transactionBuilder.d.ts +0 -1
  33. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/transactionBuilder.js +20 -10
  35. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  36. package/dist/src/lib/transactionBuilderFactory.js +2 -2
  37. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  38. package/dist/src/lib/transferBuilder.js +1 -2
  39. package/dist/src/lib/utils.d.ts +2 -2
  40. package/dist/src/lib/utils.d.ts.map +1 -1
  41. package/dist/src/lib/utils.js +36 -21
  42. package/dist/src/stx.d.ts.map +1 -1
  43. package/dist/src/stx.js +13 -13
  44. package/dist/test/fixtures.d.ts +3 -18
  45. package/dist/test/fixtures.d.ts.map +1 -1
  46. package/dist/test/fixtures.js +7 -20
  47. package/dist/test/unit/btcAddressUtils.js +54 -1
  48. package/dist/test/unit/keyPair.js +9 -4
  49. package/dist/test/unit/network.js +5 -5
  50. package/dist/test/unit/postConditions.d.ts +2 -0
  51. package/dist/test/unit/postConditions.d.ts.map +1 -0
  52. package/dist/test/unit/postConditions.js +56 -0
  53. package/dist/test/unit/register.d.ts +2 -0
  54. package/dist/test/unit/register.d.ts.map +1 -0
  55. package/dist/test/unit/register.js +94 -0
  56. package/dist/test/unit/registerForBondRealArgs.d.ts +2 -0
  57. package/dist/test/unit/registerForBondRealArgs.d.ts.map +1 -0
  58. package/dist/test/unit/registerForBondRealArgs.js +22 -0
  59. package/dist/test/unit/resources.d.ts +2 -0
  60. package/dist/test/unit/resources.d.ts.map +1 -1
  61. package/dist/test/unit/resources.js +7 -4
  62. package/dist/test/unit/sip10Token.js +47 -1
  63. package/dist/test/unit/stx.js +93 -2
  64. package/dist/test/unit/stxNodeErrors.d.ts +2 -0
  65. package/dist/test/unit/stxNodeErrors.d.ts.map +1 -0
  66. package/dist/test/unit/stxNodeErrors.js +118 -0
  67. package/dist/test/unit/transaction.js +24 -1
  68. package/dist/test/unit/transactionBuilder/builderValidators.d.ts +2 -0
  69. package/dist/test/unit/transactionBuilder/builderValidators.d.ts.map +1 -0
  70. package/dist/test/unit/transactionBuilder/builderValidators.js +119 -0
  71. package/dist/test/unit/transactionBuilder/contractBuilder.js +37 -3
  72. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +86 -3
  73. package/dist/test/unit/transactionBuilder/pox5Builder.js +96 -1
  74. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +94 -27
  75. package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +31 -8
  76. package/dist/test/unit/transactionBuilder/transferBuilder.js +69 -3
  77. package/dist/test/unit/transactionBuilderFactory.d.ts +2 -0
  78. package/dist/test/unit/transactionBuilderFactory.d.ts.map +1 -0
  79. package/dist/test/unit/transactionBuilderFactory.js +63 -0
  80. package/dist/test/unit/tstxsignet.js +14 -3
  81. package/dist/test/unit/util.js +106 -12
  82. package/dist/tsconfig.tsbuildinfo +1 -1
  83. package/package.json +8 -8
@@ -0,0 +1,118 @@
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 sdk_api_1 = require("@bitgo/sdk-api");
8
+ const sdk_test_1 = require("@bitgo/sdk-test");
9
+ const src_1 = require("../../src");
10
+ describe('Stx node request error handling', function () {
11
+ let bitgo;
12
+ let basecoin;
13
+ const address = 'STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6';
14
+ const call = (method, arg) => basecoin[method](arg);
15
+ const stubBitgo = (get, post) => {
16
+ const bg = basecoin.bitgo;
17
+ const originalGet = bg.get;
18
+ const originalPost = bg.post;
19
+ bg.get = get;
20
+ bg.post = post;
21
+ return () => {
22
+ bg.get = originalGet;
23
+ bg.post = originalPost;
24
+ };
25
+ };
26
+ const errorStubs = () => stubBitgo(async () => ({ statusCode: 500, body: {} }), () => ({ send: async () => ({ statusCode: 500, body: {} }) }));
27
+ before(function () {
28
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
29
+ bitgo.initializeTestVars();
30
+ bitgo.safeRegister('stx', src_1.Stx.createInstance);
31
+ basecoin = bitgo.coin('stx');
32
+ });
33
+ it('wraps a failed native stx balance request', async function () {
34
+ const restore = errorStubs();
35
+ try {
36
+ await assert_1.default.rejects(call('getNativeStxBalanceFromNode', { address }), /unable to get native stx balance from node/);
37
+ }
38
+ finally {
39
+ restore();
40
+ }
41
+ });
42
+ it('wraps a failed fungible token balance request', async function () {
43
+ const restore = errorStubs();
44
+ try {
45
+ await assert_1.default.rejects(call('getSingleFungibleTokenBalanceFromNode', {
46
+ address,
47
+ assetId: 'ST000000000000000000002AMW42H.token::token',
48
+ }), /unable to get native stx balance from node/);
49
+ }
50
+ finally {
51
+ restore();
52
+ }
53
+ });
54
+ it('wraps a failed account nonce request', async function () {
55
+ const restore = errorStubs();
56
+ try {
57
+ await assert_1.default.rejects(call('getAccountNonceFromNode', { address }), /unable to get account nonce from node/);
58
+ }
59
+ finally {
60
+ restore();
61
+ }
62
+ });
63
+ it('wraps a failed transaction fee estimation request', async function () {
64
+ const restore = stubBitgo(async () => ({ statusCode: 200, body: {} }), () => ({ send: async () => ({ statusCode: 500, body: {} }) }));
65
+ try {
66
+ await assert_1.default.rejects(call('getTransactionFeeEstimation', { txHex: '00', txHexLength: 1 }), /unable to get transaction fee estimation/);
67
+ }
68
+ finally {
69
+ restore();
70
+ }
71
+ });
72
+ it('rejects a fee estimation response with an unexpected number of estimations', async function () {
73
+ const restore = stubBitgo(async () => ({ statusCode: 200, body: {} }), () => ({ send: async () => ({ statusCode: 200, body: { estimations: [] } }) }));
74
+ try {
75
+ await assert_1.default.rejects(call('getTransactionFeeEstimation', { txHex: '00', txHexLength: 1 }), /unable to get transaction fee estimation/);
76
+ }
77
+ finally {
78
+ restore();
79
+ }
80
+ });
81
+ it('rejects an unsupported token contract when selecting a builder', function () {
82
+ const selectBuilder = basecoin;
83
+ assert_1.default.throws(() => selectBuilder.getTokenOrNativeTransferBuilder('ST000000000000000000002AMW42H', 'not-a-token'), /invalid contract address or contract name, not supported/);
84
+ });
85
+ it('rejects building a token transfer for an unsupported contract', async function () {
86
+ const build = basecoin;
87
+ await assert_1.default.rejects(build.buildTokenTransferTransaction({
88
+ builder: {},
89
+ contractAddress: 'ST000000000000000000002AMW42H',
90
+ contractName: 'not-a-token',
91
+ pubs: [],
92
+ nonce: 0,
93
+ rootAddressDetails: { address },
94
+ destinationAddressDetails: { address },
95
+ stxBalance: '0',
96
+ }), /invalid contract address or contract name, not supported/);
97
+ });
98
+ it('rejects building a token transfer with no recoverable token balance', async function () {
99
+ const restore = stubBitgo(async () => ({ statusCode: 200, body: { balance: '0' } }), () => ({ send: async () => ({ statusCode: 200, body: {} }) }));
100
+ const build = basecoin;
101
+ try {
102
+ await assert_1.default.rejects(build.buildTokenTransferTransaction({
103
+ builder: {},
104
+ contractAddress: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH',
105
+ contractName: 'tsip6dp-token',
106
+ pubs: [],
107
+ nonce: 0,
108
+ rootAddressDetails: { address },
109
+ destinationAddressDetails: { address },
110
+ stxBalance: '0',
111
+ }), /no token balance found to recover/);
112
+ }
113
+ finally {
114
+ restore();
115
+ }
116
+ });
117
+ });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4Tm9kZUVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9zdHhOb2RlRXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFFMUQsbUNBQWdDO0FBS2hDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtJQUMxQyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFhLENBQUM7SUFDbEIsTUFBTSxPQUFPLEdBQUcsMENBQTBDLENBQUM7SUFFM0QsTUFBTSxJQUFJLEdBQUcsQ0FBSSxNQUFjLEVBQUUsR0FBWSxFQUFjLEVBQUUsQ0FDMUQsUUFBa0UsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuRixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVksRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNqRCxNQUFNLEVBQUUsR0FBSSxRQUFrRSxDQUFDLEtBQUssQ0FBQztRQUNyRixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQzNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDN0IsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDYixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNmLE9BQU8sR0FBRyxFQUFFO1lBQ1YsRUFBRSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7WUFDckIsRUFBRSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7UUFDekIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQ3RCLFNBQVMsQ0FDUCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUMzQyxHQUFHLEVBQUUsQ0FBQyxDQUFD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QUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztRQUM3RSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQ3ZCLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFDekQsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDOUQsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLFFBQStGLENBQUM7UUFDOUcsSUFBSSxDQUFDO1lBQ0gsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEIsS0FBSyxDQUFDLDZCQUE2QixDQUFDO2dCQUNsQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxlQUFlLEVBQUUsMENBQTBDO2dCQUMzRCxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLENBQUM7Z0JBQ1Isa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUU7Z0JBQy9CLHlCQUF5QixFQUFFLEVBQUUsT0FBTyxFQUFFO2dCQUN0QyxVQUFVLEVBQUUsR0FBRzthQUNoQixDQUFDLEVBQ0YsbUNBQW1DLENBQ3BDLENBQUM7UUFDSixDQUFDO2dCQUFTLENBQUM7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcblxuaW1wb3J0IHsgU3R4IH0gZnJvbSAnLi4vLi4vc3JjJztcblxudHlwZSBHZXRTdHViID0gKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHsgc3RhdHVzQ29kZTogbnVtYmVyOyBib2R5OiB1bmtub3duIH0+O1xudHlwZSBQb3N0U3R1YiA9ICh1cmw6IHN0cmluZykgPT4geyBzZW5kOiAoYm9keTogdW5rbm93bikgPT4gUHJvbWlzZTx7IHN0YXR1c0NvZGU6IG51bWJlcjsgYm9keTogdW5rbm93biB9PiB9O1xuXG5kZXNjcmliZSgnU3R4IG5vZGUgcmVxdWVzdCBlcnJvciBoYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogU3R4O1xuICBjb25zdCBhZGRyZXNzID0gJ1NUQjQ0SFlQWUFUMkJCMlFFNTEzTlNQODFIVE1ZV0JKUDAySFBHSzYnO1xuXG4gIGNvbnN0IGNhbGwgPSA8VD4obWV0aG9kOiBzdHJpbmcsIGFyZzogdW5rbm93bik6IFByb21pc2U8VD4gPT5cbiAgICAoYmFzZWNvaW4gYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCAoYTogdW5rbm93bikgPT4gUHJvbWlzZTxUPj4pW21ldGhvZF0oYXJnKTtcblxuICBjb25zdCBzdHViQml0Z28gPSAoZ2V0OiBHZXRTdHViLCBwb3N0OiBQb3N0U3R1YikgPT4ge1xuICAgIGNvbnN0IGJnID0gKGJhc2Vjb2luIGFzIHVua25vd24gYXMgeyBiaXRnbzogeyBnZXQ6IHVua25vd247IHBvc3Q6IHVua25vd24gfSB9KS5iaXRnbztcbiAgICBjb25zdCBvcmlnaW5hbEdldCA9IGJnLmdldDtcbiAgICBjb25zdCBvcmlnaW5hbFBvc3QgPSBiZy5wb3N0O1xuICAgIGJnLmdldCA9IGdldDtcbiAgICBiZy5wb3N0ID0gcG9zdDtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYmcuZ2V0ID0gb3JpZ2luYWxHZXQ7XG4gICAgICBiZy5wb3N0ID0gb3JpZ2luYWxQb3N0O1xuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZXJyb3JTdHVicyA9ICgpID0+XG4gICAgc3R1YkJpdGdvKFxuICAgICAgYXN5bmMgKCkgPT4gKHsgc3RhdHVzQ29kZTogNTAwLCBib2R5OiB7fSB9KSxcbiAgICAgICgpID0+ICh7IHNlbmQ6IGFzeW5jICgpID0+ICh7IHN0YXR1c0NvZGU6IDUwMCwgYm9keToge30gfSkgfSlcbiAgICApO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdzdHgnLCBTdHguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignc3R4JykgYXMgU3R4O1xuICB9KTtcblxuICBpdCgnd3JhcHMgYSBmYWlsZWQgbmF0aXZlIHN0eCBiYWxhbmNlIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdG9yZSA9IGVycm9yU3R1YnMoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGNhbGwoJ2dldE5hdGl2ZVN0eEJhbGFuY2VGcm9tTm9kZScsIHsgYWRkcmVzcyB9KSxcbiAgICAgICAgL3VuYWJsZSB0byBnZXQgbmF0aXZlIHN0eCBiYWxhbmNlIGZyb20gbm9kZS9cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCd3cmFwcyBhIGZhaWxlZCBmdW5naWJsZSB0b2tlbiBiYWxhbmNlIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdG9yZSA9IGVycm9yU3R1YnMoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGNhbGwoJ2dldFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlRnJvbU5vZGUnLCB7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhc3NldElkOiAnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgudG9rZW46OnRva2VuJyxcbiAgICAgICAgfSksXG4gICAgICAgIC91bmFibGUgdG8gZ2V0IG5hdGl2ZSBzdHggYmFsYW5jZSBmcm9tIG5vZGUvXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnd3JhcHMgYSBmYWlsZWQgYWNjb3VudCBub25jZSByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3RvcmUgPSBlcnJvclN0dWJzKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGNhbGwoJ2dldEFjY291bnROb25jZUZyb21Ob2RlJywgeyBhZGRyZXNzIH0pLCAvdW5hYmxlIHRvIGdldCBhY2NvdW50IG5vbmNlIGZyb20gbm9kZS8pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnd3JhcHMgYSBmYWlsZWQgdHJhbnNhY3Rpb24gZmVlIGVzdGltYXRpb24gcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN0b3JlID0gc3R1YkJpdGdvKFxuICAgICAgYXN5bmMgKCkgPT4gKHsgc3RhdHVzQ29kZTogMjAwLCBib2R5OiB7fSB9KSxcbiAgICAgICgpID0+ICh7IHNlbmQ6IGFzeW5jICgpID0+ICh7IHN0YXR1c0NvZGU6IDUwMCwgYm9keToge30gfSkgfSlcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgY2FsbCgnZ2V0VHJhbnNhY3Rpb25GZWVFc3RpbWF0aW9uJywgeyB0eEhleDogJzAwJywgdHhIZXhMZW5ndGg6IDEgfSksXG4gICAgICAgIC91bmFibGUgdG8gZ2V0IHRyYW5zYWN0aW9uIGZlZSBlc3RpbWF0aW9uL1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBmZWUgZXN0aW1hdGlvbiByZXNwb25zZSB3aXRoIGFuIHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGVzdGltYXRpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3RvcmUgPSBzdHViQml0Z28oXG4gICAgICBhc3luYyAoKSA9PiAoeyBzdGF0dXNDb2RlOiAyMDAsIGJvZHk6IHt9IH0pLFxuICAgICAgKCkgPT4gKHsgc2VuZDogYXN5bmMgKCkgPT4gKHsgc3RhdHVzQ29kZTogMjAwLCBib2R5OiB7IGVzdGltYXRpb25zOiBbXSB9IH0pIH0pXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGNhbGwoJ2dldFRyYW5zYWN0aW9uRmVlRXN0aW1hdGlvbicsIHsgdHhIZXg6ICcwMCcsIHR4SGV4TGVuZ3RoOiAxIH0pLFxuICAgICAgICAvdW5hYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBmZWUgZXN0aW1hdGlvbi9cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIHVuc3VwcG9ydGVkIHRva2VuIGNvbnRyYWN0IHdoZW4gc2VsZWN0aW5nIGEgYnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWxlY3RCdWlsZGVyID0gYmFzZWNvaW4gYXMgdW5rbm93biBhcyB7XG4gICAgICBnZXRUb2tlbk9yTmF0aXZlVHJhbnNmZXJCdWlsZGVyOiAoY29udHJhY3RBZGRyZXNzPzogc3RyaW5nLCBjb250cmFjdE5hbWU/OiBzdHJpbmcpID0+IHVua25vd247XG4gICAgfTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gc2VsZWN0QnVpbGRlci5nZXRUb2tlbk9yTmF0aXZlVHJhbnNmZXJCdWlsZGVyKCdTVDAwMDAwMDAwMDAwMDAwMDAwMDAwMkFNVzQySCcsICdub3QtYS10b2tlbicpLFxuICAgICAgL2ludmFsaWQgY29udHJhY3QgYWRkcmVzcyBvciBjb250cmFjdCBuYW1lLCBub3Qgc3VwcG9ydGVkL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdG9rZW4gdHJhbnNmZXIgZm9yIGFuIHVuc3VwcG9ydGVkIGNvbnRyYWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkID0gYmFzZWNvaW4gYXMgdW5rbm93biBhcyB7IGJ1aWxkVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uOiAocGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+IH07XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBidWlsZC5idWlsZFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgICAgIGJ1aWxkZXI6IHt9LFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICdTVDAwMDAwMDAwMDAwMDAwMDAwMDAwMkFNVzQySCcsXG4gICAgICAgIGNvbnRyYWN0TmFtZTogJ25vdC1hLXRva2VuJyxcbiAgICAgICAgcHViczogW10sXG4gICAgICAgIG5vbmNlOiAwLFxuICAgICAgICByb290QWRkcmVzc0RldGFpbHM6IHsgYWRkcmVzcyB9LFxuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzOiB7IGFkZHJlc3MgfSxcbiAgICAgICAgc3R4QmFsYW5jZTogJzAnLFxuICAgICAgfSksXG4gICAgICAvaW52YWxpZCBjb250cmFjdCBhZGRyZXNzIG9yIGNvbnRyYWN0IG5hbWUsIG5vdCBzdXBwb3J0ZWQvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYnVpbGRpbmcgYSB0b2tlbiB0cmFuc2ZlciB3aXRoIG5vIHJlY292ZXJhYmxlIHRva2VuIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdG9yZSA9IHN0dWJCaXRnbyhcbiAgICAgIGFzeW5jICgpID0+ICh7IHN0YXR1c0NvZGU6IDIwMCwgYm9keTogeyBiYWxhbmNlOiAnMCcgfSB9KSxcbiAgICAgICgpID0+ICh7IHNlbmQ6IGFzeW5jICgpID0+ICh7IHN0YXR1c0NvZGU6IDIwMCwgYm9keToge30gfSkgfSlcbiAgICApO1xuICAgIGNvbnN0IGJ1aWxkID0gYmFzZWNvaW4gYXMgdW5rbm93biBhcyB7IGJ1aWxkVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uOiAocGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+IH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBidWlsZC5idWlsZFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgICAgICAgYnVpbGRlcjoge30sXG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnU1RBRzE4RTQ1VzYxM0ZaM0g0Wk1GNlFISDQyNkVYTTVRVFNBVldZSCcsXG4gICAgICAgICAgY29udHJhY3ROYW1lOiAndHNpcDZkcC10b2tlbicsXG4gICAgICAgICAgcHViczogW10sXG4gICAgICAgICAgbm9uY2U6IDAsXG4gICAgICAgICAgcm9vdEFkZHJlc3NEZXRhaWxzOiB7IGFkZHJlc3MgfSxcbiAgICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzOiB7IGFkZHJlc3MgfSxcbiAgICAgICAgICBzdHhCYWxhbmNlOiAnMCcsXG4gICAgICAgIH0pLFxuICAgICAgICAvbm8gdG9rZW4gYmFsYW5jZSBmb3VuZCB0byByZWNvdmVyL1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const assert_1 = __importDefault(require("assert"));
40
40
  const should_1 = __importDefault(require("should"));
41
41
  const statics_1 = require("@bitgo/statics");
42
+ const transactions_1 = require("@stacks/transactions");
42
43
  const src_1 = require("../../src");
43
44
  const testData = __importStar(require("./resources"));
44
45
  const { Transaction, KeyPair } = src_1.StxLib;
@@ -79,5 +80,27 @@ describe('Stx Transaction', () => {
79
80
  should_1.default.equal(tx.transactionSize(), testData.RAW_TX_UNSIGNED.length / 2);
80
81
  });
81
82
  });
83
+ describe('error branches', function () {
84
+ it('rejects signing with a public-only key pair', async function () {
85
+ const tx = new Transaction(coin);
86
+ const publicOnly = new KeyPair({ pub: testData.xpub1 });
87
+ await tx.sign([publicOnly], 'sighash').should.be.rejectedWith(/Missing private key/);
88
+ });
89
+ it('rejects signing with missing signatures', async function () {
90
+ const tx = new Transaction(coin);
91
+ await tx.signWithSignatures(undefined, false).should.be.rejectedWith(/Missing signatures/);
92
+ });
93
+ it('rejects an unsupported payload type on toJson', function () {
94
+ const tx = new Transaction(coin);
95
+ const wire = (0, transactions_1.deserializeTransaction)(testData.RAW_TX_UNSIGNED);
96
+ wire.payload = (0, transactions_1.createCoinbasePayload)(new Uint8Array(32));
97
+ tx.stxTransaction = wire;
98
+ assert_1.default.throws(() => tx.toJson(), /payload type not supported/);
99
+ });
100
+ it('wraps a malformed raw transaction on fromRawTransaction', function () {
101
+ const tx = new Transaction(coin);
102
+ assert_1.default.throws(() => tx.fromRawTransaction('deadbeef'), /Error parsing the raw transaction/);
103
+ });
104
+ });
82
105
  });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDRDQUF1QztBQUN2QyxtQ0FBbUM7QUFDbkMsc0RBQXdDO0FBRXhDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBTSxDQUFDO0FBRXhDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUvQixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RELGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQzdDLEVBQUUsQ0FBQyxTQUFTLEVBQUU7WUFDWixNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckIsTUFBTSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0QsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUU7UUFDbkMsRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLO1lBQ3BCLE1BQU0sRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDRCQUE0QixFQUFFO1FBQ3JDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsS0FBSztZQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuL3Jlc291cmNlcyc7XG5cbmNvbnN0IHsgVHJhbnNhY3Rpb24sIEtleVBhaXIgfSA9IFN0eExpYjtcblxuZGVzY3JpYmUoJ1N0eCBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGNvaW5zLmdldCgndHN0eCcpO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgZW1wdHkgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0pzb24oKSwgL0VtcHR5IHRyYW5zYWN0aW9uLyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCAvRW1wdHkgdHJhbnNhY3Rpb24vKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBzaWduIGlmIHRyYW5zYWN0aW9uIGlzJywgKCkgPT4ge1xuICAgIGl0KCdpbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgICByZXR1cm4gdHguc2lnbih0ZXN0RGF0YS5JTlZBTElEX0tFWVBBSVJfUFJWKS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW4pO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHRlc3REYXRhLlJBV19UWF9VTlNJR05FRCk7XG4gICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLlRYX1NFTkRFUi5wcnYgfSk7XG4gICAgICBhd2FpdCB0eC5zaWduKGtleXBhaXIpLnNob3VsZC5iZS5mdWxmaWxsZWQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuVFhfUkVDSUVWRVIuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgcmV0dXJuIGVuY29kZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3ZhbGlkIHNpZ24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQpO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5UWF9TRU5ERVIucHJ2IH0pO1xuICAgICAgYXdhaXQgdHguc2lnbihrZXlwYWlyKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TSUdORURfVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlIHRyYW5zYWN0aW9uIHNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2V4cGVjdGVkIHNpemUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRyYW5zYWN0aW9uU2l6ZSgpLCB0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQubGVuZ3RoIC8gMik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDRDQUF1QztBQUN2Qyx1REFBcUY7QUFDckYsbUNBQW1DO0FBQ25DLHNEQUF3QztBQUV4QyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQU0sQ0FBQztBQUV4QyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0IsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxFQUFFLENBQUMsU0FBUyxFQUFFO1lBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFF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Q3RHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1lBQ2xELE1BQU0sRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUEscUNBQXNCLEVBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdELElBQXdDLENBQUMsT0FBTyxHQUFHLElBQUEsb0NBQXFCLEVBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RixFQUFFLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN6QixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRTtZQUM1RCxNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGNyZWF0ZUNvaW5iYXNlUGF5bG9hZCwgZGVzZXJpYWxpemVUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuL3Jlc291cmNlcyc7XG5cbmNvbnN0IHsgVHJhbnNhY3Rpb24sIEtleVBhaXIgfSA9IFN0eExpYjtcblxuZGVzY3JpYmUoJ1N0eCBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGNvaW5zLmdldCgndHN0eCcpO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgZW1wdHkgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0pzb24oKSwgL0VtcHR5IHRyYW5zYWN0aW9uLyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCAvRW1wdHkgdHJhbnNhY3Rpb24vKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBzaWduIGlmIHRyYW5zYWN0aW9uIGlzJywgKCkgPT4ge1xuICAgIGl0KCdpbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgICByZXR1cm4gdHguc2lnbih0ZXN0RGF0YS5JTlZBTElEX0tFWVBBSVJfUFJWKS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW4pO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHRlc3REYXRhLlJBV19UWF9VTlNJR05FRCk7XG4gICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLlRYX1NFTkRFUi5wcnYgfSk7XG4gICAgICBhd2FpdCB0eC5zaWduKGtleXBhaXIpLnNob3VsZC5iZS5mdWxmaWxsZWQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuVFhfUkVDSUVWRVIuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgcmV0dXJuIGVuY29kZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3ZhbGlkIHNpZ24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQpO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5UWF9TRU5ERVIucHJ2IH0pO1xuICAgICAgYXdhaXQgdHguc2lnbihrZXlwYWlyKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TSUdORURfVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlIHRyYW5zYWN0aW9uIHNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2V4cGVjdGVkIHNpemUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRyYW5zYWN0aW9uU2l6ZSgpLCB0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQubGVuZ3RoIC8gMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlcnJvciBicmFuY2hlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncmVqZWN0cyBzaWduaW5nIHdpdGggYSBwdWJsaWMtb25seSBrZXkgcGFpcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW4pO1xuICAgICAgY29uc3QgcHVibGljT25seSA9IG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS54cHViMSB9KTtcbiAgICAgIGF3YWl0IHR4LnNpZ24oW3B1YmxpY09ubHldLCAnc2lnaGFzaCcpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL01pc3NpbmcgcHJpdmF0ZSBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHNpZ25pbmcgd2l0aCBtaXNzaW5nIHNpZ25hdHVyZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIGF3YWl0IHR4LnNpZ25XaXRoU2lnbmF0dXJlcyh1bmRlZmluZWQgYXMgbmV2ZXIsIGZhbHNlKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9NaXNzaW5nIHNpZ25hdHVyZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIHVuc3VwcG9ydGVkIHBheWxvYWQgdHlwZSBvbiB0b0pzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIGNvbnN0IHdpcmUgPSBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRlc3REYXRhLlJBV19UWF9VTlNJR05FRCk7XG4gICAgICAod2lyZSBhcyB1bmtub3duIGFzIHsgcGF5bG9hZDogdW5rbm93biB9KS5wYXlsb2FkID0gY3JlYXRlQ29pbmJhc2VQYXlsb2FkKG5ldyBVaW50OEFycmF5KDMyKSk7XG4gICAgICB0eC5zdHhUcmFuc2FjdGlvbiA9IHdpcmU7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4LnRvSnNvbigpLCAvcGF5bG9hZCB0eXBlIG5vdCBzdXBwb3J0ZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCd3cmFwcyBhIG1hbGZvcm1lZCByYXcgdHJhbnNhY3Rpb24gb24gZnJvbVJhd1RyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4LmZyb21SYXdUcmFuc2FjdGlvbignZGVhZGJlZWYnKSwgL0Vycm9yIHBhcnNpbmcgdGhlIHJhdyB0cmFuc2FjdGlvbi8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=builderValidators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builderValidators.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/builderValidators.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
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 assert_1 = __importDefault(require("assert"));
40
+ const statics_1 = require("@bitgo/statics");
41
+ const src_1 = require("../../../src");
42
+ const testData = __importStar(require("../resources"));
43
+ describe('Stx TransactionBuilder validators', function () {
44
+ const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get('tstx'));
45
+ const validAddress = 'STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6';
46
+ const pubKey = '02f6d0597fb6d5467203d080e17f7b4f767ead59fc303b7d7261a832cb44305bb0';
47
+ it('rejects an empty raw transaction', function () {
48
+ assert_1.default.throws(() => factory.getTransferBuilder().from(''), /Raw transaction is empty/);
49
+ });
50
+ it('wraps a malformed raw transaction in a parse error', function () {
51
+ assert_1.default.throws(() => factory.getTransferBuilder().from('deadbeef'), /There was an error parsing the raw transaction/);
52
+ });
53
+ it('rejects an invalid public key', function () {
54
+ assert_1.default.throws(() => factory.getTransferBuilder().fromPubKey('not-a-public-key'), /Invalid public key/);
55
+ });
56
+ it('rejects an invalid recipient address', function () {
57
+ assert_1.default.throws(() => factory.getTransferBuilder().to('not-an-address'), /Invalid address/);
58
+ });
59
+ it('rejects an invalid address on validateAddress', function () {
60
+ assert_1.default.throws(() => factory.getTransferBuilder().validateAddress({ address: 'not-an-address' }), /Invalid address/);
61
+ });
62
+ it('rejects negative fee and signature values', function () {
63
+ assert_1.default.throws(() => factory.getTransferBuilder().fee({ fee: '-1' }), /Value cannot be less than zero/);
64
+ assert_1.default.throws(() => factory.getTransferBuilder().numberSignatures(-1), /Value cannot be less than zero/);
65
+ });
66
+ it('rejects an invalid key pair on validateKey', function () {
67
+ assert_1.default.throws(() => factory.getTransferBuilder().validateKey({ key: 'invalid' }), /Unsupported private key/);
68
+ });
69
+ it('rejects building a transaction without a fee', async function () {
70
+ const builder = factory.getTransferBuilder();
71
+ builder.to(validAddress);
72
+ builder.amount('100');
73
+ builder.fromPubKey(pubKey);
74
+ builder.numberSignatures(1);
75
+ builder.nonce(1);
76
+ await assert_1.default.rejects(builder.build(), /Invalid transaction: missing fee/);
77
+ });
78
+ it('rejects building a transaction without a nonce', async function () {
79
+ const builder = factory.getTransferBuilder();
80
+ builder.fee({ fee: '180' });
81
+ builder.to(validAddress);
82
+ builder.amount('100');
83
+ builder.fromPubKey(pubKey);
84
+ builder.numberSignatures(1);
85
+ await assert_1.default.rejects(builder.build(), /Invalid transaction: missing nonce/);
86
+ });
87
+ it('rejects signing twice with the same key', function () {
88
+ const builder = factory.getTransferBuilder();
89
+ builder.fee({ fee: '180' });
90
+ builder.to(validAddress);
91
+ builder.amount('100');
92
+ builder.nonce(1);
93
+ builder.numberSignatures(1);
94
+ builder.sign({ key: testData.secretKey1 });
95
+ assert_1.default.throws(() => builder.sign({ key: testData.secretKey1 }), /Repeated sign/);
96
+ });
97
+ it('rejects a transfer init with a missing or non-transfer payload', function () {
98
+ const builder = factory.getTransferBuilder();
99
+ assert_1.default.throws(() => builder.initBuilder({ toJson: () => ({ payload: undefined }) }), /payload must not be undefined/);
100
+ assert_1.default.throws(() => builder.initBuilder({ toJson: () => ({ payload: { payloadType: 2 } }) }), /Transaction should be transfer/);
101
+ });
102
+ it('rejects a transaction without a spending condition', function () {
103
+ const builder = factory.getTransferBuilder();
104
+ const fakeTx = {
105
+ toJson: () => ({ payload: { payloadType: 0, to: validAddress, amount: '100' } }),
106
+ stxTransaction: { auth: {} },
107
+ };
108
+ assert_1.default.throws(() => builder.initBuilder(fakeTx), /spending condition cannot be undefined/);
109
+ });
110
+ it('rejects building a transfer without a public key', async function () {
111
+ const builder = factory.getTransferBuilder();
112
+ builder.fee({ fee: '180' });
113
+ builder.nonce(1);
114
+ builder.to(validAddress);
115
+ builder.amount('100');
116
+ await assert_1.default.rejects(builder.build(), /supply at least 1 public key/);
117
+ });
118
+ });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlclZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2J1aWxkZXJWYWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUF1QztBQUV2QyxzQ0FBc0M7QUFDdEMsdURBQXlDO0FBRXpDLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtJQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsb0VBQW9FLENBQUM7SUFFcEYsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1FBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1FBQ3ZELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDbkQsZ0RBQWdELENBQ2pELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRTtRQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pHLENBQUMs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T0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hGLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7U0FDN0IsQ0FBQztRQUNGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBZSxDQUFDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztJQUN0RyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLO1FBQzFELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0eCBUcmFuc2FjdGlvbkJ1aWxkZXIgdmFsaWRhdG9ycycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHgnKSk7XG4gIGNvbnN0IHZhbGlkQWRkcmVzcyA9ICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JztcbiAgY29uc3QgcHViS2V5ID0gJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCc7XG5cbiAgaXQoJ3JlamVjdHMgYW4gZW1wdHkgcmF3IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5mcm9tKCcnKSwgL1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eS8pO1xuICB9KTtcblxuICBpdCgnd3JhcHMgYSBtYWxmb3JtZWQgcmF3IHRyYW5zYWN0aW9uIGluIGEgcGFyc2UgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkuZnJvbSgnZGVhZGJlZWYnKSxcbiAgICAgIC9UaGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgcmF3IHRyYW5zYWN0aW9uL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGludmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkuZnJvbVB1YktleSgnbm90LWEtcHVibGljLWtleScpLCAvSW52YWxpZCBwdWJsaWMga2V5Lyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGludmFsaWQgcmVjaXBpZW50IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpLnRvKCdub3QtYW4tYWRkcmVzcycpLCAvSW52YWxpZCBhZGRyZXNzLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGludmFsaWQgYWRkcmVzcyBvbiB2YWxpZGF0ZUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6ICdub3QtYW4tYWRkcmVzcycgfSksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbmVnYXRpdmUgZmVlIGFuZCBzaWduYXR1cmUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5mZWUoeyBmZWU6ICctMScgfSksIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkubnVtYmVyU2lnbmF0dXJlcygtMSksIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYW4gaW52YWxpZCBrZXkgcGFpciBvbiB2YWxpZGF0ZUtleScsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkudmFsaWRhdGVLZXkoeyBrZXk6ICdpbnZhbGlkJyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIGZlZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICBidWlsZGVyLnRvKHZhbGlkQWRkcmVzcyk7XG4gICAgYnVpbGRlci5hbW91bnQoJzEwMCcpO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleShwdWJLZXkpO1xuICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICBidWlsZGVyLm5vbmNlKDEpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGJ1aWxkZXIuYnVpbGQoKSwgL0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIG5vbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICBidWlsZGVyLnRvKHZhbGlkQWRkcmVzcyk7XG4gICAgYnVpbGRlci5hbW91bnQoJzEwMCcpO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleShwdWJLZXkpO1xuICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhidWlsZGVyLmJ1aWxkKCksIC9JbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHNpZ25pbmcgdHdpY2Ugd2l0aCB0aGUgc2FtZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgIGJ1aWxkZXIudG8odmFsaWRBZGRyZXNzKTtcbiAgICBidWlsZGVyLmFtb3VudCgnMTAwJyk7XG4gICAgYnVpbGRlci5ub25jZSgxKTtcbiAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5zZWNyZXRLZXkxIH0pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5zZWNyZXRLZXkxIH0pLCAvUmVwZWF0ZWQgc2lnbi8pO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHRyYW5zZmVyIGluaXQgd2l0aCBhIG1pc3Npbmcgb3Igbm9uLXRyYW5zZmVyIHBheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGJ1aWxkZXIuaW5pdEJ1aWxkZXIoeyB0b0pzb246ICgpID0+ICh7IHBheWxvYWQ6IHVuZGVmaW5lZCB9KSB9IGFzIG5ldmVyKSxcbiAgICAgIC9wYXlsb2FkIG11c3Qgbm90IGJlIHVuZGVmaW5lZC9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBidWlsZGVyLmluaXRCdWlsZGVyKHsgdG9Kc29uOiAoKSA9PiAoeyBwYXlsb2FkOiB7IHBheWxvYWRUeXBlOiAyIH0gfSkgfSBhcyBuZXZlciksXG4gICAgICAvVHJhbnNhY3Rpb24gc2hvdWxkIGJlIHRyYW5zZmVyL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIHNwZW5kaW5nIGNvbmRpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICBjb25zdCBmYWtlVHggPSB7XG4gICAgICB0b0pzb246ICgpID0+ICh7IHBheWxvYWQ6IHsgcGF5bG9hZFR5cGU6IDAsIHRvOiB2YWxpZEFkZHJlc3MsIGFtb3VudDogJzEwMCcgfSB9KSxcbiAgICAgIHN0eFRyYW5zYWN0aW9uOiB7IGF1dGg6IHt9IH0sXG4gICAgfTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5pdEJ1aWxkZXIoZmFrZVR4IGFzIG5ldmVyKSwgL3NwZW5kaW5nIGNvbmRpdGlvbiBjYW5ub3QgYmUgdW5kZWZpbmVkLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdHJhbnNmZXIgd2l0aG91dCBhIHB1YmxpYyBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgIGJ1aWxkZXIubm9uY2UoMSk7XG4gICAgYnVpbGRlci50byh2YWxpZEFkZHJlc3MpO1xuICAgIGJ1aWxkZXIuYW1vdW50KCcxMDAnKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhidWlsZGVyLmJ1aWxkKCksIC9zdXBwbHkgYXQgbGVhc3QgMSBwdWJsaWMga2V5Lyk7XG4gIH0pO1xufSk7XG4iXX0=