@bitgo/abstract-utxo 10.24.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +14 -2
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +15 -7
  4. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +5 -1
  5. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  6. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +33 -4
  7. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +3 -0
  8. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  9. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -1
  10. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  11. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +4 -3
  12. package/dist/cjs/test/unit/bip322.js +99 -28
  13. package/dist/cjs/test/unit/customChangeWallet.js +144 -155
  14. package/dist/cjs/test/unit/explainTransaction.js +1 -61
  15. package/dist/cjs/test/unit/parseTransaction.js +31 -1
  16. package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.d.ts +2 -0
  17. package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.d.ts.map +1 -0
  18. package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.js +99 -0
  19. package/dist/cjs/test/unit/prebuildAndSign.js +28 -59
  20. package/dist/cjs/test/unit/signTransaction.js +17 -39
  21. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +4 -4
  22. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +21 -77
  23. package/dist/cjs/test/unit/transaction/recipient.d.ts +2 -0
  24. package/dist/cjs/test/unit/transaction/recipient.d.ts.map +1 -0
  25. package/dist/cjs/test/unit/transaction/recipient.js +52 -0
  26. package/dist/cjs/test/unit/transaction.js +16 -23
  27. package/dist/cjs/test/unit/webauthn.d.ts +2 -0
  28. package/dist/cjs/test/unit/webauthn.d.ts.map +1 -0
  29. package/dist/cjs/test/unit/webauthn.js +73 -0
  30. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  31. package/dist/esm/abstractUtxoCoin.d.ts +14 -2
  32. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  33. package/dist/esm/abstractUtxoCoin.js +16 -8
  34. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +5 -1
  35. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  36. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +33 -4
  37. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +3 -0
  38. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  39. package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -1
  40. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  41. package/dist/esm/transaction/fixedScript/parseTransaction.js +4 -3
  42. package/package.json +10 -10
  43. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +0 -15
  44. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +0 -1
  45. package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +0 -51
@@ -121,5 +121,35 @@ describe('Parse Transaction', function () {
121
121
  recipients: [{ address: externalAddress, amount: outputAmount }],
122
122
  });
123
123
  });
124
+ describe('txHexPsbt (pending approval flow)', function () {
125
+ it('should pass txHexPsbt to explainTransaction when both txHex and txHexPsbt are present', async function () {
126
+ stubExplainTransaction = sinon.stub(coin, 'explainTransaction').resolves({
127
+ outputs: [],
128
+ changeOutputs: [],
129
+ });
130
+ await coin.parseTransaction({
131
+ txParams: {},
132
+ txPrebuild: { txHex: 'legacy-hex', txHexPsbt: 'psbt-hex' },
133
+ wallet: wallet,
134
+ verification,
135
+ });
136
+ assert_1.default.strictEqual(stubExplainTransaction.callCount, 1);
137
+ assert_1.default.strictEqual(stubExplainTransaction.getCall(0).args[0].txHex, 'psbt-hex');
138
+ });
139
+ it('should fall back to txHex when txHexPsbt is absent', async function () {
140
+ stubExplainTransaction = sinon.stub(coin, 'explainTransaction').resolves({
141
+ outputs: [],
142
+ changeOutputs: [],
143
+ });
144
+ await coin.parseTransaction({
145
+ txParams: {},
146
+ txPrebuild: { txHex: 'legacy-hex' },
147
+ wallet: wallet,
148
+ verification,
149
+ });
150
+ assert_1.default.strictEqual(stubExplainTransaction.callCount, 1);
151
+ assert_1.default.strictEqual(stubExplainTransaction.getCall(0).args[0].txHex, 'legacy-hex');
152
+ });
153
+ });
124
154
  });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDZDQUErQjtBQUMvQiw4Q0FBc0Y7QUFNdEYsaUNBQXFDO0FBRXJDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFakM7Ozs7T0FJRztJQUNILE1BQU0sWUFBWSxHQUF3QjtRQUN4QyxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2xELE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3BELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1NBQ3BEO0tBQ0YsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBTSxFQUFFO1FBQzlDLFlBQVksRUFBRSxxQ0FBcUM7S0FDcEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFN0MsSUFBSSxzQkFBdUMsQ0FBQztJQUM1QyxJQUFJLGlCQUE4QyxDQUFDO0lBRW5ELFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDM0Is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LEdBQUcscUNBQXFDLENBQUM7UUFDNUQsT0FBTyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtZQUNoRSxhQUFhO1lBQ2IsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxLQUFLO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLHFDQUFxQyxDQUFDO1FBQzlELE9BQU8sc0JBQXNCLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7WUFDakUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztTQUNqRSxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBXYWxsZXQsIFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IsIFZlcmlmaWNhdGlvbk9wdGlvbnMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBVdHhvV2FsbGV0LCBUcmFuc2FjdGlvblBhcmFtcyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5cbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZGVzY3JpYmUoJ1BhcnNlIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcblxuICAvKlxuICAgKiBtb2NrIG9iamVjdHMgd2hpY2ggZ2V0IHBhc3NlZCBpbnRvIHBhcnNlIHRyYW5zYWN0aW9uLlxuICAgKiBUaGVzZSBvYmplY3RzIGFyZSBzdHJ1Y3R1cmVkIHRvIGZvcmNlIHBhcnNlIHRyYW5zYWN0aW9uIGludG8gYVxuICAgKiBwYXJ0aWN1bGFyIGV4ZWN1dGlvbiBwYXRoIGZvciB0aGVzZSB0ZXN0cy5cbiAgICovXG4gIGNvbnN0IHZlcmlmaWNhdGlvbjogVmVyaWZpY2F0aW9uT3B0aW9ucyA9IHtcbiAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICBrZXljaGFpbnM6IHtcbiAgICAgIHVzZXI6IHsgaWQ6ICcwJywgcHViOiAnYWFhJywgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgYmFja3VwOiB7IGlkOiAnMScsIHB1YjogJ2JiYicsIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgIGJpdGdvOiB7IGlkOiAnMicsIHB1YjogJ2NjYycsIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHdhbGxldCA9IHNpbm9uLmNyZWF0ZVN0dWJJbnN0YW5jZShXYWxsZXQsIHtcbiAgICBtaWdyYXRlZEZyb206ICcyTXpKeEFFTmFlc0NGdTNvcnJDZGoyMmM2OXRMRXNLWFFvUicsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9ICgwLjAxICogMWU4KS50b1N0cmluZygpO1xuXG4gIGxldCBzdHViRXhwbGFpblRyYW5zYWN0aW9uOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBzdHViVmVyaWZ5QWRkcmVzczogc2lub24uU2lub25TdHViIHwgdW5kZWZpbmVkO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgaWYgKHN0dWJFeHBsYWluVHJhbnNhY3Rpb24pIHtcbiAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24ucmVzdG9yZSgpO1xuICAgIH1cbiAgICBpZiAoc3R1YlZlcmlmeUFkZHJlc3MpIHtcbiAgICAgIHN0dWJWZXJpZnlBZGRyZXNzLnJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bkNsYXNzaWZ5T3V0cHV0c1Rlc3QoXG4gICAgb3V0cHV0QWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHZlcmlmaWNhdGlvbjogVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgICBleHBlY3RFeHRlcm5hbDogYm9vbGVhbixcbiAgICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXMgPSB7fVxuICApIHtcbiAgICBzdHViRXhwbGFpblRyYW5zYWN0aW9uID0gc2lub24uc3R1Yihjb2luLCAnZXhwbGFpblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAgb3V0cHV0czogW10gYXMgT3V0cHV0W10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKCF0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzKSB7XG4gICAgICBzdHViVmVyaWZ5QWRkcmVzcyA9IHNpbm9uLnN0dWIoY29pbiwgJ3ZlcmlmeUFkZHJlc3MnKS50aHJvd3MobmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoJ3Rlc3QgZXJyb3InKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnJyB9LFxuICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0LFxuICAgICAgdmVyaWZpY2F0aW9uLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKHBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHNbMF0pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0c1swXSwge1xuICAgICAgYWRkcmVzczogb3V0cHV0QWRkcmVzcyxcbiAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgZXh0ZXJuYWw6IGV4cGVjdEV4dGVybmFsLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNFeHBsaWNpdCA9XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQgJiYgdHhQYXJhbXMucmVjaXBpZW50cy5zb21lKChyZWNpcGllbnQpID0+IHJlY2lwaWVudC5hZGRyZXNzID09PSBvdXRwdXRBZGRyZXNzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBwYXJzZWRUcmFuc2FjdGlvbi5leHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgICBOdW1iZXIoaXNFeHBsaWNpdCAmJiBleHBlY3RFeHRlcm5hbCA/IG91dHB1dEFtb3VudCA6IDApXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBwYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgICBOdW1iZXIoIWlzRXhwbGljaXQgJiYgZXhwZWN0RXh0ZXJuYWwgPyBvdXRwdXRBbW91bnQgOiAwKVxuICAgICk7XG4gIH1cblxuICBpdCgnc2hvdWxkIGNsYXNzaWZ5IG91dHB1dHMgd2hpY2ggc3BlbmQgY2hhbmdlIGJhY2sgdG8gYSB2MSB3YWxsZXQgYmFzZSBhZGRyZXNzIGFzIGludGVybmFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBydW5DbGFzc2lmeU91dHB1dHNUZXN0KHdhbGxldC5taWdyYXRlZEZyb20oKSwgdmVyaWZpY2F0aW9uLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFxuICAgICdzaG91bGQgY2xhc3NpZnkgb3V0cHV0cyB3aGljaCBzcGVuZCBjaGFuZ2UgYmFjayB0byBhIHYxIHdhbGxldCBiYXNlIGFkZHJlc3MgYXMgZXh0ZXJuYWwgJyArXG4gICAgICAnaWYgY29uc2lkZXJNaWdyYXRlZEZyb21BZGRyZXNzSW50ZXJuYWwgaXMgc2V0IGFuZCBmYWxzZScsXG4gICAgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJ1bkNsYXNzaWZ5T3V0cHV0c1Rlc3QoXG4gICAgICAgIHdhbGxldC5taWdyYXRlZEZyb20oKSxcbiAgICAgICAgeyAuLi52ZXJpZmljYXRpb24sIGNvbnNpZGVyTWlncmF0ZWRGcm9tQWRkcmVzc0ludGVybmFsOiBmYWxzZSB9LFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICBpdCgnc2hvdWxkIGNsYXNzaWZ5IG91dHB1dHMgd2hpY2ggc3BlbmQgdG8gYWRkcmVzc2VzIG5vdCBvbiB0aGUgd2FsbGV0IGFzIGV4dGVybmFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBydW5DbGFzc2lmeU91dHB1dHNUZXN0KCcyTXhqeDRFMkVFZTR5SnVMdmRFdUFkTVVkNGlkMWVtUENacycsIHZlcmlmaWNhdGlvbiwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWNjZXB0IGEgY3VzdG9tIGNoYW5nZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSAnMk5BdXppRDc1V25QUEhKVnduZDRja2dZNFN1SmFEVlZiTUQnO1xuICAgIHJldHVybiBydW5DbGFzc2lmeU91dHB1dHNUZXN0KGNoYW5nZUFkZHJlc3MsIHZlcmlmaWNhdGlvbiwgZmFsc2UsIHtcbiAgICAgIGNoYW5nZUFkZHJlc3MsXG4gICAgICByZWNpcGllbnRzOiBbXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBvdXRwdXRzIHdpdGggZXh0ZXJuYWwgYWRkcmVzcyBpbiByZWNpcGllbnRzIGFzIGV4cGxpY2l0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4dGVybmFsQWRkcmVzcyA9ICcyTkF1emlENzVXblBQSEpWd25kNGNrZ1k0U3VKYURWVmJNRCc7XG4gICAgcmV0dXJuIHJ1bkNsYXNzaWZ5T3V0cHV0c1Rlc3QoZXh0ZXJuYWxBZGRyZXNzLCB2ZXJpZmljYXRpb24sIHRydWUsIHtcbiAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IGV4dGVybmFsQWRkcmVzcywgYW1vdW50OiBvdXRwdXRBbW91bnQgfV0sXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDZDQUErQjtBQUMvQiw4Q0FBc0Y7QUFNdEYsaUNBQXFDO0FBRXJDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFakM7Ozs7T0FJRztJQUNILE1BQU0sWUFBWSxHQUF3QjtRQUN4QyxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2xELE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3BELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1NBQ3BEO0tBQ0YsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBTSxFQUFFO1FBQzlDLFlBQVksRUFBRSxxQ0FBcUM7S0FDcEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFN0MsSUFBSSxzQkFBdUMsQ0FBQztJQUM1QyxJQUFJLGlCQUE4QyxDQUFDO0lBRW5ELFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDM0Is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QUNsRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxLQUFLO1lBQzVELHNCQUFzQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN2RSxPQUFPLEVBQUUsRUFBRTtnQkFDWCxhQUFhLEVBQUUsRUFBRTthQUNtQixDQUFDLENBQUM7WUFFeEMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBQ25DLE1BQU0sRUFBRSxNQUErQjtnQkFDdkMsWUFBWTthQUNiLENBQUMsQ0FBQztZQUVILGdCQUFNLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IFdhbGxldCwgVW5leHBlY3RlZEFkZHJlc3NFcnJvciwgVmVyaWZpY2F0aW9uT3B0aW9ucyB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IFV0eG9XYWxsZXQsIFRyYW5zYWN0aW9uUGFyYW1zIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IE91dHB1dCB9IGZyb20gJy4uLy4uL3NyYy90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcblxuaW1wb3J0IHsgZ2V0VXR4b0NvaW4gfSBmcm9tICcuL3V0aWwnO1xuXG5kZXNjcmliZSgnUGFyc2UgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuXG4gIC8qXG4gICAqIG1vY2sgb2JqZWN0cyB3aGljaCBnZXQgcGFzc2VkIGludG8gcGFyc2UgdHJhbnNhY3Rpb24uXG4gICAqIFRoZXNlIG9iamVjdHMgYXJlIHN0cnVjdHVyZWQgdG8gZm9yY2UgcGFyc2UgdHJhbnNhY3Rpb24gaW50byBhXG4gICAqIHBhcnRpY3VsYXIgZXhlY3V0aW9uIHBhdGggZm9yIHRoZXNlIHRlc3RzLlxuICAgKi9cbiAgY29uc3QgdmVyaWZpY2F0aW9uOiBWZXJpZmljYXRpb25PcHRpb25zID0ge1xuICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgIGtleWNoYWluczoge1xuICAgICAgdXNlcjogeyBpZDogJzAnLCBwdWI6ICdhYWEnLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICBiYWNrdXA6IHsgaWQ6ICcxJywgcHViOiAnYmJiJywgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgYml0Z286IHsgaWQ6ICcyJywgcHViOiAnY2NjJywgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3Qgd2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwge1xuICAgIG1pZ3JhdGVkRnJvbTogJzJNekp4QUVOYWVzQ0Z1M29yckNkajIyYzY5dExFc0tYUW9SJyxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gKDAuMDEgKiAxZTgpLnRvU3RyaW5nKCk7XG5cbiAgbGV0IHN0dWJFeHBsYWluVHJhbnNhY3Rpb246IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IHN0dWJWZXJpZnlBZGRyZXNzOiBzaW5vbi5TaW5vblN0dWIgfCB1bmRlZmluZWQ7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBpZiAoc3R1YkV4cGxhaW5UcmFuc2FjdGlvbikge1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbi5yZXN0b3JlKCk7XG4gICAgfVxuICAgIGlmIChzdHViVmVyaWZ5QWRkcmVzcykge1xuICAgICAgc3R1YlZlcmlmeUFkZHJlc3MucmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuQ2xhc3NpZnlPdXRwdXRzVGVzdChcbiAgICBvdXRwdXRBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdmVyaWZpY2F0aW9uOiBWZXJpZmljYXRpb25PcHRpb25zLFxuICAgIGV4cGVjdEV4dGVybmFsOiBib29sZWFuLFxuICAgIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcyA9IHt9XG4gICkge1xuICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBvdXRwdXRzOiBbXSBhcyBPdXRwdXRbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgdW5rbm93biBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTtcblxuICAgIGlmICghdHhQYXJhbXMuY2hhbmdlQWRkcmVzcykge1xuICAgICAgc3R1YlZlcmlmeUFkZHJlc3MgPSBzaW5vbi5zdHViKGNvaW4sICd2ZXJpZnlBZGRyZXNzJykudGhyb3dzKG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKCd0ZXN0IGVycm9yJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgY29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zLFxuICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogJycgfSxcbiAgICAgIHdhbGxldDogd2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldCxcbiAgICAgIHZlcmlmaWNhdGlvbixcbiAgICB9KTtcblxuICAgIGFzc2VydC5vayhwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHNbMF0sIHtcbiAgICAgIGFkZHJlc3M6IG91dHB1dEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgIGV4dGVybmFsOiBleHBlY3RFeHRlcm5hbCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlzRXhwbGljaXQgPVxuICAgICAgdHhQYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkICYmIHR4UGFyYW1zLnJlY2lwaWVudHMuc29tZSgocmVjaXBpZW50KSA9PiByZWNpcGllbnQuYWRkcmVzcyA9PT0gb3V0cHV0QWRkcmVzcyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgcGFyc2VkVHJhbnNhY3Rpb24uZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgICAgTnVtYmVyKGlzRXhwbGljaXQgJiYgZXhwZWN0RXh0ZXJuYWwgPyBvdXRwdXRBbW91bnQgOiAwKVxuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgcGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgICAgTnVtYmVyKCFpc0V4cGxpY2l0ICYmIGV4cGVjdEV4dGVybmFsID8gb3V0cHV0QW1vdW50IDogMClcbiAgICApO1xuICB9XG5cbiAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBvdXRwdXRzIHdoaWNoIHNwZW5kIGNoYW5nZSBiYWNrIHRvIGEgdjEgd2FsbGV0IGJhc2UgYWRkcmVzcyBhcyBpbnRlcm5hbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcnVuQ2xhc3NpZnlPdXRwdXRzVGVzdCh3YWxsZXQubWlncmF0ZWRGcm9tKCksIHZlcmlmaWNhdGlvbiwgZmFsc2UpO1xuICB9KTtcblxuICBpdChcbiAgICAnc2hvdWxkIGNsYXNzaWZ5IG91dHB1dHMgd2hpY2ggc3BlbmQgY2hhbmdlIGJhY2sgdG8gYSB2MSB3YWxsZXQgYmFzZSBhZGRyZXNzIGFzIGV4dGVybmFsICcgK1xuICAgICAgJ2lmIGNvbnNpZGVyTWlncmF0ZWRGcm9tQWRkcmVzc0ludGVybmFsIGlzIHNldCBhbmQgZmFsc2UnLFxuICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBydW5DbGFzc2lmeU91dHB1dHNUZXN0KFxuICAgICAgICB3YWxsZXQubWlncmF0ZWRGcm9tKCksXG4gICAgICAgIHsgLi4udmVyaWZpY2F0aW9uLCBjb25zaWRlck1pZ3JhdGVkRnJvbUFkZHJlc3NJbnRlcm5hbDogZmFsc2UgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbiAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBvdXRwdXRzIHdoaWNoIHNwZW5kIHRvIGFkZHJlc3NlcyBub3Qgb24gdGhlIHdhbGxldCBhcyBleHRlcm5hbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcnVuQ2xhc3NpZnlPdXRwdXRzVGVzdCgnMk14ang0RTJFRWU0eUp1THZkRXVBZE1VZDRpZDFlbVBDWnMnLCB2ZXJpZmljYXRpb24sIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBhIGN1c3RvbSBjaGFuZ2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gJzJOQXV6aUQ3NVduUFBISlZ3bmQ0Y2tnWTRTdUphRFZWYk1EJztcbiAgICByZXR1cm4gcnVuQ2xhc3NpZnlPdXRwdXRzVGVzdChjaGFuZ2VBZGRyZXNzLCB2ZXJpZmljYXRpb24sIGZhbHNlLCB7XG4gICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgcmVjaXBpZW50czogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2xhc3NpZnkgb3V0cHV0cyB3aXRoIGV4dGVybmFsIGFkZHJlc3MgaW4gcmVjaXBpZW50cyBhcyBleHBsaWNpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHRlcm5hbEFkZHJlc3MgPSAnMk5BdXppRDc1V25QUEhKVnduZDRja2dZNFN1SmFEVlZiTUQnO1xuICAgIHJldHVybiBydW5DbGFzc2lmeU91dHB1dHNUZXN0KGV4dGVybmFsQWRkcmVzcywgdmVyaWZpY2F0aW9uLCB0cnVlLCB7XG4gICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBleHRlcm5hbEFkZHJlc3MsIGFtb3VudDogb3V0cHV0QW1vdW50IH1dLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndHhIZXhQc2J0IChwZW5kaW5nIGFwcHJvdmFsIGZsb3cpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcGFzcyB0eEhleFBzYnQgdG8gZXhwbGFpblRyYW5zYWN0aW9uIHdoZW4gYm90aCB0eEhleCBhbmQgdHhIZXhQc2J0IGFyZSBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoY29pbiwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pO1xuXG4gICAgICBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge30sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6ICdsZWdhY3ktaGV4JywgdHhIZXhQc2J0OiAncHNidC1oZXgnIH0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdHViRXhwbGFpblRyYW5zYWN0aW9uLmNhbGxDb3VudCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3R1YkV4cGxhaW5UcmFuc2FjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF0udHhIZXgsICdwc2J0LWhleCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWxsIGJhY2sgdG8gdHhIZXggd2hlbiB0eEhleFBzYnQgaXMgYWJzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoY29pbiwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pO1xuXG4gICAgICBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge30sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6ICdsZWdhY3ktaGV4JyB9LFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCBhcyB1bmtub3duIGFzIFV0eG9XYWxsZXQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3R1YkV4cGxhaW5UcmFuc2FjdGlvbi5jYWxsQ291bnQsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0dWJFeHBsYWluVHJhbnNhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdLnR4SGV4LCAnbGVnYWN5LWhleCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pendingApprovalTxHexPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingApprovalTxHexPsbt.d.ts","sourceRoot":"","sources":["../../../../test/unit/pendingApprovalTxHexPsbt.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
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 nock = require("nock");
41
+ const sinon = __importStar(require("sinon"));
42
+ const sdk_core_1 = require("@bitgo/sdk-core");
43
+ const util_1 = require("./util");
44
+ nock.disableNetConnect();
45
+ const coin = (0, util_1.getUtxoCoin)('tbtc');
46
+ const bgUrl = sdk_core_1.common.Environments[util_1.defaultBitGo.getEnv()].uri;
47
+ const walletId = 'wallet0';
48
+ const paId = 'pa0';
49
+ const paData = {
50
+ id: paId,
51
+ wallet: walletId,
52
+ state: sdk_core_1.State.PENDING,
53
+ creator: 'test',
54
+ info: {
55
+ type: sdk_core_1.Type.TRANSACTION_REQUEST,
56
+ transactionRequest: {
57
+ coinSpecific: {
58
+ tbtc: { txHex: 'legacy-hex', txHexPsbt: 'psbt-hex' },
59
+ },
60
+ recipients: [],
61
+ // non-empty buildParams.recipients → canRecreateTransaction returns true for tbtc
62
+ buildParams: { recipients: [{ address: '2NAuziD75WnPPHJVwnd4ckgY4SuJaDVVbMD', amount: '100000' }] },
63
+ sourceWallet: walletId,
64
+ },
65
+ },
66
+ };
67
+ describe('PendingApproval txHexPsbt flow', function () {
68
+ let sandbox;
69
+ let wallet;
70
+ let pendingApproval;
71
+ beforeEach(function () {
72
+ sandbox = sinon.createSandbox();
73
+ wallet = new sdk_core_1.Wallet(util_1.defaultBitGo, coin, { id: walletId, coin: 'tbtc', keys: [] });
74
+ pendingApproval = new sdk_core_1.PendingApproval(util_1.defaultBitGo, coin, paData, wallet);
75
+ });
76
+ afterEach(function () {
77
+ sandbox.restore();
78
+ nock.cleanAll();
79
+ });
80
+ it('passes coinSpecific.txHexPsbt to parseTransaction as txPrebuild.txHexPsbt', async function () {
81
+ // Stub prebuildAndSignTransaction so we don't need /tx/build nocks or real signing
82
+ sandbox.stub(wallet, 'prebuildAndSignTransaction').resolves({ txHex: 'rebuilt' });
83
+ // Capture the args passed to parseTransaction; returning no implicitExternalSpendAmount
84
+ // causes recreateAndSignTransaction to return early after the first parseTransaction call
85
+ const parseStub = sandbox
86
+ .stub(coin, 'parseTransaction')
87
+ .resolves({ outputs: [], changeOutputs: [] });
88
+ nock(bgUrl)
89
+ .put(`/api/v2/tbtc/pendingapprovals/${paId}`)
90
+ .reply(200, { ...paData, state: 'approved' });
91
+ await pendingApproval.approve({ xprv: 'dummy' });
92
+ // recreateAndSignTransaction calls parseTransaction twice:
93
+ // first with originalPrebuild (coinSpecific), then with the rebuilt tx.
94
+ // The first call must carry txHexPsbt from coinSpecific.
95
+ assert_1.default.ok(parseStub.callCount >= 1, 'parseTransaction should have been called');
96
+ assert_1.default.strictEqual(parseStub.firstCall.args[0].txPrebuild.txHexPsbt, 'psbt-hex', 'first parseTransaction call should carry txHexPsbt from coinSpecific');
97
+ });
98
+ });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsVHhIZXhQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3BlbmRpbmdBcHByb3ZhbFR4SGV4UHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw2QkFBOEI7QUFDOUIsNkNBQStCO0FBQy9CLDhDQUFvRztBQUlwRyxpQ0FBbUQ7QUFFbkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFFekIsTUFBTSxJQUFJLEdBQUcsSUFBQSxrQkFBVyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQztBQUVuQixNQUFNLE1BQU0sR0FBd0I7SUFDbEMsRUFBRSxFQUFFLElBQUk7SUFDUixNQUFNLEVBQUUsUUFBUTtJQUNoQixLQUFLLEVBQUUsZ0JBQUssQ0FBQyxPQUFPO0lBQ3BCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLGVBQUksQ0FBQyxtQkFBbUI7UUFDOUIsa0JBQWtCLEVBQUU7WUFDbEIsWUFBWSxFQUFFO2dCQUNaLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTthQUNyRDtZQUNELFVBQVUsRUFBRSxFQUFFO1lBQ2Qsa0ZBQWtGO1lBQ2xGLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQ25HLFlBQVksRUFBRSxRQUFRO1NBQ3ZCO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsUUFBUSxDQUFDLGdDQUFnQyxFQUFFO0lBQ3pDLElBQUksT0FBMkIsQ0FBQztJQUNoQyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGVBQWdDLENBQUM7SUFFckMsVUFBVSxDQUFDO1FBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLG1CQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLGVBQWUsR0FBRyxJQUFJLDBCQUFlLENBQUMsbUJBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1FBQ25GLG1GQUFtRjtRQUNuRixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWxGLHdGQUF3RjtRQUN4RiwwRkFBMEY7UUFDMUYsTUFBTSxTQUFTLEdBQUcsT0FBTzthQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDO2FBQzlCLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBMEMsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDUixHQUFHLENBQUMsaUNBQWlDLElBQUksRUFBRSxDQUFDO2FBQzVDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVoRCxNQUFNLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVqRCwyREFBMkQ7UUFDM0Qsd0VBQXdFO1FBQ3hFLHlEQUF5RDtRQUN6RCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO1FBQ2hGLGdCQUFNLENBQUMsV0FBVyxDQUNoQixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUNoRCxVQUFVLEVBQ1Ysc0VBQXNFLENBQ3ZFLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGNvbW1vbiwgUGVuZGluZ0FwcHJvdmFsLCBQZW5kaW5nQXBwcm92YWxEYXRhLCBTdGF0ZSwgVHlwZSwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy90cmFuc2FjdGlvbi90eXBlcyc7XG5cbmltcG9ydCB7IGRlZmF1bHRCaXRHbywgZ2V0VXR4b0NvaW4gfSBmcm9tICcuL3V0aWwnO1xuXG5ub2NrLmRpc2FibGVOZXRDb25uZWN0KCk7XG5cbmNvbnN0IGNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuY29uc3Qgd2FsbGV0SWQgPSAnd2FsbGV0MCc7XG5jb25zdCBwYUlkID0gJ3BhMCc7XG5cbmNvbnN0IHBhRGF0YTogUGVuZGluZ0FwcHJvdmFsRGF0YSA9IHtcbiAgaWQ6IHBhSWQsXG4gIHdhbGxldDogd2FsbGV0SWQsXG4gIHN0YXRlOiBTdGF0ZS5QRU5ESU5HLFxuICBjcmVhdG9yOiAndGVzdCcsXG4gIGluZm86IHtcbiAgICB0eXBlOiBUeXBlLlRSQU5TQUNUSU9OX1JFUVVFU1QsXG4gICAgdHJhbnNhY3Rpb25SZXF1ZXN0OiB7XG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgdGJ0YzogeyB0eEhleDogJ2xlZ2FjeS1oZXgnLCB0eEhleFBzYnQ6ICdwc2J0LWhleCcgfSxcbiAgICAgIH0sXG4gICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgIC8vIG5vbi1lbXB0eSBidWlsZFBhcmFtcy5yZWNpcGllbnRzIOKGkiBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgdGJ0Y1xuICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogJzJOQXV6aUQ3NVduUFBISlZ3bmQ0Y2tnWTRTdUphRFZWYk1EJywgYW1vdW50OiAnMTAwMDAwJyB9XSB9LFxuICAgICAgc291cmNlV2FsbGV0OiB3YWxsZXRJZCxcbiAgICB9LFxuICB9LFxufTtcblxuZGVzY3JpYmUoJ1BlbmRpbmdBcHByb3ZhbCB0eEhleFBzYnQgZmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHNhbmRib3g6IHNpbm9uLlNpbm9uU2FuZGJveDtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuICBsZXQgcGVuZGluZ0FwcHJvdmFsOiBQZW5kaW5nQXBwcm92YWw7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGRlZmF1bHRCaXRHbywgY29pbiwgeyBpZDogd2FsbGV0SWQsIGNvaW46ICd0YnRjJywga2V5czogW10gfSk7XG4gICAgcGVuZGluZ0FwcHJvdmFsID0gbmV3IFBlbmRpbmdBcHByb3ZhbChkZWZhdWx0Qml0R28sIGNvaW4sIHBhRGF0YSwgd2FsbGV0KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdwYXNzZXMgY29pblNwZWNpZmljLnR4SGV4UHNidCB0byBwYXJzZVRyYW5zYWN0aW9uIGFzIHR4UHJlYnVpbGQudHhIZXhQc2J0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0dWIgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gc28gd2UgZG9uJ3QgbmVlZCAvdHgvYnVpbGQgbm9ja3Mgb3IgcmVhbCBzaWduaW5nXG4gICAgc2FuZGJveC5zdHViKHdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoeyB0eEhleDogJ3JlYnVpbHQnIH0pO1xuXG4gICAgLy8gQ2FwdHVyZSB0aGUgYXJncyBwYXNzZWQgdG8gcGFyc2VUcmFuc2FjdGlvbjsgcmV0dXJuaW5nIG5vIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudFxuICAgIC8vIGNhdXNlcyByZWNyZWF0ZUFuZFNpZ25UcmFuc2FjdGlvbiB0byByZXR1cm4gZWFybHkgYWZ0ZXIgdGhlIGZpcnN0IHBhcnNlVHJhbnNhY3Rpb24gY2FsbFxuICAgIGNvbnN0IHBhcnNlU3R1YiA9IHNhbmRib3hcbiAgICAgIC5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJylcbiAgICAgIC5yZXNvbHZlcyh7IG91dHB1dHM6IFtdLCBjaGFuZ2VPdXRwdXRzOiBbXSB9IGFzIHVua25vd24gYXMgUGFyc2VkVHJhbnNhY3Rpb248bnVtYmVyPik7XG5cbiAgICBub2NrKGJnVXJsKVxuICAgICAgLnB1dChgL2FwaS92Mi90YnRjL3BlbmRpbmdhcHByb3ZhbHMvJHtwYUlkfWApXG4gICAgICAucmVwbHkoMjAwLCB7IC4uLnBhRGF0YSwgc3RhdGU6ICdhcHByb3ZlZCcgfSk7XG5cbiAgICBhd2FpdCBwZW5kaW5nQXBwcm92YWwuYXBwcm92ZSh7IHhwcnY6ICdkdW1teScgfSk7XG5cbiAgICAvLyByZWNyZWF0ZUFuZFNpZ25UcmFuc2FjdGlvbiBjYWxscyBwYXJzZVRyYW5zYWN0aW9uIHR3aWNlOlxuICAgIC8vIGZpcnN0IHdpdGggb3JpZ2luYWxQcmVidWlsZCAoY29pblNwZWNpZmljKSwgdGhlbiB3aXRoIHRoZSByZWJ1aWx0IHR4LlxuICAgIC8vIFRoZSBmaXJzdCBjYWxsIG11c3QgY2FycnkgdHhIZXhQc2J0IGZyb20gY29pblNwZWNpZmljLlxuICAgIGFzc2VydC5vayhwYXJzZVN0dWIuY2FsbENvdW50ID49IDEsICdwYXJzZVRyYW5zYWN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgcGFyc2VTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UHJlYnVpbGQudHhIZXhQc2J0LFxuICAgICAgJ3BzYnQtaGV4JyxcbiAgICAgICdmaXJzdCBwYXJzZVRyYW5zYWN0aW9uIGNhbGwgc2hvdWxkIGNhcnJ5IHR4SGV4UHNidCBmcm9tIGNvaW5TcGVjaWZpYydcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
@@ -38,9 +38,8 @@ const utxolib = __importStar(require("@bitgo/utxo-lib"));
38
38
  const nock = require("nock");
39
39
  const sdk_core_1 = require("@bitgo/sdk-core");
40
40
  const sdk_test_1 = require("@bitgo/sdk-test");
41
+ const src_1 = require("../../src");
41
42
  const util_1 = require("./util");
42
- const walletPassphrase = 'gabagool';
43
- const webauthnWalletPassPhrase = 'just the gabagool';
44
43
  function assertSignable(psbtHex, inputScripts, network) {
45
44
  const psbt = utxolib.bitgo.createPsbtFromHex(psbtHex, network);
46
45
  // Make sure that you can sign with bitgo key and extract the transaction
@@ -62,25 +61,14 @@ const keyDocumentObjects = rootWalletKeys.triple.map((bip32, keyIdx) => {
62
61
  id: (0, sdk_test_1.getSeed)(util_1.keychainsBase58[keyIdx].pub).toString('hex'),
63
62
  pub: bip32.neutered().toBase58(),
64
63
  source: ['user', 'backup', 'bitgo'][keyIdx],
65
- encryptedPrv: (0, util_1.encryptKeychain)(walletPassphrase, util_1.keychainsBase58[keyIdx]),
66
- webauthnDevices: [
67
- {
68
- otpDeviceId: '123',
69
- authenticatorInfo: {
70
- credID: 'credID',
71
- fmt: 'packed',
72
- publicKey: 'some value',
73
- },
74
- prfSalt: '456',
75
- encryptedPrv: (0, util_1.encryptKeychain)(webauthnWalletPassPhrase, util_1.keychainsBase58[keyIdx]),
76
- },
77
- ],
78
64
  coinSpecific: {},
79
65
  };
80
66
  });
81
- function run(coin, inputScripts, txFormat) {
67
+ function run(coin, inputScripts) {
82
68
  function createPrebuildPsbt(inputs, outputs) {
83
- const psbt = utxolib.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned');
69
+ const psbt = utxolib.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned', {
70
+ p2shP2pkKey: (0, src_1.getReplayProtectionPubkeys)(coin.name)[0],
71
+ });
84
72
  utxolib.bitgo.addXpubsToPsbt(psbt, rootWalletKeys);
85
73
  return psbt;
86
74
  }
@@ -142,7 +130,7 @@ function run(coin, inputScripts, txFormat) {
142
130
  }
143
131
  return nocks;
144
132
  }
145
- describe(`${coin.getFullName()}-prebuildAndSign-txFormat=${txFormat}-inputScripts=${inputScripts.join(',')}`, function () {
133
+ describe(`${coin.name} prebuildAndSign inputScripts=${inputScripts.join(',')}`, function () {
146
134
  const wallet = (0, util_1.getUtxoWallet)(coin, {
147
135
  coinSpecific: { addressVersion: 'base58' },
148
136
  keys: keyDocumentObjects.map((k) => k.id),
@@ -174,48 +162,29 @@ function run(coin, inputScripts, txFormat) {
174
162
  prebuild = createPrebuildPsbt(inputScripts.map((s) => ({ scriptType: s, value: BigInt(1e8) })), [{ scriptType: outputScriptType, value: outputAmount }]);
175
163
  });
176
164
  afterEach(nock.cleanAll);
177
- [true, false].forEach((useWebauthn) => {
178
- it(`should succeed with ${useWebauthn ? 'webauthn encryptedPrv' : 'encryptedPrv'}`, async function () {
179
- // Check if this wallet/coin combination defaults to psbt
180
- const defaultTxFormat = coin.getDefaultTxFormat(wallet);
181
- const nocks = createNocks({
182
- bgUrl,
183
- wallet,
184
- keyDocuments: keyDocumentObjects,
185
- prebuild,
186
- recipient,
187
- addressInfo,
188
- nockOutputAddresses: txFormat !== 'psbt',
189
- txFormat: defaultTxFormat,
190
- });
191
- // call prebuild and sign, nocks should be consumed
192
- const res = (await wallet.prebuildAndSignTransaction({
193
- recipients: [recipient],
194
- walletPassphrase: useWebauthn ? webauthnWalletPassPhrase : walletPassphrase,
195
- }));
196
- nocks.forEach((nock) => assert.ok(nock.isDone()));
197
- assertSignable(res.txHex, inputScripts, coin.network);
198
- });
199
- it('should fail if the wallet passphrase is incorrect', async function () {
200
- createNocks({
201
- bgUrl,
202
- wallet,
203
- keyDocuments: keyDocumentObjects,
204
- prebuild,
205
- recipient,
206
- addressInfo,
207
- nockOutputAddresses: txFormat !== 'psbt',
208
- });
209
- await assert.rejects(wallet.prebuildAndSignTransaction({
210
- recipients: [recipient],
211
- walletPassphrase: Math.random().toString(),
212
- }), { message: 'unable to decrypt keychain with the given wallet passphrase' });
165
+ it('should succeed', async function () {
166
+ const defaultTxFormat = coin.getDefaultTxFormat(wallet);
167
+ const nocks = createNocks({
168
+ bgUrl,
169
+ wallet,
170
+ keyDocuments: keyDocumentObjects,
171
+ prebuild,
172
+ recipient,
173
+ addressInfo,
174
+ nockOutputAddresses: false,
175
+ txFormat: defaultTxFormat,
213
176
  });
177
+ // call prebuild and sign, nocks should be consumed
178
+ const res = (await wallet.prebuildAndSignTransaction({
179
+ recipients: [recipient],
180
+ prv: util_1.keychainsBase58[0].prv,
181
+ }));
182
+ nocks.forEach((nock) => assert.ok(nock.isDone()));
183
+ assertSignable(res.txHex, inputScripts, coin.network);
214
184
  });
215
185
  [true, false].forEach((selfSend) => {
216
186
  it(`should be able to build, sign, & verify a replacement transaction with selfSend: ${selfSend}`, async function () {
217
187
  const rbfTxIds = ['tx-to-be-replaced'], feeMultiplier = 1.5;
218
- // Check if this wallet/coin combination defaults to psbt
219
188
  const defaultTxFormat = coin.getDefaultTxFormat(wallet);
220
189
  const nocks = createNocks({
221
190
  bgUrl,
@@ -227,13 +196,13 @@ function run(coin, inputScripts, txFormat) {
227
196
  rbfTxIds,
228
197
  feeMultiplier,
229
198
  selfSend,
230
- nockOutputAddresses: txFormat !== 'psbt',
199
+ nockOutputAddresses: false,
231
200
  txFormat: defaultTxFormat,
232
201
  });
233
202
  // call prebuild and sign, nocks should be consumed
234
203
  const res = (await wallet.prebuildAndSignTransaction({
235
204
  recipients: [recipient],
236
- walletPassphrase,
205
+ prv: util_1.keychainsBase58[0].prv,
237
206
  rbfTxIds,
238
207
  feeMultiplier,
239
208
  }));
@@ -244,6 +213,6 @@ function run(coin, inputScripts, txFormat) {
244
213
  });
245
214
  }
246
215
  (0, util_1.getMinUtxoCoins)().forEach((coin) => {
247
- run(coin, (0, util_1.getScriptTypes)(coin, 'psbt'), 'psbt');
216
+ run(coin, (0, util_1.getScriptTypes)(coin, 'psbt'));
248
217
  });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbGRBbmRTaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3ByZWJ1aWxkQW5kU2lnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyx5REFBMkM7QUFFM0MsNkJBQThCO0FBQzlCLDhDQUE0RTtBQUM1RSw4Q0FBMEM7QUFJMUMsaUNBU2dCO0FBWWhCLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO0FBQ3BDLE1BQU0sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUM7QUFPckQsU0FBUyxjQUFjLENBQUMsT0FBZSxFQUFFLFlBQTBCLEVBQUUsT0FBd0I7SUFDM0YsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QseUVBQXlFO0lBQ3pFLHVIQUF1SDtJQUN2SCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDdEYsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQy9GLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDckMsTUFBTSxDQUFDLEVBQUUsQ0FB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Q0FBQztBQUNMLENBQUM7QUFFRCxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUEscUJBQWMsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBjb21tb24sIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7XG4gIGRlZmF1bHRCaXRHbyxcbiAgZW5jcnlwdEtleWNoYWluLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0TWluVXR4b0NvaW5zLFxuICBnZXRVdHhvV2FsbGV0LFxuICBrZXljaGFpbnNCYXNlNTgsXG4gIGdldFNjcmlwdFR5cGVzLFxuICBUeEZvcm1hdCxcbn0gZnJvbSAnLi91dGlsJztcblxudHlwZSBTY3JpcHRUeXBlID0gdGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlO1xuXG50eXBlIEtleURvYyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcHViOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBlbmNyeXB0ZWRQcnY6IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBhbnk7XG59O1xuXG5jb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2dhYmFnb29sJztcbmNvbnN0IHdlYmF1dGhuV2FsbGV0UGFzc1BocmFzZSA9ICdqdXN0IHRoZSBnYWJhZ29vbCc7XG5cbnR5cGUgSW5wdXQgPSB7XG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBiaWdpbnQ7XG59O1xuXG5mdW5jdGlvbiBhc3NlcnRTaWduYWJsZShwc2J0SGV4OiBzdHJpbmcsIGlucHV0U2NyaXB0czogU2NyaXB0VHlwZVtdLCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiB2b2lkIHtcbiAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgocHNidEhleCwgbmV0d29yayk7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHlvdSBjYW4gc2lnbiB3aXRoIGJpdGdvIGtleSBhbmQgZXh0cmFjdCB0aGUgdHJhbnNhY3Rpb25cbiAgLy8gU2tpcCB2YWxpZGF0aW9uIGZvciBwMnNoUDJwayAoc2luZ2xlLXNpZyByZXBsYXkgcHJvdGVjdGlvbikgYW5kIHRhcHJvb3RLZXlQYXRoU3BlbmQgKHJlcXVpcmVzIG11c2lnMiBub25jZSBleGNoYW5nZSlcbiAgaWYgKGlucHV0U2NyaXB0cy5pbmNsdWRlcygncDJzaFAycGsnKSB8fCBpbnB1dFNjcmlwdHMuaW5jbHVkZXMoJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBrZXkgPSBpbnB1dFNjcmlwdHMuaW5jbHVkZXMoJ3AydHJNdXNpZzInKSA/IHJvb3RXYWxsZXRLZXlzLmJhY2t1cCA6IHJvb3RXYWxsZXRLZXlzLmJpdGdvO1xuICBwc2J0LnNpZ25BbGxJbnB1dHNIRChrZXksIHsgZGV0ZXJtaW5pc3RpYzogdHJ1ZSB9KTtcbiAgcHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZkFsbElucHV0cygpO1xuICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gIGNvbnN0IHR4ID0gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgYXNzZXJ0Lm9rKHR4KTtcbn1cblxuLy8gQnVpbGQgdGhlIGtleSBvYmplY3RzXG5jb25zdCByb290V2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5jb25zdCBrZXlEb2N1bWVudE9iamVjdHMgPSByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChiaXAzMiwga2V5SWR4KSA9PiB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGdldFNlZWQoa2V5Y2hhaW5zQmFzZTU4W2tleUlkeF0ucHViKS50b1N0cmluZygnaGV4JyksXG4gICAgcHViOiBiaXAzMi5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgc291cmNlOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ11ba2V5SWR4XSxcbiAgICBlbmNyeXB0ZWRQcnY6IGVuY3J5cHRLZXljaGFpbih3YWxsZXRQYXNzcGhyYXNlLCBrZXljaGFpbnNCYXNlNThba2V5SWR4XSksXG4gICAgd2ViYXV0aG5EZXZpY2VzOiBbXG4gICAgICB7XG4gICAgICAgIG90cERldmljZUlkOiAnMTIzJyxcbiAgICAgICAgYXV0aGVudGljYXRvckluZm86IHtcbiAgICAgICAgICBjcmVkSUQ6ICdjcmVkSUQnLFxuICAgICAgICAgIGZtdDogJ3BhY2tlZCcsXG4gICAgICAgICAgcHVibGljS2V5OiAnc29tZSB2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIHByZlNhbHQ6ICc0NTYnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY3J5cHRLZXljaGFpbih3ZWJhdXRobldhbGxldFBhc3NQaHJhc2UsIGtleWNoYWluc0Jhc2U1OFtrZXlJZHhdKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb2luU3BlY2lmaWM6IHt9LFxuICB9O1xufSk7XG5cbmZ1bmN0aW9uIHJ1bihjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBpbnB1dFNjcmlwdHM6IFNjcmlwdFR5cGVbXSwgdHhGb3JtYXQ6IFR4Rm9ybWF0KTogdm9pZCB7XG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWJ1aWxkUHNidChpbnB1dHM6IElucHV0W10sIG91dHB1dHM6IHsgc2NyaXB0VHlwZTogJ3Ayc2gnOyB2YWx1ZTogYmlnaW50IH1bXSkge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICBpbnB1dHMgYXMgdXR4b2xpYi50ZXN0dXRpbC5JbnB1dFtdLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIGNvaW4ubmV0d29yayxcbiAgICAgIHJvb3RXYWxsZXRLZXlzLFxuICAgICAgJ3Vuc2lnbmVkJ1xuICAgICk7XG4gICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5cyk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2NrcyhwYXJhbXM6IHtcbiAgICBiZ1VybDogc3RyaW5nO1xuICAgIHdhbGxldDogV2FsbGV0O1xuICAgIGtleURvY3VtZW50czogS2V5RG9jW107XG4gICAgcHJlYnVpbGQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG4gICAgcmVjaXBpZW50OiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBzdHJpbmcgfTtcbiAgICBhZGRyZXNzSW5mbzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICByYmZUeElkcz86IHN0cmluZ1tdO1xuICAgIGZlZU11bHRpcGxpZXI/OiBudW1iZXI7XG4gICAgc2VsZlNlbmQ/OiBib29sZWFuO1xuICAgIG5vY2tPdXRwdXRBZGRyZXNzZXM/OiBib29sZWFuO1xuICAgIHR4Rm9ybWF0Pzogc3RyaW5nO1xuICB9KTogbm9jay5TY29wZVtdIHtcbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG5cbiAgICAvLyBOb2NrIHRoZSBwcmVidWlsZCByb3V0ZSAoL3R4L2J1aWxkLCBibG9ja2hlaWdodClcbiAgICBjb25zdCBleHBlY3RlZF9wYXJhbXMgPSB7XG4gICAgICByZWNpcGllbnRzOiBbcGFyYW1zLnJlY2lwaWVudF0sXG4gICAgICByYmZUeElkczogcGFyYW1zLnJiZlR4SWRzLFxuICAgICAgZmVlTXVsdGlwbGllcjogcGFyYW1zLmZlZU11bHRpcGxpZXIsXG4gICAgICBjaGFuZ2VBZGRyZXNzVHlwZTogWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXSxcbiAgICB9O1xuICAgIGlmIChwYXJhbXMudHhGb3JtYXQpIHtcbiAgICAgIGV4cGVjdGVkX3BhcmFtc1sndHhGb3JtYXQnXSA9IHBhcmFtcy50eEZvcm1hdDtcbiAgICB9XG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2socGFyYW1zLmJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7cGFyYW1zLndhbGxldC5pZCgpfS90eC9idWlsZGAsIGV4cGVjdGVkX3BhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0eEhleDogcGFyYW1zLnByZWJ1aWxkLnRvSGV4KCksIHR4SW5mbzoge30gfSlcbiAgICApO1xuICAgIG5vY2tzLnB1c2gobm9jayhwYXJhbXMuYmdVcmwpLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vcHVibGljL2Jsb2NrL2xhdGVzdGApLnJlcGx5KDIwMCwgeyBoZWlnaHQ6IDEwMDAgfSkpO1xuXG4gICAgLy8gbm9jayB0aGUga2V5Y2hhaW4gZmV0Y2ggLSAzIHRpbWVzIChwcmVidWlsZEFuZFNpZ24sIHZlcmlmeVRyYW5zYWN0aW9uLCBhbmQgc2lnblRyYW5zYWN0aW9uKVxuICAgIHBhcmFtcy5rZXlEb2N1bWVudHMuZm9yRWFjaCgoa2V5RG9jdW1lbnQpID0+IHtcbiAgICAgIG5vY2tzLnB1c2goXG4gICAgICAgIG5vY2socGFyYW1zLmJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L2tleS8ke2tleURvY3VtZW50LmlkfWApLnRpbWVzKDMpLnJlcGx5KDIwMCwga2V5RG9jdW1lbnQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gbm9jayB0aGUgYWRkcmVzcyBpbmZvIGZldGNoXG4gICAgaWYgKHBhcmFtcy5ub2NrT3V0cHV0QWRkcmVzc2VzKSB7XG4gICAgICBub2Nrcy5wdXNoKFxuICAgICAgICBub2NrKHBhcmFtcy5iZ1VybClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHtwYXJhbXMud2FsbGV0LmlkKCl9L2FkZHJlc3MvJHtwYXJhbXMuYWRkcmVzc0luZm8uYWRkcmVzc31gKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHBhcmFtcy5hZGRyZXNzSW5mbylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yYmZUeElkcykge1xuICAgICAgbm9ja3MucHVzaChcbiAgICAgICAgbm9jayhwYXJhbXMuYmdVcmwpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7cGFyYW1zLndhbGxldC5pZCgpfS90eC8ke3BhcmFtcy5yYmZUeElkc1swXX0/aW5jbHVkZVJiZj10cnVlYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBwYXJhbXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICAgICAgdmFsdWU6IE51bWJlcihwYXJhbXMucmVjaXBpZW50LmFtb3VudCksXG4gICAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHBhcmFtcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgICAgICAgIHdhbGxldDogcGFyYW1zLnNlbGZTZW5kID8gcGFyYW1zLndhbGxldC5pZCgpIDogJ3NvbWUtb3RoZXItd2FsbGV0LWlkJywgLy8gZXh0ZXJuYWwgb3V0cHV0IGlmIG5vdCBhIHNlbGYgc2VuZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAvLyBEdW1teSBjaGFuZ2Ugb3V0cHV0IHRvIHRlc3QgdHJhbnNmZXIgZW50cmllcyBmaWx0ZXJpbmdcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogTnVtYmVyKHBhcmFtcy5yZWNpcGllbnQuYW1vdW50KSxcbiAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogcGFyYW1zLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgICAgICAgd2FsbGV0OiBwYXJhbXMud2FsbGV0LmlkKCksIC8vIGludGVybmFsIG91dHB1dFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBub2NrIHRoZSBkZXRlcm1pbmlzdGljIG5vbmNlIHJlc3BvbnNlXG4gICAgaWYgKGlucHV0U2NyaXB0cy5pbmNsdWRlcygndGFwcm9vdEtleVBhdGhTcGVuZCcpKSB7XG4gICAgICBjb25zdCBwc2J0ID0gcGFyYW1zLnByZWJ1aWxkLmNsb25lKCk7XG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMudXNlcik7XG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pO1xuICAgICAgbm9ja3MucHVzaChcbiAgICAgICAgbm9jayhwYXJhbXMuYmdVcmwpXG4gICAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3BhcmFtcy53YWxsZXQuaWQoKX0vdHgvc2lnbnBzYnRgLCAoYm9keSkgPT4gYm9keS5wc2J0KVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgcHNidDogcHNidC50b0hleCgpIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBub2NrcztcbiAgfVxuXG4gIGRlc2NyaWJlKGAke2NvaW4uZ2V0RnVsbE5hbWUoKX0tcHJlYnVpbGRBbmRTaWduLXR4Rm9ybWF0PSR7dHhGb3JtYXR9LWlucHV0U2NyaXB0cz0ke2lucHV0U2NyaXB0cy5qb2luKFxuICAgICcsJ1xuICApfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHtcbiAgICAgIGNvaW5TcGVjaWZpYzogeyBhZGRyZXNzVmVyc2lvbjogJ2Jhc2U1OCcgfSxcbiAgICAgIGtleXM6IGtleURvY3VtZW50T2JqZWN0cy5tYXAoKGspID0+IGsuaWQpLFxuICAgICAgaWQ6ICd3YWxsZXRJZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG4gICAgbGV0IHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGxldCByZWNpcGllbnQ6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IHN0cmluZyB9O1xuICAgIGxldCBhZGRyZXNzSW5mbzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdCBmZWUgPSBCaWdJbnQoMTAwMDApO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1ha2Ugb3V0cHV0IGFkZHJlc3MgaW5mb3JtYXRpb25cbiAgICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IEJpZ0ludChpbnB1dFNjcmlwdHMubGVuZ3RoKSAqIEJpZ0ludCgxZTgpIC0gZmVlO1xuICAgICAgY29uc3Qgb3V0cHV0U2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUgPSAncDJzaCc7XG4gICAgICBjb25zdCBvdXRwdXRDaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUob3V0cHV0U2NyaXB0VHlwZSk7XG4gICAgICBjb25zdCBvdXRwdXRBZGRyZXNzID0gdXR4b2xpYi5iaXRnby5nZXRXYWxsZXRBZGRyZXNzKHJvb3RXYWxsZXRLZXlzLCBvdXRwdXRDaGFpbiwgMCwgY29pbi5uZXR3b3JrKTtcblxuICAgICAgcmVjaXBpZW50ID0ge1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXRBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICAgIGFkZHJlc3NJbmZvID0ge1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXRBZGRyZXNzLFxuICAgICAgICBjaGFpbjogb3V0cHV0Q2hhaW4sXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICAgIHdhbGxldDogd2FsbGV0LmlkKCksXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9O1xuXG4gICAgICBwcmVidWlsZCA9IGNyZWF0ZVByZWJ1aWxkUHNidChcbiAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgocykgPT4gKHsgc2NyaXB0VHlwZTogcywgdmFsdWU6IEJpZ0ludCgxZTgpIH0pKSxcbiAgICAgICAgW3sgc2NyaXB0VHlwZTogb3V0cHV0U2NyaXB0VHlwZSwgdmFsdWU6IG91dHB1dEFtb3VudCB9XVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIFt0cnVlLCBmYWxzZV0uZm9yRWFjaCgodXNlV2ViYXV0aG4pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgc3VjY2VlZCB3aXRoICR7dXNlV2ViYXV0aG4gPyAnd2ViYXV0aG4gZW5jcnlwdGVkUHJ2JyA6ICdlbmNyeXB0ZWRQcnYnfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyB3YWxsZXQvY29pbiBjb21iaW5hdGlvbiBkZWZhdWx0cyB0byBwc2J0XG4gICAgICAgIGNvbnN0IGRlZmF1bHRUeEZvcm1hdCA9IGNvaW4uZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldCk7XG4gICAgICAgIGNvbnN0IG5vY2tzID0gY3JlYXRlTm9ja3Moe1xuICAgICAgICAgIGJnVXJsLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICBrZXlEb2N1bWVudHM6IGtleURvY3VtZW50T2JqZWN0cyxcbiAgICAgICAgICBwcmVidWlsZCxcbiAgICAgICAgICByZWNpcGllbnQsXG4gICAgICAgICAgYWRkcmVzc0luZm8sXG4gICAgICAgICAgbm9ja091dHB1dEFkZHJlc3NlczogdHhGb3JtYXQgIT09ICdwc2J0JyxcbiAgICAgICAgICB0eEZvcm1hdDogZGVmYXVsdFR4Rm9ybWF0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjYWxsIHByZWJ1aWxkIGFuZCBzaWduLCBub2NrcyBzaG91bGQgYmUgY29uc3VtZWRcbiAgICAgICAgY29uc3QgcmVzID0gKGF3YWl0IHdhbGxldC5wcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVjaXBpZW50czogW3JlY2lwaWVudF0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdXNlV2ViYXV0aG4gPyB3ZWJhdXRobldhbGxldFBhc3NQaHJhc2UgOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9KSkgYXMgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcblxuICAgICAgICBub2Nrcy5mb3JFYWNoKChub2NrKSA9PiBhc3NlcnQub2sobm9jay5pc0RvbmUoKSkpO1xuXG4gICAgICAgIGFzc2VydFNpZ25hYmxlKHJlcy50eEhleCwgaW5wdXRTY3JpcHRzLCBjb2luLm5ldHdvcmspO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgd2FsbGV0IHBhc3NwaHJhc2UgaXMgaW5jb3JyZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjcmVhdGVOb2Nrcyh7XG4gICAgICAgICAgYmdVcmwsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgIGtleURvY3VtZW50czoga2V5RG9jdW1lbnRPYmplY3RzLFxuICAgICAgICAgIHByZWJ1aWxkLFxuICAgICAgICAgIHJlY2lwaWVudCxcbiAgICAgICAgICBhZGRyZXNzSW5mbyxcbiAgICAgICAgICBub2NrT3V0cHV0QWRkcmVzc2VzOiB0eEZvcm1hdCAhPT0gJ3BzYnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgICB3YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVjaXBpZW50czogW3JlY2lwaWVudF0sXG4gICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBtZXNzYWdlOiAndW5hYmxlIHRvIGRlY3J5cHQga2V5Y2hhaW4gd2l0aCB0aGUgZ2l2ZW4gd2FsbGV0IHBhc3NwaHJhc2UnIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgW3RydWUsIGZhbHNlXS5mb3JFYWNoKChzZWxmU2VuZCkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBiZSBhYmxlIHRvIGJ1aWxkLCBzaWduLCAmIHZlcmlmeSBhIHJlcGxhY2VtZW50IHRyYW5zYWN0aW9uIHdpdGggc2VsZlNlbmQ6ICR7c2VsZlNlbmR9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByYmZUeElkcyA9IFsndHgtdG8tYmUtcmVwbGFjZWQnXSxcbiAgICAgICAgICBmZWVNdWx0aXBsaWVyID0gMS41O1xuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHdhbGxldC9jb2luIGNvbWJpbmF0aW9uIGRlZmF1bHRzIHRvIHBzYnRcbiAgICAgICAgY29uc3QgZGVmYXVsdFR4Rm9ybWF0ID0gY29pbi5nZXREZWZhdWx0VHhGb3JtYXQod2FsbGV0KTtcbiAgICAgICAgY29uc3Qgbm9ja3MgPSBjcmVhdGVOb2Nrcyh7XG4gICAgICAgICAgYmdVcmwsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgIGtleURvY3VtZW50czoga2V5RG9jdW1lbnRPYmplY3RzLFxuICAgICAgICAgIHByZWJ1aWxkLFxuICAgICAgICAgIHJlY2lwaWVudCxcbiAgICAgICAgICBhZGRyZXNzSW5mbyxcbiAgICAgICAgICByYmZUeElkcyxcbiAgICAgICAgICBmZWVNdWx0aXBsaWVyLFxuICAgICAgICAgIHNlbGZTZW5kLFxuICAgICAgICAgIG5vY2tPdXRwdXRBZGRyZXNzZXM6IHR4Rm9ybWF0ICE9PSAncHNidCcsXG4gICAgICAgICAgdHhGb3JtYXQ6IGRlZmF1bHRUeEZvcm1hdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsbCBwcmVidWlsZCBhbmQgc2lnbiwgbm9ja3Mgc2hvdWxkIGJlIGNvbnN1bWVkXG4gICAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCB3YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtyZWNpcGllbnRdLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgcmJmVHhJZHMsXG4gICAgICAgICAgZmVlTXVsdGlwbGllcixcbiAgICAgICAgfSkpIGFzIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb247XG5cbiAgICAgICAgbm9ja3MuZm9yRWFjaCgobm9jaykgPT4gYXNzZXJ0Lm9rKG5vY2suaXNEb25lKCkpKTtcblxuICAgICAgICBhc3NlcnRTaWduYWJsZShyZXMudHhIZXgsIGlucHV0U2NyaXB0cywgY29pbi5uZXR3b3JrKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZ2V0TWluVXR4b0NvaW5zKCkuZm9yRWFjaCgoY29pbikgPT4ge1xuICBydW4oY29pbiwgZ2V0U2NyaXB0VHlwZXMoY29pbiwgJ3BzYnQnKSwgJ3BzYnQnKTtcbn0pO1xuIl19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbGRBbmRTaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3ByZWJ1aWxkQW5kU2lnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyx5REFBMkM7QUFFM0MsNkJBQThCO0FBQzlCLDhDQUE0RTtBQUM1RSw4Q0FBMEM7QUFFMUMsbUNBQXlFO0FBRXpFLGlDQU9nQjtBQWdCaEIsU0FBUyxjQUFjLENBQUMsT0FBZSxFQUFFLFlBQTBCLEVBQUUsT0FBd0I7SUFDM0YsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QseUVBQXlFO0lBQ3pFLHVIQUF1SDtJQUN2SCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDdEYsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQy9GLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDckMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQsd0JBQXdCO0FBQ3hCLE1BQU0sY0FB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QUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBQSxzQkFBZSxHQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDakMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFBLHFCQUFjLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBjb21tb24sIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5pbXBvcnQge1xuICBkZWZhdWx0Qml0R28sXG4gIGdldERlZmF1bHRXYWxsZXRLZXlzLFxuICBnZXRNaW5VdHhvQ29pbnMsXG4gIGdldFV0eG9XYWxsZXQsXG4gIGtleWNoYWluc0Jhc2U1OCxcbiAgZ2V0U2NyaXB0VHlwZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbnR5cGUgU2NyaXB0VHlwZSA9IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZTtcblxudHlwZSBLZXlEb2MgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHB1Yjogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBhbnk7XG59O1xuXG50eXBlIElucHV0ID0ge1xuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlO1xuICB2YWx1ZTogYmlnaW50O1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0U2lnbmFibGUocHNidEhleDogc3RyaW5nLCBpbnB1dFNjcmlwdHM6IFNjcmlwdFR5cGVbXSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogdm9pZCB7XG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHBzYnRIZXgsIG5ldHdvcmspO1xuICAvLyBNYWtlIHN1cmUgdGhhdCB5b3UgY2FuIHNpZ24gd2l0aCBiaXRnbyBrZXkgYW5kIGV4dHJhY3QgdGhlIHRyYW5zYWN0aW9uXG4gIC8vIFNraXAgdmFsaWRhdGlvbiBmb3IgcDJzaFAycGsgKHNpbmdsZS1zaWcgcmVwbGF5IHByb3RlY3Rpb24pIGFuZCB0YXByb290S2V5UGF0aFNwZW5kIChyZXF1aXJlcyBtdXNpZzIgbm9uY2UgZXhjaGFuZ2UpXG4gIGlmIChpbnB1dFNjcmlwdHMuaW5jbHVkZXMoJ3Ayc2hQMnBrJykgfHwgaW5wdXRTY3JpcHRzLmluY2x1ZGVzKCd0YXByb290S2V5UGF0aFNwZW5kJykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qga2V5ID0gaW5wdXRTY3JpcHRzLmluY2x1ZGVzKCdwMnRyTXVzaWcyJykgPyByb290V2FsbGV0S2V5cy5iYWNrdXAgOiByb290V2FsbGV0S2V5cy5iaXRnbztcbiAgcHNidC5zaWduQWxsSW5wdXRzSEQoa2V5LCB7IGRldGVybWluaXN0aWM6IHRydWUgfSk7XG4gIHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZBbGxJbnB1dHMoKTtcbiAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICBjb25zdCB0eCA9IHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG4gIGFzc2VydC5vayh0eCk7XG59XG5cbi8vIEJ1aWxkIHRoZSBrZXkgb2JqZWN0c1xuY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuY29uc3Qga2V5RG9jdW1lbnRPYmplY3RzID0gcm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoYmlwMzIsIGtleUlkeCkgPT4ge1xuICByZXR1cm4ge1xuICAgIGlkOiBnZXRTZWVkKGtleWNoYWluc0Jhc2U1OFtrZXlJZHhdLnB1YikudG9TdHJpbmcoJ2hleCcpLFxuICAgIHB1YjogYmlwMzIubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIHNvdXJjZTogWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW2tleUlkeF0sXG4gICAgY29pblNwZWNpZmljOiB7fSxcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBydW4oY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgaW5wdXRTY3JpcHRzOiBTY3JpcHRUeXBlW10pOiB2b2lkIHtcbiAgZnVuY3Rpb24gY3JlYXRlUHJlYnVpbGRQc2J0KGlucHV0czogSW5wdXRbXSwgb3V0cHV0czogeyBzY3JpcHRUeXBlOiAncDJzaCc7IHZhbHVlOiBiaWdpbnQgfVtdKSB7XG4gICAgY29uc3QgcHNidCA9IHV0eG9saWIudGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgIGlucHV0cyBhcyB1dHhvbGliLnRlc3R1dGlsLklucHV0W10sXG4gICAgICBvdXRwdXRzLFxuICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAndW5zaWduZWQnLFxuICAgICAge1xuICAgICAgICBwMnNoUDJwa0tleTogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbi5uYW1lKVswXSxcbiAgICAgIH1cbiAgICApO1xuICAgIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleXMpO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9ja3MocGFyYW1zOiB7XG4gICAgYmdVcmw6IHN0cmluZztcbiAgICB3YWxsZXQ6IFdhbGxldDtcbiAgICBrZXlEb2N1bWVudHM6IEtleURvY1tdO1xuICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIHJlY2lwaWVudDogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nIH07XG4gICAgYWRkcmVzc0luZm86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgcmJmVHhJZHM/OiBzdHJpbmdbXTtcbiAgICBmZWVNdWx0aXBsaWVyPzogbnVtYmVyO1xuICAgIHNlbGZTZW5kPzogYm9vbGVhbjtcbiAgICBub2NrT3V0cHV0QWRkcmVzc2VzPzogYm9vbGVhbjtcbiAgICB0eEZvcm1hdD86IHN0cmluZztcbiAgfSk6IG5vY2suU2NvcGVbXSB7XG4gICAgY29uc3Qgbm9ja3M6IG5vY2suU2NvcGVbXSA9IFtdO1xuXG4gICAgLy8gTm9jayB0aGUgcHJlYnVpbGQgcm91dGUgKC90eC9idWlsZCwgYmxvY2toZWlnaHQpXG4gICAgY29uc3QgZXhwZWN0ZWRfcGFyYW1zID0ge1xuICAgICAgcmVjaXBpZW50czogW3BhcmFtcy5yZWNpcGllbnRdLFxuICAgICAgcmJmVHhJZHM6IHBhcmFtcy5yYmZUeElkcyxcbiAgICAgIGZlZU11bHRpcGxpZXI6IHBhcmFtcy5mZWVNdWx0aXBsaWVyLFxuICAgICAgY2hhbmdlQWRkcmVzc1R5cGU6IFsncDJ0ck11c2lnMicsICdwMndzaCcsICdwMnNoUDJ3c2gnLCAncDJzaCcsICdwMnRyJ10sXG4gICAgfTtcbiAgICBpZiAocGFyYW1zLnR4Rm9ybWF0KSB7XG4gICAgICBleHBlY3RlZF9wYXJhbXNbJ3R4Rm9ybWF0J10gPSBwYXJhbXMudHhGb3JtYXQ7XG4gICAgfVxuICAgIG5vY2tzLnB1c2goXG4gICAgICBub2NrKHBhcmFtcy5iZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3BhcmFtcy53YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCBleHBlY3RlZF9wYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdHhIZXg6IHBhcmFtcy5wcmVidWlsZC50b0hleCgpLCB0eEluZm86IHt9IH0pXG4gICAgKTtcbiAgICBub2Nrcy5wdXNoKG5vY2socGFyYW1zLmJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3B1YmxpYy9ibG9jay9sYXRlc3RgKS5yZXBseSgyMDAsIHsgaGVpZ2h0OiAxMDAwIH0pKTtcblxuICAgIC8vIG5vY2sgdGhlIGtleWNoYWluIGZldGNoIC0gMyB0aW1lcyAocHJlYnVpbGRBbmRTaWduLCB2ZXJpZnlUcmFuc2FjdGlvbiwgYW5kIHNpZ25UcmFuc2FjdGlvbilcbiAgICBwYXJhbXMua2V5RG9jdW1lbnRzLmZvckVhY2goKGtleURvY3VtZW50KSA9PiB7XG4gICAgICBub2Nrcy5wdXNoKFxuICAgICAgICBub2NrKHBhcmFtcy5iZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS9rZXkvJHtrZXlEb2N1bWVudC5pZH1gKS50aW1lcygzKS5yZXBseSgyMDAsIGtleURvY3VtZW50KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIG5vY2sgdGhlIGFkZHJlc3MgaW5mbyBmZXRjaFxuICAgIGlmIChwYXJhbXMubm9ja091dHB1dEFkZHJlc3Nlcykge1xuICAgICAgbm9ja3MucHVzaChcbiAgICAgICAgbm9jayhwYXJhbXMuYmdVcmwpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7cGFyYW1zLndhbGxldC5pZCgpfS9hZGRyZXNzLyR7cGFyYW1zLmFkZHJlc3NJbmZvLmFkZHJlc3N9YClcbiAgICAgICAgICAucmVwbHkoMjAwLCBwYXJhbXMuYWRkcmVzc0luZm8pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmJmVHhJZHMpIHtcbiAgICAgIG5vY2tzLnB1c2goXG4gICAgICAgIG5vY2socGFyYW1zLmJnVXJsKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3BhcmFtcy53YWxsZXQuaWQoKX0vdHgvJHtwYXJhbXMucmJmVHhJZHNbMF19P2luY2x1ZGVSYmY9dHJ1ZWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogcGFyYW1zLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIocGFyYW1zLnJlY2lwaWVudC5hbW91bnQpLFxuICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiBwYXJhbXMucmVjaXBpZW50LmFtb3VudCxcbiAgICAgICAgICAgICAgICB3YWxsZXQ6IHBhcmFtcy5zZWxmU2VuZCA/IHBhcmFtcy53YWxsZXQuaWQoKSA6ICdzb21lLW90aGVyLXdhbGxldC1pZCcsIC8vIGV4dGVybmFsIG91dHB1dCBpZiBub3QgYSBzZWxmIHNlbmRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gRHVtbXkgY2hhbmdlIG91dHB1dCB0byB0ZXN0IHRyYW5zZmVyIGVudHJpZXMgZmlsdGVyaW5nXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBwYXJhbXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICAgICAgdmFsdWU6IE51bWJlcihwYXJhbXMucmVjaXBpZW50LmFtb3VudCksXG4gICAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHBhcmFtcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgICAgICAgIHdhbGxldDogcGFyYW1zLndhbGxldC5pZCgpLCAvLyBpbnRlcm5hbCBvdXRwdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gbm9jayB0aGUgZGV0ZXJtaW5pc3RpYyBub25jZSByZXNwb25zZVxuICAgIGlmIChpbnB1dFNjcmlwdHMuaW5jbHVkZXMoJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSkge1xuICAgICAgY29uc3QgcHNidCA9IHBhcmFtcy5wcmVidWlsZC5jbG9uZSgpO1xuICAgICAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLnVzZXIpO1xuICAgICAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKTtcbiAgICAgIG5vY2tzLnB1c2goXG4gICAgICAgIG5vY2socGFyYW1zLmJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHtwYXJhbXMud2FsbGV0LmlkKCl9L3R4L3NpZ25wc2J0YCwgKGJvZHkpID0+IGJvZHkucHNidClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHBzYnQ6IHBzYnQudG9IZXgoKSB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ja3M7XG4gIH1cblxuICBkZXNjcmliZShgJHtjb2luLm5hbWV9IHByZWJ1aWxkQW5kU2lnbiBpbnB1dFNjcmlwdHM9JHtpbnB1dFNjcmlwdHMuam9pbignLCcpfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHtcbiAgICAgIGNvaW5TcGVjaWZpYzogeyBhZGRyZXNzVmVyc2lvbjogJ2Jhc2U1OCcgfSxcbiAgICAgIGtleXM6IGtleURvY3VtZW50T2JqZWN0cy5tYXAoKGspID0+IGsuaWQpLFxuICAgICAgaWQ6ICd3YWxsZXRJZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG4gICAgbGV0IHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGxldCByZWNpcGllbnQ6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IHN0cmluZyB9O1xuICAgIGxldCBhZGRyZXNzSW5mbzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdCBmZWUgPSBCaWdJbnQoMTAwMDApO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1ha2Ugb3V0cHV0IGFkZHJlc3MgaW5mb3JtYXRpb25cbiAgICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IEJpZ0ludChpbnB1dFNjcmlwdHMubGVuZ3RoKSAqIEJpZ0ludCgxZTgpIC0gZmVlO1xuICAgICAgY29uc3Qgb3V0cHV0U2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUgPSAncDJzaCc7XG4gICAgICBjb25zdCBvdXRwdXRDaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUob3V0cHV0U2NyaXB0VHlwZSk7XG4gICAgICBjb25zdCBvdXRwdXRBZGRyZXNzID0gdXR4b2xpYi5iaXRnby5nZXRXYWxsZXRBZGRyZXNzKHJvb3RXYWxsZXRLZXlzLCBvdXRwdXRDaGFpbiwgMCwgY29pbi5uZXR3b3JrKTtcblxuICAgICAgcmVjaXBpZW50ID0ge1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXRBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICAgIGFkZHJlc3NJbmZvID0ge1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXRBZGRyZXNzLFxuICAgICAgICBjaGFpbjogb3V0cHV0Q2hhaW4sXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICAgIHdhbGxldDogd2FsbGV0LmlkKCksXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9O1xuXG4gICAgICBwcmVidWlsZCA9IGNyZWF0ZVByZWJ1aWxkUHNidChcbiAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgocykgPT4gKHsgc2NyaXB0VHlwZTogcywgdmFsdWU6IEJpZ0ludCgxZTgpIH0pKSxcbiAgICAgICAgW3sgc2NyaXB0VHlwZTogb3V0cHV0U2NyaXB0VHlwZSwgdmFsdWU6IG91dHB1dEFtb3VudCB9XVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRUeEZvcm1hdCA9IGNvaW4uZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldCk7XG4gICAgICBjb25zdCBub2NrcyA9IGNyZWF0ZU5vY2tzKHtcbiAgICAgICAgYmdVcmwsXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAga2V5RG9jdW1lbnRzOiBrZXlEb2N1bWVudE9iamVjdHMsXG4gICAgICAgIHByZWJ1aWxkLFxuICAgICAgICByZWNpcGllbnQsXG4gICAgICAgIGFkZHJlc3NJbmZvLFxuICAgICAgICBub2NrT3V0cHV0QWRkcmVzc2VzOiBmYWxzZSxcbiAgICAgICAgdHhGb3JtYXQ6IGRlZmF1bHRUeEZvcm1hdCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBjYWxsIHByZWJ1aWxkIGFuZCBzaWduLCBub2NrcyBzaG91bGQgYmUgY29uc3VtZWRcbiAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCB3YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICByZWNpcGllbnRzOiBbcmVjaXBpZW50XSxcbiAgICAgICAgcHJ2OiBrZXljaGFpbnNCYXNlNThbMF0ucHJ2LFxuICAgICAgfSkpIGFzIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb247XG5cbiAgICAgIG5vY2tzLmZvckVhY2goKG5vY2spID0+IGFzc2VydC5vayhub2NrLmlzRG9uZSgpKSk7XG5cbiAgICAgIGFzc2VydFNpZ25hYmxlKHJlcy50eEhleCwgaW5wdXRTY3JpcHRzLCBjb2luLm5ldHdvcmspO1xuICAgIH0pO1xuXG4gICAgW3RydWUsIGZhbHNlXS5mb3JFYWNoKChzZWxmU2VuZCkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBiZSBhYmxlIHRvIGJ1aWxkLCBzaWduLCAmIHZlcmlmeSBhIHJlcGxhY2VtZW50IHRyYW5zYWN0aW9uIHdpdGggc2VsZlNlbmQ6ICR7c2VsZlNlbmR9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByYmZUeElkcyA9IFsndHgtdG8tYmUtcmVwbGFjZWQnXSxcbiAgICAgICAgICBmZWVNdWx0aXBsaWVyID0gMS41O1xuICAgICAgICBjb25zdCBkZWZhdWx0VHhGb3JtYXQgPSBjb2luLmdldERlZmF1bHRUeEZvcm1hdCh3YWxsZXQpO1xuICAgICAgICBjb25zdCBub2NrcyA9IGNyZWF0ZU5vY2tzKHtcbiAgICAgICAgICBiZ1VybCxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAga2V5RG9jdW1lbnRzOiBrZXlEb2N1bWVudE9iamVjdHMsXG4gICAgICAgICAgcHJlYnVpbGQsXG4gICAgICAgICAgcmVjaXBpZW50LFxuICAgICAgICAgIGFkZHJlc3NJbmZvLFxuICAgICAgICAgIHJiZlR4SWRzLFxuICAgICAgICAgIGZlZU11bHRpcGxpZXIsXG4gICAgICAgICAgc2VsZlNlbmQsXG4gICAgICAgICAgbm9ja091dHB1dEFkZHJlc3NlczogZmFsc2UsXG4gICAgICAgICAgdHhGb3JtYXQ6IGRlZmF1bHRUeEZvcm1hdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsbCBwcmVidWlsZCBhbmQgc2lnbiwgbm9ja3Mgc2hvdWxkIGJlIGNvbnN1bWVkXG4gICAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCB3YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtyZWNpcGllbnRdLFxuICAgICAgICAgIHBydjoga2V5Y2hhaW5zQmFzZTU4WzBdLnBydixcbiAgICAgICAgICByYmZUeElkcyxcbiAgICAgICAgICBmZWVNdWx0aXBsaWVyLFxuICAgICAgICB9KSkgYXMgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcblxuICAgICAgICBub2Nrcy5mb3JFYWNoKChub2NrKSA9PiBhc3NlcnQub2sobm9jay5pc0RvbmUoKSkpO1xuXG4gICAgICAgIGFzc2VydFNpZ25hYmxlKHJlcy50eEhleCwgaW5wdXRTY3JpcHRzLCBjb2luLm5ldHdvcmspO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5nZXRNaW5VdHhvQ29pbnMoKS5mb3JFYWNoKChjb2luKSA9PiB7XG4gIHJ1bihjb2luLCBnZXRTY3JpcHRUeXBlcyhjb2luLCAncHNidCcpKTtcbn0pO1xuIl19