@bitgo/abstract-utxo 13.1.1 → 13.2.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 (38) hide show
  1. package/dist/cjs/src/impl/btc/index.d.ts +1 -0
  2. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -1
  3. package/dist/cjs/src/impl/btc/index.js +2 -1
  4. package/dist/cjs/src/impl/btc/tbtcstxsignet.d.ts +10 -0
  5. package/dist/cjs/src/impl/btc/tbtcstxsignet.d.ts.map +1 -0
  6. package/dist/cjs/src/impl/btc/tbtcstxsignet.js +18 -0
  7. package/dist/cjs/src/names.d.ts +2 -2
  8. package/dist/cjs/src/names.d.ts.map +1 -1
  9. package/dist/cjs/src/names.js +6 -1
  10. package/dist/cjs/src/recovery/index.d.ts +1 -0
  11. package/dist/cjs/src/recovery/index.d.ts.map +1 -1
  12. package/dist/cjs/src/recovery/index.js +2 -1
  13. package/dist/cjs/src/recovery/safeRecovery.d.ts +19 -0
  14. package/dist/cjs/src/recovery/safeRecovery.d.ts.map +1 -0
  15. package/dist/cjs/src/recovery/safeRecovery.js +70 -0
  16. package/dist/cjs/test/unit/recovery/safeRecovery.d.ts +2 -0
  17. package/dist/cjs/test/unit/recovery/safeRecovery.d.ts.map +1 -0
  18. package/dist/cjs/test/unit/recovery/safeRecovery.js +187 -0
  19. package/dist/cjs/test/unit/tbtcstxsignet.d.ts +2 -0
  20. package/dist/cjs/test/unit/tbtcstxsignet.d.ts.map +1 -0
  21. package/dist/cjs/test/unit/tbtcstxsignet.js +61 -0
  22. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  23. package/dist/esm/impl/btc/index.d.ts +1 -0
  24. package/dist/esm/impl/btc/index.d.ts.map +1 -1
  25. package/dist/esm/impl/btc/index.js +2 -1
  26. package/dist/esm/impl/btc/tbtcstxsignet.d.ts +10 -0
  27. package/dist/esm/impl/btc/tbtcstxsignet.d.ts.map +1 -0
  28. package/dist/esm/impl/btc/tbtcstxsignet.js +14 -0
  29. package/dist/esm/names.d.ts +2 -2
  30. package/dist/esm/names.d.ts.map +1 -1
  31. package/dist/esm/names.js +6 -1
  32. package/dist/esm/recovery/index.d.ts +1 -0
  33. package/dist/esm/recovery/index.d.ts.map +1 -1
  34. package/dist/esm/recovery/index.js +2 -1
  35. package/dist/esm/recovery/safeRecovery.d.ts +19 -0
  36. package/dist/esm/recovery/safeRecovery.d.ts.map +1 -0
  37. package/dist/esm/recovery/safeRecovery.js +66 -0
  38. package/package.json +11 -10
@@ -5,5 +5,6 @@ export * from './tbtcsig';
5
5
  export * from './tbtcbgsig';
6
6
  export * from './tbtcstx';
7
7
  export * from './tbtcstxprivate1';
8
+ export * from './tbtcstxsignet';
8
9
  export * from './inscriptionBuilder';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/impl/btc/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/impl/btc/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
@@ -21,5 +21,6 @@ __exportStar(require("./tbtcsig"), exports);
21
21
  __exportStar(require("./tbtcbgsig"), exports);
22
22
  __exportStar(require("./tbtcstx"), exports);
23
23
  __exportStar(require("./tbtcstxprivate1"), exports);
24
+ __exportStar(require("./tbtcstxsignet"), exports);
24
25
  __exportStar(require("./inscriptionBuilder"), exports);
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC9idGMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix5Q0FBdUI7QUFDdkIsMENBQXdCO0FBQ3hCLDRDQUEwQjtBQUMxQiw4Q0FBNEI7QUFDNUIsNENBQTBCO0FBQzFCLG9EQUFrQztBQUNsQyx1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2J0Yyc7XG5leHBvcnQgKiBmcm9tICcuL3RidGMnO1xuZXhwb3J0ICogZnJvbSAnLi90YnRjNCc7XG5leHBvcnQgKiBmcm9tICcuL3RidGNzaWcnO1xuZXhwb3J0ICogZnJvbSAnLi90YnRjYmdzaWcnO1xuZXhwb3J0ICogZnJvbSAnLi90YnRjc3R4JztcbmV4cG9ydCAqIGZyb20gJy4vdGJ0Y3N0eHByaXZhdGUxJztcbmV4cG9ydCAqIGZyb20gJy4vaW5zY3JpcHRpb25CdWlsZGVyJztcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC9idGMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix5Q0FBdUI7QUFDdkIsMENBQXdCO0FBQ3hCLDRDQUEwQjtBQUMxQiw4Q0FBNEI7QUFDNUIsNENBQTBCO0FBQzFCLG9EQUFrQztBQUNsQyxrREFBZ0M7QUFDaEMsdURBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idGMnO1xuZXhwb3J0ICogZnJvbSAnLi90YnRjJztcbmV4cG9ydCAqIGZyb20gJy4vdGJ0YzQnO1xuZXhwb3J0ICogZnJvbSAnLi90YnRjc2lnJztcbmV4cG9ydCAqIGZyb20gJy4vdGJ0Y2Jnc2lnJztcbmV4cG9ydCAqIGZyb20gJy4vdGJ0Y3N0eCc7XG5leHBvcnQgKiBmcm9tICcuL3RidGNzdHhwcml2YXRlMSc7XG5leHBvcnQgKiBmcm9tICcuL3RidGNzdHhzaWduZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnNjcmlwdGlvbkJ1aWxkZXInO1xuIl19
@@ -0,0 +1,10 @@
1
+ import { BitGoBase } from '@bitgo/sdk-core';
2
+ import { UtxoCoinName, WasmUtxoCoinName } from '../../names';
3
+ import { Tbtc } from './tbtc';
4
+ export declare class Tbtcstxsignet extends Tbtc {
5
+ readonly name: UtxoCoinName;
6
+ constructor(bitgo: BitGoBase);
7
+ static createInstance(bitgo: BitGoBase): Tbtcstxsignet;
8
+ get wasmName(): WasmUtxoCoinName;
9
+ }
10
+ //# sourceMappingURL=tbtcstxsignet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tbtcstxsignet.d.ts","sourceRoot":"","sources":["../../../../../src/impl/btc/tbtcstxsignet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,aAAc,SAAQ,IAAI;IACrC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAmB;gBAElC,KAAK,EAAE,SAAS;IAI5B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa;IAItD,IAAa,QAAQ,IAAI,gBAAgB,CAExC;CACF"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tbtcstxsignet = void 0;
4
+ const tbtc_1 = require("./tbtc");
5
+ class Tbtcstxsignet extends tbtc_1.Tbtc {
6
+ constructor(bitgo) {
7
+ super(bitgo);
8
+ this.name = 'tbtcstxsignet';
9
+ }
10
+ static createInstance(bitgo) {
11
+ return new Tbtcstxsignet(bitgo);
12
+ }
13
+ get wasmName() {
14
+ return 'tbtcsig';
15
+ }
16
+ }
17
+ exports.Tbtcstxsignet = Tbtcstxsignet;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGJ0Y3N0eHNpZ25ldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL2J0Yy90YnRjc3R4c2lnbmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLGlDQUE4QjtBQUU5QixNQUFhLGFBQWMsU0FBUSxXQUFJO0lBR3JDLFlBQVksS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSE4sU0FBSSxHQUFpQixlQUFlLENBQUM7SUFJOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBYSxRQUFRO1FBQ25CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQWRELHNDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVXR4b0NvaW5OYW1lLCBXYXNtVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG5pbXBvcnQgeyBUYnRjIH0gZnJvbSAnLi90YnRjJztcblxuZXhwb3J0IGNsYXNzIFRidGNzdHhzaWduZXQgZXh0ZW5kcyBUYnRjIHtcbiAgcmVhZG9ubHkgbmFtZTogVXR4b0NvaW5OYW1lID0gJ3RidGNzdHhzaWduZXQnO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFRidGNzdHhzaWduZXQge1xuICAgIHJldHVybiBuZXcgVGJ0Y3N0eHNpZ25ldChiaXRnbyk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgd2FzbU5hbWUoKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gICAgcmV0dXJuICd0YnRjc2lnJztcbiAgfVxufVxuIl19
@@ -1,9 +1,9 @@
1
1
  import { type CoinName } from '@bitgo/wasm-utxo';
2
2
  export type WasmUtxoCoinName = CoinName;
3
3
  export declare const utxoCoinsMainnet: readonly ["btc", "bch", "bcha", "bsv", "btg", "dash", "doge", "ltc", "pearl", "zec"];
4
- export declare const utxoCoinsTestnet: readonly ["tbtc", "tbtc4", "tbtcsig", "tbtcbgsig", "tbtcstx", "tbtcstxprivate1", "tbch", "tbcha", "tbsv", "tbtg", "tdash", "tdoge", "tltc", "tpearl", "tzec"];
4
+ export declare const utxoCoinsTestnet: readonly ["tbtc", "tbtc4", "tbtcsig", "tbtcbgsig", "tbtcstx", "tbtcstxprivate1", "tbtcstxsignet", "tbch", "tbcha", "tbsv", "tbtg", "tdash", "tdoge", "tltc", "tpearl", "tzec"];
5
5
  export type UtxoCoinNameMainnet = (typeof utxoCoinsMainnet)[number];
6
- export type UtxoCoinNameTestnet = `t${UtxoCoinNameMainnet}` | 'tbtcsig' | 'tbtc4' | 'tbtcbgsig' | 'tbtcstx' | 'tbtcstxprivate1';
6
+ export type UtxoCoinNameTestnet = `t${UtxoCoinNameMainnet}` | 'tbtcsig' | 'tbtc4' | 'tbtcbgsig' | 'tbtcstx' | 'tbtcstxprivate1' | 'tbtcstxsignet';
7
7
  export type UtxoCoinName = UtxoCoinNameMainnet | UtxoCoinNameTestnet;
8
8
  export declare function toWasmUtxoCoinName(coinName: UtxoCoinName | WasmUtxoCoinName): WasmUtxoCoinName;
9
9
  export declare function isUtxoCoinNameMainnet(coinName: string): coinName is UtxoCoinNameMainnet;
@@ -1 +1 @@
1
- {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../src/names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,eAAO,MAAM,gBAAgB,sFAAuF,CAAC;AACrH,eAAO,MAAM,gBAAgB,+JAgBnB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAC3B,IAAI,mBAAmB,EAAE,GACzB,SAAS,GACT,OAAO,GACP,WAAW,GACX,SAAS,GACT,iBAAiB,CAAC;AACtB,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAErE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,CAK9F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAc9E;AA2BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAwBtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../src/names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,eAAO,MAAM,gBAAgB,sFAAuF,CAAC;AACrH,eAAO,MAAM,gBAAgB,gLAiBnB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAC3B,IAAI,mBAAmB,EAAE,GACzB,SAAS,GACT,OAAO,GACP,WAAW,GACX,SAAS,GACT,iBAAiB,GACjB,eAAe,CAAC;AACpB,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAErE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,CAK9F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAe9E;AA2BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CA4BtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D"}
@@ -18,6 +18,7 @@ exports.utxoCoinsTestnet = [
18
18
  'tbtcbgsig',
19
19
  'tbtcstx',
20
20
  'tbtcstxprivate1',
21
+ 'tbtcstxsignet',
21
22
  'tbch',
22
23
  'tbcha',
23
24
  'tbsv',
@@ -53,6 +54,7 @@ function getMainnetCoinName(coinName) {
53
54
  case 'tbtcbgsig':
54
55
  case 'tbtcstx':
55
56
  case 'tbtcstxprivate1':
57
+ case 'tbtcstxsignet':
56
58
  return 'btc';
57
59
  default:
58
60
  return coinName.slice(1);
@@ -86,6 +88,9 @@ function getFullNameFromCoinName(coinName) {
86
88
  if (coinName === 'tbtcstxprivate1') {
87
89
  return 'Stacks Bitcoin (Private-1 Regtest)';
88
90
  }
91
+ if (coinName === 'tbtcstxsignet') {
92
+ return 'Stacks Bitcoin (Signet)';
93
+ }
89
94
  let prefix;
90
95
  switch (coinName) {
91
96
  case 'tbtc4':
@@ -111,4 +116,4 @@ function isTestnetCoin(coinName) {
111
116
  function isMainnetCoin(coinName) {
112
117
  return isUtxoCoinNameMainnet(coinName);
113
118
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUNBLGdEQUtDO0FBRUQsc0RBRUM7QUFFRCxzREFFQztBQUVELHdDQUVDO0FBRUQsZ0RBY0M7QUEyQkQsMERBd0JDO0FBRUQsc0NBRUM7QUFFRCxzQ0FFQztBQTdIRCxnREFBNkQ7QUFJaEQsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBQ3hHLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUIsTUFBTTtJQUNOLE9BQU87SUFDUCxTQUFTO0lBQ1QsV0FBVztJQUNYLFNBQVM7SUFDVCxpQkFBaUI7SUFDakIsTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0NBQ0UsQ0FBQztBQVlYLFNBQWdCLGtCQUFrQixDQUFDLFFBQXlDO0lBQzFFLElBQUksQ0FBQyxJQUFBLHNCQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsUUFBUSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyx3QkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBK0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLHdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxRQUFnQjtJQUM3QyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxRQUFzQjtJQUN2RCxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxpQkFBaUI7WUFDcEIsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQTZCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxRQUFzQjtJQUM1RCxJQUFJLFFBQVEsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sb0NBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksTUFBYyxDQUFDO0lBQ25CLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxPQUFPO1lBQ1YsTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUNyQixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQzFCLE1BQU07UUFDUixLQUFLLFdBQVc7WUFDZCxNQUFNLEdBQUcsZUFBZSxDQUFDO1lBQ3pCLE1BQU07UUFDUixLQUFLLFNBQVM7WUFDWixNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ25CLE1BQU07UUFDUjtZQUNFLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sTUFBTSxHQUFHLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxRQUFzQjtJQUNsRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBc0I7SUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNDb2luTmFtZSwgdHlwZSBDb2luTmFtZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5leHBvcnQgdHlwZSBXYXNtVXR4b0NvaW5OYW1lID0gQ29pbk5hbWU7XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnNNYWlubmV0ID0gWydidGMnLCAnYmNoJywgJ2JjaGEnLCAnYnN2JywgJ2J0ZycsICdkYXNoJywgJ2RvZ2UnLCAnbHRjJywgJ3BlYXJsJywgJ3plYyddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHV0eG9Db2luc1Rlc3RuZXQgPSBbXG4gICd0YnRjJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNzaWcnLFxuICAndGJ0Y2Jnc2lnJyxcbiAgJ3RidGNzdHgnLFxuICAndGJ0Y3N0eHByaXZhdGUxJyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPVxuICB8IGB0JHtVdHhvQ29pbk5hbWVNYWlubmV0fWBcbiAgfCAndGJ0Y3NpZydcbiAgfCAndGJ0YzQnXG4gIHwgJ3RidGNiZ3NpZydcbiAgfCAndGJ0Y3N0eCdcbiAgfCAndGJ0Y3N0eHByaXZhdGUxJztcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZSA9IFV0eG9Db2luTmFtZU1haW5uZXQgfCBVdHhvQ29pbk5hbWVUZXN0bmV0O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtVXR4b0NvaW5OYW1lKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUgfCBXYXNtVXR4b0NvaW5OYW1lKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gIGlmICghaXNDb2luTmFtZShjb2luTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvaW4gJHtjb2luTmFtZX0gaXMgbm90IHN1cHBvcnRlZCBieSB3YXNtLXV0eG9gKTtcbiAgfVxuICByZXR1cm4gY29pbk5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgY2FzZSAndGJ0Y3N0eCc6XG4gICAgY2FzZSAndGJ0Y3N0eHByaXZhdGUxJzpcbiAgICAgIHJldHVybiAnYnRjJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvaW5OYW1lLnNsaWNlKDEpIGFzIFV0eG9Db2luTmFtZU1haW5uZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFzZU5hbWVGcm9tTWFpbm5ldChjb2luTmFtZTogVXR4b0NvaW5OYW1lTWFpbm5ldCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdidGMnOlxuICAgICAgcmV0dXJuICdCaXRjb2luJztcbiAgICBjYXNlICdiY2gnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIENhc2gnO1xuICAgIGNhc2UgJ2JjaGEnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIEFCQyc7XG4gICAgY2FzZSAnYnRnJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBHb2xkJztcbiAgICBjYXNlICdic3YnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIFNWJztcbiAgICBjYXNlICdkYXNoJzpcbiAgICAgIHJldHVybiAnRGFzaCc7XG4gICAgY2FzZSAnZG9nZSc6XG4gICAgICByZXR1cm4gJ0RvZ2Vjb2luJztcbiAgICBjYXNlICdsdGMnOlxuICAgICAgcmV0dXJuICdMaXRlY29pbic7XG4gICAgY2FzZSAncGVhcmwnOlxuICAgICAgcmV0dXJuICdQZWFybCc7XG4gICAgY2FzZSAnemVjJzpcbiAgICAgIHJldHVybiAnWkNhc2gnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsTmFtZUZyb21Db2luTmFtZShjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogc3RyaW5nIHtcbiAgaWYgKGNvaW5OYW1lID09PSAndGJ0Y3N0eHByaXZhdGUxJykge1xuICAgIHJldHVybiAnU3RhY2tzIEJpdGNvaW4gKFByaXZhdGUtMSBSZWd0ZXN0KSc7XG4gIH1cblxuICBsZXQgcHJlZml4OiBzdHJpbmc7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICd0YnRjNCc6XG4gICAgICBwcmVmaXggPSAnVGVzdG5ldDQgJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgICAgcHJlZml4ID0gJ1B1YmxpYyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICBwcmVmaXggPSAnQml0R28gU2lnbmV0ICc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0YnRjc3R4JzpcbiAgICAgIHByZWZpeCA9ICdTdGFja3MgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmVmaXggPSBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpID8gJ1Rlc3RuZXQgJyA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHByZWZpeCArIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RuZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01haW5uZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lTWFpbm5ldChjb2luTmFtZSk7XG59XG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUNBLGdEQUtDO0FBRUQsc0RBRUM7QUFFRCxzREFFQztBQUVELHdDQUVDO0FBRUQsZ0RBZUM7QUEyQkQsMERBNEJDO0FBRUQsc0NBRUM7QUFFRCxzQ0FFQztBQXBJRCxnREFBNkQ7QUFJaEQsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBQ3hHLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUIsTUFBTTtJQUNOLE9BQU87SUFDUCxTQUFTO0lBQ1QsV0FBVztJQUNYLFNBQVM7SUFDVCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtDQUNFLENBQUM7QUFhWCxTQUFnQixrQkFBa0IsQ0FBQyxRQUF5QztJQUMxRSxJQUFJLENBQUMsSUFBQSxzQkFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLFFBQVEsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLFFBQWdCO0lBQ3BELE9BQU8sd0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQStCLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyx3QkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBK0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsUUFBZ0I7SUFDN0MsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsUUFBc0I7SUFDdkQsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssaUJBQWlCLENBQUM7UUFDdkIsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2Y7WUFDRSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUF3QixDQUFDO0lBQ3BELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxRQUE2QjtJQUMzRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssS0FBSztZQUNSLE9BQU8sU0FBUyxDQUFDO1FBQ25CLEtBQUssS0FBSztZQUNSLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLEtBQUssTUFBTTtZQUNULE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLEtBQUssS0FBSztZQUNSLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLEtBQUssS0FBSztZQUNSLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLEtBQUssTUFBTTtZQUNULE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssTUFBTTtZQUNULE9BQU8sVUFBVSxDQUFDO1FBQ3BCLEtBQUssS0FBSztZQUNSLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsUUFBc0I7SUFDNUQsSUFBSSxRQUFRLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLG9DQUFvQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLFFBQVEsS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUNqQyxPQUFPLHlCQUF5QixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLE1BQWMsQ0FBQztJQUNuQixRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssT0FBTztZQUNWLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDckIsTUFBTTtRQUNSLEtBQUssU0FBUztZQUNaLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUMxQixNQUFNO1FBQ1IsS0FBSyxXQUFXO1lBQ2QsTUFBTSxHQUFHLGVBQWUsQ0FBQztZQUN6QixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixNQUFNO1FBQ1I7WUFDRSxNQUFNLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBc0I7SUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLFFBQXNCO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQ29pbk5hbWUsIHR5cGUgQ29pbk5hbWUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuZXhwb3J0IHR5cGUgV2FzbVV0eG9Db2luTmFtZSA9IENvaW5OYW1lO1xuXG5leHBvcnQgY29uc3QgdXR4b0NvaW5zTWFpbm5ldCA9IFsnYnRjJywgJ2JjaCcsICdiY2hhJywgJ2JzdicsICdidGcnLCAnZGFzaCcsICdkb2dlJywgJ2x0YycsICdwZWFybCcsICd6ZWMnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCB1dHhvQ29pbnNUZXN0bmV0ID0gW1xuICAndGJ0YycsXG4gICd0YnRjNCcsXG4gICd0YnRjc2lnJyxcbiAgJ3RidGNiZ3NpZycsXG4gICd0YnRjc3R4JyxcbiAgJ3RidGNzdHhwcml2YXRlMScsXG4gICd0YnRjc3R4c2lnbmV0JyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPVxuICB8IGB0JHtVdHhvQ29pbk5hbWVNYWlubmV0fWBcbiAgfCAndGJ0Y3NpZydcbiAgfCAndGJ0YzQnXG4gIHwgJ3RidGNiZ3NpZydcbiAgfCAndGJ0Y3N0eCdcbiAgfCAndGJ0Y3N0eHByaXZhdGUxJ1xuICB8ICd0YnRjc3R4c2lnbmV0JztcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZSA9IFV0eG9Db2luTmFtZU1haW5uZXQgfCBVdHhvQ29pbk5hbWVUZXN0bmV0O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtVXR4b0NvaW5OYW1lKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUgfCBXYXNtVXR4b0NvaW5OYW1lKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gIGlmICghaXNDb2luTmFtZShjb2luTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvaW4gJHtjb2luTmFtZX0gaXMgbm90IHN1cHBvcnRlZCBieSB3YXNtLXV0eG9gKTtcbiAgfVxuICByZXR1cm4gY29pbk5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgY2FzZSAndGJ0Y3N0eCc6XG4gICAgY2FzZSAndGJ0Y3N0eHByaXZhdGUxJzpcbiAgICBjYXNlICd0YnRjc3R4c2lnbmV0JzpcbiAgICAgIHJldHVybiAnYnRjJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvaW5OYW1lLnNsaWNlKDEpIGFzIFV0eG9Db2luTmFtZU1haW5uZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFzZU5hbWVGcm9tTWFpbm5ldChjb2luTmFtZTogVXR4b0NvaW5OYW1lTWFpbm5ldCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdidGMnOlxuICAgICAgcmV0dXJuICdCaXRjb2luJztcbiAgICBjYXNlICdiY2gnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIENhc2gnO1xuICAgIGNhc2UgJ2JjaGEnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIEFCQyc7XG4gICAgY2FzZSAnYnRnJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBHb2xkJztcbiAgICBjYXNlICdic3YnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIFNWJztcbiAgICBjYXNlICdkYXNoJzpcbiAgICAgIHJldHVybiAnRGFzaCc7XG4gICAgY2FzZSAnZG9nZSc6XG4gICAgICByZXR1cm4gJ0RvZ2Vjb2luJztcbiAgICBjYXNlICdsdGMnOlxuICAgICAgcmV0dXJuICdMaXRlY29pbic7XG4gICAgY2FzZSAncGVhcmwnOlxuICAgICAgcmV0dXJuICdQZWFybCc7XG4gICAgY2FzZSAnemVjJzpcbiAgICAgIHJldHVybiAnWkNhc2gnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsTmFtZUZyb21Db2luTmFtZShjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogc3RyaW5nIHtcbiAgaWYgKGNvaW5OYW1lID09PSAndGJ0Y3N0eHByaXZhdGUxJykge1xuICAgIHJldHVybiAnU3RhY2tzIEJpdGNvaW4gKFByaXZhdGUtMSBSZWd0ZXN0KSc7XG4gIH1cblxuICBpZiAoY29pbk5hbWUgPT09ICd0YnRjc3R4c2lnbmV0Jykge1xuICAgIHJldHVybiAnU3RhY2tzIEJpdGNvaW4gKFNpZ25ldCknO1xuICB9XG5cbiAgbGV0IHByZWZpeDogc3RyaW5nO1xuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgICAgcHJlZml4ID0gJ1Rlc3RuZXQ0ICc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0YnRjc2lnJzpcbiAgICAgIHByZWZpeCA9ICdQdWJsaWMgU2lnbmV0ICc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0YnRjYmdzaWcnOlxuICAgICAgcHJlZml4ID0gJ0JpdEdvIFNpZ25ldCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y3N0eCc6XG4gICAgICBwcmVmaXggPSAnU3RhY2tzICc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcHJlZml4ID0gaXNVdHhvQ29pbk5hbWVUZXN0bmV0KGNvaW5OYW1lKSA/ICdUZXN0bmV0ICcgOiAnJztcbiAgfVxuXG4gIHJldHVybiBwcmVmaXggKyBnZXRCYXNlTmFtZUZyb21NYWlubmV0KGdldE1haW5uZXRDb2luTmFtZShjb2luTmFtZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0bmV0Q29pbihjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYWlubmV0Q29pbihjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpO1xufVxuIl19
@@ -4,4 +4,5 @@ export * from './baseApi';
4
4
  export * from './coingeckoApi';
5
5
  export * from './crossChainRecovery';
6
6
  export * from './mempoolApi';
7
+ export * from './safeRecovery';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/recovery/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/recovery/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -20,4 +20,5 @@ __exportStar(require("./baseApi"), exports);
20
20
  __exportStar(require("./coingeckoApi"), exports);
21
21
  __exportStar(require("./crossChainRecovery"), exports);
22
22
  __exportStar(require("./mempoolApi"), exports);
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsNENBQTBCO0FBQzFCLGlEQUErQjtBQUMvQix1REFBcUM7QUFDckMsK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9SZWNvdmVyeVByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vYmFja3VwS2V5UmVjb3ZlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlQXBpJztcbmV4cG9ydCAqIGZyb20gJy4vY29pbmdlY2tvQXBpJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jvc3NDaGFpblJlY292ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbWVtcG9vbEFwaSc7XG4iXX0=
23
+ __exportStar(require("./safeRecovery"), exports);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsNENBQTBCO0FBQzFCLGlEQUErQjtBQUMvQix1REFBcUM7QUFDckMsK0NBQTZCO0FBQzdCLGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vUmVjb3ZlcnlQcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2JhY2t1cEtleVJlY292ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZUFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2NvaW5nZWNrb0FwaSc7XG5leHBvcnQgKiBmcm9tICcuL2Nyb3NzQ2hhaW5SZWNvdmVyeSc7XG5leHBvcnQgKiBmcm9tICcuL21lbXBvb2xBcGknO1xuZXhwb3J0ICogZnJvbSAnLi9zYWZlUmVjb3ZlcnknO1xuIl19
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @prettier
3
+ *
4
+ * Safe (slot-1) UTXO recovery adapter: maps a Safe child triplet onto the existing
5
+ * `backupKeyRecovery` engine for funding checks and recovery.
6
+ */
7
+ import { SafeChildTriplet, SafeChildTripletPubs } from '@bitgo/sdk-lib-safes';
8
+ import { AbstractUtxoCoin } from '../abstractUtxoCoin';
9
+ import { backupKeyRecovery, RecoverParams } from './backupKeyRecovery';
10
+ export type SafeWalletFundingStatus = 'funded' | 'empty' | 'unknown';
11
+ export type SafeWalletRecoveryMode = 'signed' | 'unsigned';
12
+ export type SafeRecoveryOptionsBase = Pick<RecoverParams, 'scan' | 'apiKey' | 'recoveryProvider'>;
13
+ export type RecoverSafeWalletOptions = {
14
+ mode: SafeWalletRecoveryMode;
15
+ recoveryDestination: string;
16
+ } & SafeRecoveryOptionsBase & Pick<RecoverParams, 'feeRate'>;
17
+ export declare function determineSafeWalletFunding(coin: AbstractUtxoCoin, triplet: SafeChildTripletPubs, options?: SafeRecoveryOptionsBase): Promise<SafeWalletFundingStatus>;
18
+ export declare function recoverSafeWallet(coin: AbstractUtxoCoin, triplet: SafeChildTriplet, options: RecoverSafeWalletOptions): ReturnType<typeof backupKeyRecovery>;
19
+ //# sourceMappingURL=safeRecovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeRecovery.d.ts","sourceRoot":"","sources":["../../../../src/recovery/safeRecovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EAGrB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAyC,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9G,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3D,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,kBAAkB,CAAC,CAAC;AAElG,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,uBAAuB,GACzB,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAgCjC,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAqBlC;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,wBAAwB,GAChC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CActC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.determineSafeWalletFunding = determineSafeWalletFunding;
4
+ exports.recoverSafeWallet = recoverSafeWallet;
5
+ /**
6
+ * @prettier
7
+ *
8
+ * Safe (slot-1) UTXO recovery adapter: maps a Safe child triplet onto the existing
9
+ * `backupKeyRecovery` engine for funding checks and recovery.
10
+ */
11
+ const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
12
+ const sdk_core_1 = require("@bitgo/sdk-core");
13
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
14
+ const address_1 = require("../address");
15
+ const backupKeyRecovery_1 = require("./backupKeyRecovery");
16
+ function withSafeRecoveryGuard(coin, options, fn) {
17
+ (0, sdk_lib_safes_1.assertSafeRecoverySupported)((0, sdk_lib_safes_1.onchainSlotForCoin)(coin.getChain()), 'utxo', coin.getChain());
18
+ if (options.scan !== undefined && options.scan <= 0) {
19
+ throw new Error('scan must be a positive integer');
20
+ }
21
+ return fn();
22
+ }
23
+ /**
24
+ * Derive the wallet's own first external address to satisfy `backupKeyRecovery`'s
25
+ * destination validation. Never broadcast, never returned to the caller.
26
+ */
27
+ function synthesizeDestination(coin, triplet) {
28
+ const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from({
29
+ triple: [triplet.user.pub, triplet.backup.pub, triplet.bitgo.pub].map((pub) => wasm_utxo_1.BIP32.from(pub)),
30
+ derivationPrefixes: ['m/0/0', 'm/0/0', 'm/0/0'],
31
+ });
32
+ return (0, address_1.generateAddressWithChainAndIndex)(coin.wasmName, walletKeys, wasm_utxo_1.fixedScriptWallet.ChainCode.value('p2sh', 'external'), 0, undefined);
33
+ }
34
+ async function determineSafeWalletFunding(coin, triplet, options = {}) {
35
+ return withSafeRecoveryGuard(coin, options, async () => {
36
+ const recoveryParams = {
37
+ ...options,
38
+ recoveryDestination: synthesizeDestination(coin, triplet),
39
+ userKey: triplet.user.pub,
40
+ backupKey: triplet.backup.pub,
41
+ bitgoKey: triplet.bitgo.pub,
42
+ ignoreAddressTypes: [],
43
+ feeRate: backupKeyRecovery_1.DEFAULT_RECOVERY_FEERATE_SAT_VBYTE_V2,
44
+ };
45
+ try {
46
+ const result = await coin.recover(recoveryParams);
47
+ return result && 'txHex' in result && typeof result.txHex === 'string' && result.txHex.length > 0
48
+ ? 'funded'
49
+ : 'unknown';
50
+ }
51
+ catch (err) {
52
+ return err instanceof sdk_core_1.ErrorNoInputToRecover ? 'empty' : 'unknown';
53
+ }
54
+ });
55
+ }
56
+ async function recoverSafeWallet(coin, triplet, options) {
57
+ return withSafeRecoveryGuard(coin, options, async () => {
58
+ const { mode, recoveryDestination, ...rest } = options;
59
+ const recoveryParams = {
60
+ ...rest,
61
+ recoveryDestination,
62
+ userKey: mode === 'signed' ? triplet.user.prv : triplet.user.pub,
63
+ backupKey: mode === 'signed' ? triplet.backup.prv : triplet.backup.pub,
64
+ bitgoKey: triplet.bitgo.pub,
65
+ ignoreAddressTypes: [],
66
+ };
67
+ return coin.recover(recoveryParams);
68
+ });
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZVJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L3NhZmVSZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZEQSxnRUF5QkM7QUFFRCw4Q0FrQkM7QUExR0Q7Ozs7O0dBS0c7QUFDSCx3REFLOEI7QUFDOUIsOENBQWdFO0FBQ2hFLGdEQUE0RDtBQUc1RCx3Q0FBOEQ7QUFFOUQsMkRBQThHO0FBYTlHLFNBQVMscUJBQXFCLENBQzVCLElBQXNCLEVBQ3RCLE9BQWdDLEVBQ2hDLEVBQW9CO0lBRXBCLElBQUEsMkNBQTJCLEVBQUMsSUFBQSxrQ0FBa0IsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUYsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHFCQUFxQixDQUFDLElBQXNCLEVBQUUsT0FBNkI7SUFDbEYsTUFBTSxVQUFVLEdBQUcsNkJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUN2RCxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsaUJBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQWtCO1FBQ2hILGtCQUFrQixFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7S0FDaEQsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFBLDBDQUFnQyxFQUNyQyxJQUFJLENBQUMsUUFBUSxFQUNiLFVBQVUsRUFDViw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFDckQsQ0FBQyxFQUNELFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsSUFBc0IsRUFDdEIsT0FBNkIsRUFDN0IsVUFBbUMsRUFBRTtJQUVyQyxPQUFPLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckQsTUFBTSxjQUFjLEdBQWtCO1lBQ3BDLEdBQUcsT0FBTztZQUNWLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7WUFDekQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztZQUN6QixTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQzdCLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDM0Isa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixPQUFPLEVBQUUseURBQXFDO1NBQy9DLENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsT0FBTyxNQUFNLElBQUksT0FBTyxJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQy9GLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLEdBQUcsWUFBWSxnQ0FBcUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsSUFBc0IsRUFDdEIsT0FBeUIsRUFDekIsT0FBaUM7SUFFakMsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDdkQsTUFBTSxjQUFjLEdBQWtCO1lBQ3BDLEdBQUcsSUFBSTtZQUNQLG1CQUFtQjtZQUNuQixPQUFPLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNoRSxTQUFTLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRztZQUN0RSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQzNCLGtCQUFrQixFQUFFLEVBQUU7U0FDdkIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIFNhZmUgKHNsb3QtMSkgVVRYTyByZWNvdmVyeSBhZGFwdGVyOiBtYXBzIGEgU2FmZSBjaGlsZCB0cmlwbGV0IG9udG8gdGhlIGV4aXN0aW5nXG4gKiBgYmFja3VwS2V5UmVjb3ZlcnlgIGVuZ2luZSBmb3IgZnVuZGluZyBjaGVja3MgYW5kIHJlY292ZXJ5LlxuICovXG5pbXBvcnQge1xuICBTYWZlQ2hpbGRUcmlwbGV0LFxuICBTYWZlQ2hpbGRUcmlwbGV0UHVicyxcbiAgYXNzZXJ0U2FmZVJlY292ZXJ5U3VwcG9ydGVkLFxuICBvbmNoYWluU2xvdEZvckNvaW4sXG59IGZyb20gJ0BiaXRnby9zZGstbGliLXNhZmVzJztcbmltcG9ydCB7IEVycm9yTm9JbnB1dFRvUmVjb3ZlciwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleCB9IGZyb20gJy4uL2FkZHJlc3MnO1xuXG5pbXBvcnQgeyBiYWNrdXBLZXlSZWNvdmVyeSwgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMiwgUmVjb3ZlclBhcmFtcyB9IGZyb20gJy4vYmFja3VwS2V5UmVjb3ZlcnknO1xuXG5leHBvcnQgdHlwZSBTYWZlV2FsbGV0RnVuZGluZ1N0YXR1cyA9ICdmdW5kZWQnIHwgJ2VtcHR5JyB8ICd1bmtub3duJztcbmV4cG9ydCB0eXBlIFNhZmVXYWxsZXRSZWNvdmVyeU1vZGUgPSAnc2lnbmVkJyB8ICd1bnNpZ25lZCc7XG5cbmV4cG9ydCB0eXBlIFNhZmVSZWNvdmVyeU9wdGlvbnNCYXNlID0gUGljazxSZWNvdmVyUGFyYW1zLCAnc2NhbicgfCAnYXBpS2V5JyB8ICdyZWNvdmVyeVByb3ZpZGVyJz47XG5cbmV4cG9ydCB0eXBlIFJlY292ZXJTYWZlV2FsbGV0T3B0aW9ucyA9IHtcbiAgbW9kZTogU2FmZVdhbGxldFJlY292ZXJ5TW9kZTtcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xufSAmIFNhZmVSZWNvdmVyeU9wdGlvbnNCYXNlICZcbiAgUGljazxSZWNvdmVyUGFyYW1zLCAnZmVlUmF0ZSc+O1xuXG5mdW5jdGlvbiB3aXRoU2FmZVJlY292ZXJ5R3VhcmQ8VD4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIG9wdGlvbnM6IFNhZmVSZWNvdmVyeU9wdGlvbnNCYXNlLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGFzc2VydFNhZmVSZWNvdmVyeVN1cHBvcnRlZChvbmNoYWluU2xvdEZvckNvaW4oY29pbi5nZXRDaGFpbigpKSwgJ3V0eG8nLCBjb2luLmdldENoYWluKCkpO1xuICBpZiAob3B0aW9ucy5zY2FuICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zY2FuIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjYW4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgfVxuICByZXR1cm4gZm4oKTtcbn1cblxuLyoqXG4gKiBEZXJpdmUgdGhlIHdhbGxldCdzIG93biBmaXJzdCBleHRlcm5hbCBhZGRyZXNzIHRvIHNhdGlzZnkgYGJhY2t1cEtleVJlY292ZXJ5YCdzXG4gKiBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uLiBOZXZlciBicm9hZGNhc3QsIG5ldmVyIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuXG4gKi9cbmZ1bmN0aW9uIHN5bnRoZXNpemVEZXN0aW5hdGlvbihjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB0cmlwbGV0OiBTYWZlQ2hpbGRUcmlwbGV0UHVicyk6IHN0cmluZyB7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHtcbiAgICB0cmlwbGU6IFt0cmlwbGV0LnVzZXIucHViLCB0cmlwbGV0LmJhY2t1cC5wdWIsIHRyaXBsZXQuYml0Z28ucHViXS5tYXAoKHB1YikgPT4gQklQMzIuZnJvbShwdWIpKSBhcyBUcmlwbGU8QklQMzI+LFxuICAgIGRlcml2YXRpb25QcmVmaXhlczogWydtLzAvMCcsICdtLzAvMCcsICdtLzAvMCddLFxuICB9KTtcbiAgcmV0dXJuIGdlbmVyYXRlQWRkcmVzc1dpdGhDaGFpbkFuZEluZGV4KFxuICAgIGNvaW4ud2FzbU5hbWUsXG4gICAgd2FsbGV0S2V5cyxcbiAgICBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUudmFsdWUoJ3Ayc2gnLCAnZXh0ZXJuYWwnKSxcbiAgICAwLFxuICAgIHVuZGVmaW5lZFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0ZXJtaW5lU2FmZVdhbGxldEZ1bmRpbmcoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHRyaXBsZXQ6IFNhZmVDaGlsZFRyaXBsZXRQdWJzLFxuICBvcHRpb25zOiBTYWZlUmVjb3ZlcnlPcHRpb25zQmFzZSA9IHt9XG4pOiBQcm9taXNlPFNhZmVXYWxsZXRGdW5kaW5nU3RhdHVzPiB7XG4gIHJldHVybiB3aXRoU2FmZVJlY292ZXJ5R3VhcmQoY29pbiwgb3B0aW9ucywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlY292ZXJ5UGFyYW1zOiBSZWNvdmVyUGFyYW1zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHN5bnRoZXNpemVEZXN0aW5hdGlvbihjb2luLCB0cmlwbGV0KSxcbiAgICAgIHVzZXJLZXk6IHRyaXBsZXQudXNlci5wdWIsXG4gICAgICBiYWNrdXBLZXk6IHRyaXBsZXQuYmFja3VwLnB1YixcbiAgICAgIGJpdGdvS2V5OiB0cmlwbGV0LmJpdGdvLnB1YixcbiAgICAgIGlnbm9yZUFkZHJlc3NUeXBlczogW10sXG4gICAgICBmZWVSYXRlOiBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YyLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcbiAgICAgIHJldHVybiByZXN1bHQgJiYgJ3R4SGV4JyBpbiByZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50eEhleCA9PT0gJ3N0cmluZycgJiYgcmVzdWx0LnR4SGV4Lmxlbmd0aCA+IDBcbiAgICAgICAgPyAnZnVuZGVkJ1xuICAgICAgICA6ICd1bmtub3duJztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBlcnIgaW5zdGFuY2VvZiBFcnJvck5vSW5wdXRUb1JlY292ZXIgPyAnZW1wdHknIDogJ3Vua25vd24nO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyU2FmZVdhbGxldChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdHJpcGxldDogU2FmZUNoaWxkVHJpcGxldCxcbiAgb3B0aW9uczogUmVjb3ZlclNhZmVXYWxsZXRPcHRpb25zXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrdXBLZXlSZWNvdmVyeT4ge1xuICByZXR1cm4gd2l0aFNhZmVSZWNvdmVyeUd1YXJkKGNvaW4sIG9wdGlvbnMsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IG1vZGUsIHJlY292ZXJ5RGVzdGluYXRpb24sIC4uLnJlc3QgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmVjb3ZlcnlQYXJhbXM6IFJlY292ZXJQYXJhbXMgPSB7XG4gICAgICAuLi5yZXN0LFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIHVzZXJLZXk6IG1vZGUgPT09ICdzaWduZWQnID8gdHJpcGxldC51c2VyLnBydiA6IHRyaXBsZXQudXNlci5wdWIsXG4gICAgICBiYWNrdXBLZXk6IG1vZGUgPT09ICdzaWduZWQnID8gdHJpcGxldC5iYWNrdXAucHJ2IDogdHJpcGxldC5iYWNrdXAucHViLFxuICAgICAgYml0Z29LZXk6IHRyaXBsZXQuYml0Z28ucHViLFxuICAgICAgaWdub3JlQWRkcmVzc1R5cGVzOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvaW4ucmVjb3ZlcihyZWNvdmVyeVBhcmFtcyk7XG4gIH0pO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=safeRecovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeRecovery.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/safeRecovery.ts"],"names":[],"mappings":""}
@@ -0,0 +1,187 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const sinon = __importStar(require("sinon"));
41
+ const nock = require("nock");
42
+ const src_1 = require("../../../src");
43
+ const util_1 = require("../util");
44
+ const mock_1 = require("./mock");
45
+ nock.disableNetConnect();
46
+ const { walletKeys: wasmWalletKeys } = (0, util_1.getDefaultWasmWalletKeys)();
47
+ function tripletPubs() {
48
+ return {
49
+ user: { pub: util_1.keychainsBase58[0].pub },
50
+ backup: { pub: util_1.keychainsBase58[1].pub },
51
+ bitgo: { pub: util_1.keychainsBase58[2].pub },
52
+ };
53
+ }
54
+ const throwingProvider = {
55
+ getUnspentsForAddresses: async () => {
56
+ throw new Error('provider down');
57
+ },
58
+ getAddressInfo: async () => {
59
+ throw new Error('provider down');
60
+ },
61
+ getTransactionHex: async () => {
62
+ throw new Error('provider down');
63
+ },
64
+ getTransactionIO: async () => {
65
+ throw new Error('provider down');
66
+ },
67
+ };
68
+ describe('determineSafeWalletFunding', function () {
69
+ it('returns funded when the wallet has unspents', async function () {
70
+ const coin = (0, util_1.getUtxoCoin)('btc');
71
+ const unspents = [(0, util_1.toUnspentWithPrevTx)({ scriptType: 'p2sh', value: BigInt(1e8) }, 0, coin.name, wasmWalletKeys)];
72
+ const status = await (0, src_1.determineSafeWalletFunding)(coin, tripletPubs(), {
73
+ recoveryProvider: new mock_1.MockRecoveryProvider(unspents),
74
+ });
75
+ assert_1.default.strictEqual(status, 'funded');
76
+ });
77
+ (0, util_1.getMinUtxoCoins)().forEach((coin) => {
78
+ it(`returns empty when the wallet has no unspents [${coin.getChain()}]`, async function () {
79
+ const status = await (0, src_1.determineSafeWalletFunding)(coin, tripletPubs(), {
80
+ recoveryProvider: new mock_1.MockRecoveryProvider([]),
81
+ });
82
+ assert_1.default.strictEqual(status, 'empty');
83
+ });
84
+ it(`returns unknown when the provider fails [${coin.getChain()}]`, async function () {
85
+ const status = await (0, src_1.determineSafeWalletFunding)(coin, tripletPubs(), {
86
+ recoveryProvider: throwingProvider,
87
+ });
88
+ assert_1.default.strictEqual(status, 'unknown');
89
+ });
90
+ });
91
+ it('returns unknown when the engine resolves without a valid txHex', async function () {
92
+ const coin = (0, util_1.getUtxoCoin)('btc');
93
+ const malformedResult = {
94
+ txHex: '',
95
+ txInfo: {},
96
+ feeInfo: {},
97
+ coin: coin.getChain(),
98
+ };
99
+ const stub = sinon.stub(coin, 'recover').resolves(malformedResult);
100
+ try {
101
+ const status = await (0, src_1.determineSafeWalletFunding)(coin, tripletPubs());
102
+ assert_1.default.strictEqual(status, 'unknown');
103
+ }
104
+ finally {
105
+ stub.restore();
106
+ }
107
+ });
108
+ it('rejects scan: 0', async function () {
109
+ const coin = (0, util_1.getUtxoCoin)('btc');
110
+ await assert_1.default.rejects(() => (0, src_1.determineSafeWalletFunding)(coin, tripletPubs(), { scan: 0 }), /scan must be a positive integer/);
111
+ });
112
+ });
113
+ describe('recoverSafeWallet', function () {
114
+ const coin = (0, util_1.getUtxoCoin)('btc');
115
+ const { walletKeys: externalWallet } = (0, util_1.createWasmWalletKeys)('external');
116
+ const recoveryDestination = (0, util_1.getWalletAddress)(coin.name, externalWallet);
117
+ const unspents = [(0, util_1.toUnspentWithPrevTx)({ scriptType: 'p2sh', value: BigInt(1e8) }, 0, coin.name, wasmWalletKeys)];
118
+ function fullTriplet() {
119
+ return {
120
+ index: 0,
121
+ user: { prv: util_1.keychainsBase58[0].prv, pub: util_1.keychainsBase58[0].pub },
122
+ backup: { prv: util_1.keychainsBase58[1].prv, pub: util_1.keychainsBase58[1].pub },
123
+ bitgo: { pub: util_1.keychainsBase58[2].pub },
124
+ };
125
+ }
126
+ it('returns an unsigned transaction when mode is unsigned', async function () {
127
+ const result = await (0, src_1.recoverSafeWallet)(coin, fullTriplet(), {
128
+ mode: 'unsigned',
129
+ recoveryDestination,
130
+ feeRate: 100,
131
+ recoveryProvider: new mock_1.MockRecoveryProvider(unspents),
132
+ });
133
+ assert_1.default.ok('txHex' in result && typeof result.txHex === 'string' && result.txHex.length > 0);
134
+ assert_1.default.ok('txInfo' in result && typeof result.txInfo === 'object');
135
+ assert_1.default.ok('feeInfo' in result && typeof result.feeInfo === 'object');
136
+ assert_1.default.strictEqual(result.coin, coin.getChain());
137
+ });
138
+ it('returns a signed transaction when mode is signed', async function () {
139
+ const result = await (0, src_1.recoverSafeWallet)(coin, fullTriplet(), {
140
+ mode: 'signed',
141
+ recoveryDestination,
142
+ feeRate: 100,
143
+ recoveryProvider: new mock_1.MockRecoveryProvider(unspents),
144
+ });
145
+ assert_1.default.ok('transactionHex' in result && typeof result.transactionHex === 'string' && result.transactionHex.length > 0);
146
+ assert_1.default.ok('inputs' in result && Array.isArray(result.inputs) && result.inputs.length > 0);
147
+ });
148
+ it('recovers signed transaction on tbtc with mainnet xprv/xpub child keys', async function () {
149
+ const tbtcCoin = (0, util_1.getUtxoCoin)('tbtc');
150
+ const tbtcDestination = (0, util_1.getWalletAddress)(tbtcCoin.name, externalWallet);
151
+ const tbtcUnspents = [
152
+ (0, util_1.toUnspentWithPrevTx)({ scriptType: 'p2sh', value: BigInt(1e8) }, 0, tbtcCoin.name, wasmWalletKeys),
153
+ ];
154
+ const result = await (0, src_1.recoverSafeWallet)(tbtcCoin, fullTriplet(), {
155
+ mode: 'signed',
156
+ recoveryDestination: tbtcDestination,
157
+ feeRate: 100,
158
+ recoveryProvider: new mock_1.MockRecoveryProvider(tbtcUnspents),
159
+ });
160
+ assert_1.default.ok('transactionHex' in result && typeof result.transactionHex === 'string' && result.transactionHex.length > 0);
161
+ assert_1.default.ok('inputs' in result && Array.isArray(result.inputs) && result.inputs.length > 0);
162
+ });
163
+ it('produces a byte-identical result to backupKeyRecovery (signed)', async function () {
164
+ const triplet = fullTriplet();
165
+ const provider = new mock_1.MockRecoveryProvider(unspents);
166
+ const viaSafe = await (0, src_1.recoverSafeWallet)(coin, triplet, {
167
+ mode: 'signed',
168
+ recoveryDestination,
169
+ feeRate: 100,
170
+ recoveryProvider: provider,
171
+ });
172
+ const viaDirect = await (0, src_1.backupKeyRecovery)(coin, util_1.defaultBitGo, {
173
+ userKey: triplet.user.prv,
174
+ backupKey: triplet.backup.prv,
175
+ bitgoKey: triplet.bitgo.pub,
176
+ recoveryDestination,
177
+ ignoreAddressTypes: [],
178
+ feeRate: 100,
179
+ recoveryProvider: provider,
180
+ });
181
+ assert_1.default.deepStrictEqual(viaSafe, viaDirect);
182
+ });
183
+ it('rejects scan: 0', async function () {
184
+ await assert_1.default.rejects(() => (0, src_1.recoverSafeWallet)(coin, fullTriplet(), { mode: 'unsigned', recoveryDestination, scan: 0 }), /scan must be a positive integer/);
185
+ });
186
+ });
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZVJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L3NhZmVSZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw2Q0FBK0I7QUFDL0IsNkJBQThCO0FBRzlCLHNDQUFrSDtBQUNsSCxrQ0FTaUI7QUFFakIsaUNBQThDO0FBRTlDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBRXpCLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRWxFLFNBQVMsV0FBVztJQUNsQixPQUFPO1FBQ0wsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLHNCQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxzQkFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtRQUN2QyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsc0JBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7S0FDdkMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLGdCQUFnQixHQUFxQjtJQUN6Qyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJ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LENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgU2FmZUNoaWxkVHJpcGxldCwgU2FmZUNoaWxkVHJpcGxldFB1YnMgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1zYWZlcyc7XG5cbmltcG9ydCB7IGJhY2t1cEtleVJlY292ZXJ5LCBkZXRlcm1pbmVTYWZlV2FsbGV0RnVuZGluZywgcmVjb3ZlclNhZmVXYWxsZXQsIFJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlV2FzbVdhbGxldEtleXMsXG4gIGRlZmF1bHRCaXRHbyxcbiAgZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICBnZXRNaW5VdHhvQ29pbnMsXG4gIGdldFV0eG9Db2luLFxuICBnZXRXYWxsZXRBZGRyZXNzLFxuICBrZXljaGFpbnNCYXNlNTgsXG4gIHRvVW5zcGVudFdpdGhQcmV2VHgsXG59IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQgeyBNb2NrUmVjb3ZlcnlQcm92aWRlciB9IGZyb20gJy4vbW9jayc7XG5cbm5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgeyB3YWxsZXRLZXlzOiB3YXNtV2FsbGV0S2V5cyB9ID0gZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzKCk7XG5cbmZ1bmN0aW9uIHRyaXBsZXRQdWJzKCk6IFNhZmVDaGlsZFRyaXBsZXRQdWJzIHtcbiAgcmV0dXJuIHtcbiAgICB1c2VyOiB7IHB1Yjoga2V5Y2hhaW5zQmFzZTU4WzBdLnB1YiB9LFxuICAgIGJhY2t1cDogeyBwdWI6IGtleWNoYWluc0Jhc2U1OFsxXS5wdWIgfSxcbiAgICBiaXRnbzogeyBwdWI6IGtleWNoYWluc0Jhc2U1OFsyXS5wdWIgfSxcbiAgfTtcbn1cblxuY29uc3QgdGhyb3dpbmdQcm92aWRlcjogUmVjb3ZlcnlQcm92aWRlciA9IHtcbiAgZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXM6IGFzeW5jICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3ZpZGVyIGRvd24nKTtcbiAgfSxcbiAgZ2V0QWRkcmVzc0luZm86IGFzeW5jICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3ZpZGVyIGRvd24nKTtcbiAgfSxcbiAgZ2V0VHJhbnNhY3Rpb25IZXg6IGFzeW5jICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3ZpZGVyIGRvd24nKTtcbiAgfSxcbiAgZ2V0VHJhbnNhY3Rpb25JTzogYXN5bmMgKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvdmlkZXIgZG93bicpO1xuICB9LFxufTtcblxuZGVzY3JpYmUoJ2RldGVybWluZVNhZmVXYWxsZXRGdW5kaW5nJywgZnVuY3Rpb24gKCkge1xuICBpdCgncmV0dXJucyBmdW5kZWQgd2hlbiB0aGUgd2FsbGV0IGhhcyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ2J0YycpO1xuICAgIGNvbnN0IHVuc3BlbnRzID0gW3RvVW5zcGVudFdpdGhQcmV2VHgoeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiBCaWdJbnQoMWU4KSB9LCAwLCBjb2luLm5hbWUsIHdhc21XYWxsZXRLZXlzKV07XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZGV0ZXJtaW5lU2FmZVdhbGxldEZ1bmRpbmcoY29pbiwgdHJpcGxldFB1YnMoKSwge1xuICAgICAgcmVjb3ZlcnlQcm92aWRlcjogbmV3IE1vY2tSZWNvdmVyeVByb3ZpZGVyKHVuc3BlbnRzKSxcbiAgICB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzLCAnZnVuZGVkJyk7XG4gIH0pO1xuXG4gIGdldE1pblV0eG9Db2lucygpLmZvckVhY2goKGNvaW4pID0+IHtcbiAgICBpdChgcmV0dXJucyBlbXB0eSB3aGVuIHRoZSB3YWxsZXQgaGFzIG5vIHVuc3BlbnRzIFske2NvaW4uZ2V0Q2hhaW4oKX1dYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZGV0ZXJtaW5lU2FmZVdhbGxldEZ1bmRpbmcoY29pbiwgdHJpcGxldFB1YnMoKSwge1xuICAgICAgICByZWNvdmVyeVByb3ZpZGVyOiBuZXcgTW9ja1JlY292ZXJ5UHJvdmlkZXIoW10pLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzLCAnZW1wdHknKTtcbiAgICB9KTtcblxuICAgIGl0KGByZXR1cm5zIHVua25vd24gd2hlbiB0aGUgcHJvdmlkZXIgZmFpbHMgWyR7Y29pbi5nZXRDaGFpbigpfV1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBkZXRlcm1pbmVTYWZlV2FsbGV0RnVuZGluZyhjb2luLCB0cmlwbGV0UHVicygpLCB7XG4gICAgICAgIHJlY292ZXJ5UHJvdmlkZXI6IHRocm93aW5nUHJvdmlkZXIsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdGF0dXMsICd1bmtub3duJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIHVua25vd24gd2hlbiB0aGUgZW5naW5lIHJlc29sdmVzIHdpdGhvdXQgYSB2YWxpZCB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ2J0YycpO1xuICAgIHR5cGUgUmVjb3ZlclJldHVybiA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgY29pbi5yZWNvdmVyPj47XG4gICAgY29uc3QgbWFsZm9ybWVkUmVzdWx0ID0ge1xuICAgICAgdHhIZXg6ICcnLFxuICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIGZlZUluZm86IHt9LFxuICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgIH0gYXMgUmVjb3ZlclJldHVybjtcblxuICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGNvaW4sICdyZWNvdmVyJykucmVzb2x2ZXMobWFsZm9ybWVkUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZGV0ZXJtaW5lU2FmZVdhbGxldEZ1bmRpbmcoY29pbiwgdHJpcGxldFB1YnMoKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzLCAndW5rbm93bicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHNjYW46IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRldGVybWluZVNhZmVXYWxsZXRGdW5kaW5nKGNvaW4sIHRyaXBsZXRQdWJzKCksIHsgc2NhbjogMCB9KSxcbiAgICAgIC9zY2FuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyL1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdyZWNvdmVyU2FmZVdhbGxldCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgY29uc3QgeyB3YWxsZXRLZXlzOiBleHRlcm5hbFdhbGxldCB9ID0gY3JlYXRlV2FzbVdhbGxldEtleXMoJ2V4dGVybmFsJyk7XG4gIGNvbnN0IHJlY292ZXJ5RGVzdGluYXRpb24gPSBnZXRXYWxsZXRBZGRyZXNzKGNvaW4ubmFtZSwgZXh0ZXJuYWxXYWxsZXQpO1xuICBjb25zdCB1bnNwZW50cyA9IFt0b1Vuc3BlbnRXaXRoUHJldlR4KHsgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogQmlnSW50KDFlOCkgfSwgMCwgY29pbi5uYW1lLCB3YXNtV2FsbGV0S2V5cyldO1xuXG4gIGZ1bmN0aW9uIGZ1bGxUcmlwbGV0KCk6IFNhZmVDaGlsZFRyaXBsZXQge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogMCxcbiAgICAgIHVzZXI6IHsgcHJ2OiBrZXljaGFpbnNCYXNlNThbMF0ucHJ2LCBwdWI6IGtleWNoYWluc0Jhc2U1OFswXS5wdWIgfSxcbiAgICAgIGJhY2t1cDogeyBwcnY6IGtleWNoYWluc0Jhc2U1OFsxXS5wcnYsIHB1Yjoga2V5Y2hhaW5zQmFzZTU4WzFdLnB1YiB9LFxuICAgICAgYml0Z286IHsgcHViOiBrZXljaGFpbnNCYXNlNThbMl0ucHViIH0sXG4gICAgfTtcbiAgfVxuXG4gIGl0KCdyZXR1cm5zIGFuIHVuc2lnbmVkIHRyYW5zYWN0aW9uIHdoZW4gbW9kZSBpcyB1bnNpZ25lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWNvdmVyU2FmZVdhbGxldChjb2luLCBmdWxsVHJpcGxldCgpLCB7XG4gICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGZlZVJhdGU6IDEwMCxcbiAgICAgIHJlY292ZXJ5UHJvdmlkZXI6IG5ldyBNb2NrUmVjb3ZlcnlQcm92aWRlcih1bnNwZW50cyksXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gcmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudHhIZXggPT09ICdzdHJpbmcnICYmIHJlc3VsdC50eEhleC5sZW5ndGggPiAwKTtcbiAgICBhc3NlcnQub2soJ3R4SW5mbycgaW4gcmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudHhJbmZvID09PSAnb2JqZWN0Jyk7XG4gICAgYXNzZXJ0Lm9rKCdmZWVJbmZvJyBpbiByZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5mZWVJbmZvID09PSAnb2JqZWN0Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5jb2luLCBjb2luLmdldENoYWluKCkpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBhIHNpZ25lZCB0cmFuc2FjdGlvbiB3aGVuIG1vZGUgaXMgc2lnbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlY292ZXJTYWZlV2FsbGV0KGNvaW4sIGZ1bGxUcmlwbGV0KCksIHtcbiAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGZlZVJhdGU6IDEwMCxcbiAgICAgIHJlY292ZXJ5UHJvdmlkZXI6IG5ldyBNb2NrUmVjb3ZlcnlQcm92aWRlcih1bnNwZW50cyksXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgJ3RyYW5zYWN0aW9uSGV4JyBpbiByZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50cmFuc2FjdGlvbkhleCA9PT0gJ3N0cmluZycgJiYgcmVzdWx0LnRyYW5zYWN0aW9uSGV4Lmxlbmd0aCA+IDBcbiAgICApO1xuICAgIGFzc2VydC5vaygnaW5wdXRzJyBpbiByZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQuaW5wdXRzKSAmJiByZXN1bHQuaW5wdXRzLmxlbmd0aCA+IDApO1xuICB9KTtcblxuICBpdCgncmVjb3ZlcnMgc2lnbmVkIHRyYW5zYWN0aW9uIG9uIHRidGMgd2l0aCBtYWlubmV0IHhwcnYveHB1YiBjaGlsZCBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRidGNDb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB0YnRjRGVzdGluYXRpb24gPSBnZXRXYWxsZXRBZGRyZXNzKHRidGNDb2luLm5hbWUsIGV4dGVybmFsV2FsbGV0KTtcbiAgICBjb25zdCB0YnRjVW5zcGVudHMgPSBbXG4gICAgICB0b1Vuc3BlbnRXaXRoUHJldlR4KHsgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogQmlnSW50KDFlOCkgfSwgMCwgdGJ0Y0NvaW4ubmFtZSwgd2FzbVdhbGxldEtleXMpLFxuICAgIF07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWNvdmVyU2FmZVdhbGxldCh0YnRjQ29pbiwgZnVsbFRyaXBsZXQoKSwge1xuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0YnRjRGVzdGluYXRpb24sXG4gICAgICBmZWVSYXRlOiAxMDAsXG4gICAgICByZWNvdmVyeVByb3ZpZGVyOiBuZXcgTW9ja1JlY292ZXJ5UHJvdmlkZXIodGJ0Y1Vuc3BlbnRzKSxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soXG4gICAgICAndHJhbnNhY3Rpb25IZXgnIGluIHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnRyYW5zYWN0aW9uSGV4ID09PSAnc3RyaW5nJyAmJiByZXN1bHQudHJhbnNhY3Rpb25IZXgubGVuZ3RoID4gMFxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKCdpbnB1dHMnIGluIHJlc3VsdCAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5pbnB1dHMpICYmIHJlc3VsdC5pbnB1dHMubGVuZ3RoID4gMCk7XG4gIH0pO1xuXG4gIGl0KCdwcm9kdWNlcyBhIGJ5dGUtaWRlbnRpY2FsIHJlc3VsdCB0byBiYWNrdXBLZXlSZWNvdmVyeSAoc2lnbmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0cmlwbGV0ID0gZnVsbFRyaXBsZXQoKTtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBNb2NrUmVjb3ZlcnlQcm92aWRlcih1bnNwZW50cyk7XG5cbiAgICBjb25zdCB2aWFTYWZlID0gYXdhaXQgcmVjb3ZlclNhZmVXYWxsZXQoY29pbiwgdHJpcGxldCwge1xuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgZmVlUmF0ZTogMTAwLFxuICAgICAgcmVjb3ZlcnlQcm92aWRlcjogcHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2aWFEaXJlY3QgPSBhd2FpdCBiYWNrdXBLZXlSZWNvdmVyeShjb2luLCBkZWZhdWx0Qml0R28sIHtcbiAgICAgIHVzZXJLZXk6IHRyaXBsZXQudXNlci5wcnYsXG4gICAgICBiYWNrdXBLZXk6IHRyaXBsZXQuYmFja3VwLnBydixcbiAgICAgIGJpdGdvS2V5OiB0cmlwbGV0LmJpdGdvLnB1YixcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICBpZ25vcmVBZGRyZXNzVHlwZXM6IFtdLFxuICAgICAgZmVlUmF0ZTogMTAwLFxuICAgICAgcmVjb3ZlcnlQcm92aWRlcjogcHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZpYVNhZmUsIHZpYURpcmVjdCk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHNjYW46IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiByZWNvdmVyU2FmZVdhbGxldChjb2luLCBmdWxsVHJpcGxldCgpLCB7IG1vZGU6ICd1bnNpZ25lZCcsIHJlY292ZXJ5RGVzdGluYXRpb24sIHNjYW46IDAgfSksXG4gICAgICAvc2NhbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci9cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tbtcstxsignet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tbtcstxsignet.d.ts","sourceRoot":"","sources":["../../../../test/unit/tbtcstxsignet.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const statics_1 = require("@bitgo/statics");
41
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
42
+ const src_1 = require("../../src");
43
+ const util_1 = require("./util");
44
+ describe('tbtcstxsignet', function () {
45
+ const coin = src_1.Tbtcstxsignet.createInstance(util_1.defaultBitGo);
46
+ it('uses the public coin name with the public signet utxolib network', function () {
47
+ assert_1.default.strictEqual(coin.getChain(), 'tbtcstxsignet');
48
+ assert_1.default.strictEqual(coin.getFullName(), 'Stacks Bitcoin (Signet)');
49
+ assert_1.default.strictEqual(coin.wasmName, 'tbtcsig');
50
+ assert_1.default.strictEqual(statics_1.Networks.test.bitcoinStxSignet.utxolibName, 'bitcoinPublicSignet');
51
+ assert_1.default.strictEqual((0, util_1.getNetworkForCoinName)(coin.name), utxolib.networks.bitcoinPublicSignet);
52
+ });
53
+ it('encodes and decodes signet addresses through the tbtcsig codec', function () {
54
+ const script = Buffer.from(`0014${'11'.repeat(20)}`, 'hex');
55
+ const address = coin.addressCodec.encode(script);
56
+ assert_1.default.match(address, /^tb1q/);
57
+ assert_1.default.deepStrictEqual(Buffer.from(coin.addressCodec.decode(address)), script);
58
+ assert_1.default.strictEqual(coin.isValidAddress(address), true);
59
+ });
60
+ });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGJ0Y3N0eHNpZ25ldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90YnRjc3R4c2lnbmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUEwQztBQUMxQyx5REFBMkM7QUFFM0MsbUNBQTBDO0FBRTFDLGlDQUE2RDtBQUU3RCxRQUFRLENBQUMsZUFBZSxFQUFFO0lBQ3hCLE1BQU0sSUFBSSxHQUFHLG1CQUFhLENBQUMsY0FBYyxDQUFDLG1CQUFZLENBQUMsQ0FBQztJQUV4RCxFQUFFLENBQUMsa0VBQWtFLEVBQUU7UUFDckUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2xFLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0MsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsa0JBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDdEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw0QkFBcUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFO1FBQ25FLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IE5ldHdvcmtzIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBUYnRjc3R4c2lnbmV0IH0gZnJvbSAnLi4vLi4vc3JjJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXROZXR3b3JrRm9yQ29pbk5hbWUgfSBmcm9tICcuL3V0aWwnO1xuXG5kZXNjcmliZSgndGJ0Y3N0eHNpZ25ldCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9IFRidGNzdHhzaWduZXQuY3JlYXRlSW5zdGFuY2UoZGVmYXVsdEJpdEdvKTtcblxuICBpdCgndXNlcyB0aGUgcHVibGljIGNvaW4gbmFtZSB3aXRoIHRoZSBwdWJsaWMgc2lnbmV0IHV0eG9saWIgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29pbi5nZXRDaGFpbigpLCAndGJ0Y3N0eHNpZ25ldCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2luLmdldEZ1bGxOYW1lKCksICdTdGFja3MgQml0Y29pbiAoU2lnbmV0KScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2luLndhc21OYW1lLCAndGJ0Y3NpZycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChOZXR3b3Jrcy50ZXN0LmJpdGNvaW5TdHhTaWduZXQudXR4b2xpYk5hbWUsICdiaXRjb2luUHVibGljU2lnbmV0Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5QdWJsaWNTaWduZXQpO1xuICB9KTtcblxuICBpdCgnZW5jb2RlcyBhbmQgZGVjb2RlcyBzaWduZXQgYWRkcmVzc2VzIHRocm91Z2ggdGhlIHRidGNzaWcgY29kZWMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gQnVmZmVyLmZyb20oYDAwMTQkeycxMScucmVwZWF0KDIwKX1gLCAnaGV4Jyk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGNvaW4uYWRkcmVzc0NvZGVjLmVuY29kZShzY3JpcHQpO1xuXG4gICAgYXNzZXJ0Lm1hdGNoKGFkZHJlc3MsIC9edGIxcS8pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20oY29pbi5hZGRyZXNzQ29kZWMuZGVjb2RlKGFkZHJlc3MpKSwgc2NyaXB0KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gIH0pO1xufSk7XG4iXX0=