@bitgo/sdk-core 36.8.0 → 36.9.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/src/account-lib/baseCoin/enum.d.ts +3 -1
  3. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/enum.js +5 -1
  5. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +20 -5
  6. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  7. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  8. package/dist/src/bitgo/config.d.ts +36 -0
  9. package/dist/src/bitgo/config.d.ts.map +1 -1
  10. package/dist/src/bitgo/environments.d.ts.map +1 -1
  11. package/dist/src/bitgo/environments.js +27 -3
  12. package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
  13. package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
  14. package/dist/src/bitgo/evm/evmUtils.js +50 -0
  15. package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -1
  16. package/dist/src/bitgo/proofs/WalletProofs.js +3 -3
  17. package/dist/src/bitgo/staking/iStakingWallet.d.ts +7 -1
  18. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  19. package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
  20. package/dist/src/bitgo/staking/stakingWallet.d.ts +5 -2
  21. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  22. package/dist/src/bitgo/staking/stakingWallet.js +63 -36
  23. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  24. package/dist/src/bitgo/utils/mpcUtils.js +4 -1
  25. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  26. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
  27. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +24 -0
  28. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  29. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  30. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +2 -2
  31. package/dist/src/bitgo/wallet/BuildParams.d.ts +1 -0
  32. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  33. package/dist/src/bitgo/wallet/BuildParams.js +3 -1
  34. package/dist/src/bitgo/wallet/iWallet.d.ts +16 -1
  35. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  36. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  37. package/dist/src/bitgo/wallet/iWallets.d.ts +2 -0
  38. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  39. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  40. package/dist/src/bitgo/wallet/wallet.d.ts +4 -4
  41. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  42. package/dist/src/bitgo/wallet/wallet.js +32 -13
  43. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  44. package/dist/src/bitgo/wallet/wallets.js +15 -4
  45. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
  46. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
  47. package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
  48. package/dist/src/bitgo/walletUtil/index.d.ts +1 -0
  49. package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -1
  50. package/dist/src/bitgo/walletUtil/index.js +2 -1
  51. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
  52. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
  53. package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
  54. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
  55. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
  56. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +72 -0
  57. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +1 -31
  58. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -1
  59. package/dist/src/bitgo/walletUtil/utxoMessageProof.js +5 -95
  60. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +3 -2
  61. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
  62. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
  63. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
  64. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
  65. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
  66. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. 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,2 +1,3 @@
1
1
  export * from './utxoMessageProof';
2
+ export * from './signAccountBasedMidnightClaimMessages';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0VXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91dHhvTWVzc2FnZVByb29mJztcbiJdfQ==
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 * as utxolib from '@bitgo/utxo-lib';
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,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAI5C,eAAO,MAAM,iBAAiB,qEAAqE,CAAC;AAEpG,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AASF,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,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,6BAA6B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACzD;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAQlD,OAAO,CAAC,MAAM;IAAW,OAAO,CAAC,kBAAkB;IAP/D,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;IAC1B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;gBAE/B,MAAM,EAAE,OAAO,EAAU,kBAAkB,EAAE,MAAM;IASjE,6BAA6B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAsC9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,OAAO,EACf,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAG9B"}
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 utxolib = __importStar(require("@bitgo/utxo-lib"));
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
- const provider = new MidnightMessageProvider(wallet, destinationAddress);
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==