@bitgo-beta/sdk-core 8.2.1-beta.1135 → 8.2.1-beta.1136
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bitgo/index.d.ts +1 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +3 -2
- package/dist/src/bitgo/walletUtil/index.d.ts +2 -0
- package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/index.js +18 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +37 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.js +122 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bitgo/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC3C,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bitgo/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC3C,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
package/dist/src/bitgo/index.js
CHANGED
|
@@ -36,11 +36,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.tss = exports.bitcoinUtil = exports.sendSignatureShare = exports.WalletProofs = exports.bitcoin = void 0;
|
|
39
|
+
exports.tss = exports.bitcoinUtil = exports.sendSignatureShare = exports.WalletProofs = exports.bitcoin = exports.walletUtil = void 0;
|
|
40
40
|
const bitcoinUtil = __importStar(require("./bitcoin"));
|
|
41
41
|
exports.bitcoinUtil = bitcoinUtil;
|
|
42
42
|
const tss = __importStar(require("./tss"));
|
|
43
43
|
exports.tss = tss;
|
|
44
|
+
exports.walletUtil = __importStar(require("./walletUtil"));
|
|
44
45
|
__exportStar(require("./baseCoin"), exports);
|
|
45
46
|
__exportStar(require("./bip32util"), exports);
|
|
46
47
|
__exportStar(require("./bitcoin"), exports);
|
|
@@ -69,4 +70,4 @@ __exportStar(require("./types"), exports);
|
|
|
69
70
|
__exportStar(require("./utils"), exports);
|
|
70
71
|
__exportStar(require("./wallet"), exports);
|
|
71
72
|
__exportStar(require("./webhook"), exports);
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXlDO0FBOEJoQyxrQ0FBVztBQTdCcEIsMkNBQTZCO0FBOEJwQixrQkFBRztBQTVCWiwyREFBMkM7QUFDM0MsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qiw0Q0FBMEI7QUFDMUIsOENBQTRCO0FBQzVCLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIseUNBQXVCO0FBQ3ZCLCtDQUE2QjtBQUM3QixpREFBK0I7QUFDL0IsMkNBQXlCO0FBQ3pCLHVEQUFxQztBQUNyQyw2Q0FBMkI7QUFDM0IsNkNBQTJCO0FBQzNCLDJEQUEyQztBQUMzQywyQ0FBeUI7QUFDekIsb0RBQWtDO0FBQ2xDLG1DQUF3QztBQUEvQixzR0FBQSxZQUFZLE9BQUE7QUFDckIsNkNBQTJCO0FBQzNCLDRDQUEwQjtBQUMxQiw0Q0FBMEI7QUFDMUIsd0NBQXNCO0FBQ3RCLDZCQUEyQztBQUFsQyx5R0FBQSxrQkFBa0IsT0FBQTtBQUMzQiwwQ0FBd0I7QUFDeEIsMENBQXdCO0FBQ3hCLDJDQUF5QjtBQUN6Qiw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXRjb2luVXRpbCBmcm9tICcuL2JpdGNvaW4nO1xuaW1wb3J0ICogYXMgdHNzIGZyb20gJy4vdHNzJztcblxuZXhwb3J0ICogYXMgd2FsbGV0VXRpbCBmcm9tICcuL3dhbGxldFV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlQ29pbic7XG5leHBvcnQgKiBmcm9tICcuL2JpcDMydXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2JpdGNvaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnb0Jhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2luRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2VjZGgnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnRlcnByaXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZW52aXJvbm1lbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3JzJztcbmV4cG9ydCAqIGZyb20gJy4vaW5zY3JpcHRpb25CdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXljaGFpbic7XG5leHBvcnQgKiBhcyBiaXRjb2luIGZyb20gJy4vbGVnYWN5Qml0Y29pbic7XG5leHBvcnQgKiBmcm9tICcuL21hcmtldCc7XG5leHBvcnQgKiBmcm9tICcuL3BlbmRpbmdBcHByb3ZhbCc7XG5leHBvcnQgeyBXYWxsZXRQcm9vZnMgfSBmcm9tICcuL3Byb29mcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlY292ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3RyYWRpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi90c3MnO1xuZXhwb3J0IHsgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi90c3MnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vd2FsbGV0JztcbmV4cG9ydCAqIGZyb20gJy4vd2ViaG9vayc7XG5leHBvcnQgeyBiaXRjb2luVXRpbCB9O1xuZXhwb3J0IHsgdHNzIH07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/walletUtil/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./utxoMessageProof"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0VXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91dHhvTWVzc2FnZVByb29mJztcbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { IWallet } from '../wallet/iWallet';
|
|
3
|
+
type MessageInfo = {
|
|
4
|
+
message: string;
|
|
5
|
+
address: string;
|
|
6
|
+
};
|
|
7
|
+
type BulkMessageResponse = {
|
|
8
|
+
success: boolean;
|
|
9
|
+
numMessages: number;
|
|
10
|
+
transactions: Record<string, unknown>[];
|
|
11
|
+
};
|
|
12
|
+
export interface IMessageProvider {
|
|
13
|
+
/**
|
|
14
|
+
* Returns the messages and addresses that we want to sign. We call this function multiple times until there are no more
|
|
15
|
+
* messages. If there are no more messages, an empty array is returned. Note that we only return messages in sets of 200.
|
|
16
|
+
*/
|
|
17
|
+
getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The Midnight drop service can return up to 1000 messages per request. However, UTXO coins
|
|
21
|
+
* can only have a maximum of 200 messages per transaction. We make this wrapper function that
|
|
22
|
+
* handles the pagination and batching of messages, keeping a local cache of the unprocessed messages.
|
|
23
|
+
*/
|
|
24
|
+
export declare class MidnightMessageProvider implements IMessageProvider {
|
|
25
|
+
private wallet;
|
|
26
|
+
private message;
|
|
27
|
+
protected messageCache: MessageInfo[];
|
|
28
|
+
protected network: utxolib.Network;
|
|
29
|
+
protected midnightClaimUrl: string;
|
|
30
|
+
protected prevId: string | undefined;
|
|
31
|
+
protected ranOnce: boolean;
|
|
32
|
+
constructor(wallet: IWallet, message: string);
|
|
33
|
+
getMessagesAndAddressesToSign(): Promise<MessageInfo[]>;
|
|
34
|
+
}
|
|
35
|
+
export declare function bulkSignBip322MidnightMessages(wallet: IWallet, message: string, walletPassphrase?: string): Promise<BulkMessageResponse>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=utxoMessageProof.d.ts.map
|
|
@@ -0,0 +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;AAM5C,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;IAMlD,OAAO,CAAC,MAAM;IAAW,OAAO,CAAC,OAAO;IALpD,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACtC,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;gBACN,MAAM,EAAE,OAAO,EAAU,OAAO,EAAE,MAAM;IAQtD,6BAA6B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAqC9D;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAG9B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 = void 0;
|
|
37
|
+
exports.bulkSignBip322MidnightMessages = bulkSignBip322MidnightMessages;
|
|
38
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
39
|
+
const environments_1 = require("../environments");
|
|
40
|
+
const NUM_MESSAGES_PER_TRANSACTION = 2;
|
|
41
|
+
const NUM_MESSAGES_PER_QUERY = 1000;
|
|
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, message) {
|
|
49
|
+
this.wallet = wallet;
|
|
50
|
+
this.message = message;
|
|
51
|
+
this.ranOnce = false;
|
|
52
|
+
this.messageCache = [];
|
|
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.messageCache.length > 0) {
|
|
58
|
+
return this.messageCache.splice(0, NUM_MESSAGES_PER_TRANSACTION);
|
|
59
|
+
}
|
|
60
|
+
else if (this.messageCache.length === 0 && this.ranOnce && this.prevId === undefined) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
this.ranOnce = true;
|
|
64
|
+
const query = {
|
|
65
|
+
status: 'UNINITIALIZED',
|
|
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.messageCache = response.claims.map((claim) => {
|
|
82
|
+
if (!claim.originAddress) {
|
|
83
|
+
throw new Error(`Claim ${JSON.stringify(claim)} is missing originAddress`);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
message: this.message,
|
|
87
|
+
address: claim.originAddress,
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
const toReturn = this.messageCache.splice(0, NUM_MESSAGES_PER_TRANSACTION);
|
|
91
|
+
return toReturn;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.MidnightMessageProvider = MidnightMessageProvider;
|
|
95
|
+
async function bulkSignBip322MidnightMessages(wallet, message, walletPassphrase) {
|
|
96
|
+
const provider = new MidnightMessageProvider(wallet, message);
|
|
97
|
+
return bulkSignBip322MessagesWithProvider(provider, wallet, walletPassphrase);
|
|
98
|
+
}
|
|
99
|
+
async function bulkSignBip322MessagesWithProvider(provider, wallet, walletPassphrase) {
|
|
100
|
+
let numMessages = 0;
|
|
101
|
+
let messages = await provider.getMessagesAndAddressesToSign();
|
|
102
|
+
const sendingFunction = wallet.type() === 'cold' ? wallet.prebuildTransaction : wallet.sendMany;
|
|
103
|
+
const transactions = [];
|
|
104
|
+
while (messages.length > 0) {
|
|
105
|
+
// Sign the messages with the wallet
|
|
106
|
+
const result = await sendingFunction.call(wallet, {
|
|
107
|
+
messages,
|
|
108
|
+
// Recipients must be empty
|
|
109
|
+
recipients: [],
|
|
110
|
+
// txFormat must be psbt
|
|
111
|
+
txFormat: 'psbt',
|
|
112
|
+
// Pass in the optional wallet passphrase
|
|
113
|
+
walletPassphrase,
|
|
114
|
+
offlineVerification: wallet.type() === 'cold',
|
|
115
|
+
});
|
|
116
|
+
transactions.push(result);
|
|
117
|
+
numMessages += messages.length;
|
|
118
|
+
messages = await provider.getMessagesAndAddressesToSign();
|
|
119
|
+
}
|
|
120
|
+
return { success: true, numMessages, transactions };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEZBLHdFQU9DO0FBbkdELDhEQUFnRDtBQUdoRCxrREFBK0M7QUFFL0MsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUE0QnBDOzs7O0dBSUc7QUFDSCxNQUFhLHVCQUF1QjtJQU1sQyxZQUFvQixNQUFlLEVBQVUsT0FBZTtRQUF4QyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQURsRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FDdEIsMkJBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2pDLHlDQUF5QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkI7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkYsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQTRCO1lBQ3JDLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLEtBQUssRUFBRSxzQkFBc0I7U0FDOUIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsUUFBUSxDQUFDLE1BQU0sU0FBUyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFDRCxJQUFJLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUNqRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUNELE9BQU87Z0JBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBbkRELDBEQW1EQztBQUVNLEtBQUssVUFBVSw4QkFBOEIsQ0FDbEQsTUFBZSxFQUNmLE9BQWUsRUFDZixnQkFBeUI7SUFFekIsTUFBTSxRQUFRLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUQsT0FBTyxrQ0FBa0MsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELEtBQUssVUFBVSxrQ0FBa0MsQ0FDL0MsUUFBMEIsRUFDMUIsTUFBZSxFQUNmLGdCQUF5QjtJQUV6QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSSxRQUFRLEdBQWtCLE1BQU0sUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDN0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hHLE1BQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hELFFBQVE7WUFDUiwyQkFBMkI7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0L2lXYWxsZXQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzJztcblxuY29uc3QgTlVNX01FU1NBR0VTX1BFUl9UUkFOU0FDVElPTiA9IDI7XG5jb25zdCBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZID0gMTAwMDtcblxudHlwZSBNZXNzYWdlSW5mbyA9IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59O1xuXG50eXBlIENsYWltID0ge1xuICBvcmlnaW5XYWxsZXRJZDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgb3JpZ2luQWRkcmVzcz86IHN0cmluZztcbiAgYWxsb2NhdGlvbkFtb3VudDogc3RyaW5nO1xufTtcblxudHlwZSBCdWxrTWVzc2FnZVJlc3BvbnNlID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBudW1NZXNzYWdlczogbnVtYmVyO1xuICB0cmFuc2FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlUHJvdmlkZXIge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWVzc2FnZXMgYW5kIGFkZHJlc3NlcyB0aGF0IHdlIHdhbnQgdG8gc2lnbi4gV2UgY2FsbCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlXG4gICAqIG1lc3NhZ2VzLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtZXNzYWdlcywgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWQuIE5vdGUgdGhhdCB3ZSBvbmx5IHJldHVybiBtZXNzYWdlcyBpbiBzZXRzIG9mIDIwMC5cbiAgICovXG4gIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT47XG59XG5cbi8qKlxuICogVGhlIE1pZG5pZ2h0IGRyb3Agc2VydmljZSBjYW4gcmV0dXJuIHVwIHRvIDEwMDAgbWVzc2FnZXMgcGVyIHJlcXVlc3QuIEhvd2V2ZXIsIFVUWE8gY29pbnNcbiAqIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtIG9mIDIwMCBtZXNzYWdlcyBwZXIgdHJhbnNhY3Rpb24uIFdlIG1ha2UgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHRoYXRcbiAqIGhhbmRsZXMgdGhlIHBhZ2luYXRpb24gYW5kIGJhdGNoaW5nIG9mIG1lc3NhZ2VzLCBrZWVwaW5nIGEgbG9jYWwgY2FjaGUgb2YgdGhlIHVucHJvY2Vzc2VkIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgaW1wbGVtZW50cyBJTWVzc2FnZVByb3ZpZGVyIHtcbiAgcHJvdGVjdGVkIG1lc3NhZ2VDYWNoZTogTWVzc2FnZUluZm9bXTtcbiAgcHJvdGVjdGVkIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgcHJvdGVjdGVkIG1pZG5pZ2h0Q2xhaW1Vcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHByZXZJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcmFuT25jZSA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdhbGxldDogSVdhbGxldCwgcHJpdmF0ZSBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDYWNoZSA9IFtdO1xuICAgIHRoaXMubmV0d29yayA9IHV0eG9saWIubmV0d29ya3Nbd2FsbGV0LmNvaW4oKV07XG4gICAgdGhpcy5taWRuaWdodENsYWltVXJsID0gYCR7XG4gICAgICBFbnZpcm9ubWVudHNbd2FsbGV0LmJpdGdvLmVudl0udXJpXG4gICAgfS9hcGkvYWlyZHJvcC1jbGFpbS92MS9taWRuaWdodC9jbGFpbXMvJHt3YWxsZXQuY29pbigpfS8ke3dhbGxldC5pZCgpfWA7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpOiBQcm9taXNlPE1lc3NhZ2VJbmZvW10+IHtcbiAgICBpZiAodGhpcy5tZXNzYWdlQ2FjaGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUNhY2hlLnNwbGljZSgwLCBOVU1fTUVTU0FHRVNfUEVSX1RSQU5TQUNUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWVzc2FnZUNhY2hlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnJhbk9uY2UgJiYgdGhpcy5wcmV2SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRoaXMucmFuT25jZSA9IHRydWU7XG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgc3RhdHVzOiAnVU5JTklUSUFMSVpFRCcsXG4gICAgICBsaW1pdDogTlVNX01FU1NBR0VTX1BFUl9RVUVSWSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5wcmV2SWQgPSB0aGlzLnByZXZJZDtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5nZXQodGhpcy5taWRuaWdodENsYWltVXJsKS5xdWVyeShxdWVyeSkucmVzdWx0KCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJHt0aGlzLm1pZG5pZ2h0Q2xhaW1Vcmx9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZT8ucGFnaW5hdGlvbj8uaGFzTmV4dCkge1xuICAgICAgdGhpcy5wcmV2SWQgPSByZXNwb25zZT8ucGFnaW5hdGlvbj8ubmV4dFByZXZJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5tZXNzYWdlQ2FjaGUgPSByZXNwb25zZS5jbGFpbXMubWFwKChjbGFpbTogQ2xhaW0pID0+IHtcbiAgICAgIGlmICghY2xhaW0ub3JpZ2luQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYWltICR7SlNPTi5zdHJpbmdpZnkoY2xhaW0pfSBpcyBtaXNzaW5nIG9yaWdpbkFkZHJlc3NgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgYWRkcmVzczogY2xhaW0ub3JpZ2luQWRkcmVzcyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLm1lc3NhZ2VDYWNoZS5zcGxpY2UoMCwgTlVNX01FU1NBR0VTX1BFUl9UUkFOU0FDVElPTik7XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1pZG5pZ2h0TWVzc2FnZXMoXG4gIHdhbGxldDogSVdhbGxldCxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIod2FsbGV0LCBtZXNzYWdlKTtcbiAgcmV0dXJuIGJ1bGtTaWduQmlwMzIyTWVzc2FnZXNXaXRoUHJvdmlkZXIocHJvdmlkZXIsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1bGtTaWduQmlwMzIyTWVzc2FnZXNXaXRoUHJvdmlkZXIoXG4gIHByb3ZpZGVyOiBJTWVzc2FnZVByb3ZpZGVyLFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmdcbik6IFByb21pc2U8QnVsa01lc3NhZ2VSZXNwb25zZT4ge1xuICBsZXQgbnVtTWVzc2FnZXMgPSAwO1xuICBsZXQgbWVzc2FnZXM6IE1lc3NhZ2VJbmZvW10gPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICBjb25zdCBzZW5kaW5nRnVuY3Rpb24gPSB3YWxsZXQudHlwZSgpID09PSAnY29sZCcgPyB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbiA6IHdhbGxldC5zZW5kTWFueTtcbiAgY29uc3QgdHJhbnNhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gIHdoaWxlIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gU2lnbiB0aGUgbWVzc2FnZXMgd2l0aCB0aGUgd2FsbGV0XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZGluZ0Z1bmN0aW9uLmNhbGwod2FsbGV0LCB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIC8vIFJlY2lwaWVudHMgbXVzdCBiZSBlbXB0eVxuICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAvLyB0eEZvcm1hdCBtdXN0IGJlIHBzYnRcbiAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICAvLyBQYXNzIGluIHRoZSBvcHRpb25hbCB3YWxsZXQgcGFzc3BocmFzZVxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIG9mZmxpbmVWZXJpZmljYXRpb246IHdhbGxldC50eXBlKCkgPT09ICdjb2xkJyxcbiAgICB9KTtcbiAgICB0cmFuc2FjdGlvbnMucHVzaChyZXN1bHQpO1xuICAgIG51bU1lc3NhZ2VzICs9IG1lc3NhZ2VzLmxlbmd0aDtcbiAgICBtZXNzYWdlcyA9IGF3YWl0IHByb3ZpZGVyLmdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbnVtTWVzc2FnZXMsIHRyYW5zYWN0aW9ucyB9O1xufVxuIl19
|