@bitgo/sdk-api 1.1.0-rc.21 → 1.1.0-rc.24

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 (39) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/package.json +10 -4
  3. package/dist/src/bitgoAPI.d.ts +214 -3
  4. package/dist/src/bitgoAPI.d.ts.map +1 -1
  5. package/dist/src/bitgoAPI.js +577 -7
  6. package/dist/src/types.d.ts +82 -0
  7. package/dist/src/types.d.ts.map +1 -1
  8. package/dist/src/types.js +1 -1
  9. package/dist/src/v1/blockchain.d.ts +5 -0
  10. package/dist/src/v1/blockchain.d.ts.map +1 -0
  11. package/dist/src/v1/blockchain.js +114 -0
  12. package/dist/src/v1/keychains.d.ts +5 -0
  13. package/dist/src/v1/keychains.d.ts.map +1 -0
  14. package/dist/src/v1/keychains.js +315 -0
  15. package/dist/src/v1/markets.d.ts +5 -0
  16. package/dist/src/v1/markets.d.ts.map +1 -0
  17. package/dist/src/v1/markets.js +63 -0
  18. package/dist/src/v1/pendingapproval.d.ts +6 -0
  19. package/dist/src/v1/pendingapproval.d.ts.map +1 -0
  20. package/dist/src/v1/pendingapproval.js +322 -0
  21. package/dist/src/v1/pendingapprovals.d.ts +6 -0
  22. package/dist/src/v1/pendingapprovals.d.ts.map +1 -0
  23. package/dist/src/v1/pendingapprovals.js +68 -0
  24. package/dist/src/v1/transactionBuilder.d.ts +5 -0
  25. package/dist/src/v1/transactionBuilder.d.ts.map +1 -0
  26. package/dist/src/v1/transactionBuilder.js +889 -0
  27. package/dist/src/v1/travelRule.d.ts +5 -0
  28. package/dist/src/v1/travelRule.d.ts.map +1 -0
  29. package/dist/src/v1/travelRule.js +257 -0
  30. package/dist/src/v1/wallet.d.ts +6 -0
  31. package/dist/src/v1/wallet.d.ts.map +1 -0
  32. package/dist/src/v1/wallet.js +2095 -0
  33. package/dist/src/v1/wallets.d.ts +5 -0
  34. package/dist/src/v1/wallets.d.ts.map +1 -0
  35. package/dist/src/v1/wallets.js +472 -0
  36. package/dist/web/main.js +1 -1
  37. package/dist/web/main.js.LICENSE.txt +41 -0
  38. package/package.json +10 -4
  39. package/dist/tsconfig.tsbuildinfo +0 -5499
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=travelRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"travelRule.d.ts","sourceRoot":"","sources":["../../../src/v1/travelRule.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * @hidden
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ */
8
+ //
9
+ // TravelRule Object
10
+ // BitGo accessor for a specific enterprise
11
+ //
12
+ // Copyright 2014, BitGo, Inc. All Rights Reserved.
13
+ //
14
+ const sdk_core_1 = require("@bitgo/sdk-core");
15
+ const bip32 = require("bip32");
16
+ const utxolib = require("@bitgo/utxo-lib");
17
+ const Bluebird = require("bluebird");
18
+ const _ = require("lodash");
19
+ //
20
+ // Constructor
21
+ //
22
+ const TravelRule = function (bitgo) {
23
+ // @ts-expect-error - no implicit this
24
+ this.bitgo = bitgo;
25
+ };
26
+ TravelRule.prototype.url = function (extra) {
27
+ extra = extra || '';
28
+ return this.bitgo.url('/travel/' + extra);
29
+ };
30
+ /**
31
+ * Get available travel-rule info recipients for a transaction
32
+ * @param params
33
+ * txid: transaction id
34
+ * @param callback
35
+ * @returns {*}
36
+ */
37
+ TravelRule.prototype.getRecipients = function (params, callback) {
38
+ params = params || {};
39
+ params.txid = params.txid || params.hash;
40
+ sdk_core_1.common.validateParams(params, ['txid'], [], callback);
41
+ const url = this.url(params.txid + '/recipients');
42
+ return Bluebird.resolve(this.bitgo.get(url).result('recipients')).nodeify(callback);
43
+ };
44
+ TravelRule.prototype.validateTravelInfo = function (info) {
45
+ const fields = {
46
+ amount: { type: 'number' },
47
+ toAddress: { type: 'string' },
48
+ toEnterprise: { type: 'string' },
49
+ fromUserName: { type: 'string' },
50
+ fromUserAccount: { type: 'string' },
51
+ fromUserAddress: { type: 'string' },
52
+ toUserName: { type: 'string' },
53
+ toUserAccount: { type: 'string' },
54
+ toUserAddress: { type: 'string' },
55
+ extra: { type: 'object' },
56
+ };
57
+ _.forEach(fields, function (field, fieldName) {
58
+ // No required fields yet -- should there be?
59
+ if (field.required) {
60
+ if (info[fieldName] === undefined) {
61
+ throw new Error('missing required field ' + fieldName + ' in travel info');
62
+ }
63
+ }
64
+ if (info[fieldName] && typeof info[fieldName] !== field.type) {
65
+ throw new Error('incorrect type for field ' + fieldName + ' in travel info, expected ' + field.type);
66
+ }
67
+ });
68
+ // Strip out any other fields we don't know about
69
+ const result = _.pick(info, _.keys(fields));
70
+ if (_.isEmpty(result)) {
71
+ throw new Error('empty travel data');
72
+ }
73
+ return result;
74
+ };
75
+ /**
76
+ * Takes a transaction object as returned by getTransaction or listTransactions, along
77
+ * with a keychain (or hdnode object), and attempts to decrypt any encrypted travel
78
+ * info included in the transaction's receivedTravelInfo field.
79
+ * Parameters:
80
+ * tx: a transaction object
81
+ * keychain: keychain object (with xprv)
82
+ * Returns:
83
+ * the tx object, augmented with decrypted travelInfo fields
84
+ */
85
+ TravelRule.prototype.decryptReceivedTravelInfo = function (params = {}) {
86
+ const tx = params.tx;
87
+ if (!_.isObject(tx)) {
88
+ throw new Error('expecting tx param to be object');
89
+ }
90
+ if (!tx.receivedTravelInfo || !tx.receivedTravelInfo.length) {
91
+ return tx;
92
+ }
93
+ const keychain = params.keychain;
94
+ if (!_.isObject(keychain) || !_.isString(keychain.xprv)) {
95
+ throw new Error('expecting keychain param with xprv');
96
+ }
97
+ const hdNode = bip32.fromBase58(keychain.xprv);
98
+ tx.receivedTravelInfo.forEach((info) => {
99
+ const key = hdNode.derivePath(sdk_core_1.sanitizeLegacyPath(info.toPubKeyPath));
100
+ const secret = sdk_core_1.getSharedSecret(key, Buffer.from(info.fromPubKey, 'hex')).toString('hex');
101
+ try {
102
+ const decrypted = this.bitgo.decrypt({
103
+ input: info.encryptedTravelInfo,
104
+ password: secret,
105
+ });
106
+ info.travelInfo = JSON.parse(decrypted);
107
+ }
108
+ catch (err) {
109
+ console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
110
+ }
111
+ });
112
+ return tx;
113
+ };
114
+ TravelRule.prototype.prepareParams = function (params) {
115
+ params = params || {};
116
+ params.txid = params.txid || params.hash;
117
+ sdk_core_1.common.validateParams(params, ['txid'], ['fromPrivateInfo']);
118
+ const txid = params.txid;
119
+ const recipient = params.recipient;
120
+ let travelInfo = params.travelInfo;
121
+ if (!recipient || !_.isObject(recipient)) {
122
+ throw new Error('invalid or missing recipient');
123
+ }
124
+ if (!travelInfo || !_.isObject(travelInfo)) {
125
+ throw new Error('invalid or missing travelInfo');
126
+ }
127
+ if (!params.noValidate) {
128
+ travelInfo = this.validateTravelInfo(travelInfo);
129
+ }
130
+ // Fill in toEnterprise if not already filled
131
+ if (!travelInfo.toEnterprise && recipient.enterprise) {
132
+ travelInfo.toEnterprise = recipient.enterprise;
133
+ }
134
+ // If a key was not provided, create a new random key
135
+ let fromKey = params.fromKey && utxolib.ECPair.fromWIF(params.fromKey, sdk_core_1.getNetwork());
136
+ if (!fromKey) {
137
+ fromKey = sdk_core_1.makeRandomKey();
138
+ }
139
+ // Compute the shared key for encryption
140
+ const sharedSecret = sdk_core_1.getSharedSecret(fromKey, Buffer.from(recipient.pubKey, 'hex')).toString('hex');
141
+ // JSON-ify and encrypt the payload
142
+ const travelInfoJSON = JSON.stringify(travelInfo);
143
+ const encryptedTravelInfo = this.bitgo.encrypt({
144
+ input: travelInfoJSON,
145
+ password: sharedSecret,
146
+ });
147
+ const result = {
148
+ txid: txid,
149
+ outputIndex: recipient.outputIndex,
150
+ toPubKey: recipient.pubKey,
151
+ fromPubKey: fromKey.publicKey.toString('hex'),
152
+ encryptedTravelInfo: encryptedTravelInfo,
153
+ fromPrivateInfo: undefined,
154
+ };
155
+ if (params.fromPrivateInfo) {
156
+ result.fromPrivateInfo = params.fromPrivateInfo;
157
+ }
158
+ return result;
159
+ };
160
+ /**
161
+ * Send travel data to the server for a transaction
162
+ */
163
+ TravelRule.prototype.send = function (params, callback) {
164
+ params = params || {};
165
+ params.txid = params.txid || params.hash;
166
+ sdk_core_1.common.validateParams(params, ['txid', 'toPubKey', 'encryptedTravelInfo'], ['fromPubKey', 'fromPrivateInfo'], callback);
167
+ if (!_.isNumber(params.outputIndex)) {
168
+ throw new Error('invalid outputIndex');
169
+ }
170
+ return Bluebird.resolve(this.bitgo
171
+ .post(this.url(params.txid + '/' + params.outputIndex))
172
+ .send(params)
173
+ .result()).nodeify(callback);
174
+ };
175
+ /**
176
+ * Send multiple travel rule infos for the outputs of a single transaction.
177
+ * Parameters:
178
+ * - txid (or hash): txid of the transaction (must be a sender of the tx)
179
+ * - travelInfos: array of travelInfo objects which look like the following:
180
+ * {
181
+ * outputIndex: number, // tx output index
182
+ * fromUserName: string, // name of the sending user
183
+ * fromUserAccount: string, // account id of the sending user
184
+ * fromUserAddress: string, // mailing address of the sending user
185
+ * toUserName: string, // name of the receiving user
186
+ * toUserAccount: string, // account id of the receiving user
187
+ * toUserAddress: string // mailing address of the receiving user
188
+ * }
189
+ * All fields aside from outputIndex are optional, but at least one must
190
+ * be defined.
191
+ *
192
+ * It is not necessary to provide travelInfo for all output indices.
193
+ * End-to-end encryption of the travel info is handled automatically by this method.
194
+ *
195
+ */
196
+ TravelRule.prototype.sendMany = function (params, callback) {
197
+ params = params || {};
198
+ params.txid = params.txid || params.hash;
199
+ sdk_core_1.common.validateParams(params, ['txid'], callback);
200
+ const travelInfos = params.travelInfos;
201
+ if (!_.isArray(travelInfos)) {
202
+ throw new Error('expected parameter travelInfos to be array');
203
+ }
204
+ const self = this;
205
+ const travelInfoMap = _(travelInfos)
206
+ .keyBy('outputIndex')
207
+ .mapValues(function (travelInfo) {
208
+ return self.validateTravelInfo(travelInfo);
209
+ })
210
+ .value();
211
+ return self.getRecipients({ txid: params.txid }).then(function (recipients) {
212
+ // Build up data to post
213
+ const sendParamsList = [];
214
+ // don't regenerate a new random key for each recipient
215
+ const fromKey = params.fromKey || sdk_core_1.makeRandomKey().toWIF();
216
+ recipients.forEach(function (recipient) {
217
+ const outputIndex = recipient.outputIndex;
218
+ const info = travelInfoMap[outputIndex];
219
+ if (info) {
220
+ if (info.amount && info.amount !== recipient.amount) {
221
+ throw new Error('amount did not match for output index ' + outputIndex);
222
+ }
223
+ const sendParams = self.prepareParams({
224
+ txid: params.txid,
225
+ recipient: recipient,
226
+ travelInfo: info,
227
+ fromKey: fromKey,
228
+ noValidate: true, // don't re-validate
229
+ });
230
+ sendParamsList.push(sendParams);
231
+ }
232
+ });
233
+ const result = {
234
+ matched: sendParamsList.length,
235
+ results: [],
236
+ };
237
+ const sendSerial = function () {
238
+ const sendParams = sendParamsList.shift();
239
+ if (!sendParams) {
240
+ return result;
241
+ }
242
+ return self
243
+ .send(sendParams)
244
+ .then(function (res) {
245
+ result.results.push({ result: res });
246
+ return sendSerial();
247
+ })
248
+ .catch(function (err) {
249
+ result.results.push({ error: err.toString() });
250
+ return sendSerial();
251
+ });
252
+ };
253
+ return sendSerial();
254
+ });
255
+ };
256
+ module.exports = TravelRule;
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsOENBQXlHO0FBQ3pHLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MscUNBQXFDO0FBQ3JDLDRCQUE0QjtBQXlCNUIsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLO0lBQ2hDLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUs7SUFDeEMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUM3RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QyxpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQ2xE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Q2YsT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE9BQU8sSUFBSTtpQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHO2dCQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsVUFBVSxHQUFHO2dCQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsT0FBTyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBUcmF2ZWxSdWxlIE9iamVjdFxuLy8gQml0R28gYWNjZXNzb3IgZm9yIGEgc3BlY2lmaWMgZW50ZXJwcmlzZVxuLy9cbi8vIENvcHlyaWdodCAyMDE0LCBCaXRHbywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG5pbXBvcnQgeyBjb21tb24sIGdldE5ldHdvcmssIGdldFNoYXJlZFNlY3JldCwgbWFrZVJhbmRvbUtleSwgc2FuaXRpemVMZWdhY3lQYXRoIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIGJpcDMyIGZyb20gJ2JpcDMyJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIEJsdWViaXJkIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW50ZXJmYWNlIERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zIHtcbiAgdHg/OiB7XG4gICAgcmVjZWl2ZWRUcmF2ZWxJbmZvPzoge1xuICAgICAgdG9QdWJLZXlQYXRoOiBzdHJpbmc7XG4gICAgICBmcm9tUHViS2V5OiBzdHJpbmc7XG4gICAgICBlbmNyeXB0ZWRUcmF2ZWxJbmZvOiBzdHJpbmc7XG4gICAgICB0cmF2ZWxJbmZvOiBzdHJpbmc7XG4gICAgICB0cmFuc2FjdGlvbklkOiBzdHJpbmc7XG4gICAgICBvdXRwdXRJbmRleDogbnVtYmVyO1xuICAgIH1bXTtcbiAgfTtcbiAga2V5Y2hhaW4/OiB7XG4gICAgeHBydj86IHN0cmluZztcbiAgfTtcbiAgaGRub2RlPzogYmlwMzIuQklQMzJJbnRlcmZhY2U7XG59XG5cbmludGVyZmFjZSBSZWNpcGllbnQge1xuICBlbnRlcnByaXNlOiBzdHJpbmc7XG4gIHB1YktleTogc3RyaW5nO1xuICBvdXRwdXRJbmRleDogc3RyaW5nO1xufVxuXG4vL1xuLy8gQ29uc3RydWN0b3Jcbi8vXG5jb25zdCBUcmF2ZWxSdWxlID0gZnVuY3Rpb24gKGJpdGdvKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBubyBpbXBsaWNpdCB0aGlzXG4gIHRoaXMuYml0Z28gPSBiaXRnbztcbn07XG5cblRyYXZlbFJ1bGUucHJvdG90eXBlLnVybCA9IGZ1bmN0aW9uIChleHRyYSkge1xuICBleHRyYSA9IGV4dHJhIHx8ICcnO1xuICByZXR1cm4gdGhpcy5iaXRnby51cmwoJy90cmF2ZWwvJyArIGV4dHJhKTtcbn07XG5cbi8qKlxuICogR2V0IGF2YWlsYWJsZSB0cmF2ZWwtcnVsZSBpbmZvIHJlY2lwaWVudHMgZm9yIGEgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBwYXJhbXNcbiAqICB0eGlkOiB0cmFuc2FjdGlvbiBpZFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZ2V0UmVjaXBpZW50cyA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eGlkJ10sIFtdLCBjYWxsYmFjayk7XG5cbiAgY29uc3QgdXJsID0gdGhpcy51cmwocGFyYW1zLnR4aWQgKyAnL3JlY2lwaWVudHMnKTtcbiAgcmV0dXJuIEJsdWViaXJkLnJlc29sdmUodGhpcy5iaXRnby5nZXQodXJsKS5yZXN1bHQoJ3JlY2lwaWVudHMnKSkubm9kZWlmeShjYWxsYmFjayk7XG59O1xuXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS52YWxpZGF0ZVRyYXZlbEluZm8gPSBmdW5jdGlvbiAoaW5mbykge1xuICBjb25zdCBmaWVsZHMgPSB7XG4gICAgYW1vdW50OiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgdG9BZGRyZXNzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9FbnRlcnByaXNlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgZnJvbVVzZXJOYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgZnJvbVVzZXJBY2NvdW50OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgZnJvbVVzZXJBZGRyZXNzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyTmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlckFjY291bnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJBZGRyZXNzOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgZXh0cmE6IHsgdHlwZTogJ29iamVjdCcgfSxcbiAgfTtcblxuICBfLmZvckVhY2goZmllbGRzLCBmdW5jdGlvbiAoZmllbGQ6IGFueSwgZmllbGROYW1lKSB7XG4gICAgLy8gTm8gcmVxdWlyZWQgZmllbGRzIHlldCAtLSBzaG91bGQgdGhlcmUgYmU/XG4gICAgaWYgKGZpZWxkLnJlcXVpcmVkKSB7XG4gICAgICBpZiAoaW5mb1tmaWVsZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGZpZWxkICcgKyBmaWVsZE5hbWUgKyAnIGluIHRyYXZlbCBpbmZvJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbmZvW2ZpZWxkTmFtZV0gJiYgdHlwZW9mIGluZm9bZmllbGROYW1lXSAhPT0gZmllbGQudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvcnJlY3QgdHlwZSBmb3IgZmllbGQgJyArIGZpZWxkTmFtZSArICcgaW4gdHJhdmVsIGluZm8sIGV4cGVjdGVkICcgKyBmaWVsZC50eXBlKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFN0cmlwIG91dCBhbnkgb3RoZXIgZmllbGRzIHdlIGRvbid0IGtub3cgYWJvdXRcbiAgY29uc3QgcmVzdWx0ID0gXy5waWNrKGluZm8sIF8ua2V5cyhmaWVsZHMpKTtcbiAgaWYgKF8uaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbXB0eSB0cmF2ZWwgZGF0YScpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFRha2VzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFRyYW5zYWN0aW9uIG9yIGxpc3RUcmFuc2FjdGlvbnMsIGFsb25nXG4gKiB3aXRoIGEga2V5Y2hhaW4gKG9yIGhkbm9kZSBvYmplY3QpLCBhbmQgYXR0ZW1wdHMgdG8gZGVjcnlwdCBhbnkgZW5jcnlwdGVkIHRyYXZlbFxuICogaW5mbyBpbmNsdWRlZCBpbiB0aGUgdHJhbnNhY3Rpb24ncyByZWNlaXZlZFRyYXZlbEluZm8gZmllbGQuXG4gKiBQYXJhbWV0ZXJzOlxuICogICB0eDogYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqICAga2V5Y2hhaW46IGtleWNoYWluIG9iamVjdCAod2l0aCB4cHJ2KVxuICogUmV0dXJuczpcbiAqICAgdGhlIHR4IG9iamVjdCwgYXVnbWVudGVkIHdpdGggZGVjcnlwdGVkIHRyYXZlbEluZm8gZmllbGRzXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLmRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm8gPSBmdW5jdGlvbiAocGFyYW1zOiBEZWNyeXB0UmVjZWl2ZWRUcmF2ZWxSdWxlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHR4ID0gcGFyYW1zLnR4O1xuICBpZiAoIV8uaXNPYmplY3QodHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RpbmcgdHggcGFyYW0gdG8gYmUgb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAoIXR4LnJlY2VpdmVkVHJhdmVsSW5mbyB8fCAhdHgucmVjZWl2ZWRUcmF2ZWxJbmZvLmxlbmd0aCkge1xuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIGNvbnN0IGtleWNoYWluID0gcGFyYW1zLmtleWNoYWluO1xuICBpZiAoIV8uaXNPYmplY3Qoa2V5Y2hhaW4pIHx8ICFfLmlzU3RyaW5nKGtleWNoYWluLnhwcnYpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3Rpbmcga2V5Y2hhaW4gcGFyYW0gd2l0aCB4cHJ2Jyk7XG4gIH1cbiAgY29uc3QgaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChrZXljaGFpbi54cHJ2KTtcblxuICB0eC5yZWNlaXZlZFRyYXZlbEluZm8uZm9yRWFjaCgoaW5mbykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGhkTm9kZS5kZXJpdmVQYXRoKHNhbml0aXplTGVnYWN5UGF0aChpbmZvLnRvUHViS2V5UGF0aCkpO1xuICAgIGNvbnN0IHNlY3JldCA9IGdldFNoYXJlZFNlY3JldChrZXksIEJ1ZmZlci5mcm9tKGluZm8uZnJvbVB1YktleSwgJ2hleCcpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICAgIGlucHV0OiBpbmZvLmVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgICAgIHBhc3N3b3JkOiBzZWNyZXQsXG4gICAgICB9KTtcbiAgICAgIGluZm8udHJhdmVsSW5mbyA9IEpTT04ucGFyc2UoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZhaWxlZCB0byBkZWNyeXB0IG9yIHBhcnNlIHRyYXZlbCBpbmZvIGZvciAnLCBpbmZvLnRyYW5zYWN0aW9uSWQgKyAnOicgKyBpbmZvLm91dHB1dEluZGV4KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eDtcbn07XG5cblRyYXZlbFJ1bGUucHJvdG90eXBlLnByZXBhcmVQYXJhbXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eGlkJ10sIFsnZnJvbVByaXZhdGVJbmZvJ10pO1xuICBjb25zdCB0eGlkID0gcGFyYW1zLnR4aWQ7XG4gIGNvbnN0IHJlY2lwaWVudDogUmVjaXBpZW50IHwgdW5kZWZpbmVkID0gcGFyYW1zLnJlY2lwaWVudDtcbiAgbGV0IHRyYXZlbEluZm8gPSBwYXJhbXMudHJhdmVsSW5mbztcbiAgaWYgKCFyZWNpcGllbnQgfHwgIV8uaXNPYmplY3QocmVjaXBpZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvciBtaXNzaW5nIHJlY2lwaWVudCcpO1xuICB9XG4gIGlmICghdHJhdmVsSW5mbyB8fCAhXy5pc09iamVjdCh0cmF2ZWxJbmZvKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvciBtaXNzaW5nIHRyYXZlbEluZm8nKTtcbiAgfVxuICBpZiAoIXBhcmFtcy5ub1ZhbGlkYXRlKSB7XG4gICAgdHJhdmVsSW5mbyA9IHRoaXMudmFsaWRhdGVUcmF2ZWxJbmZvKHRyYXZlbEluZm8pO1xuICB9XG5cbiAgLy8gRmlsbCBpbiB0b0VudGVycHJpc2UgaWYgbm90IGFscmVhZHkgZmlsbGVkXG4gIGlmICghdHJhdmVsSW5mby50b0VudGVycHJpc2UgJiYgcmVjaXBpZW50LmVudGVycHJpc2UpIHtcbiAgICB0cmF2ZWxJbmZvLnRvRW50ZXJwcmlzZSA9IHJlY2lwaWVudC5lbnRlcnByaXNlO1xuICB9XG5cbiAgLy8gSWYgYSBrZXkgd2FzIG5vdCBwcm92aWRlZCwgY3JlYXRlIGEgbmV3IHJhbmRvbSBrZXlcbiAgbGV0IGZyb21LZXkgPSBwYXJhbXMuZnJvbUtleSAmJiB1dHhvbGliLkVDUGFpci5mcm9tV0lGKHBhcmFtcy5mcm9tS2V5LCBnZXROZXR3b3JrKCkgYXMgdXR4b2xpYi5CaXRjb2luSlNOZXR3b3JrKTtcbiAgaWYgKCFmcm9tS2V5KSB7XG4gICAgZnJvbUtleSA9IG1ha2VSYW5kb21LZXkoKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHNoYXJlZCBrZXkgZm9yIGVuY3J5cHRpb25cbiAgY29uc3Qgc2hhcmVkU2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGZyb21LZXksIEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5wdWJLZXksICdoZXgnKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIC8vIEpTT04taWZ5IGFuZCBlbmNyeXB0IHRoZSBwYXlsb2FkXG4gIGNvbnN0IHRyYXZlbEluZm9KU09OID0gSlNPTi5zdHJpbmdpZnkodHJhdmVsSW5mbyk7XG4gIGNvbnN0IGVuY3J5cHRlZFRyYXZlbEluZm8gPSB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgIGlucHV0OiB0cmF2ZWxJbmZvSlNPTixcbiAgICBwYXNzd29yZDogc2hhcmVkU2VjcmV0LFxuICB9KTtcblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHhpZDogdHhpZCxcbiAgICBvdXRwdXRJbmRleDogcmVjaXBpZW50Lm91dHB1dEluZGV4LFxuICAgIHRvUHViS2V5OiByZWNpcGllbnQucHViS2V5LFxuICAgIGZyb21QdWJLZXk6IGZyb21LZXkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICBlbmNyeXB0ZWRUcmF2ZWxJbmZvOiBlbmNyeXB0ZWRUcmF2ZWxJbmZvLFxuICAgIGZyb21Qcml2YXRlSW5mbzogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGlmIChwYXJhbXMuZnJvbVByaXZhdGVJbmZvKSB7XG4gICAgcmVzdWx0LmZyb21Qcml2YXRlSW5mbyA9IHBhcmFtcy5mcm9tUHJpdmF0ZUluZm87XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBTZW5kIHRyYXZlbCBkYXRhIHRvIHRoZSBzZXJ2ZXIgZm9yIGEgdHJhbnNhY3Rpb25cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKFxuICAgIHBhcmFtcyxcbiAgICBbJ3R4aWQnLCAndG9QdWJLZXknLCAnZW5jcnlwdGVkVHJhdmVsSW5mbyddLFxuICAgIFsnZnJvbVB1YktleScsICdmcm9tUHJpdmF0ZUluZm8nXSxcbiAgICBjYWxsYmFja1xuICApO1xuXG4gIGlmICghXy5pc051bWJlcihwYXJhbXMub3V0cHV0SW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG91dHB1dEluZGV4Jyk7XG4gIH1cblxuICByZXR1cm4gQmx1ZWJpcmQucmVzb2x2ZShcbiAgICB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybChwYXJhbXMudHhpZCArICcvJyArIHBhcmFtcy5vdXRwdXRJbmRleCkpXG4gICAgICAuc2VuZChwYXJhbXMpXG4gICAgICAucmVzdWx0KClcbiAgKS5ub2RlaWZ5KGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogU2VuZCBtdWx0aXBsZSB0cmF2ZWwgcnVsZSBpbmZvcyBmb3IgdGhlIG91dHB1dHMgb2YgYSBzaW5nbGUgdHJhbnNhY3Rpb24uXG4gKiBQYXJhbWV0ZXJzOlxuICogICAtIHR4aWQgKG9yIGhhc2gpOiB0eGlkIG9mIHRoZSB0cmFuc2FjdGlvbiAobXVzdCBiZSBhIHNlbmRlciBvZiB0aGUgdHgpXG4gKiAgIC0gdHJhdmVsSW5mb3M6IGFycmF5IG9mIHRyYXZlbEluZm8gb2JqZWN0cyB3aGljaCBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzpcbiAqICAgICB7XG4gKiAgICAgICBvdXRwdXRJbmRleDogbnVtYmVyLCAgICAgLy8gdHggb3V0cHV0IGluZGV4XG4gKiAgICAgICBmcm9tVXNlck5hbWU6IHN0cmluZywgICAgLy8gbmFtZSBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICBmcm9tVXNlckFjY291bnQ6IHN0cmluZywgLy8gYWNjb3VudCBpZCBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICBmcm9tVXNlckFkZHJlc3M6IHN0cmluZywgLy8gbWFpbGluZyBhZGRyZXNzIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIHRvVXNlck5hbWU6IHN0cmluZywgICAgICAvLyBuYW1lIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgICAgdG9Vc2VyQWNjb3VudDogc3RyaW5nLCAgIC8vIGFjY291bnQgaWQgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJBZGRyZXNzOiBzdHJpbmcgICAgLy8gbWFpbGluZyBhZGRyZXNzIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgIH1cbiAqICAgICBBbGwgZmllbGRzIGFzaWRlIGZyb20gb3V0cHV0SW5kZXggYXJlIG9wdGlvbmFsLCBidXQgYXQgbGVhc3Qgb25lIG11c3RcbiAqICAgICBiZSBkZWZpbmVkLlxuICpcbiAqICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgdHJhdmVsSW5mbyBmb3IgYWxsIG91dHB1dCBpbmRpY2VzLlxuICogIEVuZC10by1lbmQgZW5jcnlwdGlvbiBvZiB0aGUgdHJhdmVsIGluZm8gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgbWV0aG9kLlxuICpcbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuc2VuZE1hbnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBjYWxsYmFjayk7XG5cbiAgY29uc3QgdHJhdmVsSW5mb3MgPSBwYXJhbXMudHJhdmVsSW5mb3M7XG4gIGlmICghXy5pc0FycmF5KHRyYXZlbEluZm9zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcGFyYW1ldGVyIHRyYXZlbEluZm9zIHRvIGJlIGFycmF5Jyk7XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgY29uc3QgdHJhdmVsSW5mb01hcCA9IF8odHJhdmVsSW5mb3MpXG4gICAgLmtleUJ5KCdvdXRwdXRJbmRleCcpXG4gICAgLm1hcFZhbHVlcyhmdW5jdGlvbiAodHJhdmVsSW5mbykge1xuICAgICAgcmV0dXJuIHNlbGYudmFsaWRhdGVUcmF2ZWxJbmZvKHRyYXZlbEluZm8pO1xuICAgIH0pXG4gICAgLnZhbHVlKCk7XG5cbiAgcmV0dXJuIHNlbGYuZ2V0UmVjaXBpZW50cyh7IHR4aWQ6IHBhcmFtcy50eGlkIH0pLnRoZW4oZnVuY3Rpb24gKHJlY2lwaWVudHMpIHtcbiAgICAvLyBCdWlsZCB1cCBkYXRhIHRvIHBvc3RcbiAgICBjb25zdCBzZW5kUGFyYW1zTGlzdDogYW55W10gPSBbXTtcbiAgICAvLyBkb24ndCByZWdlbmVyYXRlIGEgbmV3IHJhbmRvbSBrZXkgZm9yIGVhY2ggcmVjaXBpZW50XG4gICAgY29uc3QgZnJvbUtleSA9IHBhcmFtcy5mcm9tS2V5IHx8IG1ha2VSYW5kb21LZXkoKS50b1dJRigpO1xuXG4gICAgcmVjaXBpZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChyZWNpcGllbnQpIHtcbiAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gcmVjaXBpZW50Lm91dHB1dEluZGV4O1xuICAgICAgY29uc3QgaW5mbyA9IHRyYXZlbEluZm9NYXBbb3V0cHV0SW5kZXhdO1xuICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uYW1vdW50ICYmIGluZm8uYW1vdW50ICE9PSByZWNpcGllbnQuYW1vdW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbW91bnQgZGlkIG5vdCBtYXRjaCBmb3Igb3V0cHV0IGluZGV4ICcgKyBvdXRwdXRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VuZFBhcmFtcyA9IHNlbGYucHJlcGFyZVBhcmFtcyh7XG4gICAgICAgICAgdHhpZDogcGFyYW1zLnR4aWQsXG4gICAgICAgICAgcmVjaXBpZW50OiByZWNpcGllbnQsXG4gICAgICAgICAgdHJhdmVsSW5mbzogaW5mbyxcbiAgICAgICAgICBmcm9tS2V5OiBmcm9tS2V5LFxuICAgICAgICAgIG5vVmFsaWRhdGU6IHRydWUsIC8vIGRvbid0IHJlLXZhbGlkYXRlXG4gICAgICAgIH0pO1xuICAgICAgICBzZW5kUGFyYW1zTGlzdC5wdXNoKHNlbmRQYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0OiB7XG4gICAgICBtYXRjaGVkOiBudW1iZXI7XG4gICAgICByZXN1bHRzOiB7XG4gICAgICAgIHJlc3VsdD86IGFueTtcbiAgICAgICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgICB9W107XG4gICAgfSA9IHtcbiAgICAgIG1hdGNoZWQ6IHNlbmRQYXJhbXNMaXN0Lmxlbmd0aCxcbiAgICAgIHJlc3VsdHM6IFtdLFxuICAgIH07XG5cbiAgICBjb25zdCBzZW5kU2VyaWFsID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZFBhcmFtcyA9IHNlbmRQYXJhbXNMaXN0LnNoaWZ0KCk7XG4gICAgICBpZiAoIXNlbmRQYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxmXG4gICAgICAgIC5zZW5kKHNlbmRQYXJhbXMpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICByZXN1bHQucmVzdWx0cy5wdXNoKHsgcmVzdWx0OiByZXMgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICByZXN1bHQucmVzdWx0cy5wdXNoKHsgZXJyb3I6IGVyci50b1N0cmluZygpIH0pO1xuICAgICAgICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhdmVsUnVsZTtcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ declare const Wallet: (bitgo: any, wallet: any) => void;
5
+ export = Wallet;
6
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/v1/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,QAAA,MAAM,MAAM,mCAYX,CAAC;AA00EF,SAAS,MAAM,CAAC"}