@bitgo/sdk-core 36.26.0 → 36.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +13 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/bip32util.d.ts +1 -1
- package/dist/src/bitgo/bip32util.js +4 -4
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +11 -5
- package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +6 -3
- package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -1
- package/dist/src/bitgo/staking/goStakingInterfaces.js +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +2 -2
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/addressVerification.js +9 -3
- package/dist/src/bitgo/wallet/iWallet.d.ts +12 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts +31 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +211 -80
- package/dist/src/coins/ofcToken.d.ts +2 -1
- package/dist/src/coins/ofcToken.d.ts.map +1 -1
- package/dist/src/coins/ofcToken.js +27 -1
- package/dist/src/lightning.d.ts +3 -0
- package/dist/src/lightning.d.ts.map +1 -0
- package/dist/src/lightning.js +15 -0
- package/dist/test/unit/bitgo/environment.d.ts +2 -0
- package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
- package/dist/test/unit/bitgo/environment.js +22 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.js +85 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +276 -0
- package/dist/test/unit/lightning.d.ts +2 -0
- package/dist/test/unit/lightning.d.ts.map +1 -0
- package/dist/test/unit/lightning.js +23 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -7
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @prettier
|
|
3
3
|
*/
|
|
4
4
|
import { OfcTokenConfig } from '@bitgo/statics';
|
|
5
|
-
import { BitGoBase, CoinConstructor, SignTransactionOptions as BaseSignTransactionOptions, SignedTransaction } from '../';
|
|
5
|
+
import { BitGoBase, CoinConstructor, SignTransactionOptions as BaseSignTransactionOptions, SignedTransaction, ITransactionRecipient } from '../';
|
|
6
6
|
import { Ofc } from './ofc';
|
|
7
7
|
export interface SignTransactionOptions extends BaseSignTransactionOptions {
|
|
8
8
|
txPrebuild: {
|
|
@@ -23,6 +23,7 @@ export declare class OfcToken extends Ofc {
|
|
|
23
23
|
getFullName(): string;
|
|
24
24
|
getBaseFactor(): string;
|
|
25
25
|
get type(): string;
|
|
26
|
+
checkRecipient(recipient: ITransactionRecipient): void;
|
|
26
27
|
/**
|
|
27
28
|
* Flag for sending value of 0
|
|
28
29
|
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ofcToken.d.ts","sourceRoot":"","sources":["../../../src/coins/ofcToken.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACL,SAAS,EACT,eAAe,EACf,sBAAsB,IAAI,0BAA0B,EACpD,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ofcToken.d.ts","sourceRoot":"","sources":["../../../src/coins/ofcToken.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACL,SAAS,EACT,eAAe,EACf,sBAAsB,IAAI,0BAA0B,EACpD,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,KAAK,CAAC;AAGb,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;CACb;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,qBAAa,QAAS,SAAQ,GAAG;IAC/B,SAAgB,WAAW,EAAE,cAAc,CAAC;gBAEhC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc;IAKzD,IAAI,IAAI,WAEP;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,IAAI,WAEP;IAED,IAAI,WAAW,WAEd;IAED,IAAI,MAAM,YAET;IAED,QAAQ;IAIR,WAAW;IAIX,aAAa;IAIb,IAAW,IAAI,WAEd;IAED,cAAc,CAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI;IA+BtD;;;OAGG;IACH,wBAAwB;IAIxB,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;IAItE;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQjF;;;;;;OAMG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;CAa1C"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OfcToken = void 0;
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
|
+
const lightning_1 = require("../lightning");
|
|
5
6
|
const ofc_1 = require("./ofc");
|
|
6
7
|
const publicIdRegex = /^[a-f\d]{32}$/i;
|
|
7
8
|
class OfcToken extends ofc_1.Ofc {
|
|
@@ -36,6 +37,31 @@ class OfcToken extends ofc_1.Ofc {
|
|
|
36
37
|
get type() {
|
|
37
38
|
return this.tokenConfig.type;
|
|
38
39
|
}
|
|
40
|
+
checkRecipient(recipient) {
|
|
41
|
+
if ((0, lightning_1.isBolt11Invoice)(recipient.address)) {
|
|
42
|
+
// should throw error if this isnt bitcoin (mainnet or testnet)
|
|
43
|
+
if (this.backingCoin !== 'btc' && this.backingCoin !== 'tbtc') {
|
|
44
|
+
throw new Error(`invalid argument - lightning invoice is only supported for bitcoin`);
|
|
45
|
+
}
|
|
46
|
+
// amount for bolt11 invoices is either 'invoice' or a non-zero bigint
|
|
47
|
+
if (recipient.amount === lightning_1.LIGHTNING_INVOICE) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// try to parse the amount as a bigint
|
|
51
|
+
let amount;
|
|
52
|
+
try {
|
|
53
|
+
amount = BigInt(recipient.amount);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
throw new Error(`invalid argument ${recipient.amount} for amount - lightning invoice amount must be >= 0 or ${lightning_1.LIGHTNING_INVOICE}`);
|
|
57
|
+
}
|
|
58
|
+
if (amount > 0n) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`invalid argument for amount - lightning invoice amount must be a non-zero bigint or ${lightning_1.LIGHTNING_INVOICE}`);
|
|
62
|
+
}
|
|
63
|
+
super.checkRecipient(recipient);
|
|
64
|
+
}
|
|
39
65
|
/**
|
|
40
66
|
* Flag for sending value of 0
|
|
41
67
|
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
@@ -81,4 +107,4 @@ class OfcToken extends ofc_1.Ofc {
|
|
|
81
107
|
}
|
|
82
108
|
}
|
|
83
109
|
exports.OfcToken = OfcToken;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29pbnMvb2ZjVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsbUNBQWtDO0FBUWxDLDRDQUFrRTtBQUVsRSwrQkFBNEI7QUFXNUIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7QUFFdkMsTUFBYSxRQUFTLFNBQVEsU0FBRztJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBMkI7UUFDdkQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFD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biAqL1xuaW1wb3J0IHsgT2ZjVG9rZW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIENvaW5Db25zdHJ1Y3RvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIElUcmFuc2FjdGlvblJlY2lwaWVudCxcbn0gZnJvbSAnLi4vJztcbmltcG9ydCB7IGlzQm9sdDExSW52b2ljZSwgTElHSFROSU5HX0lOVk9JQ0UgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuXG5pbXBvcnQgeyBPZmMgfSBmcm9tICcuL29mYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDoge1xuICAgIHBheWxvYWQ6IHN0cmluZztcbiAgfTtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB7IE9mY1Rva2VuQ29uZmlnIH07XG5cbmNvbnN0IHB1YmxpY0lkUmVnZXggPSAvXlthLWZcXGRdezMyfSQvaTtcblxuZXhwb3J0IGNsYXNzIE9mY1Rva2VuIGV4dGVuZHMgT2ZjIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBPZmNUb2tlbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogT2ZjVG9rZW5Db25maWcpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy50b2tlbkNvbmZpZyA9IHRva2VuQ29uZmlnO1xuICB9XG5cbiAgZ2V0IGNvaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuY29pbjtcbiAgfVxuXG4gIGdldCBkZWNpbWFsUGxhY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXM7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5uYW1lO1xuICB9XG5cbiAgZ2V0IGJhY2tpbmdDb2luKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmJhY2tpbmdDb2luO1xuICB9XG5cbiAgZ2V0IGlzRmlhdCgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5pc0ZpYXQ7XG4gIH1cblxuICBnZXRDaGFpbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKSB7XG4gICAgcmV0dXJuIFN0cmluZyhNYXRoLnBvdygxMCwgdGhpcy5kZWNpbWFsUGxhY2VzKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcudHlwZTtcbiAgfVxuXG4gIGNoZWNrUmVjaXBpZW50KHJlY2lwaWVudDogSVRyYW5zYWN0aW9uUmVjaXBpZW50KTogdm9pZCB7XG4gICAgaWYgKGlzQm9sdDExSW52b2ljZShyZWNpcGllbnQuYWRkcmVzcykpIHtcbiAgICAgIC8vIHNob3VsZCB0aHJvdyBlcnJvciBpZiB0aGlzIGlzbnQgYml0Y29pbiAobWFpbm5ldCBvciB0ZXN0bmV0KVxuICAgICAgaWYgKHRoaXMuYmFja2luZ0NvaW4gIT09ICdidGMnICYmIHRoaXMuYmFja2luZ0NvaW4gIT09ICd0YnRjJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYXJndW1lbnQgLSBsaWdodG5pbmcgaW52b2ljZSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYml0Y29pbmApO1xuICAgICAgfVxuXG4gICAgICAvLyBhbW91bnQgZm9yIGJvbHQxMSBpbnZvaWNlcyBpcyBlaXRoZXIgJ2ludm9pY2UnIG9yIGEgbm9uLXplcm8gYmlnaW50XG4gICAgICBpZiAocmVjaXBpZW50LmFtb3VudCA9PT0gTElHSFROSU5HX0lOVk9JQ0UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdHJ5IHRvIHBhcnNlIHRoZSBhbW91bnQgYXMgYSBiaWdpbnRcbiAgICAgIGxldCBhbW91bnQ6IGJpZ2ludDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFtb3VudCA9IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBpbnZhbGlkIGFyZ3VtZW50ICR7cmVjaXBpZW50LmFtb3VudH0gZm9yIGFtb3VudCAtIGxpZ2h0bmluZyBpbnZvaWNlIGFtb3VudCBtdXN0IGJlID49IDAgb3IgJHtMSUdIVE5JTkdfSU5WT0lDRX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoYW1vdW50ID4gMG4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gbGlnaHRuaW5nIGludm9pY2UgYW1vdW50IG11c3QgYmUgYSBub24temVybyBiaWdpbnQgb3IgJHtMSUdIVE5JTkdfSU5WT0lDRX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHN1cGVyLmNoZWNrUmVjaXBpZW50KHJlY2lwaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IE9mY1Rva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gKGJpdGdvOiBCaXRHb0Jhc2UpID0+IG5ldyBPZmNUb2tlbihiaXRnbywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eFByZWJ1aWxkID0gcGFyYW1zLnR4UHJlYnVpbGQ7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4UHJlYnVpbGQucGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmVCdWZmZXIgPSAoYXdhaXQgdGhpcy5zaWduTWVzc2FnZShwYXJhbXMsIHBheWxvYWQpKSBhcyBhbnk7XG4gICAgY29uc3Qgc2lnbmF0dXJlOiBzdHJpbmcgPSBzaWduYXR1cmVCdWZmZXIudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgcGF5bG9hZCwgc2lnbmF0dXJlIH0gfSBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyB2YWxpZCBmb3IgdGhpcyBvZmMgdG9rZW4uXG4gICAqXG4gICAqIFRoZXNlIGFkZHJlc3NlcyBhcmUgZWl0aGVyIGJnLTxwdWJsaWNpZD4sIHdoZXJlIHB1YmxpYyBpZCBpcyB0aGUgaW50ZXJuYWwgYWRkcmVzcyB0byBzZW5kIHRvLFxuICAgKiBvciBhcmUgYW4gYWRkcmVzcyB3aGljaCBpcyB2YWxpZCBvbiB0aGUgYmFja2luZyBjb2luIG9mIHRoaXMgb2ZjIHRva2VuLlxuICAgKiBAcGFyYW0gYWRkcmVzcyBhZGRyZXNzIHRvIGNoZWNrIGZvciB2YWxpZGl0eVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzcz86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNTdHJpbmcoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgnYmctJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gYWRkcmVzcy5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gcGFydHNbMV07XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyICYmIHB1YmxpY0lkUmVnZXgudGVzdChhY2NvdW50SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYWNraW5nQ29pbiA9IHRoaXMuYml0Z28uY29pbih0aGlzLmJhY2tpbmdDb2luKTtcbiAgICAgIHJldHVybiBiYWNraW5nQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../src/lightning.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAQ/D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LIGHTNING_INVOICE = void 0;
|
|
4
|
+
exports.isBolt11Invoice = isBolt11Invoice;
|
|
5
|
+
exports.LIGHTNING_INVOICE = 'invoice';
|
|
6
|
+
function isBolt11Invoice(value) {
|
|
7
|
+
if (typeof value !== 'string') {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
if (value.startsWith('lnbc') || value.startsWith('lntb')) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpZ2h0bmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwwQ0FRQztBQVZZLFFBQUEsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0FBRTNDLFNBQWdCLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElHSFROSU5HX0lOVk9JQ0UgPSAnaW52b2ljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JvbHQxMUludm9pY2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnbG5iYycpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoJ2xudGInKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../../test/unit/bitgo/environment.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const src_1 = require("../../../src");
|
|
8
|
+
describe('zkSync Era Environment Configuration', function () {
|
|
9
|
+
it('should have evm config for mainnet zksyncera', function () {
|
|
10
|
+
const mainnetEnv = src_1.Environments.prod;
|
|
11
|
+
should_1.default.exist(mainnetEnv.evm);
|
|
12
|
+
should_1.default.exist(mainnetEnv.evm?.zksyncera);
|
|
13
|
+
mainnetEnv.evm?.zksyncera.baseUrl.should.equal('https://api.etherscan.io/v2');
|
|
14
|
+
});
|
|
15
|
+
it('should have evm config for testnet zksyncera', function () {
|
|
16
|
+
const testnetEnv = src_1.Environments.test;
|
|
17
|
+
should_1.default.exist(testnetEnv.evm);
|
|
18
|
+
should_1.default.exist(testnetEnv.evm?.zksyncera);
|
|
19
|
+
testnetEnv.evm?.zksyncera.baseUrl.should.equal('https://api.etherscan.io/v2');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsc0NBQTRDO0FBRTVDLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRTtJQUMvQyxFQUFFLENBQUMsOENBQThDLEVBQUU7UUFDakQsTUFBTSxVQUFVLEdBQUcsa0JBQVksQ0FBQyxJQUFJLENBQUM7UUFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRTtRQUNqRCxNQUFNLFVBQVUsR0FBRyxrQkFBWSxDQUFDLElBQUksQ0FBQztRQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudHMgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnemtTeW5jIEVyYSBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGhhdmUgZXZtIGNvbmZpZyBmb3IgbWFpbm5ldCB6a3N5bmNlcmEnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWFpbm5ldEVudiA9IEVudmlyb25tZW50cy5wcm9kO1xuICAgIHNob3VsZC5leGlzdChtYWlubmV0RW52LmV2bSk7XG4gICAgc2hvdWxkLmV4aXN0KG1haW5uZXRFbnYuZXZtPy56a3N5bmNlcmEpO1xuICAgIG1haW5uZXRFbnYuZXZtPy56a3N5bmNlcmEuYmFzZVVybC5zaG91bGQuZXF1YWwoJ2h0dHBzOi8vYXBpLmV0aGVyc2Nhbi5pby92MicpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgZXZtIGNvbmZpZyBmb3IgdGVzdG5ldCB6a3N5bmNlcmEnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdGVzdG5ldEVudiA9IEVudmlyb25tZW50cy50ZXN0O1xuICAgIHNob3VsZC5leGlzdCh0ZXN0bmV0RW52LmV2bSk7XG4gICAgc2hvdWxkLmV4aXN0KHRlc3RuZXRFbnYuZXZtPy56a3N5bmNlcmEpO1xuICAgIHRlc3RuZXRFbnYuZXZtPy56a3N5bmNlcmEuYmFzZVVybC5zaG91bGQuZXF1YWwoJ2h0dHBzOi8vYXBpLmV0aGVyc2Nhbi5pby92MicpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addressVerification.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bitgo/utils/tss/addressVerification.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
require("should");
|
|
38
|
+
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
39
|
+
function getAddressVerificationModule() {
|
|
40
|
+
return require('../../../../../src/bitgo/utils/tss/addressVerification');
|
|
41
|
+
}
|
|
42
|
+
const getExtractCommonKeychain = () => getAddressVerificationModule().extractCommonKeychain;
|
|
43
|
+
describe('TSS Address Verification - Derivation Path with Prefix', function () {
|
|
44
|
+
const commonKeychain = '8ea32ecacfc83effbd2e2790ee44fa7c59b4d86c29a12f09fb613d8195f93f4e21875cad3b98adada40c040c54c3569467df41a020881a6184096378701862bd';
|
|
45
|
+
describe('extractCommonKeychain', function () {
|
|
46
|
+
it('should extract commonKeychain from keychains array', function () {
|
|
47
|
+
const extractCommonKeychain = getExtractCommonKeychain();
|
|
48
|
+
const keychains = [{ commonKeychain }, { commonKeychain }, { commonKeychain }];
|
|
49
|
+
const result = extractCommonKeychain(keychains);
|
|
50
|
+
result.should.equal(commonKeychain);
|
|
51
|
+
});
|
|
52
|
+
it('should throw error if keychains are missing', function () {
|
|
53
|
+
const extractCommonKeychain = getExtractCommonKeychain();
|
|
54
|
+
assert.throws(() => extractCommonKeychain([]), /missing required param keychains/);
|
|
55
|
+
assert.throws(() => extractCommonKeychain(undefined), /missing required param keychains/);
|
|
56
|
+
});
|
|
57
|
+
it('should throw error if commonKeychain is missing', function () {
|
|
58
|
+
const extractCommonKeychain = getExtractCommonKeychain();
|
|
59
|
+
const keychains = [{ id: '1' }];
|
|
60
|
+
assert.throws(() => extractCommonKeychain(keychains), /missing required param commonKeychain/);
|
|
61
|
+
});
|
|
62
|
+
it('should throw error if keychains have mismatched commonKeychains', function () {
|
|
63
|
+
const extractCommonKeychain = getExtractCommonKeychain();
|
|
64
|
+
const keychains = [{ commonKeychain }, { commonKeychain: 'different-keychain' }];
|
|
65
|
+
assert.throws(() => extractCommonKeychain(keychains), /all keychains must have the same commonKeychain/);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('Derivation Path Format Validation', function () {
|
|
69
|
+
it('should produce correct derivation path format', function () {
|
|
70
|
+
const testSeeds = ['seed1', 'seed-2', '12345', 'test_seed_123'];
|
|
71
|
+
testSeeds.forEach((seed) => {
|
|
72
|
+
const path = (0, sdk_lib_mpc_1.getDerivationPath)(seed);
|
|
73
|
+
// Expected format: "m/999999/{part1}/{part2}"
|
|
74
|
+
path.should.match(/^m\/999999\/\d+\/\d+$/);
|
|
75
|
+
path.should.startWith('m/');
|
|
76
|
+
// Should have exactly 3 parts
|
|
77
|
+
const parts = path.split('/');
|
|
78
|
+
parts.length.should.equal(4);
|
|
79
|
+
parts[0].should.equal('m');
|
|
80
|
+
parts[1].should.equal('999999');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc1ZlcmlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvYWRkcmVzc1ZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxrQkFBZ0I7QUFDaEIsb0RBQXVEO0FBRXZELFNBQVMsNEJBQTRCO0lBQ25DLE9BQU8sT0FBTyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVELE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztBQUU1RixRQUFRLENBQUMsd0RBQXdELEVBQUU7SUFDakUsTUFBTSxjQUFjLEdBQ2xCLGtJQUFrSSxDQUFDO0lBRXJJLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtRQUNoQyxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUUvRSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixFQUFFLENBQUM7WUFDekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsU0FBZ0IsQ0FBQyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUU7WUFDcEQsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFNBQWdCLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3hHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFO1lBQ3BFLE1BQU0scUJBQXFCLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUUsaURBQWlELENBQUMsQ0FBQztRQUMzRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1DQUFtQyxFQUFFO1FBQzVDLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtZQUNsRCxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRWhFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDekIsTUFBTSxJQUFJLEdBQUcsSUFBQSwrQkFBaUIsRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFFckMsOENBQThDO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFNUIsOEJBQThCO2dCQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgZ2V0RGVyaXZhdGlvblBhdGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG5mdW5jdGlvbiBnZXRBZGRyZXNzVmVyaWZpY2F0aW9uTW9kdWxlKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9hZGRyZXNzVmVyaWZpY2F0aW9uJyk7XG59XG5cbmNvbnN0IGdldEV4dHJhY3RDb21tb25LZXljaGFpbiA9ICgpID0+IGdldEFkZHJlc3NWZXJpZmljYXRpb25Nb2R1bGUoKS5leHRyYWN0Q29tbW9uS2V5Y2hhaW47XG5cbmRlc2NyaWJlKCdUU1MgQWRkcmVzcyBWZXJpZmljYXRpb24gLSBEZXJpdmF0aW9uIFBhdGggd2l0aCBQcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvbW1vbktleWNoYWluID1cbiAgICAnOGVhMzJlY2FjZmM4M2VmZmJkMmUyNzkwZWU0NGZhN2M1OWI0ZDg2YzI5YTEyZjA5ZmI2MTNkODE5NWY5M2Y0ZTIxODc1Y2FkM2I5OGFkYWRhNDBjMDQwYzU0YzM1Njk0NjdkZjQxYTAyMDg4MWE2MTg0MDk2Mzc4NzAxODYyYmQnO1xuXG4gIGRlc2NyaWJlKCdleHRyYWN0Q29tbW9uS2V5Y2hhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IGNvbW1vbktleWNoYWluIGZyb20ga2V5Y2hhaW5zIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBjb21tb25LZXljaGFpbiB9LCB7IGNvbW1vbktleWNoYWluIH0sIHsgY29tbW9uS2V5Y2hhaW4gfV07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RDb21tb25LZXljaGFpbihrZXljaGFpbnMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChjb21tb25LZXljaGFpbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGtleWNoYWlucyBhcmUgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RDb21tb25LZXljaGFpbiA9IGdldEV4dHJhY3RDb21tb25LZXljaGFpbigpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBleHRyYWN0Q29tbW9uS2V5Y2hhaW4oW10pLCAvbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMvKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZXh0cmFjdENvbW1vbktleWNoYWluKHVuZGVmaW5lZCBhcyBhbnkpLCAvbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgY29tbW9uS2V5Y2hhaW4gaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RDb21tb25LZXljaGFpbiA9IGdldEV4dHJhY3RDb21tb25LZXljaGFpbigpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgaWQ6ICcxJyB9XTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZXh0cmFjdENvbW1vbktleWNoYWluKGtleWNoYWlucyBhcyBhbnkpLCAvbWlzc2luZyByZXF1aXJlZCBwYXJhbSBjb21tb25LZXljaGFpbi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBrZXljaGFpbnMgaGF2ZSBtaXNtYXRjaGVkIGNvbW1vbktleWNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RDb21tb25LZXljaGFpbiA9IGdldEV4dHJhY3RDb21tb25LZXljaGFpbigpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgY29tbW9uS2V5Y2hhaW4gfSwgeyBjb21tb25LZXljaGFpbjogJ2RpZmZlcmVudC1rZXljaGFpbicgfV07XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGV4dHJhY3RDb21tb25LZXljaGFpbihrZXljaGFpbnMpLCAvYWxsIGtleWNoYWlucyBtdXN0IGhhdmUgdGhlIHNhbWUgY29tbW9uS2V5Y2hhaW4vKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Rlcml2YXRpb24gUGF0aCBGb3JtYXQgVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgY29ycmVjdCBkZXJpdmF0aW9uIHBhdGggZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFNlZWRzID0gWydzZWVkMScsICdzZWVkLTInLCAnMTIzNDUnLCAndGVzdF9zZWVkXzEyMyddO1xuXG4gICAgICB0ZXN0U2VlZHMuZm9yRWFjaCgoc2VlZCkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0RGVyaXZhdGlvblBhdGgoc2VlZCk7XG5cbiAgICAgICAgLy8gRXhwZWN0ZWQgZm9ybWF0OiBcIm0vOTk5OTk5L3twYXJ0MX0ve3BhcnQyfVwiXG4gICAgICAgIHBhdGguc2hvdWxkLm1hdGNoKC9ebVxcLzk5OTk5OVxcL1xcZCtcXC9cXGQrJC8pO1xuXG4gICAgICAgIHBhdGguc2hvdWxkLnN0YXJ0V2l0aCgnbS8nKTtcblxuICAgICAgICAvLyBTaG91bGQgaGF2ZSBleGFjdGx5IDMgcGFydHNcbiAgICAgICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIHBhcnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoNCk7XG4gICAgICAgIHBhcnRzWzBdLnNob3VsZC5lcXVhbCgnbScpO1xuICAgICAgICBwYXJ0c1sxXS5zaG91bGQuZXF1YWwoJzk5OTk5OScpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletTssAddressVerification.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/walletTssAddressVerification.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,276 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const sinon = __importStar(require("sinon"));
|
|
38
|
+
require("should");
|
|
39
|
+
const wallet_1 = require("../../../../src/bitgo/wallet/wallet");
|
|
40
|
+
const keychain_1 = require("../../../../src/bitgo/keychain");
|
|
41
|
+
describe('Wallet - TSS Address Verification with Derivation Prefix', function () {
|
|
42
|
+
let wallet;
|
|
43
|
+
let mockBitGo;
|
|
44
|
+
let mockBaseCoin;
|
|
45
|
+
let mockWalletData;
|
|
46
|
+
let mockKeychains;
|
|
47
|
+
beforeEach(function () {
|
|
48
|
+
mockBitGo = {
|
|
49
|
+
post: sinon.stub(),
|
|
50
|
+
setRequestTracer: sinon.stub(),
|
|
51
|
+
};
|
|
52
|
+
mockBaseCoin = {
|
|
53
|
+
supportsTss: sinon.stub().returns(true),
|
|
54
|
+
getFamily: sinon.stub().returns('sol'),
|
|
55
|
+
getMPCAlgorithm: sinon.stub().returns('eddsa'),
|
|
56
|
+
isValidAddress: sinon.stub().returns(true),
|
|
57
|
+
isWalletAddress: sinon.stub(),
|
|
58
|
+
keychains: sinon.stub(),
|
|
59
|
+
url: sinon.stub().returns('/api/v2/sol/wallet/test-wallet-id/address'),
|
|
60
|
+
};
|
|
61
|
+
// Default keychains setup - all with commonKeychain
|
|
62
|
+
mockKeychains = [
|
|
63
|
+
{
|
|
64
|
+
id: 'user-key-id',
|
|
65
|
+
type: 'tss',
|
|
66
|
+
commonKeychain: '8ea32ecacfc83effbd2e2790ee44fa7c59b4d86c29a12f09fb613d8195f93f4e21875cad3b98adada40c040c54c3569467df41a020881a6184096378701862bd',
|
|
67
|
+
derivedFromParentWithSeed: 'test-seed-user',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'backup-key-id',
|
|
71
|
+
type: 'tss',
|
|
72
|
+
commonKeychain: '8ea32ecacfc83effbd2e2790ee44fa7c59b4d86c29a12f09fb613d8195f93f4e21875cad3b98adada40c040c54c3569467df41a020881a6184096378701862bd',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'bitgo-key-id',
|
|
76
|
+
type: 'tss',
|
|
77
|
+
commonKeychain: '8ea32ecacfc83effbd2e2790ee44fa7c59b4d86c29a12f09fb613d8195f93f4e21875cad3b98adada40c040c54c3569467df41a020881a6184096378701862bd',
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
mockBaseCoin.keychains.returns({
|
|
81
|
+
get: sinon.stub().callsFake((params) => {
|
|
82
|
+
const keyIndex = mockWalletData.keys.indexOf(params.id);
|
|
83
|
+
return Promise.resolve(mockKeychains[keyIndex]);
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
mockWalletData = {
|
|
87
|
+
id: 'test-wallet-id',
|
|
88
|
+
keys: ['user-key-id', 'backup-key-id', 'bitgo-key-id'],
|
|
89
|
+
multisigType: 'tss',
|
|
90
|
+
coinSpecific: {
|
|
91
|
+
walletVersion: 3,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
95
|
+
});
|
|
96
|
+
afterEach(function () {
|
|
97
|
+
sinon.restore();
|
|
98
|
+
});
|
|
99
|
+
describe('Custodial TSS Wallet - No Derivation Prefix', function () {
|
|
100
|
+
beforeEach(function () {
|
|
101
|
+
mockWalletData.type = 'custodial';
|
|
102
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
103
|
+
});
|
|
104
|
+
it('should not extract derivation prefix for custodial wallets', async function () {
|
|
105
|
+
const mockAddressResponse = {
|
|
106
|
+
id: 'address-id',
|
|
107
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
108
|
+
index: 0,
|
|
109
|
+
coinSpecific: {},
|
|
110
|
+
};
|
|
111
|
+
mockBitGo.post.returns({
|
|
112
|
+
send: sinon.stub().returns({
|
|
113
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
114
|
+
}),
|
|
115
|
+
});
|
|
116
|
+
mockBaseCoin.isWalletAddress.resolves(true);
|
|
117
|
+
await wallet.createAddress({ chain: 0 });
|
|
118
|
+
// Verify that custodial wallets don't use derivedFromParentWithSeed
|
|
119
|
+
// (their commonKeychain already accounts for the prefix)
|
|
120
|
+
const verificationCall = mockBaseCoin.isWalletAddress.getCall(0);
|
|
121
|
+
const verificationData = verificationCall.args[0];
|
|
122
|
+
assert.strictEqual(verificationData.derivedFromParentWithSeed, undefined);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('Cold/SMC TSS Wallet - Derivation Prefix from User Keychain', function () {
|
|
126
|
+
beforeEach(function () {
|
|
127
|
+
mockWalletData.type = 'cold';
|
|
128
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
129
|
+
});
|
|
130
|
+
it('should extract derivation prefix from User keychain for cold/SMC wallets', async function () {
|
|
131
|
+
const mockAddressResponse = {
|
|
132
|
+
id: 'address-id',
|
|
133
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
134
|
+
index: 0,
|
|
135
|
+
coinSpecific: {},
|
|
136
|
+
};
|
|
137
|
+
mockBitGo.post.returns({
|
|
138
|
+
send: sinon.stub().returns({
|
|
139
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
140
|
+
}),
|
|
141
|
+
});
|
|
142
|
+
mockBaseCoin.isWalletAddress.resolves(true);
|
|
143
|
+
await wallet.createAddress({ chain: 0 });
|
|
144
|
+
// Verify that isWalletAddress was called with derivedFromParentWithSeed from User keychain
|
|
145
|
+
const verificationCall = mockBaseCoin.isWalletAddress.getCall(0);
|
|
146
|
+
const verificationData = verificationCall.args[0];
|
|
147
|
+
verificationData.should.have.property('derivedFromParentWithSeed');
|
|
148
|
+
verificationData.derivedFromParentWithSeed.should.equal('test-seed-user');
|
|
149
|
+
});
|
|
150
|
+
it('should handle missing derivedFromParentWithSeed gracefully for cold wallet', async function () {
|
|
151
|
+
// Remove derivedFromParentWithSeed from User keychain
|
|
152
|
+
mockKeychains[keychain_1.KeyIndices.USER].derivedFromParentWithSeed = undefined;
|
|
153
|
+
const mockAddressResponse = {
|
|
154
|
+
id: 'address-id',
|
|
155
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
156
|
+
index: 0,
|
|
157
|
+
coinSpecific: {},
|
|
158
|
+
};
|
|
159
|
+
mockBitGo.post.returns({
|
|
160
|
+
send: sinon.stub().returns({
|
|
161
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
162
|
+
}),
|
|
163
|
+
});
|
|
164
|
+
mockBaseCoin.isWalletAddress.resolves(true);
|
|
165
|
+
await wallet.createAddress({ chain: 0 });
|
|
166
|
+
// Should not have derivedFromParentWithSeed if seed is missing
|
|
167
|
+
const verificationCall = mockBaseCoin.isWalletAddress.getCall(0);
|
|
168
|
+
const verificationData = verificationCall.args[0];
|
|
169
|
+
assert.strictEqual(verificationData.derivedFromParentWithSeed, undefined);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('Non-TSS Wallet - No Derivation Prefix', function () {
|
|
173
|
+
beforeEach(function () {
|
|
174
|
+
mockWalletData.multisigType = 'onchain';
|
|
175
|
+
mockWalletData.type = 'cold';
|
|
176
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
177
|
+
});
|
|
178
|
+
it('should not extract derivation prefix for non-TSS wallets', async function () {
|
|
179
|
+
const mockAddressResponse = {
|
|
180
|
+
id: 'address-id',
|
|
181
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
182
|
+
index: 0,
|
|
183
|
+
coinSpecific: {},
|
|
184
|
+
};
|
|
185
|
+
mockBitGo.post.returns({
|
|
186
|
+
send: sinon.stub().returns({
|
|
187
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
188
|
+
}),
|
|
189
|
+
});
|
|
190
|
+
mockBaseCoin.isWalletAddress.resolves(true);
|
|
191
|
+
await wallet.createAddress({ chain: 0 });
|
|
192
|
+
// Verify that derivedFromParentWithSeed is not set for non-TSS wallets
|
|
193
|
+
const verificationCall = mockBaseCoin.isWalletAddress.getCall(0);
|
|
194
|
+
const verificationData = verificationCall.args[0];
|
|
195
|
+
assert.strictEqual(verificationData.derivedFromParentWithSeed, undefined);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('Edge Cases', function () {
|
|
199
|
+
it('should handle wallet without USER keychain', async function () {
|
|
200
|
+
// Set keys array to only have backup keychain (no USER keychain at index 0)
|
|
201
|
+
mockWalletData.keys = ['backup-key-id']; // Only backup keychain, no USER
|
|
202
|
+
mockWalletData.type = 'cold';
|
|
203
|
+
// Update mock to return backup keychain when requested
|
|
204
|
+
mockBaseCoin.keychains.returns({
|
|
205
|
+
get: sinon.stub().callsFake((params) => {
|
|
206
|
+
if (params.id === 'backup-key-id') {
|
|
207
|
+
return Promise.resolve(mockKeychains[keychain_1.KeyIndices.BACKUP]);
|
|
208
|
+
}
|
|
209
|
+
return Promise.resolve(null);
|
|
210
|
+
}),
|
|
211
|
+
});
|
|
212
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
213
|
+
const mockAddressResponse = {
|
|
214
|
+
id: 'address-id',
|
|
215
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
216
|
+
index: 0,
|
|
217
|
+
coinSpecific: {},
|
|
218
|
+
};
|
|
219
|
+
mockBitGo.post.returns({
|
|
220
|
+
send: sinon.stub().returns({
|
|
221
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
222
|
+
}),
|
|
223
|
+
});
|
|
224
|
+
mockBaseCoin.isWalletAddress.resolves(true);
|
|
225
|
+
await wallet.createAddress({ chain: 0 });
|
|
226
|
+
const verificationCall = mockBaseCoin.isWalletAddress.getCall(0);
|
|
227
|
+
const verificationData = verificationCall.args[0];
|
|
228
|
+
// Should not have derivedFromParentWithSeed if USER keychain doesn't exist in keys array
|
|
229
|
+
assert.strictEqual(verificationData.derivedFromParentWithSeed, undefined);
|
|
230
|
+
});
|
|
231
|
+
it('should handle pendingChainInitialization correctly', async function () {
|
|
232
|
+
mockWalletData.type = 'cold';
|
|
233
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
234
|
+
const mockAddressResponse = {
|
|
235
|
+
id: 'address-id',
|
|
236
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
237
|
+
index: 0,
|
|
238
|
+
coinSpecific: {
|
|
239
|
+
pendingChainInitialization: true,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
mockBitGo.post.returns({
|
|
243
|
+
send: sinon.stub().returns({
|
|
244
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
245
|
+
}),
|
|
246
|
+
});
|
|
247
|
+
// Should skip verification when pendingChainInitialization is true
|
|
248
|
+
await wallet.createAddress({ chain: 0 });
|
|
249
|
+
// isWalletAddress should not be called when pendingChainInitialization is true
|
|
250
|
+
mockBaseCoin.isWalletAddress.should.not.have.been.called;
|
|
251
|
+
});
|
|
252
|
+
it('should handle forwarderVersion 1 with pendingChainInitialization', async function () {
|
|
253
|
+
mockWalletData.type = 'cold';
|
|
254
|
+
wallet = new wallet_1.Wallet(mockBitGo, mockBaseCoin, mockWalletData);
|
|
255
|
+
const mockAddressResponse = {
|
|
256
|
+
id: 'address-id',
|
|
257
|
+
address: '6FjshVqwmDH74wfxkZrJaRGEjTeJQL4ViL6X18VXUNAY',
|
|
258
|
+
index: 0,
|
|
259
|
+
coinSpecific: {
|
|
260
|
+
pendingChainInitialization: true,
|
|
261
|
+
forwarderVersion: 1,
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
mockBitGo.post.returns({
|
|
265
|
+
send: sinon.stub().returns({
|
|
266
|
+
result: sinon.stub().resolves(mockAddressResponse),
|
|
267
|
+
}),
|
|
268
|
+
});
|
|
269
|
+
mockBaseCoin.isWalletAddress.resolves(true);
|
|
270
|
+
// Should verify even with pendingChainInitialization when forwarderVersion is 1
|
|
271
|
+
await wallet.createAddress({ chain: 0, forwarderVersion: 1 });
|
|
272
|
+
mockBaseCoin.isWalletAddress.should.have.been.calledOnce;
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0VHNzQWRkcmVzc1ZlcmlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0VHNzQWRkcmVzc1ZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBQ2hCLGdFQUE2RDtBQUM3RCw2REFBNEQ7QUFFNUQsUUFBUSxDQUFDLDBEQUEwRCxFQUFFO0lBQ25FLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGNBQW1CLENBQUM7SUFDeEIsSUFBSSxhQUFvQixDQUFDO0lBRXpCLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLFlBQVksR0FBRztZQUNiLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN2QyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQzlDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMxQyxlQUFlLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUM3QixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUN2QixHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9B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QUFHLElBQUksZUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFN0QsTUFBTSxtQkFBbUIsR0FBRztnQkFDMUIsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLE9BQU8sRUFBRSw4Q0FBOEM7Z0JBQ3ZELEtBQUssRUFBRSxDQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWiwwQkFBMEIsRUFBRSxJQUFJO29CQUNoQyxnQkFBZ0IsRUFBRSxDQUFDO2lCQUNwQjthQUNGLENBQUM7WUFFRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDckIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO2lCQUNuRCxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1lBRUgsWUFBWSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUMsZ0ZBQWdGO1lBQ2hGLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU5RCxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvd2FsbGV0JztcbmltcG9ydCB7IEtleUluZGljZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28va2V5Y2hhaW4nO1xuXG5kZXNjcmliZSgnV2FsbGV0IC0gVFNTIEFkZHJlc3MgVmVyaWZpY2F0aW9uIHdpdGggRGVyaXZhdGlvbiBQcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja0Jhc2VDb2luOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0RGF0YTogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55W107XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBzdXBwb3J0c1Rzczogc2lub24uc3R1YigpLnJldHVybnModHJ1ZSksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdzb2wnKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VkZHNhJyksXG4gICAgICBpc1ZhbGlkQWRkcmVzczogc2lub24uc3R1YigpLnJldHVybnModHJ1ZSksXG4gICAgICBpc1dhbGxldEFkZHJlc3M6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL2FwaS92Mi9zb2wvd2FsbGV0L3Rlc3Qtd2FsbGV0LWlkL2FkZHJlc3MnKSxcbiAgICB9O1xuXG4gICAgLy8gRGVmYXVsdCBrZXljaGFpbnMgc2V0dXAgLSBhbGwgd2l0aCBjb21tb25LZXljaGFpblxuICAgIG1vY2tLZXljaGFpbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndXNlci1rZXktaWQnLFxuICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgJzhlYTMyZWNhY2ZjODNlZmZiZDJlMjc5MGVlNDRmYTdjNTliNGQ4NmMyOWExMmYwOWZiNjEzZDgxOTVmOTNmNGUyMTg3NWNhZDNiOThhZGFkYTQwYzA0MGM1NGMzNTY5NDY3ZGY0MWEwMjA4ODFhNjE4NDA5NjM3ODcwMTg2MmJkJyxcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJ3Rlc3Qtc2VlZC11c2VyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnYmFja3VwLWtleS1pZCcsXG4gICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICBjb21tb25LZXljaGFpbjpcbiAgICAgICAgICAnOGVhMzJlY2FjZmM4M2VmZmJkMmUyNzkwZWU0NGZhN2M1OWI0ZDg2YzI5YTEyZjA5ZmI2MTNkODE5NWY5M2Y0ZTIxODc1Y2FkM2I5OGFkYWRhNDBjMDQwYzU0YzM1Njk0NjdkZjQxYTAyMDg4MWE2MTg0MDk2Mzc4NzAxODYyYmQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdiaXRnby1rZXktaWQnLFxuICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgJzhlYTMyZWNhY2ZjODNlZmZiZDJlMjc5MGVlNDRmYTdjNTliNGQ4NmMyOWExMmYwOWZiNjEzZDgxOTVmOTNmNGUyMTg3NWNhZDNiOThhZGFkYTQwYzA0MGM1NGMzNTY5NDY3ZGY0MWEwMjA4ODFhNjE4NDA5NjM3ODcwMTg2MmJkJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleUluZGV4ID0gbW9ja1dhbGxldERhdGEua2V5cy5pbmRleE9mKHBhcmFtcy5pZCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja0tleWNoYWluc1trZXlJbmRleF0pO1xuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBtb2NrV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICB3YWxsZXRWZXJzaW9uOiAzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG1vY2tCYXNlQ29pbiwgbW9ja1dhbGxldERhdGEpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0N1c3RvZGlhbCBUU1MgV2FsbGV0IC0gTm8gRGVyaXZhdGlvbiBQcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrV2FsbGV0RGF0YS50eXBlID0gJ2N1c3RvZGlhbCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBleHRyYWN0IGRlcml2YXRpb24gcHJlZml4IGZvciBjdXN0b2RpYWwgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgY3VzdG9kaWFsIHdhbGxldHMgZG9uJ3QgdXNlIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWRcbiAgICAgIC8vICh0aGVpciBjb21tb25LZXljaGFpbiBhbHJlYWR5IGFjY291bnRzIGZvciB0aGUgcHJlZml4KVxuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uQ2FsbCA9IG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3MuZ2V0Q2FsbCgwKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkRhdGEgPSB2ZXJpZmljYXRpb25DYWxsLmFyZ3NbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZpY2F0aW9uRGF0YS5kZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29sZC9TTUMgVFNTIFdhbGxldCAtIERlcml2YXRpb24gUHJlZml4IGZyb20gVXNlciBLZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tXYWxsZXREYXRhLnR5cGUgPSAnY29sZCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4dHJhY3QgZGVyaXZhdGlvbiBwcmVmaXggZnJvbSBVc2VyIGtleWNoYWluIGZvciBjb2xkL1NNQyB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja0FkZHJlc3NSZXNwb25zZSA9IHtcbiAgICAgICAgaWQ6ICdhZGRyZXNzLWlkJyxcbiAgICAgICAgYWRkcmVzczogJzZGanNoVnF3bURINzR3ZnhrWnJKYVJHRWpUZUpRTDRWaUw2WDE4VlhVTkFZJyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9O1xuXG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tBZGRyZXNzUmVzcG9uc2UpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrQmFzZUNvaW4uaXNXYWxsZXRBZGRyZXNzLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwIH0pO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBpc1dhbGxldEFkZHJlc3Mgd2FzIGNhbGxlZCB3aXRoIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgZnJvbSBVc2VyIGtleWNoYWluXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25DYWxsID0gbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5nZXRDYWxsKDApO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uRGF0YSA9IHZlcmlmaWNhdGlvbkNhbGwuYXJnc1swXTtcblxuICAgICAgdmVyaWZpY2F0aW9uRGF0YS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCcpO1xuICAgICAgdmVyaWZpY2F0aW9uRGF0YS5kZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLnNob3VsZC5lcXVhbCgndGVzdC1zZWVkLXVzZXInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBncmFjZWZ1bGx5IGZvciBjb2xkIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlbW92ZSBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkIGZyb20gVXNlciBrZXljaGFpblxuICAgICAgbW9ja0tleWNoYWluc1tLZXlJbmRpY2VzLlVTRVJdLmRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgaWYgc2VlZCBpcyBtaXNzaW5nXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25DYWxsID0gbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5nZXRDYWxsKDApO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uRGF0YSA9IHZlcmlmaWNhdGlvbkNhbGwuYXJnc1swXTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZmljYXRpb25EYXRhLmRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdOb24tVFNTIFdhbGxldCAtIE5vIERlcml2YXRpb24gUHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja1dhbGxldERhdGEubXVsdGlzaWdUeXBlID0gJ29uY2hhaW4nO1xuICAgICAgbW9ja1dhbGxldERhdGEudHlwZSA9ICdjb2xkJztcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4sIG1vY2tXYWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGV4dHJhY3QgZGVyaXZhdGlvbiBwcmVmaXggZm9yIG5vbi1UU1Mgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBpcyBub3Qgc2V0IGZvciBub24tVFNTIHdhbGxldHNcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkNhbGwgPSBtb2NrQmFzZUNvaW4uaXNXYWxsZXRBZGRyZXNzLmdldENhbGwoMCk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25EYXRhID0gdmVyaWZpY2F0aW9uQ2FsbC5hcmdzWzBdO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmaWNhdGlvbkRhdGEuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VkZ2UgQ2FzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgd2FsbGV0IHdpdGhvdXQgVVNFUiBrZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNldCBrZXlzIGFycmF5IHRvIG9ubHkgaGF2ZSBiYWNrdXAga2V5Y2hhaW4gKG5vIFVTRVIga2V5Y2hhaW4gYXQgaW5kZXggMClcbiAgICAgIG1vY2tXYWxsZXREYXRhLmtleXMgPSBbJ2JhY2t1cC1rZXktaWQnXTsgLy8gT25seSBiYWNrdXAga2V5Y2hhaW4sIG5vIFVTRVJcbiAgICAgIG1vY2tXYWxsZXREYXRhLnR5cGUgPSAnY29sZCc7XG5cbiAgICAgIC8vIFVwZGF0ZSBtb2NrIHRvIHJldHVybiBiYWNrdXAga2V5Y2hhaW4gd2hlbiByZXF1ZXN0ZWRcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocGFyYW1zLmlkID09PSAnYmFja3VwLWtleS1pZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja0tleWNoYWluc1tLZXlJbmRpY2VzLkJBQ0tVUF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uQ2FsbCA9IG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3MuZ2V0Q2FsbCgwKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkRhdGEgPSB2ZXJpZmljYXRpb25DYWxsLmFyZ3NbMF07XG4gICAgICAvLyBTaG91bGQgbm90IGhhdmUgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBpZiBVU0VSIGtleWNoYWluIGRvZXNuJ3QgZXhpc3QgaW4ga2V5cyBhcnJheVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmaWNhdGlvbkRhdGEuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tXYWxsZXREYXRhLnR5cGUgPSAnY29sZCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja0FkZHJlc3NSZXNwb25zZSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNob3VsZCBza2lwIHZlcmlmaWNhdGlvbiB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWVcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAgfSk7XG5cbiAgICAgIC8vIGlzV2FsbGV0QWRkcmVzcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWVcbiAgICAgIG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3Muc2hvdWxkLm5vdC5oYXZlLmJlZW4uY2FsbGVkO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZm9yd2FyZGVyVmVyc2lvbiAxIHdpdGggcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrV2FsbGV0RGF0YS50eXBlID0gJ2NvbGQnO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG1vY2tCYXNlQ29pbiwgbW9ja1dhbGxldERhdGEpO1xuXG4gICAgICBjb25zdCBtb2NrQWRkcmVzc1Jlc3BvbnNlID0ge1xuICAgICAgICBpZDogJ2FkZHJlc3MtaWQnLFxuICAgICAgICBhZGRyZXNzOiAnNkZqc2hWcXdtREg3NHdmeGtackphUkdFalRlSlFMNFZpTDZYMThWWFVOQVknLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja0FkZHJlc3NSZXNwb25zZSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3MucmVzb2x2ZXModHJ1ZSk7XG5cbiAgICAgIC8vIFNob3VsZCB2ZXJpZnkgZXZlbiB3aXRoIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIHdoZW4gZm9yd2FyZGVyVmVyc2lvbiBpcyAxXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pO1xuXG4gICAgICBtb2NrQmFzZUNvaW4uaXNXYWxsZXRBZGRyZXNzLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../test/unit/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|