@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.
- package/dist/src/lib/abstractContractBuilder.d.ts +18 -2
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
- package/dist/src/lib/abstractContractBuilder.js +40 -7
- package/dist/src/lib/constants.d.ts +0 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +2 -4
- package/dist/src/lib/contractBuilder.d.ts +14 -0
- package/dist/src/lib/contractBuilder.d.ts.map +1 -1
- package/dist/src/lib/contractBuilder.js +29 -5
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -1
- package/dist/src/lib/fungibleTokenTransferBuilder.js +10 -5
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +2 -1
- package/dist/src/lib/keyPair.d.ts +1 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +8 -4
- package/dist/src/lib/network.d.ts.map +1 -1
- package/dist/src/lib/network.js +4 -3
- package/dist/src/lib/postConditions.d.ts +31 -0
- package/dist/src/lib/postConditions.d.ts.map +1 -0
- package/dist/src/lib/postConditions.js +61 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.js +11 -9
- package/dist/src/lib/sendmanyBuilder.d.ts +1 -1
- package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -1
- package/dist/src/lib/sendmanyBuilder.js +5 -3
- package/dist/src/lib/transaction.d.ts +3 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +22 -20
- package/dist/src/lib/transactionBuilder.d.ts +0 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +20 -10
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +2 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +1 -2
- package/dist/src/lib/utils.d.ts +2 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +36 -21
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +13 -13
- package/dist/test/fixtures.d.ts +3 -18
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +7 -20
- package/dist/test/unit/btcAddressUtils.js +54 -1
- package/dist/test/unit/keyPair.js +9 -4
- package/dist/test/unit/network.js +5 -5
- package/dist/test/unit/postConditions.d.ts +2 -0
- package/dist/test/unit/postConditions.d.ts.map +1 -0
- package/dist/test/unit/postConditions.js +56 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +94 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts +2 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts.map +1 -0
- package/dist/test/unit/registerForBondRealArgs.js +22 -0
- package/dist/test/unit/resources.d.ts +2 -0
- package/dist/test/unit/resources.d.ts.map +1 -1
- package/dist/test/unit/resources.js +7 -4
- package/dist/test/unit/sip10Token.js +47 -1
- package/dist/test/unit/stx.js +93 -2
- package/dist/test/unit/stxNodeErrors.d.ts +2 -0
- package/dist/test/unit/stxNodeErrors.d.ts.map +1 -0
- package/dist/test/unit/stxNodeErrors.js +118 -0
- package/dist/test/unit/transaction.js +24 -1
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/builderValidators.js +119 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +37 -3
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +86 -3
- package/dist/test/unit/transactionBuilder/pox5Builder.js +96 -1
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +94 -27
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +31 -8
- package/dist/test/unit/transactionBuilder/transferBuilder.js +69 -3
- package/dist/test/unit/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilderFactory.js +63 -0
- package/dist/test/unit/tstxsignet.js +14 -3
- package/dist/test/unit/util.js +106 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4Tm9kZUVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9zdHhOb2RlRXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFFMUQsbUNBQWdDO0FBS2hDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtJQUMxQyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFhLENBQUM7SUFDbEIsTUFBTSxPQUFPLEdBQUcsMENBQTBDLENBQUM7SUFFM0QsTUFBTSxJQUFJLEdBQUcsQ0FBSSxNQUFjLEVBQUUsR0FBWSxFQUFjLEVBQUUsQ0FDMUQsUUFBa0UsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuRixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVksRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNqRCxNQUFNLEVBQUUsR0FBSSxRQUFrRSxDQUFDLEtBQUssQ0FBQztRQUNyRixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQzNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDN0IsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDYixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNmLE9BQU8sR0FBRyxFQUFFO1lBQ1YsRUFBRSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7WUFDckIsRUFBRSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7UUFDekIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQ3RCLFNBQVMsQ0FDUCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUMzQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO0lBRUosTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFRLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztRQUNuRCxNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUNoRCw0Q0FBNEMsQ0FDN0MsQ0FBQztRQUNKLENBQUM7Z0JBQVMsQ0FBQztZQUNULE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUs7UUFDdkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEIsSUFBSSxDQUFDLHVDQUF1QyxFQUFFO2dCQUM1QyxPQUFPO2dCQUNQLE9BQU8sRUFBRSw0Q0FBNEM7YUFDdEQsQ0FBQyxFQUNGLDRDQUE0QyxDQUM3QyxDQUFDO1FBQ0osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSztRQUM5QyxNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztRQUM5RyxDQUFDO2dCQUFTLENBQUM7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLO1FBQzNELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FDdkIsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDOUQsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sZ0JBQU0sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ3BFLDBDQUEwQyxDQUMzQyxDQUFDO1FBQ0osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsS0FBSztRQUNwRixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQ3ZCLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQzNDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0UsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sZ0JBQU0sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ3BFLDBDQUEwQyxDQUMzQyxDQUFDO1FBQ0osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUU7UUFDbkUsTUFBTSxhQUFhLEdBQUcsUUFFckIsQ0FBQztRQUNGLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQywrQkFBK0IsQ0FBQywrQkFBK0IsRUFBRSxhQUFhLENBQUMsRUFDbkcsMERBQTBELENBQzNELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLFFBQStGLENBQUM7UUFDOUcsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEIsS0FBSyxDQUFDLDZCQUE2QixDQUFDO1lBQ2xDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsZUFBZSxFQUFFLCtCQUErQjtZQUNoRCxZQUFZLEVBQUUsYUFBYTtZQUMzQixJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxDQUFDO1lBQ1Isa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDL0IseUJBQXlCLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDdEMsVUFBVSxFQUFFLEdBQUc7U0FDaEIsQ0FBQyxFQUNGLDBEQUEwRCxDQUMzRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztRQUM3RSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQ3ZCLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFDekQsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDOUQsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLFFBQStGLENBQUM7UUFDOUcsSUFBSSxDQUFDO1lBQ0gsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEIsS0FBSyxDQUFDLDZCQUE2QixDQUFDO2dCQUNsQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxlQUFlLEVBQUUsMENBQTBDO2dCQUMzRCxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLENBQUM7Z0JBQ1Isa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUU7Z0JBQy9CLHlCQUF5QixFQUFFLEVBQUUsT0FBTyxFQUFFO2dCQUN0QyxVQUFVLEVBQUUsR0FBRzthQUNoQixDQUFDLEVBQ0YsbUNBQW1DLENBQ3BDLENBQUM7UUFDSixDQUFDO2dCQUFTLENBQUM7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcblxuaW1wb3J0IHsgU3R4IH0gZnJvbSAnLi4vLi4vc3JjJztcblxudHlwZSBHZXRTdHViID0gKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHsgc3RhdHVzQ29kZTogbnVtYmVyOyBib2R5OiB1bmtub3duIH0+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,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDRDQUF1QztBQUN2Qyx1REFBcUY7QUFDckYsbUNBQW1DO0FBQ25DLHNEQUF3QztBQUV4QyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQU0sQ0FBQztBQUV4QyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0IsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxFQUFFLENBQUMsU0FBUyxFQUFFO1lBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFF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Q3RHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1lBQ2xELE1BQU0sRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUEscUNBQXNCLEVBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdELElBQXdDLENBQUMsT0FBTyxHQUFHLElBQUEsb0NBQXFCLEVBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RixFQUFFLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN6QixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRTtZQUM1RCxNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGNyZWF0ZUNvaW5iYXNlUGF5bG9hZCwgZGVzZXJpYWxpemVUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuL3Jlc291cmNlcyc7XG5cbmNvbnN0IHsgVHJhbnNhY3Rpb24sIEtleVBhaXIgfSA9IFN0eExpYjtcblxuZGVzY3JpYmUoJ1N0eCBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGNvaW5zLmdldCgndHN0eCcpO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgZW1wdHkgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0pzb24oKSwgL0VtcHR5IHRyYW5zYWN0aW9uLyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCAvRW1wdHkgdHJhbnNhY3Rpb24vKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBzaWduIGlmIHRyYW5zYWN0aW9uIGlzJywgKCkgPT4ge1xuICAgIGl0KCdpbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgICByZXR1cm4gdHguc2lnbih0ZXN0RGF0YS5JTlZBTElEX0tFWVBBSVJfUFJWKS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW4pO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHRlc3REYXRhLlJBV19UWF9VTlNJR05FRCk7XG4gICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLlRYX1NFTkRFUi5wcnYgfSk7XG4gICAgICBhd2FpdCB0eC5zaWduKGtleXBhaXIpLnNob3VsZC5iZS5mdWxmaWxsZWQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuVFhfUkVDSUVWRVIuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgcmV0dXJuIGVuY29kZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3ZhbGlkIHNpZ24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQpO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5UWF9TRU5ERVIucHJ2IH0pO1xuICAgICAgYXdhaXQgdHguc2lnbihrZXlwYWlyKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TSUdORURfVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlIHRyYW5zYWN0aW9uIHNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2V4cGVjdGVkIHNpemUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRyYW5zYWN0aW9uU2l6ZSgpLCB0ZXN0RGF0YS5SQVdfVFhfVU5TSUdORUQubGVuZ3RoIC8gMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlcnJvciBicmFuY2hlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncmVqZWN0cyBzaWduaW5nIHdpdGggYSBwdWJsaWMtb25seSBrZXkgcGFpcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW4pO1xuICAgICAgY29uc3QgcHVibGljT25seSA9IG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS54cHViMSB9KTtcbiAgICAgIGF3YWl0IHR4LnNpZ24oW3B1YmxpY09ubHldLCAnc2lnaGFzaCcpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL01pc3NpbmcgcHJpdmF0ZSBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHNpZ25pbmcgd2l0aCBtaXNzaW5nIHNpZ25hdHVyZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIGF3YWl0IHR4LnNpZ25XaXRoU2lnbmF0dXJlcyh1bmRlZmluZWQgYXMgbmV2ZXIsIGZhbHNlKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9NaXNzaW5nIHNpZ25hdHVyZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIHVuc3VwcG9ydGVkIHBheWxvYWQgdHlwZSBvbiB0b0pzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luKTtcbiAgICAgIGNvbnN0IHdpcmUgPSBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRlc3REYXRhLlJBV19UWF9VTlNJR05FRCk7XG4gICAgICAod2lyZSBhcyB1bmtub3duIGFzIHsgcGF5bG9hZDogdW5rbm93biB9KS5wYXlsb2FkID0gY3JlYXRlQ29pbmJhc2VQYXlsb2FkKG5ldyBVaW50OEFycmF5KDMyKSk7XG4gICAgICB0eC5zdHhUcmFuc2FjdGlvbiA9IHdpcmU7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4LnRvSnNvbigpLCAvcGF5bG9hZCB0eXBlIG5vdCBzdXBwb3J0ZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCd3cmFwcyBhIG1hbGZvcm1lZCByYXcgdHJhbnNhY3Rpb24gb24gZnJvbVJhd1RyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4LmZyb21SYXdUcmFuc2FjdGlvbignZGVhZGJlZWYnKSwgL0Vycm9yIHBhcnNpbmcgdGhlIHJhdyB0cmFuc2FjdGlvbi8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlclZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2J1aWxkZXJWYWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUF1QztBQUV2QyxzQ0FBc0M7QUFDdEMsdURBQXlDO0FBRXpDLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtJQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsb0VBQW9FLENBQUM7SUFFcEYsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1FBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1FBQ3ZELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDbkQsZ0RBQWdELENBQ2pELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRTtRQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFO1FBQ3pDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7UUFDbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFO1FBQzlDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdkcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzNHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1FBQy9DLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDL0csQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSztRQUN0RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0lBQzVFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUs7UUFDeEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ25GLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFO1FBQ25FLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzdDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFXLENBQUMsRUFDOUUsK0JBQStCLENBQ2hDLENBQUM7UUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFXLENBQUMsRUFDdkYsZ0NBQWdDLENBQ2pDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtRQUN2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hGLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7U0FDN0IsQ0FBQztRQUNGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBZSxDQUFDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztJQUN0RyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLO1FBQzFELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0eCBUcmFuc2FjdGlvbkJ1aWxkZXIgdmFsaWRhdG9ycycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHgnKSk7XG4gIGNvbnN0IHZhbGlkQWRkcmVzcyA9ICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JztcbiAgY29uc3QgcHViS2V5ID0gJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCc7XG5cbiAgaXQoJ3JlamVjdHMgYW4gZW1wdHkgcmF3IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5mcm9tKCcnKSwgL1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eS8pO1xuICB9KTtcblxuICBpdCgnd3JhcHMgYSBtYWxmb3JtZWQgcmF3IHRyYW5zYWN0aW9uIGluIGEgcGFyc2UgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkuZnJvbSgnZGVhZGJlZWYnKSxcbiAgICAgIC9UaGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgcmF3IHRyYW5zYWN0aW9uL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGludmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkuZnJvbVB1YktleSgnbm90LWEtcHVibGljLWtleScpLCAvSW52YWxpZCBwdWJsaWMga2V5Lyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGludmFsaWQgcmVjaXBpZW50IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpLnRvKCdub3QtYW4tYWRkcmVzcycpLCAvSW52YWxpZCBhZGRyZXNzLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGludmFsaWQgYWRkcmVzcyBvbiB2YWxpZGF0ZUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6ICdub3QtYW4tYWRkcmVzcycgfSksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbmVnYXRpdmUgZmVlIGFuZCBzaWduYXR1cmUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5mZWUoeyBmZWU6ICctMScgfSksIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkubnVtYmVyU2lnbmF0dXJlcygtMSksIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYW4gaW52YWxpZCBrZXkgcGFpciBvbiB2YWxpZGF0ZUtleScsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkudmFsaWRhdGVLZXkoeyBrZXk6ICdpbnZhbGlkJyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIGZlZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICBidWlsZGVyLnRvKHZhbGlkQWRkcmVzcyk7XG4gICAgYnVpbGRlci5hbW91bnQoJzEwMCcpO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleShwdWJLZXkpO1xuICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICBidWlsZGVyLm5vbmNlKDEpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGJ1aWxkZXIuYnVpbGQoKSwgL0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIG5vbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICBidWlsZGVyLnRvKHZhbGlkQWRkcmVzcyk7XG4gICAgYnVpbGRlci5hbW91bnQoJzEwMCcpO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleShwdWJLZXkpO1xuICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhidWlsZGVyLmJ1aWxkKCksIC9JbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHNpZ25pbmcgdHdpY2Ugd2l0aCB0aGUgc2FtZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgIGJ1aWxkZXIudG8odmFsaWRBZGRyZXNzKTtcbiAgICBidWlsZGVyLmFtb3VudCgnMTAwJyk7XG4gICAgYnVpbGRlci5ub25jZSgxKTtcbiAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5zZWNyZXRLZXkxIH0pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5zZWNyZXRLZXkxIH0pLCAvUmVwZWF0ZWQgc2lnbi8pO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHRyYW5zZmVyIGluaXQgd2l0aCBhIG1pc3Npbmcgb3Igbm9uLXRyYW5zZmVyIHBheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGJ1aWxkZXIuaW5pdEJ1aWxkZXIoeyB0b0pzb246ICgpID0+ICh7IHBheWxvYWQ6IHVuZGVmaW5lZCB9KSB9IGFzIG5ldmVyKSxcbiAgICAgIC9wYXlsb2FkIG11c3Qgbm90IGJlIHVuZGVmaW5lZC9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBidWlsZGVyLmluaXRCdWlsZGVyKHsgdG9Kc29uOiAoKSA9PiAoeyBwYXlsb2FkOiB7IHBheWxvYWRUeXBlOiAyIH0gfSkgfSBhcyBuZXZlciksXG4gICAgICAvVHJhbnNhY3Rpb24gc2hvdWxkIGJlIHRyYW5zZmVyL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIHNwZW5kaW5nIGNvbmRpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICBjb25zdCBmYWtlVHggPSB7XG4gICAgICB0b0pzb246ICgpID0+ICh7IHBheWxvYWQ6IHsgcGF5bG9hZFR5cGU6IDAsIHRvOiB2YWxpZEFkZHJlc3MsIGFtb3VudDogJzEwMCcgfSB9KSxcbiAgICAgIHN0eFRyYW5zYWN0aW9uOiB7IGF1dGg6IHt9IH0sXG4gICAgfTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5pdEJ1aWxkZXIoZmFrZVR4IGFzIG5ldmVyKSwgL3NwZW5kaW5nIGNvbmRpdGlvbiBjYW5ub3QgYmUgdW5kZWZpbmVkLyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgdHJhbnNmZXIgd2l0aG91dCBhIHB1YmxpYyBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgIGJ1aWxkZXIubm9uY2UoMSk7XG4gICAgYnVpbGRlci50byh2YWxpZEFkZHJlc3MpO1xuICAgIGJ1aWxkZXIuYW1vdW50KCcxMDAnKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhidWlsZGVyLmJ1aWxkKCksIC9zdXBwbHkgYXQgbGVhc3QgMSBwdWJsaWMga2V5Lyk7XG4gIH0pO1xufSk7XG4iXX0=
|