@bitgo-beta/sdk-core 8.2.1-beta.1166 → 8.2.1-beta.1167
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/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
- package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
- package/dist/src/bitgo/walletUtil/index.d.ts +1 -0
- package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -1
- package/dist/src/bitgo/walletUtil/index.js +2 -1
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +69 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +1 -31
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -1
- package/dist/src/bitgo/walletUtil/utxoMessageProof.js +5 -95
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type MessageInfo = {
|
|
2
|
+
message: string;
|
|
3
|
+
address: string;
|
|
4
|
+
};
|
|
5
|
+
export interface IMessageProvider {
|
|
6
|
+
/**
|
|
7
|
+
* Returns the messages and addresses that we want to sign. We call this function multiple times until there are no more
|
|
8
|
+
* messages. If there are no more messages, an empty array is returned. Note that the messages are returned in batches.
|
|
9
|
+
*/
|
|
10
|
+
getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=iMessageProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iMessageProvider.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/iMessageProvider.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,6BAA6B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACzD"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaU1lc3NhZ2VQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL2lNZXNzYWdlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1lc3NhZ2VJbmZvID0ge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VQcm92aWRlciB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlcyBhbmQgYWRkcmVzc2VzIHRoYXQgd2Ugd2FudCB0byBzaWduLiBXZSBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmVcbiAgICogbWVzc2FnZXMuIElmIHRoZXJlIGFyZSBubyBtb3JlIG1lc3NhZ2VzLCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC4gTm90ZSB0aGF0IHRoZSBtZXNzYWdlcyBhcmUgcmV0dXJuZWQgaW4gYmF0Y2hlcy5cbiAgICovXG4gIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT47XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yCAAyC,CAAC"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./utxoMessageProof"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./signAccountBasedMidnightClaimMessages"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0VXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQW1DO0FBQ25DLDBFQUF3RCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdXR4b01lc3NhZ2VQcm9vZic7XG5leHBvcnQgKiBmcm9tICcuL3NpZ25BY2NvdW50QmFzZWRNaWRuaWdodENsYWltTWVzc2FnZXMnO1xuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { IMessageProvider, MessageInfo } from './iMessageProvider';
|
|
3
|
+
import { IWallet } from '../wallet';
|
|
4
|
+
export declare const MIDNIGHT_TNC_HASH = "31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b";
|
|
5
|
+
/**
|
|
6
|
+
* The Midnight drop service can return up to 1000 messages per request.
|
|
7
|
+
* We make this wrapper function that handles the pagination and batching of messages,
|
|
8
|
+
* keeping a local cache of the unprocessed messages.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MidnightMessageProvider implements IMessageProvider {
|
|
11
|
+
private wallet;
|
|
12
|
+
private destinationAddress;
|
|
13
|
+
private readonly batchSize;
|
|
14
|
+
protected unprocessedMessagesCache: MessageInfo[];
|
|
15
|
+
protected network: utxolib.Network;
|
|
16
|
+
protected midnightClaimUrl: string;
|
|
17
|
+
protected prevId: string | undefined;
|
|
18
|
+
protected ranOnce: boolean;
|
|
19
|
+
constructor(wallet: IWallet, destinationAddress: string, batchSize?: number);
|
|
20
|
+
getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=midnightMessageProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"midnightMessageProvider.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/midnightMessageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,iBAAiB,qEAAqE,CAAC;AASpG;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAQ5D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,SAAS,CAAC,wBAAwB,EAAE,WAAW,EAAE,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACnC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,OAAO,UAAS;gBAGhB,MAAM,EAAE,OAAO,EACf,kBAAkB,EAAE,MAAM,EACjB,SAAS,SAAyB;IAS/C,6BAA6B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAqC9D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
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.MidnightMessageProvider = exports.MIDNIGHT_TNC_HASH = void 0;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const environments_1 = require("../environments");
|
|
39
|
+
const NUM_MESSAGES_PER_QUERY = 1000;
|
|
40
|
+
exports.MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b';
|
|
41
|
+
/**
|
|
42
|
+
* The Midnight drop service can return up to 1000 messages per request.
|
|
43
|
+
* We make this wrapper function that handles the pagination and batching of messages,
|
|
44
|
+
* keeping a local cache of the unprocessed messages.
|
|
45
|
+
*/
|
|
46
|
+
class MidnightMessageProvider {
|
|
47
|
+
constructor(wallet, destinationAddress, batchSize = NUM_MESSAGES_PER_QUERY) {
|
|
48
|
+
this.wallet = wallet;
|
|
49
|
+
this.destinationAddress = destinationAddress;
|
|
50
|
+
this.batchSize = batchSize;
|
|
51
|
+
this.ranOnce = false;
|
|
52
|
+
this.unprocessedMessagesCache = [];
|
|
53
|
+
this.network = utxolib.networks[wallet.coin()];
|
|
54
|
+
this.midnightClaimUrl = `${environments_1.Environments[wallet.bitgo.env].uri}/api/airdrop-claim/v1/midnight/claims/${wallet.coin()}/${wallet.id()}`;
|
|
55
|
+
}
|
|
56
|
+
async getMessagesAndAddressesToSign() {
|
|
57
|
+
if (this.unprocessedMessagesCache.length > 0) {
|
|
58
|
+
return this.unprocessedMessagesCache.splice(0, this.batchSize);
|
|
59
|
+
}
|
|
60
|
+
else if (this.unprocessedMessagesCache.length === 0 && this.ranOnce && this.prevId === undefined) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
this.ranOnce = true;
|
|
64
|
+
const query = {
|
|
65
|
+
statuses: ['UNINITIATED', 'NEEDS_RESUBMITTING'],
|
|
66
|
+
limit: NUM_MESSAGES_PER_QUERY,
|
|
67
|
+
};
|
|
68
|
+
if (this.prevId !== undefined) {
|
|
69
|
+
query.prevId = this.prevId;
|
|
70
|
+
}
|
|
71
|
+
const response = await this.wallet.bitgo.get(this.midnightClaimUrl).query(query).result();
|
|
72
|
+
if (response.status !== 'success') {
|
|
73
|
+
throw new Error(`Unexpected status code ${response.status} from ${this.midnightClaimUrl}`);
|
|
74
|
+
}
|
|
75
|
+
if (response?.pagination?.hasNext) {
|
|
76
|
+
this.prevId = response?.pagination?.nextPrevId;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.prevId = undefined;
|
|
80
|
+
}
|
|
81
|
+
this.unprocessedMessagesCache = response.claims.map((claim) => {
|
|
82
|
+
if (!claim.originAddress) {
|
|
83
|
+
throw new Error(`Claim ${JSON.stringify(claim)} is missing originAddress`);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
// Midnight claim message format
|
|
87
|
+
message: `STAR ${claim.allocationAmount} to ${this.destinationAddress} ${exports.MIDNIGHT_TNC_HASH}`,
|
|
88
|
+
address: claim.originAddress,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
return this.unprocessedMessagesCache.splice(0, this.batchSize);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.MidnightMessageProvider = MidnightMessageProvider;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0VXRpbC9taWRuaWdodE1lc3NhZ2VQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBZ0Q7QUFJaEQsa0RBQStDO0FBRS9DLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsaUJBQWlCLEdBQUcsa0VBQWtFLENBQUM7QUFTcEc7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXVCO0lBT2xDLFlBQ1UsTUFBZSxFQUNmLGtCQUEwQixFQUNqQixZQUFZLHNCQUFzQjtRQUYzQyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBTDNDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFPeEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQ3RCLDJCQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNqQyx5Q0FBeUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCxLQUFLLENBQUMsNkJBQTZCO1FBQ2pDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQTRCO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztZQUMvQyxLQUFLLEVBQUUsc0JBQXNCO1NBQzlCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFFBQVEsQ0FBQyxNQUFNLFNBQVMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUNELE9BQU87Z0JBQ0wsZ0NBQWdDO2dCQUNoQyxPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFJLHlCQUFpQixFQUFFO2dCQUM1RixPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBeERELDBEQXdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBJTWVzc2FnZVByb3ZpZGVyLCBNZXNzYWdlSW5mbyB9IGZyb20gJy4vaU1lc3NhZ2VQcm92aWRlcic7XG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0JztcbmltcG9ydCB7IEVudmlyb25tZW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50cyc7XG5cbmNvbnN0IE5VTV9NRVNTQUdFU19QRVJfUVVFUlkgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IE1JRE5JR0hUX1ROQ19IQVNIID0gJzMxYTZiYWI1MGE4NGI4NDM5YWRjZmI3ODZiYjIwMjBmNjgwN2U2ZThmZGE2MjliNDI0MTEwZmM3YmIxYzZiOGInO1xuXG50eXBlIENsYWltID0ge1xuICBvcmlnaW5XYWxsZXRJZDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgb3JpZ2luQWRkcmVzcz86IHN0cmluZztcbiAgYWxsb2NhdGlvbkFtb3VudDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBUaGUgTWlkbmlnaHQgZHJvcCBzZXJ2aWNlIGNhbiByZXR1cm4gdXAgdG8gMTAwMCBtZXNzYWdlcyBwZXIgcmVxdWVzdC5cbiAqIFdlIG1ha2UgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgcGFnaW5hdGlvbiBhbmQgYmF0Y2hpbmcgb2YgbWVzc2FnZXMsXG4gKiBrZWVwaW5nIGEgbG9jYWwgY2FjaGUgb2YgdGhlIHVucHJvY2Vzc2VkIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgaW1wbGVtZW50cyBJTWVzc2FnZVByb3ZpZGVyIHtcbiAgcHJvdGVjdGVkIHVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZTogTWVzc2FnZUluZm9bXTtcbiAgcHJvdGVjdGVkIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgcHJvdGVjdGVkIG1pZG5pZ2h0Q2xhaW1Vcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHByZXZJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcmFuT25jZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2FsbGV0OiBJV2FsbGV0LFxuICAgIHByaXZhdGUgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXRjaFNpemUgPSBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZXG4gICkge1xuICAgIHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlID0gW107XG4gICAgdGhpcy5uZXR3b3JrID0gdXR4b2xpYi5uZXR3b3Jrc1t3YWxsZXQuY29pbigpXTtcbiAgICB0aGlzLm1pZG5pZ2h0Q2xhaW1VcmwgPSBgJHtcbiAgICAgIEVudmlyb25tZW50c1t3YWxsZXQuYml0Z28uZW52XS51cmlcbiAgICB9L2FwaS9haXJkcm9wLWNsYWltL3YxL21pZG5pZ2h0L2NsYWltcy8ke3dhbGxldC5jb2luKCl9LyR7d2FsbGV0LmlkKCl9YDtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT4ge1xuICAgIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMuYmF0Y2hTaXplKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnJhbk9uY2UgJiYgdGhpcy5wcmV2SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRoaXMucmFuT25jZSA9IHRydWU7XG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgc3RhdHVzZXM6IFsnVU5JTklUSUFURUQnLCAnTkVFRFNfUkVTVUJNSVRUSU5HJ10sXG4gICAgICBsaW1pdDogTlVNX01FU1NBR0VTX1BFUl9RVUVSWSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5wcmV2SWQgPSB0aGlzLnByZXZJZDtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5nZXQodGhpcy5taWRuaWdodENsYWltVXJsKS5xdWVyeShxdWVyeSkucmVzdWx0KCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJHt0aGlzLm1pZG5pZ2h0Q2xhaW1Vcmx9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZT8ucGFnaW5hdGlvbj8uaGFzTmV4dCkge1xuICAgICAgdGhpcy5wcmV2SWQgPSByZXNwb25zZT8ucGFnaW5hdGlvbj8ubmV4dFByZXZJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUgPSByZXNwb25zZS5jbGFpbXMubWFwKChjbGFpbTogQ2xhaW0pID0+IHtcbiAgICAgIGlmICghY2xhaW0ub3JpZ2luQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYWltICR7SlNPTi5zdHJpbmdpZnkoY2xhaW0pfSBpcyBtaXNzaW5nIG9yaWdpbkFkZHJlc3NgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIE1pZG5pZ2h0IGNsYWltIG1lc3NhZ2UgZm9ybWF0XG4gICAgICAgIG1lc3NhZ2U6IGBTVEFSICR7Y2xhaW0uYWxsb2NhdGlvbkFtb3VudH0gdG8gJHt0aGlzLmRlc3RpbmF0aW9uQWRkcmVzc30gJHtNSUROSUdIVF9UTkNfSEFTSH1gLFxuICAgICAgICBhZGRyZXNzOiBjbGFpbS5vcmlnaW5BZGRyZXNzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMuYmF0Y2hTaXplKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IWallet } from '../wallet';
|
|
2
|
+
import { MessageStandardType } from '../utils';
|
|
3
|
+
type BulkAccountBasedMessageResponse = {
|
|
4
|
+
txRequests: Record<string, unknown>[];
|
|
5
|
+
failedAddresses: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare function bulkSignAccountBasedMidnightClaimMessages(wallet: IWallet, messageStandardType: MessageStandardType, destinationAddress: string, walletPassphrase?: string): Promise<BulkAccountBasedMessageResponse>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=signAccountBasedMidnightClaimMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signAccountBasedMidnightClaimMessages.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAI/C,KAAK,+BAA+B,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAsB,yCAAyC,CAC7D,MAAM,EAAE,OAAO,EACf,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,+BAA+B,CAAC,CAG1C"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bulkSignAccountBasedMidnightClaimMessages = bulkSignAccountBasedMidnightClaimMessages;
|
|
4
|
+
const midnightMessageProvider_1 = require("./midnightMessageProvider");
|
|
5
|
+
async function bulkSignAccountBasedMidnightClaimMessages(wallet, messageStandardType, destinationAddress, walletPassphrase) {
|
|
6
|
+
const provider = new midnightMessageProvider_1.MidnightMessageProvider(wallet, destinationAddress);
|
|
7
|
+
return bulkSignAccountBasedMessagesWithProvider(provider, wallet, messageStandardType, walletPassphrase);
|
|
8
|
+
}
|
|
9
|
+
async function bulkSignAccountBasedMessagesWithProvider(provider, wallet, messageStandardType, walletPassphrase) {
|
|
10
|
+
const failedAddresses = [];
|
|
11
|
+
const txRequests = [];
|
|
12
|
+
let messages = await provider.getMessagesAndAddressesToSign();
|
|
13
|
+
while (messages.length > 0) {
|
|
14
|
+
// Sign/build all messages in parallel
|
|
15
|
+
const results = await Promise.all(messages.map((messageInfo) => signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase)));
|
|
16
|
+
// Process results and update counters
|
|
17
|
+
processResults(results, txRequests, failedAddresses);
|
|
18
|
+
// Get next batch of messages
|
|
19
|
+
messages = await provider.getMessagesAndAddressesToSign();
|
|
20
|
+
}
|
|
21
|
+
return { failedAddresses, txRequests };
|
|
22
|
+
}
|
|
23
|
+
async function signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase) {
|
|
24
|
+
try {
|
|
25
|
+
let txRequestId;
|
|
26
|
+
if (walletPassphrase !== undefined) {
|
|
27
|
+
// Sign the messages with the wallet
|
|
28
|
+
const signedMessage = await wallet.signMessage({
|
|
29
|
+
message: {
|
|
30
|
+
messageRaw: messageInfo.message,
|
|
31
|
+
messageStandardType,
|
|
32
|
+
signerAddress: messageInfo.address,
|
|
33
|
+
},
|
|
34
|
+
walletPassphrase,
|
|
35
|
+
});
|
|
36
|
+
txRequestId = signedMessage.txRequestId;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Build the sign message request
|
|
40
|
+
const txRequest = await wallet.buildSignMessageRequest({
|
|
41
|
+
message: {
|
|
42
|
+
messageRaw: messageInfo.message,
|
|
43
|
+
messageStandardType,
|
|
44
|
+
signerAddress: messageInfo.address,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
txRequestId = txRequest.txRequestId;
|
|
48
|
+
}
|
|
49
|
+
return { success: true, address: messageInfo.address, txRequestId };
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.error(`Error building/signing message for address ${messageInfo.address}: ${e}`);
|
|
53
|
+
return { success: false, address: messageInfo.address };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function processResults(results, txRequests, failedAddresses) {
|
|
57
|
+
for (const result of results) {
|
|
58
|
+
if (result.success) {
|
|
59
|
+
txRequests.push({
|
|
60
|
+
address: result.address,
|
|
61
|
+
txRequestId: result.txRequestId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
failedAddresses.push(result.address);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkFjY291bnRCYXNlZE1pZG5pZ2h0Q2xhaW1NZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3NpZ25BY2NvdW50QmFzZWRNaWRuaWdodENsYWltTWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFVQSw4RkFRQztBQWhCRCx1RUFBb0U7QUFRN0QsS0FBSyxVQUFVLHlDQUF5QyxDQUM3RCxNQUFlLEVBQ2YsbUJBQXdDLEVBQ3hDLGtCQUEwQixFQUMxQixnQkFBeUI7SUFFekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxpREFBdUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RSxPQUFPLHdDQUF3QyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRyxDQUFDO0FBRUQsS0FBSyxVQUFVLHdDQUF3QyxDQUNyRCxRQUEwQixFQUMxQixNQUFlLEVBQ2YsbUJBQXdDLEVBQ3hDLGdCQUF5QjtJQUV6QixNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQThCLEVBQUUsQ0FBQztJQUVqRCxJQUFJLFFBQVEsR0FBa0IsTUFBTSxRQUFRLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUM3RSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0Isc0NBQXNDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQzlHLENBQUM7UUFDRixzQ0FBc0M7UUFDdEMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDckQsNkJBQTZCO1FBQzdCLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLE1BQWUsRUFDZixXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsZ0JBQXlCO0lBRXpCLElBQUksQ0FBQztRQUNILElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLG9DQUFvQztZQUNwQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQzdDLE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU87b0JBQy9CLG1CQUFtQjtvQkFDbkIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2lCQUNuQztnQkFDRCxnQkFBZ0I7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixpQ0FBaUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3JELE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU87b0JBQy9CLG1CQUFtQjtvQkFDbkIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2lCQUNuQzthQUNGLENBQUMsQ0FBQztZQUNILFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsOENBQThDLFdBQVcsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLE9BQXNFLEVBQ3RFLFVBQXFDLEVBQ3JDLGVBQXlCO0lBRXpCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVzthQUNoQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyIH0gZnJvbSAnLi9taWRuaWdodE1lc3NhZ2VQcm92aWRlcic7XG5pbXBvcnQgeyBJTWVzc2FnZVByb3ZpZGVyLCBNZXNzYWdlSW5mbyB9IGZyb20gJy4vaU1lc3NhZ2VQcm92aWRlcic7XG5cbnR5cGUgQnVsa0FjY291bnRCYXNlZE1lc3NhZ2VSZXNwb25zZSA9IHtcbiAgdHhSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgZmFpbGVkQWRkcmVzc2VzOiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWxrU2lnbkFjY291bnRCYXNlZE1pZG5pZ2h0Q2xhaW1NZXNzYWdlcyhcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWxrQWNjb3VudEJhc2VkTWVzc2FnZVJlc3BvbnNlPiB7XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyKHdhbGxldCwgZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgcmV0dXJuIGJ1bGtTaWduQWNjb3VudEJhc2VkTWVzc2FnZXNXaXRoUHJvdmlkZXIocHJvdmlkZXIsIHdhbGxldCwgbWVzc2FnZVN0YW5kYXJkVHlwZSwgd2FsbGV0UGFzc3BocmFzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1bGtTaWduQWNjb3VudEJhc2VkTWVzc2FnZXNXaXRoUHJvdmlkZXIoXG4gIHByb3ZpZGVyOiBJTWVzc2FnZVByb3ZpZGVyLFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUsXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmdcbik6IFByb21pc2U8QnVsa0FjY291bnRCYXNlZE1lc3NhZ2VSZXNwb25zZT4ge1xuICBjb25zdCBmYWlsZWRBZGRyZXNzZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHR4UmVxdWVzdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBsZXQgbWVzc2FnZXM6IE1lc3NhZ2VJbmZvW10gPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24vYnVpbGQgYWxsIG1lc3NhZ2VzIGluIHBhcmFsbGVsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWVzc2FnZXMubWFwKChtZXNzYWdlSW5mbykgPT4gc2lnbk9yQnVpbGRNZXNzYWdlKHdhbGxldCwgbWVzc2FnZUluZm8sIG1lc3NhZ2VTdGFuZGFyZFR5cGUsIHdhbGxldFBhc3NwaHJhc2UpKVxuICAgICk7XG4gICAgLy8gUHJvY2VzcyByZXN1bHRzIGFuZCB1cGRhdGUgY291bnRlcnNcbiAgICBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzLCB0eFJlcXVlc3RzLCBmYWlsZWRBZGRyZXNzZXMpO1xuICAgIC8vIEdldCBuZXh0IGJhdGNoIG9mIG1lc3NhZ2VzXG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IGZhaWxlZEFkZHJlc3NlcywgdHhSZXF1ZXN0cyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaWduT3JCdWlsZE1lc3NhZ2UoXG4gIHdhbGxldDogSVdhbGxldCxcbiAgbWVzc2FnZUluZm86IE1lc3NhZ2VJbmZvLFxuICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgYWRkcmVzczogc3RyaW5nOyB0eFJlcXVlc3RJZD86IHN0cmluZyB9PiB7XG4gIHRyeSB7XG4gICAgbGV0IHR4UmVxdWVzdElkOiBzdHJpbmc7XG4gICAgaWYgKHdhbGxldFBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2lnbiB0aGUgbWVzc2FnZXMgd2l0aCB0aGUgd2FsbGV0XG4gICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gYXdhaXQgd2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIG1lc3NhZ2VSYXc6IG1lc3NhZ2VJbmZvLm1lc3NhZ2UsXG4gICAgICAgICAgbWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgICAgICAgICBzaWduZXJBZGRyZXNzOiBtZXNzYWdlSW5mby5hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG4gICAgICB0eFJlcXVlc3RJZCA9IHNpZ25lZE1lc3NhZ2UudHhSZXF1ZXN0SWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJ1aWxkIHRoZSBzaWduIG1lc3NhZ2UgcmVxdWVzdFxuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgd2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIG1lc3NhZ2VSYXc6IG1lc3NhZ2VJbmZvLm1lc3NhZ2UsXG4gICAgICAgICAgbWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgICAgICAgICBzaWduZXJBZGRyZXNzOiBtZXNzYWdlSW5mby5hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdC50eFJlcXVlc3RJZDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgYWRkcmVzczogbWVzc2FnZUluZm8uYWRkcmVzcywgdHhSZXF1ZXN0SWQgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGJ1aWxkaW5nL3NpZ25pbmcgbWVzc2FnZSBmb3IgYWRkcmVzcyAke21lc3NhZ2VJbmZvLmFkZHJlc3N9OiAke2V9YCk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGFkZHJlc3M6IG1lc3NhZ2VJbmZvLmFkZHJlc3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmVzdWx0cyhcbiAgcmVzdWx0czogeyBzdWNjZXNzOiBib29sZWFuOyBhZGRyZXNzOiBzdHJpbmc7IHR4UmVxdWVzdElkPzogc3RyaW5nIH1bXSxcbiAgdHhSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgZmFpbGVkQWRkcmVzc2VzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHR4UmVxdWVzdHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHJlc3VsdC5hZGRyZXNzLFxuICAgICAgICB0eFJlcXVlc3RJZDogcmVzdWx0LnR4UmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZEFkZHJlc3Nlcy5wdXNoKHJlc3VsdC5hZGRyZXNzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,39 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { IWallet } from '../wallet/iWallet';
|
|
3
|
-
export declare const MIDNIGHT_TNC_HASH = "31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b";
|
|
4
|
-
type MessageInfo = {
|
|
5
|
-
message: string;
|
|
6
|
-
address: string;
|
|
7
|
-
};
|
|
1
|
+
import { IWallet } from '../wallet';
|
|
8
2
|
type BulkMessageResponse = {
|
|
9
3
|
success: boolean;
|
|
10
4
|
numMessages: number;
|
|
11
5
|
transactions: Record<string, unknown>[];
|
|
12
6
|
};
|
|
13
|
-
export interface IMessageProvider {
|
|
14
|
-
/**
|
|
15
|
-
* Returns the messages and addresses that we want to sign. We call this function multiple times until there are no more
|
|
16
|
-
* messages. If there are no more messages, an empty array is returned. Note that we only return messages in sets of 200.
|
|
17
|
-
*/
|
|
18
|
-
getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* The Midnight drop service can return up to 1000 messages per request. However, UTXO coins
|
|
22
|
-
* can only have a maximum of 200 messages per transaction. We make this wrapper function that
|
|
23
|
-
* handles the pagination and batching of messages, keeping a local cache of the unprocessed messages.
|
|
24
|
-
*/
|
|
25
|
-
export declare class MidnightMessageProvider implements IMessageProvider {
|
|
26
|
-
private wallet;
|
|
27
|
-
private destinationAddress;
|
|
28
|
-
protected unprocessedMessagesCache: MessageInfo[];
|
|
29
|
-
protected network: utxolib.Network;
|
|
30
|
-
protected midnightClaimUrl: string;
|
|
31
|
-
protected prevId: string | undefined;
|
|
32
|
-
protected ranOnce: boolean;
|
|
33
|
-
private readonly numMessagesPerTransaction;
|
|
34
|
-
constructor(wallet: IWallet, destinationAddress: string);
|
|
35
|
-
getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
|
|
36
|
-
}
|
|
37
7
|
/**
|
|
38
8
|
* Bulk signs BIP322 messages for the Midnight airdrop.
|
|
39
9
|
* @param wallet The wallet to sign the messages with.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxoMessageProof.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/utxoMessageProof.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"utxoMessageProof.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/utxoMessageProof.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,OAAO,EACf,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAK9B"}
|
|
@@ -1,99 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.MidnightMessageProvider = exports.MIDNIGHT_TNC_HASH = void 0;
|
|
37
3
|
exports.bulkSignBip322MidnightMessages = bulkSignBip322MidnightMessages;
|
|
38
|
-
const
|
|
39
|
-
const environments_1 = require("../environments");
|
|
40
|
-
const NUM_MESSAGES_PER_QUERY = 1000;
|
|
41
|
-
exports.MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b';
|
|
42
|
-
/**
|
|
43
|
-
* The Midnight drop service can return up to 1000 messages per request. However, UTXO coins
|
|
44
|
-
* can only have a maximum of 200 messages per transaction. We make this wrapper function that
|
|
45
|
-
* handles the pagination and batching of messages, keeping a local cache of the unprocessed messages.
|
|
46
|
-
*/
|
|
47
|
-
class MidnightMessageProvider {
|
|
48
|
-
constructor(wallet, destinationAddress) {
|
|
49
|
-
this.wallet = wallet;
|
|
50
|
-
this.destinationAddress = destinationAddress;
|
|
51
|
-
this.ranOnce = false;
|
|
52
|
-
this.unprocessedMessagesCache = [];
|
|
53
|
-
this.network = utxolib.networks[wallet.coin()];
|
|
54
|
-
this.midnightClaimUrl = `${environments_1.Environments[wallet.bitgo.env].uri}/api/airdrop-claim/v1/midnight/claims/${wallet.coin()}/${wallet.id()}`;
|
|
55
|
-
this.numMessagesPerTransaction = wallet.bitgo.env === 'prod' ? 200 : 4;
|
|
56
|
-
}
|
|
57
|
-
async getMessagesAndAddressesToSign() {
|
|
58
|
-
if (this.unprocessedMessagesCache.length > 0) {
|
|
59
|
-
return this.unprocessedMessagesCache.splice(0, this.numMessagesPerTransaction);
|
|
60
|
-
}
|
|
61
|
-
else if (this.unprocessedMessagesCache.length === 0 && this.ranOnce && this.prevId === undefined) {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
this.ranOnce = true;
|
|
65
|
-
const query = {
|
|
66
|
-
status: 'UNINITIATED',
|
|
67
|
-
limit: NUM_MESSAGES_PER_QUERY,
|
|
68
|
-
};
|
|
69
|
-
if (this.prevId !== undefined) {
|
|
70
|
-
query.prevId = this.prevId;
|
|
71
|
-
}
|
|
72
|
-
const response = await this.wallet.bitgo.get(this.midnightClaimUrl).query(query).result();
|
|
73
|
-
if (response.status !== 'success') {
|
|
74
|
-
throw new Error(`Unexpected status code ${response.status} from ${this.midnightClaimUrl}`);
|
|
75
|
-
}
|
|
76
|
-
if (response?.pagination?.hasNext) {
|
|
77
|
-
this.prevId = response?.pagination?.nextPrevId;
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
this.prevId = undefined;
|
|
81
|
-
}
|
|
82
|
-
this.unprocessedMessagesCache = response.claims.map((claim) => {
|
|
83
|
-
if (!claim.originAddress) {
|
|
84
|
-
throw new Error(`Claim ${JSON.stringify(claim)} is missing originAddress`);
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
// Midnight claim message format
|
|
88
|
-
message: `STAR ${claim.allocationAmount} to ${this.destinationAddress} ${exports.MIDNIGHT_TNC_HASH}`,
|
|
89
|
-
address: claim.originAddress,
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
const toReturn = this.unprocessedMessagesCache.splice(0, this.numMessagesPerTransaction);
|
|
93
|
-
return toReturn;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
exports.MidnightMessageProvider = MidnightMessageProvider;
|
|
4
|
+
const midnightMessageProvider_1 = require("./midnightMessageProvider");
|
|
97
5
|
/**
|
|
98
6
|
* Bulk signs BIP322 messages for the Midnight airdrop.
|
|
99
7
|
* @param wallet The wallet to sign the messages with.
|
|
@@ -101,7 +9,9 @@ exports.MidnightMessageProvider = MidnightMessageProvider;
|
|
|
101
9
|
* @param walletPassphrase (Optional) The wallet passphrase of the wallet
|
|
102
10
|
*/
|
|
103
11
|
async function bulkSignBip322MidnightMessages(wallet, destinationAddress, walletPassphrase) {
|
|
104
|
-
|
|
12
|
+
// UTXO coins can only have a maximum of 200 messages per transaction
|
|
13
|
+
const numMessagesPerTransaction = wallet.bitgo.env === 'prod' ? 200 : 4;
|
|
14
|
+
const provider = new midnightMessageProvider_1.MidnightMessageProvider(wallet, destinationAddress, numMessagesPerTransaction);
|
|
105
15
|
return bulkSignBip322MessagesWithProvider(provider, wallet, walletPassphrase);
|
|
106
16
|
}
|
|
107
17
|
async function bulkSignBip322MessagesWithProvider(provider, wallet, walletPassphrase) {
|
|
@@ -127,4 +37,4 @@ async function bulkSignBip322MessagesWithProvider(provider, wallet, walletPassph
|
|
|
127
37
|
}
|
|
128
38
|
return { success: true, numMessages, transactions };
|
|
129
39
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0dBLHdFQU9DO0FBN0dELDhEQUFnRDtBQUdoRCxrREFBK0M7QUFFL0MsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxpQkFBaUIsR0FBRyxrRUFBa0UsQ0FBQztBQTRCcEc7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXVCO0lBUWxDLFlBQW9CLE1BQWUsRUFBVSxrQkFBMEI7UUFBbkQsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUg3RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSXhCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUN0QiwyQkFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDakMseUNBQXlDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QjtRQUNqQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0Ms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LENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0L2lXYWxsZXQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzJztcblxuY29uc3QgTlVNX01FU1NBR0VTX1BFUl9RVUVSWSA9IDEwMDA7XG5leHBvcnQgY29uc3QgTUlETklHSFRfVE5DX0hBU0ggPSAnMzFhNmJhYjUwYTg0Yjg0MzlhZGNmYjc4NmJiMjAyMGY2ODA3ZTZlOGZkYTYyOWI0MjQxMTBmYzdiYjFjNmI4Yic7XG5cbnR5cGUgTWVzc2FnZUluZm8gPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xufTtcblxudHlwZSBDbGFpbSA9IHtcbiAgb3JpZ2luV2FsbGV0SWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIG9yaWdpbkFkZHJlc3M/OiBzdHJpbmc7XG4gIGFsbG9jYXRpb25BbW91bnQ6IHN0cmluZztcbn07XG5cbnR5cGUgQnVsa01lc3NhZ2VSZXNwb25zZSA9IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgbnVtTWVzc2FnZXM6IG51bWJlcjtcbiAgdHJhbnNhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1lc3NhZ2VzIGFuZCBhZGRyZXNzZXMgdGhhdCB3ZSB3YW50IHRvIHNpZ24uIFdlIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZVxuICAgKiBtZXNzYWdlcy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWVzc2FnZXMsIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLiBOb3RlIHRoYXQgd2Ugb25seSByZXR1cm4gbWVzc2FnZXMgaW4gc2V0cyBvZiAyMDAuXG4gICAqL1xuICBnZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpOiBQcm9taXNlPE1lc3NhZ2VJbmZvW10+O1xufVxuXG4vKipcbiAqIFRoZSBNaWRuaWdodCBkcm9wIHNlcnZpY2UgY2FuIHJldHVybiB1cCB0byAxMDAwIG1lc3NhZ2VzIHBlciByZXF1ZXN0LiBIb3dldmVyLCBVVFhPIGNvaW5zXG4gKiBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAyMDAgbWVzc2FnZXMgcGVyIHRyYW5zYWN0aW9uLiBXZSBtYWtlIHRoaXMgd3JhcHBlciBmdW5jdGlvbiB0aGF0XG4gKiBoYW5kbGVzIHRoZSBwYWdpbmF0aW9uIGFuZCBiYXRjaGluZyBvZiBtZXNzYWdlcywga2VlcGluZyBhIGxvY2FsIGNhY2hlIG9mIHRoZSB1bnByb2Nlc3NlZCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyIGltcGxlbWVudHMgSU1lc3NhZ2VQcm92aWRlciB7XG4gIHByb3RlY3RlZCB1bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGU6IE1lc3NhZ2VJbmZvW107XG4gIHByb3RlY3RlZCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHByb3RlY3RlZCBtaWRuaWdodENsYWltVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBwcmV2SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJhbk9uY2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBudW1NZXNzYWdlc1BlclRyYW5zYWN0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3YWxsZXQ6IElXYWxsZXQsIHByaXZhdGUgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZSA9IFtdO1xuICAgIHRoaXMubmV0d29yayA9IHV0eG9saWIubmV0d29ya3Nbd2FsbGV0LmNvaW4oKV07XG4gICAgdGhpcy5taWRuaWdodENsYWltVXJsID0gYCR7XG4gICAgICBFbnZpcm9ubWVudHNbd2FsbGV0LmJpdGdvLmVudl0udXJpXG4gICAgfS9hcGkvYWlyZHJvcC1jbGFpbS92MS9taWRuaWdodC9jbGFpbXMvJHt3YWxsZXQuY29pbigpfS8ke3dhbGxldC5pZCgpfWA7XG4gICAgdGhpcy5udW1NZXNzYWdlc1BlclRyYW5zYWN0aW9uID0gd2FsbGV0LmJpdGdvLmVudiA9PT0gJ3Byb2QnID8gMjAwIDogNDtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT4ge1xuICAgIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMubnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPT09IDAgJiYgdGhpcy5yYW5PbmNlICYmIHRoaXMucHJldklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnJhbk9uY2UgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIHN0YXR1czogJ1VOSU5JVElBVEVEJyxcbiAgICAgIGxpbWl0OiBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZLFxuICAgIH07XG4gICAgaWYgKHRoaXMucHJldklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHF1ZXJ5LnByZXZJZCA9IHRoaXMucHJldklkO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvLmdldCh0aGlzLm1pZG5pZ2h0Q2xhaW1VcmwpLnF1ZXJ5KHF1ZXJ5KS5yZXN1bHQoKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAnc3VjY2VzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c30gZnJvbSAke3RoaXMubWlkbmlnaHRDbGFpbVVybH1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlPy5wYWdpbmF0aW9uPy5oYXNOZXh0KSB7XG4gICAgICB0aGlzLnByZXZJZCA9IHJlc3BvbnNlPy5wYWdpbmF0aW9uPy5uZXh0UHJldklkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXZJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZSA9IHJlc3BvbnNlLmNsYWltcy5tYXAoKGNsYWltOiBDbGFpbSkgPT4ge1xuICAgICAgaWYgKCFjbGFpbS5vcmlnaW5BZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2xhaW0gJHtKU09OLnN0cmluZ2lmeShjbGFpbSl9IGlzIG1pc3Npbmcgb3JpZ2luQWRkcmVzc2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gTWlkbmlnaHQgY2xhaW0gbWVzc2FnZSBmb3JtYXRcbiAgICAgICAgbWVzc2FnZTogYFNUQVIgJHtjbGFpbS5hbGxvY2F0aW9uQW1vdW50fSB0byAke3RoaXMuZGVzdGluYXRpb25BZGRyZXNzfSAke01JRE5JR0hUX1ROQ19IQVNIfWAsXG4gICAgICAgIGFkZHJlc3M6IGNsYWltLm9yaWdpbkFkZHJlc3MsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHRvUmV0dXJuID0gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMubnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG59XG5cbi8qKlxuICogQnVsayBzaWducyBCSVAzMjIgbWVzc2FnZXMgZm9yIHRoZSBNaWRuaWdodCBhaXJkcm9wLlxuICogQHBhcmFtIHdhbGxldCBUaGUgd2FsbGV0IHRvIHNpZ24gdGhlIG1lc3NhZ2VzIHdpdGguXG4gKiBAcGFyYW0gZGVzdGluYXRpb25BZGRyZXNzIFRoZSBBREEgYWRkcmVzcyB0aGUgcmV3YXJkcyB3aWxsIGdldCBzZW50IHRvXG4gKiBAcGFyYW0gd2FsbGV0UGFzc3BocmFzZSAoT3B0aW9uYWwpIFRoZSB3YWxsZXQgcGFzc3BocmFzZSBvZiB0aGUgd2FsbGV0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1pZG5pZ2h0TWVzc2FnZXMoXG4gIHdhbGxldDogSVdhbGxldCxcbiAgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcsXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmdcbik6IFByb21pc2U8QnVsa01lc3NhZ2VSZXNwb25zZT4ge1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBNaWRuaWdodE1lc3NhZ2VQcm92aWRlcih3YWxsZXQsIGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gIHJldHVybiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKHByb3ZpZGVyLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKFxuICBwcm92aWRlcjogSU1lc3NhZ2VQcm92aWRlcixcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgbGV0IG51bU1lc3NhZ2VzID0gMDtcbiAgbGV0IG1lc3NhZ2VzOiBNZXNzYWdlSW5mb1tdID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgY29uc3Qgc2VuZGluZ0Z1bmN0aW9uID0gd2FsbGV0LnR5cGUoKSA9PT0gJ2NvbGQnID8gd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24gOiB3YWxsZXQuc2VuZE1hbnk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24gdGhlIG1lc3NhZ2VzIHdpdGggdGhlIHdhbGxldFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRpbmdGdW5jdGlvbi5jYWxsKHdhbGxldCwge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICAvLyBSZWNpcGllbnRzIG11c3QgYmUgZW1wdHlcbiAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgLy8gdHhGb3JtYXQgbXVzdCBiZSBwc2J0XG4gICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgLy8gUGFzcyBpbiB0aGUgb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBvZmZsaW5lVmVyaWZpY2F0aW9uOiB3YWxsZXQudHlwZSgpID09PSAnY29sZCcsXG4gICAgfSk7XG4gICAgdHJhbnNhY3Rpb25zLnB1c2gocmVzdWx0KTtcbiAgICBudW1NZXNzYWdlcyArPSBtZXNzYWdlcy5sZW5ndGg7XG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG51bU1lc3NhZ2VzLCB0cmFuc2FjdGlvbnMgfTtcbn1cbiJdfQ==
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsd0VBU0M7QUF2QkQsdUVBQW9FO0FBUXBFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxNQUFlLEVBQ2Ysa0JBQTBCLEVBQzFCLGdCQUF5QjtJQUV6QixxRUFBcUU7SUFDckUsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksaURBQXVCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDcEcsT0FBTyxrQ0FBa0MsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELEtBQUssVUFBVSxrQ0FBa0MsQ0FDL0MsUUFBMEIsRUFDMUIsTUFBZSxFQUNmLGdCQUF5QjtJQUV6QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSSxRQUFRLEdBQWtCLE1BQU0sUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDN0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgSU1lc3NhZ2VQcm92aWRlciwgTWVzc2FnZUluZm8gfSBmcm9tICcuL2lNZXNzYWdlUHJvdmlkZXInO1xuaW1wb3J0IHsgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgfSBmcm9tICcuL21pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyJztcblxudHlwZSBCdWxrTWVzc2FnZVJlc3BvbnNlID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBudW1NZXNzYWdlczogbnVtYmVyO1xuICB0cmFuc2FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59O1xuXG4vKipcbiAqIEJ1bGsgc2lnbnMgQklQMzIyIG1lc3NhZ2VzIGZvciB0aGUgTWlkbmlnaHQgYWlyZHJvcC5cbiAqIEBwYXJhbSB3YWxsZXQgVGhlIHdhbGxldCB0byBzaWduIHRoZSBtZXNzYWdlcyB3aXRoLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uQWRkcmVzcyBUaGUgQURBIGFkZHJlc3MgdGhlIHJld2FyZHMgd2lsbCBnZXQgc2VudCB0b1xuICogQHBhcmFtIHdhbGxldFBhc3NwaHJhc2UgKE9wdGlvbmFsKSBUaGUgd2FsbGV0IHBhc3NwaHJhc2Ugb2YgdGhlIHdhbGxldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVsa1NpZ25CaXAzMjJNaWRuaWdodE1lc3NhZ2VzKFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgLy8gVVRYTyBjb2lucyBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAyMDAgbWVzc2FnZXMgcGVyIHRyYW5zYWN0aW9uXG4gIGNvbnN0IG51bU1lc3NhZ2VzUGVyVHJhbnNhY3Rpb24gPSB3YWxsZXQuYml0Z28uZW52ID09PSAncHJvZCcgPyAyMDAgOiA0O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBNaWRuaWdodE1lc3NhZ2VQcm92aWRlcih3YWxsZXQsIGRlc3RpbmF0aW9uQWRkcmVzcywgbnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gIHJldHVybiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKHByb3ZpZGVyLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKFxuICBwcm92aWRlcjogSU1lc3NhZ2VQcm92aWRlcixcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgbGV0IG51bU1lc3NhZ2VzID0gMDtcbiAgbGV0IG1lc3NhZ2VzOiBNZXNzYWdlSW5mb1tdID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgY29uc3Qgc2VuZGluZ0Z1bmN0aW9uID0gd2FsbGV0LnR5cGUoKSA9PT0gJ2NvbGQnID8gd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24gOiB3YWxsZXQuc2VuZE1hbnk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24gdGhlIG1lc3NhZ2VzIHdpdGggdGhlIHdhbGxldFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRpbmdGdW5jdGlvbi5jYWxsKHdhbGxldCwge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICAvLyBSZWNpcGllbnRzIG11c3QgYmUgZW1wdHlcbiAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgLy8gdHhGb3JtYXQgbXVzdCBiZSBwc2J0XG4gICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgLy8gUGFzcyBpbiB0aGUgb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBvZmZsaW5lVmVyaWZpY2F0aW9uOiB3YWxsZXQudHlwZSgpID09PSAnY29sZCcsXG4gICAgfSk7XG4gICAgdHJhbnNhY3Rpb25zLnB1c2gocmVzdWx0KTtcbiAgICBudW1NZXNzYWdlcyArPSBtZXNzYWdlcy5sZW5ndGg7XG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG51bU1lc3NhZ2VzLCB0cmFuc2FjdGlvbnMgfTtcbn1cbiJdfQ==
|