@bitgo-beta/sdk-coin-kaspa 0.0.1-beta.43 → 0.0.1-beta.430

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 (47) hide show
  1. package/README.md +224 -33
  2. package/dist/src/kaspa.d.ts +86 -18
  3. package/dist/src/kaspa.d.ts.map +1 -1
  4. package/dist/src/kaspa.js +119 -31
  5. package/dist/src/lib/constants.d.ts +38 -0
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +56 -5
  8. package/dist/src/lib/iface.d.ts +28 -17
  9. package/dist/src/lib/iface.d.ts.map +1 -1
  10. package/dist/src/lib/iface.js +1 -1
  11. package/dist/src/lib/index.d.ts +2 -0
  12. package/dist/src/lib/index.d.ts.map +1 -1
  13. package/dist/src/lib/index.js +4 -2
  14. package/dist/src/lib/keyPair.d.ts +6 -2
  15. package/dist/src/lib/keyPair.d.ts.map +1 -1
  16. package/dist/src/lib/keyPair.js +7 -4
  17. package/dist/src/lib/pskt.d.ts +257 -0
  18. package/dist/src/lib/pskt.d.ts.map +1 -0
  19. package/dist/src/lib/pskt.js +439 -0
  20. package/dist/src/lib/sighash.d.ts +34 -13
  21. package/dist/src/lib/sighash.d.ts.map +1 -1
  22. package/dist/src/lib/sighash.js +115 -56
  23. package/dist/src/lib/transaction.d.ts +81 -21
  24. package/dist/src/lib/transaction.d.ts.map +1 -1
  25. package/dist/src/lib/transaction.js +167 -44
  26. package/dist/src/lib/transactionBuilder.d.ts +23 -17
  27. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  28. package/dist/src/lib/transactionBuilder.js +53 -22
  29. package/dist/src/lib/utils.d.ts +17 -3
  30. package/dist/src/lib/utils.d.ts.map +1 -1
  31. package/dist/src/lib/utils.js +45 -11
  32. package/dist/src/register.js +2 -2
  33. package/dist/test/fixtures/kaspa.fixtures.d.ts +12 -0
  34. package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -1
  35. package/dist/test/fixtures/kaspa.fixtures.js +76 -11
  36. package/dist/test/unit/coin.test.js +129 -9
  37. package/dist/test/unit/keyPair.test.js +35 -1
  38. package/dist/test/unit/pskt.test.d.ts +15 -0
  39. package/dist/test/unit/pskt.test.d.ts.map +1 -0
  40. package/dist/test/unit/pskt.test.js +383 -0
  41. package/dist/test/unit/transaction.test.js +259 -64
  42. package/dist/test/unit/transactionBuilder.test.js +3 -31
  43. package/dist/test/unit/transactionFlow.test.js +67 -2
  44. package/dist/test/unit/utils.test.js +63 -4
  45. package/dist/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +7 -6
  47. package/LICENSE +0 -191
@@ -6,15 +6,20 @@
6
6
  * Do NOT use these keys in production.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.TRANSACTIONS = exports.UTXOS = exports.SCRIPT_PUBLIC_KEY = exports.ADDRESSES = exports.KEYS = exports.TEST_PRV_KEY = void 0;
9
+ exports.TRANSACTIONS = exports.UTXOS = exports.ECDSA_SCRIPT_PUBLIC_KEY = exports.SCRIPT_PUBLIC_KEY = exports.ADDRESSES = exports.KEYS = exports.TEST_PRV_KEY = void 0;
10
10
  const keyPair_1 = require("../../src/lib/keyPair");
11
11
  const sighash_1 = require("../../src/lib/sighash");
12
+ const constants_1 = require("../../src/lib/constants");
12
13
  // Fixed 32-byte private key for deterministic tests only
13
14
  exports.TEST_PRV_KEY = 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000001';
14
15
  const _kp = new keyPair_1.KeyPair({ prv: exports.TEST_PRV_KEY });
15
16
  const _keys = _kp.getKeys();
16
- const _xOnlyPub = (0, sighash_1.compressedToXOnly)(Buffer.from(_keys.pub, 'hex'));
17
+ const _compressedPub = Buffer.from(_keys.pub, 'hex');
18
+ const _xOnlyPub = (0, sighash_1.compressedToXOnly)(_compressedPub);
19
+ // Schnorr (v0): OP_DATA_32 | xOnlyPubKey32 | OP_CHECKSIG_SCHNORR (0xAC)
17
20
  const _scriptPublicKey = (0, sighash_1.buildP2PKScriptPublicKey)(_xOnlyPub).toString('hex');
21
+ // ECDSA (v1): OP_DATA_33 | compressedPubKey33 | OP_CHECKSIG_ECDSA (0xAB)
22
+ const _ecdsaScriptPublicKey = (0, sighash_1.buildP2PKScriptPublicKey)(_compressedPub, constants_1.KaspaScriptType.ECDSA).toString('hex');
18
23
  exports.KEYS = {
19
24
  prv: exports.TEST_PRV_KEY,
20
25
  pub: _keys.pub,
@@ -22,11 +27,14 @@ exports.KEYS = {
22
27
  exports.ADDRESSES = {
23
28
  valid: _kp.getAddress('mainnet'),
24
29
  testnet: _kp.getAddress('testnet'),
30
+ validEcdsa: _kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA),
31
+ testnetEcdsa: _kp.getAddress('testnet', constants_1.KaspaAddressType.ECDSA),
25
32
  invalid: 'notanaddress',
26
33
  sender: _kp.getAddress('mainnet'),
27
34
  recipient: _kp.getAddress('mainnet'),
28
35
  };
29
36
  exports.SCRIPT_PUBLIC_KEY = _scriptPublicKey;
37
+ exports.ECDSA_SCRIPT_PUBLIC_KEY = _ecdsaScriptPublicKey;
30
38
  // Getters return fresh objects to prevent mutation leakage between tests
31
39
  exports.UTXOS = {
32
40
  get simple() {
@@ -49,6 +57,27 @@ exports.UTXOS = {
49
57
  sigOpCount: 1,
50
58
  };
51
59
  },
60
+ /** ECDSA v1 input — scriptPublicKey ends with 0xAB */
61
+ get ecdsa() {
62
+ return {
63
+ transactionId: 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
64
+ transactionIndex: 0,
65
+ amount: '150000000',
66
+ scriptPublicKey: _ecdsaScriptPublicKey,
67
+ sequence: '0',
68
+ sigOpCount: 1,
69
+ };
70
+ },
71
+ get ecdsaSecond() {
72
+ return {
73
+ transactionId: 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd',
74
+ transactionIndex: 1,
75
+ amount: '250000000',
76
+ scriptPublicKey: _ecdsaScriptPublicKey,
77
+ sequence: '0',
78
+ sigOpCount: 1,
79
+ };
80
+ },
52
81
  };
53
82
  // Use getter functions to return fresh deep copies, preventing test mutation leakage
54
83
  exports.TRANSACTIONS = {
@@ -56,11 +85,34 @@ exports.TRANSACTIONS = {
56
85
  return JSON.parse(JSON.stringify({
57
86
  version: 0,
58
87
  inputs: [exports.UTXOS.simple],
88
+ outputs: [{ address: _kp.getAddress('mainnet'), amount: '99998000', scriptPublicKey: _scriptPublicKey }],
89
+ fee: '2000',
90
+ lockTime: '0',
91
+ subnetworkId: '0000000000000000000000000000000000000000',
92
+ payload: '',
93
+ }));
94
+ },
95
+ get multiInput() {
96
+ return JSON.parse(JSON.stringify({
97
+ version: 0,
98
+ inputs: [exports.UTXOS.simple, exports.UTXOS.second],
99
+ outputs: [{ address: _kp.getAddress('mainnet'), amount: '299998000', scriptPublicKey: _scriptPublicKey }],
100
+ fee: '2000',
101
+ lockTime: '0',
102
+ subnetworkId: '0000000000000000000000000000000000000000',
103
+ payload: '',
104
+ }));
105
+ },
106
+ /** Single ECDSA (v1) input */
107
+ get simpleEcdsa() {
108
+ return JSON.parse(JSON.stringify({
109
+ version: 0,
110
+ inputs: [exports.UTXOS.ecdsa],
59
111
  outputs: [
60
112
  {
61
- address: _kp.getAddress('mainnet'),
62
- amount: '99998000',
63
- scriptPublicKey: _scriptPublicKey,
113
+ address: _kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA),
114
+ amount: '149998000',
115
+ scriptPublicKey: _ecdsaScriptPublicKey,
64
116
  },
65
117
  ],
66
118
  fee: '2000',
@@ -69,15 +121,16 @@ exports.TRANSACTIONS = {
69
121
  payload: '',
70
122
  }));
71
123
  },
72
- get multiInput() {
124
+ /** Two ECDSA inputs */
125
+ get multiInputEcdsa() {
73
126
  return JSON.parse(JSON.stringify({
74
127
  version: 0,
75
- inputs: [exports.UTXOS.simple, exports.UTXOS.second],
128
+ inputs: [exports.UTXOS.ecdsa, exports.UTXOS.ecdsaSecond],
76
129
  outputs: [
77
130
  {
78
- address: _kp.getAddress('mainnet'),
79
- amount: '299998000',
80
- scriptPublicKey: _scriptPublicKey,
131
+ address: _kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA),
132
+ amount: '399998000',
133
+ scriptPublicKey: _ecdsaScriptPublicKey,
81
134
  },
82
135
  ],
83
136
  fee: '2000',
@@ -86,5 +139,17 @@ exports.TRANSACTIONS = {
86
139
  payload: '',
87
140
  }));
88
141
  },
142
+ /** Mixed: first input Schnorr, second input ECDSA */
143
+ get mixedSchnorrEcdsa() {
144
+ return JSON.parse(JSON.stringify({
145
+ version: 0,
146
+ inputs: [exports.UTXOS.simple, exports.UTXOS.ecdsa],
147
+ outputs: [{ address: _kp.getAddress('mainnet'), amount: '249998000', scriptPublicKey: _scriptPublicKey }],
148
+ fee: '2000',
149
+ lockTime: '0',
150
+ subnetworkId: '0000000000000000000000000000000000000000',
151
+ payload: '',
152
+ }));
153
+ },
89
154
  };
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FzcGEuZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsbURBQWdEO0FBQ2hELG1EQUFvRjtBQUdwRix5REFBeUQ7QUFDNUMsUUFBQSxZQUFZLEdBQUcsa0VBQWtFLENBQUM7QUFFL0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLG9CQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFBLDJCQUFpQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxrQ0FBd0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFaEUsUUFBQSxJQUFJLEdBQUc7SUFDbEIsR0FBRyxFQUFFLG9CQUFZO0lBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztDQUNmLENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Q0FDckMsQ0FBQztBQUVXLFFBQUEsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQseUVBQXlFO0FBQzVELFFBQUEsS0FBSyxHQUFHO0lBQ25CLElBQUksTUFBTTtRQUNSLE9BQU87WUFDTCxhQUFhLEVBQUUsa0VBQWtFO1lBQ2pGLGdCQUFnQixFQUFFLENBQUM7WUFDbkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsZUFBZSxFQUFFLGdCQUFnQjtZQUNqQyxRQUFRLEVBQUUsR0FBRztZQUNiLFVBQVUsRUFBRSxDQUFDO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPO1lBQ0wsYUFBYSxFQUFFLGtFQUFrRTtZQUNqRixnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLE1BQU0sRUFBRSxXQUFXO1lBQ25CLGVBQWUsRUFBRSxnQkFBZ0I7WUFDakMsUUFBUSxFQUFFLEdBQUc7WUFDYixVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLHFGQUFxRjtBQUN4RSxRQUFBLFlBQVksR0FBRztJQUMxQixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsT0FBTyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUNsQyxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsZUFBZSxFQUFFLGdCQUFnQjtpQkFDbEM7YUFDRjtZQUNELEdBQUcsRUFBRSxNQUFNO1lBQ1gsUUFBUSxFQUFFLEdBQUc7WUFDYixZQUFZLEVBQUUsMENBQTBDO1lBQ3hELE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUNxQixDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sRUFBRSxhQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xDLE1BQU0sRUFBRSxXQUFXO29CQUNuQixlQUFlLEVBQUUsZ0JBQWdCO2lCQUNsQzthQUNGO1lBQ0QsR0FBRyxFQUFFLE1BQU07WUFDWCxRQUFRLEVBQUUsR0FBRztZQUNiLFlBQVksRUFBRSwwQ0FBMEM7WUFDeEQsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQ3FCLENBQUM7SUFDNUIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEthc3BhIChLQVNQQSkgVGVzdCBGaXh0dXJlc1xuICpcbiAqIERldGVybWluaXN0aWMgdGVzdCBkYXRhIGRlcml2ZWQgZnJvbSBhIGZpeGVkIHByaXZhdGUga2V5LlxuICogRG8gTk9UIHVzZSB0aGVzZSBrZXlzIGluIHByb2R1Y3Rpb24uXG4gKi9cblxuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBjb21wcmVzc2VkVG9YT25seSwgYnVpbGRQMlBLU2NyaXB0UHVibGljS2V5IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9zaWdoYXNoJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBLYXNwYVV0eG9JbnB1dCB9IGZyb20gJy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuXG4vLyBGaXhlZCAzMi1ieXRlIHByaXZhdGUga2V5IGZvciBkZXRlcm1pbmlzdGljIHRlc3RzIG9ubHlcbmV4cG9ydCBjb25zdCBURVNUX1BSVl9LRVkgPSAnYjk0ZjUzNzRmY2U1ZWRiYzhlMmE4Njk3YzE1MzMxNjc3ZTZlYmYwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSc7XG5cbmNvbnN0IF9rcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBURVNUX1BSVl9LRVkgfSk7XG5jb25zdCBfa2V5cyA9IF9rcC5nZXRLZXlzKCk7XG5jb25zdCBfeE9ubHlQdWIgPSBjb21wcmVzc2VkVG9YT25seShCdWZmZXIuZnJvbShfa2V5cy5wdWIsICdoZXgnKSk7XG5jb25zdCBfc2NyaXB0UHVibGljS2V5ID0gYnVpbGRQMlBLU2NyaXB0UHVibGljS2V5KF94T25seVB1YikudG9TdHJpbmcoJ2hleCcpO1xuXG5leHBvcnQgY29uc3QgS0VZUyA9IHtcbiAgcHJ2OiBURVNUX1BSVl9LRVksXG4gIHB1YjogX2tleXMucHViLFxufTtcblxuZXhwb3J0IGNvbnN0IEFERFJFU1NFUyA9IHtcbiAgdmFsaWQ6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gIHRlc3RuZXQ6IF9rcC5nZXRBZGRyZXNzKCd0ZXN0bmV0JyksXG4gIGludmFsaWQ6ICdub3RhbmFkZHJlc3MnLFxuICBzZW5kZXI6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gIHJlY2lwaWVudDogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSxcbn07XG5cbmV4cG9ydCBjb25zdCBTQ1JJUFRfUFVCTElDX0tFWSA9IF9zY3JpcHRQdWJsaWNLZXk7XG5cbi8vIEdldHRlcnMgcmV0dXJuIGZyZXNoIG9iamVjdHMgdG8gcHJldmVudCBtdXRhdGlvbiBsZWFrYWdlIGJldHdlZW4gdGVzdHNcbmV4cG9ydCBjb25zdCBVVFhPUyA9IHtcbiAgZ2V0IHNpbXBsZSgpOiBLYXNwYVV0eG9JbnB1dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uSWQ6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyxcbiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IDAsXG4gICAgICBhbW91bnQ6ICcxMDAwMDAwMDAnLFxuICAgICAgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5LFxuICAgICAgc2VxdWVuY2U6ICcwJyxcbiAgICAgIHNpZ09wQ291bnQ6IDEsXG4gICAgfTtcbiAgfSxcbiAgZ2V0IHNlY29uZCgpOiBLYXNwYVV0eG9JbnB1dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uSWQ6ICdiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJyxcbiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IDEsXG4gICAgICBhbW91bnQ6ICcyMDAwMDAwMDAnLFxuICAgICAgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5LFxuICAgICAgc2VxdWVuY2U6ICcwJyxcbiAgICAgIHNpZ09wQ291bnQ6IDEsXG4gICAgfTtcbiAgfSxcbn07XG5cbi8vIFVzZSBnZXR0ZXIgZnVuY3Rpb25zIHRvIHJldHVybiBmcmVzaCBkZWVwIGNvcGllcywgcHJldmVudGluZyB0ZXN0IG11dGF0aW9uIGxlYWthZ2VcbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTlMgPSB7XG4gIGdldCBzaW1wbGUoKTogS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICBpbnB1dHM6IFtVVFhPUy5zaW1wbGVdLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSxcbiAgICAgICAgICAgIGFtb3VudDogJzk5OTk4MDAwJyxcbiAgICAgICAgICAgIHNjcmlwdFB1YmxpY0tleTogX3NjcmlwdFB1YmxpY0tleSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBmZWU6ICcyMDAwJyxcbiAgICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgICAgc3VibmV0d29ya0lkOiAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHBheWxvYWQ6ICcnLFxuICAgICAgfSlcbiAgICApIGFzIEthc3BhVHJhbnNhY3Rpb25EYXRhO1xuICB9LFxuICBnZXQgbXVsdGlJbnB1dCgpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgIGlucHV0czogW1VUWE9TLnNpbXBsZSwgVVRYT1Muc2Vjb25kXSxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gICAgICAgICAgICBhbW91bnQ6ICcyOTk5OTgwMDAnLFxuICAgICAgICAgICAgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZlZTogJzIwMDAnLFxuICAgICAgICBsb2NrVGltZTogJzAnLFxuICAgICAgICBzdWJuZXR3b3JrSWQ6ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgcGF5bG9hZDogJycsXG4gICAgICB9KVxuICAgICkgYXMgS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG4gIH0sXG59O1xuIl19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FzcGEuZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsbURBQWdEO0FBQ2hELG1EQUFvRjtBQUNwRix1REFBNEU7QUFHNUUseURBQXlEO0FBQzVDLFFBQUEsWUFBWSxHQUFHLGtFQUFrRSxDQUFDO0FBRS9GLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxvQkFBWSxFQUFFLENBQUMsQ0FBQztBQUMvQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUEsMkJBQWlCLEVBQUMsY0FBYyxDQUFDLENBQUM7QUFFcEQsd0VBQXdFO0FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxrQ0FBd0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFN0UseUVBQXlFO0FBQ3pFLE1BQU0scUJBQXFCLEdBQUcsSUFBQSxrQ0FBd0IsRUFBQyxjQUFjLEVBQUUsMkJBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFakcsUUFBQSxJQUFJLEdBQUc7SUFDbEIsR0FBRyxFQUFFLG9CQUFZO0lBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztDQUNmLENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xDLFVBQVUsRUFB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Q25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FDZixJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsQ0FBQyxhQUFLLENBQUMsTUFBTSxFQUFFLGFBQUssQ0FBQyxLQUFLLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pHLEdBQUcsRUFBRSxNQUFNO1lBQ1gsUUFBUSxFQUFFLEdBQUc7WUFDYixZQUFZLEVBQUUsMENBQTBDO1lBQ3hELE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUNxQixDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLYXNwYSAoS0FTUEEpIFRlc3QgRml4dHVyZXNcbiAqXG4gKiBEZXRlcm1pbmlzdGljIHRlc3QgZGF0YSBkZXJpdmVkIGZyb20gYSBmaXhlZCBwcml2YXRlIGtleS5cbiAqIERvIE5PVCB1c2UgdGhlc2Uga2V5cyBpbiBwcm9kdWN0aW9uLlxuICovXG5cbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgY29tcHJlc3NlZFRvWE9ubHksIGJ1aWxkUDJQS1NjcmlwdFB1YmxpY0tleSB9IGZyb20gJy4uLy4uL3NyYy9saWIvc2lnaGFzaCc7XG5pbXBvcnQgeyBLYXNwYVNjcmlwdFR5cGUsIEthc3BhQWRkcmVzc1R5cGUgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBLYXNwYVRyYW5zYWN0aW9uRGF0YSwgS2FzcGFVdHhvSW5wdXQgfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcblxuLy8gRml4ZWQgMzItYnl0ZSBwcml2YXRlIGtleSBmb3IgZGV0ZXJtaW5pc3RpYyB0ZXN0cyBvbmx5XG5leHBvcnQgY29uc3QgVEVTVF9QUlZfS0VZID0gJ2I5NGY1Mzc0ZmNlNWVkYmM4ZTJhODY5N2MxNTMzMTY3N2U2ZWJmMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnO1xuXG5jb25zdCBfa3AgPSBuZXcgS2V5UGFpcih7IHBydjogVEVTVF9QUlZfS0VZIH0pO1xuY29uc3QgX2tleXMgPSBfa3AuZ2V0S2V5cygpO1xuY29uc3QgX2NvbXByZXNzZWRQdWIgPSBCdWZmZXIuZnJvbShfa2V5cy5wdWIsICdoZXgnKTtcbmNvbnN0IF94T25seVB1YiA9IGNvbXByZXNzZWRUb1hPbmx5KF9jb21wcmVzc2VkUHViKTtcblxuLy8gU2Nobm9yciAodjApOiBPUF9EQVRBXzMyIHwgeE9ubHlQdWJLZXkzMiB8IE9QX0NIRUNLU0lHX1NDSE5PUlIgKDB4QUMpXG5jb25zdCBfc2NyaXB0UHVibGljS2V5ID0gYnVpbGRQMlBLU2NyaXB0UHVibGljS2V5KF94T25seVB1YikudG9TdHJpbmcoJ2hleCcpO1xuXG4vLyBFQ0RTQSAodjEpOiBPUF9EQVRBXzMzIHwgY29tcHJlc3NlZFB1YktleTMzIHwgT1BfQ0hFQ0tTSUdfRUNEU0EgKDB4QUIpXG5jb25zdCBfZWNkc2FTY3JpcHRQdWJsaWNLZXkgPSBidWlsZFAyUEtTY3JpcHRQdWJsaWNLZXkoX2NvbXByZXNzZWRQdWIsIEthc3BhU2NyaXB0VHlwZS5FQ0RTQSkudG9TdHJpbmcoJ2hleCcpO1xuXG5leHBvcnQgY29uc3QgS0VZUyA9IHtcbiAgcHJ2OiBURVNUX1BSVl9LRVksXG4gIHB1YjogX2tleXMucHViLFxufTtcblxuZXhwb3J0IGNvbnN0IEFERFJFU1NFUyA9IHtcbiAgdmFsaWQ6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gIHRlc3RuZXQ6IF9rcC5nZXRBZGRyZXNzKCd0ZXN0bmV0JyksXG4gIHZhbGlkRWNkc2E6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JywgS2FzcGFBZGRyZXNzVHlwZS5FQ0RTQSksXG4gIHRlc3RuZXRFY2RzYTogX2twLmdldEFkZHJlc3MoJ3Rlc3RuZXQnLCBLYXNwYUFkZHJlc3NUeXBlLkVDRFNBKSxcbiAgaW52YWxpZDogJ25vdGFuYWRkcmVzcycsXG4gIHNlbmRlcjogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSxcbiAgcmVjaXBpZW50OiBfa3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpLFxufTtcblxuZXhwb3J0IGNvbnN0IFNDUklQVF9QVUJMSUNfS0VZID0gX3NjcmlwdFB1YmxpY0tleTtcbmV4cG9ydCBjb25zdCBFQ0RTQV9TQ1JJUFRfUFVCTElDX0tFWSA9IF9lY2RzYVNjcmlwdFB1YmxpY0tleTtcblxuLy8gR2V0dGVycyByZXR1cm4gZnJlc2ggb2JqZWN0cyB0byBwcmV2ZW50IG11dGF0aW9uIGxlYWthZ2UgYmV0d2VlbiB0ZXN0c1xuZXhwb3J0IGNvbnN0IFVUWE9TID0ge1xuICBnZXQgc2ltcGxlKCk6IEthc3BhVXR4b0lucHV0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNhY3Rpb25JZDogJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLFxuICAgICAgdHJhbnNhY3Rpb25JbmRleDogMCxcbiAgICAgIGFtb3VudDogJzEwMDAwMDAwMCcsXG4gICAgICBzY3JpcHRQdWJsaWNLZXk6IF9zY3JpcHRQdWJsaWNLZXksXG4gICAgICBzZXF1ZW5jZTogJzAnLFxuICAgICAgc2lnT3BDb3VudDogMSxcbiAgICB9O1xuICB9LFxuICBnZXQgc2Vjb25kKCk6IEthc3BhVXR4b0lucHV0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNhY3Rpb25JZDogJ2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmInLFxuICAgICAgdHJhbnNhY3Rpb25JbmRleDogMSxcbiAgICAgIGFtb3VudDogJzIwMDAwMDAwMCcsXG4gICAgICBzY3JpcHRQdWJsaWNLZXk6IF9zY3JpcHRQdWJsaWNLZXksXG4gICAgICBzZXF1ZW5jZTogJzAnLFxuICAgICAgc2lnT3BDb3VudDogMSxcbiAgICB9O1xuICB9LFxuICAvKiogRUNEU0EgdjEgaW5wdXQg4oCUIHNjcmlwdFB1YmxpY0tleSBlbmRzIHdpdGggMHhBQiAqL1xuICBnZXQgZWNkc2EoKTogS2FzcGFVdHhvSW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2FjdGlvbklkOiAnY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYycsXG4gICAgICB0cmFuc2FjdGlvbkluZGV4OiAwLFxuICAgICAgYW1vdW50OiAnMTUwMDAwMDAwJyxcbiAgICAgIHNjcmlwdFB1YmxpY0tleTogX2VjZHNhU2NyaXB0UHVibGljS2V5LFxuICAgICAgc2VxdWVuY2U6ICcwJyxcbiAgICAgIHNpZ09wQ291bnQ6IDEsXG4gICAgfTtcbiAgfSxcbiAgZ2V0IGVjZHNhU2Vjb25kKCk6IEthc3BhVXR4b0lucHV0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNhY3Rpb25JZDogJ2RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQnLFxuICAgICAgdHJhbnNhY3Rpb25JbmRleDogMSxcbiAgICAgIGFtb3VudDogJzI1MDAwMDAwMCcsXG4gICAgICBzY3JpcHRQdWJsaWNLZXk6IF9lY2RzYVNjcmlwdFB1YmxpY0tleSxcbiAgICAgIHNlcXVlbmNlOiAnMCcsXG4gICAgICBzaWdPcENvdW50OiAxLFxuICAgIH07XG4gIH0sXG59O1xuXG4vLyBVc2UgZ2V0dGVyIGZ1bmN0aW9ucyB0byByZXR1cm4gZnJlc2ggZGVlcCBjb3BpZXMsIHByZXZlbnRpbmcgdGVzdCBtdXRhdGlvbiBsZWFrYWdlXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05TID0ge1xuICBnZXQgc2ltcGxlKCk6IEthc3BhVHJhbnNhY3Rpb25EYXRhIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgaW5wdXRzOiBbVVRYT1Muc2ltcGxlXSxcbiAgICAgICAgb3V0cHV0czogW3sgYWRkcmVzczogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSwgYW1vdW50OiAnOTk5OTgwMDAnLCBzY3JpcHRQdWJsaWNLZXk6IF9zY3JpcHRQdWJsaWNLZXkgfV0sXG4gICAgICAgIGZlZTogJzIwMDAnLFxuICAgICAgICBsb2NrVGltZTogJzAnLFxuICAgICAgICBzdWJuZXR3b3JrSWQ6ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgcGF5bG9hZDogJycsXG4gICAgICB9KVxuICAgICkgYXMgS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG4gIH0sXG4gIGdldCBtdWx0aUlucHV0KCk6IEthc3BhVHJhbnNhY3Rpb25EYXRhIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgaW5wdXRzOiBbVVRYT1Muc2ltcGxlLCBVVFhPUy5zZWNvbmRdLFxuICAgICAgICBvdXRwdXRzOiBbeyBhZGRyZXNzOiBfa3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpLCBhbW91bnQ6ICcyOTk5OTgwMDAnLCBzY3JpcHRQdWJsaWNLZXk6IF9zY3JpcHRQdWJsaWNLZXkgfV0sXG4gICAgICAgIGZlZTogJzIwMDAnLFxuICAgICAgICBsb2NrVGltZTogJzAnLFxuICAgICAgICBzdWJuZXR3b3JrSWQ6ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgcGF5bG9hZDogJycsXG4gICAgICB9KVxuICAgICkgYXMgS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG4gIH0sXG4gIC8qKiBTaW5nbGUgRUNEU0EgKHYxKSBpbnB1dCAqL1xuICBnZXQgc2ltcGxlRWNkc2EoKTogS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICBpbnB1dHM6IFtVVFhPUy5lY2RzYV0sXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBfa3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpLFxuICAgICAgICAgICAgYW1vdW50OiAnMTQ5OTk4MDAwJyxcbiAgICAgICAgICAgIHNjcmlwdFB1YmxpY0tleTogX2VjZHNhU2NyaXB0UHVibGljS2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZlZTogJzIwMDAnLFxuICAgICAgICBsb2NrVGltZTogJzAnLFxuICAgICAgICBzdWJuZXR3b3JrSWQ6ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgcGF5bG9hZDogJycsXG4gICAgICB9KVxuICAgICkgYXMgS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG4gIH0sXG4gIC8qKiBUd28gRUNEU0EgaW5wdXRzICovXG4gIGdldCBtdWx0aUlucHV0RWNkc2EoKTogS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICBpbnB1dHM6IFtVVFhPUy5lY2RzYSwgVVRYT1MuZWNkc2FTZWNvbmRdLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnLCBLYXNwYUFkZHJlc3NUeXBlLkVDRFNBKSxcbiAgICAgICAgICAgIGFtb3VudDogJzM5OTk5ODAwMCcsXG4gICAgICAgICAgICBzY3JpcHRQdWJsaWNLZXk6IF9lY2RzYVNjcmlwdFB1YmxpY0tleSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBmZWU6ICcyMDAwJyxcbiAgICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgICAgc3VibmV0d29ya0lkOiAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHBheWxvYWQ6ICcnLFxuICAgICAgfSlcbiAgICApIGFzIEthc3BhVHJhbnNhY3Rpb25EYXRhO1xuICB9LFxuICAvKiogTWl4ZWQ6IGZpcnN0IGlucHV0IFNjaG5vcnIsIHNlY29uZCBpbnB1dCBFQ0RTQSAqL1xuICBnZXQgbWl4ZWRTY2hub3JyRWNkc2EoKTogS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICBpbnB1dHM6IFtVVFhPUy5zaW1wbGUsIFVUWE9TLmVjZHNhXSxcbiAgICAgICAgb3V0cHV0czogW3sgYWRkcmVzczogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSwgYW1vdW50OiAnMjQ5OTk4MDAwJywgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5IH1dLFxuICAgICAgICBmZWU6ICcyMDAwJyxcbiAgICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgICAgc3VibmV0d29ya0lkOiAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHBheWxvYWQ6ICcnLFxuICAgICAgfSlcbiAgICApIGFzIEthc3BhVHJhbnNhY3Rpb25EYXRhO1xuICB9LFxufTtcbiJdfQ==
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const should = __importStar(require("should"));
37
37
  const statics_1 = require("@bitgo-beta/statics");
38
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
38
39
  const src_1 = require("../../src");
39
40
  const keyPair_1 = require("../../src/lib/keyPair");
40
41
  const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
@@ -63,8 +64,8 @@ describe('Kaspa (KASPA)', function () {
63
64
  post: () => ({ result: () => Promise.resolve({}) }),
64
65
  get: () => ({ result: () => Promise.resolve({}) }),
65
66
  };
66
- kaspa = new src_1.Kaspa(mockBitgo, statics_1.coins.get('kaspa'));
67
- tkaspa = new src_1.Kaspa(mockBitgo, statics_1.coins.get('tkaspa'));
67
+ kaspa = src_1.Kaspa.createInstance(mockBitgo);
68
+ tkaspa = src_1.Tkaspa.createInstance(mockBitgo);
68
69
  });
69
70
  describe('Coin Properties', function () {
70
71
  it('should have the correct chain name', function () {
@@ -157,7 +158,9 @@ describe('Kaspa (KASPA)', function () {
157
158
  const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
158
159
  const address = kp.getAddress('mainnet');
159
160
  const keychains = [{ pub: other.pub }, { pub: other.pub }, { pub: other.pub }];
160
- await kaspa.isWalletAddress({ address, keychains }).should.be.rejectedWith(/address validation failure/);
161
+ await kaspa
162
+ .isWalletAddress({ address, keychains })
163
+ .should.be.rejectedWith(/address validation failure/);
161
164
  });
162
165
  });
163
166
  describe('parseTransaction', function () {
@@ -177,7 +180,9 @@ describe('Kaspa (KASPA)', function () {
177
180
  parsed.outputs[0].coin.should.equal('kaspa');
178
181
  });
179
182
  it('should throw on invalid txHex', async function () {
180
- await kaspa.parseTransaction({ txHex: 'notvalidhex!!' }).should.be.rejectedWith(/Invalid transaction/);
183
+ await kaspa
184
+ .parseTransaction({ txHex: 'notvalidhex!!' })
185
+ .should.be.rejectedWith(/Invalid transaction/);
181
186
  });
182
187
  });
183
188
  describe('explainTransaction', function () {
@@ -188,11 +193,13 @@ describe('Kaspa (KASPA)', function () {
188
193
  explained.outputs[0].amount.should.equal('99998000');
189
194
  });
190
195
  it('should throw when txHex is missing', async function () {
191
- await kaspa.explainTransaction({}).should.be.rejectedWith(/missing transaction hex/);
196
+ await kaspa
197
+ .explainTransaction({})
198
+ .should.be.rejectedWith(/missing transaction hex/);
192
199
  });
193
200
  });
194
201
  describe('signTransaction', function () {
195
- it('should sign a prebuilt transaction', async function () {
202
+ it('Path A — prv: signs all inputs with private key', async function () {
196
203
  const txHex = await buildUnsignedTxHex('kaspa');
197
204
  const result = (await kaspa.signTransaction({
198
205
  txPrebuild: { txHex },
@@ -200,10 +207,64 @@ describe('Kaspa (KASPA)', function () {
200
207
  }));
201
208
  result.txHex.should.be.a.String();
202
209
  const signed = transaction_1.Transaction.fromHex('kaspa', result.txHex);
203
- signed.signature[0].should.have.length(130);
210
+ signed.signature[0].should.have.length(132);
211
+ });
212
+ it('Path B — signatures[]: applies per-input TSS signatures for multi-input tx', async function () {
213
+ // Build a 2-input unsigned transaction (simulating what the platform would build)
214
+ const builder = new transactionBuilder_1.TransactionBuilder(statics_1.coins.get('kaspa'));
215
+ builder.addInput(kaspa_fixtures_1.UTXOS.simple).addInput(kaspa_fixtures_1.UTXOS.second).to(kaspa_fixtures_1.ADDRESSES.recipient, '299996000').fee('4000');
216
+ const unsignedTx = (await builder.build());
217
+ const txHex = unsignedTx.toHex();
218
+ // Simulate what the platform does: read per-input sighashes and sign each
219
+ // independently (normally via N DKLS sessions; here using the raw key directly)
220
+ const prv = Buffer.from(kaspa_fixtures_1.KEYS.prv, 'hex');
221
+ const pub = Buffer.from(kaspa_fixtures_1.KEYS.pub, 'hex');
222
+ const payloads = unsignedTx.signablePayloads; // Buffer[2]
223
+ payloads.should.have.length(2);
224
+ const signatures = payloads.map((hash, inputIndex) => ({
225
+ inputIndex,
226
+ pubKey: kaspa_fixtures_1.KEYS.pub,
227
+ signature: Buffer.from(secp256k1_1.ecc.signSchnorr(hash, prv)).toString('hex'),
228
+ }));
229
+ // Both signatures were produced over different messages — they are distinct
230
+ signatures[0].signature.should.not.equal(signatures[1].signature);
231
+ const result = (await kaspa.signTransaction({
232
+ txPrebuild: { txHex },
233
+ signatures,
234
+ }));
235
+ result.txHex.should.be.a.String();
236
+ const signed = transaction_1.Transaction.fromHex('kaspa', result.txHex);
237
+ // Both inputs must carry a valid 65-byte signature (64 Schnorr + 1 sighash type)
238
+ signed.signature.should.have.length(2);
239
+ signed.signature[0].should.have.length(132);
240
+ signed.signature[1].should.have.length(132);
241
+ // Each signature must verify against its own input's sighash, not the other's
242
+ signed.verifySignature(pub, 0).should.be.true();
243
+ signed.verifySignature(pub, 1).should.be.true();
244
+ });
245
+ it('Path B — halfSigned returned when only some inputs are signed', async function () {
246
+ const builder = new transactionBuilder_1.TransactionBuilder(statics_1.coins.get('kaspa'));
247
+ builder.addInput(kaspa_fixtures_1.UTXOS.simple).addInput(kaspa_fixtures_1.UTXOS.second).to(kaspa_fixtures_1.ADDRESSES.recipient, '299996000').fee('4000');
248
+ const unsignedTx = (await builder.build());
249
+ const txHex = unsignedTx.toHex();
250
+ const prv = Buffer.from(kaspa_fixtures_1.KEYS.prv, 'hex');
251
+ const hash0 = unsignedTx.signablePayloads[0];
252
+ // Only sign input 0 — simulates a partial TSS result
253
+ const result = await kaspa.signTransaction({
254
+ txPrebuild: { txHex },
255
+ signatures: [
256
+ { inputIndex: 0, pubKey: kaspa_fixtures_1.KEYS.pub, signature: Buffer.from(secp256k1_1.ecc.signSchnorr(hash0, prv)).toString('hex') },
257
+ ],
258
+ });
259
+ // Should come back as halfSigned since input 1 is still unsigned
260
+ const halfResult = result;
261
+ should.exist(halfResult.halfSigned);
262
+ should.not.exist(halfResult.txHex);
204
263
  });
205
264
  it('should throw when txHex is missing', async function () {
206
- await kaspa.signTransaction({ txPrebuild: {}, prv: kaspa_fixtures_1.KEYS.prv }).should.be.rejectedWith(/missing txHex/);
265
+ await kaspa
266
+ .signTransaction({ txPrebuild: {}, prv: kaspa_fixtures_1.KEYS.prv })
267
+ .should.be.rejectedWith(/missing txHex/);
207
268
  });
208
269
  });
209
270
  describe('verifyTransaction', function () {
@@ -215,11 +276,70 @@ describe('Kaspa (KASPA)', function () {
215
276
  });
216
277
  result.should.be.true();
217
278
  });
279
+ it('should pass when recipients is absent (no recipient check)', async function () {
280
+ const txHex = await buildSignedTxHex('kaspa');
281
+ const result = await kaspa.verifyTransaction({
282
+ txPrebuild: { txHex },
283
+ txParams: {},
284
+ });
285
+ result.should.be.true();
286
+ });
287
+ it('should throw when expected recipient count exceeds actual outputs', async function () {
288
+ const txHex = await buildSignedTxHex('kaspa');
289
+ // tx has 1 output, we claim 2 recipients
290
+ await kaspa
291
+ .verifyTransaction({
292
+ txPrebuild: { txHex },
293
+ txParams: {
294
+ recipients: [
295
+ { address: kaspa_fixtures_1.ADDRESSES.recipient, amount: '50000000' },
296
+ { address: kaspa_fixtures_1.ADDRESSES.recipient, amount: '49998000' },
297
+ ],
298
+ },
299
+ })
300
+ .should.be.rejectedWith(/Expected at least 2 outputs/);
301
+ });
218
302
  it('should throw when txHex is missing', async function () {
219
303
  await kaspa
220
304
  .verifyTransaction({ txPrebuild: {}, txParams: {} })
221
305
  .should.be.rejectedWith(/missing required tx prebuild property txHex/);
222
306
  });
307
+ it('should throw when txHex is invalid', async function () {
308
+ await kaspa
309
+ .verifyTransaction({
310
+ txPrebuild: { txHex: 'deadbeef' },
311
+ txParams: {},
312
+ })
313
+ .should.be.rejectedWith(/Invalid transaction/);
314
+ });
315
+ });
316
+ describe('parseTransaction — halfSigned path', function () {
317
+ it('should parse a transaction passed via halfSigned.txHex', async function () {
318
+ const txHex = await buildUnsignedTxHex('kaspa');
319
+ const parsed = (await kaspa.parseTransaction({ halfSigned: { txHex } }));
320
+ parsed.inputs.should.have.length(1);
321
+ parsed.inputs[0].coin.should.equal('kaspa');
322
+ parsed.outputs.should.have.length(1);
323
+ parsed.outputs[0].amount.should.equal('99998000');
324
+ });
325
+ });
326
+ describe('explainTransaction — halfSigned path', function () {
327
+ it('should explain a transaction passed via halfSigned.txHex', async function () {
328
+ const txHex = await buildUnsignedTxHex('kaspa');
329
+ const explained = await kaspa.explainTransaction({ halfSigned: { txHex } });
330
+ explained.outputs.should.have.length(1);
331
+ explained.outputs[0].amount.should.equal('99998000');
332
+ });
333
+ });
334
+ describe('signTransaction — edge cases', function () {
335
+ it('should return halfSigned when neither prv nor signatures provided', async function () {
336
+ const txHex = await buildUnsignedTxHex('kaspa');
337
+ const result = await kaspa.signTransaction({ txPrebuild: { txHex } });
338
+ // no signing happened — all signature scripts are empty, so halfSigned is returned
339
+ const typed = result;
340
+ should.exist(typed.halfSigned);
341
+ should.not.exist(typed.txHex);
342
+ });
223
343
  });
224
344
  });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NvaW4udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxpREFBNEM7QUFDNUMsbUNBQWtDO0FBQ2xDLG1EQUFnRDtBQUNoRCx5RUFBc0U7QUFDdEUsMkRBQXdEO0FBQ3hELCtEQUFvRTtBQUVwRSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsUUFBZ0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxzQkFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQywwQkFBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztJQUNsRCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0s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TCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEthc3BhIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEFERFJFU1NFUywgS0VZUywgVVRYT1MgfSBmcm9tICcuLi9maXh0dXJlcy9rYXNwYS5maXh0dXJlcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2lnbmVkVHhIZXgoY29pbk5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldChjb2luTmFtZSkpO1xuICBidWlsZGVyLmFkZElucHV0KFVUWE9TLnNpbXBsZSkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzk5OTk4MDAwJykuZmVlKCcyMDAwJyk7XG4gIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIHR4LnNpZ24oQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKSk7XG4gIHJldHVybiB0eC50b0hleCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFVuc2lnbmVkVHhIZXgoY29pbk5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldChjb2luTmFtZSkpO1xuICBidWlsZGVyLmFkZElucHV0KFVUWE9TLnNpbXBsZSkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzk5OTk4MDAwJykuZmVlKCcyMDAwJyk7XG4gIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIHJldHVybiB0eC50b0hleCgpO1xufVxuXG5kZXNjcmliZSgnS2FzcGEgKEtBU1BBKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGthc3BhOiBLYXNwYTtcbiAgbGV0IHRrYXNwYTogS2FzcGE7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrQml0Z28gPSB7XG4gICAgICB1cmw6ICgpID0+ICcnLFxuICAgICAgbWljcm9zZXJ2aWNlc1VybDogKCkgPT4gJycsXG4gICAgICBwb3N0OiAoKSA9PiAoeyByZXN1bHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkgfSksXG4gICAgICBnZXQ6ICgpID0+ICh7IHJlc3VsdDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHt9KSB9KSxcbiAgICB9IGFzIGFueTtcbiAgICBrYXNwYSA9IG5ldyBLYXNwYShtb2NrQml0Z28sIGNvaW5zLmdldCgna2FzcGEnKSk7XG4gICAgdGthc3BhID0gbmV3IEthc3BhKG1vY2tCaXRnbywgY29pbnMuZ2V0KCd0a2FzcGEnKSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb2luIFByb3BlcnRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGNoYWluIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICAgIHRrYXNwYS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGthc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgZmFtaWx5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdLYXNwYScpO1xuICAgICAgdGthc3BhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEthc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgYmFzZSBmYWN0b3IgKDEwXjgpJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxMDAwMDAwMDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IFRTUyAoRUNEU0EgTVBDKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGthc3BhLmdldE1QQ0FsZ29yaXRobSgpLnNob3VsZC5lcXVhbCgnZWNkc2EnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleSBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSB2YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFB1YignMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4Jykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRQdWIoJ25vdC1hLWtleScpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFBydignYTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMicpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5IHBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IGthc3BhLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICAgIGtwLnB1YiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTtcbiAgICAgIGtwLnBydiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpciBmcm9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmFsbG9jKDMyLCAxKTtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29uc2lzdGVudCBrZXlzIGZyb20gc2FtZSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgNDIpO1xuICAgICAgY29uc3Qga3AxID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgY29uc3Qga3AyID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga3AxLnB1YiEuc2hvdWxkLmVxdWFsKGtwMi5wdWIhKTtcbiAgICAgIGtwMS5wcnYhLnNob3VsZC5lcXVhbChrcDIucHJ2ISk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBrYXNwYS5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoJ25vdC1hbi1hZGRyZXNzJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBlbXB0eSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoJycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXYWxsZXRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhZGRyZXNzIG1hdGNoZXMgZGVyaXZlZCBhZGRyZXNzIGZyb20ga2V5Y2hhaW5zWzBdJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgcHViOiBLRVlTLnB1YiB9LCB7IHB1YjogS0VZUy5wdWIgfSwgeyBwdWI6IEtFWVMucHViIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEuaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gYXMgYW55KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBpbnZhbGlkIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogJ25vdC1hbi1hZGRyZXNzJywga2V5Y2hhaW5zOiBbXSB9IGFzIGFueSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWlucyBjb3VudCBpcyBub3QgMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnM6IFt7IHB1YjogS0VZUy5wdWIgfV0gfSBhcyBhbnkpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGtleWNoYWlucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGRlcml2ZWQgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG90aGVyID0gbmV3IEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBwdWI6IG90aGVyLnB1YiB9LCB7IHB1Yjogb3RoZXIucHViIH0sIHsgcHViOiBvdGhlci5wdWIgfV07XG4gICAgICBhd2FpdCBrYXNwYS5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnMgfSBhcyBhbnkpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2FkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCB3aGVuIG5vIHR4SGV4IGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQga2FzcGEucGFyc2VUcmFuc2FjdGlvbih7fSk7XG4gICAgICBwYXJzZWQuc2hvdWxkLmRlZXBFcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBpbnB1dHMgYW5kIG91dHB1dHMgZm9yIGEgdmFsaWQgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IChhd2FpdCBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXggfSkpIGFzIHtcbiAgICAgICAgaW5wdXRzOiB7IGFtb3VudDogc3RyaW5nOyBjb2luOiBzdHJpbmcgfVtdO1xuICAgICAgICBvdXRwdXRzOiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBzdHJpbmc7IGNvaW46IHN0cmluZyB9W107XG4gICAgICB9O1xuICAgICAgcGFyc2VkLmlucHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBwYXJzZWQuaW5wdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoVVRYT1Muc2ltcGxlLmFtb3VudCk7XG4gICAgICBwYXJzZWQuaW5wdXRzWzBdLmNvaW4uc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgICAgcGFyc2VkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKEFERFJFU1NFUy5yZWNpcGllbnQpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uY29pbi5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGludmFsaWQgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6ICdub3R2YWxpZGhleCEhJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdmFsaWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGEuZXhwbGFpblRyYW5zYWN0aW9uKHt9IGFzIGFueSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSBwcmVidWlsdCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgcHJ2OiBLRVlTLnBydixcbiAgICAgIH0gYXMgYW55KSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG4gICAgICByZXN1bHQudHhIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBzaWduZWQgPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCdrYXNwYScsIHJlc3VsdC50eEhleCk7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzBdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYS5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgcHJ2OiBLRVlTLnBydiB9IGFzIGFueSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRTaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBBRERSRVNTRVMucmVjaXBpZW50LCBhbW91bnQ6ICc5OTk5ODAwMCcgfV0gfSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgdHhQYXJhbXM6IHt9IH0gYXMgYW55KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NvaW4udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxpREFBNEM7QUFFNUMscURBQTRDO0FBQzVDLG1DQUEwQztBQUMxQyxtREFBZ0Q7QUFDaEQseUVBQXNFO0FBQ3RFLDJEQUF3RDtBQUV4RCwrREFBb0U7QUFPcEUsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7SUFDbEQsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxRQUFnQjtJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHVDQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLDBCQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdB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QUMsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtRQUN2QyxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUU5RCxDQUFDLENBQUM7WUFDTixtRkFBbUY7WUFDbkYsTUFBTSxLQUFLLEdBQUcsTUFBdUUsQ0FBQztZQUN0RixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhLCBUa2FzcGEgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2FzcGFWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB7IEFERFJFU1NFUywgS0VZUywgVVRYT1MgfSBmcm9tICcuLi9maXh0dXJlcy9rYXNwYS5maXh0dXJlcyc7XG5cbnR5cGUgUGFyc2VkVHggPSB7XG4gIGlucHV0czogeyBhbW91bnQ6IHN0cmluZzsgY29pbjogc3RyaW5nIH1bXTtcbiAgb3V0cHV0czogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nOyBjb2luOiBzdHJpbmcgfVtdO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRTaWduZWRUeEhleChjb2luTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gIGJ1aWxkZXIuYWRkSW5wdXQoVVRYT1Muc2ltcGxlKS50byhBRERSRVNTRVMucmVjaXBpZW50LCAnOTk5OTgwMDAnKS5mZWUoJzIwMDAnKTtcbiAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgdHguc2lnbihCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpKTtcbiAgcmV0dXJuIHR4LnRvSGV4KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkVW5zaWduZWRUeEhleChjb2luTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gIGJ1aWxkZXIuYWRkSW5wdXQoVVRYT1Muc2ltcGxlKS50byhBRERSRVNTRVMucmVjaXBpZW50LCAnOTk5OTgwMDAnKS5mZWUoJzIwMDAnKTtcbiAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgcmV0dXJuIHR4LnRvSGV4KCk7XG59XG5cbmRlc2NyaWJlKCdLYXNwYSAoS0FTUEEpJywgZnVuY3Rpb24gKCkge1xuICBsZXQga2FzcGE6IEthc3BhO1xuICBsZXQgdGthc3BhOiBUa2FzcGE7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrQml0Z28gPSB7XG4gICAgICB1cmw6ICgpID0+ICcnLFxuICAgICAgbWljcm9zZXJ2aWNlc1VybDogKCkgPT4gJycsXG4gICAgICBwb3N0OiAoKSA9PiAoeyByZXN1bHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkgfSksXG4gICAgICBnZXQ6ICgpID0+ICh7IHJlc3VsdDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHt9KSB9KSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGthc3BhID0gS2FzcGEuY3JlYXRlSW5zdGFuY2UobW9ja0JpdGdvKTtcbiAgICB0a2FzcGEgPSBUa2FzcGEuY3JlYXRlSW5zdGFuY2UobW9ja0JpdGdvKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NvaW4gUHJvcGVydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgY2hhaW4gbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgICAgdGthc3BhLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0a2FzcGEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBmYW1pbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgZnVsbCBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0thc3BhJyk7XG4gICAgICB0a2FzcGEuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgS2FzcGEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBiYXNlIGZhY3RvciAoMTBeOCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDEwMDAwMDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgVFNTIChFQ0RTQSBNUEMpJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuc3VwcG9ydHNUc3MoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAga2FzcGEuZ2V0TVBDQWxnb3JpdGhtKCkuc2hvdWxkLmVxdWFsKCdlY2RzYScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5IFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHZhbGlkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5pc1ZhbGlkUHViKCcwMjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFB1Yignbm90LWEta2V5Jykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgdmFsaWQgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5pc1ZhbGlkUHJ2KCdhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleSBHZW5lcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHViKTtcbiAgICAgIHNob3VsZC5leGlzdChrcC5wcnYpO1xuICAgICAgKGtwLnB1YiBhcyBzdHJpbmcpLnNob3VsZC5oYXZlLmxlbmd0aCg2Nik7XG4gICAgICAoa3AucHJ2IGFzIHN0cmluZykuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpciBmcm9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmFsbG9jKDMyLCAxKTtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29uc2lzdGVudCBrZXlzIGZyb20gc2FtZSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgNDIpO1xuICAgICAgY29uc3Qga3AxID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgY29uc3Qga3AyID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgKGtwMS5wdWIgYXMgc3RyaW5nKS5zaG91bGQuZXF1YWwoa3AyLnB1YiBhcyBzdHJpbmcpO1xuICAgICAgKGtwMS5wcnYgYXMgc3RyaW5nKS5zaG91bGQuZXF1YWwoa3AyLnBydiBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBtYWlubmV0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRBZGRyZXNzKCdub3QtYW4tYWRkcmVzcycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgZW1wdHkgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzV2FsbGV0QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYWRkcmVzcyBtYXRjaGVzIGRlcml2ZWQgYWRkcmVzcyBmcm9tIGtleWNoYWluc1swXScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFt7IHB1YjogS0VZUy5wdWIgfSwgeyBwdWI6IEtFWVMucHViIH0sIHsgcHViOiBLRVlTLnB1YiB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3MsIGtleWNoYWlucyB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLmlzV2FsbGV0QWRkcmVzcz5bMF0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGludmFsaWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzOiAnbm90LWFuLWFkZHJlc3MnLCBrZXljaGFpbnM6IFtdIH0gYXMgUGFyYW1ldGVyczx0eXBlb2Yga2FzcGEuaXNXYWxsZXRBZGRyZXNzPlswXSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWlucyBjb3VudCBpcyBub3QgMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnM6IFt7IHB1YjogS0VZUy5wdWIgfV0gfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5pc1dhbGxldEFkZHJlc3M+WzBdKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBrZXljaGFpbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBkZXJpdmVkIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvdGhlciA9IG5ldyBLZXlQYWlyKCkuZ2V0S2V5cygpO1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgcHViOiBvdGhlci5wdWIgfSwgeyBwdWI6IG90aGVyLnB1YiB9LCB7IHB1Yjogb3RoZXIucHViIH1dO1xuICAgICAgYXdhaXQga2FzcGFcbiAgICAgICAgLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3MsIGtleWNoYWlucyB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLmlzV2FsbGV0QWRkcmVzcz5bMF0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBvYmplY3Qgd2hlbiBubyB0eEhleCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGthc3BhLnBhcnNlVHJhbnNhY3Rpb24oe30gYXMgUGFyYW1ldGVyczx0eXBlb2Yga2FzcGEucGFyc2VUcmFuc2FjdGlvbj5bMF0pO1xuICAgICAgcGFyc2VkLnNob3VsZC5kZWVwRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5wdXRzIGFuZCBvdXRwdXRzIGZvciBhIHZhbGlkIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkVHhIZXgoJ2thc3BhJyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSAoYXdhaXQga2FzcGEucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4IH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICB0eXBlb2Yga2FzcGEucGFyc2VUcmFuc2FjdGlvblxuICAgICAgPlswXSkpIGFzIHVua25vd24gYXMgUGFyc2VkVHg7XG4gICAgICBwYXJzZWQuaW5wdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhcnNlZC5pbnB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbChVVFhPUy5zaW1wbGUuYW1vdW50KTtcbiAgICAgIHBhcnNlZC5pbnB1dHNbMF0uY29pbi5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgICBwYXJzZWQub3V0cHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBwYXJzZWQub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCc5OTk5ODAwMCcpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoQUREUkVTU0VTLnJlY2lwaWVudCk7XG4gICAgICBwYXJzZWQub3V0cHV0c1swXS5jb2luLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gaW52YWxpZCB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6ICdub3R2YWxpZGhleCEhJyB9IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2Yga2FzcGEucGFyc2VUcmFuc2FjdGlvbj5bMF0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdmFsaWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGFcbiAgICAgICAgLmV4cGxhaW5UcmFuc2FjdGlvbih7fSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5leHBsYWluVHJhbnNhY3Rpb24+WzBdKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnUGF0aCBBIOKAlCBwcnY6IHNpZ25zIGFsbCBpbnB1dHMgd2l0aCBwcml2YXRlIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgcHJ2OiBLRVlTLnBydixcbiAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5zaWduVHJhbnNhY3Rpb24+WzBdKSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG4gICAgICByZXN1bHQudHhIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBzaWduZWQgPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCdrYXNwYScsIHJlc3VsdC50eEhleCk7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzBdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1BhdGggQiDigJQgc2lnbmF0dXJlc1tdOiBhcHBsaWVzIHBlci1pbnB1dCBUU1Mgc2lnbmF0dXJlcyBmb3IgbXVsdGktaW5wdXQgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCdWlsZCBhIDItaW5wdXQgdW5zaWduZWQgdHJhbnNhY3Rpb24gKHNpbXVsYXRpbmcgd2hhdCB0aGUgcGxhdGZvcm0gd291bGQgYnVpbGQpXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQoJ2thc3BhJykpO1xuICAgICAgYnVpbGRlci5hZGRJbnB1dChVVFhPUy5zaW1wbGUpLmFkZElucHV0KFVUWE9TLnNlY29uZCkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzI5OTk5NjAwMCcpLmZlZSgnNDAwMCcpO1xuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB1bnNpZ25lZFR4LnRvSGV4KCk7XG5cbiAgICAgIC8vIFNpbXVsYXRlIHdoYXQgdGhlIHBsYXRmb3JtIGRvZXM6IHJlYWQgcGVyLWlucHV0IHNpZ2hhc2hlcyBhbmQgc2lnbiBlYWNoXG4gICAgICAvLyBpbmRlcGVuZGVudGx5IChub3JtYWxseSB2aWEgTiBES0xTIHNlc3Npb25zOyBoZXJlIHVzaW5nIHRoZSByYXcga2V5IGRpcmVjdGx5KVxuICAgICAgY29uc3QgcHJ2ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIGNvbnN0IHB1YiA9IEJ1ZmZlci5mcm9tKEtFWVMucHViLCAnaGV4Jyk7XG4gICAgICBjb25zdCBwYXlsb2FkcyA9IHVuc2lnbmVkVHguc2lnbmFibGVQYXlsb2FkczsgLy8gQnVmZmVyWzJdXG4gICAgICBwYXlsb2Fkcy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBwYXlsb2Fkcy5tYXAoKGhhc2gsIGlucHV0SW5kZXgpID0+ICh7XG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIHB1YktleTogS0VZUy5wdWIsXG4gICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oZWNjLnNpZ25TY2hub3JyKGhhc2gsIHBydikpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gQm90aCBzaWduYXR1cmVzIHdlcmUgcHJvZHVjZWQgb3ZlciBkaWZmZXJlbnQgbWVzc2FnZXMg4oCUIHRoZXkgYXJlIGRpc3RpbmN0XG4gICAgICBzaWduYXR1cmVzWzBdLnNpZ25hdHVyZS5zaG91bGQubm90LmVxdWFsKHNpZ25hdHVyZXNbMV0uc2lnbmF0dXJlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5zaWduVHJhbnNhY3Rpb24+WzBdKSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG5cbiAgICAgIHJlc3VsdC50eEhleC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IFRyYW5zYWN0aW9uLmZyb21IZXgoJ2thc3BhJywgcmVzdWx0LnR4SGV4KTtcblxuICAgICAgLy8gQm90aCBpbnB1dHMgbXVzdCBjYXJyeSBhIHZhbGlkIDY1LWJ5dGUgc2lnbmF0dXJlICg2NCBTY2hub3JyICsgMSBzaWdoYXNoIHR5cGUpXG4gICAgICBzaWduZWQuc2lnbmF0dXJlLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHNpZ25lZC5zaWduYXR1cmVbMF0uc2hvdWxkLmhhdmUubGVuZ3RoKDEzMik7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzFdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzIpO1xuXG4gICAgICAvLyBFYWNoIHNpZ25hdHVyZSBtdXN0IHZlcmlmeSBhZ2FpbnN0IGl0cyBvd24gaW5wdXQncyBzaWdoYXNoLCBub3QgdGhlIG90aGVyJ3NcbiAgICAgIHNpZ25lZC52ZXJpZnlTaWduYXR1cmUocHViLCAwKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2lnbmVkLnZlcmlmeVNpZ25hdHVyZShwdWIsIDEpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnUGF0aCBCIOKAlCBoYWxmU2lnbmVkIHJldHVybmVkIHdoZW4gb25seSBzb21lIGlucHV0cyBhcmUgc2lnbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCdrYXNwYScpKTtcbiAgICAgIGJ1aWxkZXIuYWRkSW5wdXQoVVRYT1Muc2ltcGxlKS5hZGRJbnB1dChVVFhPUy5zZWNvbmQpLnRvKEFERFJFU1NFUy5yZWNpcGllbnQsICcyOTk5OTYwMDAnKS5mZWUoJzQwMDAnKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdW5zaWduZWRUeC50b0hleCgpO1xuXG4gICAgICBjb25zdCBwcnYgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgY29uc3QgaGFzaDAgPSB1bnNpZ25lZFR4LnNpZ25hYmxlUGF5bG9hZHNbMF07XG5cbiAgICAgIC8vIE9ubHkgc2lnbiBpbnB1dCAwIOKAlCBzaW11bGF0ZXMgYSBwYXJ0aWFsIFRTUyByZXN1bHRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgc2lnbmF0dXJlczogW1xuICAgICAgICAgIHsgaW5wdXRJbmRleDogMCwgcHViS2V5OiBLRVlTLnB1Yiwgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShlY2Muc2lnblNjaG5vcnIoaGFzaDAsIHBydikpLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLnNpZ25UcmFuc2FjdGlvbj5bMF0pO1xuXG4gICAgICAvLyBTaG91bGQgY29tZSBiYWNrIGFzIGhhbGZTaWduZWQgc2luY2UgaW5wdXQgMSBpcyBzdGlsbCB1bnNpZ25lZFxuICAgICAgY29uc3QgaGFsZlJlc3VsdCA9IHJlc3VsdCBhcyB1bmtub3duIGFzIHsgaGFsZlNpZ25lZD86IHsgdHhIZXg6IHN0cmluZyB9OyB0eEhleD86IHN0cmluZyB9O1xuICAgICAgc2hvdWxkLmV4aXN0KGhhbGZSZXN1bHQuaGFsZlNpZ25lZCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGhhbGZSZXN1bHQudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDoge30sIHBydjogS0VZUy5wcnYgfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLnNpZ25UcmFuc2FjdGlvbj5bMF0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHR4SGV4Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IEFERFJFU1NFUy5yZWNpcGllbnQsIGFtb3VudDogJzk5OTk4MDAwJyB9XSB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIEthc3BhVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHdoZW4gcmVjaXBpZW50cyBpcyBhYnNlbnQgKG5vIHJlY2lwaWVudCBjaGVjayknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2lnbmVkVHhIZXgoJ2thc3BhJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrYXNwYS52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIEthc3BhVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGV4cGVjdGVkIHJlY2lwaWVudCBjb3VudCBleGNlZWRzIGFjdHVhbCBvdXRwdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgLy8gdHggaGFzIDEgb3V0cHV0LCB3ZSBjbGFpbSAyIHJlY2lwaWVudHNcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHsgYWRkcmVzczogQUREUkVTU0VTLnJlY2lwaWVudCwgYW1vdW50OiAnNTAwMDAwMDAnIH0sXG4gICAgICAgICAgICAgIHsgYWRkcmVzczogQUREUkVTU0VTLnJlY2lwaWVudCwgYW1vdW50OiAnNDk5OTgwMDAnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBLYXNwYVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0V4cGVjdGVkIGF0IGxlYXN0IDIgb3V0cHV0cy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgdHhQYXJhbXM6IHt9IH0gYXMgdW5rbm93biBhcyBLYXNwYVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGFcbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnZGVhZGJlZWYnIH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICB9IGFzIHVua25vd24gYXMgS2FzcGFWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uIOKAlCBoYWxmU2lnbmVkIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHRyYW5zYWN0aW9uIHBhc3NlZCB2aWEgaGFsZlNpZ25lZC50eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcGFyc2VkID0gKGF3YWl0IGthc3BhLnBhcnNlVHJhbnNhY3Rpb24oeyBoYWxmU2lnbmVkOiB7IHR4SGV4IH0gfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgIHR5cGVvZiBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uXG4gICAgICA+WzBdKSkgYXMgdW5rbm93biBhcyBQYXJzZWRUeDtcbiAgICAgIHBhcnNlZC5pbnB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFyc2VkLmlucHV0c1swXS5jb2luLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzk5OTk4MDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24g4oCUIGhhbGZTaWduZWQgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2FjdGlvbiBwYXNzZWQgdmlhIGhhbGZTaWduZWQudHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXggfSB9IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgdHlwZW9mIGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvblxuICAgICAgPlswXSk7XG4gICAgICBleHBsYWluZWQub3V0cHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBleHBsYWluZWQub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCc5OTk5ODAwMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblRyYW5zYWN0aW9uIOKAlCBlZGdlIGNhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGhhbGZTaWduZWQgd2hlbiBuZWl0aGVyIHBydiBub3Igc2lnbmF0dXJlcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyB0eEhleCB9IH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICB0eXBlb2Yga2FzcGEuc2lnblRyYW5zYWN0aW9uXG4gICAgICA+WzBdKTtcbiAgICAgIC8vIG5vIHNpZ25pbmcgaGFwcGVuZWQg4oCUIGFsbCBzaWduYXR1cmUgc2NyaXB0cyBhcmUgZW1wdHksIHNvIGhhbGZTaWduZWQgaXMgcmV0dXJuZWRcbiAgICAgIGNvbnN0IHR5cGVkID0gcmVzdWx0IGFzIHVua25vd24gYXMgeyBoYWxmU2lnbmVkPzogeyB0eEhleDogc3RyaW5nIH07IHR4SGV4Pzogc3RyaW5nIH07XG4gICAgICBzaG91bGQuZXhpc3QodHlwZWQuaGFsZlNpZ25lZCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR5cGVkLnR4SGV4KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const should = __importStar(require("should"));
37
37
  const keyPair_1 = require("../../src/lib/keyPair");
38
+ const constants_1 = require("../../src/lib/constants");
38
39
  const kaspa_fixtures_1 = require("../fixtures/kaspa.fixtures");
39
40
  describe('Kaspa KeyPair', function () {
40
41
  describe('Key Generation', function () {
@@ -86,5 +87,38 @@ describe('Kaspa KeyPair', function () {
86
87
  kp1.getAddress('mainnet').should.not.equal(kp2.getAddress('mainnet'));
87
88
  });
88
89
  });
90
+ describe('ECDSA Address Derivation (v1)', function () {
91
+ it('should derive a mainnet ECDSA address', function () {
92
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
93
+ const address = kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA);
94
+ address.should.startWith('kaspa');
95
+ address.should.containEql(':');
96
+ });
97
+ it('should derive a testnet ECDSA address', function () {
98
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
99
+ const address = kp.getAddress('testnet', constants_1.KaspaAddressType.ECDSA);
100
+ address.should.startWith('kaspatest');
101
+ address.should.containEql(':');
102
+ });
103
+ it('Schnorr and ECDSA addresses for the same key should differ', function () {
104
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
105
+ const schnorrAddr = kp.getAddress('mainnet');
106
+ const ecdsaAddr = kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA);
107
+ schnorrAddr.should.not.equal(ecdsaAddr);
108
+ });
109
+ it('Schnorr address matches fixture ADDRESSES.valid', function () {
110
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
111
+ kp.getAddress('mainnet').should.equal(kaspa_fixtures_1.ADDRESSES.valid);
112
+ });
113
+ it('ECDSA address matches fixture ADDRESSES.validEcdsa', function () {
114
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
115
+ kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA).should.equal(kaspa_fixtures_1.ADDRESSES.validEcdsa);
116
+ });
117
+ it('should be consistent across two KeyPair instances for ECDSA', function () {
118
+ const kp1 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
119
+ const kp2 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
120
+ kp1.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA).should.equal(kp2.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA));
121
+ });
122
+ });
89
123
  });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2tleVBhaXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsK0RBQWtEO0FBRWxELFFBQVEsQ0FBQyxlQUFlLEVBQUU7SUFDeEIsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztZQUNuRSxJQUFJLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FB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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4uL2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzJztcblxuZGVzY3JpYmUoJ0thc3BhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgcmFuZG9tIGtleSBwYWlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTsgLy8gY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleVxuICAgICAga2V5cy5wcnYhLnNob3VsZC5oYXZlLmxlbmd0aCg2NCk7IC8vIDMyLWJ5dGUgcHJpdmF0ZSBrZXkgaW4gaGV4XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGtleSBwYWlyIGZyb20gYSBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5lcXVhbChLRVlTLnB1Yik7XG4gICAgICBrZXlzLnBydiEuc2hvdWxkLmVxdWFsKEtFWVMucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEga2V5IHBhaXIgZnJvbSBhIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHViOiBLRVlTLnB1YiB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrcC5nZXRLZXlzKCk7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuZXF1YWwoS0VZUy5wdWIpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IG5ldyBLZXlQYWlyKHsgcHJ2OiAnaW52YWxpZC1wcnYnIH0pKS5zaG91bGQudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgRGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLnN0YXJ0V2l0aCgna2FzcGEnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGEgdGVzdG5ldCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygndGVzdG5ldCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuc3RhcnRXaXRoKCdrYXNwYXRlc3QnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGNvbnNpc3RlbnQgYWRkcmVzc2VzIGZvciB0aGUgc2FtZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBrcDEuZ2V0QWRkcmVzcygnbWFpbm5ldCcpLnNob3VsZC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIGRpZmZlcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGtwMS5nZXRBZGRyZXNzKCdtYWlubmV0Jykuc2hvdWxkLm5vdC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2tleVBhaXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsdURBQTJEO0FBQzNELCtEQUE2RDtBQUU3RCxRQUFRLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxpQkFBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7WUFDbkUsSUFBSSxDQUFDLEdBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZ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Q0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBLYXNwYUFkZHJlc3NUeXBlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgS0VZUywgQUREUkVTU0VTIH0gZnJvbSAnLi4vZml4dHVyZXMva2FzcGEuZml4dHVyZXMnO1xuXG5kZXNjcmliZSgnS2FzcGEgS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0tleSBHZW5lcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSByYW5kb20ga2V5IHBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBrZXlzID0ga3AuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleXMucHViKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnBydik7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuaGF2ZS5sZW5ndGgoNjYpOyAvLyBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5XG4gICAgICBrZXlzLnBydiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTsgLy8gMzItYnl0ZSBwcml2YXRlIGtleSBpbiBoZXhcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEga2V5IHBhaXIgZnJvbSBhIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga3AuZ2V0S2V5cygpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmVxdWFsKEtFWVMucHViKTtcbiAgICAgIGtleXMucHJ2IS5zaG91bGQuZXF1YWwoS0VZUy5wcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBrZXkgcGFpciBmcm9tIGEgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwdWI6IEtFWVMucHViIH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5lcXVhbChLRVlTLnB1Yik7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGtleXMucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6ICdpbnZhbGlkLXBydicgfSkpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBEZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVyaXZlIGEgbWFpbm5ldCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuc3RhcnRXaXRoKCdrYXNwYScpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuY29udGFpbkVxbCgnOicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgYSB0ZXN0bmV0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCd0ZXN0bmV0Jyk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5zdGFydFdpdGgoJ2thc3BhdGVzdCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuY29udGFpbkVxbCgnOicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgY29uc2lzdGVudCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGtwMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGtwMS5nZXRBZGRyZXNzKCdtYWlubmV0Jykuc2hvdWxkLmVxdWFsKGtwMi5nZXRBZGRyZXNzKCdtYWlubmV0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgZGlmZmVyZW50IGFkZHJlc3NlcyBmb3IgZGlmZmVyZW50IGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAga3AxLmdldEFkZHJlc3MoJ21haW5uZXQnKS5zaG91bGQubm90LmVxdWFsKGtwMi5nZXRBZGRyZXNzKCdtYWlubmV0JykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRUNEU0EgQWRkcmVzcyBEZXJpdmF0aW9uICh2MSknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgYSBtYWlubmV0IEVDRFNBIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0JywgS2FzcGFBZGRyZXNzVHlwZS5FQ0RTQSk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5zdGFydFdpdGgoJ2thc3BhJyk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5jb250YWluRXFsKCc6Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBhIHRlc3RuZXQgRUNEU0EgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ3Rlc3RuZXQnLCBLYXNwYUFkZHJlc3NUeXBlLkVDRFNBKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLnN0YXJ0V2l0aCgna2FzcGF0ZXN0Jyk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5jb250YWluRXFsKCc6Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2Nobm9yciBhbmQgRUNEU0EgYWRkcmVzc2VzIGZvciB0aGUgc2FtZSBrZXkgc2hvdWxkIGRpZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qgc2Nobm9yckFkZHIgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBjb25zdCBlY2RzYUFkZHIgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0JywgS2FzcGFBZGRyZXNzVHlwZS5FQ0RTQSk7XG4gICAgICBzY2hub3JyQWRkci5zaG91bGQubm90LmVxdWFsKGVjZHNhQWRkcik7XG4gICAgfSk7XG5cbiAgICBpdCgnU2Nobm9yciBhZGRyZXNzIG1hdGNoZXMgZml4dHVyZSBBRERSRVNTRVMudmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKS5zaG91bGQuZXF1YWwoQUREUkVTU0VTLnZhbGlkKTtcbiAgICB9KTtcblxuICAgIGl0KCdFQ0RTQSBhZGRyZXNzIG1hdGNoZXMgZml4dHVyZSBBRERSRVNTRVMudmFsaWRFY2RzYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpLnNob3VsZC5lcXVhbChBRERSRVNTRVMudmFsaWRFY2RzYSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHR3byBLZXlQYWlyIGluc3RhbmNlcyBmb3IgRUNEU0EnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBrcDEuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpLnNob3VsZC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * PSKT (Partially Signed Kaspa Transaction) — Unit Tests
3
+ *
4
+ * Covers:
5
+ * - Full role flow: CREATOR → UPDATER → SIGNER → FINALIZER → EXTRACTOR
6
+ * - HSM / external signing path via addSignature()
7
+ * - Multi-party COMBINER role
8
+ * - serialize() / deserialize() round-trip
9
+ * - Extractor output matches Transaction.toBroadcastFormat()
10
+ * - Transaction.toPskt() and Transaction.fromPskt() bridge methods
11
+ * - TransactionBuilder.toPskt() unsigned PSKT construction
12
+ * - Role guard errors
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=pskt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pskt.test.d.ts","sourceRoot":"","sources":["../../../test/unit/pskt.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}