@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.
@@ -1,5 +1,6 @@
1
1
  import * as bitcoinUtil from './bitcoin';
2
2
  import * as tss from './tss';
3
+ export * as walletUtil from './walletUtil';
3
4
  export * from './baseCoin';
4
5
  export * from './bip32util';
5
6
  export * from './bitcoin';
@@ -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"}
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXlDO0FBNkJoQyxrQ0FBVztBQTVCcEIsMkNBQTZCO0FBNkJwQixrQkFBRztBQTNCWiw2Q0FBMkI7QUFDM0IsOENBQTRCO0FBQzVCLDRDQUEwQjtBQUMxQiw4Q0FBNEI7QUFDNUIsMkNBQXlCO0FBQ3pCLGdEQUE4QjtBQUM5Qix5Q0FBdUI7QUFDdkIsK0NBQTZCO0FBQzdCLGlEQUErQjtBQUMvQiwyQ0FBeUI7QUFDekIsdURBQXFDO0FBQ3JDLDZDQUEyQjtBQUMzQiw2Q0FBMkI7QUFDM0IsMkRBQTJDO0FBQzNDLDJDQUF5QjtBQUN6QixvREFBa0M7QUFDbEMsbUNBQXdDO0FBQS9CLHNHQUFBLFlBQVksT0FBQTtBQUNyQiw2Q0FBMkI7QUFDM0IsNENBQTBCO0FBQzFCLDRDQUEwQjtBQUMxQix3Q0FBc0I7QUFDdEIsNkJBQTJDO0FBQWxDLHlHQUFBLGtCQUFrQixPQUFBO0FBQzNCLDBDQUF3QjtBQUN4QiwwQ0FBd0I7QUFDeEIsMkNBQXlCO0FBQ3pCLDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJpdGNvaW5VdGlsIGZyb20gJy4vYml0Y29pbic7XG5pbXBvcnQgKiBhcyB0c3MgZnJvbSAnLi90c3MnO1xuXG5leHBvcnQgKiBmcm9tICcuL2Jhc2VDb2luJztcbmV4cG9ydCAqIGZyb20gJy4vYmlwMzJ1dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYml0Y29pbic7XG5leHBvcnQgKiBmcm9tICcuL2JpdGdvQmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvaW5GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vZWNkaCc7XG5leHBvcnQgKiBmcm9tICcuL2VudGVycHJpc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnNjcmlwdGlvbkJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbCc7XG5leHBvcnQgKiBmcm9tICcuL2tleWNoYWluJztcbmV4cG9ydCAqIGFzIGJpdGNvaW4gZnJvbSAnLi9sZWdhY3lCaXRjb2luJztcbmV4cG9ydCAqIGZyb20gJy4vbWFya2V0JztcbmV4cG9ydCAqIGZyb20gJy4vcGVuZGluZ0FwcHJvdmFsJztcbmV4cG9ydCB7IFdhbGxldFByb29mcyB9IGZyb20gJy4vcHJvb2ZzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVjb3ZlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFraW5nJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhZGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3Rzcyc7XG5leHBvcnQgeyBzZW5kU2lnbmF0dXJlU2hhcmUgfSBmcm9tICcuL3Rzcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi93YWxsZXQnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWJob29rJztcbmV4cG9ydCB7IGJpdGNvaW5VdGlsIH07XG5leHBvcnQgeyB0c3MgfTtcbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXlDO0FBOEJoQyxrQ0FBVztBQTdCcEIsMkNBQTZCO0FBOEJwQixrQkFBRztBQTVCWiwyREFBMkM7QUFDM0MsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qiw0Q0FBMEI7QUFDMUIsOENBQTRCO0FBQzVCLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIseUNBQXVCO0FBQ3ZCLCtDQUE2QjtBQUM3QixpREFBK0I7QUFDL0IsMkNBQXlCO0FBQ3pCLHVEQUFxQztBQUNyQyw2Q0FBMkI7QUFDM0IsNkNBQTJCO0FBQzNCLDJEQUEyQztBQUMzQywyQ0FBeUI7QUFDekIsb0RBQWtDO0FBQ2xDLG1DQUF3QztBQUEvQixzR0FBQSxZQUFZLE9BQUE7QUFDckIsNkNBQTJCO0FBQzNCLDRDQUEwQjtBQUMxQiw0Q0FBMEI7QUFDMUIsd0NBQXNCO0FBQ3RCLDZCQUEyQztBQUFsQyx5R0FBQSxrQkFBa0IsT0FBQTtBQUMzQiwwQ0FBd0I7QUFDeEIsMENBQXdCO0FBQ3hCLDJDQUF5QjtBQUN6Qiw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXRjb2luVXRpbCBmcm9tICcuL2JpdGNvaW4nO1xuaW1wb3J0ICogYXMgdHNzIGZyb20gJy4vdHNzJztcblxuZXhwb3J0ICogYXMgd2FsbGV0VXRpbCBmcm9tICcuL3dhbGxldFV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlQ29pbic7XG5leHBvcnQgKiBmcm9tICcuL2JpcDMydXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2JpdGNvaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnb0Jhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2luRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2VjZGgnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnRlcnByaXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZW52aXJvbm1lbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3JzJztcbmV4cG9ydCAqIGZyb20gJy4vaW5zY3JpcHRpb25CdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXljaGFpbic7XG5leHBvcnQgKiBhcyBiaXRjb2luIGZyb20gJy4vbGVnYWN5Qml0Y29pbic7XG5leHBvcnQgKiBmcm9tICcuL21hcmtldCc7XG5leHBvcnQgKiBmcm9tICcuL3BlbmRpbmdBcHByb3ZhbCc7XG5leHBvcnQgeyBXYWxsZXRQcm9vZnMgfSBmcm9tICcuL3Byb29mcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlY292ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3RyYWRpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi90c3MnO1xuZXhwb3J0IHsgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi90c3MnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vd2FsbGV0JztcbmV4cG9ydCAqIGZyb20gJy4vd2ViaG9vayc7XG5leHBvcnQgeyBiaXRjb2luVXRpbCB9O1xuZXhwb3J0IHsgdHNzIH07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './utxoMessageProof';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b01lc3NhZ2VQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXRVdGlsL3V0eG9NZXNzYWdlUHJvb2YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEZBLHdFQU9DO0FBbkdELDhEQUFnRDtBQUdoRCxrREFBK0M7QUFFL0MsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUE0QnBDOzs7O0dBSUc7QUFDSCxNQUFhLHVCQUF1QjtJQU1sQyxZQUFvQixNQUFlLEVBQVUsT0FBZTtRQUF4QyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQURsRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FDdEIsMkJBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2pDLHlDQUF5QyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkI7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFB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WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCx3QkFBd0I7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTTtTQUM5QyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0L2lXYWxsZXQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzJztcblxuY29uc3QgTlVNX01FU1NBR0VTX1BFUl9UUkFOU0FDVElPTiA9IDI7XG5jb25zdCBOVU1fTUVTU0FHRVNfUEVSX1FVRVJZID0gMTAwMDtcblxudHlwZSBNZXNzYWdlSW5mbyA9IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59O1xuXG50eXBlIENsYWltID0ge1xuICBvcmlnaW5XYWxsZXRJZDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgb3JpZ2luQWRkcmVzcz86IHN0cmluZztcbiAgYWxsb2NhdGlvbkFtb3VudDogc3RyaW5nO1xufTtcblxudHlwZSBCdWxrTWVzc2FnZVJlc3BvbnNlID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBudW1NZXNzYWdlczogbnVtYmVyO1xuICB0cmFuc2FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlUHJvdmlkZXIge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWVzc2FnZXMgYW5kIGFkZHJlc3NlcyB0aGF0IHdlIHdhbnQgdG8gc2lnbi4gV2UgY2FsbCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlXG4gICAqIG1lc3NhZ2VzLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtZXNzYWdlcywgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWQuIE5vdGUgdGhhdCB3ZSBvbmx5IHJldHVybiBtZXNzYWdlcyBpbiBzZXRzIG9mIDIwMC5cbiAgICovXG4gIGdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk6IFByb21pc2U8TWVzc2FnZUluZm9bXT47XG59XG5cbi8qKlxuICogVGhlIE1pZG5pZ2h0IGRyb3Agc2VydmljZSBjYW4gcmV0dXJuIHVwIHRvIDEwMDAgbWVzc2FnZXMgcGVyIHJlcXVlc3QuIEhvd2V2ZXIsIFVUWE8gY29pbnNcbiAqIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtIG9mIDIwMCBtZXNzYWdlcyBwZXIgdHJhbnNhY3Rpb24uIFdlIG1ha2UgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHRoYXRcbiAqIGhhbmRsZXMgdGhlIHBhZ2luYXRpb24gYW5kIGJhdGNoaW5nIG9mIG1lc3NhZ2VzLCBrZWVwaW5nIGEgbG9jYWwgY2FjaGUgb2YgdGhlIHVucHJvY2Vzc2VkIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIgaW1wbGVtZW50cyBJTWVzc2FnZVByb3ZpZGVyIHtcbiAgcHJvdGVjdGVkIG1lc3NhZ2VDYWNoZTogTWVzc2FnZUluZm9bXTtcbiAgcHJvdGVjdGVkIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgcHJvdGVjdGVkIG1pZG5pZ2h0Q2xhaW1Vcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHByZXZJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcmFuT25jZSA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdhbGxldDogSVdhbGxldCwgcHJpdmF0ZSBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDYWNoZSA9IFtdO1xuICAgIHRoaXMubmV0d29yayA9IHV0eG9saWIubmV0d29ya3Nbd2FsbGV0LmNvaW4oKV07XG4gICAgdGhpcy5taWRuaWdodENsYWltVXJsID0gYCR7XG4gICAgICBFbnZpcm9ubWVudHNbd2FsbGV0LmJpdGdvLmVudl0udXJpXG4gICAgfS9hcGkvYWlyZHJvcC1jbGFpbS92MS9taWRuaWdodC9jbGFpbXMvJHt3YWxsZXQuY29pbigpfS8ke3dhbGxldC5pZCgpfWA7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpOiBQcm9taXNlPE1lc3NhZ2VJbmZvW10+IHtcbiAgICBpZiAodGhpcy5tZXNzYWdlQ2FjaGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUNhY2hlLnNwbGljZSgwLCBOVU1fTUVTU0FHRVNfUEVSX1RSQU5TQUNUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWVzc2FnZUNhY2hlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnJhbk9uY2UgJiYgdGhpcy5wcmV2SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRoaXMucmFuT25jZSA9IHRydWU7XG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgc3RhdHVzOiAnVU5JTklUSUFMSVpFRCcsXG4gICAgICBsaW1pdDogTlVNX01FU1NBR0VTX1BFUl9RVUVSWSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5wcmV2SWQgPSB0aGlzLnByZXZJZDtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5nZXQodGhpcy5taWRuaWdodENsYWltVXJsKS5xdWVyeShxdWVyeSkucmVzdWx0KCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJHt0aGlzLm1pZG5pZ2h0Q2xhaW1Vcmx9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZT8ucGFnaW5hdGlvbj8uaGFzTmV4dCkge1xuICAgICAgdGhpcy5wcmV2SWQgPSByZXNwb25zZT8ucGFnaW5hdGlvbj8ubmV4dFByZXZJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5tZXNzYWdlQ2FjaGUgPSByZXNwb25zZS5jbGFpbXMubWFwKChjbGFpbTogQ2xhaW0pID0+IHtcbiAgICAgIGlmICghY2xhaW0ub3JpZ2luQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYWltICR7SlNPTi5zdHJpbmdpZnkoY2xhaW0pfSBpcyBtaXNzaW5nIG9yaWdpbkFkZHJlc3NgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgYWRkcmVzczogY2xhaW0ub3JpZ2luQWRkcmVzcyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLm1lc3NhZ2VDYWNoZS5zcGxpY2UoMCwgTlVNX01FU1NBR0VTX1BFUl9UUkFOU0FDVElPTik7XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWxrU2lnbkJpcDMyMk1pZG5pZ2h0TWVzc2FnZXMoXG4gIHdhbGxldDogSVdhbGxldCxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nXG4pOiBQcm9taXNlPEJ1bGtNZXNzYWdlUmVzcG9uc2U+IHtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgTWlkbmlnaHRNZXNzYWdlUHJvdmlkZXIod2FsbGV0LCBtZXNzYWdlKTtcbiAgcmV0dXJuIGJ1bGtTaWduQmlwMzIyTWVzc2FnZXNXaXRoUHJvdmlkZXIocHJvdmlkZXIsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1bGtTaWduQmlwMzIyTWVzc2FnZXNXaXRoUHJvdmlkZXIoXG4gIHByb3ZpZGVyOiBJTWVzc2FnZVByb3ZpZGVyLFxuICB3YWxsZXQ6IElXYWxsZXQsXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmdcbik6IFByb21pc2U8QnVsa01lc3NhZ2VSZXNwb25zZT4ge1xuICBsZXQgbnVtTWVzc2FnZXMgPSAwO1xuICBsZXQgbWVzc2FnZXM6IE1lc3NhZ2VJbmZvW10gPSBhd2FpdCBwcm92aWRlci5nZXRNZXNzYWdlc0FuZEFkZHJlc3Nlc1RvU2lnbigpO1xuICBjb25zdCBzZW5kaW5nRnVuY3Rpb24gPSB3YWxsZXQudHlwZSgpID09PSAnY29sZCcgPyB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbiA6IHdhbGxldC5zZW5kTWFueTtcbiAgY29uc3QgdHJhbnNhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gIHdoaWxlIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gU2lnbiB0aGUgbWVzc2FnZXMgd2l0aCB0aGUgd2FsbGV0XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZGluZ0Z1bmN0aW9uLmNhbGwod2FsbGV0LCB7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIC8vIFJlY2lwaWVudHMgbXVzdCBiZSBlbXB0eVxuICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAvLyB0eEZvcm1hdCBtdXN0IGJlIHBzYnRcbiAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICAvLyBQYXNzIGluIHRoZSBvcHRpb25hbCB3YWxsZXQgcGFzc3BocmFzZVxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIG9mZmxpbmVWZXJpZmljYXRpb246IHdhbGxldC50eXBlKCkgPT09ICdjb2xkJyxcbiAgICB9KTtcbiAgICB0cmFuc2FjdGlvbnMucHVzaChyZXN1bHQpO1xuICAgIG51bU1lc3NhZ2VzICs9IG1lc3NhZ2VzLmxlbmd0aDtcbiAgICBtZXNzYWdlcyA9IGF3YWl0IHByb3ZpZGVyLmdldE1lc3NhZ2VzQW5kQWRkcmVzc2VzVG9TaWduKCk7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbnVtTWVzc2FnZXMsIHRyYW5zYWN0aW9ucyB9O1xufVxuIl19