@bitgo/sdk-core 37.5.0 → 37.7.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 (104) hide show
  1. package/dist/src/api/types.d.ts +1 -0
  2. package/dist/src/api/types.d.ts.map +1 -1
  3. package/dist/src/api/types.js +1 -1
  4. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +14 -1
  5. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  6. package/dist/src/bitgo/baseCoin/baseCoin.js +16 -1
  7. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +57 -0
  8. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  9. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  10. package/dist/src/bitgo/defi/defiVault.d.ts +80 -0
  11. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -0
  12. package/dist/src/bitgo/defi/defiVault.js +201 -0
  13. package/dist/src/bitgo/defi/iDefiVault.d.ts +59 -0
  14. package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -0
  15. package/dist/src/bitgo/defi/iDefiVault.js +6 -0
  16. package/dist/src/bitgo/defi/index.d.ts +3 -0
  17. package/dist/src/bitgo/defi/index.d.ts.map +1 -0
  18. package/dist/src/bitgo/defi/index.js +22 -0
  19. package/dist/src/bitgo/index.d.ts +1 -0
  20. package/dist/src/bitgo/index.d.ts.map +1 -1
  21. package/dist/src/bitgo/index.js +2 -1
  22. package/dist/src/bitgo/internal/keycard.d.ts +2 -1
  23. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
  24. package/dist/src/bitgo/internal/keycard.js +6 -3
  25. package/dist/src/bitgo/keychain/iKeychains.d.ts +4 -1
  26. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  27. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  28. package/dist/src/bitgo/keychain/keychains.d.ts +2 -1
  29. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  30. package/dist/src/bitgo/keychain/keychains.js +8 -3
  31. package/dist/src/bitgo/tss/common.d.ts +2 -1
  32. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  33. package/dist/src/bitgo/tss/common.js +14 -4
  34. package/dist/src/bitgo/utils/messageTypes.d.ts +3 -1
  35. package/dist/src/bitgo/utils/messageTypes.d.ts.map +1 -1
  36. package/dist/src/bitgo/utils/messageTypes.js +3 -1
  37. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  38. package/dist/src/bitgo/utils/mpcUtils.js +23 -3
  39. package/dist/src/bitgo/utils/tss/addressVerification.d.ts +25 -0
  40. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
  41. package/dist/src/bitgo/utils/tss/addressVerification.js +31 -13
  42. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +25 -3
  43. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  44. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  45. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +5 -2
  46. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  47. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +25 -16
  48. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +8 -1
  49. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  50. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +47 -49
  51. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +2 -2
  52. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  53. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +25 -15
  54. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +18 -1
  55. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  56. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +77 -33
  57. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +5 -0
  58. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  59. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  60. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  61. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  62. package/dist/src/bitgo/utils/tss/index.js +2 -1
  63. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
  64. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  65. package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
  66. package/dist/src/bitgo/wallet/iWallet.d.ts +6 -1
  67. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  68. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  69. package/dist/src/bitgo/wallet/iWallets.d.ts +26 -1
  70. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  71. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  72. package/dist/src/bitgo/wallet/wallet.d.ts +9 -3
  73. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  74. package/dist/src/bitgo/wallet/wallet.js +79 -9
  75. package/dist/src/bitgo/wallet/wallets.d.ts +12 -2
  76. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  77. package/dist/src/bitgo/wallet/wallets.js +179 -20
  78. package/dist/src/coins/ofc.d.ts +4 -0
  79. package/dist/src/coins/ofc.d.ts.map +1 -1
  80. package/dist/src/coins/ofc.js +17 -2
  81. package/dist/test/unit/bitgo/defi/defiVault.d.ts +2 -0
  82. package/dist/test/unit/bitgo/defi/defiVault.d.ts.map +1 -0
  83. package/dist/test/unit/bitgo/defi/defiVault.js +283 -0
  84. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +45 -1
  85. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts +2 -0
  86. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts.map +1 -0
  87. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.js +94 -0
  88. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +53 -1
  89. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +88 -3
  90. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
  91. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  92. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
  93. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
  94. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
  95. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
  96. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts +2 -0
  97. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts.map +1 -0
  98. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +228 -0
  99. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
  100. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
  101. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +320 -0
  102. package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +16 -12
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +3 -3
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=preHashedSignable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preHashedSignable.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bitgo/utils/tss/preHashedSignable.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const preHashedSignable_1 = require("../../../../../src/bitgo/utils/tss/preHashedSignable");
38
+ describe('preHashedSignable', function () {
39
+ it('isAvalancheAtomicTx detects codec prefix 0000', function () {
40
+ assert.strictEqual((0, preHashedSignable_1.isAvalancheAtomicTx)({
41
+ serializedTxHex: '0000000000010000007278db5c',
42
+ signableHex: 'abc',
43
+ }), true);
44
+ assert.strictEqual((0, preHashedSignable_1.isAvalancheAtomicTx)({
45
+ serializedTxHex: 'f86c808504a817c800825208',
46
+ signableHex: 'f86c808504a817c800825208',
47
+ }), false);
48
+ });
49
+ it('isCoinWithPreHashedSignable type guard', function () {
50
+ assert.strictEqual((0, preHashedSignable_1.isCoinWithPreHashedSignable)({ isSignablePreHashed: () => true }), true);
51
+ assert.strictEqual((0, preHashedSignable_1.isCoinWithPreHashedSignable)({}), false);
52
+ assert.strictEqual((0, preHashedSignable_1.isCoinWithPreHashedSignable)(null), false);
53
+ });
54
+ });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlSGFzaGVkU2lnbmFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3ByZUhhc2hlZFNpZ25hYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLDRGQUF3SDtBQUV4SCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7SUFDNUIsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1FBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQ2hCLElBQUEsdUNBQW1CLEVBQUM7WUFDbEIsZUFBZSxFQUFFLDRCQUE0QjtZQUM3QyxXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLEVBQ0YsSUFBSSxDQUNMLENBQUM7UUFDRixNQUFNLENBQUMsV0FBVyxDQUNoQixJQUFBLHVDQUFtQixFQUFDO1lBQ2xCLGVBQWUsRUFBRSwwQkFBMEI7WUFDM0MsV0FBVyxFQUFFLDBCQUEwQjtTQUN4QyxDQUFDLEVBQ0YsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtRQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsK0NBQTJCLEVBQUMsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwrQ0FBMkIsRUFBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsK0NBQTJCLEVBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgaXNBdmFsYW5jaGVBdG9taWNUeCwgaXNDb2luV2l0aFByZUhhc2hlZFNpZ25hYmxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9wcmVIYXNoZWRTaWduYWJsZSc7XG5cbmRlc2NyaWJlKCdwcmVIYXNoZWRTaWduYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ2lzQXZhbGFuY2hlQXRvbWljVHggZGV0ZWN0cyBjb2RlYyBwcmVmaXggMDAwMCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBpc0F2YWxhbmNoZUF0b21pY1R4KHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnMDAwMDAwMDAwMDAxMDAwMDAwNzI3OGRiNWMnLFxuICAgICAgICBzaWduYWJsZUhleDogJ2FiYycsXG4gICAgICB9KSxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGlzQXZhbGFuY2hlQXRvbWljVHgoe1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdmODZjODA4NTA0YTgxN2M4MDA4MjUyMDgnLFxuICAgICAgICBzaWduYWJsZUhleDogJ2Y4NmM4MDg1MDRhODE3YzgwMDgyNTIwOCcsXG4gICAgICB9KSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lzQ29pbldpdGhQcmVIYXNoZWRTaWduYWJsZSB0eXBlIGd1YXJkJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc0NvaW5XaXRoUHJlSGFzaGVkU2lnbmFibGUoeyBpc1NpZ25hYmxlUHJlSGFzaGVkOiAoKSA9PiB0cnVlIH0pLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNDb2luV2l0aFByZUhhc2hlZFNpZ25hYmxlKHt9KSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc0NvaW5XaXRoUHJlSGFzaGVkU2lnbmFibGUobnVsbCksIGZhbHNlKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=ofcWalletAddressCreation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ofcWalletAddressCreation.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/ofcWalletAddressCreation.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * @prettier
8
+ */
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ require("should");
11
+ const wallet_1 = require("../../../../src/bitgo/wallet/wallet");
12
+ const coins_1 = require("../../../../src/coins");
13
+ const OFC_ZEC_CONFIG = {
14
+ coin: 'ofczec',
15
+ decimalPlaces: 8,
16
+ name: 'OFCZEC',
17
+ type: 'ofczec',
18
+ backingCoin: 'zec',
19
+ isFiat: false,
20
+ };
21
+ describe('Wallet - OFC createAddress', function () {
22
+ let mockBitGo;
23
+ let ofcToken;
24
+ let keychainsGetStub;
25
+ function makePostChain(resolved) {
26
+ const chain = {};
27
+ chain.send = sinon_1.default.stub().returns(chain);
28
+ chain.result = sinon_1.default.stub().resolves(resolved);
29
+ return chain;
30
+ }
31
+ beforeEach(function () {
32
+ keychainsGetStub = sinon_1.default.stub().resolves({ id: 'user-key-id', pub: 'xpub-value' });
33
+ mockBitGo = {
34
+ url: sinon_1.default.stub().returns('https://test.bitgo.com/'),
35
+ post: sinon_1.default.stub(),
36
+ setRequestTracer: sinon_1.default.stub(),
37
+ };
38
+ ofcToken = new coins_1.OfcToken(mockBitGo, OFC_ZEC_CONFIG);
39
+ mockBitGo.coin = sinon_1.default.stub().returns(ofcToken);
40
+ sinon_1.default.stub(coins_1.OfcToken.prototype, 'keychains').returns({ get: keychainsGetStub });
41
+ });
42
+ afterEach(function () {
43
+ sinon_1.default.restore();
44
+ });
45
+ const mockAddressResponse = {
46
+ id: 'new-address-id',
47
+ address: 'bg-aabbccddeeff00112233445566778899',
48
+ chain: 0,
49
+ index: 1,
50
+ };
51
+ describe('single-key OFC wallet (userKeySigningRequired: true)', function () {
52
+ it('should create a receive address without fetching any keychains', async function () {
53
+ const walletData = {
54
+ id: 'wallet-id',
55
+ coin: 'ofc',
56
+ keys: ['user-key-id'],
57
+ type: 'trading',
58
+ multisigType: 'onchain',
59
+ enterprise: 'ent-id',
60
+ userKeySigningRequired: true,
61
+ };
62
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
63
+ mockBitGo.post.returns(makePostChain(mockAddressResponse));
64
+ const result = await wallet.createAddress({ onToken: 'ofczec' });
65
+ result.should.have.property('id', 'new-address-id');
66
+ result.should.have.property('address', 'bg-aabbccddeeff00112233445566778899');
67
+ keychainsGetStub.called.should.be.false();
68
+ });
69
+ });
70
+ describe('two-key OFC wallet (userKeySigningRequired: false)', function () {
71
+ it('should create a receive address without fetching keychains', async function () {
72
+ const walletData = {
73
+ id: 'wallet-id',
74
+ coin: 'ofc',
75
+ keys: ['user-key-id', 'bitgo-key-id'],
76
+ type: 'trading',
77
+ multisigType: 'onchain',
78
+ enterprise: 'ent-id',
79
+ userKeySigningRequired: false,
80
+ };
81
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
82
+ mockBitGo.post.returns(makePostChain(mockAddressResponse));
83
+ const result = await wallet.createAddress({ onToken: 'ofczec' });
84
+ result.should.have.property('id', 'new-address-id');
85
+ keychainsGetStub.called.should.be.false();
86
+ });
87
+ it('should succeed even if keychains().get() would fail for a server-managed key', async function () {
88
+ keychainsGetStub.rejects(new Error('key not found'));
89
+ const walletData = {
90
+ id: 'wallet-id',
91
+ coin: 'ofc',
92
+ keys: ['user-key-id', 'bitgo-key-id'],
93
+ type: 'trading',
94
+ multisigType: 'onchain',
95
+ enterprise: 'ent-id',
96
+ userKeySigningRequired: false,
97
+ };
98
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
99
+ mockBitGo.post.returns(makePostChain(mockAddressResponse));
100
+ const result = await wallet.createAddress({ onToken: 'ofczec' });
101
+ result.should.have.property('id', 'new-address-id');
102
+ });
103
+ });
104
+ describe('non-OFC wallet (eth)', function () {
105
+ it('should still fetch keychains for address verification', async function () {
106
+ const mockEthCoin = {
107
+ getFamily: sinon_1.default.stub().returns('eth'),
108
+ isEVM: sinon_1.default.stub().returns(true),
109
+ supportsTss: sinon_1.default.stub().returns(false),
110
+ url: sinon_1.default.stub().returns('/api/v2/eth/wallet/wallet-id/address'),
111
+ isWalletAddress: sinon_1.default.stub().resolves(true),
112
+ keychains: sinon_1.default.stub().returns({ get: keychainsGetStub }),
113
+ };
114
+ const walletData = {
115
+ id: 'wallet-id',
116
+ coin: 'eth',
117
+ keys: ['user-key-id', 'backup-key-id', 'bitgo-key-id'],
118
+ coinSpecific: { pendingChainInitialization: false },
119
+ };
120
+ const wallet = new wallet_1.Wallet(mockBitGo, mockEthCoin, walletData);
121
+ mockBitGo.post.returns(makePostChain({ id: 'eth-addr-id', address: '0xabc', coinSpecific: {} }));
122
+ await wallet.createAddress({});
123
+ keychainsGetStub.callCount.should.equal(3);
124
+ });
125
+ });
126
+ describe('missing onToken parameter', function () {
127
+ it('should throw for OFC wallets when onToken is omitted', async function () {
128
+ const walletData = {
129
+ id: 'wallet-id',
130
+ coin: 'ofc',
131
+ keys: ['user-key-id'],
132
+ type: 'trading',
133
+ multisigType: 'onchain',
134
+ enterprise: 'ent-id',
135
+ };
136
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
137
+ await wallet.createAddress({}).should.be.rejectedWith('onToken is a mandatory parameter for OFC wallets');
138
+ });
139
+ });
140
+ });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjV2FsbGV0QWRkcmVzc0NyZWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9vZmNXYWxsZXRBZGRyZXNzQ3JlYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7R0FFRztBQUNILGtEQUEwQjtBQUMxQixrQkFBZ0I7QUFDaEIsZ0VBQTZEO0FBQzdELGlEQUFpRDtBQUVqRCxNQUFNLGNBQWMsR0FBRztJQUNyQixJQUFJLEVBQUUsUUFBUTtJQUNkLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLFFBQVE7SUFDZCxXQUFXLEVBQUUsS0FBSztJQUNsQixNQUFNLEVBQUUsS0FBSztDQUNkLENBQUM7QUFFRixRQUFRLENBQUMsNEJBQTRCLEVBQUU7SUFDckMsSUFBSSxTQUFjLENBQUM7SUFDbkIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksZ0JBQWlDLENBQUM7SUFFdEMsU0FBUyxhQUFhLENBQUMsUUFBaUI7UUFDdEMsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxJQUFJLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxLQUFLLENBQUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVSxDQUFDO1FBQ1QsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkYsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FB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c0RBQXNELEVBQUUsS0FBSztZQUM5RCxNQUFNLFVBQVUsR0FBRztnQkFDakIsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsU0FBUztnQkFDZixZQUFZLEVBQUUsU0FBUztnQkFDdkIsVUFBVSxFQUFFLFFBQVE7YUFDckIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFM0QsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvd2FsbGV0JztcbmltcG9ydCB7IE9mY1Rva2VuIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2NvaW5zJztcblxuY29uc3QgT0ZDX1pFQ19DT05GSUcgPSB7XG4gIGNvaW46ICdvZmN6ZWMnLFxuICBkZWNpbWFsUGxhY2VzOiA4LFxuICBuYW1lOiAnT0ZDWkVDJyxcbiAgdHlwZTogJ29mY3plYycsXG4gIGJhY2tpbmdDb2luOiAnemVjJyxcbiAgaXNGaWF0OiBmYWxzZSxcbn07XG5cbmRlc2NyaWJlKCdXYWxsZXQgLSBPRkMgY3JlYXRlQWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgb2ZjVG9rZW46IE9mY1Rva2VuO1xuICBsZXQga2V5Y2hhaW5zR2V0U3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGZ1bmN0aW9uIG1ha2VQb3N0Q2hhaW4ocmVzb2x2ZWQ6IHVua25vd24pOiBhbnkge1xuICAgIGNvbnN0IGNoYWluOiBhbnkgPSB7fTtcbiAgICBjaGFpbi5zZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoY2hhaW4pO1xuICAgIGNoYWluLnJlc3VsdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhyZXNvbHZlZCk7XG4gICAgcmV0dXJuIGNoYWluO1xuICB9XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAga2V5Y2hhaW5zR2V0U3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAndXNlci1rZXktaWQnLCBwdWI6ICd4cHViLXZhbHVlJyB9KTtcbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdodHRwczovL3Rlc3QuYml0Z28uY29tLycpLFxuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgb2ZjVG9rZW4gPSBuZXcgT2ZjVG9rZW4obW9ja0JpdEdvLCBPRkNfWkVDX0NPTkZJRyk7XG4gICAgbW9ja0JpdEdvLmNvaW4gPSBzaW5vbi5zdHViKCkucmV0dXJucyhvZmNUb2tlbik7XG4gICAgc2lub24uc3R1YihPZmNUb2tlbi5wcm90b3R5cGUsICdrZXljaGFpbnMnKS5yZXR1cm5zKHsgZ2V0OiBrZXljaGFpbnNHZXRTdHViIH0gYXMgYW55KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgaWQ6ICduZXctYWRkcmVzcy1pZCcsXG4gICAgYWRkcmVzczogJ2JnLWFhYmJjY2RkZWVmZjAwMTEyMjMzNDQ1NTY2Nzc4ODk5JyxcbiAgICBjaGFpbjogMCxcbiAgICBpbmRleDogMSxcbiAgfTtcblxuICBkZXNjcmliZSgnc2luZ2xlLWtleSBPRkMgd2FsbGV0ICh1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHJlY2VpdmUgYWRkcmVzcyB3aXRob3V0IGZldGNoaW5nIGFueSBrZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJ3dhbGxldC1pZCcsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJ10sXG4gICAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBvZmNUb2tlbiwgd2FsbGV0RGF0YSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja0FkZHJlc3NSZXNwb25zZSkpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46ICdvZmN6ZWMnIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lkJywgJ25ldy1hZGRyZXNzLWlkJyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2FkZHJlc3MnLCAnYmctYWFiYmNjZGRlZWZmMDAxMTIyMzM0NDU1NjY3Nzg4OTknKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndHdvLWtleSBPRkMgd2FsbGV0ICh1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSByZWNlaXZlIGFkZHJlc3Mgd2l0aG91dCBmZXRjaGluZyBrZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJ3dhbGxldC1pZCcsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICBlbnRlcnByaXNlOiAnZW50LWlkJyxcbiAgICAgICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG9mY1Rva2VuLCB3YWxsZXREYXRhKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrQWRkcmVzc1Jlc3BvbnNlKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgb25Ub2tlbjogJ29mY3plYycgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCAnbmV3LWFkZHJlc3MtaWQnKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGV2ZW4gaWYga2V5Y2hhaW5zKCkuZ2V0KCkgd291bGQgZmFpbCBmb3IgYSBzZXJ2ZXItbWFuYWdlZCBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlamVjdHMobmV3IEVycm9yKCdrZXkgbm90IGZvdW5kJykpO1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICd3YWxsZXQtaWQnLFxuICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiaXRnby1rZXktaWQnXSxcbiAgICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudC1pZCcsXG4gICAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBvZmNUb2tlbiwgd2FsbGV0RGF0YSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja0FkZHJlc3NSZXNwb25zZSkpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46ICdvZmN6ZWMnIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdpZCcsICduZXctYWRkcmVzcy1pZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9uLU9GQyB3YWxsZXQgKGV0aCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdGlsbCBmZXRjaCBrZXljaGFpbnMgZm9yIGFkZHJlc3MgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja0V0aENvaW46IGFueSA9IHtcbiAgICAgICAgZ2V0RmFtaWx5OiBzaW5vbi5zdHViKCkucmV0dXJucygnZXRoJyksXG4gICAgICAgIGlzRVZNOiBzaW5vbi5zdHViKCkucmV0dXJucyh0cnVlKSxcbiAgICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL2FwaS92Mi9ldGgvd2FsbGV0L3dhbGxldC1pZC9hZGRyZXNzJyksXG4gICAgICAgIGlzV2FsbGV0QWRkcmVzczogc2lub24uc3R1YigpLnJlc29sdmVzKHRydWUpLFxuICAgICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgZ2V0OiBrZXljaGFpbnNHZXRTdHViIH0pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICAgICAgY29pbjogJ2V0aCcsXG4gICAgICAgIGtleXM6IFsndXNlci1rZXktaWQnLCAnYmFja3VwLWtleS1pZCcsICdiaXRnby1rZXktaWQnXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7IHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrRXRoQ29pbiwgd2FsbGV0RGF0YSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4oeyBpZDogJ2V0aC1hZGRyLWlkJywgYWRkcmVzczogJzB4YWJjJywgY29pblNwZWNpZmljOiB7fSB9KSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHt9KTtcblxuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWlzc2luZyBvblRva2VuIHBhcmFtZXRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBPRkMgd2FsbGV0cyB3aGVuIG9uVG9rZW4gaXMgb21pdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgIGtleXM6IFsndXNlci1rZXktaWQnXSxcbiAgICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudC1pZCcsXG4gICAgICB9O1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG9mY1Rva2VuLCB3YWxsZXREYXRhKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3Moe30pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ29uVG9rZW4gaXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIGZvciBPRkMgd2FsbGV0cycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=walletsEncryptionVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletsEncryptionVersion.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/walletsEncryptionVersion.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,228 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const sinon = __importStar(require("sinon"));
38
+ require("should");
39
+ const wallets_1 = require("../../../../src/bitgo/wallet/wallets");
40
+ const wallet_1 = require("../../../../src/bitgo/wallet/wallet");
41
+ describe('Wallets - encryptionVersion threading', function () {
42
+ let wallets;
43
+ let mockBitGo;
44
+ let mockBaseCoin;
45
+ let mockKeychains;
46
+ const userPrv = 'xprvSomeUserPrivateKey';
47
+ const userPub = 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8';
48
+ beforeEach(function () {
49
+ mockKeychains = {
50
+ create: sinon.stub().returns({ pub: userPub, prv: userPrv }),
51
+ add: sinon.stub().resolves({ id: 'user-key-id', pub: userPub, encryptedPrv: 'encrypted-prv' }),
52
+ };
53
+ mockBitGo = {
54
+ encryptAsync: sinon
55
+ .stub()
56
+ .callsFake(async ({ password, input }) => `enc:${password}:${input}`),
57
+ decryptAsync: sinon.stub().resolves('decryptedPrv'),
58
+ get: sinon.stub().returns({ result: sinon.stub(), query: sinon.stub().returnsThis() }),
59
+ post: sinon.stub().returns({ send: sinon.stub().returns({ result: sinon.stub().resolves({}) }) }),
60
+ put: sinon.stub().returns({
61
+ send: sinon
62
+ .stub()
63
+ .returns({ result: sinon.stub().resolves({ acceptedWalletShares: [], walletShareUpdateErrors: [] }) }),
64
+ }),
65
+ getECDHKeychain: sinon.stub().resolves({ encryptedXprv: 'encXprv' }),
66
+ setRequestTracer: sinon.stub(),
67
+ url: sinon.stub().returns('/test/url'),
68
+ };
69
+ mockBaseCoin = {
70
+ keychains: sinon.stub().returns(mockKeychains),
71
+ url: sinon.stub().callsFake((path) => path),
72
+ getFamily: sinon.stub().returns('btc'),
73
+ getChain: sinon.stub().returns('btc'),
74
+ supportsTss: sinon.stub().returns(false),
75
+ getMPCAlgorithm: sinon.stub().returns('ecdsa'),
76
+ };
77
+ wallets = new wallets_1.Wallets(mockBitGo, mockBaseCoin);
78
+ });
79
+ afterEach(function () {
80
+ sinon.restore();
81
+ });
82
+ describe('acceptShare', function () {
83
+ it('passes encryptionVersion: 2 to encryptAsync on the multiUserKeyRotationRequired path', async function () {
84
+ mockBitGo.get.returns({
85
+ result: sinon.stub().resolves({
86
+ userMultiKeyRotationRequired: true,
87
+ keychain: null,
88
+ permissions: ['spend'],
89
+ wallet: 'wallet-id',
90
+ }),
91
+ });
92
+ await wallets.acceptShare({
93
+ walletShareId: 'share-id',
94
+ userPassword: 'my-password',
95
+ encryptionVersion: 2,
96
+ });
97
+ assert.ok(mockBitGo.encryptAsync.called, 'encryptAsync should have been called');
98
+ const call = mockBitGo.encryptAsync.firstCall;
99
+ assert.strictEqual(call.args[0].encryptionVersion, 2);
100
+ });
101
+ it('passes encryptionVersion: undefined when not set', async function () {
102
+ mockBitGo.get.returns({
103
+ result: sinon.stub().resolves({
104
+ userMultiKeyRotationRequired: true,
105
+ keychain: null,
106
+ permissions: ['spend'],
107
+ wallet: 'wallet-id',
108
+ }),
109
+ });
110
+ await wallets.acceptShare({
111
+ walletShareId: 'share-id',
112
+ userPassword: 'my-password',
113
+ });
114
+ assert.ok(mockBitGo.encryptAsync.called);
115
+ const call = mockBitGo.encryptAsync.firstCall;
116
+ assert.strictEqual(call.args[0].encryptionVersion, undefined);
117
+ });
118
+ });
119
+ describe('bulkAcceptShare', function () {
120
+ const walletSharesList = {
121
+ incoming: [
122
+ {
123
+ id: 'share-id',
124
+ userMultiKeyRotationRequired: true,
125
+ keychain: null,
126
+ permissions: ['spend'],
127
+ },
128
+ ],
129
+ outgoing: [],
130
+ };
131
+ beforeEach(function () {
132
+ mockBitGo.get.returns({ result: sinon.stub().resolves(walletSharesList) });
133
+ });
134
+ it('passes encryptionVersion: 2 to encryptAsync on the multiUserKeyRotationRequired path', async function () {
135
+ await wallets.bulkAcceptShare({
136
+ walletShareIds: ['share-id'],
137
+ userLoginPassword: 'login-password',
138
+ encryptionVersion: 2,
139
+ });
140
+ assert.ok(mockBitGo.encryptAsync.called);
141
+ const call = mockBitGo.encryptAsync.firstCall;
142
+ assert.strictEqual(call.args[0].encryptionVersion, 2);
143
+ });
144
+ it('passes encryptionVersion: undefined when not set', async function () {
145
+ await wallets.bulkAcceptShare({
146
+ walletShareIds: ['share-id'],
147
+ userLoginPassword: 'login-password',
148
+ });
149
+ assert.ok(mockBitGo.encryptAsync.called);
150
+ const call = mockBitGo.encryptAsync.firstCall;
151
+ assert.strictEqual(call.args[0].encryptionVersion, undefined);
152
+ });
153
+ });
154
+ describe('Wallet.shareWallet / createBulkWalletShare', function () {
155
+ let wallet;
156
+ beforeEach(function () {
157
+ const mockWalletData = {
158
+ id: 'wallet-id',
159
+ keys: ['key-1', 'key-2', 'key-3'],
160
+ coin: 'btc',
161
+ label: 'Test Wallet',
162
+ users: [],
163
+ multisigType: 'onchain',
164
+ type: 'hot',
165
+ };
166
+ mockBaseCoin.supportsTss = sinon.stub().returns(false);
167
+ mockBaseCoin.getMPCAlgorithm = sinon.stub().returns('ecdsa');
168
+ wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
169
+ });
170
+ it('shareWallet passes encryptionVersion to prepareSharedKeychain', async function () {
171
+ const prepareStub = sinon.stub(wallet, 'prepareSharedKeychain').resolves({});
172
+ mockBitGo.getSharingKey = sinon.stub().resolves({ userId: 'user-id', pubkey: 'recvPub', path: 'm/0' });
173
+ mockBitGo.post.returns({ send: sinon.stub().returns({ result: sinon.stub().resolves({}) }) });
174
+ await wallet.shareWallet({
175
+ email: 'test@test.com',
176
+ permissions: 'spend',
177
+ walletPassphrase: 'passphrase',
178
+ encryptionVersion: 2,
179
+ });
180
+ assert.ok(prepareStub.calledOnce, 'prepareSharedKeychain should be called');
181
+ assert.strictEqual(prepareStub.firstCall.args[3], 2, 'encryptionVersion should be forwarded');
182
+ });
183
+ it('shareWallet passes encryptionVersion: undefined when not set', async function () {
184
+ const prepareStub = sinon.stub(wallet, 'prepareSharedKeychain').resolves({});
185
+ mockBitGo.getSharingKey = sinon.stub().resolves({ userId: 'user-id', pubkey: 'recvPub', path: 'm/0' });
186
+ mockBitGo.post.returns({ send: sinon.stub().returns({ result: sinon.stub().resolves({}) }) });
187
+ await wallet.shareWallet({
188
+ email: 'test@test.com',
189
+ permissions: 'spend',
190
+ walletPassphrase: 'passphrase',
191
+ });
192
+ assert.ok(prepareStub.calledOnce);
193
+ assert.strictEqual(prepareStub.firstCall.args[3], undefined);
194
+ });
195
+ it('createBulkWalletShare passes encryptionVersion to encryptPrvForUserAsync', async function () {
196
+ const encryptPrvStub = sinon
197
+ .stub(wallet, 'encryptPrvForUserAsync')
198
+ .resolves({ encryptedPrv: 'enc', pub: 'pub', fromPubKey: 'fpk', toPubKey: 'tpk', path: 'm/0' });
199
+ sinon
200
+ .stub(wallet, 'getDecryptedKeychainForSharing')
201
+ .resolves({ prv: 'prv', pub: 'pub', encryptedPrv: 'encPrv' });
202
+ sinon.stub(wallet, 'createBulkKeyShares').resolves({ shares: [] });
203
+ await wallet.createBulkWalletShare({
204
+ walletPassphrase: 'passphrase',
205
+ keyShareOptions: [{ userId: 'user-1', pubKey: 'pubKey', path: 'm/0', permissions: ['spend'] }],
206
+ encryptionVersion: 2,
207
+ });
208
+ assert.ok(encryptPrvStub.calledOnce);
209
+ assert.strictEqual(encryptPrvStub.firstCall.args[4], 2, 'encryptionVersion should be forwarded');
210
+ });
211
+ it('createBulkWalletShare passes encryptionVersion: undefined when not set', async function () {
212
+ const encryptPrvStub = sinon
213
+ .stub(wallet, 'encryptPrvForUserAsync')
214
+ .resolves({ encryptedPrv: 'enc', pub: 'pub', fromPubKey: 'fpk', toPubKey: 'tpk', path: 'm/0' });
215
+ sinon
216
+ .stub(wallet, 'getDecryptedKeychainForSharing')
217
+ .resolves({ prv: 'prv', pub: 'pub', encryptedPrv: 'encPrv' });
218
+ sinon.stub(wallet, 'createBulkKeyShares').resolves({ shares: [] });
219
+ await wallet.createBulkWalletShare({
220
+ walletPassphrase: 'passphrase',
221
+ keyShareOptions: [{ userId: 'user-1', pubKey: 'pubKey', path: 'm/0', permissions: ['spend'] }],
222
+ });
223
+ assert.ok(encryptPrvStub.calledOnce);
224
+ assert.strictEqual(encryptPrvStub.firstCall.args[4], undefined);
225
+ });
226
+ });
227
+ });
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c0VuY3J5cHRpb25WZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC93YWxsZXRzRW5jcnlwdGlvblZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLGtCQUFnQjtBQUNoQixrRUFBK0Q7QUFDL0QsZ0VBQTZEO0FBRTdELFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtJQUNoRCxJQUFJLE9BQWdCLENBQUM7SUFDckIsSUFBSSxTQUFjLENBQUM7SUFDbkIsSUFBSSxZQUFpQixDQUFDO0lBQ3RCLElBQUksYUFBa0IsQ0FBQztJQUV2QixNQUFNLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FDWCxpSEFBaUgsQ0FBQztJQUVwSCxVQUFVLENBQUM7UUFDVCxhQUFhLEdBQUc7WUFDZCxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVELEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsQ0FBQztTQUMvRixDQUFDO1FBRUYsU0FBUyxHQUFHO1lBQ1YsWUFBWSxFQUFFLEtBQUs7aUJBQ2hCLElBQUksRUFBRTtpQkFDTixTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUMsRUFBRSxFQUFFLENBQUMsT0FBTyxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7WUFDNUcsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FB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QUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBXYWxsZXRzIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC93YWxsZXRzJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvd2FsbGV0JztcblxuZGVzY3JpYmUoJ1dhbGxldHMgLSBlbmNyeXB0aW9uVmVyc2lvbiB0aHJlYWRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB3YWxsZXRzOiBXYWxsZXRzO1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IG1vY2tLZXljaGFpbnM6IGFueTtcblxuICBjb25zdCB1c2VyUHJ2ID0gJ3hwcnZTb21lVXNlclByaXZhdGVLZXknO1xuICBjb25zdCB1c2VyUHViID1cbiAgICAneHB1YjY2MU15TXdBcVJiY0Z0WGdTNXNZSkFCcXFHOVlMbUM0UTFSZGFwOWdTRThOcXR3eWJHaGVQWTJnWjI5RVNGanFKb0N1MVJ1cGplOFl0R3FzZWZEMjY1VE1nN3VzVURGZHA2VzFFR01jZXQ4JztcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrS2V5Y2hhaW5zID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IHB1YjogdXNlclB1YiwgcHJ2OiB1c2VyUHJ2IH0pLFxuICAgICAgYWRkOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogJ3VzZXIta2V5LWlkJywgcHViOiB1c2VyUHViLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtcHJ2JyB9KSxcbiAgICB9O1xuXG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgZW5jcnlwdEFzeW5jOiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKHsgcGFzc3dvcmQsIGlucHV0IH06IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBgZW5jOiR7cGFzc3dvcmR9OiR7aW5wdXR9YCksXG4gICAgICBkZWNyeXB0QXN5bmM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZGVjcnlwdGVkUHJ2JyksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBzaW5vbi5zdHViKCksIHF1ZXJ5OiBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKSB9KSxcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7fSkgfSkgfSksXG4gICAgICBwdXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub25cbiAgICAgICAgICAuc3R1YigpXG4gICAgICAgICAgLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGFjY2VwdGVkV2FsbGV0U2hhcmVzOiBbXSwgd2FsbGV0U2hhcmVVcGRhdGVFcnJvcnM6IFtdIH0pIH0pLFxuICAgICAgfSksXG4gICAgICBnZXRFQ0RIS2V5Y2hhaW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGVuY3J5cHRlZFhwcnY6ICdlbmNYcHJ2JyB9KSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLnJldHVybnMoJy90ZXN0L3VybCcpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tLZXljaGFpbnMpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKChwYXRoOiBzdHJpbmcpID0+IHBhdGgpLFxuICAgICAgZ2V0RmFtaWx5OiBzaW5vbi5zdHViKCkucmV0dXJucygnYnRjJyksXG4gICAgICBnZXRDaGFpbjogc2lub24uc3R1YigpLnJldHVybnMoJ2J0YycpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VjZHNhJyksXG4gICAgfTtcblxuICAgIHdhbGxldHMgPSBuZXcgV2FsbGV0cyhtb2NrQml0R28sIG1vY2tCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWNjZXB0U2hhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Bhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogMiB0byBlbmNyeXB0QXN5bmMgb24gdGhlIG11bHRpVXNlcktleVJvdGF0aW9uUmVxdWlyZWQgcGF0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCaXRHby5nZXQucmV0dXJucyh7XG4gICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICB1c2VyTXVsdGlLZXlSb3RhdGlvblJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGtleWNoYWluOiBudWxsLFxuICAgICAgICAgIHBlcm1pc3Npb25zOiBbJ3NwZW5kJ10sXG4gICAgICAgICAgd2FsbGV0OiAnd2FsbGV0LWlkJyxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0cy5hY2NlcHRTaGFyZSh7XG4gICAgICAgIHdhbGxldFNoYXJlSWQ6ICdzaGFyZS1pZCcsXG4gICAgICAgIHVzZXJQYXNzd29yZDogJ215LXBhc3N3b3JkJyxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKG1vY2tCaXRHby5lbmNyeXB0QXN5bmMuY2FsbGVkLCAnZW5jcnlwdEFzeW5jIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkJyk7XG4gICAgICBjb25zdCBjYWxsID0gbW9ja0JpdEdvLmVuY3J5cHRBc3luYy5maXJzdENhbGw7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCAyKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IHVuZGVmaW5lZCB3aGVuIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrQml0R28uZ2V0LnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgdXNlck11bHRpS2V5Um90YXRpb25SZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBrZXljaGFpbjogbnVsbCxcbiAgICAgICAgICBwZXJtaXNzaW9uczogWydzcGVuZCddLFxuICAgICAgICAgIHdhbGxldDogJ3dhbGxldC1pZCcsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldHMuYWNjZXB0U2hhcmUoe1xuICAgICAgICB3YWxsZXRTaGFyZUlkOiAnc2hhcmUtaWQnLFxuICAgICAgICB1c2VyUGFzc3dvcmQ6ICdteS1wYXNzd29yZCcsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKG1vY2tCaXRHby5lbmNyeXB0QXN5bmMuY2FsbGVkKTtcbiAgICAgIGNvbnN0IGNhbGwgPSBtb2NrQml0R28uZW5jcnlwdEFzeW5jLmZpcnN0Q2FsbDtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjYWxsLmFyZ3NbMF0uZW5jcnlwdGlvblZlcnNpb24sIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWxrQWNjZXB0U2hhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0U2hhcmVzTGlzdCA9IHtcbiAgICAgIGluY29taW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ3NoYXJlLWlkJyxcbiAgICAgICAgICB1c2VyTXVsdGlLZXlSb3RhdGlvblJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGtleWNoYWluOiBudWxsLFxuICAgICAgICAgIHBlcm1pc3Npb25zOiBbJ3NwZW5kJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb3V0Z29pbmc6IFtdLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCaXRHby5nZXQucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHdhbGxldFNoYXJlc0xpc3QpIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogMiB0byBlbmNyeXB0QXN5bmMgb24gdGhlIG11bHRpVXNlcktleVJvdGF0aW9uUmVxdWlyZWQgcGF0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldHMuYnVsa0FjY2VwdFNoYXJlKHtcbiAgICAgICAgd2FsbGV0U2hhcmVJZHM6IFsnc2hhcmUtaWQnXSxcbiAgICAgICAgdXNlckxvZ2luUGFzc3dvcmQ6ICdsb2dpbi1wYXNzd29yZCcsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiAyLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhtb2NrQml0R28uZW5jcnlwdEFzeW5jLmNhbGxlZCk7XG4gICAgICBjb25zdCBjYWxsID0gbW9ja0JpdEdvLmVuY3J5cHRBc3luYy5maXJzdENhbGw7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCAyKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IHVuZGVmaW5lZCB3aGVuIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRzLmJ1bGtBY2NlcHRTaGFyZSh7XG4gICAgICAgIHdhbGxldFNoYXJlSWRzOiBbJ3NoYXJlLWlkJ10sXG4gICAgICAgIHVzZXJMb2dpblBhc3N3b3JkOiAnbG9naW4tcGFzc3dvcmQnLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhtb2NrQml0R28uZW5jcnlwdEFzeW5jLmNhbGxlZCk7XG4gICAgICBjb25zdCBjYWxsID0gbW9ja0JpdEdvLmVuY3J5cHRBc3luYy5maXJzdENhbGw7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0LnNoYXJlV2FsbGV0IC8gY3JlYXRlQnVsa1dhbGxldFNoYXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB3YWxsZXQ6IFdhbGxldDtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICAgICAga2V5czogWydrZXktMScsICdrZXktMicsICdrZXktMyddLFxuICAgICAgICBjb2luOiAnYnRjJyxcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHVzZXJzOiBbXSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfTtcbiAgICAgIG1vY2tCYXNlQ29pbi5zdXBwb3J0c1RzcyA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRNUENBbGdvcml0aG0gPSBzaW5vbi5zdHViKCkucmV0dXJucygnZWNkc2EnKTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4sIG1vY2tXYWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaGFyZVdhbGxldCBwYXNzZXMgZW5jcnlwdGlvblZlcnNpb24gdG8gcHJlcGFyZVNoYXJlZEtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHJlcGFyZVN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ3ByZXBhcmVTaGFyZWRLZXljaGFpbicpLnJlc29sdmVzKHt9KTtcbiAgICAgIG1vY2tCaXRHby5nZXRTaGFyaW5nS2V5ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgdXNlcklkOiAndXNlci1pZCcsIHB1YmtleTogJ3JlY3ZQdWInLCBwYXRoOiAnbS8wJyB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHt9KSB9KSB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHtcbiAgICAgICAgZW1haWw6ICd0ZXN0QHRlc3QuY29tJyxcbiAgICAgICAgcGVybWlzc2lvbnM6ICdzcGVuZCcsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKHByZXBhcmVTdHViLmNhbGxlZE9uY2UsICdwcmVwYXJlU2hhcmVkS2V5Y2hhaW4gc2hvdWxkIGJlIGNhbGxlZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHByZXBhcmVTdHViLmZpcnN0Q2FsbC5hcmdzWzNdLCAyLCAnZW5jcnlwdGlvblZlcnNpb24gc2hvdWxkIGJlIGZvcndhcmRlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NoYXJlV2FsbGV0IHBhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogdW5kZWZpbmVkIHdoZW4gbm90IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHByZXBhcmVTdHViID0gc2lub24uc3R1Yih3YWxsZXQsICdwcmVwYXJlU2hhcmVkS2V5Y2hhaW4nKS5yZXNvbHZlcyh7fSk7XG4gICAgICBtb2NrQml0R28uZ2V0U2hhcmluZ0tleSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHVzZXJJZDogJ3VzZXItaWQnLCBwdWJrZXk6ICdyZWN2UHViJywgcGF0aDogJ20vMCcgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7fSkgfSkgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5zaGFyZVdhbGxldCh7XG4gICAgICAgIGVtYWlsOiAndGVzdEB0ZXN0LmNvbScsXG4gICAgICAgIHBlcm1pc3Npb25zOiAnc3BlbmQnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKHByZXBhcmVTdHViLmNhbGxlZE9uY2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHByZXBhcmVTdHViLmZpcnN0Q2FsbC5hcmdzWzNdLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZUJ1bGtXYWxsZXRTaGFyZSBwYXNzZXMgZW5jcnlwdGlvblZlcnNpb24gdG8gZW5jcnlwdFBydkZvclVzZXJBc3luYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRQcnZTdHViID0gc2lub25cbiAgICAgICAgLnN0dWIod2FsbGV0LCAnZW5jcnlwdFBydkZvclVzZXJBc3luYycpXG4gICAgICAgIC5yZXNvbHZlcyh7IGVuY3J5cHRlZFBydjogJ2VuYycsIHB1YjogJ3B1YicsIGZyb21QdWJLZXk6ICdmcGsnLCB0b1B1YktleTogJ3RwaycsIHBhdGg6ICdtLzAnIH0pO1xuICAgICAgc2lub25cbiAgICAgICAgLnN0dWIod2FsbGV0IGFzIGFueSwgJ2dldERlY3J5cHRlZEtleWNoYWluRm9yU2hhcmluZycpXG4gICAgICAgIC5yZXNvbHZlcyh7IHBydjogJ3BydicsIHB1YjogJ3B1YicsIGVuY3J5cHRlZFBydjogJ2VuY1BydicgfSk7XG4gICAgICBzaW5vbi5zdHViKHdhbGxldCBhcyBhbnksICdjcmVhdGVCdWxrS2V5U2hhcmVzJykucmVzb2x2ZXMoeyBzaGFyZXM6IFtdIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQnVsa1dhbGxldFNoYXJlKHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICBrZXlTaGFyZU9wdGlvbnM6IFt7IHVzZXJJZDogJ3VzZXItMScsIHB1YktleTogJ3B1YktleScsIHBhdGg6ICdtLzAnLCBwZXJtaXNzaW9uczogWydzcGVuZCddIH1dLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdFBydlN0dWIuY2FsbGVkT25jZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdFBydlN0dWIuZmlyc3RDYWxsLmFyZ3NbNF0sIDIsICdlbmNyeXB0aW9uVmVyc2lvbiBzaG91bGQgYmUgZm9yd2FyZGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlQnVsa1dhbGxldFNoYXJlIHBhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogdW5kZWZpbmVkIHdoZW4gbm90IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRQcnZTdHViID0gc2lub25cbiAgICAgICAgLnN0dWIod2FsbGV0LCAnZW5jcnlwdFBydkZvclVzZXJBc3luYycpXG4gICAgICAgIC5yZXNvbHZlcyh7IGVuY3J5cHRlZFBydjogJ2VuYycsIHB1YjogJ3B1YicsIGZyb21QdWJLZXk6ICdmcGsnLCB0b1B1YktleTogJ3RwaycsIHBhdGg6ICdtLzAnIH0pO1xuICAgICAgc2lub25cbiAgICAgICAgLnN0dWIod2FsbGV0IGFzIGFueSwgJ2dldERlY3J5cHRlZEtleWNoYWluRm9yU2hhcmluZycpXG4gICAgICAgIC5yZXNvbHZlcyh7IHBydjogJ3BydicsIHB1YjogJ3B1YicsIGVuY3J5cHRlZFBydjogJ2VuY1BydicgfSk7XG4gICAgICBzaW5vbi5zdHViKHdhbGxldCBhcyBhbnksICdjcmVhdGVCdWxrS2V5U2hhcmVzJykucmVzb2x2ZXMoeyBzaGFyZXM6IFtdIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQnVsa1dhbGxldFNoYXJlKHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICBrZXlTaGFyZU9wdGlvbnM6IFt7IHVzZXJJZDogJ3VzZXItMScsIHB1YktleTogJ3B1YktleScsIHBhdGg6ICdtLzAnLCBwZXJtaXNzaW9uczogWydzcGVuZCddIH1dLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhlbmNyeXB0UHJ2U3R1Yi5jYWxsZWRPbmNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0UHJ2U3R1Yi5maXJzdENhbGwuYXJnc1s0XSwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=walletsExternalSigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletsExternalSigner.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/walletsExternalSigner.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC"}