@bitgo/sdk-core 36.42.0 → 36.44.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 (65) hide show
  1. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +5 -0
  2. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  4. package/dist/src/bitgo/environments.d.ts.map +1 -1
  5. package/dist/src/bitgo/environments.js +8 -2
  6. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  7. package/dist/src/bitgo/pendingApproval/pendingApproval.js +2 -4
  8. package/dist/src/bitgo/trading/iTradingAccount.d.ts +1 -6
  9. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
  10. package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
  11. package/dist/src/bitgo/trading/network/network.d.ts +1 -1
  12. package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
  13. package/dist/src/bitgo/trading/network/network.js +5 -3
  14. package/dist/src/bitgo/trading/network/types.d.ts +1 -1
  15. package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
  16. package/dist/src/bitgo/trading/network/types.js +1 -1
  17. package/dist/src/bitgo/trading/tradingAccount.d.ts +1 -13
  18. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
  19. package/dist/src/bitgo/trading/tradingAccount.js +2 -32
  20. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +1 -1
  21. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -1
  22. package/dist/src/bitgo/tss/bitgoPubKeys.js +6 -9
  23. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +3 -3
  24. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  25. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +27 -7
  26. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -1
  27. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  28. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  29. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  30. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +3 -5
  31. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +4 -0
  32. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  33. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +27 -15
  34. package/dist/src/bitgo/wallet/iWallet.d.ts +0 -1
  35. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  36. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  37. package/dist/src/coins/ofc.d.ts +1 -15
  38. package/dist/src/coins/ofc.d.ts.map +1 -1
  39. package/dist/src/coins/ofc.js +1 -8
  40. package/dist/src/coins/ofcToken.d.ts +3 -5
  41. package/dist/src/coins/ofcToken.d.ts.map +1 -1
  42. package/dist/src/coins/ofcToken.js +4 -14
  43. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +2 -0
  44. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  45. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +465 -0
  46. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts +5 -0
  47. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts.map +1 -0
  48. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.js +36 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +6 -6
  51. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +0 -20
  52. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +0 -1
  53. package/dist/src/bitgo/utils/tss/recipientUtils.js +0 -46
  54. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +0 -2
  55. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +0 -1
  56. package/dist/test/unit/bitgo/trading/tradingAccount.js +0 -113
  57. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +0 -2
  58. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +0 -1
  59. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +0 -137
  60. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +0 -2
  61. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +0 -1
  62. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +0 -70
  63. package/dist/test/unit/coins/ofc.d.ts +0 -2
  64. package/dist/test/unit/coins/ofc.d.ts.map +0 -1
  65. package/dist/test/unit/coins/ofc.js +0 -124
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo/sdk-core",
3
- "version": "36.42.0",
3
+ "version": "36.44.0",
4
4
  "description": "core library functions for BitGoJS",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -40,12 +40,12 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo/public-types": "5.96.2",
44
- "@bitgo/sdk-lib-mpc": "^10.11.1",
43
+ "@bitgo/public-types": "5.97.0",
44
+ "@bitgo/sdk-lib-mpc": "^10.12.0",
45
45
  "@bitgo/secp256k1": "^1.11.0",
46
46
  "@bitgo/sjcl": "^1.1.0",
47
- "@bitgo/statics": "^58.37.0",
48
- "@bitgo/utxo-lib": "^11.22.0",
47
+ "@bitgo/statics": "^58.39.0",
48
+ "@bitgo/utxo-lib": "^11.22.1",
49
49
  "@noble/curves": "1.8.1",
50
50
  "@stablelib/hex": "^1.0.0",
51
51
  "@types/superagent": "4.1.15",
@@ -78,5 +78,5 @@
78
78
  "@types/lodash": "^4.14.151",
79
79
  "nyc": "^15.0.0"
80
80
  },
81
- "gitHead": "36fbed6cae5b00e695b22164d66f5be6e242343f"
81
+ "gitHead": "d7fc97534114c36386cb2df9c9ef0df50340598d"
82
82
  }
@@ -1,20 +0,0 @@
1
- import { TransactionParams } from '../../baseCoin';
2
- import { TxRequest } from './baseTypes';
3
- /**
4
- * Transaction types that legitimately carry no explicit recipients.
5
- * verifyTransaction handles no-recipient validation for these internally.
6
- * Mirrors the bypass list in abstractEthLikeNewCoins.ts verifyTssTransaction.
7
- */
8
- export declare const NO_RECIPIENT_TX_TYPES: Set<string>;
9
- /**
10
- * Resolves the effective txParams for TSS signing recipient verification.
11
- *
12
- * For smart contract interactions, recipients live in txRequest.intent.recipients
13
- * (native amount = 0, so buildParams is empty). Falls back to intent recipients
14
- * mapped to ITransactionRecipient shape when txParams.recipients is absent.
15
- *
16
- * Throws InvalidTransactionError if no recipients can be resolved and the
17
- * transaction type is not a known no-recipient type.
18
- */
19
- export declare function resolveEffectiveTxParams(txRequest: TxRequest, txParams: TransactionParams | undefined): TransactionParams;
20
- //# sourceMappingURL=recipientUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recipientUtils.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/recipientUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAmB,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,aAShC,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GACtC,iBAAiB,CAmBnB"}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NO_RECIPIENT_TX_TYPES = void 0;
4
- exports.resolveEffectiveTxParams = resolveEffectiveTxParams;
5
- const errors_1 = require("../../errors");
6
- /**
7
- * Transaction types that legitimately carry no explicit recipients.
8
- * verifyTransaction handles no-recipient validation for these internally.
9
- * Mirrors the bypass list in abstractEthLikeNewCoins.ts verifyTssTransaction.
10
- */
11
- exports.NO_RECIPIENT_TX_TYPES = new Set([
12
- 'acceleration',
13
- 'fillNonce',
14
- 'transferToken',
15
- 'tokenApproval',
16
- 'consolidate',
17
- 'bridgeFunds',
18
- 'enableToken',
19
- 'customTx', // DeFi/WalletConnect smart contract interactions have no traditional recipients
20
- ]);
21
- /**
22
- * Resolves the effective txParams for TSS signing recipient verification.
23
- *
24
- * For smart contract interactions, recipients live in txRequest.intent.recipients
25
- * (native amount = 0, so buildParams is empty). Falls back to intent recipients
26
- * mapped to ITransactionRecipient shape when txParams.recipients is absent.
27
- *
28
- * Throws InvalidTransactionError if no recipients can be resolved and the
29
- * transaction type is not a known no-recipient type.
30
- */
31
- function resolveEffectiveTxParams(txRequest, txParams) {
32
- const intentRecipients = txRequest.intent?.recipients?.map((intentRecipient) => ({
33
- address: intentRecipient.address.address,
34
- amount: intentRecipient.amount.value,
35
- data: intentRecipient.data,
36
- }));
37
- const effectiveTxParams = {
38
- ...txParams,
39
- recipients: txParams?.recipients?.length ? txParams.recipients : intentRecipients,
40
- };
41
- if (!effectiveTxParams.recipients?.length && !exports.NO_RECIPIENT_TX_TYPES.has(effectiveTxParams.type ?? '')) {
42
- throw new errors_1.InvalidTransactionError('Recipient details are required to verify this transaction before signing. Pass txParams with at least one recipient.');
43
- }
44
- return effectiveTxParams;
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThCQSw0REFzQkM7QUFuREQseUNBQXVEO0FBR3ZEOzs7O0dBSUc7QUFDVSxRQUFBLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNDLGNBQWM7SUFDZCxXQUFXO0lBQ1gsZUFBZTtJQUNmLGVBQWU7SUFDZixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYixVQUFVLEVBQUUsZ0ZBQWdGO0NBQzdGLENBQUMsQ0FBQztBQUVIOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxTQUFvQixFQUNwQixRQUF1QztJQUV2QyxNQUFNLGdCQUFnQixHQUFJLFNBQVMsQ0FBQyxNQUEwQixFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEcsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTztRQUN4QyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQ3BDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTtLQUMzQixDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0saUJBQWlCLEdBQXNCO1FBQzNDLEdBQUcsUUFBUTtRQUNYLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO0tBQ2xGLENBQUM7SUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLDZCQUFxQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RyxNQUFNLElBQUksZ0NBQXVCLENBQy9CLHNIQUFzSCxDQUN2SCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uUGFyYW1zIH0gZnJvbSAnLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMnO1xuaW1wb3J0IHsgUG9wdWxhdGVkSW50ZW50LCBUeFJlcXVlc3QgfSBmcm9tICcuL2Jhc2VUeXBlcyc7XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gdHlwZXMgdGhhdCBsZWdpdGltYXRlbHkgY2Fycnkgbm8gZXhwbGljaXQgcmVjaXBpZW50cy5cbiAqIHZlcmlmeVRyYW5zYWN0aW9uIGhhbmRsZXMgbm8tcmVjaXBpZW50IHZhbGlkYXRpb24gZm9yIHRoZXNlIGludGVybmFsbHkuXG4gKiBNaXJyb3JzIHRoZSBieXBhc3MgbGlzdCBpbiBhYnN0cmFjdEV0aExpa2VOZXdDb2lucy50cyB2ZXJpZnlUc3NUcmFuc2FjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE5PX1JFQ0lQSUVOVF9UWF9UWVBFUyA9IG5ldyBTZXQoW1xuICAnYWNjZWxlcmF0aW9uJyxcbiAgJ2ZpbGxOb25jZScsXG4gICd0cmFuc2ZlclRva2VuJyxcbiAgJ3Rva2VuQXBwcm92YWwnLFxuICAnY29uc29saWRhdGUnLFxuICAnYnJpZGdlRnVuZHMnLFxuICAnZW5hYmxlVG9rZW4nLFxuICAnY3VzdG9tVHgnLCAvLyBEZUZpL1dhbGxldENvbm5lY3Qgc21hcnQgY29udHJhY3QgaW50ZXJhY3Rpb25zIGhhdmUgbm8gdHJhZGl0aW9uYWwgcmVjaXBpZW50c1xuXSk7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSB0eFBhcmFtcyBmb3IgVFNTIHNpZ25pbmcgcmVjaXBpZW50IHZlcmlmaWNhdGlvbi5cbiAqXG4gKiBGb3Igc21hcnQgY29udHJhY3QgaW50ZXJhY3Rpb25zLCByZWNpcGllbnRzIGxpdmUgaW4gdHhSZXF1ZXN0LmludGVudC5yZWNpcGllbnRzXG4gKiAobmF0aXZlIGFtb3VudCA9IDAsIHNvIGJ1aWxkUGFyYW1zIGlzIGVtcHR5KS4gRmFsbHMgYmFjayB0byBpbnRlbnQgcmVjaXBpZW50c1xuICogbWFwcGVkIHRvIElUcmFuc2FjdGlvblJlY2lwaWVudCBzaGFwZSB3aGVuIHR4UGFyYW1zLnJlY2lwaWVudHMgaXMgYWJzZW50LlxuICpcbiAqIFRocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBpZiBubyByZWNpcGllbnRzIGNhbiBiZSByZXNvbHZlZCBhbmQgdGhlXG4gKiB0cmFuc2FjdGlvbiB0eXBlIGlzIG5vdCBhIGtub3duIG5vLXJlY2lwaWVudCB0eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKFxuICB0eFJlcXVlc3Q6IFR4UmVxdWVzdCxcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zIHwgdW5kZWZpbmVkXG4pOiBUcmFuc2FjdGlvblBhcmFtcyB7XG4gIGNvbnN0IGludGVudFJlY2lwaWVudHMgPSAodHhSZXF1ZXN0LmludGVudCBhcyBQb3B1bGF0ZWRJbnRlbnQpPy5yZWNpcGllbnRzPy5tYXAoKGludGVudFJlY2lwaWVudCkgPT4gKHtcbiAgICBhZGRyZXNzOiBpbnRlbnRSZWNpcGllbnQuYWRkcmVzcy5hZGRyZXNzLFxuICAgIGFtb3VudDogaW50ZW50UmVjaXBpZW50LmFtb3VudC52YWx1ZSxcbiAgICBkYXRhOiBpbnRlbnRSZWNpcGllbnQuZGF0YSxcbiAgfSkpO1xuXG4gIGNvbnN0IGVmZmVjdGl2ZVR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcyA9IHtcbiAgICAuLi50eFBhcmFtcyxcbiAgICByZWNpcGllbnRzOiB0eFBhcmFtcz8ucmVjaXBpZW50cz8ubGVuZ3RoID8gdHhQYXJhbXMucmVjaXBpZW50cyA6IGludGVudFJlY2lwaWVudHMsXG4gIH07XG5cbiAgaWYgKCFlZmZlY3RpdmVUeFBhcmFtcy5yZWNpcGllbnRzPy5sZW5ndGggJiYgIU5PX1JFQ0lQSUVOVF9UWF9UWVBFUy5oYXMoZWZmZWN0aXZlVHhQYXJhbXMudHlwZSA/PyAnJykpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAnUmVjaXBpZW50IGRldGFpbHMgYXJlIHJlcXVpcmVkIHRvIHZlcmlmeSB0aGlzIHRyYW5zYWN0aW9uIGJlZm9yZSBzaWduaW5nLiBQYXNzIHR4UGFyYW1zIHdpdGggYXQgbGVhc3Qgb25lIHJlY2lwaWVudC4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlZmZlY3RpdmVUeFBhcmFtcztcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- import 'should';
2
- //# sourceMappingURL=tradingAccount.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tradingAccount.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/trading/tradingAccount.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,CAAC"}
@@ -1,113 +0,0 @@
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 tradingAccount_1 = require("../../../../src/bitgo/trading/tradingAccount");
12
- describe('TradingAccount', function () {
13
- let tradingAccount;
14
- let mockBitGo;
15
- let mockWallet;
16
- let mockBaseCoin;
17
- const enterpriseId = 'test-enterprise-id';
18
- const walletPassphrase = 'test-passphrase';
19
- const encryptedPrv = 'encrypted-prv';
20
- const decryptedPrv = 'decrypted-prv';
21
- const signature = 'aabbccdd';
22
- beforeEach(function () {
23
- const postStub = sinon_1.default.stub();
24
- postStub.returns({
25
- send: sinon_1.default.stub().returns({
26
- result: sinon_1.default.stub().resolves({ signature }),
27
- }),
28
- });
29
- mockBitGo = {
30
- post: postStub,
31
- decrypt: sinon_1.default.stub().returns(decryptedPrv),
32
- };
33
- mockBaseCoin = {
34
- keychains: sinon_1.default.stub().returns({
35
- get: sinon_1.default.stub().resolves({ encryptedPrv }),
36
- }),
37
- signMessage: sinon_1.default.stub().resolves(Buffer.from(signature, 'hex')),
38
- };
39
- mockWallet = {
40
- id: sinon_1.default.stub().returns('test-wallet-id'),
41
- keyIds: sinon_1.default.stub().returns(['user-key-id', 'backup-key-id', 'bitgo-key-id']),
42
- url: sinon_1.default.stub().returns('https://example.com/wallet/test-wallet-id/tx/sign'),
43
- toJSON: sinon_1.default.stub().returns({
44
- id: 'test-wallet-id',
45
- keys: ['user-key-id', 'backup-key-id', 'bitgo-key-id'],
46
- userKeySigningRequired: undefined,
47
- }),
48
- baseCoin: mockBaseCoin,
49
- bitgo: mockBitGo,
50
- };
51
- tradingAccount = new tradingAccount_1.TradingAccount(enterpriseId, mockWallet, mockBitGo);
52
- });
53
- afterEach(function () {
54
- sinon_1.default.restore();
55
- });
56
- describe('signPayload', function () {
57
- const payload = { data: 'test-payload' };
58
- const payloadString = 'test-payload-string';
59
- describe('without walletPassphrase (BitGo remote signing)', function () {
60
- it('should sign using the BitGo key remotely when no passphrase is provided', async function () {
61
- const result = await tradingAccount.signPayload({ payload });
62
- mockWallet.toJSON.calledOnce.should.be.true();
63
- mockWallet.url.calledWith('/tx/sign').should.be.true();
64
- mockBitGo.post.calledOnce.should.be.true();
65
- result.should.equal(signature);
66
- });
67
- it('should sign a string payload remotely when no passphrase is provided', async function () {
68
- const result = await tradingAccount.signPayload({ payload: payloadString });
69
- result.should.equal(signature);
70
- });
71
- it('should throw if userKeySigningRequired is set and no passphrase is provided', async function () {
72
- mockWallet.toJSON.returns({
73
- id: 'test-wallet-id',
74
- keys: ['user-key-id', 'backup-key-id', 'bitgo-key-id'],
75
- userKeySigningRequired: 'true',
76
- });
77
- await tradingAccount
78
- .signPayload({ payload })
79
- .should.be.rejectedWith('Wallet must use user key to sign ofc transaction, please provide the wallet passphrase or visit your wallet settings page to configure one.');
80
- });
81
- it('should throw if wallet has fewer than 2 keys and no passphrase is provided', async function () {
82
- mockWallet.toJSON.returns({
83
- id: 'test-wallet-id',
84
- keys: ['user-key-id'],
85
- userKeySigningRequired: undefined,
86
- });
87
- await tradingAccount
88
- .signPayload({ payload })
89
- .should.be.rejectedWith('Wallet does not support BitGo signing. Please reach out to support@bitgo.com to resolve this issue.');
90
- });
91
- });
92
- describe('with walletPassphrase (local user key signing)', function () {
93
- it('should decrypt the user key and sign the payload locally', async function () {
94
- const result = await tradingAccount.signPayload({ payload, walletPassphrase });
95
- mockBaseCoin.keychains().get.calledWith({ id: 'user-key-id' }).should.be.true();
96
- mockBitGo.decrypt.calledWith({ input: encryptedPrv, password: walletPassphrase }).should.be.true();
97
- mockBaseCoin.signMessage.calledOnce.should.be.true();
98
- result.should.equal(Buffer.from(signature, 'hex').toString('hex'));
99
- });
100
- it('should stringify a Record payload before signing locally', async function () {
101
- await tradingAccount.signPayload({ payload, walletPassphrase });
102
- const signMessageCall = mockBaseCoin.signMessage.getCall(0);
103
- signMessageCall.args[1].should.equal(JSON.stringify(payload));
104
- });
105
- it('should pass a string payload directly to signMessage', async function () {
106
- await tradingAccount.signPayload({ payload: payloadString, walletPassphrase });
107
- const signMessageCall = mockBaseCoin.signMessage.getCall(0);
108
- signMessageCall.args[1].should.equal(payloadString);
109
- });
110
- });
111
- });
112
- });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZGluZ0FjY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHJhZGluZy90cmFkaW5nQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztHQUVHO0FBQ0gsa0RBQTBCO0FBQzFCLGtCQUFnQjtBQUNoQixpRkFBOEU7QUFFOUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLElBQUksY0FBOEIsQ0FBQztJQUNuQyxJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFVBQWUsQ0FBQztJQUNwQixJQUFJLFlBQWlCLENBQUM7SUFFdEIsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQztJQUMzQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7SUFDckMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztJQUU3QixVQUFVLENBQUM7UUFDVCxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNmLElBQUksRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO2dCQUN6QixNQUFNLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQzdDLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxTQUFTLEdBQUc7WUFDVixJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztTQUM1QyxDQUFDO1FBRUYsWUFBWSxHQUFHO1lBQ2IsU0FBUyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLEdBQUcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUM7YUFDN0MsQ0FBQztZQUNGLFdBQVcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2xFLENBQUM7UUFFRixVQUFVLEdBQUc7WUFDWCxFQUFFLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUMxQyxNQUFNLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDOUUsR0FBRyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsbURBQW1ELENBQUM7WUFDOUUsTUFBTSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLEVBQUUsRUFBRSxnQkFBZ0I7Z0JBQ3BCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDO2dCQUN0RCxzQkFBc0IsRUFBRSxTQUFTO2FBQ2xDLENBQUM7WUFDRixRQUFRLEVBQUUsWUFBWTtZQUN0QixLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDO1FBRUYsY0FBYyxHQUFHLElBQUksK0JBQWMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsZUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztRQUU1QyxRQUFRLENBQUMsaURBQWlELEVBQUU7WUFDMUQsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEtBQUs7Z0JBQ2pGLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBRTdELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEtBQUs7Z0JBQzlFLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUU1RSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw2RUFBNkUsRUFBRSxLQUFLO2dCQUNyRixVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFDeEIsRUFBRSxFQUFFLGdCQUFnQjtvQkFDcEIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUM7b0JBQ3RELHNCQUFzQixFQUFFLE1BQU07aUJBQy9CLENBQUMsQ0FBQztnQkFFSCxNQUFNLGNBQWM7cUJBQ2pCLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO3FCQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDckIsNklBQTZJLENBQzlJLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxLQUFLO2dCQUNwRixVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFDeEIsRUFBRSxFQUFFLGdCQUFnQjtvQkFDcEIsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUNyQixzQkFBc0IsRUFBRSxTQUFTO2lCQUNsQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxjQUFjO3FCQUNqQixXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztxQkFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLHFHQUFxRyxDQUN0RyxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxnREFBZ0QsRUFBRTtZQUN6RCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztnQkFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFFL0UsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRixTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuRyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO2dCQUNsRSxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRSxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO2dCQUM5RCxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFFL0UsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFkaW5nQWNjb3VudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby90cmFkaW5nL3RyYWRpbmdBY2NvdW50JztcblxuZGVzY3JpYmUoJ1RyYWRpbmdBY2NvdW50JywgZnVuY3Rpb24gKCkge1xuICBsZXQgdHJhZGluZ0FjY291bnQ6IFRyYWRpbmdBY2NvdW50O1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0OiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcblxuICBjb25zdCBlbnRlcnByaXNlSWQgPSAndGVzdC1lbnRlcnByaXNlLWlkJztcbiAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0LXBhc3NwaHJhc2UnO1xuICBjb25zdCBlbmNyeXB0ZWRQcnYgPSAnZW5jcnlwdGVkLXBydic7XG4gIGNvbnN0IGRlY3J5cHRlZFBydiA9ICdkZWNyeXB0ZWQtcHJ2JztcbiAgY29uc3Qgc2lnbmF0dXJlID0gJ2FhYmJjY2RkJztcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwb3N0U3R1YiA9IHNpbm9uLnN0dWIoKTtcbiAgICBwb3N0U3R1Yi5yZXR1cm5zKHtcbiAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzaWduYXR1cmUgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHBvc3RTdHViLFxuICAgICAgZGVjcnlwdDogc2lub24uc3R1YigpLnJldHVybnMoZGVjcnlwdGVkUHJ2KSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIGdldDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgZW5jcnlwdGVkUHJ2IH0pLFxuICAgICAgfSksXG4gICAgICBzaWduTWVzc2FnZTogc2lub24uc3R1YigpLnJlc29sdmVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpKSxcbiAgICB9O1xuXG4gICAgbW9ja1dhbGxldCA9IHtcbiAgICAgIGlkOiBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdC13YWxsZXQtaWQnKSxcbiAgICAgIGtleUlkczogc2lub24uc3R1YigpLnJldHVybnMoWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLnJldHVybnMoJ2h0dHBzOi8vZXhhbXBsZS5jb20vd2FsbGV0L3Rlc3Qtd2FsbGV0LWlkL3R4L3NpZ24nKSxcbiAgICAgIHRvSlNPTjogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICBpZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB1bmRlZmluZWQsXG4gICAgICB9KSxcbiAgICAgIGJhc2VDb2luOiBtb2NrQmFzZUNvaW4sXG4gICAgICBiaXRnbzogbW9ja0JpdEdvLFxuICAgIH07XG5cbiAgICB0cmFkaW5nQWNjb3VudCA9IG5ldyBUcmFkaW5nQWNjb3VudChlbnRlcnByaXNlSWQsIG1vY2tXYWxsZXQsIG1vY2tCaXRHbyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblBheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgZGF0YTogJ3Rlc3QtcGF5bG9hZCcgfTtcbiAgICBjb25zdCBwYXlsb2FkU3RyaW5nID0gJ3Rlc3QtcGF5bG9hZC1zdHJpbmcnO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGhvdXQgd2FsbGV0UGFzc3BocmFzZSAoQml0R28gcmVtb3RlIHNpZ25pbmcpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzaWduIHVzaW5nIHRoZSBCaXRHbyBrZXkgcmVtb3RlbHkgd2hlbiBubyBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQgfSk7XG5cbiAgICAgICAgbW9ja1dhbGxldC50b0pTT04uY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBtb2NrV2FsbGV0LnVybC5jYWxsZWRXaXRoKCcvdHgvc2lnbicpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChzaWduYXR1cmUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2lnbiBhIHN0cmluZyBwYXlsb2FkIHJlbW90ZWx5IHdoZW4gbm8gcGFzc3BocmFzZSBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nIH0pO1xuXG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoc2lnbmF0dXJlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGlmIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQgaXMgc2V0IGFuZCBubyBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NrV2FsbGV0LnRvSlNPTi5yZXR1cm5zKHtcbiAgICAgICAgICBpZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJywgJ2JhY2t1cC1rZXktaWQnLCAnYml0Z28ta2V5LWlkJ10sXG4gICAgICAgICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogJ3RydWUnLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudFxuICAgICAgICAgIC5zaWduUGF5bG9hZCh7IHBheWxvYWQgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgICdXYWxsZXQgbXVzdCB1c2UgdXNlciBrZXkgdG8gc2lnbiBvZmMgdHJhbnNhY3Rpb24sIHBsZWFzZSBwcm92aWRlIHRoZSB3YWxsZXQgcGFzc3BocmFzZSBvciB2aXNpdCB5b3VyIHdhbGxldCBzZXR0aW5ncyBwYWdlIHRvIGNvbmZpZ3VyZSBvbmUuJ1xuICAgICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB3YWxsZXQgaGFzIGZld2VyIHRoYW4gMiBrZXlzIGFuZCBubyBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NrV2FsbGV0LnRvSlNPTi5yZXR1cm5zKHtcbiAgICAgICAgICBpZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJ10sXG4gICAgICAgICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudFxuICAgICAgICAgIC5zaWduUGF5bG9hZCh7IHBheWxvYWQgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgICdXYWxsZXQgZG9lcyBub3Qgc3VwcG9ydCBCaXRHbyBzaWduaW5nLiBQbGVhc2UgcmVhY2ggb3V0IHRvIHN1cHBvcnRAYml0Z28uY29tIHRvIHJlc29sdmUgdGhpcyBpc3N1ZS4nXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggd2FsbGV0UGFzc3BocmFzZSAobG9jYWwgdXNlciBrZXkgc2lnbmluZyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGRlY3J5cHQgdGhlIHVzZXIga2V5IGFuZCBzaWduIHRoZSBwYXlsb2FkIGxvY2FsbHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCwgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zKCkuZ2V0LmNhbGxlZFdpdGgoeyBpZDogJ3VzZXIta2V5LWlkJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBtb2NrQml0R28uZGVjcnlwdC5jYWxsZWRXaXRoKHsgaW5wdXQ6IGVuY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKS50b1N0cmluZygnaGV4JykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3RyaW5naWZ5IGEgUmVjb3JkIHBheWxvYWQgYmVmb3JlIHNpZ25pbmcgbG9jYWxseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlQ2FsbCA9IG1vY2tCYXNlQ29pbi5zaWduTWVzc2FnZS5nZXRDYWxsKDApO1xuICAgICAgICBzaWduTWVzc2FnZUNhbGwuYXJnc1sxXS5zaG91bGQuZXF1YWwoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFzcyBhIHN0cmluZyBwYXlsb2FkIGRpcmVjdGx5IHRvIHNpZ25NZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQ6IHBheWxvYWRTdHJpbmcsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VDYWxsID0gbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmdldENhbGwoMCk7XG4gICAgICAgIHNpZ25NZXNzYWdlQ2FsbC5hcmdzWzFdLnNob3VsZC5lcXVhbChwYXlsb2FkU3RyaW5nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,2 +0,0 @@
1
- import 'should';
2
- //# sourceMappingURL=recipientUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recipientUtils.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bitgo/utils/tss/recipientUtils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -1,137 +0,0 @@
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
- require("should");
37
- const assert = __importStar(require("assert"));
38
- // Import directly from source so no top-level export change is needed
39
- const getModule = () => require('../../../../../src/bitgo/utils/tss/recipientUtils');
40
- function makeTxRequest(intentRecipients) {
41
- return {
42
- txRequestId: 'test-req-id',
43
- intent: intentRecipients ? { intentType: 'contractCall', recipients: intentRecipients } : { intentType: 'payment' },
44
- transactions: [],
45
- unsignedTxs: [],
46
- state: 'pendingUserSignature',
47
- walletType: 'hot',
48
- walletId: 'walletId',
49
- policiesChecked: true,
50
- version: 1,
51
- userId: 'userId',
52
- };
53
- }
54
- describe('recipientUtils', function () {
55
- describe('NO_RECIPIENT_TX_TYPES', function () {
56
- it('contains exactly the 8 expected exempted types', function () {
57
- const { NO_RECIPIENT_TX_TYPES } = getModule();
58
- const expected = [
59
- 'acceleration',
60
- 'fillNonce',
61
- 'transferToken',
62
- 'tokenApproval',
63
- 'consolidate',
64
- 'bridgeFunds',
65
- 'enableToken',
66
- 'customTx',
67
- ];
68
- expected.forEach((t) => assert.ok(NO_RECIPIENT_TX_TYPES.has(t), `${t} should be in NO_RECIPIENT_TX_TYPES`));
69
- assert.strictEqual(NO_RECIPIENT_TX_TYPES.size, expected.length);
70
- });
71
- });
72
- describe('resolveEffectiveTxParams', function () {
73
- it('uses txParams.recipients when provided', function () {
74
- const { resolveEffectiveTxParams } = getModule();
75
- const txRequest = makeTxRequest();
76
- const result = resolveEffectiveTxParams(txRequest, { recipients: [{ address: '0xabc', amount: '100' }] });
77
- result.recipients[0].address.should.equal('0xabc');
78
- result.recipients[0].amount.should.equal('100');
79
- });
80
- it('falls back to intent.recipients when txParams has no recipients', function () {
81
- const { resolveEffectiveTxParams } = getModule();
82
- const txRequest = makeTxRequest([{ address: { address: '0xintent' }, amount: { value: '500' } }]);
83
- const result = resolveEffectiveTxParams(txRequest, {});
84
- result.recipients[0].address.should.equal('0xintent');
85
- result.recipients[0].amount.should.equal('500');
86
- });
87
- it('falls back to intent.recipients when txParams is undefined', function () {
88
- const { resolveEffectiveTxParams } = getModule();
89
- const txRequest = makeTxRequest([{ address: { address: '0xintent' }, amount: { value: '999' } }]);
90
- const result = resolveEffectiveTxParams(txRequest, undefined);
91
- result.recipients[0].address.should.equal('0xintent');
92
- });
93
- it('prefers txParams.recipients over intent.recipients when both present', function () {
94
- const { resolveEffectiveTxParams } = getModule();
95
- const txRequest = makeTxRequest([{ address: { address: '0xintent' }, amount: { value: '9999' } }]);
96
- const result = resolveEffectiveTxParams(txRequest, { recipients: [{ address: '0xexplicit', amount: '1' }] });
97
- result.recipients[0].address.should.equal('0xexplicit');
98
- });
99
- it('maps intent.data field through to the recipient', function () {
100
- const { resolveEffectiveTxParams } = getModule();
101
- const txRequest = makeTxRequest([
102
- { address: { address: '0xcontract' }, amount: { value: '0' }, data: '0xabcdef' },
103
- ]);
104
- const result = resolveEffectiveTxParams(txRequest, undefined);
105
- result.recipients[0].data.should.equal('0xabcdef');
106
- });
107
- it('throws InvalidTransactionError when no recipients and type is not exempted', function () {
108
- const { resolveEffectiveTxParams } = getModule();
109
- const txRequest = makeTxRequest();
110
- assert.throws(() => resolveEffectiveTxParams(txRequest, {}), /Recipient details are required to verify this transaction before signing/);
111
- });
112
- it('throws when txParams is undefined and intent has no recipients', function () {
113
- const { resolveEffectiveTxParams } = getModule();
114
- const txRequest = makeTxRequest();
115
- assert.throws(() => resolveEffectiveTxParams(txRequest, undefined), /Recipient details are required to verify this transaction before signing/);
116
- });
117
- const NO_RECIPIENT_TYPES = [
118
- 'acceleration',
119
- 'fillNonce',
120
- 'transferToken',
121
- 'tokenApproval',
122
- 'consolidate',
123
- 'bridgeFunds',
124
- 'enableToken', // TSS wallets do not populate recipients for token enablement
125
- 'customTx', // DeFi/WalletConnect smart contract interactions have no traditional recipients
126
- ];
127
- NO_RECIPIENT_TYPES.forEach((type) => {
128
- it(`allows empty recipients for no-recipient tx type: ${type}`, function () {
129
- const { resolveEffectiveTxParams } = getModule();
130
- const txRequest = makeTxRequest();
131
- const result = resolveEffectiveTxParams(txRequest, { type });
132
- result.type.should.equal(type);
133
- });
134
- });
135
- });
136
- });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0JBQWdCO0FBQ2hCLCtDQUFpQztBQUVqQyxzRUFBc0U7QUFDdEUsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFFckYsU0FBUyxhQUFhLENBQ3BCLGdCQUErRjtJQUUvRixPQUFPO1FBQ0wsV0FBVyxFQUFFLGFBQWE7UUFDMUIsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTtRQUNuSCxZQUFZLEVBQUUsRUFBRTtRQUNoQixXQUFXLEVBQUUsRUFBRTtRQUNmLEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsVUFBVSxFQUFFLEtBQUs7UUFDakIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsZUFBZSxFQUFFLElBQUk7UUFDckIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsUUFBUTtLQUNqQixDQUFDO0FBQ0osQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLGdEQUFnRCxFQUFFO1lBQ25ELE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLGNBQWM7Z0JBQ2QsV0FBVztnQkFDWCxlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2Is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QVMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sU0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUNwRCwwRUFBMEUsQ0FDM0UsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRztZQUN6QixjQUFjO1lBQ2QsV0FBVztZQUNYLGVBQWU7WUFDZixlQUFlO1lBQ2YsYUFBYTtZQUNiLGFBQWE7WUFDYixhQUFhLEVBQUUsOERBQThEO1lBQzdFLFVBQVUsRUFBRSxnRkFBZ0Y7U0FDN0YsQ0FBQztRQUVGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xDLEVBQUUsQ0FBQyxxREFBcUQsSUFBSSxFQUFFLEVBQUU7Z0JBQzlELE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbi8vIEltcG9ydCBkaXJlY3RseSBmcm9tIHNvdXJjZSBzbyBubyB0b3AtbGV2ZWwgZXhwb3J0IGNoYW5nZSBpcyBuZWVkZWRcbmNvbnN0IGdldE1vZHVsZSA9ICgpID0+IHJlcXVpcmUoJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvcmVjaXBpZW50VXRpbHMnKTtcblxuZnVuY3Rpb24gbWFrZVR4UmVxdWVzdChcbiAgaW50ZW50UmVjaXBpZW50cz86IHsgYWRkcmVzczogeyBhZGRyZXNzOiBzdHJpbmcgfTsgYW1vdW50OiB7IHZhbHVlOiBzdHJpbmcgfTsgZGF0YT86IHN0cmluZyB9W11cbik6IGFueSB7XG4gIHJldHVybiB7XG4gICAgdHhSZXF1ZXN0SWQ6ICd0ZXN0LXJlcS1pZCcsXG4gICAgaW50ZW50OiBpbnRlbnRSZWNpcGllbnRzID8geyBpbnRlbnRUeXBlOiAnY29udHJhY3RDYWxsJywgcmVjaXBpZW50czogaW50ZW50UmVjaXBpZW50cyB9IDogeyBpbnRlbnRUeXBlOiAncGF5bWVudCcgfSxcbiAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICBwb2xpY2llc0NoZWNrZWQ6IHRydWUsXG4gICAgdmVyc2lvbjogMSxcbiAgICB1c2VySWQ6ICd1c2VySWQnLFxuICB9O1xufVxuXG5kZXNjcmliZSgncmVjaXBpZW50VXRpbHMnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdOT19SRUNJUElFTlRfVFhfVFlQRVMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2NvbnRhaW5zIGV4YWN0bHkgdGhlIDggZXhwZWN0ZWQgZXhlbXB0ZWQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IE5PX1JFQ0lQSUVOVF9UWF9UWVBFUyB9ID0gZ2V0TW9kdWxlKCk7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICAgICAgJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICdmaWxsTm9uY2UnLFxuICAgICAgICAndHJhbnNmZXJUb2tlbicsXG4gICAgICAgICd0b2tlbkFwcHJvdmFsJyxcbiAgICAgICAgJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgJ2JyaWRnZUZ1bmRzJyxcbiAgICAgICAgJ2VuYWJsZVRva2VuJyxcbiAgICAgICAgJ2N1c3RvbVR4JyxcbiAgICAgIF07XG4gICAgICBleHBlY3RlZC5mb3JFYWNoKCh0KSA9PiBhc3NlcnQub2soTk9fUkVDSVBJRU5UX1RYX1RZUEVTLmhhcyh0KSwgYCR7dH0gc2hvdWxkIGJlIGluIE5PX1JFQ0lQSUVOVF9UWF9UWVBFU2ApKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChOT19SRUNJUElFTlRfVFhfVFlQRVMuc2l6ZSwgZXhwZWN0ZWQubGVuZ3RoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Jlc29sdmVFZmZlY3RpdmVUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgndXNlcyB0eFBhcmFtcy5yZWNpcGllbnRzIHdoZW4gcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyB9ID0gZ2V0TW9kdWxlKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzEwMCcgfV0gfSk7XG4gICAgICByZXN1bHQucmVjaXBpZW50c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnMHhhYmMnKTtcbiAgICAgIHJlc3VsdC5yZWNpcGllbnRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzEwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gaW50ZW50LnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm8gcmVjaXBpZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zIH0gPSBnZXRNb2R1bGUoKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhpbnRlbnQnIH0sIGFtb3VudDogeyB2YWx1ZTogJzUwMCcgfSB9XSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSk7XG4gICAgICByZXN1bHQucmVjaXBpZW50c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnMHhpbnRlbnQnKTtcbiAgICAgIHJlc3VsdC5yZWNpcGllbnRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzUwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gaW50ZW50LnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBpcyB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyB9ID0gZ2V0TW9kdWxlKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KFt7IGFkZHJlc3M6IHsgYWRkcmVzczogJzB4aW50ZW50JyB9LCBhbW91bnQ6IHsgdmFsdWU6ICc5OTknIH0gfV0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgdW5kZWZpbmVkKTtcbiAgICAgIHJlc3VsdC5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweGludGVudCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZWZlcnMgdHhQYXJhbXMucmVjaXBpZW50cyBvdmVyIGludGVudC5yZWNpcGllbnRzIHdoZW4gYm90aCBwcmVzZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgfSA9IGdldE1vZHVsZSgpO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdChbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGludGVudCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnOTk5OScgfSB9XSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGV4cGxpY2l0JywgYW1vdW50OiAnMScgfV0gfSk7XG4gICAgICByZXN1bHQucmVjaXBpZW50c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnMHhleHBsaWNpdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hcHMgaW50ZW50LmRhdGEgZmllbGQgdGhyb3VnaCB0byB0aGUgcmVjaXBpZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgfSA9IGdldE1vZHVsZSgpO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdChbXG4gICAgICAgIHsgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhjb250cmFjdCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnMCcgfSwgZGF0YTogJzB4YWJjZGVmJyB9LFxuICAgICAgXSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB1bmRlZmluZWQpO1xuICAgICAgcmVzdWx0LnJlY2lwaWVudHNbMF0uZGF0YS5zaG91bGQuZXF1YWwoJzB4YWJjZGVmJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIHdoZW4gbm8gcmVjaXBpZW50cyBhbmQgdHlwZSBpcyBub3QgZXhlbXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyB9ID0gZ2V0TW9kdWxlKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSksXG4gICAgICAgIC9SZWNpcGllbnQgZGV0YWlscyBhcmUgcmVxdWlyZWQgdG8gdmVyaWZ5IHRoaXMgdHJhbnNhY3Rpb24gYmVmb3JlIHNpZ25pbmcvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHR4UGFyYW1zIGlzIHVuZGVmaW5lZCBhbmQgaW50ZW50IGhhcyBubyByZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgfSA9IGdldE1vZHVsZSgpO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgdW5kZWZpbmVkKSxcbiAgICAgICAgL1JlY2lwaWVudCBkZXRhaWxzIGFyZSByZXF1aXJlZCB0byB2ZXJpZnkgdGhpcyB0cmFuc2FjdGlvbiBiZWZvcmUgc2lnbmluZy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBOT19SRUNJUElFTlRfVFlQRVMgPSBbXG4gICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICdmaWxsTm9uY2UnLFxuICAgICAgJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgJ2NvbnNvbGlkYXRlJyxcbiAgICAgICdicmlkZ2VGdW5kcycsXG4gICAgICAnZW5hYmxlVG9rZW4nLCAvLyBUU1Mgd2FsbGV0cyBkbyBub3QgcG9wdWxhdGUgcmVjaXBpZW50cyBmb3IgdG9rZW4gZW5hYmxlbWVudFxuICAgICAgJ2N1c3RvbVR4JywgLy8gRGVGaS9XYWxsZXRDb25uZWN0IHNtYXJ0IGNvbnRyYWN0IGludGVyYWN0aW9ucyBoYXZlIG5vIHRyYWRpdGlvbmFsIHJlY2lwaWVudHNcbiAgICBdO1xuXG4gICAgTk9fUkVDSVBJRU5UX1RZUEVTLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgIGl0KGBhbGxvd3MgZW1wdHkgcmVjaXBpZW50cyBmb3Igbm8tcmVjaXBpZW50IHR4IHR5cGU6ICR7dHlwZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zIH0gPSBnZXRNb2R1bGUoKTtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHR5cGUgfSk7XG4gICAgICAgIHJlc3VsdC50eXBlLnNob3VsZC5lcXVhbCh0eXBlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,2 +0,0 @@
1
- import 'should';
2
- //# sourceMappingURL=ofcWalletSignTransaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ofcWalletSignTransaction.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/ofcWalletSignTransaction.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,CAAC"}
@@ -1,70 +0,0 @@
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 src_1 = require("../../../../src");
12
- describe('Wallet - OFC signTransaction', function () {
13
- let wallet;
14
- let mockBitGo;
15
- let mockBaseCoin;
16
- let mockWalletData;
17
- beforeEach(function () {
18
- mockBitGo = {
19
- url: sinon_1.default.stub().returns('https://test.bitgo.com'),
20
- post: sinon_1.default.stub(),
21
- get: sinon_1.default.stub(),
22
- setRequestTracer: sinon_1.default.stub(),
23
- };
24
- mockBaseCoin = {
25
- getFamily: sinon_1.default.stub().returns('ofc'),
26
- url: sinon_1.default.stub().returns('https://test.bitgo.com/wallet'),
27
- keychains: sinon_1.default.stub(),
28
- supportsTss: sinon_1.default.stub().returns(false),
29
- getMPCAlgorithm: sinon_1.default.stub(),
30
- presignTransaction: sinon_1.default.stub().resolvesArg(0),
31
- keyIdsForSigning: sinon_1.default.stub().returns([0]),
32
- signTransaction: sinon_1.default.stub().resolves({ halfSigned: { payload: 'test', signature: 'aabbcc' } }),
33
- };
34
- mockWalletData = {
35
- id: 'test-wallet-id',
36
- coin: 'ofcusdt',
37
- keys: ['user-key', 'backup-key', 'bitgo-key'],
38
- multisigType: 'onchain',
39
- enterprise: 'ent-id',
40
- };
41
- wallet = new src_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
42
- });
43
- afterEach(function () {
44
- sinon_1.default.restore();
45
- });
46
- it('should pass wallet instance to baseCoin.signTransaction', async function () {
47
- const txPrebuild = { txInfo: { payload: '{"amount":"100"}' } };
48
- const prv = 'test-prv';
49
- await wallet.signTransaction({ txPrebuild, prv });
50
- mockBaseCoin.signTransaction.calledOnce.should.be.true();
51
- const callArgs = mockBaseCoin.signTransaction.getCall(0).args[0];
52
- callArgs.wallet.should.equal(wallet);
53
- });
54
- it('should pass prv to baseCoin.signTransaction when provided directly', async function () {
55
- const txPrebuild = { txInfo: { payload: '{"amount":"100"}' } };
56
- const prv = 'test-prv';
57
- await wallet.signTransaction({ txPrebuild, prv });
58
- const callArgs = mockBaseCoin.signTransaction.getCall(0).args[0];
59
- callArgs.prv.should.equal(prv);
60
- });
61
- it('should pass wallet instance to baseCoin.signTransaction even when no prv is available', async function () {
62
- sinon_1.default.stub(wallet, 'getUserPrv').returns(undefined);
63
- const txPrebuild = { txInfo: { payload: '{"amount":"100"}' } };
64
- await wallet.signTransaction({ txPrebuild });
65
- mockBaseCoin.signTransaction.calledOnce.should.be.true();
66
- const callArgs = mockBaseCoin.signTransaction.getCall(0).args[0];
67
- callArgs.wallet.should.equal(wallet);
68
- });
69
- });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjV2FsbGV0U2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9vZmNXYWxsZXRTaWduVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7R0FFRztBQUNILGtEQUEwQjtBQUMxQixrQkFBZ0I7QUFDaEIseUNBQXlDO0FBRXpDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtJQUN2QyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFlBQWlCLENBQUM7SUFDdEIsSUFBSSxjQUFtQixDQUFDO0lBRXhCLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLEdBQUcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ25ELElBQUksRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLEdBQUcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2pCLGdCQUFnQixFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLFlBQVksR0FBRztZQUNiLFNBQVMsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN0QyxHQUFHLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztZQUMxRCxTQUFTLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRTtZQUN2QixXQUFXLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsZUFBZSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7WUFDN0Isa0JBQWtCLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsZ0JBQWdCLEVB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LENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnV2FsbGV0IC0gT0ZDIHNpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IG1vY2tXYWxsZXREYXRhOiBhbnk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScpLFxuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgICAgZ2V0OiBzaW5vbi5zdHViKCksXG4gICAgICBzZXRSZXF1ZXN0VHJhY2VyOiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tCYXNlQ29pbiA9IHtcbiAgICAgIGdldEZhbWlseTogc2lub24uc3R1YigpLnJldHVybnMoJ29mYycpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS93YWxsZXQnKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAgcHJlc2lnblRyYW5zYWN0aW9uOiBzaW5vbi5zdHViKCkucmVzb2x2ZXNBcmcoMCksXG4gICAgICBrZXlJZHNGb3JTaWduaW5nOiBzaW5vbi5zdHViKCkucmV0dXJucyhbMF0pLFxuICAgICAgc2lnblRyYW5zYWN0aW9uOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBoYWxmU2lnbmVkOiB7IHBheWxvYWQ6ICd0ZXN0Jywgc2lnbmF0dXJlOiAnYWFiYmNjJyB9IH0pLFxuICAgIH07XG5cbiAgICBtb2NrV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgY29pbjogJ29mY3VzZHQnLFxuICAgICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICBlbnRlcnByaXNlOiAnZW50LWlkJyxcbiAgICB9O1xuXG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG1vY2tCYXNlQ29pbiwgbW9ja1dhbGxldERhdGEpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIHdhbGxldCBpbnN0YW5jZSB0byBiYXNlQ29pbi5zaWduVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhJbmZvOiB7IHBheWxvYWQ6ICd7XCJhbW91bnRcIjpcIjEwMFwifScgfSB9IGFzIGFueTtcbiAgICBjb25zdCBwcnYgPSAndGVzdC1wcnYnO1xuXG4gICAgYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHBydiB9KTtcblxuICAgIG1vY2tCYXNlQ29pbi5zaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGNvbnN0IGNhbGxBcmdzID0gbW9ja0Jhc2VDb2luLnNpZ25UcmFuc2FjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF07XG4gICAgY2FsbEFyZ3Mud2FsbGV0LnNob3VsZC5lcXVhbCh3YWxsZXQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgcHJ2IHRvIGJhc2VDb2luLnNpZ25UcmFuc2FjdGlvbiB3aGVuIHByb3ZpZGVkIGRpcmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SW5mbzogeyBwYXlsb2FkOiAne1wiYW1vdW50XCI6XCIxMDBcIn0nIH0gfSBhcyBhbnk7XG4gICAgY29uc3QgcHJ2ID0gJ3Rlc3QtcHJ2JztcblxuICAgIGF3YWl0IHdhbGxldC5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCBwcnYgfSk7XG5cbiAgICBjb25zdCBjYWxsQXJncyA9IG1vY2tCYXNlQ29pbi5zaWduVHJhbnNhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdO1xuICAgIGNhbGxBcmdzLnBydi5zaG91bGQuZXF1YWwocHJ2KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIHdhbGxldCBpbnN0YW5jZSB0byBiYXNlQ29pbi5zaWduVHJhbnNhY3Rpb24gZXZlbiB3aGVuIG5vIHBydiBpcyBhdmFpbGFibGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRVc2VyUHJ2JykucmV0dXJucyh1bmRlZmluZWQgYXMgYW55KTtcbiAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEluZm86IHsgcGF5bG9hZDogJ3tcImFtb3VudFwiOlwiMTAwXCJ9JyB9IH0gYXMgYW55O1xuXG4gICAgYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQgfSk7XG5cbiAgICBtb2NrQmFzZUNvaW4uc2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICBjb25zdCBjYWxsQXJncyA9IG1vY2tCYXNlQ29pbi5zaWduVHJhbnNhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdO1xuICAgIGNhbGxBcmdzLndhbGxldC5zaG91bGQuZXF1YWwod2FsbGV0KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- import 'should';
2
- //# sourceMappingURL=ofc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ofc.d.ts","sourceRoot":"","sources":["../../../../test/unit/coins/ofc.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,CAAC"}