@bitgo/sdk-core 36.8.0 → 36.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -0
- package/dist/src/account-lib/baseCoin/enum.d.ts +12 -1
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +19 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +20 -5
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/config.d.ts +42 -0
- package/dist/src/bitgo/config.d.ts.map +1 -1
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +27 -3
- package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
- package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
- package/dist/src/bitgo/evm/evmUtils.js +50 -0
- package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -1
- package/dist/src/bitgo/proofs/WalletProofs.js +3 -3
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +7 -1
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
- package/dist/src/bitgo/staking/stakingWallet.d.ts +5 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +62 -37
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +4 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +24 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +2 -2
- package/dist/src/bitgo/wallet/BuildParams.d.ts +1 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +3 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +16 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +2 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts +4 -4
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +48 -14
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +15 -4
- 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 +72 -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/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +3 -2
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -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/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,iBAAiB,CAAC;AAE3C,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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0VXRpbC9taWRuaWdodE1lc3NhZ2VQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFJM0Msa0RBQStDO0FBRS9DLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsaUJBQWlCLEdBQUcsa0VBQWtFLENBQUM7QUFTcEc7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXVCO0lBT2xDLFlBQ1UsTUFBZSxFQUNmLGtCQUEwQixFQUNqQixZQUFZLHNCQUFzQjtRQUYzQyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBTDNDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFPeEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQ3RCLDJCQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNqQyx5Q0FBeUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCxLQUFLLENBQUMsNkJBQTZCO1FBQ2pDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQTRCO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztZQUMvQyxLQUFLLEVBQUUsc0JBQXNCO1NBQzlCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFFBQVEsQ0FBQyxNQUFNLFNBQVMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUNELE9BQU87Z0JBQ0wsZ0NBQWdDO2dCQUNoQyxPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFJLHlCQUFpQixFQUFFO2dCQUM1RixPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBeERELDBEQXdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgSU1lc3NhZ2VQcm92aWRlciwgTWVzc2FnZUluZm8gfSBmcm9tICcuL2lNZXNzYWdlUHJvdmlkZXInO1xuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudHMgfSBmcm9tICcuLi9lbnZpcm9ubWVudHMnO1xuXG5jb25zdCBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZID0gMTAwMDtcbmV4cG9ydCBjb25zdCBNSUROSUdIVF9UTkNfSEFTSCA9ICczMWE2YmFiNTBhODRiODQzOWFkY2ZiNzg2YmIyMDIwZjY4MDdlNmU4ZmRhNjI5YjQyNDExMGZjN2JiMWM2YjhiJztcblxudHlwZSBDbGFpbSA9IHtcbiAgb3JpZ2luV2FsbGV0SWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIG9yaWdpbkFkZHJlc3M/OiBzdHJpbmc7XG4gIGFsbG9jYXRpb25BbW91bnQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogVGhlIE1pZG5pZ2h0IGRyb3Agc2VydmljZSBjYW4gcmV0dXJuIHVwIHRvIDEwMDAgbWVzc2FnZXMgcGVyIHJlcXVlc3QuXG4gKiBXZSBtYWtlIHRoaXMgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHBhZ2luYXRpb24gYW5kIGJhdGNoaW5nIG9mIG1lc3NhZ2VzLFxuICoga2VlcGluZyBhIGxvY2FsIGNhY2hlIG9mIHRoZSB1bnByb2Nlc3NlZCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyIGltcGxlbWVudHMgSU1lc3NhZ2VQcm92aWRlciB7XG4gIHByb3RlY3RlZCB1bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGU6IE1lc3NhZ2VJbmZvW107XG4gIHByb3RlY3RlZCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHByb3RlY3RlZCBtaWRuaWdodENsYWltVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBwcmV2SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJhbk9uY2UgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHdhbGxldDogSVdhbGxldCxcbiAgICBwcml2YXRlIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmF0Y2hTaXplID0gTlVNX01FU1NBR0VTX1BFUl9RVUVSWVxuICApIHtcbiAgICB0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZSA9IFtdO1xuICAgIHRoaXMubmV0d29yayA9IHV0eG9saWIubmV0d29ya3Nbd2FsbGV0LmNvaW4oKV07XG4gICAgdGhpcy5taWRuaWdodENsYWltVXJsID0gYCR7XG4gICAgICBFbnZpcm9ubWVudHNbd2FsbGV0LmJpdGdvLmVudl0udXJpXG4gICAgfS9hcGkvYWlyZHJvcC1jbGFpbS92MS9taWRuaWdodC9jbGFpbXMvJHt3YWxsZXQuY29pbigpfS8ke3dhbGxldC5pZCgpfWA7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpOiBQcm9taXNlPE1lc3NhZ2VJbmZvW10+IHtcbiAgICBpZiAodGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlLnNwbGljZSgwLCB0aGlzLmJhdGNoU2l6ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPT09IDAgJiYgdGhpcy5yYW5PbmNlICYmIHRoaXMucHJldklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnJhbk9uY2UgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIHN0YXR1c2VzOiBbJ1VOSU5JVElBVEVEJywgJ05FRURTX1JFU1VCTUlUVElORyddLFxuICAgICAgbGltaXQ6IE5VTV9NRVNTQUdFU19QRVJfUVVFUlksXG4gICAgfTtcbiAgICBpZiAodGhpcy5wcmV2SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcXVlcnkucHJldklkID0gdGhpcy5wcmV2SWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z28uZ2V0KHRoaXMubWlkbmlnaHRDbGFpbVVybCkucXVlcnkocXVlcnkpLnJlc3VsdCgpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09ICdzdWNjZXNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlICR7cmVzcG9uc2Uuc3RhdHVzfSBmcm9tICR7dGhpcy5taWRuaWdodENsYWltVXJsfWApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2U/LnBhZ2luYXRpb24/Lmhhc05leHQpIHtcbiAgICAgIHRoaXMucHJldklkID0gcmVzcG9uc2U/LnBhZ2luYXRpb24/Lm5leHRQcmV2SWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJldklkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlID0gcmVzcG9uc2UuY2xhaW1zLm1hcCgoY2xhaW06IENsYWltKSA9PiB7XG4gICAgICBpZiAoIWNsYWltLm9yaWdpbkFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGFpbSAke0pTT04uc3RyaW5naWZ5KGNsYWltKX0gaXMgbWlzc2luZyBvcmlnaW5BZGRyZXNzYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBNaWRuaWdodCBjbGFpbSBtZXNzYWdlIGZvcm1hdFxuICAgICAgICBtZXNzYWdlOiBgU1RBUiAke2NsYWltLmFsbG9jYXRpb25BbW91bnR9IHRvICR7dGhpcy5kZXN0aW5hdGlvbkFkZHJlc3N9ICR7TUlETklHSFRfVE5DX0hBU0h9YCxcbiAgICAgICAgYWRkcmVzczogY2xhaW0ub3JpZ2luQWRkcmVzcyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlLnNwbGljZSgwLCB0aGlzLmJhdGNoU2l6ZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -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,EAAU,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,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,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bulkSignAccountBasedMidnightClaimMessages = bulkSignAccountBasedMidnightClaimMessages;
|
|
4
|
+
const wallet_1 = require("../wallet");
|
|
5
|
+
const midnightMessageProvider_1 = require("./midnightMessageProvider");
|
|
6
|
+
async function bulkSignAccountBasedMidnightClaimMessages(wallet, messageStandardType, destinationAddress, walletPassphrase) {
|
|
7
|
+
const provider = new midnightMessageProvider_1.MidnightMessageProvider(wallet, destinationAddress);
|
|
8
|
+
return bulkSignAccountBasedMessagesWithProvider(provider, wallet, messageStandardType, walletPassphrase);
|
|
9
|
+
}
|
|
10
|
+
async function bulkSignAccountBasedMessagesWithProvider(provider, wallet, messageStandardType, walletPassphrase) {
|
|
11
|
+
const failedAddresses = [];
|
|
12
|
+
const txRequests = [];
|
|
13
|
+
// Gather all messages to process (flatten all batches)
|
|
14
|
+
let allMessages = [];
|
|
15
|
+
let messages = await provider.getMessagesAndAddressesToSign();
|
|
16
|
+
while (messages.length > 0) {
|
|
17
|
+
allMessages = allMessages.concat(messages);
|
|
18
|
+
messages = await provider.getMessagesAndAddressesToSign();
|
|
19
|
+
}
|
|
20
|
+
// Extract wallet constructor params
|
|
21
|
+
const { bitgo, baseCoin, _wallet: walletData } = wallet;
|
|
22
|
+
// Process all messages sequentially, each with a new Wallet instance
|
|
23
|
+
const results = [];
|
|
24
|
+
for (const messageInfo of allMessages) {
|
|
25
|
+
const newWallet = new wallet_1.Wallet(bitgo, baseCoin, walletData);
|
|
26
|
+
const result = await signOrBuildMessage(newWallet, messageInfo, messageStandardType, walletPassphrase);
|
|
27
|
+
results.push(result);
|
|
28
|
+
}
|
|
29
|
+
processResults(results, txRequests, failedAddresses);
|
|
30
|
+
return { failedAddresses, txRequests };
|
|
31
|
+
}
|
|
32
|
+
async function signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase) {
|
|
33
|
+
let txRequestId;
|
|
34
|
+
if (walletPassphrase !== undefined) {
|
|
35
|
+
// Sign the messages with the wallet
|
|
36
|
+
const signedMessage = await wallet.signMessage({
|
|
37
|
+
message: {
|
|
38
|
+
messageRaw: messageInfo.message,
|
|
39
|
+
messageStandardType,
|
|
40
|
+
signerAddress: messageInfo.address,
|
|
41
|
+
},
|
|
42
|
+
walletPassphrase,
|
|
43
|
+
});
|
|
44
|
+
txRequestId = signedMessage.txRequestId;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Build the sign message request
|
|
48
|
+
const txRequest = await wallet.buildSignMessageRequest({
|
|
49
|
+
message: {
|
|
50
|
+
messageRaw: messageInfo.message,
|
|
51
|
+
messageStandardType,
|
|
52
|
+
signerAddress: messageInfo.address,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
txRequestId = txRequest.txRequestId;
|
|
56
|
+
}
|
|
57
|
+
return { success: true, address: messageInfo.address, txRequestId };
|
|
58
|
+
}
|
|
59
|
+
function processResults(results, txRequests, failedAddresses) {
|
|
60
|
+
for (const result of results) {
|
|
61
|
+
if (result.success) {
|
|
62
|
+
txRequests.push({
|
|
63
|
+
address: result.address,
|
|
64
|
+
txRequestId: result.txRequestId,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
failedAddresses.push(result.address);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkFjY291bnRCYXNlZE1pZG5pZ2h0Q2xhaW1NZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3NpZ25BY2NvdW50QmFzZWRNaWRuaWdodENsYWltTWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFVQSw4RkFRQztBQWxCRCxzQ0FBNEM7QUFFNUMsdUVBQW9FO0FBUTdELEtBQUssVUFBVSx5Q0FBeUMsQ0FDN0QsTUFBZSxFQUNmLG1CQUF3QyxFQUN4QyxrQkFBMEIsRUFDMUIsZ0JBQXlCO0lBRXpCLE1BQU0sUUFBUSxHQUFHLElBQUksaURBQXVCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekUsT0FBTyx3Q0FBd0MsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDM0csQ0FBQztBQUVELEtBQUssVUFBVSx3Q0FBd0MsQ0FDckQsUUFBMEIsRUFDMUIsTUFBZSxFQUNmLG1CQUF3QyxFQUN4QyxnQkFBeUI7SUFFekIsTUFBTSxlQUFlLEdBQWEsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sVUFBVSxHQUE4QixFQUFFLENBQUM7SUFFakQsdURBQXVEO0lBQ3ZELElBQUksV0FBVyxHQUFrQixFQUFFLENBQUM7SUFDcEMsSUFBSSxRQUFRLEdBQWtCLE1BQU0sUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDN0UsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQWdCLENBQUM7SUFFbEUscUVBQXFFO0lBQ3JFLE1BQU0sT0FBTyxHQUFrRSxFQUFFLENBQUM7SUFDbEYsS0FBSyxNQUFNLFdBQVcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FDL0IsTUFBZSxFQUNmLFdBQXdCLEVBQ3hCLG1CQUF3QyxFQUN4QyxnQkFBeUI7SUFFekIsSUFBSSxXQUFtQixDQUFDO0lBQ3hCLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkMsb0NBQW9DO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUM3QyxPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2dCQUMvQixtQkFBbUI7Z0JBQ25CLGFBQWEsRUFBRSxXQUFXLENBQUMsT0FBTzthQUNuQztZQUNELGdCQUFnQjtTQUNqQixDQUFDLENBQUM7UUFDSCxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztJQUMxQyxDQUFDO1NBQU0sQ0FBQztRQUNOLGlDQUFpQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztZQUNyRCxPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2dCQUMvQixtQkFBbUI7Z0JBQ25CLGFBQWEsRUFBRSxXQUFXLENBQUMsT0FBTzthQUNuQztTQUNGLENBQUMsQ0FBQztRQUNILFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLE9BQXNFLEVBQ3RFLFVBQXFDLEVBQ3JDLGVBQXlCO0lBRXpCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVzthQUNoQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdhbGxldCwgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgfSBmcm9tICcuL21pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyJztcbmltcG9ydCB7IElNZXNzYWdlUHJvdmlkZXIsIE1lc3NhZ2VJbmZvIH0gZnJvbSAnLi9pTWVzc2FnZVByb3ZpZGVyJztcblxudHlwZSBCdWxrQWNjb3VudEJhc2VkTWVzc2FnZVJlc3BvbnNlID0ge1xuICB0eFJlcXVlc3RzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICBmYWlsZWRBZGRyZXNzZXM6IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1bGtTaWduQWNjb3VudEJhc2VkTWlkbmlnaHRDbGFpbU1lc3NhZ2VzKFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUsXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtBY2NvdW50QmFzZWRNZXNzYWdlUmVzcG9uc2U+IHtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIod2FsbGV0LCBkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICByZXR1cm4gYnVsa1NpZ25BY2NvdW50QmFzZWRNZXNzYWdlc1dpdGhQcm92aWRlcihwcm92aWRlciwgd2FsbGV0LCBtZXNzYWdlU3RhbmRhcmRUeXBlLCB3YWxsZXRQYXNzcGhyYXNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVsa1NpZ25BY2NvdW50QmFzZWRNZXNzYWdlc1dpdGhQcm92aWRlcihcbiAgcHJvdmlkZXI6IElNZXNzYWdlUHJvdmlkZXIsXG4gIHdhbGxldDogSVdhbGxldCxcbiAgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWxrQWNjb3VudEJhc2VkTWVzc2FnZVJlc3BvbnNlPiB7XG4gIGNvbnN0IGZhaWxlZEFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgdHhSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gIC8vIEdhdGhlciBhbGwgbWVzc2FnZXMgdG8gcHJvY2VzcyAoZmxhdHRlbiBhbGwgYmF0Y2hlcylcbiAgbGV0IGFsbE1lc3NhZ2VzOiBNZXNzYWdlSW5mb1tdID0gW107XG4gIGxldCBtZXNzYWdlczogTWVzc2FnZUluZm9bXSA9IGF3YWl0IHByb3ZpZGVyLmdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk7XG4gIHdoaWxlIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgYWxsTWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xuICAgIG1lc3NhZ2VzID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgfVxuXG4gIC8vIEV4dHJhY3Qgd2FsbGV0IGNvbnN0cnVjdG9yIHBhcmFtc1xuICBjb25zdCB7IGJpdGdvLCBiYXNlQ29pbiwgX3dhbGxldDogd2FsbGV0RGF0YSB9ID0gd2FsbGV0IGFzIFdhbGxldDtcblxuICAvLyBQcm9jZXNzIGFsbCBtZXNzYWdlcyBzZXF1ZW50aWFsbHksIGVhY2ggd2l0aCBhIG5ldyBXYWxsZXQgaW5zdGFuY2VcbiAgY29uc3QgcmVzdWx0czogeyBzdWNjZXNzOiBib29sZWFuOyBhZGRyZXNzOiBzdHJpbmc7IHR4UmVxdWVzdElkPzogc3RyaW5nIH1bXSA9IFtdO1xuICBmb3IgKGNvbnN0IG1lc3NhZ2VJbmZvIG9mIGFsbE1lc3NhZ2VzKSB7XG4gICAgY29uc3QgbmV3V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZUNvaW4sIHdhbGxldERhdGEpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNpZ25PckJ1aWxkTWVzc2FnZShuZXdXYWxsZXQsIG1lc3NhZ2VJbmZvLCBtZXNzYWdlU3RhbmRhcmRUeXBlLCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgfVxuICBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzLCB0eFJlcXVlc3RzLCBmYWlsZWRBZGRyZXNzZXMpO1xuICByZXR1cm4geyBmYWlsZWRBZGRyZXNzZXMsIHR4UmVxdWVzdHMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2lnbk9yQnVpbGRNZXNzYWdlKFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIG1lc3NhZ2VJbmZvOiBNZXNzYWdlSW5mbyxcbiAgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZ1xuKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IGFkZHJlc3M6IHN0cmluZzsgdHhSZXF1ZXN0SWQ/OiBzdHJpbmcgfT4ge1xuICBsZXQgdHhSZXF1ZXN0SWQ6IHN0cmluZztcbiAgaWYgKHdhbGxldFBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFNpZ24gdGhlIG1lc3NhZ2VzIHdpdGggdGhlIHdhbGxldFxuICAgIGNvbnN0IHNpZ25lZE1lc3NhZ2UgPSBhd2FpdCB3YWxsZXQuc2lnbk1lc3NhZ2Uoe1xuICAgICAgbWVzc2FnZToge1xuICAgICAgICBtZXNzYWdlUmF3OiBtZXNzYWdlSW5mby5tZXNzYWdlLFxuICAgICAgICBtZXNzYWdlU3RhbmRhcmRUeXBlLFxuICAgICAgICBzaWduZXJBZGRyZXNzOiBtZXNzYWdlSW5mby5hZGRyZXNzLFxuICAgICAgfSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG4gICAgdHhSZXF1ZXN0SWQgPSBzaWduZWRNZXNzYWdlLnR4UmVxdWVzdElkO1xuICB9IGVsc2Uge1xuICAgIC8vIEJ1aWxkIHRoZSBzaWduIG1lc3NhZ2UgcmVxdWVzdFxuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIG1lc3NhZ2VSYXc6IG1lc3NhZ2VJbmZvLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGUsXG4gICAgICAgIHNpZ25lckFkZHJlc3M6IG1lc3NhZ2VJbmZvLmFkZHJlc3MsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHR4UmVxdWVzdElkID0gdHhSZXF1ZXN0LnR4UmVxdWVzdElkO1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGFkZHJlc3M6IG1lc3NhZ2VJbmZvLmFkZHJlc3MsIHR4UmVxdWVzdElkIH07XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZXN1bHRzKFxuICByZXN1bHRzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGFkZHJlc3M6IHN0cmluZzsgdHhSZXF1ZXN0SWQ/OiBzdHJpbmcgfVtdLFxuICB0eFJlcXVlc3RzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICBmYWlsZWRBZGRyZXNzZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdHhSZXF1ZXN0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogcmVzdWx0LmFkZHJlc3MsXG4gICAgICAgIHR4UmVxdWVzdElkOiByZXN1bHQudHhSZXF1ZXN0SWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFpbGVkQWRkcmVzc2VzLnB1c2gocmVzdWx0LmFkZHJlc3MpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0dBLHdFQU9DO0FBN0dELHlEQUEyQztBQUczQyxrREFBK0M7QUFFL0MsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxpQkFBaUIsR0FBRyxrRUFBa0UsQ0FBQztBQTRCcEc7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXVCO0lBUWxDLFlBQW9CLE1BQWUsRUFBVSxrQkFBMEI7UUFBbkQsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUg3RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSXhCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUN0QiwyQkFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDakMseUNBQXlDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QjtRQUNqQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0Ms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LENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldC9pV2FsbGV0JztcbmltcG9ydCB7IEVudmlyb25tZW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50cyc7XG5cbmNvbnN0IE5VTV9NRVNTQUdFU19QRVJfUVVFUlkgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IE1JRE5JR0hUX1ROQ19IQVNIID0gJzMxYTZiYWI1MGE4NGI4NDM5YWRjZmI3ODZiYjIwMjBmNjgwN2U2ZThmZGE2MjliNDI0MTEwZmM3YmIxYzZiOGInO1xuXG50eXBlIE1lc3NhZ2VJbmZvID0ge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbn07XG5cbnR5cGUgQ2xhaW0gPSB7XG4gIG9yaWdpbldhbGxldElkOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBvcmlnaW5BZGRyZXNzPzogc3RyaW5nO1xuICBhbGxvY2F0aW9uQW1vdW50OiBzdHJpbmc7XG59O1xuXG50eXBlIEJ1bGtNZXNzYWdlUmVzcG9uc2UgPSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIG51bU1lc3NhZ2VzOiBudW1iZXI7XG4gIHRyYW5zYWN0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VQcm92aWRlciB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlcyBhbmQgYWRkcmVzc2VzIHRoYXQgd2Ugd2FudCB0byBzaWduLiBXZSBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmVcbiAgICogbWVzc2FnZXMuIElmIHRoZXJlIGFyZSBubyBtb3JlIG1lc3NhZ2VzLCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC4gTm90ZSB0aGF0IHdlIG9ubHkgcmV0dXJuIG1lc3NhZ2VzIGluIHNldHMgb2YgMjAwLlxuICAgKi9cbiAgZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTogUHJvbWlzZTxNZXNzYWdlSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBUaGUgTWlkbmlnaHQgZHJvcCBzZXJ2aWNlIGNhbiByZXR1cm4gdXAgdG8gMTAwMCBtZXNzYWdlcyBwZXIgcmVxdWVzdC4gSG93ZXZlciwgVVRYTyBjb2luc1xuICogY2FuIG9ubHkgaGF2ZSBhIG1heGltdW0gb2YgMjAwIG1lc3NhZ2VzIHBlciB0cmFuc2FjdGlvbi4gV2UgbWFrZSB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gdGhhdFxuICogaGFuZGxlcyB0aGUgcGFnaW5hdGlvbiBhbmQgYmF0Y2hpbmcgb2YgbWVzc2FnZXMsIGtlZXBpbmcgYSBsb2NhbCBjYWNoZSBvZiB0aGUgdW5wcm9jZXNzZWQgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNaWRuaWdodE1lc3NhZ2VQcm92aWRlciBpbXBsZW1lbnRzIElNZXNzYWdlUHJvdmlkZXIge1xuICBwcm90ZWN0ZWQgdW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlOiBNZXNzYWdlSW5mb1tdO1xuICBwcm90ZWN0ZWQgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrO1xuICBwcm90ZWN0ZWQgbWlkbmlnaHRDbGFpbVVybDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcHJldklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCByYW5PbmNlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgbnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2FsbGV0OiBJV2FsbGV0LCBwcml2YXRlIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nKSB7XG4gICAgdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUgPSBbXTtcbiAgICB0aGlzLm5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzW3dhbGxldC5jb2luKCldO1xuICAgIHRoaXMubWlkbmlnaHRDbGFpbVVybCA9IGAke1xuICAgICAgRW52aXJvbm1lbnRzW3dhbGxldC5iaXRnby5lbnZdLnVyaVxuICAgIH0vYXBpL2FpcmRyb3AtY2xhaW0vdjEvbWlkbmlnaHQvY2xhaW1zLyR7d2FsbGV0LmNvaW4oKX0vJHt3YWxsZXQuaWQoKX1gO1xuICAgIHRoaXMubnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbiA9IHdhbGxldC5iaXRnby5lbnYgPT09ICdwcm9kJyA/IDIwMCA6IDQ7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpOiBQcm9taXNlPE1lc3NhZ2VJbmZvW10+IHtcbiAgICBpZiAodGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlLnNwbGljZSgwLCB0aGlzLm51bU1lc3NhZ2VzUGVyVHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAodGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUubGVuZ3RoID09PSAwICYmIHRoaXMucmFuT25jZSAmJiB0aGlzLnByZXZJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdGhpcy5yYW5PbmNlID0gdHJ1ZTtcbiAgICBjb25zdCBxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBzdGF0dXM6ICdVTklOSVRJQVRFRCcsXG4gICAgICBsaW1pdDogTlVNX01FU1NBR0VTX1BFUl9RVUVSWSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5wcmV2SWQgPSB0aGlzLnByZXZJZDtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5nZXQodGhpcy5taWRuaWdodENsYWltVXJsKS5xdWVyeShxdWVyeSkucmVzdWx0KCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJHt0aGlzLm1pZG5pZ2h0Q2xhaW1Vcmx9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZT8ucGFnaW5hdGlvbj8uaGFzTmV4dCkge1xuICAgICAgdGhpcy5wcmV2SWQgPSByZXNwb25zZT8ucGFnaW5hdGlvbj8ubmV4dFByZXZJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUgPSByZXNwb25zZS5jbGFpbXMubWFwKChjbGFpbTogQ2xhaW0pID0+IHtcbiAgICAgIGlmICghY2xhaW0ub3JpZ2luQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYWltICR7SlNPTi5zdHJpbmdpZnkoY2xhaW0pfSBpcyBtaXNzaW5nIG9yaWdpbkFkZHJlc3NgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIE1pZG5pZ2h0IGNsYWltIG1lc3NhZ2UgZm9ybWF0XG4gICAgICAgIG1lc3NhZ2U6IGBTVEFSICR7Y2xhaW0uYWxsb2NhdGlvbkFtb3VudH0gdG8gJHt0aGlzLmRlc3RpbmF0aW9uQWRkcmVzc30gJHtNSUROSUdIVF9UTkNfSEFTSH1gLFxuICAgICAgICBhZGRyZXNzOiBjbGFpbS5vcmlnaW5BZGRyZXNzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCB0b1JldHVybiA9IHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlLnNwbGljZSgwLCB0aGlzLm51bU1lc3NhZ2VzUGVyVHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiB0b1JldHVybjtcbiAgfVxufVxuXG4vKipcbiAqIEJ1bGsgc2lnbnMgQklQMzIyIG1lc3NhZ2VzIGZvciB0aGUgTWlkbmlnaHQgYWlyZHJvcC5cbiAqIEBwYXJhbSB3YWxsZXQgVGhlIHdhbGxldCB0byBzaWduIHRoZSBtZXNzYWdlcyB3aXRoLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uQWRkcmVzcyBUaGUgQURBIGFkZHJlc3MgdGhlIHJld2FyZHMgd2lsbCBnZXQgc2VudCB0b1xuICogQHBhcmFtIHdhbGxldFBhc3NwaHJhc2UgKE9wdGlvbmFsKSBUaGUgd2FsbGV0IHBhc3NwaHJhc2Ugb2YgdGhlIHdhbGxldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVsa1NpZ25CaXAzMjJNaWRuaWdodE1lc3NhZ2VzKFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIod2FsbGV0LCBkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICByZXR1cm4gYnVsa1NpZ25CaXAzMjJNZXNzYWdlc1dpdGhQcm92aWRlcihwcm92aWRlciwgd2FsbGV0LCB3YWxsZXRQYXNzcGhyYXNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVsa1NpZ25CaXAzMjJNZXNzYWdlc1dpdGhQcm92aWRlcihcbiAgcHJvdmlkZXI6IElNZXNzYWdlUHJvdmlkZXIsXG4gIHdhbGxldDogSVdhbGxldCxcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWxrTWVzc2FnZVJlc3BvbnNlPiB7XG4gIGxldCBudW1NZXNzYWdlcyA9IDA7XG4gIGxldCBtZXNzYWdlczogTWVzc2FnZUluZm9bXSA9IGF3YWl0IHByb3ZpZGVyLmdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk7XG4gIGNvbnN0IHNlbmRpbmdGdW5jdGlvbiA9IHdhbGxldC50eXBlKCkgPT09ICdjb2xkJyA/IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uIDogd2FsbGV0LnNlbmRNYW55O1xuICBjb25zdCB0cmFuc2FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgd2hpbGUgKG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBTaWduIHRoZSBtZXNzYWdlcyB3aXRoIHRoZSB3YWxsZXRcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kaW5nRnVuY3Rpb24uY2FsbCh3YWxsZXQsIHtcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgLy8gUmVjaXBpZW50cyBtdXN0IGJlIGVtcHR5XG4gICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgIC8vIHR4Rm9ybWF0IG11c3QgYmUgcHNidFxuICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgIC8vIFBhc3MgaW4gdGhlIG9wdGlvbmFsIHdhbGxldCBwYXNzcGhyYXNlXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgb2ZmbGluZVZlcmlmaWNhdGlvbjogd2FsbGV0LnR5cGUoKSA9PT0gJ2NvbGQnLFxuICAgIH0pO1xuICAgIHRyYW5zYWN0aW9ucy5wdXNoKHJlc3VsdCk7XG4gICAgbnVtTWVzc2FnZXMgKz0gbWVzc2FnZXMubGVuZ3RoO1xuICAgIG1lc3NhZ2VzID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgfVxuICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBudW1NZXNzYWdlcywgdHJhbnNhY3Rpb25zIH07XG59XG4iXX0=
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsd0VBU0M7QUF2QkQsdUVBQW9FO0FBUXBFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxNQUFlLEVBQ2Ysa0JBQTBCLEVBQzFCLGdCQUF5QjtJQUV6QixxRUFBcUU7SUFDckUsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksaURBQXVCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDcEcsT0FBTyxrQ0FBa0MsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELEtBQUssVUFBVSxrQ0FBa0MsQ0FDL0MsUUFBMEIsRUFDMUIsTUFBZSxFQUNmLGdCQUF5QjtJQUV6QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSSxRQUFRLEdBQWtCLE1BQU0sUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDN0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgSU1lc3NhZ2VQcm92aWRlciwgTWVzc2FnZUluZm8gfSBmcm9tICcuL2lNZXNzYWdlUHJvdmlkZXInO1xuaW1wb3J0IHsgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgfSBmcm9tICcuL21pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyJztcblxudHlwZSBCdWxrTWVzc2FnZVJlc3BvbnNlID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBudW1NZXNzYWdlczogbnVtYmVyO1xuICB0cmFuc2FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59O1xuXG4vKipcbiAqIEJ1bGsgc2lnbnMgQklQMzIyIG1lc3NhZ2VzIGZvciB0aGUgTWlkbmlnaHQgYWlyZHJvcC5cbiAqIEBwYXJhbSB3YWxsZXQgVGhlIHdhbGxldCB0byBzaWduIHRoZSBtZXNzYWdlcyB3aXRoLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uQWRkcmVzcyBUaGUgQURBIGFkZHJlc3MgdGhlIHJld2FyZHMgd2lsbCBnZXQgc2VudCB0b1xuICogQHBhcmFtIHdhbGxldFBhc3NwaHJhc2UgKE9wdGlvbmFsKSBUaGUgd2FsbGV0IHBhc3NwaHJhc2Ugb2YgdGhlIHdhbGxldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVsa1NpZ25CaXAzMjJNaWRuaWdodE1lc3NhZ2VzKFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgLy8gVVRYTyBjb2lucyBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAyMDAgbWVzc2FnZXMgcGVyIHRyYW5zYWN0aW9uXG4gIGNvbnN0IG51bU1lc3NhZ2VzUGVyVHJhbnNhY3Rpb24gPSB3YWxsZXQuYml0Z28uZW52ID09PSAncHJvZCcgPyAyMDAgOiA0O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBNaWRuaWdodE1lc3NhZ2VQcm92aWRlcih3YWxsZXQsIGRlc3RpbmF0aW9uQWRkcmVzcywgbnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gIHJldHVybiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKHByb3ZpZGVyLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKFxuICBwcm92aWRlcjogSU1lc3NhZ2VQcm92aWRlcixcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgbGV0IG51bU1lc3NhZ2VzID0gMDtcbiAgbGV0IG1lc3NhZ2VzOiBNZXNzYWdlSW5mb1tdID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgY29uc3Qgc2VuZGluZ0Z1bmN0aW9uID0gd2FsbGV0LnR5cGUoKSA9PT0gJ2NvbGQnID8gd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24gOiB3YWxsZXQuc2VuZE1hbnk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24gdGhlIG1lc3NhZ2VzIHdpdGggdGhlIHdhbGxldFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRpbmdGdW5jdGlvbi5jYWxsKHdhbGxldCwge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICAvLyBSZWNpcGllbnRzIG11c3QgYmUgZW1wdHlcbiAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgLy8gdHhGb3JtYXQgbXVzdCBiZSBwc2J0XG4gICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgLy8gUGFzcyBpbiB0aGUgb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBvZmZsaW5lVmVyaWZpY2F0aW9uOiB3YWxsZXQudHlwZSgpID09PSAnY29sZCcsXG4gICAgfSk7XG4gICAgdHJhbnNhY3Rpb25zLnB1c2gocmVzdWx0KTtcbiAgICBudW1NZXNzYWdlcyArPSBtZXNzYWdlcy5sZW5ndGg7XG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG51bU1lc3NhZ2VzLCB0cmFuc2FjdGlvbnMgfTtcbn1cbiJdfQ==
|