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