@bitgo-beta/sdk-core 8.2.1-beta.1166 → 8.2.1-beta.1167

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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-beta/utxo-lib';
2
+ import { IMessageProvider, MessageInfo } from './iMessageProvider';
3
+ import { IWallet } from '../wallet';
4
+ export declare const MIDNIGHT_TNC_HASH = "31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b";
5
+ /**
6
+ * The Midnight drop service can return up to 1000 messages per request.
7
+ * We make this wrapper function that handles the pagination and batching of messages,
8
+ * keeping a local cache of the unprocessed messages.
9
+ */
10
+ export declare class MidnightMessageProvider implements IMessageProvider {
11
+ private wallet;
12
+ private destinationAddress;
13
+ private readonly batchSize;
14
+ protected unprocessedMessagesCache: MessageInfo[];
15
+ protected network: utxolib.Network;
16
+ protected midnightClaimUrl: string;
17
+ protected prevId: string | undefined;
18
+ protected ranOnce: boolean;
19
+ constructor(wallet: IWallet, destinationAddress: string, batchSize?: number);
20
+ getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
21
+ }
22
+ //# sourceMappingURL=midnightMessageProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"midnightMessageProvider.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/midnightMessageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,iBAAiB,qEAAqE,CAAC;AASpG;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAQ5D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,SAAS,CAAC,wBAAwB,EAAE,WAAW,EAAE,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACnC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,OAAO,UAAS;gBAGhB,MAAM,EAAE,OAAO,EACf,kBAAkB,EAAE,MAAM,EACjB,SAAS,SAAyB;IAS/C,6BAA6B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAqC9D"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MidnightMessageProvider = exports.MIDNIGHT_TNC_HASH = void 0;
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const environments_1 = require("../environments");
39
+ const NUM_MESSAGES_PER_QUERY = 1000;
40
+ exports.MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b';
41
+ /**
42
+ * The Midnight drop service can return up to 1000 messages per request.
43
+ * We make this wrapper function that handles the pagination and batching of messages,
44
+ * keeping a local cache of the unprocessed messages.
45
+ */
46
+ class MidnightMessageProvider {
47
+ constructor(wallet, destinationAddress, batchSize = NUM_MESSAGES_PER_QUERY) {
48
+ this.wallet = wallet;
49
+ this.destinationAddress = destinationAddress;
50
+ this.batchSize = batchSize;
51
+ this.ranOnce = false;
52
+ this.unprocessedMessagesCache = [];
53
+ this.network = utxolib.networks[wallet.coin()];
54
+ this.midnightClaimUrl = `${environments_1.Environments[wallet.bitgo.env].uri}/api/airdrop-claim/v1/midnight/claims/${wallet.coin()}/${wallet.id()}`;
55
+ }
56
+ async getMessagesAndAddressesToSign() {
57
+ if (this.unprocessedMessagesCache.length > 0) {
58
+ return this.unprocessedMessagesCache.splice(0, this.batchSize);
59
+ }
60
+ else if (this.unprocessedMessagesCache.length === 0 && this.ranOnce && this.prevId === undefined) {
61
+ return [];
62
+ }
63
+ this.ranOnce = true;
64
+ const query = {
65
+ statuses: ['UNINITIATED', 'NEEDS_RESUBMITTING'],
66
+ limit: NUM_MESSAGES_PER_QUERY,
67
+ };
68
+ if (this.prevId !== undefined) {
69
+ query.prevId = this.prevId;
70
+ }
71
+ const response = await this.wallet.bitgo.get(this.midnightClaimUrl).query(query).result();
72
+ if (response.status !== 'success') {
73
+ throw new Error(`Unexpected status code ${response.status} from ${this.midnightClaimUrl}`);
74
+ }
75
+ if (response?.pagination?.hasNext) {
76
+ this.prevId = response?.pagination?.nextPrevId;
77
+ }
78
+ else {
79
+ this.prevId = undefined;
80
+ }
81
+ this.unprocessedMessagesCache = response.claims.map((claim) => {
82
+ if (!claim.originAddress) {
83
+ throw new Error(`Claim ${JSON.stringify(claim)} is missing originAddress`);
84
+ }
85
+ return {
86
+ // Midnight claim message format
87
+ message: `STAR ${claim.allocationAmount} to ${this.destinationAddress} ${exports.MIDNIGHT_TNC_HASH}`,
88
+ address: claim.originAddress,
89
+ };
90
+ });
91
+ return this.unprocessedMessagesCache.splice(0, this.batchSize);
92
+ }
93
+ }
94
+ exports.MidnightMessageProvider = MidnightMessageProvider;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0VXRpbC9taWRuaWdodE1lc3NhZ2VQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBZ0Q7QUFJaEQsa0RBQStDO0FBRS9DLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsaUJBQWlCLEdBQUcsa0VBQWtFLENBQUM7QUFTcEc7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXVCO0lBT2xDLFlBQ1UsTUFBZSxFQUNmLGtCQUEwQixFQUNqQixZQUFZLHNCQUFzQjtRQUYzQyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBTDNDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFPeEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQ3RCLDJCQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNqQyx5Q0FBeUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCxLQUFLLENBQUMsNkJBQTZCO1FBQ2pDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQTRCO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztZQUMvQyxLQUFLLEVBQUUsc0JBQXNCO1NBQzlCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFFBQVEsQ0FBQyxNQUFNLFNBQVMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUNELE9BQU87Z0JBQ0wsZ0NBQWdDO2dCQUNoQyxPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFJLHlCQUFpQixFQUFFO2dCQUM1RixPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBeERELDBEQXdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBJTWVzc2FnZVByb3ZpZGVyLCBNZXNzYWdlSW5mbyB9IGZyb20gJy4vaU1lc3NhZ2VQcm92aWRlcic7XG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0JztcbmltcG9ydCB7IEVudmlyb25tZW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50cyc7XG5cbmNvbnN0IE5VTV9NRVNTQUdFU19QRVJfUVVFUlkgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IE1JRE5JR0hUX1ROQ19IQVNIID0gJzMxYTZiYWI1MGE4NGI4NDM5YWRjZmI3ODZiYjIwMjBmNjgwN2U2ZThmZGE2MjliNDI0MTEwZmM3YmIxYzZiOGInO1xuXG50eXBlIENsYWltID0ge1xuICBvcmlnaW5XYWxsZXRJZDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgb3JpZ2luQWRkcmVzcz86IHN0cmluZztcbiAgYWxsb2NhdGlvbkFtb3VudDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBUaGUgTWlkbmlnaHQgZHJvcCBzZXJ2aWNlIGNhbiByZXR1cm4gdXAgdG8gMTAwMCBtZXNzYWdlcyBwZXIgcmVxdWVzdC5cbiAqIFdlIG1ha2UgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgcGFnaW5hdGlvbiBhbmQgYmF0Y2hpbmcgb2YgbWVzc2FnZXMsXG4gKiBrZWVwaW5nIGEgbG9jYWwgY2FjaGUgb2YgdGhlIHVucHJvY2Vzc2VkIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgaW1wbGVtZW50cyBJTWVzc2FnZVByb3ZpZGVyIHtcbiAgcHJvdGVjdGVkIHVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZTogTWVzc2FnZUluZm9bXTtcbiAgcHJvdGVjdGVkIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgcHJvdGVjdGVkIG1pZG5pZ2h0Q2xhaW1Vcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHByZXZJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcmFuT25jZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2FsbGV0OiBJV2FsbGV0LFxuICAgIHByaXZhdGUgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXRjaFNpemUgPSBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZXG4gICkge1xuICAgIHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlID0gW107XG4gICAgdGhpcy5uZXR3b3JrID0gdXR4b2xpYi5uZXR3b3Jrc1t3YWxsZXQuY29pbigpXTtcbiAgICB0aGlzLm1pZG5pZ2h0Q2xhaW1VcmwgPSBgJHtcbiAgICAgIEVudmlyb25tZW50c1t3YWxsZXQuYml0Z28uZW52XS51cmlcbiAgICB9L2FwaS9haXJkcm9wLWNsYWltL3YxL21pZG5pZ2h0L2NsYWltcy8ke3dhbGxldC5jb2luKCl9LyR7d2FsbGV0LmlkKCl9YDtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT4ge1xuICAgIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMuYmF0Y2hTaXplKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudW5wcm9jZXNzZWRNZXNzYWdlc0NhY2hlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnJhbk9uY2UgJiYgdGhpcy5wcmV2SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRoaXMucmFuT25jZSA9IHRydWU7XG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgc3RhdHVzZXM6IFsnVU5JTklUSUFURUQnLCAnTkVFRFNfUkVTVUJNSVRUSU5HJ10sXG4gICAgICBsaW1pdDogTlVNX01FU1NBR0VTX1BFUl9RVUVSWSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5wcmV2SWQgPSB0aGlzLnByZXZJZDtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5nZXQodGhpcy5taWRuaWdodENsYWltVXJsKS5xdWVyeShxdWVyeSkucmVzdWx0KCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJHt0aGlzLm1pZG5pZ2h0Q2xhaW1Vcmx9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZT8ucGFnaW5hdGlvbj8uaGFzTmV4dCkge1xuICAgICAgdGhpcy5wcmV2SWQgPSByZXNwb25zZT8ucGFnaW5hdGlvbj8ubmV4dFByZXZJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUgPSByZXNwb25zZS5jbGFpbXMubWFwKChjbGFpbTogQ2xhaW0pID0+IHtcbiAgICAgIGlmICghY2xhaW0ub3JpZ2luQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYWltICR7SlNPTi5zdHJpbmdpZnkoY2xhaW0pfSBpcyBtaXNzaW5nIG9yaWdpbkFkZHJlc3NgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIE1pZG5pZ2h0IGNsYWltIG1lc3NhZ2UgZm9ybWF0XG4gICAgICAgIG1lc3NhZ2U6IGBTVEFSICR7Y2xhaW0uYWxsb2NhdGlvbkFtb3VudH0gdG8gJHt0aGlzLmRlc3RpbmF0aW9uQWRkcmVzc30gJHtNSUROSUdIVF9UTkNfSEFTSH1gLFxuICAgICAgICBhZGRyZXNzOiBjbGFpbS5vcmlnaW5BZGRyZXNzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMuYmF0Y2hTaXplKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { IWallet } from '../wallet';
2
+ import { MessageStandardType } from '../utils';
3
+ type BulkAccountBasedMessageResponse = {
4
+ txRequests: Record<string, unknown>[];
5
+ failedAddresses: string[];
6
+ };
7
+ export declare function bulkSignAccountBasedMidnightClaimMessages(wallet: IWallet, messageStandardType: MessageStandardType, destinationAddress: string, walletPassphrase?: string): Promise<BulkAccountBasedMessageResponse>;
8
+ export {};
9
+ //# sourceMappingURL=signAccountBasedMidnightClaimMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signAccountBasedMidnightClaimMessages.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAI/C,KAAK,+BAA+B,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAsB,yCAAyC,CAC7D,MAAM,EAAE,OAAO,EACf,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,+BAA+B,CAAC,CAG1C"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bulkSignAccountBasedMidnightClaimMessages = bulkSignAccountBasedMidnightClaimMessages;
4
+ const midnightMessageProvider_1 = require("./midnightMessageProvider");
5
+ async function bulkSignAccountBasedMidnightClaimMessages(wallet, messageStandardType, destinationAddress, walletPassphrase) {
6
+ const provider = new midnightMessageProvider_1.MidnightMessageProvider(wallet, destinationAddress);
7
+ return bulkSignAccountBasedMessagesWithProvider(provider, wallet, messageStandardType, walletPassphrase);
8
+ }
9
+ async function bulkSignAccountBasedMessagesWithProvider(provider, wallet, messageStandardType, walletPassphrase) {
10
+ const failedAddresses = [];
11
+ const txRequests = [];
12
+ let messages = await provider.getMessagesAndAddressesToSign();
13
+ while (messages.length > 0) {
14
+ // Sign/build all messages in parallel
15
+ const results = await Promise.all(messages.map((messageInfo) => signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase)));
16
+ // Process results and update counters
17
+ processResults(results, txRequests, failedAddresses);
18
+ // Get next batch of messages
19
+ messages = await provider.getMessagesAndAddressesToSign();
20
+ }
21
+ return { failedAddresses, txRequests };
22
+ }
23
+ async function signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase) {
24
+ try {
25
+ let txRequestId;
26
+ if (walletPassphrase !== undefined) {
27
+ // Sign the messages with the wallet
28
+ const signedMessage = await wallet.signMessage({
29
+ message: {
30
+ messageRaw: messageInfo.message,
31
+ messageStandardType,
32
+ signerAddress: messageInfo.address,
33
+ },
34
+ walletPassphrase,
35
+ });
36
+ txRequestId = signedMessage.txRequestId;
37
+ }
38
+ else {
39
+ // Build the sign message request
40
+ const txRequest = await wallet.buildSignMessageRequest({
41
+ message: {
42
+ messageRaw: messageInfo.message,
43
+ messageStandardType,
44
+ signerAddress: messageInfo.address,
45
+ },
46
+ });
47
+ txRequestId = txRequest.txRequestId;
48
+ }
49
+ return { success: true, address: messageInfo.address, txRequestId };
50
+ }
51
+ catch (e) {
52
+ console.error(`Error building/signing message for address ${messageInfo.address}: ${e}`);
53
+ return { success: false, address: messageInfo.address };
54
+ }
55
+ }
56
+ function processResults(results, txRequests, failedAddresses) {
57
+ for (const result of results) {
58
+ if (result.success) {
59
+ txRequests.push({
60
+ address: result.address,
61
+ txRequestId: result.txRequestId,
62
+ });
63
+ }
64
+ else {
65
+ failedAddresses.push(result.address);
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkFjY291bnRCYXNlZE1pZG5pZ2h0Q2xhaW1NZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3NpZ25BY2NvdW50QmFzZWRNaWRuaWdodENsYWltTWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFVQSw4RkFRQztBQWhCRCx1RUFBb0U7QUFRN0QsS0FBSyxVQUFVLHlDQUF5QyxDQUM3RCxNQUFlLEVBQ2YsbUJBQXdDLEVBQ3hDLGtCQUEwQixFQUMxQixnQkFBeUI7SUFFekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxpREFBdUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RSxPQUFPLHdDQUF3QyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRyxDQUFDO0FBRUQsS0FBSyxVQUFVLHdDQUF3QyxDQUNyRCxRQUEwQixFQUMxQixNQUFlLEVBQ2YsbUJBQXdDLEVBQ3hDLGdCQUF5QjtJQUV6QixNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQThCLEVBQUUsQ0FBQztJQUVqRCxJQUFJLFFBQVEsR0FBa0IsTUFBTSxRQUFRLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUM3RSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0Isc0NBQXNDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQzlHLENBQUM7UUFDRixzQ0FBc0M7UUFDdEMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDckQsNkJBQTZCO1FBQzdCLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLE1BQWUsRUFDZixXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsZ0JBQXlCO0lBRXpCLElBQUksQ0FBQztRQUNILElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLG9DQUFvQztZQUNwQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQzdDLE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU87b0JBQy9CLG1CQUFtQjtvQkFDbkIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2lCQUNuQztnQkFDRCxnQkFBZ0I7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixpQ0FBaUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3JELE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU87b0JBQy9CLG1CQUFtQjtvQkFDbkIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2lCQUNuQzthQUNGLENBQUMsQ0FBQztZQUNILFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsOENBQThDLFdBQVcsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLE9BQXNFLEVBQ3RFLFVBQXFDLEVBQ3JDLGVBQXlCO0lBRXpCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVzthQUNoQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyIH0gZnJvbSAnLi9taWRuaWdodE1lc3NhZ2VQcm92aWRlcic7XG5pbXBvcnQgeyBJTWVzc2FnZVByb3ZpZGVyLCBNZXNzYWdlSW5mbyB9IGZyb20gJy4vaU1lc3NhZ2VQcm92aWRlcic7XG5cbnR5cGUgQnVsa0FjY291bnRCYXNlZE1lc3NhZ2VSZXNwb25zZSA9IHtcbiAgdHhSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgZmFpbGVkQWRkcmVzc2VzOiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWxrU2lnbkFjY291bnRCYXNlZE1pZG5pZ2h0Q2xhaW1NZXNzYWdlcyhcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWxrQWNjb3VudEJhc2VkTWVzc2FnZVJlc3BvbnNlPiB7XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyKHdhbGxldCwgZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgcmV0dXJuIGJ1bGtTaWduQWNjb3VudEJhc2VkTWVzc2FnZXNXaXRoUHJvdmlkZXIocHJvdmlkZXIsIHdhbGxldCwgbWVzc2FnZVN0YW5kYXJkVHlwZSwgd2FsbGV0UGFzc3BocmFzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1bGtTaWduQWNjb3VudEJhc2VkTWVzc2FnZXNXaXRoUHJvdmlkZXIoXG4gIHByb3ZpZGVyOiBJTWVzc2FnZVByb3ZpZGVyLFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUsXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmdcbik6IFByb21pc2U8QnVsa0FjY291bnRCYXNlZE1lc3NhZ2VSZXNwb25zZT4ge1xuICBjb25zdCBmYWlsZWRBZGRyZXNzZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHR4UmVxdWVzdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBsZXQgbWVzc2FnZXM6IE1lc3NhZ2VJbmZvW10gPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24vYnVpbGQgYWxsIG1lc3NhZ2VzIGluIHBhcmFsbGVsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWVzc2FnZXMubWFwKChtZXNzYWdlSW5mbykgPT4gc2lnbk9yQnVpbGRNZXNzYWdlKHdhbGxldCwgbWVzc2FnZUluZm8sIG1lc3NhZ2VTdGFuZGFyZFR5cGUsIHdhbGxldFBhc3NwaHJhc2UpKVxuICAgICk7XG4gICAgLy8gUHJvY2VzcyByZXN1bHRzIGFuZCB1cGRhdGUgY291bnRlcnNcbiAgICBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzLCB0eFJlcXVlc3RzLCBmYWlsZWRBZGRyZXNzZXMpO1xuICAgIC8vIEdldCBuZXh0IGJhdGNoIG9mIG1lc3NhZ2VzXG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IGZhaWxlZEFkZHJlc3NlcywgdHhSZXF1ZXN0cyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaWduT3JCdWlsZE1lc3NhZ2UoXG4gIHdhbGxldDogSVdhbGxldCxcbiAgbWVzc2FnZUluZm86IE1lc3NhZ2VJbmZvLFxuICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgYWRkcmVzczogc3RyaW5nOyB0eFJlcXVlc3RJZD86IHN0cmluZyB9PiB7XG4gIHRyeSB7XG4gICAgbGV0IHR4UmVxdWVzdElkOiBzdHJpbmc7XG4gICAgaWYgKHdhbGxldFBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2lnbiB0aGUgbWVzc2FnZXMgd2l0aCB0aGUgd2FsbGV0XG4gICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gYXdhaXQgd2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIG1lc3NhZ2VSYXc6IG1lc3NhZ2VJbmZvLm1lc3NhZ2UsXG4gICAgICAgICAgbWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgICAgICAgICBzaWduZXJBZGRyZXNzOiBtZXNzYWdlSW5mby5hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG4gICAgICB0eFJlcXVlc3RJZCA9IHNpZ25lZE1lc3NhZ2UudHhSZXF1ZXN0SWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJ1aWxkIHRoZSBzaWduIG1lc3NhZ2UgcmVxdWVzdFxuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgd2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIG1lc3NhZ2VSYXc6IG1lc3NhZ2VJbmZvLm1lc3NhZ2UsXG4gICAgICAgICAgbWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgICAgICAgICBzaWduZXJBZGRyZXNzOiBtZXNzYWdlSW5mby5hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdC50eFJlcXVlc3RJZDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgYWRkcmVzczogbWVzc2FnZUluZm8uYWRkcmVzcywgdHhSZXF1ZXN0SWQgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGJ1aWxkaW5nL3NpZ25pbmcgbWVzc2FnZSBmb3IgYWRkcmVzcyAke21lc3NhZ2VJbmZvLmFkZHJlc3N9OiAke2V9YCk7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGFkZHJlc3M6IG1lc3NhZ2VJbmZvLmFkZHJlc3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmVzdWx0cyhcbiAgcmVzdWx0czogeyBzdWNjZXNzOiBib29sZWFuOyBhZGRyZXNzOiBzdHJpbmc7IHR4UmVxdWVzdElkPzogc3RyaW5nIH1bXSxcbiAgdHhSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgZmFpbGVkQWRkcmVzc2VzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHR4UmVxdWVzdHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHJlc3VsdC5hZGRyZXNzLFxuICAgICAgICB0eFJlcXVlc3RJZDogcmVzdWx0LnR4UmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZEFkZHJlc3Nlcy5wdXNoKHJlc3VsdC5hZGRyZXNzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,39 +1,9 @@
1
- import * as utxolib from '@bitgo-beta/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,sBAAsB,CAAC;AAEhD,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-beta/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0dBLHdFQU9DO0FBN0dELDhEQUFnRDtBQUdoRCxrREFBK0M7QUFFL0MsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxpQkFBaUIsR0FBRyxrRUFBa0UsQ0FBQztBQTRCcEc7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXVCO0lBUWxDLFlBQW9CLE1BQWUsRUFBVSxrQkFBMEI7UUFBbkQsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUg3RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSXhCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUN0QiwyQkFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDakMseUNBQXlDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QjtRQUNqQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0Ms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LENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0L2lXYWxsZXQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzJztcblxuY29uc3QgTlVNX01FU1NBR0VTX1BFUl9RVUVSWSA9IDEwMDA7XG5leHBvcnQgY29uc3QgTUlETklHSFRfVE5DX0hBU0ggPSAnMzFhNmJhYjUwYTg0Yjg0MzlhZGNmYjc4NmJiMjAyMGY2ODA3ZTZlOGZkYTYyOWI0MjQxMTBmYzdiYjFjNmI4Yic7XG5cbnR5cGUgTWVzc2FnZUluZm8gPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xufTtcblxudHlwZSBDbGFpbSA9IHtcbiAgb3JpZ2luV2FsbGV0SWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIG9yaWdpbkFkZHJlc3M/OiBzdHJpbmc7XG4gIGFsbG9jYXRpb25BbW91bnQ6IHN0cmluZztcbn07XG5cbnR5cGUgQnVsa01lc3NhZ2VSZXNwb25zZSA9IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgbnVtTWVzc2FnZXM6IG51bWJlcjtcbiAgdHJhbnNhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1lc3NhZ2VzIGFuZCBhZGRyZXNzZXMgdGhhdCB3ZSB3YW50IHRvIHNpZ24uIFdlIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZVxuICAgKiBtZXNzYWdlcy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWVzc2FnZXMsIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLiBOb3RlIHRoYXQgd2Ugb25seSByZXR1cm4gbWVzc2FnZXMgaW4gc2V0cyBvZiAyMDAuXG4gICAqL1xuICBnZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpOiBQcm9taXNlPE1lc3NhZ2VJbmZvW10+O1xufVxuXG4vKipcbiAqIFRoZSBNaWRuaWdodCBkcm9wIHNlcnZpY2UgY2FuIHJldHVybiB1cCB0byAxMDAwIG1lc3NhZ2VzIHBlciByZXF1ZXN0LiBIb3dldmVyLCBVVFhPIGNvaW5zXG4gKiBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAyMDAgbWVzc2FnZXMgcGVyIHRyYW5zYWN0aW9uLiBXZSBtYWtlIHRoaXMgd3JhcHBlciBmdW5jdGlvbiB0aGF0XG4gKiBoYW5kbGVzIHRoZSBwYWdpbmF0aW9uIGFuZCBiYXRjaGluZyBvZiBtZXNzYWdlcywga2VlcGluZyBhIGxvY2FsIGNhY2hlIG9mIHRoZSB1bnByb2Nlc3NlZCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyIGltcGxlbWVudHMgSU1lc3NhZ2VQcm92aWRlciB7XG4gIHByb3RlY3RlZCB1bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGU6IE1lc3NhZ2VJbmZvW107XG4gIHByb3RlY3RlZCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHByb3RlY3RlZCBtaWRuaWdodENsYWltVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBwcmV2SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJhbk9uY2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBudW1NZXNzYWdlc1BlclRyYW5zYWN0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3YWxsZXQ6IElXYWxsZXQsIHByaXZhdGUgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZSA9IFtdO1xuICAgIHRoaXMubmV0d29yayA9IHV0eG9saWIubmV0d29ya3Nbd2FsbGV0LmNvaW4oKV07XG4gICAgdGhpcy5taWRuaWdodENsYWltVXJsID0gYCR7XG4gICAgICBFbnZpcm9ubWVudHNbd2FsbGV0LmJpdGdvLmVudl0udXJpXG4gICAgfS9hcGkvYWlyZHJvcC1jbGFpbS92MS9taWRuaWdodC9jbGFpbXMvJHt3YWxsZXQuY29pbigpfS8ke3dhbGxldC5pZCgpfWA7XG4gICAgdGhpcy5udW1NZXNzYWdlc1BlclRyYW5zYWN0aW9uID0gd2FsbGV0LmJpdGdvLmVudiA9PT0gJ3Byb2QnID8gMjAwIDogNDtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT4ge1xuICAgIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMubnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZS5sZW5ndGggPT09IDAgJiYgdGhpcy5yYW5PbmNlICYmIHRoaXMucHJldklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnJhbk9uY2UgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIHN0YXR1czogJ1VOSU5JVElBVEVEJyxcbiAgICAgIGxpbWl0OiBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZLFxuICAgIH07XG4gICAgaWYgKHRoaXMucHJldklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHF1ZXJ5LnByZXZJZCA9IHRoaXMucHJldklkO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvLmdldCh0aGlzLm1pZG5pZ2h0Q2xhaW1VcmwpLnF1ZXJ5KHF1ZXJ5KS5yZXN1bHQoKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAnc3VjY2VzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c30gZnJvbSAke3RoaXMubWlkbmlnaHRDbGFpbVVybH1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlPy5wYWdpbmF0aW9uPy5oYXNOZXh0KSB7XG4gICAgICB0aGlzLnByZXZJZCA9IHJlc3BvbnNlPy5wYWdpbmF0aW9uPy5uZXh0UHJldklkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXZJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLnVucHJvY2Vzc2VkTWVzc2FnZXNDYWNoZSA9IHJlc3BvbnNlLmNsYWltcy5tYXAoKGNsYWltOiBDbGFpbSkgPT4ge1xuICAgICAgaWYgKCFjbGFpbS5vcmlnaW5BZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2xhaW0gJHtKU09OLnN0cmluZ2lmeShjbGFpbSl9IGlzIG1pc3Npbmcgb3JpZ2luQWRkcmVzc2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gTWlkbmlnaHQgY2xhaW0gbWVzc2FnZSBmb3JtYXRcbiAgICAgICAgbWVzc2FnZTogYFNUQVIgJHtjbGFpbS5hbGxvY2F0aW9uQW1vdW50fSB0byAke3RoaXMuZGVzdGluYXRpb25BZGRyZXNzfSAke01JRE5JR0hUX1ROQ19IQVNIfWAsXG4gICAgICAgIGFkZHJlc3M6IGNsYWltLm9yaWdpbkFkZHJlc3MsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHRvUmV0dXJuID0gdGhpcy51bnByb2Nlc3NlZE1lc3NhZ2VzQ2FjaGUuc3BsaWNlKDAsIHRoaXMubnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG59XG5cbi8qKlxuICogQnVsayBzaWducyBCSVAzMjIgbWVzc2FnZXMgZm9yIHRoZSBNaWRuaWdodCBhaXJkcm9wLlxuICogQHBhcmFtIHdhbGxldCBUaGUgd2FsbGV0IHRvIHNpZ24gdGhlIG1lc3NhZ2VzIHdpdGguXG4gKiBAcGFyYW0gZGVzdGluYXRpb25BZGRyZXNzIFRoZSBBREEgYWRkcmVzcyB0aGUgcmV3YXJkcyB3aWxsIGdldCBzZW50IHRvXG4gKiBAcGFyYW0gd2FsbGV0UGFzc3BocmFzZSAoT3B0aW9uYWwpIFRoZSB3YWxsZXQgcGFzc3BocmFzZSBvZiB0aGUgd2FsbGV0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1pZG5pZ2h0TWVzc2FnZXMoXG4gIHdhbGxldDogSVdhbGxldCxcbiAgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcsXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmdcbik6IFByb21pc2U8QnVsa01lc3NhZ2VSZXNwb25zZT4ge1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBNaWRuaWdodE1lc3NhZ2VQcm92aWRlcih3YWxsZXQsIGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gIHJldHVybiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKHByb3ZpZGVyLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKFxuICBwcm92aWRlcjogSU1lc3NhZ2VQcm92aWRlcixcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgbGV0IG51bU1lc3NhZ2VzID0gMDtcbiAgbGV0IG1lc3NhZ2VzOiBNZXNzYWdlSW5mb1tdID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgY29uc3Qgc2VuZGluZ0Z1bmN0aW9uID0gd2FsbGV0LnR5cGUoKSA9PT0gJ2NvbGQnID8gd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24gOiB3YWxsZXQuc2VuZE1hbnk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24gdGhlIG1lc3NhZ2VzIHdpdGggdGhlIHdhbGxldFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRpbmdGdW5jdGlvbi5jYWxsKHdhbGxldCwge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICAvLyBSZWNpcGllbnRzIG11c3QgYmUgZW1wdHlcbiAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgLy8gdHhGb3JtYXQgbXVzdCBiZSBwc2J0XG4gICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgLy8gUGFzcyBpbiB0aGUgb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBvZmZsaW5lVmVyaWZpY2F0aW9uOiB3YWxsZXQudHlwZSgpID09PSAnY29sZCcsXG4gICAgfSk7XG4gICAgdHJhbnNhY3Rpb25zLnB1c2gocmVzdWx0KTtcbiAgICBudW1NZXNzYWdlcyArPSBtZXNzYWdlcy5sZW5ndGg7XG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG51bU1lc3NhZ2VzLCB0cmFuc2FjdGlvbnMgfTtcbn1cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsd0VBU0M7QUF2QkQsdUVBQW9FO0FBUXBFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxNQUFlLEVBQ2Ysa0JBQTBCLEVBQzFCLGdCQUF5QjtJQUV6QixxRUFBcUU7SUFDckUsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksaURBQXVCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDcEcsT0FBTyxrQ0FBa0MsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELEtBQUssVUFBVSxrQ0FBa0MsQ0FDL0MsUUFBMEIsRUFDMUIsTUFBZSxFQUNmLGdCQUF5QjtJQUV6QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSSxRQUFRLEdBQWtCLE1BQU0sUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDN0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgSU1lc3NhZ2VQcm92aWRlciwgTWVzc2FnZUluZm8gfSBmcm9tICcuL2lNZXNzYWdlUHJvdmlkZXInO1xuaW1wb3J0IHsgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgfSBmcm9tICcuL21pZG5pZ2h0TWVzc2FnZVByb3ZpZGVyJztcblxudHlwZSBCdWxrTWVzc2FnZVJlc3BvbnNlID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBudW1NZXNzYWdlczogbnVtYmVyO1xuICB0cmFuc2FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59O1xuXG4vKipcbiAqIEJ1bGsgc2lnbnMgQklQMzIyIG1lc3NhZ2VzIGZvciB0aGUgTWlkbmlnaHQgYWlyZHJvcC5cbiAqIEBwYXJhbSB3YWxsZXQgVGhlIHdhbGxldCB0byBzaWduIHRoZSBtZXNzYWdlcyB3aXRoLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uQWRkcmVzcyBUaGUgQURBIGFkZHJlc3MgdGhlIHJld2FyZHMgd2lsbCBnZXQgc2VudCB0b1xuICogQHBhcmFtIHdhbGxldFBhc3NwaHJhc2UgKE9wdGlvbmFsKSBUaGUgd2FsbGV0IHBhc3NwaHJhc2Ugb2YgdGhlIHdhbGxldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVsa1NpZ25CaXAzMjJNaWRuaWdodE1lc3NhZ2VzKFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgLy8gVVRYTyBjb2lucyBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAyMDAgbWVzc2FnZXMgcGVyIHRyYW5zYWN0aW9uXG4gIGNvbnN0IG51bU1lc3NhZ2VzUGVyVHJhbnNhY3Rpb24gPSB3YWxsZXQuYml0Z28uZW52ID09PSAncHJvZCcgPyAyMDAgOiA0O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBNaWRuaWdodE1lc3NhZ2VQcm92aWRlcih3YWxsZXQsIGRlc3RpbmF0aW9uQWRkcmVzcywgbnVtTWVzc2FnZXNQZXJUcmFuc2FjdGlvbik7XG4gIHJldHVybiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKHByb3ZpZGVyLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1lc3NhZ2VzV2l0aFByb3ZpZGVyKFxuICBwcm92aWRlcjogSU1lc3NhZ2VQcm92aWRlcixcbiAgd2FsbGV0OiBJV2FsbGV0LFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgbGV0IG51bU1lc3NhZ2VzID0gMDtcbiAgbGV0IG1lc3NhZ2VzOiBNZXNzYWdlSW5mb1tdID0gYXdhaXQgcHJvdmlkZXIuZ2V0TWVzc2FnZXNBbmRBZGRyZXNzZXNUb1NpZ24oKTtcbiAgY29uc3Qgc2VuZGluZ0Z1bmN0aW9uID0gd2FsbGV0LnR5cGUoKSA9PT0gJ2NvbGQnID8gd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24gOiB3YWxsZXQuc2VuZE1hbnk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICB3aGlsZSAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIFNpZ24gdGhlIG1lc3NhZ2VzIHdpdGggdGhlIHdhbGxldFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRpbmdGdW5jdGlvbi5jYWxsKHdhbGxldCwge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICAvLyBSZWNpcGllbnRzIG11c3QgYmUgZW1wdHlcbiAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgLy8gdHhGb3JtYXQgbXVzdCBiZSBwc2J0XG4gICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgLy8gUGFzcyBpbiB0aGUgb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBvZmZsaW5lVmVyaWZpY2F0aW9uOiB3YWxsZXQudHlwZSgpID09PSAnY29sZCcsXG4gICAgfSk7XG4gICAgdHJhbnNhY3Rpb25zLnB1c2gocmVzdWx0KTtcbiAgICBudW1NZXNzYWdlcyArPSBtZXNzYWdlcy5sZW5ndGg7XG4gICAgbWVzc2FnZXMgPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICB9XG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG51bU1lc3NhZ2VzLCB0cmFuc2FjdGlvbnMgfTtcbn1cbiJdfQ==