@bitgo/sdk-api 2.0.0-hotfix.0 → 2.1.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 (98) hide show
  1. package/dist/package.json +33 -28
  2. package/dist/src/api.d.ts +9 -8
  3. package/dist/src/api.d.ts.map +1 -1
  4. package/dist/src/api.js +132 -72
  5. package/dist/src/bitgoAPI.d.ts +366 -22
  6. package/dist/src/bitgoAPI.d.ts.map +1 -1
  7. package/dist/src/bitgoAPI.js +1286 -212
  8. package/dist/src/encrypt.d.ts +16 -6
  9. package/dist/src/encrypt.d.ts.map +1 -1
  10. package/dist/src/encrypt.js +92 -14
  11. package/dist/src/encryptV2.d.ts +68 -0
  12. package/dist/src/encryptV2.d.ts.map +1 -0
  13. package/dist/src/encryptV2.js +202 -0
  14. package/dist/src/encryptionSession.d.ts +34 -0
  15. package/dist/src/encryptionSession.d.ts.map +1 -0
  16. package/dist/src/encryptionSession.js +95 -0
  17. package/dist/src/index.d.ts +2 -1
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +8 -3
  20. package/dist/src/types.d.ts +195 -65
  21. package/dist/src/types.d.ts.map +1 -1
  22. package/dist/src/types.js +5 -15
  23. package/dist/src/util.d.ts +12 -8
  24. package/dist/src/util.d.ts.map +1 -1
  25. package/dist/src/util.js +54 -20
  26. package/dist/src/v1/blockchain.d.ts +5 -0
  27. package/dist/src/v1/blockchain.d.ts.map +1 -0
  28. package/dist/src/v1/blockchain.js +127 -0
  29. package/dist/src/v1/keychains.d.ts +5 -0
  30. package/dist/src/v1/keychains.d.ts.map +1 -0
  31. package/dist/src/v1/keychains.js +328 -0
  32. package/dist/src/v1/markets.d.ts +5 -0
  33. package/dist/src/v1/markets.d.ts.map +1 -0
  34. package/dist/src/v1/markets.js +68 -0
  35. package/dist/src/v1/pendingapproval.d.ts +6 -0
  36. package/dist/src/v1/pendingapproval.d.ts.map +1 -0
  37. package/dist/src/v1/pendingapproval.js +361 -0
  38. package/dist/src/v1/pendingapprovals.d.ts +6 -0
  39. package/dist/src/v1/pendingapprovals.d.ts.map +1 -0
  40. package/dist/src/v1/pendingapprovals.js +102 -0
  41. package/dist/src/v1/signPsbt.d.ts +14 -0
  42. package/dist/src/v1/signPsbt.d.ts.map +1 -0
  43. package/dist/src/v1/signPsbt.js +69 -0
  44. package/dist/src/v1/transactionBuilder.d.ts +5 -0
  45. package/dist/src/v1/transactionBuilder.d.ts.map +1 -0
  46. package/dist/src/v1/transactionBuilder.js +1034 -0
  47. package/dist/src/v1/travelRule.d.ts +5 -0
  48. package/dist/src/v1/travelRule.d.ts.map +1 -0
  49. package/dist/src/v1/travelRule.js +316 -0
  50. package/dist/src/v1/verifyAddress.d.ts +6 -0
  51. package/dist/src/v1/verifyAddress.d.ts.map +1 -0
  52. package/dist/src/v1/verifyAddress.js +50 -0
  53. package/dist/src/v1/wallet.d.ts +6 -0
  54. package/dist/src/v1/wallet.d.ts.map +1 -0
  55. package/dist/src/v1/wallet.js +2366 -0
  56. package/dist/src/v1/wallets.d.ts +5 -0
  57. package/dist/src/v1/wallets.d.ts.map +1 -0
  58. package/dist/src/v1/wallets.js +537 -0
  59. package/dist/test/unit/api.d.ts +2 -0
  60. package/dist/test/unit/api.d.ts.map +1 -0
  61. package/dist/test/unit/api.js +307 -0
  62. package/dist/test/unit/bitgoAPI.d.ts +2 -0
  63. package/dist/test/unit/bitgoAPI.d.ts.map +1 -0
  64. package/dist/test/unit/bitgoAPI.js +1001 -0
  65. package/dist/test/unit/encrypt.d.ts +2 -0
  66. package/dist/test/unit/encrypt.d.ts.map +1 -0
  67. package/dist/test/unit/encrypt.js +377 -0
  68. package/dist/test/unit/hmacStrategy.d.ts +2 -0
  69. package/dist/test/unit/hmacStrategy.d.ts.map +1 -0
  70. package/dist/test/unit/hmacStrategy.js +136 -0
  71. package/dist/test/unit/utils.d.ts +2 -0
  72. package/dist/test/unit/utils.d.ts.map +1 -0
  73. package/dist/test/unit/utils.js +65 -0
  74. package/dist/test/unit/v1/fixtures/accelerate-tx.d.ts +4 -0
  75. package/dist/test/unit/v1/fixtures/accelerate-tx.d.ts.map +1 -0
  76. package/dist/test/unit/v1/fixtures/accelerate-tx.js +53 -0
  77. package/dist/test/unit/v1/fixtures/index.d.ts +3 -0
  78. package/dist/test/unit/v1/fixtures/index.d.ts.map +1 -0
  79. package/dist/test/unit/v1/fixtures/index.js +24 -0
  80. package/dist/test/unit/v1/signPsbt.d.ts +2 -0
  81. package/dist/test/unit/v1/signPsbt.d.ts.map +1 -0
  82. package/dist/test/unit/v1/signPsbt.js +53 -0
  83. package/dist/test/unit/v1/travelRule.d.ts +2 -0
  84. package/dist/test/unit/v1/travelRule.d.ts.map +1 -0
  85. package/dist/test/unit/v1/travelRule.js +125 -0
  86. package/dist/test/unit/v1/wallet.d.ts +2 -0
  87. package/dist/test/unit/v1/wallet.d.ts.map +1 -0
  88. package/dist/test/unit/v1/wallet.js +1658 -0
  89. package/dist/tsconfig.tsbuildinfo +1 -5259
  90. package/package.json +33 -28
  91. package/.eslintignore +0 -5
  92. package/CHANGELOG.md +0 -67
  93. package/dist/src/bip32path.d.ts +0 -24
  94. package/dist/src/bip32path.d.ts.map +0 -1
  95. package/dist/src/bip32path.js +0 -45
  96. package/dist/web/browser.html +0 -1
  97. package/dist/web/main.js +0 -2
  98. package/dist/web/main.js.LICENSE.txt +0 -30
package/dist/src/util.js CHANGED
@@ -1,30 +1,64 @@
1
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAddressP2PKH = exports.makeRandomKey = exports.getNetwork = void 0;
4
- const utxolib = require("@bitgo/utxo-lib");
36
+ exports.getNetwork = getNetwork;
37
+ exports.tryPromise = tryPromise;
38
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
5
39
  const sdk_core_1 = require("@bitgo/sdk-core");
6
40
  function getNetwork(network) {
7
41
  network = network || sdk_core_1.common.getNetwork();
8
42
  return utxolib.networks[network];
9
43
  }
10
- exports.getNetwork = getNetwork;
11
- function makeRandomKey() {
12
- return utxolib.ECPair.makeRandom({ network: getNetwork() });
13
- }
14
- exports.makeRandomKey = makeRandomKey;
15
- function getAddressP2PKH(key) {
16
- let pubkey;
17
- if ('getPublicKeyBuffer' in key) {
18
- pubkey = key.getPublicKeyBuffer();
19
- }
20
- else {
21
- pubkey = key.publicKey;
44
+ /**
45
+ * A native Promise-based replacement for Bluebird.try
46
+ *
47
+ * This function executes the provided function and returns a Promise.
48
+ * If the function throws synchronously, the exception is caught and returned as a rejected Promise.
49
+ * If the function returns a Promise, that Promise is returned.
50
+ * If the function returns any other value, a resolved Promise with that value is returned.
51
+ *
52
+ * @param {Function} fn - The function to execute
53
+ * @returns {Promise<T>} A promise that resolves with the return value of fn or rejects with any error thrown
54
+ */
55
+ function tryPromise(fn) {
56
+ try {
57
+ const result = fn();
58
+ return Promise.resolve(result);
22
59
  }
23
- const { address } = utxolib.payments.p2pkh({ pubkey, network: key.network });
24
- if (!address) {
25
- throw new Error('could not compute address');
60
+ catch (error) {
61
+ return Promise.reject(error);
26
62
  }
27
- return address;
28
63
  }
29
- exports.getAddressP2PKH = getAddressP2PKH;
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUEyQztBQUMzQyw4Q0FBb0Q7QUFFcEQsU0FBZ0IsVUFBVSxDQUFDLE9BQW1CO0lBQzVDLE9BQU8sR0FBRyxPQUFPLElBQUksaUJBQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUhELGdDQUdDO0FBRUQsU0FBZ0IsYUFBYTtJQUMzQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBOEIsRUFBRSxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUZELHNDQUVDO0FBT0QsU0FBZ0IsZUFBZSxDQUFDLEdBQWtEO0lBQ2hGLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxvQkFBb0IsSUFBSSxHQUFHLEVBQUU7UUFDL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQ25DO1NBQU07UUFDTCxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztLQUN4QjtJQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQW1DLEVBQUUsQ0FBQyxDQUFDO0lBQ3pHLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDOUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBWkQsMENBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBjb21tb24sIFYxTmV0d29yayB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXR3b3JrKG5ldHdvcms/OiBWMU5ldHdvcmspOiB1dHhvbGliLk5ldHdvcmsge1xuICBuZXR3b3JrID0gbmV0d29yayB8fCBjb21tb24uZ2V0TmV0d29yaygpO1xuICByZXR1cm4gdXR4b2xpYi5uZXR3b3Jrc1tuZXR3b3JrXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSYW5kb21LZXkoKTogdXR4b2xpYi5FQ1BhaXIuRUNQYWlySW50ZXJmYWNlIHtcbiAgcmV0dXJuIHV0eG9saWIuRUNQYWlyLm1ha2VSYW5kb20oeyBuZXR3b3JrOiBnZXROZXR3b3JrKCkgYXMgdXR4b2xpYi5CaXRjb2luSlNOZXR3b3JrIH0pO1xufVxuXG5pbnRlcmZhY2UgTGVnYWN5RUNQYWlyIHtcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrO1xuICBnZXRQdWJsaWNLZXlCdWZmZXIoKTogQnVmZmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc1AyUEtIKGtleTogdXR4b2xpYi5FQ1BhaXIuRUNQYWlySW50ZXJmYWNlIHwgTGVnYWN5RUNQYWlyKTogc3RyaW5nIHtcbiAgbGV0IHB1YmtleTtcbiAgaWYgKCdnZXRQdWJsaWNLZXlCdWZmZXInIGluIGtleSkge1xuICAgIHB1YmtleSA9IGtleS5nZXRQdWJsaWNLZXlCdWZmZXIoKTtcbiAgfSBlbHNlIHtcbiAgICBwdWJrZXkgPSBrZXkucHVibGljS2V5O1xuICB9XG4gIGNvbnN0IHsgYWRkcmVzcyB9ID0gdXR4b2xpYi5wYXltZW50cy5wMnBraCh7IHB1YmtleSwgbmV0d29yazoga2V5Lm5ldHdvcmsgYXMgdXR4b2xpYi5CaXRjb2luSlNOZXR3b3JrIH0pO1xuICBpZiAoIWFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBjb21wdXRlIGFkZHJlc3MnKTtcbiAgfVxuICByZXR1cm4gYWRkcmVzcztcbn1cbiJdfQ==
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsZ0NBR0M7QUFhRCxnQ0FPQztBQTFCRCx5REFBMkM7QUFDM0MsOENBQW9EO0FBRXBELFNBQWdCLFVBQVUsQ0FBQyxPQUFtQjtJQUM1QyxPQUFPLEdBQUcsT0FBTyxJQUFJLGlCQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFJLEVBQXdCO0lBQ3BELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGNvbW1vbiwgVjFOZXR3b3JrIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ldHdvcmsobmV0d29yaz86IFYxTmV0d29yayk6IHV0eG9saWIuTmV0d29yayB7XG4gIG5ldHdvcmsgPSBuZXR3b3JrIHx8IGNvbW1vbi5nZXROZXR3b3JrKCk7XG4gIHJldHVybiB1dHhvbGliLm5ldHdvcmtzW25ldHdvcmtdO1xufVxuXG4vKipcbiAqIEEgbmF0aXZlIFByb21pc2UtYmFzZWQgcmVwbGFjZW1lbnQgZm9yIEJsdWViaXJkLnRyeVxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgUHJvbWlzZS5cbiAqIElmIHRoZSBmdW5jdGlvbiB0aHJvd3Mgc3luY2hyb25vdXNseSwgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQgYW5kIHJldHVybmVkIGFzIGEgcmVqZWN0ZWQgUHJvbWlzZS5cbiAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgUHJvbWlzZSwgdGhhdCBQcm9taXNlIGlzIHJldHVybmVkLlxuICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW55IG90aGVyIHZhbHVlLCBhIHJlc29sdmVkIFByb21pc2Ugd2l0aCB0aGF0IHZhbHVlIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZm4gb3IgcmVqZWN0cyB3aXRoIGFueSBlcnJvciB0aHJvd25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeVByb21pc2U8VD4oZm46ICgpID0+IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZm4oKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=blockchain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain.d.ts","sourceRoot":"","sources":["../../../src/v1/blockchain.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * @hidden
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ /**
10
+ */
11
+ //
12
+ // Blockchain Object
13
+ // BitGo accessor to a any Bitcoin address.
14
+ // Using this does not require authentication and is unrelated to BitGo wallet management.
15
+ //
16
+ // Copyright 2014, BitGo, Inc. All Rights Reserved.
17
+ //
18
+ const lodash_1 = __importDefault(require("lodash"));
19
+ const sdk_core_1 = require("@bitgo/sdk-core");
20
+ //
21
+ // Constructor
22
+ //
23
+ const Blockchain = function (bitgo) {
24
+ // @ts-expect-error - no implicit this
25
+ this.bitgo = bitgo;
26
+ };
27
+ //
28
+ // Get an address
29
+ // Fetch an address summary information.
30
+ // Includes balance and pending balance.
31
+ //
32
+ // Parameters include:
33
+ // address: the address to get
34
+ //
35
+ Blockchain.prototype.getAddress = function (params, callback) {
36
+ params = params || {};
37
+ sdk_core_1.common.validateParams(params, ['address'], [], callback);
38
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/address/' + params.address)).result())
39
+ .then(callback)
40
+ .catch(callback);
41
+ };
42
+ //
43
+ // Get address transactions
44
+ // List the transactions for a given address
45
+ // Parameters include:
46
+ // address: the address to get transactions for
47
+ //
48
+ Blockchain.prototype.getAddressTransactions = function (params, callback) {
49
+ params = params || {};
50
+ sdk_core_1.common.validateParams(params, ['address'], [], callback);
51
+ // TODO: support start and limit params
52
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/address/' + params.address + '/tx')).result())
53
+ .then(callback)
54
+ .catch(callback);
55
+ };
56
+ //
57
+ // Unspent Transactions
58
+ // List the unspent outputs for a given address
59
+ // Parameters include:
60
+ // address: the address to get unspent transactions
61
+ // limit: return enough unspents to accumulate to at least this amount (in satoshis).
62
+ //
63
+ Blockchain.prototype.getAddressUnspents = function (params, callback) {
64
+ params = params || {};
65
+ sdk_core_1.common.validateParams(params, ['address'], [], callback);
66
+ let url = this.bitgo.url('/address/' + params.address + '/unspents');
67
+ if (params.limit) {
68
+ if (!lodash_1.default.isInteger(params.limit)) {
69
+ throw new Error('invalid limit - number expected');
70
+ }
71
+ url += '?limit=' + params.limit * 1e8;
72
+ }
73
+ return Promise.resolve(this.bitgo.get(url).result())
74
+ .then(function (body) {
75
+ return body.unspents;
76
+ })
77
+ .then(callback)
78
+ .catch(callback);
79
+ };
80
+ //
81
+ // Get transaction
82
+ // Fetch transaction details.
83
+ //
84
+ // Parameters include:
85
+ // id: the transaction id to get
86
+ //
87
+ Blockchain.prototype.getTransaction = function (params, callback) {
88
+ params = params || {};
89
+ sdk_core_1.common.validateParams(params, ['id'], [], callback);
90
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/tx/' + params.id)).result())
91
+ .then(callback)
92
+ .catch(callback);
93
+ };
94
+ //
95
+ // Get transaction that spends a specific output
96
+ // Fetch transaction details.
97
+ //
98
+ // Parameters include:
99
+ // txid: the transaction id of the output
100
+ // vout: the position of the output on the transaction that created it
101
+ //
102
+ Blockchain.prototype.getTransactionByInput = function (params, callback) {
103
+ params = params || {};
104
+ sdk_core_1.common.validateParams(params, ['txid'], [], callback);
105
+ if (!lodash_1.default.isInteger(params.vout)) {
106
+ throw new Error('invalid vout - number expected');
107
+ }
108
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/tx/input/' + params.txid + '/' + params.vout)).result())
109
+ .then(callback)
110
+ .catch(callback);
111
+ };
112
+ //
113
+ // Get block
114
+ // Fetch block details.
115
+ //
116
+ // Parameters include:
117
+ // id: the block hash to get, or latest for the latest
118
+ //
119
+ Blockchain.prototype.getBlock = function (params, callback) {
120
+ params = params || {};
121
+ sdk_core_1.common.validateParams(params, ['id'], [], callback);
122
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/block/' + params.id)).result())
123
+ .then(callback)
124
+ .catch(callback);
125
+ };
126
+ module.exports = Blockchain;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tjaGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS9ibG9ja2NoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRixvREFBb0Q7QUFDcEQsRUFBRTtBQUVGLG9EQUF1QjtBQUV2Qiw4Q0FBeUM7QUFFekMsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLO0lBQ2hDLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsaUJBQWlCO0FBQ2pCLHdDQUF3QztBQUN4Qyx3Q0FBd0M7QUFDeEMsRUFBRTtBQUNGLHNCQUFzQjtBQUN0QixnQ0FBZ0M7QUFDaEMsRUFBRTtBQUNGLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDMUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDMUYsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsMkJBQTJCO0FBQzNCLDRDQUE0QztB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QUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuRixJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBCbG9ja2NoYWluIE9iamVjdFxuLy8gQml0R28gYWNjZXNzb3IgdG8gYSBhbnkgQml0Y29pbiBhZGRyZXNzLlxuLy8gVXNpbmcgdGhpcyBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGFuZCBpcyB1bnJlbGF0ZWQgdG8gQml0R28gd2FsbGV0IG1hbmFnZW1lbnQuXG4vL1xuLy8gQ29weXJpZ2h0IDIwMTQsIEJpdEdvLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgY29tbW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuLy9cbi8vIENvbnN0cnVjdG9yXG4vL1xuY29uc3QgQmxvY2tjaGFpbiA9IGZ1bmN0aW9uIChiaXRnbykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICB0aGlzLmJpdGdvID0gYml0Z287XG59O1xuXG4vL1xuLy8gR2V0IGFuIGFkZHJlc3Ncbi8vIEZldGNoIGFuIGFkZHJlc3Mgc3VtbWFyeSBpbmZvcm1hdGlvbi5cbi8vIEluY2x1ZGVzIGJhbGFuY2UgYW5kIHBlbmRpbmcgYmFsYW5jZS5cbi8vXG4vLyBQYXJhbWV0ZXJzIGluY2x1ZGU6XG4vLyAgIGFkZHJlc3M6IHRoZSBhZGRyZXNzIHRvIGdldFxuLy9cbkJsb2NrY2hhaW4ucHJvdG90eXBlLmdldEFkZHJlc3MgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsnYWRkcmVzcyddLCBbXSwgY2FsbGJhY2spO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby51cmwoJy9hZGRyZXNzLycgKyBwYXJhbXMuYWRkcmVzcykpLnJlc3VsdCgpKVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gR2V0IGFkZHJlc3MgdHJhbnNhY3Rpb25zXG4vLyBMaXN0IHRoZSB0cmFuc2FjdGlvbnMgZm9yIGEgZ2l2ZW4gYWRkcmVzc1xuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICBhZGRyZXNzOiB0aGUgYWRkcmVzcyB0byBnZXQgdHJhbnNhY3Rpb25zIGZvclxuLy9cbkJsb2NrY2hhaW4ucHJvdG90eXBlLmdldEFkZHJlc3NUcmFuc2FjdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsnYWRkcmVzcyddLCBbXSwgY2FsbGJhY2spO1xuXG4gIC8vIFRPRE86IHN1cHBvcnQgc3RhcnQgYW5kIGxpbWl0IHBhcmFtc1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvYWRkcmVzcy8nICsgcGFyYW1zLmFkZHJlc3MgKyAnL3R4JykpLnJlc3VsdCgpKVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gVW5zcGVudCBUcmFuc2FjdGlvbnNcbi8vIExpc3QgdGhlIHVuc3BlbnQgb3V0cHV0cyBmb3IgYSBnaXZlbiBhZGRyZXNzXG4vLyBQYXJhbWV0ZXJzIGluY2x1ZGU6XG4vLyAgIGFkZHJlc3M6IHRoZSBhZGRyZXNzIHRvIGdldCB1bnNwZW50IHRyYW5zYWN0aW9uc1xuLy8gICBsaW1pdDogcmV0dXJuIGVub3VnaCB1bnNwZW50cyB0byBhY2N1bXVsYXRlIHRvIGF0IGxlYXN0IHRoaXMgYW1vdW50IChpbiBzYXRvc2hpcykuXG4vL1xuQmxvY2tjaGFpbi5wcm90b3R5cGUuZ2V0QWRkcmVzc1Vuc3BlbnRzID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ2FkZHJlc3MnXSwgW10sIGNhbGxiYWNrKTtcblxuICBsZXQgdXJsID0gdGhpcy5iaXRnby51cmwoJy9hZGRyZXNzLycgKyBwYXJhbXMuYWRkcmVzcyArICcvdW5zcGVudHMnKTtcbiAgaWYgKHBhcmFtcy5saW1pdCkge1xuICAgIGlmICghXy5pc0ludGVnZXIocGFyYW1zLmxpbWl0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxpbWl0IC0gbnVtYmVyIGV4cGVjdGVkJyk7XG4gICAgfVxuICAgIHVybCArPSAnP2xpbWl0PScgKyBwYXJhbXMubGltaXQgKiAxZTg7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHVybCkucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIHJldHVybiBib2R5LnVuc3BlbnRzO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBHZXQgdHJhbnNhY3Rpb25cbi8vIEZldGNoIHRyYW5zYWN0aW9uIGRldGFpbHMuXG4vL1xuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICBpZDogdGhlIHRyYW5zYWN0aW9uIGlkIHRvIGdldFxuLy9cbkJsb2NrY2hhaW4ucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ2lkJ10sIFtdLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLnVybCgnL3R4LycgKyBwYXJhbXMuaWQpKS5yZXN1bHQoKSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIEdldCB0cmFuc2FjdGlvbiB0aGF0IHNwZW5kcyBhIHNwZWNpZmljIG91dHB1dFxuLy8gRmV0Y2ggdHJhbnNhY3Rpb24gZGV0YWlscy5cbi8vXG4vLyBQYXJhbWV0ZXJzIGluY2x1ZGU6XG4vLyAgIHR4aWQ6IHRoZSB0cmFuc2FjdGlvbiBpZCBvZiB0aGUgb3V0cHV0XG4vLyAgIHZvdXQ6IHRoZSBwb3NpdGlvbiBvZiB0aGUgb3V0cHV0IG9uIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGNyZWF0ZWQgaXRcbi8vXG5CbG9ja2NoYWluLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkJ5SW5wdXQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBbXSwgY2FsbGJhY2spO1xuICBpZiAoIV8uaXNJbnRlZ2VyKHBhcmFtcy52b3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2b3V0IC0gbnVtYmVyIGV4cGVjdGVkJyk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLnVybCgnL3R4L2lucHV0LycgKyBwYXJhbXMudHhpZCArICcvJyArIHBhcmFtcy52b3V0KSkucmVzdWx0KCkpXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBHZXQgYmxvY2tcbi8vIEZldGNoIGJsb2NrIGRldGFpbHMuXG4vL1xuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICBpZDogdGhlIGJsb2NrIGhhc2ggdG8gZ2V0LCBvciBsYXRlc3QgZm9yIHRoZSBsYXRlc3Rcbi8vXG5CbG9ja2NoYWluLnByb3RvdHlwZS5nZXRCbG9jayA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydpZCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby51cmwoJy9ibG9jay8nICsgcGFyYW1zLmlkKSkucmVzdWx0KCkpXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQmxvY2tjaGFpbjtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=keychains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychains.d.ts","sourceRoot":"","sources":["../../../src/v1/keychains.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ /**
3
+ * @hidden
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ */
8
+ //
9
+ // Keychains Object
10
+ // BitGo accessor to a user's keychain.
11
+ //
12
+ // Copyright 2014, BitGo, Inc. All Rights Reserved.
13
+ //
14
+ const utxo_lib_1 = require("@bitgo/utxo-lib");
15
+ const crypto_1 = require("crypto");
16
+ const sdk_core_1 = require("@bitgo/sdk-core");
17
+ const _ = require('lodash');
18
+ //
19
+ // Constructor
20
+ //
21
+ const Keychains = function (bitgo) {
22
+ // @ts-expect-error - no implicit this
23
+ this.bitgo = bitgo;
24
+ };
25
+ //
26
+ // isValid
27
+ // Tests a xpub or xprv string to see if it is a valid keychain.
28
+ //
29
+ Keychains.prototype.isValid = function (params) {
30
+ params = params || {};
31
+ sdk_core_1.common.validateParams(params, [], []);
32
+ if (!_.isString(params.key) && !_.isObject(params.key)) {
33
+ throw new Error('key must be a string or object');
34
+ }
35
+ try {
36
+ if (!params.key.path) {
37
+ utxo_lib_1.bip32.fromBase58(params.key);
38
+ }
39
+ else {
40
+ utxo_lib_1.bip32.fromBase58(params.key.xpub).derivePath((0, sdk_core_1.sanitizeLegacyPath)(params.key.path));
41
+ }
42
+ return true;
43
+ }
44
+ catch (e) {
45
+ return false;
46
+ }
47
+ };
48
+ //
49
+ // create
50
+ // Create a new keychain locally.
51
+ // Does not send the keychain to bitgo, only creates locally.
52
+ // If |seed| is provided, used to seed the keychain. Otherwise,
53
+ // a random keychain is created.
54
+ //
55
+ Keychains.prototype.create = function (params) {
56
+ params = params || {};
57
+ sdk_core_1.common.validateParams(params, [], []);
58
+ let seed;
59
+ if (!params.seed) {
60
+ // An extended private key has both a normal 256 bit private key and a 256
61
+ // bit chain code, both of which must be random. 512 bits is therefore the
62
+ // maximum entropy and gives us maximum security against cracking.
63
+ seed = (0, crypto_1.randomBytes)(512 / 8);
64
+ }
65
+ else {
66
+ seed = params.seed;
67
+ }
68
+ const extendedKey = utxo_lib_1.bip32.fromSeed(seed);
69
+ const xpub = extendedKey.neutered().toBase58();
70
+ let ethAddress;
71
+ try {
72
+ ethAddress = sdk_core_1.Util.xpubToEthAddress(xpub);
73
+ }
74
+ catch (e) {
75
+ // ethereum is unavailable
76
+ }
77
+ return {
78
+ xpub: xpub,
79
+ xprv: extendedKey.toBase58(),
80
+ ethAddress: ethAddress,
81
+ };
82
+ };
83
+ // used by deriveLocal
84
+ const apiResponse = function (status, result, message) {
85
+ const err = new Error(message);
86
+ err.status = status;
87
+ err.result = result;
88
+ return err;
89
+ };
90
+ //
91
+ // deriveLocal
92
+ // Locally derives a keychain from a top level BIP32 string, given a path.
93
+ //
94
+ Keychains.prototype.deriveLocal = function (params) {
95
+ params = params || {};
96
+ sdk_core_1.common.validateParams(params, ['path'], ['xprv', 'xpub']);
97
+ if (!params.xprv && !params.xpub) {
98
+ throw new Error('must provide an xpub or xprv for derivation.');
99
+ }
100
+ if (params.xprv && params.xpub) {
101
+ throw new Error('cannot provide both xpub and xprv');
102
+ }
103
+ let hdNode;
104
+ try {
105
+ hdNode = utxo_lib_1.bip32.fromBase58(params.xprv || params.xpub);
106
+ }
107
+ catch (e) {
108
+ throw apiResponse(400, {}, 'Unable to parse the xprv or xpub');
109
+ }
110
+ let derivedNode;
111
+ try {
112
+ derivedNode = hdNode.derivePath((0, sdk_core_1.sanitizeLegacyPath)(params.path));
113
+ }
114
+ catch (e) {
115
+ throw apiResponse(400, {}, 'Unable to derive HD key from path');
116
+ }
117
+ const xpub = derivedNode.neutered().toBase58();
118
+ let ethAddress;
119
+ try {
120
+ ethAddress = sdk_core_1.Util.xpubToEthAddress(xpub);
121
+ }
122
+ catch (e) {
123
+ // ethereum is unavailable
124
+ }
125
+ return {
126
+ path: params.path,
127
+ xpub: xpub,
128
+ xprv: params.xprv && derivedNode.toBase58(),
129
+ ethAddress: ethAddress,
130
+ };
131
+ };
132
+ //
133
+ // list
134
+ // List the user's keychains
135
+ //
136
+ Keychains.prototype.list = function (params, callback) {
137
+ params = params || {};
138
+ sdk_core_1.common.validateParams(params, [], [], callback);
139
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/keychain')).result('keychains'))
140
+ .then(function (keychains) {
141
+ keychains.map(function (keychain) {
142
+ if (keychain.xpub &&
143
+ keychain.ethAddress &&
144
+ sdk_core_1.Util.xpubToEthAddress &&
145
+ keychain.ethAddress !== sdk_core_1.Util.xpubToEthAddress(keychain.xpub)) {
146
+ throw new Error('ethAddress and xpub do not match');
147
+ }
148
+ });
149
+ return keychains;
150
+ })
151
+ .then(callback)
152
+ .catch(callback);
153
+ };
154
+ /**
155
+ * iterates through all keys associated with the user, decrypts them with the old password and encrypts them with the
156
+ * new password
157
+ * @param params.oldPassword {String} - The old password used for encrypting the key
158
+ * @param params.newPassword {String} - The new password to be used for encrypting the key
159
+ * @param callback
160
+ * @returns result.keychains {Object} - e.g.:
161
+ * {
162
+ * xpub1: encryptedPrv1,
163
+ * xpub2: encryptedPrv2,
164
+ * ...
165
+ * }
166
+ * @returns result.version {Number}
167
+ */
168
+ Keychains.prototype.updatePassword = function (params, callback) {
169
+ return async function coUpdatePassword() {
170
+ sdk_core_1.common.validateParams(params, ['oldPassword', 'newPassword'], [], callback);
171
+ // @ts-expect-error - no implicit this
172
+ const encrypted = await this.bitgo.post(this.bitgo.url('/user/encrypted')).result();
173
+ const newKeychains = {};
174
+ // @ts-expect-error - no implicit this
175
+ const self = this;
176
+ for (const [xpub, oldEncryptedXprv] of Object.entries(encrypted.keychains)) {
177
+ try {
178
+ const decryptedPrv = await self.bitgo.decrypt({
179
+ input: oldEncryptedXprv,
180
+ password: params.oldPassword,
181
+ });
182
+ const encryptionVersion = (0, sdk_core_1.isV2Envelope)(oldEncryptedXprv) ? 2 : 1;
183
+ const newEncryptedPrv = await self.bitgo.encrypt({
184
+ input: decryptedPrv,
185
+ password: params.newPassword,
186
+ encryptionVersion,
187
+ });
188
+ newKeychains[xpub] = newEncryptedPrv;
189
+ }
190
+ catch (e) {
191
+ // decrypting the keychain with the old password didn't work so we just keep it the way it is
192
+ newKeychains[xpub] = oldEncryptedXprv;
193
+ }
194
+ }
195
+ return { keychains: newKeychains, version: encrypted.version };
196
+ }
197
+ .call(this)
198
+ .then(callback)
199
+ .catch(callback);
200
+ };
201
+ //
202
+ // add
203
+ // Add a new keychain
204
+ //
205
+ Keychains.prototype.add = function (params, callback) {
206
+ params = params || {};
207
+ sdk_core_1.common.validateParams(params, ['xpub'], ['encryptedXprv', 'type', 'isLedger'], callback);
208
+ return Promise.resolve(this.bitgo
209
+ .post(this.bitgo.url('/keychain'))
210
+ .send({
211
+ xpub: params.xpub,
212
+ encryptedXprv: params.encryptedXprv,
213
+ type: params.type,
214
+ originalPasscodeEncryptionCode: params.originalPasscodeEncryptionCode,
215
+ isLedger: params.isLedger,
216
+ })
217
+ .result())
218
+ .then(function (keychain) {
219
+ if (keychain.xpub &&
220
+ keychain.ethAddress &&
221
+ sdk_core_1.Util.xpubToEthAddress &&
222
+ keychain.ethAddress !== sdk_core_1.Util.xpubToEthAddress(keychain.xpub)) {
223
+ throw new Error('ethAddress and xpub do not match');
224
+ }
225
+ return keychain;
226
+ })
227
+ .then(callback)
228
+ .catch(callback);
229
+ };
230
+ //
231
+ // createBitGo
232
+ // Add a new BitGo server keychain
233
+ //
234
+ Keychains.prototype.createBitGo = function (params, callback) {
235
+ params = params || {};
236
+ sdk_core_1.common.validateParams(params, [], [], callback);
237
+ return Promise.resolve(this.bitgo.post(this.bitgo.url('/keychain/bitgo')).send(params).result())
238
+ .then(function (keychain) {
239
+ if (keychain.xpub &&
240
+ keychain.ethAddress &&
241
+ sdk_core_1.Util.xpubToEthAddress &&
242
+ keychain.ethAddress !== sdk_core_1.Util.xpubToEthAddress(keychain.xpub)) {
243
+ throw new Error('ethAddress and xpub do not match');
244
+ }
245
+ return keychain;
246
+ })
247
+ .then(callback)
248
+ .catch(callback);
249
+ };
250
+ //
251
+ // createBackup
252
+ // Create a new backup keychain through bitgo - often used for creating a keychain on a KRS
253
+ //
254
+ Keychains.prototype.createBackup = function (params, callback) {
255
+ params = params || {};
256
+ sdk_core_1.common.validateParams(params, ['provider'], [], callback);
257
+ return Promise.resolve(this.bitgo.post(this.bitgo.url('/keychain/backup')).send(params).result())
258
+ .then(function (keychain) {
259
+ // not all keychains have an xpub
260
+ if (keychain.xpub &&
261
+ keychain.ethAddress &&
262
+ sdk_core_1.Util.xpubToEthAddress &&
263
+ keychain.ethAddress !== sdk_core_1.Util.xpubToEthAddress(keychain.xpub)) {
264
+ throw new Error('ethAddress and xpub do not match');
265
+ }
266
+ return keychain;
267
+ })
268
+ .then(callback)
269
+ .catch(callback);
270
+ };
271
+ //
272
+ // get
273
+ // Fetch an existing keychain
274
+ // Parameters include:
275
+ // xpub: the xpub of the key to lookup (required)
276
+ //
277
+ Keychains.prototype.get = function (params, callback) {
278
+ params = params || {};
279
+ sdk_core_1.common.validateParams(params, [], ['xpub', 'ethAddress'], callback);
280
+ if (!params.xpub && !params.ethAddress) {
281
+ throw new Error('xpub or ethAddress must be defined');
282
+ }
283
+ const id = params.xpub || params.ethAddress;
284
+ return Promise.resolve(this.bitgo
285
+ .post(this.bitgo.url('/keychain/' + encodeURIComponent(id)))
286
+ .send({})
287
+ .result())
288
+ .then(function (keychain) {
289
+ if (keychain.xpub &&
290
+ keychain.ethAddress &&
291
+ sdk_core_1.Util.xpubToEthAddress &&
292
+ keychain.ethAddress !== sdk_core_1.Util.xpubToEthAddress(keychain.xpub)) {
293
+ throw new Error('ethAddress and xpub do not match');
294
+ }
295
+ return keychain;
296
+ })
297
+ .then(callback)
298
+ .catch(callback);
299
+ };
300
+ //
301
+ // update
302
+ // Update an existing keychain
303
+ // Parameters include:
304
+ // xpub: the xpub of the key to lookup (required)
305
+ //
306
+ Keychains.prototype.update = function (params, callback) {
307
+ params = params || {};
308
+ sdk_core_1.common.validateParams(params, ['xpub'], ['encryptedXprv'], callback);
309
+ return Promise.resolve(this.bitgo
310
+ .put(this.bitgo.url('/keychain/' + params.xpub))
311
+ .send({
312
+ encryptedXprv: params.encryptedXprv,
313
+ })
314
+ .result())
315
+ .then(function (keychain) {
316
+ if (keychain.xpub &&
317
+ keychain.ethAddress &&
318
+ sdk_core_1.Util.xpubToEthAddress &&
319
+ keychain.ethAddress !== sdk_core_1.Util.xpubToEthAddress(keychain.xpub)) {
320
+ throw new Error('ethAddress and xpub do not match');
321
+ }
322
+ return keychain;
323
+ })
324
+ .then(callback)
325
+ .catch(callback);
326
+ };
327
+ module.exports = Keychains;
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3YxL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7O0FBRUg7R0FDRztBQUNILEVBQUU7QUFDRixtQkFBbUI7QUFDbkIsdUNBQXVDO0FBQ3ZDLEVBQUU7QUFDRixvREFBb0Q7QUFDcEQsRUFBRTtBQUVGLDhDQUF3QztBQUN4QyxtQ0FBcUM7QUFDckMsOENBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU1QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUs7SUFDL0Isc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixVQUFVO0FBQ1YsZ0VBQWdFO0FBQ2hFLEVBQUU7QUFDRixTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLE1BQU07SUFDNUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsZ0JBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENB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QUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0MsSUFBSSxDQUFDO1FBQ0osYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO0tBQ3BDLENBQUM7U0FDRCxNQUFNLEVBQUUsQ0FDWjtTQUNFLElBQUksQ0FBQyxVQUFVLFFBQVE7UUFDdEIsSUFDRSxRQUFRLENBQUMsSUFBSTtZQUNiLFFBQVEsQ0FBQyxVQUFVO1lBQ25CLGVBQUksQ0FBQyxnQkFBZ0I7WUFDckIsUUFBUSxDQUFDLFVBQVUsS0FBSyxlQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM1RCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBLZXljaGFpbnMgT2JqZWN0XG4vLyBCaXRHbyBhY2Nlc3NvciB0byBhIHVzZXIncyBrZXljaGFpbi5cbi8vXG4vLyBDb3B5cmlnaHQgMjAxNCwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuXG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBjb21tb24sIGlzVjJFbnZlbG9wZSwgVXRpbCwgc2FuaXRpemVMZWdhY3lQYXRoIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxuLy9cbi8vIENvbnN0cnVjdG9yXG4vL1xuY29uc3QgS2V5Y2hhaW5zID0gZnVuY3Rpb24gKGJpdGdvKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBubyBpbXBsaWNpdCB0aGlzXG4gIHRoaXMuYml0Z28gPSBiaXRnbztcbn07XG5cbi8vXG4vLyBpc1ZhbGlkXG4vLyBUZXN0cyBhIHhwdWIgb3IgeHBydiBzdHJpbmcgdG8gc2VlIGlmIGl0IGlzIGEgdmFsaWQga2V5Y2hhaW4uXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSk7XG5cbiAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5rZXkpICYmICFfLmlzT2JqZWN0KHBhcmFtcy5rZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXkgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKCFwYXJhbXMua2V5LnBhdGgpIHtcbiAgICAgIGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleS54cHViKS5kZXJpdmVQYXRoKHNhbml0aXplTGVnYWN5UGF0aChwYXJhbXMua2V5LnBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8vXG4vLyBjcmVhdGVcbi8vIENyZWF0ZSBhIG5ldyBrZXljaGFpbiBsb2NhbGx5LlxuLy8gRG9lcyBub3Qgc2VuZCB0aGUga2V5Y2hhaW4gdG8gYml0Z28sIG9ubHkgY3JlYXRlcyBsb2NhbGx5LlxuLy8gSWYgfHNlZWR8IGlzIHByb3ZpZGVkLCB1c2VkIHRvIHNlZWQgdGhlIGtleWNoYWluLiAgT3RoZXJ3aXNlLFxuLy8gYSByYW5kb20ga2V5Y2hhaW4gaXMgY3JlYXRlZC5cbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10pO1xuXG4gIGxldCBzZWVkO1xuICBpZiAoIXBhcmFtcy5zZWVkKSB7XG4gICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAvLyBiaXQgY2hhaW4gY29kZSwgYm90aCBvZiB3aGljaCBtdXN0IGJlIHJhbmRvbS4gNTEyIGJpdHMgaXMgdGhlcmVmb3JlIHRoZVxuICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgfSBlbHNlIHtcbiAgICBzZWVkID0gcGFyYW1zLnNlZWQ7XG4gIH1cblxuICBjb25zdCBleHRlbmRlZEtleSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICBjb25zdCB4cHViID0gZXh0ZW5kZWRLZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuXG4gIGxldCBldGhBZGRyZXNzO1xuICB0cnkge1xuICAgIGV0aEFkZHJlc3MgPSBVdGlsLnhwdWJUb0V0aEFkZHJlc3MoeHB1Yik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBldGhlcmV1bSBpcyB1bmF2YWlsYWJsZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4cHViOiB4cHViLFxuICAgIHhwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgZXRoQWRkcmVzczogZXRoQWRkcmVzcyxcbiAgfTtcbn07XG5cbi8vIHVzZWQgYnkgZGVyaXZlTG9jYWxcbmNvbnN0IGFwaVJlc3BvbnNlID0gZnVuY3Rpb24gKHN0YXR1cywgcmVzdWx0LCBtZXNzYWdlKSB7XG4gIGNvbnN0IGVycjogYW55ID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnIuc3RhdHVzID0gc3RhdHVzO1xuICBlcnIucmVzdWx0ID0gcmVzdWx0O1xuICByZXR1cm4gZXJyO1xufTtcblxuLy9cbi8vIGRlcml2ZUxvY2FsXG4vLyBMb2NhbGx5IGRlcml2ZXMgYSBrZXljaGFpbiBmcm9tIGEgdG9wIGxldmVsIEJJUDMyIHN0cmluZywgZ2l2ZW4gYSBwYXRoLlxuLy9cbktleWNoYWlucy5wcm90b3R5cGUuZGVyaXZlTG9jYWwgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydwYXRoJ10sIFsneHBydicsICd4cHViJ10pO1xuXG4gIGlmICghcGFyYW1zLnhwcnYgJiYgIXBhcmFtcy54cHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgYW4geHB1YiBvciB4cHJ2IGZvciBkZXJpdmF0aW9uLicpO1xuICB9XG4gIGlmIChwYXJhbXMueHBydiAmJiBwYXJhbXMueHB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHByb3ZpZGUgYm90aCB4cHViIGFuZCB4cHJ2Jyk7XG4gIH1cblxuICBsZXQgaGROb2RlO1xuICB0cnkge1xuICAgIGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLnhwcnYgfHwgcGFyYW1zLnhwdWIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgYXBpUmVzcG9uc2UoNDAwLCB7fSwgJ1VuYWJsZSB0byBwYXJzZSB0aGUgeHBydiBvciB4cHViJyk7XG4gIH1cblxuICBsZXQgZGVyaXZlZE5vZGU7XG4gIHRyeSB7XG4gICAgZGVyaXZlZE5vZGUgPSBoZE5vZGUuZGVyaXZlUGF0aChzYW5pdGl6ZUxlZ2FjeVBhdGgocGFyYW1zLnBhdGgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IGFwaVJlc3BvbnNlKDQwMCwge30sICdVbmFibGUgdG8gZGVyaXZlIEhEIGtleSBmcm9tIHBhdGgnKTtcbiAgfVxuXG4gIGNvbnN0IHhwdWIgPSBkZXJpdmVkTm9kZS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG5cbiAgbGV0IGV0aEFkZHJlc3M7XG4gIHRyeSB7XG4gICAgZXRoQWRkcmVzcyA9IFV0aWwueHB1YlRvRXRoQWRkcmVzcyh4cHViKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGV0aGVyZXVtIGlzIHVuYXZhaWxhYmxlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgIHhwdWI6IHhwdWIsXG4gICAgeHBydjogcGFyYW1zLnhwcnYgJiYgZGVyaXZlZE5vZGUudG9CYXNlNTgoKSxcbiAgICBldGhBZGRyZXNzOiBldGhBZGRyZXNzLFxuICB9O1xufTtcblxuLy9cbi8vIGxpc3Rcbi8vIExpc3QgdGhlIHVzZXIncyBrZXljaGFpbnNcbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmxpc3QgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSwgY2FsbGJhY2spO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbicpKS5yZXN1bHQoJ2tleWNoYWlucycpKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbnMpIHtcbiAgICAgIGtleWNoYWlucy5tYXAoZnVuY3Rpb24gKGtleWNoYWluKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICAgIFV0aWwueHB1YlRvRXRoQWRkcmVzcyAmJlxuICAgICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V0aEFkZHJlc3MgYW5kIHhwdWIgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtleWNoYWlucztcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLCBkZWNyeXB0cyB0aGVtIHdpdGggdGhlIG9sZCBwYXNzd29yZCBhbmQgZW5jcnlwdHMgdGhlbSB3aXRoIHRoZVxuICogbmV3IHBhc3N3b3JkXG4gKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIHtTdHJpbmd9IC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAqIEBwYXJhbSBwYXJhbXMubmV3UGFzc3dvcmQge1N0cmluZ30gLSBUaGUgbmV3IHBhc3N3b3JkIHRvIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJucyByZXN1bHQua2V5Y2hhaW5zIHtPYmplY3R9IC0gZS5nLjpcbiAqICB7XG4gKiAgICB4cHViMTogZW5jcnlwdGVkUHJ2MSxcbiAqICAgIHhwdWIyOiBlbmNyeXB0ZWRQcnYyLFxuICogICAgLi4uXG4gKiAgfVxuICogIEByZXR1cm5zIHJlc3VsdC52ZXJzaW9uIHtOdW1iZXJ9XG4gKi9cbktleWNoYWlucy5wcm90b3R5cGUudXBkYXRlUGFzc3dvcmQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY29VcGRhdGVQYXNzd29yZCgpIHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ29sZFBhc3N3b3JkJywgJ25ld1Bhc3N3b3JkJ10sIFtdLCBjYWxsYmFjayk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby51cmwoJy91c2VyL2VuY3J5cHRlZCcpKS5yZXN1bHQoKTtcbiAgICBjb25zdCBuZXdLZXljaGFpbnMgPSB7fTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZvciAoY29uc3QgW3hwdWIsIG9sZEVuY3J5cHRlZFhwcnZdIG9mIE9iamVjdC5lbnRyaWVzKChlbmNyeXB0ZWQgYXMgYW55KS5rZXljaGFpbnMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSBhd2FpdCBzZWxmLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgICAgIGlucHV0OiBvbGRFbmNyeXB0ZWRYcHJ2IGFzIHN0cmluZyxcbiAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jcnlwdGlvblZlcnNpb24gPSBpc1YyRW52ZWxvcGUob2xkRW5jcnlwdGVkWHBydiBhcyBzdHJpbmcpID8gMiA6IDE7XG4gICAgICAgIGNvbnN0IG5ld0VuY3J5cHRlZFBydiA9IGF3YWl0IHNlbGYuYml0Z28uZW5jcnlwdCh7XG4gICAgICAgICAgaW5wdXQ6IGRlY3J5cHRlZFBydixcbiAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLm5ld1Bhc3N3b3JkLFxuICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICB9KTtcbiAgICAgICAgbmV3S2V5Y2hhaW5zW3hwdWJdID0gbmV3RW5jcnlwdGVkUHJ2O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkZWNyeXB0aW5nIHRoZSBrZXljaGFpbiB3aXRoIHRoZSBvbGQgcGFzc3dvcmQgZGlkbid0IHdvcmsgc28gd2UganVzdCBrZWVwIGl0IHRoZSB3YXkgaXQgaXNcbiAgICAgICAgbmV3S2V5Y2hhaW5zW3hwdWJdID0gb2xkRW5jcnlwdGVkWHBydiBhcyBzdHJpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGtleWNoYWluczogbmV3S2V5Y2hhaW5zLCB2ZXJzaW9uOiAoZW5jcnlwdGVkIGFzIGFueSkudmVyc2lvbiB9O1xuICB9XG4gICAgLmNhbGwodGhpcylcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGFkZFxuLy8gQWRkIGEgbmV3IGtleWNoYWluXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsneHB1YiddLCBbJ2VuY3J5cHRlZFhwcnYnLCAndHlwZScsICdpc0xlZGdlciddLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybCgnL2tleWNoYWluJykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHhwdWI6IHBhcmFtcy54cHViLFxuICAgICAgICBlbmNyeXB0ZWRYcHJ2OiBwYXJhbXMuZW5jcnlwdGVkWHBydixcbiAgICAgICAgdHlwZTogcGFyYW1zLnR5cGUsXG4gICAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgaXNMZWRnZXI6IHBhcmFtcy5pc0xlZGdlcixcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KClcbiAgKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgaWYgKFxuICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgJiZcbiAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXljaGFpbjtcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gY3JlYXRlQml0R29cbi8vIEFkZCBhIG5ldyBCaXRHbyBzZXJ2ZXIga2V5Y2hhaW5cbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmNyZWF0ZUJpdEdvID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28ucG9zdCh0aGlzLmJpdGdvLnVybCgnL2tleWNoYWluL2JpdGdvJykpLnNlbmQocGFyYW1zKS5yZXN1bHQoKSlcbiAgICAudGhlbihmdW5jdGlvbiAoa2V5Y2hhaW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAga2V5Y2hhaW4ueHB1YiAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICYmXG4gICAgICAgIFV0aWwueHB1YlRvRXRoQWRkcmVzcyAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICE9PSBVdGlsLnhwdWJUb0V0aEFkZHJlc3Moa2V5Y2hhaW4ueHB1YilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V0aEFkZHJlc3MgYW5kIHhwdWIgZG8gbm90IG1hdGNoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5Y2hhaW47XG4gICAgfSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGNyZWF0ZUJhY2t1cFxuLy8gQ3JlYXRlIGEgbmV3IGJhY2t1cCBrZXljaGFpbiB0aHJvdWdoIGJpdGdvIC0gb2Z0ZW4gdXNlZCBmb3IgY3JlYXRpbmcgYSBrZXljaGFpbiBvbiBhIEtSU1xuLy9cbktleWNoYWlucy5wcm90b3R5cGUuY3JlYXRlQmFja3VwID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3Byb3ZpZGVyJ10sIFtdLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi9iYWNrdXAnKSkuc2VuZChwYXJhbXMpLnJlc3VsdCgpKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgLy8gbm90IGFsbCBrZXljaGFpbnMgaGF2ZSBhbiB4cHViXG4gICAgICBpZiAoXG4gICAgICAgIGtleWNoYWluLnhwdWIgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICBVdGlsLnhwdWJUb0V0aEFkZHJlc3MgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAhPT0gVXRpbC54cHViVG9FdGhBZGRyZXNzKGtleWNoYWluLnhwdWIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldGhBZGRyZXNzIGFuZCB4cHViIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleWNoYWluO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBnZXRcbi8vIEZldGNoIGFuIGV4aXN0aW5nIGtleWNoYWluXG4vLyBQYXJhbWV0ZXJzIGluY2x1ZGU6XG4vLyAgIHhwdWI6ICB0aGUgeHB1YiBvZiB0aGUga2V5IHRvIGxvb2t1cCAocmVxdWlyZWQpXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3hwdWInLCAnZXRoQWRkcmVzcyddLCBjYWxsYmFjayk7XG5cbiAgaWYgKCFwYXJhbXMueHB1YiAmJiAhcGFyYW1zLmV0aEFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3hwdWIgb3IgZXRoQWRkcmVzcyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuXG4gIGNvbnN0IGlkID0gcGFyYW1zLnhwdWIgfHwgcGFyYW1zLmV0aEFkZHJlc3M7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpXG4gICAgICAuc2VuZCh7fSlcbiAgICAgIC5yZXN1bHQoKVxuICApXG4gICAgLnRoZW4oZnVuY3Rpb24gKGtleWNoYWluKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleWNoYWluLnhwdWIgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICBVdGlsLnhwdWJUb0V0aEFkZHJlc3MgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAhPT0gVXRpbC54cHViVG9FdGhBZGRyZXNzKGtleWNoYWluLnhwdWIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldGhBZGRyZXNzIGFuZCB4cHViIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleWNoYWluO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyB1cGRhdGVcbi8vIFVwZGF0ZSBhbiBleGlzdGluZyBrZXljaGFpblxuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICB4cHViOiAgdGhlIHhwdWIgb2YgdGhlIGtleSB0byBsb29rdXAgKHJlcXVpcmVkKVxuLy9cbktleWNoYWlucy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3hwdWInXSwgWydlbmNyeXB0ZWRYcHJ2J10sIGNhbGxiYWNrKTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi8nICsgcGFyYW1zLnhwdWIpKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBlbmNyeXB0ZWRYcHJ2OiBwYXJhbXMuZW5jcnlwdGVkWHBydixcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KClcbiAgKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgaWYgKFxuICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgJiZcbiAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXljaGFpbjtcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleWNoYWlucztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=markets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../../src/v1/markets.ts"],"names":[],"mappings":"AAAA;;GAEG"}