@bitgo-beta/sdk-api 1.10.1-beta.184 → 1.10.1-beta.1841
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/dist/package.json +20 -27
- package/dist/src/api.d.ts +8 -5
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/api.js +130 -71
- package/dist/src/bitgoAPI.d.ts +133 -16
- package/dist/src/bitgoAPI.d.ts.map +1 -1
- package/dist/src/bitgoAPI.js +796 -306
- package/dist/src/encrypt.d.ts +23 -4
- package/dist/src/encrypt.d.ts.map +1 -1
- package/dist/src/encrypt.js +86 -13
- package/dist/src/encryptV2.d.ts +68 -0
- package/dist/src/encryptV2.d.ts.map +1 -0
- package/dist/src/encryptV2.js +202 -0
- package/dist/src/encryptionSession.d.ts +34 -0
- package/dist/src/encryptionSession.d.ts.map +1 -0
- package/dist/src/encryptionSession.js +95 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -2
- package/dist/src/types.d.ts +64 -44
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +4 -2
- package/dist/src/util.d.ts +12 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +57 -4
- package/dist/src/v1/blockchain.js +25 -12
- package/dist/src/v1/keychains.js +39 -26
- package/dist/src/v1/markets.js +10 -5
- package/dist/src/v1/pendingapproval.d.ts.map +1 -1
- package/dist/src/v1/pendingapproval.js +57 -18
- package/dist/src/v1/pendingapprovals.d.ts.map +1 -1
- package/dist/src/v1/pendingapprovals.js +41 -7
- package/dist/src/v1/signPsbt.d.ts +14 -0
- package/dist/src/v1/signPsbt.d.ts.map +1 -0
- package/dist/src/v1/signPsbt.js +69 -0
- package/dist/src/v1/transactionBuilder.js +221 -91
- package/dist/src/v1/travelRule.js +163 -66
- package/dist/src/v1/verifyAddress.d.ts +6 -0
- package/dist/src/v1/verifyAddress.d.ts.map +1 -0
- package/dist/src/v1/verifyAddress.js +50 -0
- package/dist/src/v1/wallet.d.ts.map +1 -1
- package/dist/src/v1/wallet.js +501 -230
- package/dist/src/v1/wallets.js +118 -53
- package/dist/test/unit/api.d.ts +2 -0
- package/dist/test/unit/api.d.ts.map +1 -0
- package/dist/test/unit/api.js +307 -0
- package/dist/test/unit/bitgoAPI.d.ts +2 -0
- package/dist/test/unit/bitgoAPI.d.ts.map +1 -0
- package/dist/test/unit/bitgoAPI.js +1027 -0
- package/dist/test/unit/encrypt.d.ts +2 -0
- package/dist/test/unit/encrypt.d.ts.map +1 -0
- package/dist/test/unit/encrypt.js +415 -0
- package/dist/test/unit/hmacStrategy.d.ts +2 -0
- package/dist/test/unit/hmacStrategy.d.ts.map +1 -0
- package/dist/test/unit/hmacStrategy.js +136 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +65 -0
- package/dist/test/unit/v1/fixtures/accelerate-tx.d.ts +4 -0
- package/dist/test/unit/v1/fixtures/accelerate-tx.d.ts.map +1 -0
- package/dist/test/unit/v1/fixtures/accelerate-tx.js +53 -0
- package/dist/test/unit/v1/fixtures/index.d.ts +3 -0
- package/dist/test/unit/v1/fixtures/index.d.ts.map +1 -0
- package/dist/test/unit/v1/fixtures/index.js +24 -0
- package/dist/test/unit/v1/signPsbt.d.ts +2 -0
- package/dist/test/unit/v1/signPsbt.d.ts.map +1 -0
- package/dist/test/unit/v1/signPsbt.js +53 -0
- package/dist/test/unit/v1/travelRule.d.ts +2 -0
- package/dist/test/unit/v1/travelRule.d.ts.map +1 -0
- package/dist/test/unit/v1/travelRule.js +173 -0
- package/dist/test/unit/v1/wallet.d.ts +2 -0
- package/dist/test/unit/v1/wallet.d.ts.map +1 -0
- package/dist/test/unit/v1/wallet.js +1658 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -27
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -555
- package/dist/web/main.js +0 -2
- package/dist/web/main.js.LICENSE.txt +0 -110
|
@@ -2,6 +2,42 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @hidden
|
|
4
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
|
+
};
|
|
5
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
42
|
/**
|
|
7
43
|
*/
|
|
@@ -13,9 +49,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
49
|
//
|
|
14
50
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
15
51
|
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
16
|
-
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
17
|
-
const
|
|
18
|
-
const _ = require("lodash");
|
|
52
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
53
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
19
54
|
//
|
|
20
55
|
// Constructor
|
|
21
56
|
//
|
|
@@ -39,7 +74,7 @@ TravelRule.prototype.getRecipients = function (params, callback) {
|
|
|
39
74
|
params.txid = params.txid || params.hash;
|
|
40
75
|
sdk_core_1.common.validateParams(params, ['txid'], [], callback);
|
|
41
76
|
const url = this.url(params.txid + '/recipients');
|
|
42
|
-
return
|
|
77
|
+
return Promise.resolve(this.bitgo.get(url).result('recipients')).then(callback).catch(callback);
|
|
43
78
|
};
|
|
44
79
|
TravelRule.prototype.validateTravelInfo = function (info) {
|
|
45
80
|
const fields = {
|
|
@@ -54,7 +89,7 @@ TravelRule.prototype.validateTravelInfo = function (info) {
|
|
|
54
89
|
toUserAddress: { type: 'string' },
|
|
55
90
|
extra: { type: 'object' },
|
|
56
91
|
};
|
|
57
|
-
|
|
92
|
+
lodash_1.default.forEach(fields, function (field, fieldName) {
|
|
58
93
|
// No required fields yet -- should there be?
|
|
59
94
|
if (field.required) {
|
|
60
95
|
if (info[fieldName] === undefined) {
|
|
@@ -66,96 +101,156 @@ TravelRule.prototype.validateTravelInfo = function (info) {
|
|
|
66
101
|
}
|
|
67
102
|
});
|
|
68
103
|
// Strip out any other fields we don't know about
|
|
69
|
-
const result =
|
|
70
|
-
if (
|
|
104
|
+
const result = lodash_1.default.pick(info, lodash_1.default.keys(fields));
|
|
105
|
+
if (lodash_1.default.isEmpty(result)) {
|
|
71
106
|
throw new Error('empty travel data');
|
|
72
107
|
}
|
|
73
108
|
return result;
|
|
74
109
|
};
|
|
75
|
-
|
|
76
|
-
* Takes a transaction object as returned by getTransaction or listTransactions, along
|
|
77
|
-
* with a keychain (or hdnode object), and attempts to decrypt any encrypted travel
|
|
78
|
-
* info included in the transaction's receivedTravelInfo field.
|
|
79
|
-
* Parameters:
|
|
80
|
-
* tx: a transaction object
|
|
81
|
-
* keychain: keychain object (with xprv)
|
|
82
|
-
* Returns:
|
|
83
|
-
* the tx object, augmented with decrypted travelInfo fields
|
|
84
|
-
*/
|
|
85
|
-
TravelRule.prototype.decryptReceivedTravelInfo = function (params = {}) {
|
|
110
|
+
function validateTravelRuleDecryptParams(params = {}) {
|
|
86
111
|
const tx = params.tx;
|
|
87
|
-
if (!
|
|
112
|
+
if (!lodash_1.default.isObject(tx)) {
|
|
88
113
|
throw new Error('expecting tx param to be object');
|
|
89
114
|
}
|
|
90
115
|
if (!tx.receivedTravelInfo || !tx.receivedTravelInfo.length) {
|
|
91
|
-
return tx;
|
|
116
|
+
return { tx, hdNode: undefined };
|
|
92
117
|
}
|
|
93
118
|
const keychain = params.keychain;
|
|
94
|
-
if (!
|
|
119
|
+
if (!lodash_1.default.isObject(keychain) || !lodash_1.default.isString(keychain.xprv)) {
|
|
95
120
|
throw new Error('expecting keychain param with xprv');
|
|
96
121
|
}
|
|
97
122
|
const hdNode = utxo_lib_1.bip32.fromBase58(keychain.xprv);
|
|
98
|
-
tx
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
try {
|
|
102
|
-
const decrypted = this.bitgo.decrypt({
|
|
103
|
-
input: info.encryptedTravelInfo,
|
|
104
|
-
password: secret,
|
|
105
|
-
});
|
|
106
|
-
info.travelInfo = JSON.parse(decrypted);
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
return tx;
|
|
113
|
-
};
|
|
114
|
-
TravelRule.prototype.prepareParams = function (params) {
|
|
123
|
+
return { tx, hdNode };
|
|
124
|
+
}
|
|
125
|
+
function prepareTravelRuleParamsCommon(self, params) {
|
|
115
126
|
params = params || {};
|
|
116
127
|
params.txid = params.txid || params.hash;
|
|
117
128
|
sdk_core_1.common.validateParams(params, ['txid'], ['fromPrivateInfo']);
|
|
118
129
|
const txid = params.txid;
|
|
119
130
|
const recipient = params.recipient;
|
|
120
131
|
let travelInfo = params.travelInfo;
|
|
121
|
-
if (!recipient || !
|
|
132
|
+
if (!recipient || !lodash_1.default.isObject(recipient)) {
|
|
122
133
|
throw new Error('invalid or missing recipient');
|
|
123
134
|
}
|
|
124
|
-
if (!travelInfo || !
|
|
135
|
+
if (!travelInfo || !lodash_1.default.isObject(travelInfo)) {
|
|
125
136
|
throw new Error('invalid or missing travelInfo');
|
|
126
137
|
}
|
|
127
138
|
if (!params.noValidate) {
|
|
128
|
-
travelInfo =
|
|
139
|
+
travelInfo = self.validateTravelInfo(travelInfo);
|
|
129
140
|
}
|
|
130
|
-
// Fill in toEnterprise if not already filled
|
|
131
141
|
if (!travelInfo.toEnterprise && recipient.enterprise) {
|
|
132
142
|
travelInfo.toEnterprise = recipient.enterprise;
|
|
133
143
|
}
|
|
134
144
|
// If a key was not provided, create a new random key
|
|
135
|
-
let fromKey = params.fromKey && utxolib.ECPair.fromWIF(params.fromKey, sdk_core_1.getNetwork());
|
|
145
|
+
let fromKey = params.fromKey && utxolib.ECPair.fromWIF(params.fromKey, (0, sdk_core_1.getNetwork)());
|
|
136
146
|
if (!fromKey) {
|
|
137
|
-
fromKey = sdk_core_1.makeRandomKey();
|
|
147
|
+
fromKey = (0, sdk_core_1.makeRandomKey)();
|
|
138
148
|
}
|
|
139
149
|
// Compute the shared key for encryption
|
|
140
|
-
const sharedSecret = sdk_core_1.getSharedSecret(fromKey, Buffer.from(recipient.pubKey, 'hex')).toString('hex');
|
|
150
|
+
const sharedSecret = (0, sdk_core_1.getSharedSecret)(fromKey, Buffer.from(recipient.pubKey, 'hex')).toString('hex');
|
|
141
151
|
// JSON-ify and encrypt the payload
|
|
142
152
|
const travelInfoJSON = JSON.stringify(travelInfo);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
153
|
+
return {
|
|
154
|
+
txid,
|
|
155
|
+
recipient,
|
|
156
|
+
travelInfoJSON,
|
|
157
|
+
fromKey,
|
|
158
|
+
sharedSecret,
|
|
159
|
+
fromPrivateInfo: params.fromPrivateInfo,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function buildTravelRuleSendParams(prepared, encryptedTravelInfo) {
|
|
147
163
|
const result = {
|
|
148
|
-
txid: txid,
|
|
149
|
-
outputIndex: recipient.outputIndex,
|
|
150
|
-
toPubKey: recipient.pubKey,
|
|
151
|
-
fromPubKey: fromKey.publicKey.toString('hex'),
|
|
164
|
+
txid: prepared.txid,
|
|
165
|
+
outputIndex: prepared.recipient.outputIndex,
|
|
166
|
+
toPubKey: prepared.recipient.pubKey,
|
|
167
|
+
fromPubKey: prepared.fromKey.publicKey.toString('hex'),
|
|
152
168
|
encryptedTravelInfo: encryptedTravelInfo,
|
|
153
169
|
fromPrivateInfo: undefined,
|
|
154
170
|
};
|
|
155
|
-
if (
|
|
156
|
-
result.fromPrivateInfo =
|
|
171
|
+
if (prepared.fromPrivateInfo) {
|
|
172
|
+
result.fromPrivateInfo = prepared.fromPrivateInfo;
|
|
157
173
|
}
|
|
158
174
|
return result;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Takes a transaction object as returned by getTransaction or listTransactions, along
|
|
178
|
+
* with a keychain (or hdnode object), and attempts to decrypt any encrypted travel
|
|
179
|
+
* info included in the transaction's receivedTravelInfo field.
|
|
180
|
+
* Parameters:
|
|
181
|
+
* tx: a transaction object
|
|
182
|
+
* keychain: keychain object (with xprv)
|
|
183
|
+
* Returns:
|
|
184
|
+
* the tx object, augmented with decrypted travelInfo fields
|
|
185
|
+
* TODO: Deprecate in favor of decryptReceivedTravelInfoAsync once v2 encryption is default.
|
|
186
|
+
*/
|
|
187
|
+
TravelRule.prototype.decryptReceivedTravelInfo = function (params = {}) {
|
|
188
|
+
const { tx, hdNode } = validateTravelRuleDecryptParams(params);
|
|
189
|
+
if (!hdNode) {
|
|
190
|
+
return tx;
|
|
191
|
+
}
|
|
192
|
+
tx.receivedTravelInfo.forEach((info) => {
|
|
193
|
+
const key = hdNode.derivePath((0, sdk_core_1.sanitizeLegacyPath)(info.toPubKeyPath));
|
|
194
|
+
const secret = (0, sdk_core_1.getSharedSecret)(key, Buffer.from(info.fromPubKey, 'hex')).toString('hex');
|
|
195
|
+
try {
|
|
196
|
+
const decrypted = this.bitgo.decrypt({
|
|
197
|
+
input: info.encryptedTravelInfo,
|
|
198
|
+
password: secret,
|
|
199
|
+
});
|
|
200
|
+
info.travelInfo = JSON.parse(decrypted);
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
return tx;
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Async version of decryptReceivedTravelInfo with v2 encrypt/decrypt support.
|
|
210
|
+
*/
|
|
211
|
+
TravelRule.prototype.decryptReceivedTravelInfoAsync = async function (params = {}) {
|
|
212
|
+
const { tx, hdNode } = validateTravelRuleDecryptParams(params);
|
|
213
|
+
if (!hdNode) {
|
|
214
|
+
return tx;
|
|
215
|
+
}
|
|
216
|
+
for (const info of tx.receivedTravelInfo) {
|
|
217
|
+
const key = hdNode.derivePath((0, sdk_core_1.sanitizeLegacyPath)(info.toPubKeyPath));
|
|
218
|
+
const secret = (0, sdk_core_1.getSharedSecret)(key, Buffer.from(info.fromPubKey, 'hex')).toString('hex');
|
|
219
|
+
try {
|
|
220
|
+
const decrypted = await this.bitgo.decryptAsync({
|
|
221
|
+
input: info.encryptedTravelInfo,
|
|
222
|
+
password: secret,
|
|
223
|
+
});
|
|
224
|
+
info.travelInfo = JSON.parse(decrypted);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return tx;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* TODO: Deprecate in favor of prepareParamsAsync once v2 encryption is default.
|
|
234
|
+
*/
|
|
235
|
+
TravelRule.prototype.prepareParams = function (params) {
|
|
236
|
+
const prepared = prepareTravelRuleParamsCommon(this, params);
|
|
237
|
+
const encryptedTravelInfo = this.bitgo.encrypt({
|
|
238
|
+
input: prepared.travelInfoJSON,
|
|
239
|
+
password: prepared.sharedSecret,
|
|
240
|
+
});
|
|
241
|
+
return buildTravelRuleSendParams(prepared, encryptedTravelInfo);
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Async version of prepareParams with v2 encrypt/decrypt support.
|
|
245
|
+
*/
|
|
246
|
+
TravelRule.prototype.prepareParamsAsync = async function (params) {
|
|
247
|
+
const prepared = prepareTravelRuleParamsCommon(this, params);
|
|
248
|
+
const encryptedTravelInfo = await this.bitgo.encryptAsync({
|
|
249
|
+
input: prepared.travelInfoJSON,
|
|
250
|
+
password: prepared.sharedSecret,
|
|
251
|
+
encryptionVersion: params.encryptionVersion,
|
|
252
|
+
});
|
|
253
|
+
return buildTravelRuleSendParams(prepared, encryptedTravelInfo);
|
|
159
254
|
};
|
|
160
255
|
/**
|
|
161
256
|
* Send travel data to the server for a transaction
|
|
@@ -164,13 +259,15 @@ TravelRule.prototype.send = function (params, callback) {
|
|
|
164
259
|
params = params || {};
|
|
165
260
|
params.txid = params.txid || params.hash;
|
|
166
261
|
sdk_core_1.common.validateParams(params, ['txid', 'toPubKey', 'encryptedTravelInfo'], ['fromPubKey', 'fromPrivateInfo'], callback);
|
|
167
|
-
if (!
|
|
262
|
+
if (!lodash_1.default.isNumber(params.outputIndex)) {
|
|
168
263
|
throw new Error('invalid outputIndex');
|
|
169
264
|
}
|
|
170
|
-
return
|
|
265
|
+
return Promise.resolve(this.bitgo
|
|
171
266
|
.post(this.url(params.txid + '/' + params.outputIndex))
|
|
172
267
|
.send(params)
|
|
173
|
-
.result())
|
|
268
|
+
.result())
|
|
269
|
+
.then(callback)
|
|
270
|
+
.catch(callback);
|
|
174
271
|
};
|
|
175
272
|
/**
|
|
176
273
|
* Send multiple travel rule infos for the outputs of a single transaction.
|
|
@@ -198,29 +295,29 @@ TravelRule.prototype.sendMany = function (params, callback) {
|
|
|
198
295
|
params.txid = params.txid || params.hash;
|
|
199
296
|
sdk_core_1.common.validateParams(params, ['txid'], callback);
|
|
200
297
|
const travelInfos = params.travelInfos;
|
|
201
|
-
if (!
|
|
298
|
+
if (!lodash_1.default.isArray(travelInfos)) {
|
|
202
299
|
throw new Error('expected parameter travelInfos to be array');
|
|
203
300
|
}
|
|
204
301
|
const self = this;
|
|
205
|
-
const travelInfoMap =
|
|
302
|
+
const travelInfoMap = (0, lodash_1.default)(travelInfos)
|
|
206
303
|
.keyBy('outputIndex')
|
|
207
304
|
.mapValues(function (travelInfo) {
|
|
208
305
|
return self.validateTravelInfo(travelInfo);
|
|
209
306
|
})
|
|
210
307
|
.value();
|
|
211
|
-
return self.getRecipients({ txid: params.txid }).then(function (recipients) {
|
|
308
|
+
return self.getRecipients({ txid: params.txid }).then(async function (recipients) {
|
|
212
309
|
// Build up data to post
|
|
213
310
|
const sendParamsList = [];
|
|
214
311
|
// don't regenerate a new random key for each recipient
|
|
215
|
-
const fromKey = params.fromKey || sdk_core_1.makeRandomKey().toWIF();
|
|
216
|
-
|
|
312
|
+
const fromKey = params.fromKey || (0, sdk_core_1.makeRandomKey)().toWIF();
|
|
313
|
+
for (const recipient of recipients) {
|
|
217
314
|
const outputIndex = recipient.outputIndex;
|
|
218
315
|
const info = travelInfoMap[outputIndex];
|
|
219
316
|
if (info) {
|
|
220
317
|
if (info.amount && info.amount !== recipient.amount) {
|
|
221
318
|
throw new Error('amount did not match for output index ' + outputIndex);
|
|
222
319
|
}
|
|
223
|
-
const sendParams = self.
|
|
320
|
+
const sendParams = await self.prepareParamsAsync({
|
|
224
321
|
txid: params.txid,
|
|
225
322
|
recipient: recipient,
|
|
226
323
|
travelInfo: info,
|
|
@@ -229,7 +326,7 @@ TravelRule.prototype.sendMany = function (params, callback) {
|
|
|
229
326
|
});
|
|
230
327
|
sendParamsList.push(sendParams);
|
|
231
328
|
}
|
|
232
|
-
}
|
|
329
|
+
}
|
|
233
330
|
const result = {
|
|
234
331
|
matched: sendParamsList.length,
|
|
235
332
|
results: [],
|
|
@@ -254,4 +351,4 @@ TravelRule.prototype.sendMany = function (params, callback) {
|
|
|
254
351
|
});
|
|
255
352
|
};
|
|
256
353
|
module.exports = TravelRule;
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsbURBQThHO0FBQzlHLG1EQUE2RDtBQUM3RCxnREFBZ0Q7QUFDaEQscUNBQXFDO0FBQ3JDLDRCQUE0QjtBQXlCNUIsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLO0lBQ2hDLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUs7SUFDeEMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUM3RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QyxpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQ2xE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QUNmLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLElBQUk7aUJBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRztnQkFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDckMsT0FBTyxVQUFVLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLFVBQVUsR0FBRztnQkFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxVQUFVLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLE9BQU8sVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGhpZGRlblxuICovXG5cbi8qKlxuICovXG4vL1xuLy8gVHJhdmVsUnVsZSBPYmplY3Rcbi8vIEJpdEdvIGFjY2Vzc29yIGZvciBhIHNwZWNpZmljIGVudGVycHJpc2Vcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNCwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuaW1wb3J0IHsgY29tbW9uLCBnZXROZXR3b3JrLCBnZXRTaGFyZWRTZWNyZXQsIG1ha2VSYW5kb21LZXksIHNhbml0aXplTGVnYWN5UGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgQmx1ZWJpcmQgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbnRlcmZhY2UgRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMge1xuICB0eD86IHtcbiAgICByZWNlaXZlZFRyYXZlbEluZm8/OiB7XG4gICAgICB0b1B1YktleVBhdGg6IHN0cmluZztcbiAgICAgIGZyb21QdWJLZXk6IHN0cmluZztcbiAgICAgIGVuY3J5cHRlZFRyYXZlbEluZm86IHN0cmluZztcbiAgICAgIHRyYXZlbEluZm86IHN0cmluZztcbiAgICAgIHRyYW5zYWN0aW9uSWQ6IHN0cmluZztcbiAgICAgIG91dHB1dEluZGV4OiBudW1iZXI7XG4gICAgfVtdO1xuICB9O1xuICBrZXljaGFpbj86IHtcbiAgICB4cHJ2Pzogc3RyaW5nO1xuICB9O1xuICBoZG5vZGU/OiBCSVAzMkludGVyZmFjZTtcbn1cblxuaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gIGVudGVycHJpc2U6IHN0cmluZztcbiAgcHViS2V5OiBzdHJpbmc7XG4gIG91dHB1dEluZGV4OiBzdHJpbmc7XG59XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFRyYXZlbFJ1bGUgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUudXJsID0gZnVuY3Rpb24gKGV4dHJhKSB7XG4gIGV4dHJhID0gZXh0cmEgfHwgJyc7XG4gIHJldHVybiB0aGlzLmJpdGdvLnVybCgnL3RyYXZlbC8nICsgZXh0cmEpO1xufTtcblxuLyoqXG4gKiBHZXQgYXZhaWxhYmxlIHRyYXZlbC1ydWxlIGluZm8gcmVjaXBpZW50cyBmb3IgYSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHBhcmFtc1xuICogIHR4aWQ6IHRyYW5zYWN0aW9uIGlkXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHsqfVxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5nZXRSZWNpcGllbnRzID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB1cmwgPSB0aGlzLnVybChwYXJhbXMudHhpZCArICcvcmVjaXBpZW50cycpO1xuICByZXR1cm4gQmx1ZWJpcmQucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh1cmwpLnJlc3VsdCgncmVjaXBpZW50cycpKS5ub2RlaWZ5KGNhbGxiYWNrKTtcbn07XG5cblRyYXZlbFJ1bGUucHJvdG90eXBlLnZhbGlkYXRlVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHtcbiAgICBhbW91bnQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICB0b0FkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b0VudGVycHJpc2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlck5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFjY291bnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJOYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyQWNjb3VudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBleHRyYTogeyB0eXBlOiAnb2JqZWN0JyB9LFxuICB9O1xuXG4gIF8uZm9yRWFjaChmaWVsZHMsIGZ1bmN0aW9uIChmaWVsZDogYW55LCBmaWVsZE5hbWUpIHtcbiAgICAvLyBObyByZXF1aXJlZCBmaWVsZHMgeWV0IC0tIHNob3VsZCB0aGVyZSBiZT9cbiAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcbiAgICAgIGlmIChpbmZvW2ZpZWxkTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgZmllbGQgJyArIGZpZWxkTmFtZSArICcgaW4gdHJhdmVsIGluZm8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluZm9bZmllbGROYW1lXSAmJiB0eXBlb2YgaW5mb1tmaWVsZE5hbWVdICE9PSBmaWVsZC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCB0eXBlIGZvciBmaWVsZCAnICsgZmllbGROYW1lICsgJyBpbiB0cmF2ZWwgaW5mbywgZXhwZWN0ZWQgJyArIGZpZWxkLnR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU3RyaXAgb3V0IGFueSBvdGhlciBmaWVsZHMgd2UgZG9uJ3Qga25vdyBhYm91dFxuICBjb25zdCByZXN1bHQgPSBfLnBpY2soaW5mbywgXy5rZXlzKGZpZWxkcykpO1xuICBpZiAoXy5pc0VtcHR5KHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VtcHR5IHRyYXZlbCBkYXRhJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogVGFrZXMgYSB0cmFuc2FjdGlvbiBvYmplY3QgYXMgcmV0dXJuZWQgYnkgZ2V0VHJhbnNhY3Rpb24gb3IgbGlzdFRyYW5zYWN0aW9ucywgYWxvbmdcbiAqIHdpdGggYSBrZXljaGFpbiAob3IgaGRub2RlIG9iamVjdCksIGFuZCBhdHRlbXB0cyB0byBkZWNyeXB0IGFueSBlbmNyeXB0ZWQgdHJhdmVsXG4gKiBpbmZvIGluY2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbidzIHJlY2VpdmVkVHJhdmVsSW5mbyBmaWVsZC5cbiAqIFBhcmFtZXRlcnM6XG4gKiAgIHR4OiBhIHRyYW5zYWN0aW9uIG9iamVjdFxuICogICBrZXljaGFpbjoga2V5Y2hhaW4gb2JqZWN0ICh3aXRoIHhwcnYpXG4gKiBSZXR1cm5zOlxuICogICB0aGUgdHggb2JqZWN0LCBhdWdtZW50ZWQgd2l0aCBkZWNyeXB0ZWQgdHJhdmVsSW5mbyBmaWVsZHNcbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgdHggPSBwYXJhbXMudHg7XG4gIGlmICghXy5pc09iamVjdCh0eCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyB0eCBwYXJhbSB0byBiZSBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghdHgucmVjZWl2ZWRUcmF2ZWxJbmZvIHx8ICF0eC5yZWNlaXZlZFRyYXZlbEluZm8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgY29uc3Qga2V5Y2hhaW4gPSBwYXJhbXMua2V5Y2hhaW47XG4gIGlmICghXy5pc09iamVjdChrZXljaGFpbikgfHwgIV8uaXNTdHJpbmcoa2V5Y2hhaW4ueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyBrZXljaGFpbiBwYXJhbSB3aXRoIHhwcnYnKTtcbiAgfVxuICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KGtleWNoYWluLnhwcnYpO1xuXG4gIHR4LnJlY2VpdmVkVHJhdmVsSW5mby5mb3JFYWNoKChpbmZvKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKGluZm8udG9QdWJLZXlQYXRoKSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGtleSwgQnVmZmVyLmZyb20oaW5mby5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGluZm8uZW5jcnlwdGVkVHJhdmVsSW5mbyxcbiAgICAgICAgcGFzc3dvcmQ6IHNlY3JldCxcbiAgICAgIH0pO1xuICAgICAgaW5mby50cmF2ZWxJbmZvID0gSlNPTi5wYXJzZShkZWNyeXB0ZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignZmFpbGVkIHRvIGRlY3J5cHQgb3IgcGFyc2UgdHJhdmVsIGluZm8gZm9yICcsIGluZm8udHJhbnNhY3Rpb25JZCArICc6JyArIGluZm8ub3V0cHV0SW5kZXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR4O1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUucHJlcGFyZVBhcmFtcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgWydmcm9tUHJpdmF0ZUluZm8nXSk7XG4gIGNvbnN0IHR4aWQgPSBwYXJhbXMudHhpZDtcbiAgY29uc3QgcmVjaXBpZW50OiBSZWNpcGllbnQgfCB1bmRlZmluZWQgPSBwYXJhbXMucmVjaXBpZW50O1xuICBsZXQgdHJhdmVsSW5mbyA9IHBhcmFtcy50cmF2ZWxJbmZvO1xuICBpZiAoIXJlY2lwaWVudCB8fCAhXy5pc09iamVjdChyZWNpcGllbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgcmVjaXBpZW50Jyk7XG4gIH1cbiAgaWYgKCF0cmF2ZWxJbmZvIHx8ICFfLmlzT2JqZWN0KHRyYXZlbEluZm8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgdHJhdmVsSW5mbycpO1xuICB9XG4gIGlmICghcGFyYW1zLm5vVmFsaWRhdGUpIHtcbiAgICB0cmF2ZWxJbmZvID0gdGhpcy52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gIH1cblxuICAvLyBGaWxsIGluIHRvRW50ZXJwcmlzZSBpZiBub3QgYWxyZWFkeSBmaWxsZWRcbiAgaWYgKCF0cmF2ZWxJbmZvLnRvRW50ZXJwcmlzZSAmJiByZWNpcGllbnQuZW50ZXJwcmlzZSkge1xuICAgIHRyYXZlbEluZm8udG9FbnRlcnByaXNlID0gcmVjaXBpZW50LmVudGVycHJpc2U7XG4gIH1cblxuICAvLyBJZiBhIGtleSB3YXMgbm90IHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgcmFuZG9tIGtleVxuICBsZXQgZnJvbUtleSA9IHBhcmFtcy5mcm9tS2V5ICYmIHV0eG9saWIuRUNQYWlyLmZyb21XSUYocGFyYW1zLmZyb21LZXksIGdldE5ldHdvcmsoKSBhcyB1dHhvbGliLkJpdGNvaW5KU05ldHdvcmspO1xuICBpZiAoIWZyb21LZXkpIHtcbiAgICBmcm9tS2V5ID0gbWFrZVJhbmRvbUtleSgpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgc2hhcmVkIGtleSBmb3IgZW5jcnlwdGlvblxuICBjb25zdCBzaGFyZWRTZWNyZXQgPSBnZXRTaGFyZWRTZWNyZXQoZnJvbUtleSwgQnVmZmVyLmZyb20ocmVjaXBpZW50LnB1YktleSwgJ2hleCcpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgLy8gSlNPTi1pZnkgYW5kIGVuY3J5cHQgdGhlIHBheWxvYWRcbiAgY29uc3QgdHJhdmVsSW5mb0pTT04gPSBKU09OLnN0cmluZ2lmeSh0cmF2ZWxJbmZvKTtcbiAgY29uc3QgZW5jcnlwdGVkVHJhdmVsSW5mbyA9IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgaW5wdXQ6IHRyYXZlbEluZm9KU09OLFxuICAgIHBhc3N3b3JkOiBzaGFyZWRTZWNyZXQsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eGlkOiB0eGlkLFxuICAgIG91dHB1dEluZGV4OiByZWNpcGllbnQub3V0cHV0SW5kZXgsXG4gICAgdG9QdWJLZXk6IHJlY2lwaWVudC5wdWJLZXksXG4gICAgZnJvbVB1YktleTogZnJvbUtleS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgIGVuY3J5cHRlZFRyYXZlbEluZm86IGVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgZnJvbVByaXZhdGVJbmZvOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgaWYgKHBhcmFtcy5mcm9tUHJpdmF0ZUluZm8pIHtcbiAgICByZXN1bHQuZnJvbVByaXZhdGVJbmZvID0gcGFyYW1zLmZyb21Qcml2YXRlSW5mbztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFNlbmQgdHJhdmVsIGRhdGEgdG8gdGhlIHNlcnZlciBmb3IgYSB0cmFuc2FjdGlvblxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMoXG4gICAgcGFyYW1zLFxuICAgIFsndHhpZCcsICd0b1B1YktleScsICdlbmNyeXB0ZWRUcmF2ZWxJbmZvJ10sXG4gICAgWydmcm9tUHViS2V5JywgJ2Zyb21Qcml2YXRlSW5mbyddLFxuICAgIGNhbGxiYWNrXG4gICk7XG5cbiAgaWYgKCFfLmlzTnVtYmVyKHBhcmFtcy5vdXRwdXRJbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3V0cHV0SW5kZXgnKTtcbiAgfVxuXG4gIHJldHVybiBCbHVlYmlyZC5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKHBhcmFtcy50eGlkICsgJy8nICsgcGFyYW1zLm91dHB1dEluZGV4KSlcbiAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgIC5yZXN1bHQoKVxuICApLm5vZGVpZnkoY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBTZW5kIG11bHRpcGxlIHRyYXZlbCBydWxlIGluZm9zIGZvciB0aGUgb3V0cHV0cyBvZiBhIHNpbmdsZSB0cmFuc2FjdGlvbi5cbiAqIFBhcmFtZXRlcnM6XG4gKiAgIC0gdHhpZCAob3IgaGFzaCk6IHR4aWQgb2YgdGhlIHRyYW5zYWN0aW9uIChtdXN0IGJlIGEgc2VuZGVyIG9mIHRoZSB0eClcbiAqICAgLSB0cmF2ZWxJbmZvczogYXJyYXkgb2YgdHJhdmVsSW5mbyBvYmplY3RzIHdoaWNoIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOlxuICogICAgIHtcbiAqICAgICAgIG91dHB1dEluZGV4OiBudW1iZXIsICAgICAvLyB0eCBvdXRwdXQgaW5kZXhcbiAqICAgICAgIGZyb21Vc2VyTmFtZTogc3RyaW5nLCAgICAvLyBuYW1lIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIGZyb21Vc2VyQWNjb3VudDogc3RyaW5nLCAvLyBhY2NvdW50IGlkIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIGZyb21Vc2VyQWRkcmVzczogc3RyaW5nLCAvLyBtYWlsaW5nIGFkZHJlc3Mgb2YgdGhlIHNlbmRpbmcgdXNlclxuICogICAgICAgdG9Vc2VyTmFtZTogc3RyaW5nLCAgICAgIC8vIG5hbWUgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJBY2NvdW50OiBzdHJpbmcsICAgLy8gYWNjb3VudCBpZCBvZiB0aGUgcmVjZWl2aW5nIHVzZXJcbiAqICAgICAgIHRvVXNlckFkZHJlc3M6IHN0cmluZyAgICAvLyBtYWlsaW5nIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgfVxuICogICAgIEFsbCBmaWVsZHMgYXNpZGUgZnJvbSBvdXRwdXRJbmRleCBhcmUgb3B0aW9uYWwsIGJ1dCBhdCBsZWFzdCBvbmUgbXVzdFxuICogICAgIGJlIGRlZmluZWQuXG4gKlxuICogIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcHJvdmlkZSB0cmF2ZWxJbmZvIGZvciBhbGwgb3V0cHV0IGluZGljZXMuXG4gKiAgRW5kLXRvLWVuZCBlbmNyeXB0aW9uIG9mIHRoZSB0cmF2ZWwgaW5mbyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBtZXRob2QuXG4gKlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5zZW5kTWFueSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eGlkJ10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB0cmF2ZWxJbmZvcyA9IHBhcmFtcy50cmF2ZWxJbmZvcztcbiAgaWYgKCFfLmlzQXJyYXkodHJhdmVsSW5mb3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBwYXJhbWV0ZXIgdHJhdmVsSW5mb3MgdG8gYmUgYXJyYXknKTtcbiAgfVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBjb25zdCB0cmF2ZWxJbmZvTWFwID0gXyh0cmF2ZWxJbmZvcylcbiAgICAua2V5QnkoJ291dHB1dEluZGV4JylcbiAgICAubWFwVmFsdWVzKGZ1bmN0aW9uICh0cmF2ZWxJbmZvKSB7XG4gICAgICByZXR1cm4gc2VsZi52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gICAgfSlcbiAgICAudmFsdWUoKTtcblxuICByZXR1cm4gc2VsZi5nZXRSZWNpcGllbnRzKHsgdHhpZDogcGFyYW1zLnR4aWQgfSkudGhlbihmdW5jdGlvbiAocmVjaXBpZW50cykge1xuICAgIC8vIEJ1aWxkIHVwIGRhdGEgdG8gcG9zdFxuICAgIGNvbnN0IHNlbmRQYXJhbXNMaXN0OiBhbnlbXSA9IFtdO1xuICAgIC8vIGRvbid0IHJlZ2VuZXJhdGUgYSBuZXcgcmFuZG9tIGtleSBmb3IgZWFjaCByZWNpcGllbnRcbiAgICBjb25zdCBmcm9tS2V5ID0gcGFyYW1zLmZyb21LZXkgfHwgbWFrZVJhbmRvbUtleSgpLnRvV0lGKCk7XG5cbiAgICByZWNpcGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHJlY2lwaWVudCkge1xuICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSByZWNpcGllbnQub3V0cHV0SW5kZXg7XG4gICAgICBjb25zdCBpbmZvID0gdHJhdmVsSW5mb01hcFtvdXRwdXRJbmRleF07XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpZiAoaW5mby5hbW91bnQgJiYgaW5mby5hbW91bnQgIT09IHJlY2lwaWVudC5hbW91bnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBkaWQgbm90IG1hdGNoIGZvciBvdXRwdXQgaW5kZXggJyArIG91dHB1dEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VsZi5wcmVwYXJlUGFyYW1zKHtcbiAgICAgICAgICB0eGlkOiBwYXJhbXMudHhpZCxcbiAgICAgICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgICAgICB0cmF2ZWxJbmZvOiBpbmZvLFxuICAgICAgICAgIGZyb21LZXk6IGZyb21LZXksXG4gICAgICAgICAgbm9WYWxpZGF0ZTogdHJ1ZSwgLy8gZG9uJ3QgcmUtdmFsaWRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbmRQYXJhbXNMaXN0LnB1c2goc2VuZFBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IHtcbiAgICAgIG1hdGNoZWQ6IG51bWJlcjtcbiAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgcmVzdWx0PzogYW55O1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH1bXTtcbiAgICB9ID0ge1xuICAgICAgbWF0Y2hlZDogc2VuZFBhcmFtc0xpc3QubGVuZ3RoLFxuICAgICAgcmVzdWx0czogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHNlbmRTZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VuZFBhcmFtc0xpc3Quc2hpZnQoKTtcbiAgICAgIGlmICghc2VuZFBhcmFtcykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICAgICAgLnNlbmQoc2VuZFBhcmFtcylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyByZXN1bHQ6IHJlcyB9KTtcbiAgICAgICAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyBlcnJvcjogZXJyLnRvU3RyaW5nKCkgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmF2ZWxSdWxlO1xuIl19
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsbURBQThHO0FBQzlHLG1EQUE2RDtBQUM3RCw4REFBZ0Q7QUFDaEQsb0RBQXVCO0FBMkJ2QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUs7SUFDaEMsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVUsS0FBSztJQUN4QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzdELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3pDLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdB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YXZlbFJ1bGUgT2JqZWN0XG4vLyBCaXRHbyBhY2Nlc3NvciBmb3IgYSBzcGVjaWZpYyBlbnRlcnByaXNlXG4vL1xuLy8gQ29weXJpZ2h0IDIwMTQsIEJpdEdvLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cbmltcG9ydCB7IGNvbW1vbiwgZ2V0TmV0d29yaywgZ2V0U2hhcmVkU2VjcmV0LCBtYWtlUmFuZG9tS2V5LCBzYW5pdGl6ZUxlZ2FjeVBhdGggfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmludGVyZmFjZSBSZWNlaXZlZFRyYXZlbEluZm9FbnRyeSB7XG4gIHRvUHViS2V5UGF0aDogc3RyaW5nO1xuICBmcm9tUHViS2V5OiBzdHJpbmc7XG4gIGVuY3J5cHRlZFRyYXZlbEluZm86IHN0cmluZztcbiAgdHJhdmVsSW5mbzogc3RyaW5nO1xuICB0cmFuc2FjdGlvbklkOiBzdHJpbmc7XG4gIG91dHB1dEluZGV4OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBEZWNyeXB0UmVjZWl2ZWRUcmF2ZWxSdWxlT3B0aW9ucyB7XG4gIHR4Pzoge1xuICAgIHJlY2VpdmVkVHJhdmVsSW5mbz86IFJlY2VpdmVkVHJhdmVsSW5mb0VudHJ5W107XG4gIH07XG4gIGtleWNoYWluPzoge1xuICAgIHhwcnY/OiBzdHJpbmc7XG4gIH07XG4gIGhkbm9kZT86IEJJUDMySW50ZXJmYWNlO1xufVxuXG5pbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgZW50ZXJwcmlzZTogc3RyaW5nO1xuICBwdWJLZXk6IHN0cmluZztcbiAgb3V0cHV0SW5kZXg6IHN0cmluZztcbn1cblxuLy9cbi8vIENvbnN0cnVjdG9yXG4vL1xuY29uc3QgVHJhdmVsUnVsZSA9IGZ1bmN0aW9uIChiaXRnbykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICB0aGlzLmJpdGdvID0gYml0Z287XG59O1xuXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS51cmwgPSBmdW5jdGlvbiAoZXh0cmEpIHtcbiAgZXh0cmEgPSBleHRyYSB8fCAnJztcbiAgcmV0dXJuIHRoaXMuYml0Z28udXJsKCcvdHJhdmVsLycgKyBleHRyYSk7XG59O1xuXG4vKipcbiAqIEdldCBhdmFpbGFibGUgdHJhdmVsLXJ1bGUgaW5mbyByZWNpcGllbnRzIGZvciBhIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiAgdHhpZDogdHJhbnNhY3Rpb24gaWRcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHJldHVybnMgeyp9XG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLmdldFJlY2lwaWVudHMgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHVybCA9IHRoaXMudXJsKHBhcmFtcy50eGlkICsgJy9yZWNpcGllbnRzJyk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5nZXQodXJsKS5yZXN1bHQoJ3JlY2lwaWVudHMnKSkudGhlbihjYWxsYmFjaykuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUudmFsaWRhdGVUcmF2ZWxJbmZvID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgY29uc3QgZmllbGRzID0ge1xuICAgIGFtb3VudDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgIHRvQWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvRW50ZXJwcmlzZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGZyb21Vc2VyTmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGZyb21Vc2VyQWNjb3VudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGZyb21Vc2VyQWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlck5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJBY2NvdW50OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyQWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGV4dHJhOiB7IHR5cGU6ICdvYmplY3QnIH0sXG4gIH07XG5cbiAgXy5mb3JFYWNoKGZpZWxkcywgZnVuY3Rpb24gKGZpZWxkOiBhbnksIGZpZWxkTmFtZSkge1xuICAgIC8vIE5vIHJlcXVpcmVkIGZpZWxkcyB5ZXQgLS0gc2hvdWxkIHRoZXJlIGJlP1xuICAgIGlmIChmaWVsZC5yZXF1aXJlZCkge1xuICAgICAgaWYgKGluZm9bZmllbGROYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBmaWVsZCAnICsgZmllbGROYW1lICsgJyBpbiB0cmF2ZWwgaW5mbycpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5mb1tmaWVsZE5hbWVdICYmIHR5cGVvZiBpbmZvW2ZpZWxkTmFtZV0gIT09IGZpZWxkLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IHR5cGUgZm9yIGZpZWxkICcgKyBmaWVsZE5hbWUgKyAnIGluIHRyYXZlbCBpbmZvLCBleHBlY3RlZCAnICsgZmllbGQudHlwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTdHJpcCBvdXQgYW55IG90aGVyIGZpZWxkcyB3ZSBkb24ndCBrbm93IGFib3V0XG4gIGNvbnN0IHJlc3VsdCA9IF8ucGljayhpbmZvLCBfLmtleXMoZmllbGRzKSk7XG4gIGlmIChfLmlzRW1wdHkocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZW1wdHkgdHJhdmVsIGRhdGEnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUcmF2ZWxSdWxlRGVjcnlwdFBhcmFtcyhwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgdHggPSBwYXJhbXMudHg7XG4gIGlmICghXy5pc09iamVjdCh0eCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyB0eCBwYXJhbSB0byBiZSBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghdHgucmVjZWl2ZWRUcmF2ZWxJbmZvIHx8ICF0eC5yZWNlaXZlZFRyYXZlbEluZm8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgdHgsIGhkTm9kZTogdW5kZWZpbmVkIGFzIEJJUDMySW50ZXJmYWNlIHwgdW5kZWZpbmVkIH07XG4gIH1cblxuICBjb25zdCBrZXljaGFpbiA9IHBhcmFtcy5rZXljaGFpbjtcbiAgaWYgKCFfLmlzT2JqZWN0KGtleWNoYWluKSB8fCAhXy5pc1N0cmluZyhrZXljaGFpbi54cHJ2KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0aW5nIGtleWNoYWluIHBhcmFtIHdpdGggeHBydicpO1xuICB9XG4gIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgoa2V5Y2hhaW4ueHBydik7XG4gIHJldHVybiB7IHR4LCBoZE5vZGUgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRyYXZlbFJ1bGVQYXJhbXNDb21tb24oc2VsZjogeyB2YWxpZGF0ZVRyYXZlbEluZm86IChpbmZvOiBhbnkpID0+IGFueSB9LCBwYXJhbXM6IGFueSkge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBbJ2Zyb21Qcml2YXRlSW5mbyddKTtcbiAgY29uc3QgdHhpZCA9IHBhcmFtcy50eGlkO1xuICBjb25zdCByZWNpcGllbnQ6IFJlY2lwaWVudCB8IHVuZGVmaW5lZCA9IHBhcmFtcy5yZWNpcGllbnQ7XG4gIGxldCB0cmF2ZWxJbmZvID0gcGFyYW1zLnRyYXZlbEluZm87XG4gIGlmICghcmVjaXBpZW50IHx8ICFfLmlzT2JqZWN0KHJlY2lwaWVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3IgbWlzc2luZyByZWNpcGllbnQnKTtcbiAgfVxuICBpZiAoIXRyYXZlbEluZm8gfHwgIV8uaXNPYmplY3QodHJhdmVsSW5mbykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3IgbWlzc2luZyB0cmF2ZWxJbmZvJyk7XG4gIH1cbiAgaWYgKCFwYXJhbXMubm9WYWxpZGF0ZSkge1xuICAgIHRyYXZlbEluZm8gPSBzZWxmLnZhbGlkYXRlVHJhdmVsSW5mbyh0cmF2ZWxJbmZvKTtcbiAgfVxuXG4gIGlmICghdHJhdmVsSW5mby50b0VudGVycHJpc2UgJiYgcmVjaXBpZW50LmVudGVycHJpc2UpIHtcbiAgICB0cmF2ZWxJbmZvLnRvRW50ZXJwcmlzZSA9IHJlY2lwaWVudC5lbnRlcnByaXNlO1xuICB9XG5cbiAgLy8gSWYgYSBrZXkgd2FzIG5vdCBwcm92aWRlZCwgY3JlYXRlIGEgbmV3IHJhbmRvbSBrZXlcbiAgbGV0IGZyb21LZXkgPSBwYXJhbXMuZnJvbUtleSAmJiB1dHhvbGliLkVDUGFpci5mcm9tV0lGKHBhcmFtcy5mcm9tS2V5LCBnZXROZXR3b3JrKCkgYXMgdXR4b2xpYi5CaXRjb2luSlNOZXR3b3JrKTtcbiAgaWYgKCFmcm9tS2V5KSB7XG4gICAgZnJvbUtleSA9IG1ha2VSYW5kb21LZXkoKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHNoYXJlZCBrZXkgZm9yIGVuY3J5cHRpb25cbiAgY29uc3Qgc2hhcmVkU2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGZyb21LZXksIEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5wdWJLZXksICdoZXgnKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIC8vIEpTT04taWZ5IGFuZCBlbmNyeXB0IHRoZSBwYXlsb2FkXG4gIGNvbnN0IHRyYXZlbEluZm9KU09OID0gSlNPTi5zdHJpbmdpZnkodHJhdmVsSW5mbyk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eGlkLFxuICAgIHJlY2lwaWVudCxcbiAgICB0cmF2ZWxJbmZvSlNPTixcbiAgICBmcm9tS2V5LFxuICAgIHNoYXJlZFNlY3JldCxcbiAgICBmcm9tUHJpdmF0ZUluZm86IHBhcmFtcy5mcm9tUHJpdmF0ZUluZm8sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHJhdmVsUnVsZVNlbmRQYXJhbXMoXG4gIHByZXBhcmVkOiB7XG4gICAgdHhpZDogc3RyaW5nO1xuICAgIHJlY2lwaWVudDogUmVjaXBpZW50O1xuICAgIGZyb21LZXk6IHV0eG9saWIuRUNQYWlySW50ZXJmYWNlO1xuICAgIGZyb21Qcml2YXRlSW5mbz86IHN0cmluZztcbiAgfSxcbiAgZW5jcnlwdGVkVHJhdmVsSW5mbzogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR4aWQ6IHByZXBhcmVkLnR4aWQsXG4gICAgb3V0cHV0SW5kZXg6IHByZXBhcmVkLnJlY2lwaWVudC5vdXRwdXRJbmRleCxcbiAgICB0b1B1YktleTogcHJlcGFyZWQucmVjaXBpZW50LnB1YktleSxcbiAgICBmcm9tUHViS2V5OiBwcmVwYXJlZC5mcm9tS2V5LnB1YmxpY0tleS50b1N0cmluZygnaGV4JyksXG4gICAgZW5jcnlwdGVkVHJhdmVsSW5mbzogZW5jcnlwdGVkVHJhdmVsSW5mbyxcbiAgICBmcm9tUHJpdmF0ZUluZm86IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIH07XG5cbiAgaWYgKHByZXBhcmVkLmZyb21Qcml2YXRlSW5mbykge1xuICAgIHJlc3VsdC5mcm9tUHJpdmF0ZUluZm8gPSBwcmVwYXJlZC5mcm9tUHJpdmF0ZUluZm87XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRha2VzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFRyYW5zYWN0aW9uIG9yIGxpc3RUcmFuc2FjdGlvbnMsIGFsb25nXG4gKiB3aXRoIGEga2V5Y2hhaW4gKG9yIGhkbm9kZSBvYmplY3QpLCBhbmQgYXR0ZW1wdHMgdG8gZGVjcnlwdCBhbnkgZW5jcnlwdGVkIHRyYXZlbFxuICogaW5mbyBpbmNsdWRlZCBpbiB0aGUgdHJhbnNhY3Rpb24ncyByZWNlaXZlZFRyYXZlbEluZm8gZmllbGQuXG4gKiBQYXJhbWV0ZXJzOlxuICogICB0eDogYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqICAga2V5Y2hhaW46IGtleWNoYWluIG9iamVjdCAod2l0aCB4cHJ2KVxuICogUmV0dXJuczpcbiAqICAgdGhlIHR4IG9iamVjdCwgYXVnbWVudGVkIHdpdGggZGVjcnlwdGVkIHRyYXZlbEluZm8gZmllbGRzXG4gKiBUT0RPOiBEZXByZWNhdGUgaW4gZmF2b3Igb2YgZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mb0FzeW5jIG9uY2UgdjIgZW5jcnlwdGlvbiBpcyBkZWZhdWx0LlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5kZWNyeXB0UmVjZWl2ZWRUcmF2ZWxJbmZvID0gZnVuY3Rpb24gKHBhcmFtczogRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHR4LCBoZE5vZGUgfSA9IHZhbGlkYXRlVHJhdmVsUnVsZURlY3J5cHRQYXJhbXMocGFyYW1zKTtcbiAgaWYgKCFoZE5vZGUpIHtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICB0eCEucmVjZWl2ZWRUcmF2ZWxJbmZvIS5mb3JFYWNoKChpbmZvKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKGluZm8udG9QdWJLZXlQYXRoKSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGtleSwgQnVmZmVyLmZyb20oaW5mby5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGluZm8uZW5jcnlwdGVkVHJhdmVsSW5mbyxcbiAgICAgICAgcGFzc3dvcmQ6IHNlY3JldCxcbiAgICAgIH0pO1xuICAgICAgaW5mby50cmF2ZWxJbmZvID0gSlNPTi5wYXJzZShkZWNyeXB0ZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignZmFpbGVkIHRvIGRlY3J5cHQgb3IgcGFyc2UgdHJhdmVsIGluZm8gZm9yICcsIGluZm8udHJhbnNhY3Rpb25JZCArICc6JyArIGluZm8ub3V0cHV0SW5kZXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR4O1xufTtcblxuLyoqXG4gKiBBc3luYyB2ZXJzaW9uIG9mIGRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm8gd2l0aCB2MiBlbmNyeXB0L2RlY3J5cHQgc3VwcG9ydC5cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mb0FzeW5jID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtczogRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHR4LCBoZE5vZGUgfSA9IHZhbGlkYXRlVHJhdmVsUnVsZURlY3J5cHRQYXJhbXMocGFyYW1zKTtcbiAgaWYgKCFoZE5vZGUpIHtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICBmb3IgKGNvbnN0IGluZm8gb2YgdHghLnJlY2VpdmVkVHJhdmVsSW5mbyEpIHtcbiAgICBjb25zdCBrZXkgPSBoZE5vZGUuZGVyaXZlUGF0aChzYW5pdGl6ZUxlZ2FjeVBhdGgoaW5mby50b1B1YktleVBhdGgpKTtcbiAgICBjb25zdCBzZWNyZXQgPSBnZXRTaGFyZWRTZWNyZXQoa2V5LCBCdWZmZXIuZnJvbShpbmZvLmZyb21QdWJLZXksICdoZXgnKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNyeXB0ZWQgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHRBc3luYyh7XG4gICAgICAgIGlucHV0OiBpbmZvLmVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgICAgIHBhc3N3b3JkOiBzZWNyZXQsXG4gICAgICB9KTtcbiAgICAgIGluZm8udHJhdmVsSW5mbyA9IEpTT04ucGFyc2UoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZhaWxlZCB0byBkZWNyeXB0IG9yIHBhcnNlIHRyYXZlbCBpbmZvIGZvciAnLCBpbmZvLnRyYW5zYWN0aW9uSWQgKyAnOicgKyBpbmZvLm91dHB1dEluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHg7XG59O1xuXG4vKipcbiAqIFRPRE86IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBwcmVwYXJlUGFyYW1zQXN5bmMgb25jZSB2MiBlbmNyeXB0aW9uIGlzIGRlZmF1bHQuXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLnByZXBhcmVQYXJhbXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGNvbnN0IHByZXBhcmVkID0gcHJlcGFyZVRyYXZlbFJ1bGVQYXJhbXNDb21tb24odGhpcywgcGFyYW1zKTtcbiAgY29uc3QgZW5jcnlwdGVkVHJhdmVsSW5mbyA9IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgaW5wdXQ6IHByZXBhcmVkLnRyYXZlbEluZm9KU09OLFxuICAgIHBhc3N3b3JkOiBwcmVwYXJlZC5zaGFyZWRTZWNyZXQsXG4gIH0pO1xuXG4gIHJldHVybiBidWlsZFRyYXZlbFJ1bGVTZW5kUGFyYW1zKHByZXBhcmVkLCBlbmNyeXB0ZWRUcmF2ZWxJbmZvKTtcbn07XG5cbi8qKlxuICogQXN5bmMgdmVyc2lvbiBvZiBwcmVwYXJlUGFyYW1zIHdpdGggdjIgZW5jcnlwdC9kZWNyeXB0IHN1cHBvcnQuXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLnByZXBhcmVQYXJhbXNBc3luYyA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgY29uc3QgcHJlcGFyZWQgPSBwcmVwYXJlVHJhdmVsUnVsZVBhcmFtc0NvbW1vbih0aGlzLCBwYXJhbXMpO1xuICBjb25zdCBlbmNyeXB0ZWRUcmF2ZWxJbmZvID0gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgIGlucHV0OiBwcmVwYXJlZC50cmF2ZWxJbmZvSlNPTixcbiAgICBwYXNzd29yZDogcHJlcGFyZWQuc2hhcmVkU2VjcmV0LFxuICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gIH0pO1xuXG4gIHJldHVybiBidWlsZFRyYXZlbFJ1bGVTZW5kUGFyYW1zKHByZXBhcmVkLCBlbmNyeXB0ZWRUcmF2ZWxJbmZvKTtcbn07XG5cbi8qKlxuICogU2VuZCB0cmF2ZWwgZGF0YSB0byB0aGUgc2VydmVyIGZvciBhIHRyYW5zYWN0aW9uXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhcbiAgICBwYXJhbXMsXG4gICAgWyd0eGlkJywgJ3RvUHViS2V5JywgJ2VuY3J5cHRlZFRyYXZlbEluZm8nXSxcbiAgICBbJ2Zyb21QdWJLZXknLCAnZnJvbVByaXZhdGVJbmZvJ10sXG4gICAgY2FsbGJhY2tcbiAgKTtcblxuICBpZiAoIV8uaXNOdW1iZXIocGFyYW1zLm91dHB1dEluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvdXRwdXRJbmRleCcpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybChwYXJhbXMudHhpZCArICcvJyArIHBhcmFtcy5vdXRwdXRJbmRleCkpXG4gICAgICAuc2VuZChwYXJhbXMpXG4gICAgICAucmVzdWx0KClcbiAgKVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIFNlbmQgbXVsdGlwbGUgdHJhdmVsIHJ1bGUgaW5mb3MgZm9yIHRoZSBvdXRwdXRzIG9mIGEgc2luZ2xlIHRyYW5zYWN0aW9uLlxuICogUGFyYW1ldGVyczpcbiAqICAgLSB0eGlkIChvciBoYXNoKTogdHhpZCBvZiB0aGUgdHJhbnNhY3Rpb24gKG11c3QgYmUgYSBzZW5kZXIgb2YgdGhlIHR4KVxuICogICAtIHRyYXZlbEluZm9zOiBhcnJheSBvZiB0cmF2ZWxJbmZvIG9iamVjdHMgd2hpY2ggbG9vayBsaWtlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICAge1xuICogICAgICAgb3V0cHV0SW5kZXg6IG51bWJlciwgICAgIC8vIHR4IG91dHB1dCBpbmRleFxuICogICAgICAgZnJvbVVzZXJOYW1lOiBzdHJpbmcsICAgIC8vIG5hbWUgb2YgdGhlIHNlbmRpbmcgdXNlclxuICogICAgICAgZnJvbVVzZXJBY2NvdW50OiBzdHJpbmcsIC8vIGFjY291bnQgaWQgb2YgdGhlIHNlbmRpbmcgdXNlclxuICogICAgICAgZnJvbVVzZXJBZGRyZXNzOiBzdHJpbmcsIC8vIG1haWxpbmcgYWRkcmVzcyBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJOYW1lOiBzdHJpbmcsICAgICAgLy8gbmFtZSBvZiB0aGUgcmVjZWl2aW5nIHVzZXJcbiAqICAgICAgIHRvVXNlckFjY291bnQ6IHN0cmluZywgICAvLyBhY2NvdW50IGlkIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgICAgdG9Vc2VyQWRkcmVzczogc3RyaW5nICAgIC8vIG1haWxpbmcgYWRkcmVzcyBvZiB0aGUgcmVjZWl2aW5nIHVzZXJcbiAqICAgICB9XG4gKiAgICAgQWxsIGZpZWxkcyBhc2lkZSBmcm9tIG91dHB1dEluZGV4IGFyZSBvcHRpb25hbCwgYnV0IGF0IGxlYXN0IG9uZSBtdXN0XG4gKiAgICAgYmUgZGVmaW5lZC5cbiAqXG4gKiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBwcm92aWRlIHRyYXZlbEluZm8gZm9yIGFsbCBvdXRwdXQgaW5kaWNlcy5cbiAqICBFbmQtdG8tZW5kIGVuY3J5cHRpb24gb2YgdGhlIHRyYXZlbCBpbmZvIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGlzIG1ldGhvZC5cbiAqXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLnNlbmRNYW55ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHRyYXZlbEluZm9zID0gcGFyYW1zLnRyYXZlbEluZm9zO1xuICBpZiAoIV8uaXNBcnJheSh0cmF2ZWxJbmZvcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHBhcmFtZXRlciB0cmF2ZWxJbmZvcyB0byBiZSBhcnJheScpO1xuICB9XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGNvbnN0IHRyYXZlbEluZm9NYXAgPSBfKHRyYXZlbEluZm9zKVxuICAgIC5rZXlCeSgnb3V0cHV0SW5kZXgnKVxuICAgIC5tYXBWYWx1ZXMoZnVuY3Rpb24gKHRyYXZlbEluZm8pIHtcbiAgICAgIHJldHVybiBzZWxmLnZhbGlkYXRlVHJhdmVsSW5mbyh0cmF2ZWxJbmZvKTtcbiAgICB9KVxuICAgIC52YWx1ZSgpO1xuXG4gIHJldHVybiBzZWxmLmdldFJlY2lwaWVudHMoeyB0eGlkOiBwYXJhbXMudHhpZCB9KS50aGVuKGFzeW5jIGZ1bmN0aW9uIChyZWNpcGllbnRzKSB7XG4gICAgLy8gQnVpbGQgdXAgZGF0YSB0byBwb3N0XG4gICAgY29uc3Qgc2VuZFBhcmFtc0xpc3Q6IGFueVtdID0gW107XG4gICAgLy8gZG9uJ3QgcmVnZW5lcmF0ZSBhIG5ldyByYW5kb20ga2V5IGZvciBlYWNoIHJlY2lwaWVudFxuICAgIGNvbnN0IGZyb21LZXkgPSBwYXJhbXMuZnJvbUtleSB8fCBtYWtlUmFuZG9tS2V5KCkudG9XSUYoKTtcblxuICAgIGZvciAoY29uc3QgcmVjaXBpZW50IG9mIHJlY2lwaWVudHMpIHtcbiAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gcmVjaXBpZW50Lm91dHB1dEluZGV4O1xuICAgICAgY29uc3QgaW5mbyA9IHRyYXZlbEluZm9NYXBbb3V0cHV0SW5kZXhdO1xuICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uYW1vdW50ICYmIGluZm8uYW1vdW50ICE9PSByZWNpcGllbnQuYW1vdW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbW91bnQgZGlkIG5vdCBtYXRjaCBmb3Igb3V0cHV0IGluZGV4ICcgKyBvdXRwdXRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VuZFBhcmFtcyA9IGF3YWl0IHNlbGYucHJlcGFyZVBhcmFtc0FzeW5jKHtcbiAgICAgICAgICB0eGlkOiBwYXJhbXMudHhpZCxcbiAgICAgICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgICAgICB0cmF2ZWxJbmZvOiBpbmZvLFxuICAgICAgICAgIGZyb21LZXk6IGZyb21LZXksXG4gICAgICAgICAgbm9WYWxpZGF0ZTogdHJ1ZSwgLy8gZG9uJ3QgcmUtdmFsaWRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbmRQYXJhbXNMaXN0LnB1c2goc2VuZFBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiB7XG4gICAgICBtYXRjaGVkOiBudW1iZXI7XG4gICAgICByZXN1bHRzOiB7XG4gICAgICAgIHJlc3VsdD86IGFueTtcbiAgICAgICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgICB9W107XG4gICAgfSA9IHtcbiAgICAgIG1hdGNoZWQ6IHNlbmRQYXJhbXNMaXN0Lmxlbmd0aCxcbiAgICAgIHJlc3VsdHM6IFtdLFxuICAgIH07XG5cbiAgICBjb25zdCBzZW5kU2VyaWFsID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZFBhcmFtcyA9IHNlbmRQYXJhbXNMaXN0LnNoaWZ0KCk7XG4gICAgICBpZiAoIXNlbmRQYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxmXG4gICAgICAgIC5zZW5kKHNlbmRQYXJhbXMpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICByZXN1bHQucmVzdWx0cy5wdXNoKHsgcmVzdWx0OiByZXMgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICByZXN1bHQucmVzdWx0cy5wdXNoKHsgZXJyb3I6IGVyci50b1N0cmluZygpIH0pO1xuICAgICAgICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhdmVsUnVsZTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyAddress.d.ts","sourceRoot":"","sources":["../../../src/v1/verifyAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,KAAA,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAOhE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.verifyAddress = verifyAddress;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
/**
|
|
39
|
+
* Verify a Bitcoin address is a valid address
|
|
40
|
+
*/
|
|
41
|
+
function verifyAddress(address, network) {
|
|
42
|
+
try {
|
|
43
|
+
const script = utxolib.addressFormat.toOutputScriptTryFormats(address, network, undefined);
|
|
44
|
+
return address === utxolib.address.fromOutputScript(script, network);
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5QWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS92ZXJpZnlBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsc0NBT0M7QUFiRCw4REFBZ0Q7QUFHaEQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsT0FBTyxFQUFFLE9BQWdCO0lBQ3JELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzRixPQUFPLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbi8qKlxuICogVmVyaWZ5IGEgQml0Y29pbiBhZGRyZXNzIGlzIGEgdmFsaWQgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5QWRkcmVzcyhhZGRyZXNzLCBuZXR3b3JrOiBOZXR3b3JrKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cyhhZGRyZXNzLCBuZXR3b3JrLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiBhZGRyZXNzID09PSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHQsIG5ldHdvcmspO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/v1/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/v1/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwDH,QAAA,MAAM,MAAM,mCAYX,CAAC;AAyjFF,SAAS,MAAM,CAAC"}
|