@bitgo-beta/sdk-api 1.10.1-beta.1223 → 1.10.1-beta.1225

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 (53) hide show
  1. package/dist/package.json +7 -7
  2. package/dist/src/api.d.ts +47 -0
  3. package/dist/src/api.d.ts.map +1 -0
  4. package/dist/src/api.js +215 -0
  5. package/dist/src/bitgoAPI.d.ts +597 -0
  6. package/dist/src/bitgoAPI.d.ts.map +1 -0
  7. package/dist/src/bitgoAPI.js +1837 -0
  8. package/dist/src/encrypt.d.ts +14 -0
  9. package/dist/src/encrypt.d.ts.map +1 -0
  10. package/dist/src/encrypt.js +81 -0
  11. package/dist/src/index.d.ts +6 -0
  12. package/dist/src/index.d.ts.map +1 -0
  13. package/dist/src/index.js +22 -0
  14. package/dist/src/types.d.ts +268 -0
  15. package/dist/src/types.d.ts.map +1 -0
  16. package/dist/src/types.js +7 -0
  17. package/dist/src/util.d.ts +16 -0
  18. package/dist/src/util.d.ts.map +1 -0
  19. package/dist/src/util.js +64 -0
  20. package/dist/src/v1/blockchain.d.ts +5 -0
  21. package/dist/src/v1/blockchain.d.ts.map +1 -0
  22. package/dist/src/v1/blockchain.js +127 -0
  23. package/dist/src/v1/keychains.d.ts +5 -0
  24. package/dist/src/v1/keychains.d.ts.map +1 -0
  25. package/dist/src/v1/keychains.js +320 -0
  26. package/dist/src/v1/markets.d.ts +5 -0
  27. package/dist/src/v1/markets.d.ts.map +1 -0
  28. package/dist/src/v1/markets.js +68 -0
  29. package/dist/src/v1/pendingapproval.d.ts +6 -0
  30. package/dist/src/v1/pendingapproval.d.ts.map +1 -0
  31. package/dist/src/v1/pendingapproval.js +361 -0
  32. package/dist/src/v1/pendingapprovals.d.ts +6 -0
  33. package/dist/src/v1/pendingapprovals.d.ts.map +1 -0
  34. package/dist/src/v1/pendingapprovals.js +102 -0
  35. package/dist/src/v1/signPsbt.d.ts +14 -0
  36. package/dist/src/v1/signPsbt.d.ts.map +1 -0
  37. package/dist/src/v1/signPsbt.js +69 -0
  38. package/dist/src/v1/transactionBuilder.d.ts +5 -0
  39. package/dist/src/v1/transactionBuilder.d.ts.map +1 -0
  40. package/dist/src/v1/transactionBuilder.js +941 -0
  41. package/dist/src/v1/travelRule.d.ts +5 -0
  42. package/dist/src/v1/travelRule.d.ts.map +1 -0
  43. package/dist/src/v1/travelRule.js +294 -0
  44. package/dist/src/v1/verifyAddress.d.ts +6 -0
  45. package/dist/src/v1/verifyAddress.d.ts.map +1 -0
  46. package/dist/src/v1/verifyAddress.js +50 -0
  47. package/dist/src/v1/wallet.d.ts +6 -0
  48. package/dist/src/v1/wallet.d.ts.map +1 -0
  49. package/dist/src/v1/wallet.js +2299 -0
  50. package/dist/src/v1/wallets.d.ts +5 -0
  51. package/dist/src/v1/wallets.d.ts.map +1 -0
  52. package/dist/src/v1/wallets.js +528 -0
  53. package/package.json +7 -7
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ /**
3
+ * @hidden
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ /**
42
+ */
43
+ // Pending Approval Object
44
+ // Handles approving, rejecting and getting information on pending approvals
45
+ //
46
+ // Copyright 2015, BitGo, Inc. All Rights Reserved.
47
+ //
48
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
49
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
50
+ const lodash_1 = __importDefault(require("lodash"));
51
+ const util_1 = require("../util");
52
+ //
53
+ // Constructor
54
+ //
55
+ const PendingApproval = function (bitgo, pendingApproval, wallet) {
56
+ // @ts-expect-error - no implicit this
57
+ this.bitgo = bitgo;
58
+ // @ts-expect-error - no implicit this
59
+ this.pendingApproval = pendingApproval;
60
+ // @ts-expect-error - no implicit this
61
+ this.wallet = wallet;
62
+ };
63
+ //
64
+ // id
65
+ // Get the id of this pending approval.
66
+ //
67
+ PendingApproval.prototype.id = function () {
68
+ return this.pendingApproval.id;
69
+ };
70
+ //
71
+ // ownerType
72
+ // Get the owner type (wallet or enterprise)
73
+ // Pending approvals can be approved or modified by different scopes (depending on how they were created)
74
+ // If a pending approval is owned by a wallet, then it can be approved by administrators of the wallet
75
+ // If a pending approval is owned by an enterprise, then it can be approved by administrators of the enterprise
76
+ //
77
+ PendingApproval.prototype.ownerType = function (params, callback) {
78
+ params = params || {};
79
+ sdk_core_1.common.validateParams(params, [], [], callback);
80
+ if (this.pendingApproval.walletId) {
81
+ return 'wallet';
82
+ }
83
+ else if (this.pendingApproval.enterprise) {
84
+ return 'enterprise';
85
+ }
86
+ else {
87
+ throw new Error('unexpected pending approval owner: neither walletId nor enterprise was present');
88
+ }
89
+ };
90
+ //
91
+ // walletId
92
+ // Get the wallet ID that owns / is associated with the pending approval
93
+ //
94
+ PendingApproval.prototype.walletId = function () {
95
+ return this.pendingApproval.walletId;
96
+ };
97
+ //
98
+ // enterpriseId
99
+ // Get the enterprise ID that owns / is associated with the pending approval
100
+ //
101
+ PendingApproval.prototype.enterpriseId = function () {
102
+ return this.pendingApproval.enterprise;
103
+ };
104
+ //
105
+ // state
106
+ // Get the state of the pending approval
107
+ //
108
+ PendingApproval.prototype.state = function () {
109
+ return this.pendingApproval.state;
110
+ };
111
+ //
112
+ // creator
113
+ // Get the id of the user that performed the action resulting in this pending approval
114
+ //
115
+ PendingApproval.prototype.creator = function () {
116
+ return this.pendingApproval.creator;
117
+ };
118
+ //
119
+ // type
120
+ // Get the type of the pending approval (what it approves)
121
+ // Example: transactionRequest, tagUpdateRequest, policyRuleRequest
122
+ //
123
+ PendingApproval.prototype.type = function () {
124
+ if (!this.pendingApproval.info) {
125
+ throw new Error('pending approval info is not available');
126
+ }
127
+ return this.pendingApproval.info.type;
128
+ };
129
+ //
130
+ // type
131
+ // Get information about the pending approval
132
+ //
133
+ PendingApproval.prototype.info = function () {
134
+ return this.pendingApproval.info;
135
+ };
136
+ //
137
+ // approvalsRequired
138
+ // get the number of approvals that are required for this pending approval to be approved.
139
+ // Defaults to 1 if approvalsRequired doesn't exist on the object
140
+ //
141
+ PendingApproval.prototype.approvalsRequired = function () {
142
+ return this.pendingApproval.approvalsRequired || 1;
143
+ };
144
+ //
145
+ // url
146
+ // Gets the url for this pending approval
147
+ //
148
+ PendingApproval.prototype.url = function (extra) {
149
+ extra = extra || '';
150
+ return this.bitgo.url('/pendingapprovals/' + this.id() + extra);
151
+ };
152
+ //
153
+ // get
154
+ // Refetches this pending approval and returns it
155
+ //
156
+ PendingApproval.prototype.get = function (params, callback) {
157
+ params = params || {};
158
+ sdk_core_1.common.validateParams(params, [], [], callback);
159
+ const self = this;
160
+ return Promise.resolve(this.bitgo.get(this.url()).result())
161
+ .then(function (res) {
162
+ self.pendingApproval = res;
163
+ return self;
164
+ })
165
+ .then(callback)
166
+ .catch(callback);
167
+ };
168
+ //
169
+ // Helper function to ensure that self.wallet is set
170
+ //
171
+ PendingApproval.prototype.populateWallet = function () {
172
+ const self = this;
173
+ if (!self.wallet) {
174
+ return self.bitgo
175
+ .wallets()
176
+ .get({ id: self.info().transactionRequest.sourceWallet })
177
+ .then(function (wallet) {
178
+ if (!wallet) {
179
+ throw new Error('unexpected - unable to get wallet using sourcewallet');
180
+ }
181
+ self.wallet = wallet;
182
+ });
183
+ }
184
+ if (self.wallet.id() !== self.info().transactionRequest.sourceWallet) {
185
+ throw new Error('unexpected source wallet for pending approval');
186
+ }
187
+ return Promise.resolve(); // otherwise returns undefined
188
+ };
189
+ //
190
+ // helper function to recreate and sign a transaction on a wallet
191
+ // we should hopefully be able to move this logic server side soon
192
+ //
193
+ PendingApproval.prototype.recreateAndSignTransaction = function (params, callback) {
194
+ params = lodash_1.default.extend({}, params);
195
+ sdk_core_1.common.validateParams(params, ['txHex'], [], callback);
196
+ const transaction = utxolib.bitgo.createTransactionFromHex(params.txHex, utxolib.networks.bitcoin);
197
+ if (!transaction.outs) {
198
+ throw new Error('transaction had no outputs or failed to parse successfully');
199
+ }
200
+ const network = utxolib.networks[sdk_core_1.common.Environments[this.bitgo.getEnv()].network];
201
+ params.recipients = {};
202
+ const self = this;
203
+ return (0, util_1.tryPromise)(function () {
204
+ if (self.info().transactionRequest.recipients) {
205
+ // recipients object found on the pending approvals - use it
206
+ params.recipients = self.info().transactionRequest.recipients;
207
+ return;
208
+ }
209
+ if (transaction.outs.length <= 2) {
210
+ transaction.outs.forEach(function (out) {
211
+ const outAddress = utxolib.address.fromOutputScript(out.script, network);
212
+ if (self.info().transactionRequest.destinationAddress === outAddress) {
213
+ // If this is the destination, then spend to it
214
+ params.recipients[outAddress] = out.value;
215
+ }
216
+ });
217
+ return;
218
+ }
219
+ // This looks like a sendmany
220
+ // Attempt to figure out the outputs by choosing all outputs that were not going back to the wallet as change addresses
221
+ return self.wallet.addresses({ chain: 1, sort: -1, limit: 500 }).then(function (result) {
222
+ const changeAddresses = lodash_1.default.keyBy(result.addresses, 'address');
223
+ transaction.outs.forEach(function (out) {
224
+ const outAddress = utxolib.address.fromOutputScript(out.script, network);
225
+ if (!changeAddresses[outAddress]) {
226
+ // If this is not a change address, then spend to it
227
+ params.recipients[outAddress] = out.value;
228
+ }
229
+ });
230
+ });
231
+ }).then(function () {
232
+ return self.wallet.createAndSignTransaction(params);
233
+ });
234
+ };
235
+ //
236
+ // constructApprovalTx
237
+ // constructs/signs a transaction for this pending approval, returning the txHex (but not sending it)
238
+ //
239
+ PendingApproval.prototype.constructApprovalTx = function (params, callback) {
240
+ params = params || {};
241
+ sdk_core_1.common.validateParams(params, [], ['walletPassphrase'], callback);
242
+ if (this.type() === 'transactionRequest' && !(params.walletPassphrase || params.xprv)) {
243
+ throw new Error('wallet passphrase or xprv required to approve a transactionRequest');
244
+ }
245
+ if (params.useOriginalFee) {
246
+ if (!lodash_1.default.isBoolean(params.useOriginalFee)) {
247
+ throw new Error('invalid type for useOriginalFeeRate');
248
+ }
249
+ if (params.fee || params.feeRate || params.feeTxConfirmTarget) {
250
+ throw new Error('cannot specify a fee/feerate/feeTxConfirmTarget as well as useOriginalFee');
251
+ }
252
+ }
253
+ const self = this;
254
+ return (0, util_1.tryPromise)(function () {
255
+ if (self.type() === 'transactionRequest') {
256
+ const extendParams = { txHex: self.info().transactionRequest.transaction };
257
+ if (params.useOriginalFee) {
258
+ extendParams.fee = self.info().transactionRequest.fee;
259
+ }
260
+ return self.populateWallet().then(function () {
261
+ return self.recreateAndSignTransaction(lodash_1.default.extend(params, extendParams));
262
+ });
263
+ }
264
+ });
265
+ };
266
+ //
267
+ // approve
268
+ // sets the pending approval to an approved state
269
+ //
270
+ PendingApproval.prototype.approve = function (params, callback) {
271
+ params = params || {};
272
+ sdk_core_1.common.validateParams(params, [], ['walletPassphrase', 'otp'], callback);
273
+ let canRecreateTransaction = true;
274
+ if (this.type() === 'transactionRequest') {
275
+ if (!params.walletPassphrase && !params.xprv) {
276
+ canRecreateTransaction = false;
277
+ }
278
+ // check the wallet balance and compare it with the transaction amount and fee
279
+ if (lodash_1.default.isUndefined(params.forceRecreate) && lodash_1.default.isObject(lodash_1.default.get(this, 'wallet.wallet'))) {
280
+ const requestedAmount = this.pendingApproval.info.transactionRequest.requestedAmount || 0;
281
+ const walletBalance = this.wallet.wallet.spendableBalance;
282
+ const delta = Math.abs(requestedAmount - walletBalance);
283
+ if (delta <= 10000) {
284
+ // it's a sweep because we're within 10k satoshis of the wallet balance
285
+ canRecreateTransaction = false;
286
+ }
287
+ }
288
+ }
289
+ const self = this;
290
+ return (0, util_1.tryPromise)(function () {
291
+ if (self.type() === 'transactionRequest') {
292
+ if (params.tx) {
293
+ // the approval tx was reconstructed and explicitly specified - pass it through
294
+ return {
295
+ tx: params.tx,
296
+ };
297
+ }
298
+ // this user may not have spending privileges or a passphrase may not have been passed in
299
+ if (!canRecreateTransaction) {
300
+ return {
301
+ tx: self.info().transactionRequest.transaction,
302
+ };
303
+ }
304
+ return self.populateWallet().then(function () {
305
+ const recreationParams = lodash_1.default.extend({}, params, { txHex: self.info().transactionRequest.transaction }, self.info().transactionRequest.buildParams);
306
+ // delete the old build params because we want 'recreateAndSign' to recreate the transaction
307
+ delete recreationParams.fee;
308
+ delete recreationParams.unspents;
309
+ delete recreationParams.txInfo;
310
+ delete recreationParams.estimatedSize;
311
+ delete recreationParams.changeAddresses;
312
+ return self.recreateAndSignTransaction(recreationParams);
313
+ });
314
+ }
315
+ })
316
+ .then(function (transaction) {
317
+ const approvalParams = { state: 'approved', otp: params.otp };
318
+ if (transaction) {
319
+ approvalParams.tx = transaction.tx;
320
+ }
321
+ return Promise.resolve(self.bitgo.put(self.url()).send(approvalParams).result()).then(callback).catch(callback);
322
+ })
323
+ .catch(function (error) {
324
+ if (!canRecreateTransaction &&
325
+ (error.message.indexOf('could not find unspent output for input') !== -1 ||
326
+ error.message.indexOf('transaction conflicts with an existing transaction in the send queue') !== -1)) {
327
+ throw new Error('unspents expired, wallet passphrase or xprv required to recreate transaction');
328
+ }
329
+ if (lodash_1.default.isUndefined(params.forceRecreate) &&
330
+ error.message.indexOf('could not find unspent output for input') !== -1) {
331
+ // if the unspents can't be found, we must retry with a newly constructed transaction, so we delete the tx and try again
332
+ // deleting params.tx will force the code to reach the 'recreateAndSignTransaction' function
333
+ delete params.tx;
334
+ params.forceRecreate = true;
335
+ self.approve(params, callback);
336
+ }
337
+ else {
338
+ throw error;
339
+ }
340
+ });
341
+ };
342
+ //
343
+ // rejected
344
+ // sets the pending approval to a rejected state
345
+ //
346
+ PendingApproval.prototype.reject = function (params, callback) {
347
+ params = params || {};
348
+ sdk_core_1.common.validateParams(params, [], [], callback);
349
+ return Promise.resolve(this.bitgo.put(this.url()).send({ state: 'rejected' }).result())
350
+ .then(callback)
351
+ .catch(callback);
352
+ };
353
+ //
354
+ // cancel
355
+ // rejects the pending approval
356
+ //
357
+ PendingApproval.prototype.cancel = function (params, callback) {
358
+ return this.reject(params, callback);
359
+ };
360
+ module.exports = PendingApproval;
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3YxL3BlbmRpbmdhcHByb3ZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsMEJBQTBCO0FBQzFCLDRFQUE0RTtBQUM1RSxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7QUFDRixtREFBOEM7QUFDOUMsOERBQWdEO0FBRWhELG9EQUF1QjtBQUN2QixrQ0FBcUM7QUFFckMsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU07SUFDOUQsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ25CLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN2QyxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLEtBQUs7QUFDTCx1Q0FBdUM7QUFDdkMsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHO0lBQzdCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFlBQVk7QUFDWiw0Q0FBNEM7QUFDNUMseUdBQXlHO0FBQ3pHLHNHQUFzRztBQUN0RywrR0FBK0c7QUFDL0csRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDOUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFF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LENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFNBQVM7QUFDVCwrQkFBK0I7QUFDL0IsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDM0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixpQkFBUyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBoaWRkZW5cbiAqL1xuXG4vKipcbiAqL1xuLy8gUGVuZGluZyBBcHByb3ZhbCBPYmplY3Rcbi8vIEhhbmRsZXMgYXBwcm92aW5nLCByZWplY3RpbmcgYW5kIGdldHRpbmcgaW5mb3JtYXRpb24gb24gcGVuZGluZyBhcHByb3ZhbHNcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNSwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuaW1wb3J0IHsgY29tbW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB0cnlQcm9taXNlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFBlbmRpbmdBcHByb3ZhbCA9IGZ1bmN0aW9uIChiaXRnbywgcGVuZGluZ0FwcHJvdmFsLCB3YWxsZXQpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICB0aGlzLnBlbmRpbmdBcHByb3ZhbCA9IHBlbmRpbmdBcHByb3ZhbDtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG59O1xuXG4vL1xuLy8gaWRcbi8vIEdldCB0aGUgaWQgb2YgdGhpcyBwZW5kaW5nIGFwcHJvdmFsLlxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuaWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC5pZDtcbn07XG5cbi8vXG4vLyBvd25lclR5cGVcbi8vIEdldCB0aGUgb3duZXIgdHlwZSAod2FsbGV0IG9yIGVudGVycHJpc2UpXG4vLyBQZW5kaW5nIGFwcHJvdmFscyBjYW4gYmUgYXBwcm92ZWQgb3IgbW9kaWZpZWQgYnkgZGlmZmVyZW50IHNjb3BlcyAoZGVwZW5kaW5nIG9uIGhvdyB0aGV5IHdlcmUgY3JlYXRlZClcbi8vIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhIHdhbGxldCwgdGhlbiBpdCBjYW4gYmUgYXBwcm92ZWQgYnkgYWRtaW5pc3RyYXRvcnMgb2YgdGhlIHdhbGxldFxuLy8gSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGFuIGVudGVycHJpc2UsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSBlbnRlcnByaXNlXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5vd25lclR5cGUgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSwgY2FsbGJhY2spO1xuXG4gIGlmICh0aGlzLnBlbmRpbmdBcHByb3ZhbC53YWxsZXRJZCkge1xuICAgIHJldHVybiAnd2FsbGV0JztcbiAgfSBlbHNlIGlmICh0aGlzLnBlbmRpbmdBcHByb3ZhbC5lbnRlcnByaXNlKSB7XG4gICAgcmV0dXJuICdlbnRlcnByaXNlJztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcGVuZGluZyBhcHByb3ZhbCBvd25lcjogbmVpdGhlciB3YWxsZXRJZCBub3IgZW50ZXJwcmlzZSB3YXMgcHJlc2VudCcpO1xuICB9XG59O1xuXG4vL1xuLy8gd2FsbGV0SWRcbi8vIEdldCB0aGUgd2FsbGV0IElEIHRoYXQgb3ducyAvIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUud2FsbGV0SWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC53YWxsZXRJZDtcbn07XG5cbi8vXG4vLyBlbnRlcnByaXNlSWRcbi8vIEdldCB0aGUgZW50ZXJwcmlzZSBJRCB0aGF0IG93bnMgLyBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmVudGVycHJpc2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2U7XG59O1xuXG4vL1xuLy8gc3RhdGVcbi8vIEdldCB0aGUgc3RhdGUgb2YgdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuc3RhdGU7XG59O1xuXG4vL1xuLy8gY3JlYXRvclxuLy8gR2V0IHRoZSBpZCBvZiB0aGUgdXNlciB0aGF0IHBlcmZvcm1lZCB0aGUgYWN0aW9uIHJlc3VsdGluZyBpbiB0aGlzIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmNyZWF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC5jcmVhdG9yO1xufTtcblxuLy9cbi8vIHR5cGVcbi8vIEdldCB0aGUgdHlwZSBvZiB0aGUgcGVuZGluZyBhcHByb3ZhbCAod2hhdCBpdCBhcHByb3Zlcylcbi8vIEV4YW1wbGU6IHRyYW5zYWN0aW9uUmVxdWVzdCwgdGFnVXBkYXRlUmVxdWVzdCwgcG9saWN5UnVsZVJlcXVlc3Rcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5wZW5kaW5nQXBwcm92YWwuaW5mbykge1xuICAgIHRocm93IG5ldyBFcnJvcigncGVuZGluZyBhcHByb3ZhbCBpbmZvIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuaW5mby50eXBlO1xufTtcblxuLy9cbi8vIHR5cGVcbi8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLmluZm87XG59O1xuXG4vL1xuLy8gYXBwcm92YWxzUmVxdWlyZWRcbi8vIGdldCB0aGUgbnVtYmVyIG9mIGFwcHJvdmFscyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyBwZW5kaW5nIGFwcHJvdmFsIHRvIGJlIGFwcHJvdmVkLlxuLy8gRGVmYXVsdHMgdG8gMSBpZiBhcHByb3ZhbHNSZXF1aXJlZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBvYmplY3Rcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmFwcHJvdmFsc1JlcXVpcmVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuYXBwcm92YWxzUmVxdWlyZWQgfHwgMTtcbn07XG5cbi8vXG4vLyB1cmxcbi8vIEdldHMgdGhlIHVybCBmb3IgdGhpcyBwZW5kaW5nIGFwcHJvdmFsXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS51cmwgPSBmdW5jdGlvbiAoZXh0cmEpIHtcbiAgZXh0cmEgPSBleHRyYSB8fCAnJztcbiAgcmV0dXJuIHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscy8nICsgdGhpcy5pZCgpICsgZXh0cmEpO1xufTtcblxuLy9cbi8vIGdldFxuLy8gUmVmZXRjaGVzIHRoaXMgcGVuZGluZyBhcHByb3ZhbCBhbmQgcmV0dXJucyBpdFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgpKS5yZXN1bHQoKSlcbiAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICBzZWxmLnBlbmRpbmdBcHByb3ZhbCA9IHJlcztcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgc2VsZi53YWxsZXQgaXMgc2V0XG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5wb3B1bGF0ZVdhbGxldCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGlmICghc2VsZi53YWxsZXQpIHtcbiAgICByZXR1cm4gc2VsZi5iaXRnb1xuICAgICAgLndhbGxldHMoKVxuICAgICAgLmdldCh7IGlkOiBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0IH0pXG4gICAgICAudGhlbihmdW5jdGlvbiAod2FsbGV0KSB7XG4gICAgICAgIGlmICghd2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgc291cmNld2FsbGV0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi53YWxsZXQgPSB3YWxsZXQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxmLndhbGxldC5pZCgpICE9PSBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNvdXJjZSB3YWxsZXQgZm9yIHBlbmRpbmcgYXBwcm92YWwnKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgLy8gb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG59O1xuXG4vL1xuLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHJlY3JlYXRlIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gb24gYSB3YWxsZXRcbi8vIHdlIHNob3VsZCBob3BlZnVsbHkgYmUgYWJsZSB0byBtb3ZlIHRoaXMgbG9naWMgc2VydmVyIHNpZGUgc29vblxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUucmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24gPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBfLmV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eEhleCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgocGFyYW1zLnR4SGV4LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICBpZiAoIXRyYW5zYWN0aW9uLm91dHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIGhhZCBubyBvdXRwdXRzIG9yIGZhaWxlZCB0byBwYXJzZSBzdWNjZXNzZnVsbHknKTtcbiAgfVxuXG4gIGNvbnN0IG5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzW2NvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0ubmV0d29ya107XG4gIHBhcmFtcy5yZWNpcGllbnRzID0ge307XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgcmV0dXJuIHRyeVByb21pc2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cykge1xuICAgICAgLy8gcmVjaXBpZW50cyBvYmplY3QgZm91bmQgb24gdGhlIHBlbmRpbmcgYXBwcm92YWxzIC0gdXNlIGl0XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9IHNlbGYuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdC5yZWNpcGllbnRzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb24ub3V0cy5sZW5ndGggPD0gMikge1xuICAgICAgdHJhbnNhY3Rpb24ub3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgICBpZiAoc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LmRlc3RpbmF0aW9uQWRkcmVzcyA9PT0gb3V0QWRkcmVzcykge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGRlc3RpbmF0aW9uLCB0aGVuIHNwZW5kIHRvIGl0XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHNbb3V0QWRkcmVzc10gPSBvdXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHNlbmRtYW55XG4gICAgLy8gQXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXRzIGJ5IGNob29zaW5nIGFsbCBvdXRwdXRzIHRoYXQgd2VyZSBub3QgZ29pbmcgYmFjayB0byB0aGUgd2FsbGV0IGFzIGNoYW5nZSBhZGRyZXNzZXNcbiAgICByZXR1cm4gc2VsZi53YWxsZXQuYWRkcmVzc2VzKHsgY2hhaW46IDEsIHNvcnQ6IC0xLCBsaW1pdDogNTAwIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gXy5rZXlCeShyZXN1bHQuYWRkcmVzc2VzLCAnYWRkcmVzcycpO1xuICAgICAgdHJhbnNhY3Rpb24ub3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgICBpZiAoIWNoYW5nZUFkZHJlc3Nlc1tvdXRBZGRyZXNzXSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgY2hhbmdlIGFkZHJlc3MsIHRoZW4gc3BlbmQgdG8gaXRcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1tvdXRBZGRyZXNzXSA9IG91dC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZWxmLndhbGxldC5jcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgfSk7XG59O1xuXG4vL1xuLy8gY29uc3RydWN0QXBwcm92YWxUeFxuLy8gY29uc3RydWN0cy9zaWducyBhIHRyYW5zYWN0aW9uIGZvciB0aGlzIHBlbmRpbmcgYXBwcm92YWwsIHJldHVybmluZyB0aGUgdHhIZXggKGJ1dCBub3Qgc2VuZGluZyBpdClcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmNvbnN0cnVjdEFwcHJvdmFsVHggPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldFBhc3NwaHJhc2UnXSwgY2FsbGJhY2spO1xuXG4gIGlmICh0aGlzLnR5cGUoKSA9PT0gJ3RyYW5zYWN0aW9uUmVxdWVzdCcgJiYgIShwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB8fCBwYXJhbXMueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhbGxldCBwYXNzcGhyYXNlIG9yIHhwcnYgcmVxdWlyZWQgdG8gYXBwcm92ZSBhIHRyYW5zYWN0aW9uUmVxdWVzdCcpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy51c2VPcmlnaW5hbEZlZSkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4ocGFyYW1zLnVzZU9yaWdpbmFsRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHR5cGUgZm9yIHVzZU9yaWdpbmFsRmVlUmF0ZScpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmZlZSB8fCBwYXJhbXMuZmVlUmF0ZSB8fCBwYXJhbXMuZmVlVHhDb25maXJtVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzcGVjaWZ5IGEgZmVlL2ZlZXJhdGUvZmVlVHhDb25maXJtVGFyZ2V0IGFzIHdlbGwgYXMgdXNlT3JpZ2luYWxGZWUnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHRyeVByb21pc2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxmLnR5cGUoKSA9PT0gJ3RyYW5zYWN0aW9uUmVxdWVzdCcpIHtcbiAgICAgIGNvbnN0IGV4dGVuZFBhcmFtczogYW55ID0geyB0eEhleDogc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LnRyYW5zYWN0aW9uIH07XG4gICAgICBpZiAocGFyYW1zLnVzZU9yaWdpbmFsRmVlKSB7XG4gICAgICAgIGV4dGVuZFBhcmFtcy5mZWUgPSBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QuZmVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGYucG9wdWxhdGVXYWxsZXQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYucmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24oXy5leHRlbmQocGFyYW1zLCBleHRlbmRQYXJhbXMpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vL1xuLy8gYXBwcm92ZVxuLy8gc2V0cyB0aGUgcGVuZGluZyBhcHByb3ZhbCB0byBhbiBhcHByb3ZlZCBzdGF0ZVxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuYXBwcm92ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsnd2FsbGV0UGFzc3BocmFzZScsICdvdHAnXSwgY2FsbGJhY2spO1xuXG4gIGxldCBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgaWYgKHRoaXMudHlwZSgpID09PSAndHJhbnNhY3Rpb25SZXF1ZXN0Jykge1xuICAgIGlmICghcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgJiYgIXBhcmFtcy54cHJ2KSB7XG4gICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdGhlIHdhbGxldCBiYWxhbmNlIGFuZCBjb21wYXJlIGl0IHdpdGggdGhlIHRyYW5zYWN0aW9uIGFtb3VudCBhbmQgZmVlXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLmZvcmNlUmVjcmVhdGUpICYmIF8uaXNPYmplY3QoXy5nZXQodGhpcywgJ3dhbGxldC53YWxsZXQnKSkpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZEFtb3VudCA9IHRoaXMucGVuZGluZ0FwcHJvdmFsLmluZm8udHJhbnNhY3Rpb25SZXF1ZXN0LnJlcXVlc3RlZEFtb3VudCB8fCAwO1xuICAgICAgY29uc3Qgd2FsbGV0QmFsYW5jZSA9IHRoaXMud2FsbGV0LndhbGxldC5zcGVuZGFibGVCYWxhbmNlO1xuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLmFicyhyZXF1ZXN0ZWRBbW91bnQgLSB3YWxsZXRCYWxhbmNlKTtcbiAgICAgIGlmIChkZWx0YSA8PSAxMDAwMCkge1xuICAgICAgICAvLyBpdCdzIGEgc3dlZXAgYmVjYXVzZSB3ZSdyZSB3aXRoaW4gMTBrIHNhdG9zaGlzIG9mIHRoZSB3YWxsZXQgYmFsYW5jZVxuICAgICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiB0cnlQcm9taXNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VsZi50eXBlKCkgPT09ICd0cmFuc2FjdGlvblJlcXVlc3QnKSB7XG4gICAgICBpZiAocGFyYW1zLnR4KSB7XG4gICAgICAgIC8vIHRoZSBhcHByb3ZhbCB0eCB3YXMgcmVjb25zdHJ1Y3RlZCBhbmQgZXhwbGljaXRseSBzcGVjaWZpZWQgLSBwYXNzIGl0IHRocm91Z2hcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eDogcGFyYW1zLnR4LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHVzZXIgbWF5IG5vdCBoYXZlIHNwZW5kaW5nIHByaXZpbGVnZXMgb3IgYSBwYXNzcGhyYXNlIG1heSBub3QgaGF2ZSBiZWVuIHBhc3NlZCBpblxuICAgICAgaWYgKCFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHg6IHNlbGYuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdC50cmFuc2FjdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGYucG9wdWxhdGVXYWxsZXQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjcmVhdGlvblBhcmFtcyA9IF8uZXh0ZW5kKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB7IHR4SGV4OiBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QudHJhbnNhY3Rpb24gfSxcbiAgICAgICAgICBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gZGVsZXRlIHRoZSBvbGQgYnVpbGQgcGFyYW1zIGJlY2F1c2Ugd2Ugd2FudCAncmVjcmVhdGVBbmRTaWduJyB0byByZWNyZWF0ZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMuZmVlO1xuICAgICAgICBkZWxldGUgcmVjcmVhdGlvblBhcmFtcy51bnNwZW50cztcbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMudHhJbmZvO1xuICAgICAgICBkZWxldGUgcmVjcmVhdGlvblBhcmFtcy5lc3RpbWF0ZWRTaXplO1xuICAgICAgICBkZWxldGUgcmVjcmVhdGlvblBhcmFtcy5jaGFuZ2VBZGRyZXNzZXM7XG4gICAgICAgIHJldHVybiBzZWxmLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHJlY3JlYXRpb25QYXJhbXMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KVxuICAgIC50aGVuKGZ1bmN0aW9uICh0cmFuc2FjdGlvbikge1xuICAgICAgY29uc3QgYXBwcm92YWxQYXJhbXM6IGFueSA9IHsgc3RhdGU6ICdhcHByb3ZlZCcsIG90cDogcGFyYW1zLm90cCB9O1xuICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgIGFwcHJvdmFsUGFyYW1zLnR4ID0gdHJhbnNhY3Rpb24udHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNlbGYuYml0Z28ucHV0KHNlbGYudXJsKCkpLnNlbmQoYXBwcm92YWxQYXJhbXMpLnJlc3VsdCgpKS50aGVuKGNhbGxiYWNrKS5jYXRjaChjYWxsYmFjayk7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uICYmXG4gICAgICAgIChlcnJvci5tZXNzYWdlLmluZGV4T2YoJ2NvdWxkIG5vdCBmaW5kIHVuc3BlbnQgb3V0cHV0IGZvciBpbnB1dCcpICE9PSAtMSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5kZXhPZigndHJhbnNhY3Rpb24gY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24gaW4gdGhlIHNlbmQgcXVldWUnKSAhPT0gLTEpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnNwZW50cyBleHBpcmVkLCB3YWxsZXQgcGFzc3BocmFzZSBvciB4cHJ2IHJlcXVpcmVkIHRvIHJlY3JlYXRlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLmZvcmNlUmVjcmVhdGUpICYmXG4gICAgICAgIGVycm9yLm1lc3NhZ2UuaW5kZXhPZignY291bGQgbm90IGZpbmQgdW5zcGVudCBvdXRwdXQgZm9yIGlucHV0JykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgdGhlIHVuc3BlbnRzIGNhbid0IGJlIGZvdW5kLCB3ZSBtdXN0IHJldHJ5IHdpdGggYSBuZXdseSBjb25zdHJ1Y3RlZCB0cmFuc2FjdGlvbiwgc28gd2UgZGVsZXRlIHRoZSB0eCBhbmQgdHJ5IGFnYWluXG4gICAgICAgIC8vIGRlbGV0aW5nIHBhcmFtcy50eCB3aWxsIGZvcmNlIHRoZSBjb2RlIHRvIHJlYWNoIHRoZSAncmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24nIGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBwYXJhbXMudHg7XG4gICAgICAgIHBhcmFtcy5mb3JjZVJlY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5hcHByb3ZlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG59O1xuXG4vL1xuLy8gcmVqZWN0ZWRcbi8vIHNldHMgdGhlIHBlbmRpbmcgYXBwcm92YWwgdG8gYSByZWplY3RlZCBzdGF0ZVxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUucmVqZWN0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28ucHV0KHRoaXMudXJsKCkpLnNlbmQoeyBzdGF0ZTogJ3JlamVjdGVkJyB9KS5yZXN1bHQoKSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGNhbmNlbFxuLy8gcmVqZWN0cyB0aGUgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHRoaXMucmVqZWN0KHBhcmFtcywgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0ID0gUGVuZGluZ0FwcHJvdmFsO1xuIl19
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ declare const PendingApprovals: (bitgo: any) => void;
5
+ export = PendingApprovals;
6
+ //# sourceMappingURL=pendingapprovals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingapprovals.d.ts","sourceRoot":"","sources":["../../../src/v1/pendingapprovals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,QAAA,MAAM,gBAAgB,sBAGrB,CAAC;AAqDF,SAAS,gBAAgB,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * @hidden
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ /**
39
+ */
40
+ //
41
+ // Pending approvals listing object
42
+ // Lists pending approvals and get pending approval objects
43
+ //
44
+ // Copyright 2015, BitGo, Inc. All Rights Reserved.
45
+ //
46
+ const _ = __importStar(require("lodash"));
47
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
48
+ const PendingApproval = require('./pendingapproval');
49
+ //
50
+ // Constructor
51
+ //
52
+ const PendingApprovals = function (bitgo) {
53
+ // @ts-expect-error - no implicit this
54
+ this.bitgo = bitgo;
55
+ };
56
+ //
57
+ // list
58
+ // List the pending approvals available to the user
59
+ //
60
+ PendingApprovals.prototype.list = function (params, callback) {
61
+ params = params || {};
62
+ sdk_core_1.common.validateParams(params, [], ['walletId', 'enterpriseId'], callback);
63
+ const queryParams = {};
64
+ if (_.isString(params.walletId)) {
65
+ queryParams.walletId = params.walletId;
66
+ }
67
+ if (_.isString(params.enterpriseId)) {
68
+ queryParams.enterprise = params.enterpriseId;
69
+ }
70
+ if (Object.keys(queryParams).length !== 1) {
71
+ throw new Error('must provide exactly 1 of walletId or enterpriseId to get pending approvals on');
72
+ }
73
+ const self = this;
74
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/pendingapprovals')).query(queryParams).result())
75
+ .then(function (body) {
76
+ body.pendingApprovals = body.pendingApprovals.map(function (p) {
77
+ return new PendingApproval(self.bitgo, p);
78
+ });
79
+ return body;
80
+ })
81
+ .then(callback)
82
+ .catch(callback);
83
+ };
84
+ //
85
+ // get
86
+ // Fetch an existing pending approval
87
+ // Parameters include:
88
+ // id: the pending approval id
89
+ //
90
+ PendingApprovals.prototype.get = function (params, callback) {
91
+ params = params || {};
92
+ sdk_core_1.common.validateParams(params, ['id'], [], callback);
93
+ const self = this;
94
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/pendingapprovals/' + params.id)).result())
95
+ .then(function (body) {
96
+ return new PendingApproval(self.bitgo, body);
97
+ })
98
+ .then(callback)
99
+ .catch(callback);
100
+ };
101
+ module.exports = PendingApprovals;
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS9wZW5kaW5nYXBwcm92YWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVIO0dBQ0c7QUFDSCxFQUFFO0FBQ0YsbUNBQW1DO0FBQ25DLDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7QUFFRiwwQ0FBNEI7QUFFNUIsbURBQThDO0FBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXJELEVBQUU7QUFDRixjQUFjO0FBQ2QsRUFBRTtBQUNGLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxLQUFLO0lBQ3RDLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsT0FBTztBQUNQLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzFELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFMUUsTUFBTSxXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxXQUFXLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDcEcsSUFBSSxDQUFDLFVBQVUsSUFBSTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDM0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixNQUFNO0FBQ04scUNBQXFDO0FBQ3JDLHNCQUFzQjtBQUN0QixpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUN6RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5RixJQUFJLENBQUMsVUFBVSxJQUFJO1FBQ2xCLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLGlCQUFTLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBQZW5kaW5nIGFwcHJvdmFscyBsaXN0aW5nIG9iamVjdFxuLy8gTGlzdHMgcGVuZGluZyBhcHByb3ZhbHMgYW5kIGdldCBwZW5kaW5nIGFwcHJvdmFsIG9iamVjdHNcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNSwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGNvbW1vbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmNvbnN0IFBlbmRpbmdBcHByb3ZhbCA9IHJlcXVpcmUoJy4vcGVuZGluZ2FwcHJvdmFsJyk7XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFBlbmRpbmdBcHByb3ZhbHMgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuLy9cbi8vIGxpc3Rcbi8vIExpc3QgdGhlIHBlbmRpbmcgYXBwcm92YWxzIGF2YWlsYWJsZSB0byB0aGUgdXNlclxuLy9cblBlbmRpbmdBcHByb3ZhbHMucHJvdG90eXBlLmxpc3QgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldElkJywgJ2VudGVycHJpc2VJZCddLCBjYWxsYmFjayk7XG5cbiAgY29uc3QgcXVlcnlQYXJhbXM6IGFueSA9IHt9O1xuICBpZiAoXy5pc1N0cmluZyhwYXJhbXMud2FsbGV0SWQpKSB7XG4gICAgcXVlcnlQYXJhbXMud2FsbGV0SWQgPSBwYXJhbXMud2FsbGV0SWQ7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcocGFyYW1zLmVudGVycHJpc2VJZCkpIHtcbiAgICBxdWVyeVBhcmFtcy5lbnRlcnByaXNlID0gcGFyYW1zLmVudGVycHJpc2VJZDtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhxdWVyeVBhcmFtcykubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgZXhhY3RseSAxIG9mIHdhbGxldElkIG9yIGVudGVycHJpc2VJZCB0byBnZXQgcGVuZGluZyBhcHByb3ZhbHMgb24nKTtcbiAgfVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscycpKS5xdWVyeShxdWVyeVBhcmFtcykucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIGJvZHkucGVuZGluZ0FwcHJvdmFscyA9IGJvZHkucGVuZGluZ0FwcHJvdmFscy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQZW5kaW5nQXBwcm92YWwoc2VsZi5iaXRnbywgcCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBnZXRcbi8vIEZldGNoIGFuIGV4aXN0aW5nIHBlbmRpbmcgYXBwcm92YWxcbi8vIFBhcmFtZXRlcnMgaW5jbHVkZTpcbi8vICAgaWQ6ICB0aGUgcGVuZGluZyBhcHByb3ZhbCBpZFxuLy9cblBlbmRpbmdBcHByb3ZhbHMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydpZCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscy8nICsgcGFyYW1zLmlkKSkucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIHJldHVybiBuZXcgUGVuZGluZ0FwcHJvdmFsKHNlbGYuYml0Z28sIGJvZHkpO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCA9IFBlbmRpbmdBcHByb3ZhbHM7XG4iXX0=
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Co-sign a PSBT.
3
+ * Simply a wrapper around `utxolib.bitgo.createPsbtFromBuffer` and `psbt.signAllInputsHD`.
4
+ * @param params
5
+ */
6
+ export declare function signPsbtRequest(params: {
7
+ psbt: string;
8
+ keychain: {
9
+ xprv: string;
10
+ };
11
+ } | unknown): {
12
+ psbt: string;
13
+ };
14
+ //# sourceMappingURL=signPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signPsbt.d.ts","sourceRoot":"","sources":["../../../src/v1/signPsbt.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,OAAO,GAAG;IAC/F,IAAI,EAAE,MAAM,CAAC;CACd,CAwBA"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.signPsbtRequest = signPsbtRequest;
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ const debug_1 = __importDefault(require("debug"));
42
+ const debug = (0, debug_1.default)('bitgo:v1:txb');
43
+ /**
44
+ * Co-sign a PSBT.
45
+ * Simply a wrapper around `utxolib.bitgo.createPsbtFromBuffer` and `psbt.signAllInputsHD`.
46
+ * @param params
47
+ */
48
+ function signPsbtRequest(params) {
49
+ if (typeof params !== 'object' || params === null) {
50
+ throw new Error(`invalid argument`);
51
+ }
52
+ if (!('psbt' in params) || typeof params.psbt !== 'string') {
53
+ throw new Error(`invalid params.psbt`);
54
+ }
55
+ if (!('keychain' in params) || typeof params.keychain !== 'object' || params.keychain === null) {
56
+ throw new Error(`invalid params.keychain`);
57
+ }
58
+ if (!('xprv' in params.keychain) || typeof params.keychain.xprv !== 'string') {
59
+ throw new Error(`invalid params.keychain.xprv`);
60
+ }
61
+ const psbt = utxolib.bitgo.createPsbtDecode(params.psbt, utxolib.networks.bitcoin);
62
+ const keypair = utxolib.bip32.fromBase58(params.keychain.xprv, utxolib.networks.bitcoin);
63
+ debug('signing PSBT with keychain %s', keypair.neutered().toBase58());
64
+ utxolib.bitgo.withUnsafeNonSegwit(psbt, () => psbt.signAllInputsHD(keypair));
65
+ return {
66
+ psbt: psbt.toBuffer().toString('hex'),
67
+ };
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdjEvc2lnblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSwwQ0EwQkM7QUFyQ0QsOERBQWdEO0FBRWhELGtEQUErQjtBQUUvQixNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyxjQUFjLENBQUMsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE1BQThEO0lBRzVGLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQy9GLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RixLQUFLLENBQUMsK0JBQStCLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7S0FDdEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ2JpdGdvOnYxOnR4YicpO1xuXG4vKipcbiAqIENvLXNpZ24gYSBQU0JULlxuICogU2ltcGx5IGEgd3JhcHBlciBhcm91bmQgYHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXJgIGFuZCBgcHNidC5zaWduQWxsSW5wdXRzSERgLlxuICogQHBhcmFtIHBhcmFtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblBzYnRSZXF1ZXN0KHBhcmFtczogeyBwc2J0OiBzdHJpbmc7IGtleWNoYWluOiB7IHhwcnY6IHN0cmluZyB9IH0gfCB1bmtub3duKToge1xuICBwc2J0OiBzdHJpbmc7XG59IHtcbiAgaWYgKHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnIHx8IHBhcmFtcyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudGApO1xuICB9XG5cbiAgaWYgKCEoJ3BzYnQnIGluIHBhcmFtcykgfHwgdHlwZW9mIHBhcmFtcy5wc2J0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXJhbXMucHNidGApO1xuICB9XG5cbiAgaWYgKCEoJ2tleWNoYWluJyBpbiBwYXJhbXMpIHx8IHR5cGVvZiBwYXJhbXMua2V5Y2hhaW4gIT09ICdvYmplY3QnIHx8IHBhcmFtcy5rZXljaGFpbiA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXJhbXMua2V5Y2hhaW5gKTtcbiAgfVxuXG4gIGlmICghKCd4cHJ2JyBpbiBwYXJhbXMua2V5Y2hhaW4pIHx8IHR5cGVvZiBwYXJhbXMua2V5Y2hhaW4ueHBydiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcGFyYW1zLmtleWNoYWluLnhwcnZgKTtcbiAgfVxuXG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnREZWNvZGUocGFyYW1zLnBzYnQsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gIGNvbnN0IGtleXBhaXIgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleWNoYWluLnhwcnYsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gIGRlYnVnKCdzaWduaW5nIFBTQlQgd2l0aCBrZXljaGFpbiAlcycsIGtleXBhaXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgdXR4b2xpYi5iaXRnby53aXRoVW5zYWZlTm9uU2Vnd2l0KHBzYnQsICgpID0+IHBzYnQuc2lnbkFsbElucHV0c0hEKGtleXBhaXIpKTtcbiAgcmV0dXJuIHtcbiAgICBwc2J0OiBwc2J0LnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLFxuICB9O1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @hidden
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/v1/transactionBuilder.ts"],"names":[],"mappings":"AAAA;;GAEG"}