@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.
Files changed (39) hide show
  1. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +13 -1
  2. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  4. package/dist/src/bitgo/bip32util.d.ts +1 -1
  5. package/dist/src/bitgo/bip32util.js +4 -4
  6. package/dist/src/bitgo/environments.d.ts.map +1 -1
  7. package/dist/src/bitgo/environments.js +11 -5
  8. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +6 -3
  9. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -1
  10. package/dist/src/bitgo/staking/goStakingInterfaces.js +1 -1
  11. package/dist/src/bitgo/staking/stakingWallet.js +2 -2
  12. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
  13. package/dist/src/bitgo/utils/tss/addressVerification.js +9 -3
  14. package/dist/src/bitgo/wallet/iWallet.d.ts +12 -1
  15. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  16. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  17. package/dist/src/bitgo/wallet/wallet.d.ts +31 -1
  18. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  19. package/dist/src/bitgo/wallet/wallet.js +211 -80
  20. package/dist/src/coins/ofcToken.d.ts +2 -1
  21. package/dist/src/coins/ofcToken.d.ts.map +1 -1
  22. package/dist/src/coins/ofcToken.js +27 -1
  23. package/dist/src/lightning.d.ts +3 -0
  24. package/dist/src/lightning.d.ts.map +1 -0
  25. package/dist/src/lightning.js +15 -0
  26. package/dist/test/unit/bitgo/environment.d.ts +2 -0
  27. package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
  28. package/dist/test/unit/bitgo/environment.js +22 -0
  29. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
  30. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  31. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +85 -0
  32. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
  33. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
  34. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +276 -0
  35. package/dist/test/unit/lightning.d.ts +2 -0
  36. package/dist/test/unit/lightning.d.ts.map +1 -0
  37. package/dist/test/unit/lightning.js +23 -0
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. 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,EAClB,MAAM,KAAK,CAAC;AACb,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;AAG1B,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;;;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"}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29pbnMvb2ZjVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsbUNBQWtDO0FBT2xDLCtCQUE0QjtBQVc1QixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztBQUN2QyxNQUFhLFFBQVMsU0FBUSxTQUFHO0lBRy9CLFlBQVksS0FBZ0IsRUFBRSxXQUEyQjtRQUN2RCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQXNCO1FBQ2xELE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQThCO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQVEsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBVyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQVMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLE9BQWdCO1FBQzdCLElBQUksQ0FBQyxJQUFBLGlCQUFRLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEQsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6RkQsNEJBeUZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgT2ZjVG9rZW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIENvaW5Db25zdHJ1Y3RvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBPZmMgfSBmcm9tICcuL29mYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDoge1xuICAgIHBheWxvYWQ6IHN0cmluZztcbiAgfTtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB7IE9mY1Rva2VuQ29uZmlnIH07XG5cbmNvbnN0IHB1YmxpY0lkUmVnZXggPSAvXlthLWZcXGRdezMyfSQvaTtcbmV4cG9ydCBjbGFzcyBPZmNUb2tlbiBleHRlbmRzIE9mYyB7XG4gIHB1YmxpYyByZWFkb25seSB0b2tlbkNvbmZpZzogT2ZjVG9rZW5Db25maWc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgdG9rZW5Db25maWc6IE9mY1Rva2VuQ29uZmlnKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIHRoaXMudG9rZW5Db25maWcgPSB0b2tlbkNvbmZpZztcbiAgfVxuXG4gIGdldCBjb2luKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmNvaW47XG4gIH1cblxuICBnZXQgZGVjaW1hbFBsYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5kZWNpbWFsUGxhY2VzO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmFtZTtcbiAgfVxuXG4gIGdldCBiYWNraW5nQ29pbigpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5iYWNraW5nQ29pbjtcbiAgfVxuXG4gIGdldCBpc0ZpYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuaXNGaWF0O1xuICB9XG5cbiAgZ2V0Q2hhaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCkge1xuICAgIHJldHVybiBTdHJpbmcoTWF0aC5wb3coMTAsIHRoaXMuZGVjaW1hbFBsYWNlcykpO1xuICB9XG5cbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IE9mY1Rva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gKGJpdGdvOiBCaXRHb0Jhc2UpID0+IG5ldyBPZmNUb2tlbihiaXRnbywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eFByZWJ1aWxkID0gcGFyYW1zLnR4UHJlYnVpbGQ7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4UHJlYnVpbGQucGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmVCdWZmZXIgPSAoYXdhaXQgdGhpcy5zaWduTWVzc2FnZShwYXJhbXMsIHBheWxvYWQpKSBhcyBhbnk7XG4gICAgY29uc3Qgc2lnbmF0dXJlOiBzdHJpbmcgPSBzaWduYXR1cmVCdWZmZXIudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgcGF5bG9hZCwgc2lnbmF0dXJlIH0gfSBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyB2YWxpZCBmb3IgdGhpcyBvZmMgdG9rZW4uXG4gICAqXG4gICAqIFRoZXNlIGFkZHJlc3NlcyBhcmUgZWl0aGVyIGJnLTxwdWJsaWNpZD4sIHdoZXJlIHB1YmxpYyBpZCBpcyB0aGUgaW50ZXJuYWwgYWRkcmVzcyB0byBzZW5kIHRvLFxuICAgKiBvciBhcmUgYW4gYWRkcmVzcyB3aGljaCBpcyB2YWxpZCBvbiB0aGUgYmFja2luZyBjb2luIG9mIHRoaXMgb2ZjIHRva2VuLlxuICAgKiBAcGFyYW0gYWRkcmVzcyBhZGRyZXNzIHRvIGNoZWNrIGZvciB2YWxpZGl0eVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzcz86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNTdHJpbmcoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgnYmctJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gYWRkcmVzcy5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gcGFydHNbMV07XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyICYmIHB1YmxpY0lkUmVnZXgudGVzdChhY2NvdW50SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYWNraW5nQ29pbiA9IHRoaXMuYml0Z28uY29pbih0aGlzLmJhY2tpbmdDb2luKTtcbiAgICAgIHJldHVybiBiYWNraW5nQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29pbnMvb2ZjVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsbUNBQWtDO0FBUWxDLDRDQUFrRTtBQUVsRSwrQkFBNEI7QUFXNUIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7QUFFdkMsTUFBYSxRQUFTLFNBQVEsU0FBRztJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBMkI7UUFDdkQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFD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biAqL1xuaW1wb3J0IHsgT2ZjVG9rZW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIENvaW5Db25zdHJ1Y3RvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIElUcmFuc2FjdGlvblJlY2lwaWVudCxcbn0gZnJvbSAnLi4vJztcbmltcG9ydCB7IGlzQm9sdDExSW52b2ljZSwgTElHSFROSU5HX0lOVk9JQ0UgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuXG5pbXBvcnQgeyBPZmMgfSBmcm9tICcuL29mYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDoge1xuICAgIHBheWxvYWQ6IHN0cmluZztcbiAgfTtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB7IE9mY1Rva2VuQ29uZmlnIH07XG5cbmNvbnN0IHB1YmxpY0lkUmVnZXggPSAvXlthLWZcXGRdezMyfSQvaTtcblxuZXhwb3J0IGNsYXNzIE9mY1Rva2VuIGV4dGVuZHMgT2ZjIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBPZmNUb2tlbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogT2ZjVG9rZW5Db25maWcpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy50b2tlbkNvbmZpZyA9IHRva2VuQ29uZmlnO1xuICB9XG5cbiAgZ2V0IGNvaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuY29pbjtcbiAgfVxuXG4gIGdldCBkZWNpbWFsUGxhY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXM7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5uYW1lO1xuICB9XG5cbiAgZ2V0IGJhY2tpbmdDb2luKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmJhY2tpbmdDb2luO1xuICB9XG5cbiAgZ2V0IGlzRmlhdCgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5pc0ZpYXQ7XG4gIH1cblxuICBnZXRDaGFpbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKSB7XG4gICAgcmV0dXJuIFN0cmluZyhNYXRoLnBvdygxMCwgdGhpcy5kZWNpbWFsUGxhY2VzKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcudHlwZTtcbiAgfVxuXG4gIGNoZWNrUmVjaXBpZW50KHJlY2lwaWVudDogSVRyYW5zYWN0aW9uUmVjaXBpZW50KTogdm9pZCB7XG4gICAgaWYgKGlzQm9sdDExSW52b2ljZShyZWNpcGllbnQuYWRkcmVzcykpIHtcbiAgICAgIC8vIHNob3VsZCB0aHJvdyBlcnJvciBpZiB0aGlzIGlzbnQgYml0Y29pbiAobWFpbm5ldCBvciB0ZXN0bmV0KVxuICAgICAgaWYgKHRoaXMuYmFja2luZ0NvaW4gIT09ICdidGMnICYmIHRoaXMuYmFja2luZ0NvaW4gIT09ICd0YnRjJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYXJndW1lbnQgLSBsaWdodG5pbmcgaW52b2ljZSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYml0Y29pbmApO1xuICAgICAgfVxuXG4gICAgICAvLyBhbW91bnQgZm9yIGJvbHQxMSBpbnZvaWNlcyBpcyBlaXRoZXIgJ2ludm9pY2UnIG9yIGEgbm9uLXplcm8gYmlnaW50XG4gICAgICBpZiAocmVjaXBpZW50LmFtb3VudCA9PT0gTElHSFROSU5HX0lOVk9JQ0UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdHJ5IHRvIHBhcnNlIHRoZSBhbW91bnQgYXMgYSBiaWdpbnRcbiAgICAgIGxldCBhbW91bnQ6IGJpZ2ludDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFtb3VudCA9IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBpbnZhbGlkIGFyZ3VtZW50ICR7cmVjaXBpZW50LmFtb3VudH0gZm9yIGFtb3VudCAtIGxpZ2h0bmluZyBpbnZvaWNlIGFtb3VudCBtdXN0IGJlID49IDAgb3IgJHtMSUdIVE5JTkdfSU5WT0lDRX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoYW1vdW50ID4gMG4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gbGlnaHRuaW5nIGludm9pY2UgYW1vdW50IG11c3QgYmUgYSBub24temVybyBiaWdpbnQgb3IgJHtMSUdIVE5JTkdfSU5WT0lDRX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHN1cGVyLmNoZWNrUmVjaXBpZW50KHJlY2lwaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IE9mY1Rva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gKGJpdGdvOiBCaXRHb0Jhc2UpID0+IG5ldyBPZmNUb2tlbihiaXRnbywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eFByZWJ1aWxkID0gcGFyYW1zLnR4UHJlYnVpbGQ7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4UHJlYnVpbGQucGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmVCdWZmZXIgPSAoYXdhaXQgdGhpcy5zaWduTWVzc2FnZShwYXJhbXMsIHBheWxvYWQpKSBhcyBhbnk7XG4gICAgY29uc3Qgc2lnbmF0dXJlOiBzdHJpbmcgPSBzaWduYXR1cmVCdWZmZXIudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgcGF5bG9hZCwgc2lnbmF0dXJlIH0gfSBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyB2YWxpZCBmb3IgdGhpcyBvZmMgdG9rZW4uXG4gICAqXG4gICAqIFRoZXNlIGFkZHJlc3NlcyBhcmUgZWl0aGVyIGJnLTxwdWJsaWNpZD4sIHdoZXJlIHB1YmxpYyBpZCBpcyB0aGUgaW50ZXJuYWwgYWRkcmVzcyB0byBzZW5kIHRvLFxuICAgKiBvciBhcmUgYW4gYWRkcmVzcyB3aGljaCBpcyB2YWxpZCBvbiB0aGUgYmFja2luZyBjb2luIG9mIHRoaXMgb2ZjIHRva2VuLlxuICAgKiBAcGFyYW0gYWRkcmVzcyBhZGRyZXNzIHRvIGNoZWNrIGZvciB2YWxpZGl0eVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzcz86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNTdHJpbmcoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgnYmctJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gYWRkcmVzcy5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gcGFydHNbMV07XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyICYmIHB1YmxpY0lkUmVnZXgudGVzdChhY2NvdW50SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYWNraW5nQ29pbiA9IHRoaXMuYml0Z28uY29pbih0aGlzLmJhY2tpbmdDb2luKTtcbiAgICAgIHJldHVybiBiYWNraW5nQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export declare const LIGHTNING_INVOICE = "invoice";
2
+ export declare function isBolt11Invoice(value: unknown): value is string;
3
+ //# sourceMappingURL=lightning.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=environment.d.ts.map
@@ -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,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=addressVerification.d.ts.map
@@ -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,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=walletTssAddressVerification.d.ts.map
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0VHNzQWRkcmVzc1ZlcmlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0VHNzQWRkcmVzc1ZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBQ2hCLGdFQUE2RDtBQUM3RCw2REFBNEQ7QUFFNUQsUUFBUSxDQUFDLDBEQUEwRCxFQUFFO0lBQ25FLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGNBQW1CLENBQUM7SUFDeEIsSUFBSSxhQUFvQixDQUFDO0lBRXpCLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLFlBQVksR0FBRztZQUNiLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN2QyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQzlDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMxQyxlQUFlLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUM3QixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUN2QixHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQztTQUN2RSxDQUFDO1FBRUYsb0RBQW9EO1FBQ3BELGFBQWEsR0FBRztZQUNkO2dCQUNFLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixJQUFJLEVBQUUsS0FBSztnQkFDWCxjQUFjLEVBQ1osa0lBQWtJO2dCQUNwSSx5QkFBeUIsRUFBRSxnQkFBZ0I7YUFDNUM7WUFDRDtnQkFDRSxFQUFFLEVBQUUsZUFBZTtnQkFDbkIsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsY0FBYyxFQUNaLGtJQUFrSTthQUNySTtZQUNEO2dCQUNFLEVBQUUsRUFBRSxjQUFjO2dCQUNsQixJQUFJLEVBQUUsS0FBSztnQkFDWCxjQUFjLEVBQ1osa0lBQWtJO2FBQ3JJO1NBQ0YsQ0FBQztRQUVGLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQzdCLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzFDLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILGNBQWMsR0FBRztZQUNmLEVBQUUsRUFBRSxnQkFBZ0I7WUFDcEIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUM7WUFDdEQsWUFBWSxFQUFFLEtBQUs7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLGFBQWEsRUFBRSxDQUFDO2FBQ2pCO1NBQ0YsQ0FBQztRQUVGLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQy9ELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDZDQUE2QyxFQUFFO1FBQ3RELFVBQVUsQ0FBQztZQUNULGNBQWMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1lBQ2xDLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7WUFDcEUsTUFBTSxtQkFBbUIsR0FBRztnQkFDMUIsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLE9BQU8sRUFBRSw4Q0FBOEM7Z0JBQ3ZELEtBQUssRUFBRSxDQUFDO2dCQUNSLFlBQVksRUFBRSxFQUFFO2FBQ2pCLENBQUM7WUFFRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDckIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO2lCQUNuRCxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1lBRUgsWUFBWSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekMsb0VBQW9FO1lBQ3BFLHlEQUF5RDtZQUN6RCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0REFBNEQsRUFBRTtRQUNyRSxVQUFVLENBQUM7WUFDVCxjQUFjLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUM3QixNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO1lBQ2xGLE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLEVBQUUsRUFBRSxZQUFZO2dCQUNoQixPQUFPLEVBQUUsOENBQThDO2dCQUN2RCxLQUFLLEVBQUUsQ0FBQztnQkFDUixZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFDO1lBRUYsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDbkQsQ0FBQzthQUNILENBQUMsQ0FBQztZQUVILFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXpDLDJGQUEyRjtZQUMzRixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWxELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDbkUsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEtBQUs7WUFDcEYsc0RBQXNEO1lBQ3RELGFBQWEsQ0FBQyxxQkFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLHlCQUF5QixHQUFHLFNBQVMsQ0FBQztZQUVyRSxNQUFNLG1CQUFtQixHQUFHO2dCQUMxQixFQUFFLEVBQUUsWUFBWTtnQkFDaEIsT0FBTyxFQUFFLDhDQUE4QztnQkFDdkQsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQztZQUVGLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDekIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7aUJBQ25ELENBQUM7YUFDSCxDQUFDLENBQUM7WUFFSCxZQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV6QywrREFBK0Q7WUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUNBQXVDLEVBQUU7UUFDaEQsVUFBVSxDQUFDO1lBQ1QsY0FBYyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDeEMsY0FBYyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDN0IsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztZQUNsRSxNQUFNLG1CQUFtQixHQUFHO2dCQUMxQixFQUFFLEVBQUUsWUFBWTtnQkFDaEIsT0FBTyxFQUFFLDhDQUE4QztnQkFDdkQsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQztZQUVGLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDekIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7aUJBQ25ELENBQUM7YUFDSCxDQUFDLENBQUM7WUFFSCxZQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV6Qyx1RUFBdUU7WUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxFQUFFO1FBQ3JCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLO1lBQ3BELDRFQUE0RTtZQUM1RSxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7WUFDekUsY0FBYyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFFN0IsdURBQXVEO1lBQ3ZELFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUM3QixHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO29CQUMxQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssZUFBZSxFQUFFLENBQUM7d0JBQ2xDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMscUJBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDO29CQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1lBRUgsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFN0QsTUFBTSxtQkFBbUIsR0FBRztnQkFDMUIsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLE9BQU8sRUFBRSw4Q0FBOEM7Z0JBQ3ZELEtBQUssRUFBRSxDQUFDO2dCQUNSLFlBQVksRUFBRSxFQUFFO2FBQ2pCLENBQUM7WUFFRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDckIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO2lCQUNuRCxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1lBRUgsWUFBWSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekMsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCx5RkFBeUY7WUFDekYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxLQUFLO1lBQzVELGNBQWMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRTdELE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLEVBQUUsRUFBRSxZQUFZO2dCQUNoQixPQUFPLEVBQUUsOENBQThDO2dCQUN2RCxLQUFLLEVBQUUsQ0FBQztnQkFDUixZQUFZLEVBQUU7b0JBQ1osMEJBQTBCLEVBQUUsSUFBSTtpQkFDakM7YUFDRixDQUFDO1lBRUYsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDbkQsQ0FBQzthQUNILENBQUMsQ0FBQztZQUVILG1FQUFtRTtZQUNuRSxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV6QywrRUFBK0U7WUFDL0UsWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUs7WUFDMUUsY0FBYyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDN0IsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFN0QsTUFBTSxtQkFBbUIsR0FBRztnQkFDMUIsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLE9BQU8sRUFBRSw4Q0FBOEM7Z0JBQ3ZELEtBQUssRUFBRSxDQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWiwwQkFBMEIsRUFBRSxJQUFJO29CQUNoQyxnQkFBZ0IsRUFBRSxDQUFDO2lCQUNwQjthQUNGLENBQUM7WUFFRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDckIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO2lCQUNuRCxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1lBRUgsWUFBWSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUMsZ0ZBQWdGO1lBQ2hGLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU5RCxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvd2FsbGV0JztcbmltcG9ydCB7IEtleUluZGljZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28va2V5Y2hhaW4nO1xuXG5kZXNjcmliZSgnV2FsbGV0IC0gVFNTIEFkZHJlc3MgVmVyaWZpY2F0aW9uIHdpdGggRGVyaXZhdGlvbiBQcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja0Jhc2VDb2luOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0RGF0YTogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55W107XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBzdXBwb3J0c1Rzczogc2lub24uc3R1YigpLnJldHVybnModHJ1ZSksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdzb2wnKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VkZHNhJyksXG4gICAgICBpc1ZhbGlkQWRkcmVzczogc2lub24uc3R1YigpLnJldHVybnModHJ1ZSksXG4gICAgICBpc1dhbGxldEFkZHJlc3M6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL2FwaS92Mi9zb2wvd2FsbGV0L3Rlc3Qtd2FsbGV0LWlkL2FkZHJlc3MnKSxcbiAgICB9O1xuXG4gICAgLy8gRGVmYXVsdCBrZXljaGFpbnMgc2V0dXAgLSBhbGwgd2l0aCBjb21tb25LZXljaGFpblxuICAgIG1vY2tLZXljaGFpbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndXNlci1rZXktaWQnLFxuICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgJzhlYTMyZWNhY2ZjODNlZmZiZDJlMjc5MGVlNDRmYTdjNTliNGQ4NmMyOWExMmYwOWZiNjEzZDgxOTVmOTNmNGUyMTg3NWNhZDNiOThhZGFkYTQwYzA0MGM1NGMzNTY5NDY3ZGY0MWEwMjA4ODFhNjE4NDA5NjM3ODcwMTg2MmJkJyxcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJ3Rlc3Qtc2VlZC11c2VyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnYmFja3VwLWtleS1pZCcsXG4gICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICBjb21tb25LZXljaGFpbjpcbiAgICAgICAgICAnOGVhMzJlY2FjZmM4M2VmZmJkMmUyNzkwZWU0NGZhN2M1OWI0ZDg2YzI5YTEyZjA5ZmI2MTNkODE5NWY5M2Y0ZTIxODc1Y2FkM2I5OGFkYWRhNDBjMDQwYzU0YzM1Njk0NjdkZjQxYTAyMDg4MWE2MTg0MDk2Mzc4NzAxODYyYmQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdiaXRnby1rZXktaWQnLFxuICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgJzhlYTMyZWNhY2ZjODNlZmZiZDJlMjc5MGVlNDRmYTdjNTliNGQ4NmMyOWExMmYwOWZiNjEzZDgxOTVmOTNmNGUyMTg3NWNhZDNiOThhZGFkYTQwYzA0MGM1NGMzNTY5NDY3ZGY0MWEwMjA4ODFhNjE4NDA5NjM3ODcwMTg2MmJkJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleUluZGV4ID0gbW9ja1dhbGxldERhdGEua2V5cy5pbmRleE9mKHBhcmFtcy5pZCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja0tleWNoYWluc1trZXlJbmRleF0pO1xuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBtb2NrV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICB3YWxsZXRWZXJzaW9uOiAzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG1vY2tCYXNlQ29pbiwgbW9ja1dhbGxldERhdGEpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0N1c3RvZGlhbCBUU1MgV2FsbGV0IC0gTm8gRGVyaXZhdGlvbiBQcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrV2FsbGV0RGF0YS50eXBlID0gJ2N1c3RvZGlhbCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBleHRyYWN0IGRlcml2YXRpb24gcHJlZml4IGZvciBjdXN0b2RpYWwgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgY3VzdG9kaWFsIHdhbGxldHMgZG9uJ3QgdXNlIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWRcbiAgICAgIC8vICh0aGVpciBjb21tb25LZXljaGFpbiBhbHJlYWR5IGFjY291bnRzIGZvciB0aGUgcHJlZml4KVxuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uQ2FsbCA9IG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3MuZ2V0Q2FsbCgwKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkRhdGEgPSB2ZXJpZmljYXRpb25DYWxsLmFyZ3NbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZpY2F0aW9uRGF0YS5kZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29sZC9TTUMgVFNTIFdhbGxldCAtIERlcml2YXRpb24gUHJlZml4IGZyb20gVXNlciBLZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tXYWxsZXREYXRhLnR5cGUgPSAnY29sZCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4dHJhY3QgZGVyaXZhdGlvbiBwcmVmaXggZnJvbSBVc2VyIGtleWNoYWluIGZvciBjb2xkL1NNQyB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja0FkZHJlc3NSZXNwb25zZSA9IHtcbiAgICAgICAgaWQ6ICdhZGRyZXNzLWlkJyxcbiAgICAgICAgYWRkcmVzczogJzZGanNoVnF3bURINzR3ZnhrWnJKYVJHRWpUZUpRTDRWaUw2WDE4VlhVTkFZJyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9O1xuXG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tBZGRyZXNzUmVzcG9uc2UpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrQmFzZUNvaW4uaXNXYWxsZXRBZGRyZXNzLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwIH0pO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBpc1dhbGxldEFkZHJlc3Mgd2FzIGNhbGxlZCB3aXRoIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgZnJvbSBVc2VyIGtleWNoYWluXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25DYWxsID0gbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5nZXRDYWxsKDApO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uRGF0YSA9IHZlcmlmaWNhdGlvbkNhbGwuYXJnc1swXTtcblxuICAgICAgdmVyaWZpY2F0aW9uRGF0YS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCcpO1xuICAgICAgdmVyaWZpY2F0aW9uRGF0YS5kZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLnNob3VsZC5lcXVhbCgndGVzdC1zZWVkLXVzZXInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBncmFjZWZ1bGx5IGZvciBjb2xkIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlbW92ZSBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkIGZyb20gVXNlciBrZXljaGFpblxuICAgICAgbW9ja0tleWNoYWluc1tLZXlJbmRpY2VzLlVTRVJdLmRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgaWYgc2VlZCBpcyBtaXNzaW5nXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25DYWxsID0gbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5nZXRDYWxsKDApO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uRGF0YSA9IHZlcmlmaWNhdGlvbkNhbGwuYXJnc1swXTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZmljYXRpb25EYXRhLmRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdOb24tVFNTIFdhbGxldCAtIE5vIERlcml2YXRpb24gUHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja1dhbGxldERhdGEubXVsdGlzaWdUeXBlID0gJ29uY2hhaW4nO1xuICAgICAgbW9ja1dhbGxldERhdGEudHlwZSA9ICdjb2xkJztcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4sIG1vY2tXYWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGV4dHJhY3QgZGVyaXZhdGlvbiBwcmVmaXggZm9yIG5vbi1UU1Mgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBpcyBub3Qgc2V0IGZvciBub24tVFNTIHdhbGxldHNcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkNhbGwgPSBtb2NrQmFzZUNvaW4uaXNXYWxsZXRBZGRyZXNzLmdldENhbGwoMCk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25EYXRhID0gdmVyaWZpY2F0aW9uQ2FsbC5hcmdzWzBdO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmaWNhdGlvbkRhdGEuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VkZ2UgQ2FzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgd2FsbGV0IHdpdGhvdXQgVVNFUiBrZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNldCBrZXlzIGFycmF5IHRvIG9ubHkgaGF2ZSBiYWNrdXAga2V5Y2hhaW4gKG5vIFVTRVIga2V5Y2hhaW4gYXQgaW5kZXggMClcbiAgICAgIG1vY2tXYWxsZXREYXRhLmtleXMgPSBbJ2JhY2t1cC1rZXktaWQnXTsgLy8gT25seSBiYWNrdXAga2V5Y2hhaW4sIG5vIFVTRVJcbiAgICAgIG1vY2tXYWxsZXREYXRhLnR5cGUgPSAnY29sZCc7XG5cbiAgICAgIC8vIFVwZGF0ZSBtb2NrIHRvIHJldHVybiBiYWNrdXAga2V5Y2hhaW4gd2hlbiByZXF1ZXN0ZWRcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocGFyYW1zLmlkID09PSAnYmFja3VwLWtleS1pZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja0tleWNoYWluc1tLZXlJbmRpY2VzLkJBQ0tVUF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcblxuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrQWRkcmVzc1Jlc3BvbnNlKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgbW9ja0Jhc2VDb2luLmlzV2FsbGV0QWRkcmVzcy5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCB9KTtcblxuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uQ2FsbCA9IG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3MuZ2V0Q2FsbCgwKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkRhdGEgPSB2ZXJpZmljYXRpb25DYWxsLmFyZ3NbMF07XG4gICAgICAvLyBTaG91bGQgbm90IGhhdmUgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBpZiBVU0VSIGtleWNoYWluIGRvZXNuJ3QgZXhpc3QgaW4ga2V5cyBhcnJheVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmaWNhdGlvbkRhdGEuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tXYWxsZXREYXRhLnR5cGUgPSAnY29sZCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luLCBtb2NrV2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAnYWRkcmVzcy1pZCcsXG4gICAgICAgIGFkZHJlc3M6ICc2RmpzaFZxd21ESDc0d2Z4a1pySmFSR0VqVGVKUUw0VmlMNlgxOFZYVU5BWScsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja0FkZHJlc3NSZXNwb25zZSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNob3VsZCBza2lwIHZlcmlmaWNhdGlvbiB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWVcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAgfSk7XG5cbiAgICAgIC8vIGlzV2FsbGV0QWRkcmVzcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWVcbiAgICAgIG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3Muc2hvdWxkLm5vdC5oYXZlLmJlZW4uY2FsbGVkO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZm9yd2FyZGVyVmVyc2lvbiAxIHdpdGggcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrV2FsbGV0RGF0YS50eXBlID0gJ2NvbGQnO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG1vY2tCYXNlQ29pbiwgbW9ja1dhbGxldERhdGEpO1xuXG4gICAgICBjb25zdCBtb2NrQWRkcmVzc1Jlc3BvbnNlID0ge1xuICAgICAgICBpZDogJ2FkZHJlc3MtaWQnLFxuICAgICAgICBhZGRyZXNzOiAnNkZqc2hWcXdtREg3NHdmeGtackphUkdFalRlSlFMNFZpTDZYMThWWFVOQVknLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja0FkZHJlc3NSZXNwb25zZSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIG1vY2tCYXNlQ29pbi5pc1dhbGxldEFkZHJlc3MucmVzb2x2ZXModHJ1ZSk7XG5cbiAgICAgIC8vIFNob3VsZCB2ZXJpZnkgZXZlbiB3aXRoIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIHdoZW4gZm9yd2FyZGVyVmVyc2lvbiBpcyAxXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pO1xuXG4gICAgICBtb2NrQmFzZUNvaW4uaXNXYWxsZXRBZGRyZXNzLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=lightning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../test/unit/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}