@bitgo-beta/account-lib 2.24.1-alpha.49 → 2.24.1-alpha.490

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 (74) hide show
  1. package/README.md +1 -1
  2. package/dist/resources/dot/index.js +6 -2
  3. package/dist/resources/dot/westend.d.ts +1 -1
  4. package/dist/resources/dot/westend.d.ts.map +1 -1
  5. package/dist/resources/dot/westend.js +2 -2
  6. package/dist/resources/dot/westend.ts +1 -1
  7. package/dist/src/index.d.ts +112 -4
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +263 -17
  10. package/dist/src/keyPair/index.js +24 -11
  11. package/dist/src/utils/index.d.ts +1 -0
  12. package/dist/src/utils/index.d.ts.map +1 -1
  13. package/dist/src/utils/index.js +27 -10
  14. package/dist/src/utils/messages/index.d.ts +10 -0
  15. package/dist/src/utils/messages/index.d.ts.map +1 -0
  16. package/dist/src/utils/messages/index.js +30 -0
  17. package/dist/test/resources/ed25519Deriver.d.ts +15 -0
  18. package/dist/test/resources/ed25519Deriver.d.ts.map +1 -0
  19. package/dist/test/resources/ed25519Deriver.js +18 -0
  20. package/dist/test/resources/testTransaction.d.ts +11 -0
  21. package/dist/test/resources/testTransaction.d.ts.map +1 -0
  22. package/dist/test/resources/testTransaction.js +19 -0
  23. package/dist/test/resources/testTransactionBuilder.d.ts +26 -0
  24. package/dist/test/resources/testTransactionBuilder.d.ts.map +1 -0
  25. package/dist/test/resources/testTransactionBuilder.js +47 -0
  26. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts +2 -0
  27. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts.map +1 -0
  28. package/dist/test/unit/coin/baseCoin/transactionBuilder.js +135 -0
  29. package/dist/test/unit/fixtures.d.ts +16 -0
  30. package/dist/test/unit/fixtures.d.ts.map +1 -0
  31. package/dist/test/unit/fixtures.js +43 -0
  32. package/dist/test/unit/index.d.ts +2 -0
  33. package/dist/test/unit/index.d.ts.map +1 -0
  34. package/dist/test/unit/index.js +13 -0
  35. package/dist/test/unit/keyPair/index.d.ts +2 -0
  36. package/dist/test/unit/keyPair/index.d.ts.map +1 -0
  37. package/dist/test/unit/keyPair/index.js +132 -0
  38. package/dist/test/unit/messageFactory.d.ts +2 -0
  39. package/dist/test/unit/messageFactory.d.ts.map +1 -0
  40. package/dist/test/unit/messageFactory.js +78 -0
  41. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  42. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  43. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.js +333 -0
  44. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts +5 -0
  45. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
  46. package/dist/test/unit/mpc/tss/eddsa/eddsa.js +322 -0
  47. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts +130 -0
  48. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts.map +1 -0
  49. package/dist/test/unit/mpc/tss/fixtures/ecdsa.js +283 -0
  50. package/dist/test/unit/utils/crypto.d.ts +2 -0
  51. package/dist/test/unit/utils/crypto.d.ts.map +1 -0
  52. package/dist/test/unit/utils/crypto.js +60 -0
  53. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts +2 -0
  54. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts.map +1 -0
  55. package/dist/test/unit/utils/ed25519KeyDeriver.js +23 -0
  56. package/dist/test/unit/utils/index.d.ts +2 -0
  57. package/dist/test/unit/utils/index.d.ts.map +1 -0
  58. package/dist/test/unit/utils/index.js +61 -0
  59. package/dist/test/unit/utils/messages/index.d.ts +2 -0
  60. package/dist/test/unit/utils/messages/index.d.ts.map +1 -0
  61. package/dist/test/unit/utils/messages/index.js +51 -0
  62. package/dist/test/unit/verifyMessage.d.ts +2 -0
  63. package/dist/test/unit/verifyMessage.d.ts.map +1 -0
  64. package/dist/test/unit/verifyMessage.js +96 -0
  65. package/dist/tsconfig.tsbuildinfo +1 -43553
  66. package/package.json +78 -32
  67. package/.mocharc.js +0 -10
  68. package/CHANGELOG.md +0 -389
  69. package/DEVELOPER.md +0 -93
  70. package/resources/README.md +0 -17
  71. package/resources/cspr/contract/keys-manager.wasm +0 -0
  72. package/resources/dot/index.ts +0 -2
  73. package/resources/dot/mainnet.ts +0 -2
  74. package/resources/dot/westend.ts +0 -2
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,15 +15,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
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
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.register = void 0;
36
+ exports.register = register;
23
37
  const coinModules = __importStar(require(".."));
24
38
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
25
39
  const statics_1 = require("@bitgo-beta/statics");
@@ -34,5 +48,4 @@ function register(coinName, source) {
34
48
  }
35
49
  throw new sdk_core_1.NotSupported(`Coin ${coinName} not supported`);
36
50
  }
37
- exports.register = register;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva2V5UGFpci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLG1EQUFpRjtBQUNqRixpREFBNEM7QUFFNUMsU0FBZ0IsUUFBUSxDQUFDLFFBQWdCLEVBQUUsTUFBdUI7SUFDaEUsTUFBTSxpQkFBaUIsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdEMsOENBQThDO1NBQzdDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssaUJBQWlCLENBQUMsQ0FBQztJQUNsRyxJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU8sSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzdDO0lBQ0QsTUFBTSxJQUFJLHVCQUFZLENBQUMsUUFBUSxRQUFRLGdCQUFnQixDQUFDLENBQUM7QUFDM0QsQ0FBQztBQVZELDRCQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29pbk1vZHVsZXMgZnJvbSAnLi4nO1xuaW1wb3J0IHsgQmFzZUtleVBhaXIsIEtleVBhaXJPcHRpb25zLCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoY29pbk5hbWU6IHN0cmluZywgc291cmNlPzogS2V5UGFpck9wdGlvbnMpOiBCYXNlS2V5UGFpciB7XG4gIGNvbnN0IHNhbml0aXplZENvaW5OYW1lID0gY29pbnMuZ2V0KGNvaW5OYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpKS5mYW1pbHk7XG4gIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGNvaW5Nb2R1bGVzKVxuICAgIC5maWx0ZXIoKGspID0+IGNvaW5Nb2R1bGVzW2tdLktleVBhaXIpXG4gICAgLy8gVE9ETyhCRy00MDk5MCk6IGV0aDIgQkxTIGtleXBhaXIgaW5pdCBlcnJvclxuICAgIC5maW5kKChrKSA9PiBrLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSAnZXRoMicgJiYgay50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gc2FuaXRpemVkQ29pbk5hbWUpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIG5ldyBjb2luTW9kdWxlc1trZXldLktleVBhaXIoc291cmNlKTtcbiAgfVxuICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKGBDb2luICR7Y29pbk5hbWV9IG5vdCBzdXBwb3J0ZWRgKTtcbn1cbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva2V5UGFpci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLDRCQVVDO0FBZEQsZ0RBQWtDO0FBQ2xDLG1EQUFpRjtBQUNqRixpREFBNEM7QUFFNUMsU0FBZ0IsUUFBUSxDQUFDLFFBQWdCLEVBQUUsTUFBdUI7SUFDaEUsTUFBTSxpQkFBaUIsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdEMsOENBQThDO1NBQzdDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssaUJBQWlCLENBQUMsQ0FBQztJQUNsRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsT0FBTyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE1BQU0sSUFBSSx1QkFBWSxDQUFDLFFBQVEsUUFBUSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb2luTW9kdWxlcyBmcm9tICcuLic7XG5pbXBvcnQgeyBCYXNlS2V5UGFpciwgS2V5UGFpck9wdGlvbnMsIE5vdFN1cHBvcnRlZCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcihjb2luTmFtZTogc3RyaW5nLCBzb3VyY2U/OiBLZXlQYWlyT3B0aW9ucyk6IEJhc2VLZXlQYWlyIHtcbiAgY29uc3Qgc2FuaXRpemVkQ29pbk5hbWUgPSBjb2lucy5nZXQoY29pbk5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpLmZhbWlseTtcbiAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY29pbk1vZHVsZXMpXG4gICAgLmZpbHRlcigoaykgPT4gY29pbk1vZHVsZXNba10uS2V5UGFpcilcbiAgICAvLyBUT0RPKEJHLTQwOTkwKTogZXRoMiBCTFMga2V5cGFpciBpbml0IGVycm9yXG4gICAgLmZpbmQoKGspID0+IGsudHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09ICdldGgyJyAmJiBrLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBzYW5pdGl6ZWRDb2luTmFtZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gbmV3IGNvaW5Nb2R1bGVzW2tleV0uS2V5UGFpcihzb3VyY2UpO1xuICB9XG4gIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoYENvaW4gJHtjb2luTmFtZX0gbm90IHN1cHBvcnRlZGApO1xufVxuIl19
@@ -6,4 +6,5 @@ import { BaseUtils } from '@bitgo-beta/sdk-core';
6
6
  * @returns {BaseUtils}
7
7
  */
8
8
  export declare function register(coinName: string): BaseUtils;
9
+ export * from './messages';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AAG/D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CASpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AAG/D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CASpD;AAED,cAAc,YAAY,CAAC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,15 +15,28 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
36
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
37
  };
21
38
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.register = void 0;
39
+ exports.register = register;
23
40
  const coinModules = __importStar(require(".."));
24
41
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
25
42
  const statics_1 = require("@bitgo-beta/statics");
@@ -39,5 +56,5 @@ function register(coinName) {
39
56
  }
40
57
  throw new sdk_core_1.NotSupported(`${coinName} util factory not supported`);
41
58
  }
42
- exports.register = register;
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUFrQztBQUNsQyxtREFBK0Q7QUFDL0QsaURBQTRDO0FBRTVDOzs7OztHQUtHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLFFBQWdCO0lBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLGlCQUFpQixDQUFDLENBQUM7SUFDN0QsSUFBSSxHQUFHLEVBQUU7UUFDUCxPQUFPLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ3JDO0lBQ0QsTUFBTSxJQUFJLHVCQUFZLENBQUMsR0FBRyxRQUFRLDZCQUE2QixDQUFDLENBQUM7QUFDbkUsQ0FBQztBQVRELDRCQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29pbk1vZHVsZXMgZnJvbSAnLi4nO1xuaW1wb3J0IHsgQmFzZVV0aWxzLCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBmYWN0b3J5IG1ldGhvZCBmb3IgY29pbiB1dGlscyBtZXRob2RzXG4gKiB0aHJvdyBpZiBjb2luIG5vdCBzdXBwb3J0ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2luTmFtZVxuICogQHJldHVybnMge0Jhc2VVdGlsc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKGNvaW5OYW1lOiBzdHJpbmcpOiBCYXNlVXRpbHMge1xuICBjb25zdCBzYW5pdGl6ZWRDb2luTmFtZSA9IGNvaW5zLmdldChjb2luTmFtZS50cmltKCkudG9Mb3dlckNhc2UoKSkuZmFtaWx5O1xuICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhjb2luTW9kdWxlcylcbiAgICAuZmlsdGVyKChrKSA9PiBjb2luTW9kdWxlc1trXS5VdGlscylcbiAgICAuZmluZCgoaykgPT4gay50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gc2FuaXRpemVkQ29pbk5hbWUpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIG5ldyBjb2luTW9kdWxlc1trZXldLlV0aWxzKCk7XG4gIH1cbiAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChgJHtjb2luTmFtZX0gdXRpbCBmYWN0b3J5IG5vdCBzdXBwb3J0ZWRgKTtcbn1cbiJdfQ==
59
+ __exportStar(require("./messages"), exports);
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSw0QkFTQztBQW5CRCxnREFBa0M7QUFDbEMsbURBQStEO0FBQy9ELGlEQUE0QztBQUU1Qzs7Ozs7R0FLRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxRQUFnQjtJQUN2QyxNQUFNLGlCQUFpQixHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdELElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixPQUFPLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLElBQUksdUJBQVksQ0FBQyxHQUFHLFFBQVEsNkJBQTZCLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29pbk1vZHVsZXMgZnJvbSAnLi4nO1xuaW1wb3J0IHsgQmFzZVV0aWxzLCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBmYWN0b3J5IG1ldGhvZCBmb3IgY29pbiB1dGlscyBtZXRob2RzXG4gKiB0aHJvdyBpZiBjb2luIG5vdCBzdXBwb3J0ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2luTmFtZVxuICogQHJldHVybnMge0Jhc2VVdGlsc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKGNvaW5OYW1lOiBzdHJpbmcpOiBCYXNlVXRpbHMge1xuICBjb25zdCBzYW5pdGl6ZWRDb2luTmFtZSA9IGNvaW5zLmdldChjb2luTmFtZS50cmltKCkudG9Mb3dlckNhc2UoKSkuZmFtaWx5O1xuICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhjb2luTW9kdWxlcylcbiAgICAuZmlsdGVyKChrKSA9PiBjb2luTW9kdWxlc1trXS5VdGlscylcbiAgICAuZmluZCgoaykgPT4gay50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gc2FuaXRpemVkQ29pbk5hbWUpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIG5ldyBjb2luTW9kdWxlc1trZXldLlV0aWxzKCk7XG4gIH1cbiAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZChgJHtjb2luTmFtZX0gdXRpbCBmYWN0b3J5IG5vdCBzdXBwb3J0ZWRgKTtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XG4iXX0=
@@ -0,0 +1,10 @@
1
+ export declare const MIDNIGHT_TNC_HASH = "31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b";
2
+ /**
3
+ * Validates a message against a set of whitelisted templates.
4
+ * The templates can contain placeholders like {{variable}} which will be replaced with a wildcard in the regex.
5
+ *
6
+ * @param {string} messageRaw - The raw message to validate.
7
+ * @returns {boolean} - Returns true if the message matches any of the whitelisted templates, false otherwise.
8
+ */
9
+ export declare function validateAgainstMessageTemplates(messageRaw: string): boolean;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/messages/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,qEAAqE,CAAC;AAepG;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAK3E"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MIDNIGHT_TNC_HASH = void 0;
4
+ exports.validateAgainstMessageTemplates = validateAgainstMessageTemplates;
5
+ exports.MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b';
6
+ /*
7
+ * matches a message that starts with "STAR ", followed by a number,
8
+ * then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address,
9
+ * and ends with the midnight TnC hash
10
+ */
11
+ const MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${exports.MIDNIGHT_TNC_HASH}`;
12
+ /**
13
+ * @file Utility functions for validating messages against whitelisted templates.
14
+ * This is used to ensure that only specific message formats are accepted.
15
+ */
16
+ const whitelistedMessageTemplates = [MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE];
17
+ /**
18
+ * Validates a message against a set of whitelisted templates.
19
+ * The templates can contain placeholders like {{variable}} which will be replaced with a wildcard in the regex.
20
+ *
21
+ * @param {string} messageRaw - The raw message to validate.
22
+ * @returns {boolean} - Returns true if the message matches any of the whitelisted templates, false otherwise.
23
+ */
24
+ function validateAgainstMessageTemplates(messageRaw) {
25
+ return whitelistedMessageTemplates.some((template) => {
26
+ const regex = new RegExp(`^${template}$`, 's'); // 's' flag to match newlines
27
+ return regex.test(messageRaw);
28
+ });
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvbWVzc2FnZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBLDBFQUtDO0FBM0JZLFFBQUEsaUJBQWlCLEdBQUcsa0VBQWtFLENBQUM7QUFFcEc7Ozs7R0FJRztBQUNILE1BQU0sNENBQTRDLEdBQUcsOENBQThDLHlCQUFpQixFQUFFLENBQUM7QUFFdkg7OztHQUdHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7QUFFbkY7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsK0JBQStCLENBQUMsVUFBa0I7SUFDaEUsT0FBTywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQzdFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTUlETklHSFRfVE5DX0hBU0ggPSAnMzFhNmJhYjUwYTg0Yjg0MzlhZGNmYjc4NmJiMjAyMGY2ODA3ZTZlOGZkYTYyOWI0MjQxMTBmYzdiYjFjNmI4Yic7XG5cbi8qXG4gKiBtYXRjaGVzIGEgbWVzc2FnZSB0aGF0IHN0YXJ0cyB3aXRoIFwiU1RBUiBcIiwgZm9sbG93ZWQgYnkgYSBudW1iZXIsXG4gKiB0aGVuIFwiIHRvIGFkZHJcIiBvciBcIiB0byBhZGRyX3Rlc3QxXCIsIGZvbGxvd2VkIGJ5IGEgNTArIGNoYXJhY3RlciBhbHBoYW51bWVyaWMgYWRkcmVzcyxcbiAqIGFuZCBlbmRzIHdpdGggdGhlIG1pZG5pZ2h0IFRuQyBoYXNoXG4gKi9cbmNvbnN0IE1JRE5JR0hUX0dMQUNJRVJfRFJPUF9DTEFJTV9NRVNTQUdFX1RFTVBMQVRFID0gYFNUQVIgXFxcXGQrIHRvIGFkZHIoPzoxfF90ZXN0MSlbYS16MC05XXs1MCx9ICR7TUlETklHSFRfVE5DX0hBU0h9YDtcblxuLyoqXG4gKiBAZmlsZSBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdmFsaWRhdGluZyBtZXNzYWdlcyBhZ2FpbnN0IHdoaXRlbGlzdGVkIHRlbXBsYXRlcy5cbiAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBvbmx5IHNwZWNpZmljIG1lc3NhZ2UgZm9ybWF0cyBhcmUgYWNjZXB0ZWQuXG4gKi9cbmNvbnN0IHdoaXRlbGlzdGVkTWVzc2FnZVRlbXBsYXRlcyA9IFtNSUROSUdIVF9HTEFDSUVSX0RST1BfQ0xBSU1fTUVTU0FHRV9URU1QTEFURV07XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgbWVzc2FnZSBhZ2FpbnN0IGEgc2V0IG9mIHdoaXRlbGlzdGVkIHRlbXBsYXRlcy5cbiAqIFRoZSB0ZW1wbGF0ZXMgY2FuIGNvbnRhaW4gcGxhY2Vob2xkZXJzIGxpa2Uge3t2YXJpYWJsZX19IHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHdpbGRjYXJkIGluIHRoZSByZWdleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVJhdyAtIFRoZSByYXcgbWVzc2FnZSB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzc2FnZSBtYXRjaGVzIGFueSBvZiB0aGUgd2hpdGVsaXN0ZWQgdGVtcGxhdGVzLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFnYWluc3RNZXNzYWdlVGVtcGxhdGVzKG1lc3NhZ2VSYXc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gd2hpdGVsaXN0ZWRNZXNzYWdlVGVtcGxhdGVzLnNvbWUoKHRlbXBsYXRlKSA9PiB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHt0ZW1wbGF0ZX0kYCwgJ3MnKTsgLy8gJ3MnIGZsYWcgdG8gbWF0Y2ggbmV3bGluZXNcbiAgICByZXR1cm4gcmVnZXgudGVzdChtZXNzYWdlUmF3KTtcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,15 @@
1
+ export declare const keys: {
2
+ testVec1: {
3
+ seed: string;
4
+ path: string;
5
+ chainCode: string;
6
+ prv: string;
7
+ };
8
+ testVec2: {
9
+ seed: string;
10
+ path: string;
11
+ chainCode: string;
12
+ prv: string;
13
+ };
14
+ };
15
+ //# sourceMappingURL=ed25519Deriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519Deriver.d.ts","sourceRoot":"","sources":["../../../test/resources/ed25519Deriver.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;CAahB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keys = void 0;
4
+ exports.keys = {
5
+ testVec1: {
6
+ seed: '000102030405060708090a0b0c0d0e0f',
7
+ path: `m/0'/1'/2'/2'/1000000000'`,
8
+ chainCode: '68789923a0cac2cd5a29172a475fe9e0fb14cd6adb5ad98a3fa70333e7afa230',
9
+ prv: '8f94d394a8e8fd6b1bc2f3f49f5c47e385281d5c17e65324b0f62483e37e8793',
10
+ },
11
+ testVec2: {
12
+ seed: 'fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542',
13
+ path: `m/0'/2147483647'/1'/2147483646'/2'`,
14
+ chainCode: '5d70af781f3a37b829f0d060924d5e960bdc02e85423494afc0b1a41bbe196d4',
15
+ prv: '551d333177df541ad876a60ea71f00447931c0a9da16f227c11ea080d7391b8d',
16
+ },
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOURlcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3Jlc291cmNlcy9lZDI1NTE5RGVyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLElBQUksR0FBRztJQUNsQixRQUFRLEVBQUU7UUFDUixJQUFJLEVBQUUsa0NBQWtDO1FBQ3hDLElBQUksRUFBRSwyQkFBMkI7UUFDakMsU0FBUyxFQUFFLGtFQUFrRTtRQUM3RSxHQUFHLEVBQUUsa0VBQWtFO0tBQ3hFO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLGtJQUFrSTtRQUN4SSxJQUFJLEVBQUUsb0NBQW9DO1FBQzFDLFNBQVMsRUFBRSxrRUFBa0U7UUFDN0UsR0FBRyxFQUFFLGtFQUFrRTtLQUN4RTtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qga2V5cyA9IHtcbiAgdGVzdFZlYzE6IHtcbiAgICBzZWVkOiAnMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnLFxuICAgIHBhdGg6IGBtLzAnLzEnLzInLzInLzEwMDAwMDAwMDAnYCxcbiAgICBjaGFpbkNvZGU6ICc2ODc4OTkyM2EwY2FjMmNkNWEyOTE3MmE0NzVmZTllMGZiMTRjZDZhZGI1YWQ5OGEzZmE3MDMzM2U3YWZhMjMwJyxcbiAgICBwcnY6ICc4Zjk0ZDM5NGE4ZThmZDZiMWJjMmYzZjQ5ZjVjNDdlMzg1MjgxZDVjMTdlNjUzMjRiMGY2MjQ4M2UzN2U4NzkzJyxcbiAgfSxcbiAgdGVzdFZlYzI6IHtcbiAgICBzZWVkOiAnZmZmY2Y5ZjZmM2YwZWRlYWU3ZTRlMWRlZGJkOGQ1ZDJjZmNjYzljNmMzYzBiZGJhYjdiNGIxYWVhYmE4YTVhMjlmOWM5OTk2OTM5MDhkOGE4Nzg0ODE3ZTdiNzg3NTcyNmY2YzY5NjY2MzYwNWQ1YTU3NTQ1MTRlNGI0ODQ1NDInLFxuICAgIHBhdGg6IGBtLzAnLzIxNDc0ODM2NDcnLzEnLzIxNDc0ODM2NDYnLzInYCxcbiAgICBjaGFpbkNvZGU6ICc1ZDcwYWY3ODFmM2EzN2I4MjlmMGQwNjA5MjRkNWU5NjBiZGMwMmU4NTQyMzQ5NGFmYzBiMWE0MWJiZTE5NmQ0JyxcbiAgICBwcnY6ICc1NTFkMzMzMTc3ZGY1NDFhZDg3NmE2MGVhNzFmMDA0NDc5MzFjMGE5ZGExNmYyMjdjMTFlYTA4MGQ3MzkxYjhkJyxcbiAgfSxcbn07XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { BaseKey, BaseTransaction } from '@bitgo-beta/sdk-core';
2
+ /**
3
+ * The purpose of this coin is to provide a mock to use for the test runner since there is no easy
4
+ * way to mock abstract methods with sinon.
5
+ */
6
+ export declare class TestTransaction extends BaseTransaction {
7
+ canSign(key: BaseKey): boolean;
8
+ toJson(): any;
9
+ toBroadcastFormat(): any;
10
+ }
11
+ //# sourceMappingURL=testTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testTransaction.d.ts","sourceRoot":"","sources":["../../../test/resources/testTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAK9B,MAAM,IAAI,GAAG;IAGb,iBAAiB,IAAI,GAAG;CACzB"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestTransaction = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ /**
6
+ * The purpose of this coin is to provide a mock to use for the test runner since there is no easy
7
+ * way to mock abstract methods with sinon.
8
+ */
9
+ class TestTransaction extends sdk_core_1.BaseTransaction {
10
+ canSign(key) {
11
+ return true;
12
+ }
13
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
14
+ toJson() { }
15
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
16
+ toBroadcastFormat() { }
17
+ }
18
+ exports.TestTransaction = TestTransaction;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9yZXNvdXJjZXMvdGVzdFRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRTtBQUVoRTs7O0dBR0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsMEJBQWU7SUFDbEQsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLE1BQU0sS0FBUyxDQUFDO0lBRWhCLGdFQUFnRTtJQUNoRSxpQkFBaUIsS0FBUyxDQUFDO0NBQzVCO0FBVkQsMENBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbi8qKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjb2luIGlzIHRvIHByb3ZpZGUgYSBtb2NrIHRvIHVzZSBmb3IgdGhlIHRlc3QgcnVubmVyIHNpbmNlIHRoZXJlIGlzIG5vIGVhc3lcbiAqIHdheSB0byBtb2NrIGFic3RyYWN0IG1ldGhvZHMgd2l0aCBzaW5vbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlc3RUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHRvSnNvbigpOiBhbnkge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IGFueSB7fVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { BaseAddress, BaseKey, BaseTransaction, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
4
+ import { TestTransaction } from './testTransaction';
5
+ /**
6
+ * The purpose of this coin is a mock to use for the test runner since there is no easy way to mock
7
+ * an interface with sinon without providing the mandatory fields/methods.
8
+ * Use it along with sinon by stubbing its methods.
9
+ */
10
+ export declare class TestTransactionBuilder extends BaseTransactionBuilder {
11
+ _transaction: TestTransaction;
12
+ _coinConfig: Readonly<CoinConfig>;
13
+ constructor();
14
+ displayName(): string;
15
+ validateAddress(address: BaseAddress, addressFormat?: string): void;
16
+ validateValue(value: BigNumber): boolean;
17
+ validateKey(key: BaseKey): void;
18
+ fromImplementation(rawTransaction: any): any;
19
+ protected signImplementation(privateKey: BaseKey): TestTransaction;
20
+ buildImplementation(): Promise<BaseTransaction>;
21
+ protected get transaction(): BaseTransaction;
22
+ protected set transaction(transaction: BaseTransaction);
23
+ validateRawTransaction(rawTransaction: any): void;
24
+ validateTransaction(transaction: BaseTransaction): void;
25
+ }
26
+ //# sourceMappingURL=testTransactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../test/resources/testTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;IAChE,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;;IAO3B,WAAW,IAAI,MAAM;IAKrB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM;IAE5D,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAKxC,WAAW,CAAC,GAAG,EAAE,OAAO;IAExB,kBAAkB,CAAC,cAAc,EAAE,GAAG;IAI7C,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO;IAInC,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAI5D,SAAS,KAAK,WAAW,IAAI,eAAe,CAE3C;IAED,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,eAAe,EAErD;IAGD,sBAAsB,CAAC,cAAc,EAAE,GAAG;IAG1C,mBAAmB,CAAC,WAAW,EAAE,eAAe;CACjD"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestTransactionBuilder = void 0;
4
+ const statics_1 = require("@bitgo-beta/statics");
5
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
6
+ /**
7
+ * The purpose of this coin is a mock to use for the test runner since there is no easy way to mock
8
+ * an interface with sinon without providing the mandatory fields/methods.
9
+ * Use it along with sinon by stubbing its methods.
10
+ */
11
+ class TestTransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
12
+ constructor() {
13
+ super(statics_1.coins.get('ttrx'));
14
+ this._coinConfig = statics_1.coins.get('ttrx');
15
+ }
16
+ displayName() {
17
+ return 'Test';
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
20
+ validateAddress(address, addressFormat) { }
21
+ validateValue(value) {
22
+ return true;
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
25
+ validateKey(key) { }
26
+ fromImplementation(rawTransaction) {
27
+ return rawTransaction;
28
+ }
29
+ signImplementation(privateKey) {
30
+ return this._transaction;
31
+ }
32
+ async buildImplementation() {
33
+ return Promise.resolve(this._transaction);
34
+ }
35
+ get transaction() {
36
+ return this._transaction;
37
+ }
38
+ set transaction(transaction) {
39
+ this._transaction = transaction;
40
+ }
41
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
42
+ validateRawTransaction(rawTransaction) { }
43
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
44
+ validateTransaction(transaction) { }
45
+ }
46
+ exports.TestTransactionBuilder = TestTransactionBuilder;
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFRyYW5zYWN0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvcmVzb3VyY2VzL3Rlc3RUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQW9FO0FBQ3BFLG1EQUFxRztBQUdyRzs7OztHQUlHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxpQ0FBc0I7SUFJaEU7UUFDRSxLQUFLLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0VBQWdFO0lBQ3pELGVBQWUsQ0FBQyxPQUFvQixFQUFFLGFBQXNCLElBQUcsQ0FBQztJQUVoRSxhQUFhLENBQUMsS0FBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3pELFdBQVcsQ0FBQyxHQUFZLElBQUcsQ0FBQztJQUU1QixrQkFBa0IsQ0FBQyxjQUFtQjtRQUMzQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRVMsa0JBQWtCLENBQUMsVUFBbUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWMsV0FBVyxDQUFDLFdBQTRCO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsc0JBQXNCLENBQUMsY0FBbUIsSUFBRyxDQUFDO0lBRTlDLGdFQUFnRTtJQUNoRSxtQkFBbUIsQ0FBQyxXQUE0QixJQUFHLENBQUM7Q0FDckQ7QUFoREQsd0RBZ0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VBZGRyZXNzLCBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24sIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0VHJhbnNhY3Rpb24gfSBmcm9tICcuL3Rlc3RUcmFuc2FjdGlvbic7XG5cbi8qKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjb2luIGlzIGEgbW9jayB0byB1c2UgZm9yIHRoZSB0ZXN0IHJ1bm5lciBzaW5jZSB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBtb2NrXG4gKiBhbiBpbnRlcmZhY2Ugd2l0aCBzaW5vbiB3aXRob3V0IHByb3ZpZGluZyB0aGUgbWFuZGF0b3J5IGZpZWxkcy9tZXRob2RzLlxuICogVXNlIGl0IGFsb25nIHdpdGggc2lub24gYnkgc3R1YmJpbmcgaXRzIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXN0VHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIF90cmFuc2FjdGlvbjogVGVzdFRyYW5zYWN0aW9uO1xuICBfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoY29pbnMuZ2V0KCd0dHJ4JykpO1xuICAgIHRoaXMuX2NvaW5Db25maWcgPSBjb2lucy5nZXQoJ3R0cngnKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVGVzdCc7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KSB7fVxuXG4gIHB1YmxpYyBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IGFueSkge1xuICAgIHJldHVybiByYXdUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24ocHJpdmF0ZUtleTogQmFzZUtleSkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl90cmFuc2FjdGlvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogQmFzZVRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KSB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogQmFzZVRyYW5zYWN0aW9uKSB7fVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coin/baseCoin/transactionBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
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 sinon_1 = __importDefault(require("sinon"));
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const should_1 = __importDefault(require("should"));
9
+ const testTransactionBuilder_1 = require("../../../resources/testTransactionBuilder");
10
+ const testTransaction_1 = require("../../../resources/testTransaction");
11
+ describe('Transaction builder', () => {
12
+ let txBuilder;
13
+ let sandbox;
14
+ beforeEach(() => {
15
+ sandbox = sinon_1.default.createSandbox();
16
+ txBuilder = new testTransactionBuilder_1.TestTransactionBuilder();
17
+ });
18
+ afterEach(() => {
19
+ sandbox.restore();
20
+ });
21
+ it('should sign a transaction that is valid', () => {
22
+ const testTx = sinon_1.default.createStubInstance(testTransaction_1.TestTransaction);
23
+ testTx.canSign.returns(true);
24
+ const validateKey = sinon_1.default.spy(txBuilder, 'validateKey');
25
+ txBuilder.from(testTx);
26
+ txBuilder.sign({ key: 'validKey' });
27
+ sandbox.assert.calledOnce(validateKey);
28
+ });
29
+ it('should sign a transaction with an invalid signature', () => {
30
+ const testTx = sinon_1.default.createStubInstance(testTransaction_1.TestTransaction);
31
+ testTx.canSign.returns(false);
32
+ const validateKey = sinon_1.default.spy(txBuilder, 'validateKey');
33
+ txBuilder.from(testTx);
34
+ assert_1.default.throws(() => txBuilder.sign({ key: 'invalidKey' }));
35
+ sandbox.assert.calledOnce(validateKey);
36
+ });
37
+ it('should parse a valid transaction', () => {
38
+ const testTx = sinon_1.default.createStubInstance(testTransaction_1.TestTransaction);
39
+ testTx.canSign.returns(true);
40
+ const validateRawTransaction = sinon_1.default.spy(txBuilder, 'validateRawTransaction');
41
+ const fromImplementation = sinon_1.default.spy(txBuilder, 'fromImplementation');
42
+ txBuilder.from(testTx);
43
+ sandbox.assert.calledOnce(validateRawTransaction);
44
+ sandbox.assert.calledOnce(fromImplementation);
45
+ });
46
+ it('should build a valid transaction', () => {
47
+ const testTx = sinon_1.default.createStubInstance(testTransaction_1.TestTransaction);
48
+ testTx.canSign.returns(true);
49
+ const validateTransaction = sinon_1.default.spy(txBuilder, 'validateTransaction');
50
+ const buildImplementation = sinon_1.default.spy(txBuilder, 'buildImplementation');
51
+ txBuilder.from(testTx);
52
+ txBuilder.build();
53
+ sandbox.assert.calledOnce(validateTransaction);
54
+ sandbox.assert.calledOnce(buildImplementation);
55
+ });
56
+ it('should verify validity window params', () => {
57
+ const testTx = sinon_1.default.createStubInstance(testTransaction_1.TestTransaction);
58
+ testTx.canSign.returns(true);
59
+ txBuilder.from(testTx);
60
+ txBuilder.build();
61
+ let validityWindow;
62
+ let params = {};
63
+ (0, should_1.default)(() => txBuilder.getValidityWindow(params)).throwError('Unit parameter must be specified as blockheight or timestamp');
64
+ params = {
65
+ unit: 'wrongUnit',
66
+ };
67
+ (0, should_1.default)(() => txBuilder.getValidityWindow(params)).throwError('Unit parameter must be specified as blockheight or timestamp');
68
+ params = {
69
+ firstValid: 10,
70
+ lastValid: 23,
71
+ minDuration: 10,
72
+ maxDuration: 20,
73
+ unit: '',
74
+ };
75
+ (0, should_1.default)(() => txBuilder.getValidityWindow(params)).throwError('Unit parameter must be specified as blockheight or timestamp');
76
+ params = {
77
+ firstValid: 10,
78
+ lastValid: 23,
79
+ minDuration: 10,
80
+ maxDuration: 5,
81
+ unit: 'blockheight',
82
+ };
83
+ (0, should_1.default)(() => txBuilder.getValidityWindow(params)).throwError(`Expected maxDuration (5) to be grather than minDuration (10)`);
84
+ params = {
85
+ firstValid: 10,
86
+ lastValid: 11,
87
+ minDuration: 10,
88
+ maxDuration: 20,
89
+ unit: 'timestamp',
90
+ };
91
+ validityWindow = txBuilder.getValidityWindow(params);
92
+ validityWindow.should.have.properties(['firstValid', 'lastValid', 'minDuration', 'maxDuration', 'unit']);
93
+ validityWindow.firstValid.should.be.equal(10);
94
+ validityWindow.lastValid.should.be.equal(30);
95
+ validityWindow.minDuration.should.be.equal(10);
96
+ validityWindow.maxDuration.should.be.equal(20);
97
+ validityWindow.unit.should.be.equal('timestamp');
98
+ params = {
99
+ firstValid: 10,
100
+ lastValid: 23,
101
+ minDuration: 10,
102
+ maxDuration: 11,
103
+ unit: 'blockheight',
104
+ };
105
+ validityWindow = txBuilder.getValidityWindow(params);
106
+ validityWindow.should.have.properties(['firstValid', 'lastValid', 'minDuration', 'maxDuration', 'unit']);
107
+ validityWindow.firstValid.should.be.equal(10);
108
+ validityWindow.lastValid.should.be.equal(21);
109
+ validityWindow.minDuration.should.be.equal(10);
110
+ validityWindow.maxDuration.should.be.equal(11);
111
+ validityWindow.unit.should.be.equal('blockheight');
112
+ params = {
113
+ unit: 'timestamp',
114
+ };
115
+ const dateNow = Date.now();
116
+ validityWindow = txBuilder.getValidityWindow(params);
117
+ validityWindow.should.have.properties(['firstValid', 'lastValid', 'minDuration', 'maxDuration', 'unit']);
118
+ validityWindow.firstValid.should.be.greaterThanOrEqual(dateNow);
119
+ validityWindow.lastValid.should.be.equal(validityWindow.firstValid + 31536000000);
120
+ validityWindow.minDuration.should.be.equal(0);
121
+ validityWindow.maxDuration.should.be.equal(31536000000);
122
+ validityWindow.unit.should.be.equal('timestamp');
123
+ params = {
124
+ unit: 'blockheight',
125
+ };
126
+ validityWindow = txBuilder.getValidityWindow(params);
127
+ validityWindow.should.have.properties(['firstValid', 'lastValid', 'minDuration', 'maxDuration', 'unit']);
128
+ validityWindow.firstValid.should.be.equal(0);
129
+ validityWindow.lastValid.should.be.equal(1000000);
130
+ validityWindow.minDuration.should.be.equal(0);
131
+ validityWindow.maxDuration.should.be.equal(1000000);
132
+ validityWindow.unit.should.be.equal('blockheight');
133
+ });
134
+ });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2NvaW4vYmFzZUNvaW4vdHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsc0ZBQW1GO0FBQ25GLHdFQUFxRTtBQUVyRSxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLElBQUksU0FBUyxDQUFDO0lBQ2QsSUFBSSxPQUEyQixDQUFDO0lBRWhDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxPQUFPLEdBQUcsZUFBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLFNBQVMsR0FBRyxJQUFJLCtDQUFzQixFQUFFLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsa0JBQWtCLENBQUMsaUNBQWUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sV0FBVyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXhELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgs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QUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxjQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUZXN0VHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL3Rlc3RUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVGVzdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL3Rlc3RUcmFuc2FjdGlvbic7XG5cbmRlc2NyaWJlKCdUcmFuc2FjdGlvbiBidWlsZGVyJywgKCkgPT4ge1xuICBsZXQgdHhCdWlsZGVyO1xuICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgdHhCdWlsZGVyID0gbmV3IFRlc3RUcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGEgdHJhbnNhY3Rpb24gdGhhdCBpcyB2YWxpZCcsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0VHggPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoVGVzdFRyYW5zYWN0aW9uKTtcbiAgICB0ZXN0VHguY2FuU2lnbi5yZXR1cm5zKHRydWUpO1xuICAgIGNvbnN0IHZhbGlkYXRlS2V5ID0gc2lub24uc3B5KHR4QnVpbGRlciwgJ3ZhbGlkYXRlS2V5Jyk7XG5cbiAgICB0eEJ1aWxkZXIuZnJvbSh0ZXN0VHgpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiAndmFsaWRLZXknIH0pO1xuXG4gICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZSh2YWxpZGF0ZUtleSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhIHRyYW5zYWN0aW9uIHdpdGggYW4gaW52YWxpZCBzaWduYXR1cmUnLCAoKSA9PiB7XG4gICAgY29uc3QgdGVzdFR4ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFRlc3RUcmFuc2FjdGlvbik7XG4gICAgdGVzdFR4LmNhblNpZ24ucmV0dXJucyhmYWxzZSk7XG4gICAgY29uc3QgdmFsaWRhdGVLZXkgPSBzaW5vbi5zcHkodHhCdWlsZGVyLCAndmFsaWRhdGVLZXknKTtcblxuICAgIHR4QnVpbGRlci5mcm9tKHRlc3RUeCk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogJ2ludmFsaWRLZXknIH0pKTtcblxuICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UodmFsaWRhdGVLZXkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIGEgdmFsaWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgdGVzdFR4ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFRlc3RUcmFuc2FjdGlvbik7XG4gICAgdGVzdFR4LmNhblNpZ24ucmV0dXJucyh0cnVlKTtcbiAgICBjb25zdCB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uID0gc2lub24uc3B5KHR4QnVpbGRlciwgJ3ZhbGlkYXRlUmF3VHJhbnNhY3Rpb24nKTtcbiAgICBjb25zdCBmcm9tSW1wbGVtZW50YXRpb24gPSBzaW5vbi5zcHkodHhCdWlsZGVyLCAnZnJvbUltcGxlbWVudGF0aW9uJyk7XG5cbiAgICB0eEJ1aWxkZXIuZnJvbSh0ZXN0VHgpO1xuXG4gICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZSh2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKTtcbiAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGZyb21JbXBsZW1lbnRhdGlvbik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSB2YWxpZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0VHggPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoVGVzdFRyYW5zYWN0aW9uKTtcbiAgICB0ZXN0VHguY2FuU2lnbi5yZXR1cm5zKHRydWUpO1xuICAgIGNvbnN0IHZhbGlkYXRlVHJhbnNhY3Rpb24gPSBzaW5vbi5zcHkodHhCdWlsZGVyLCAndmFsaWRhdGVUcmFuc2FjdGlvbicpO1xuICAgIGNvbnN0IGJ1aWxkSW1wbGVtZW50YXRpb24gPSBzaW5vbi5zcHkodHhCdWlsZGVyLCAnYnVpbGRJbXBsZW1lbnRhdGlvbicpO1xuXG4gICAgdHhCdWlsZGVyLmZyb20odGVzdFR4KTtcbiAgICB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UodmFsaWRhdGVUcmFuc2FjdGlvbik7XG4gICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShidWlsZEltcGxlbWVudGF0aW9uKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgdmFsaWRpdHkgd2luZG93IHBhcmFtcycsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0VHggPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoVGVzdFRyYW5zYWN0aW9uKTtcbiAgICB0ZXN0VHguY2FuU2lnbi5yZXR1cm5zKHRydWUpO1xuICAgIHR4QnVpbGRlci5mcm9tKHRlc3RUeCk7XG4gICAgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgbGV0IHZhbGlkaXR5V2luZG93O1xuXG4gICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZ2V0VmFsaWRpdHlXaW5kb3cocGFyYW1zKSkudGhyb3dFcnJvcihcbiAgICAgICdVbml0IHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCBhcyBibG9ja2hlaWdodCBvciB0aW1lc3RhbXAnLFxuICAgICk7XG5cbiAgICBwYXJhbXMgPSB7XG4gICAgICB1bml0OiAnd3JvbmdVbml0JyxcbiAgICB9O1xuICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZ2V0VmFsaWRpdHlXaW5kb3cocGFyYW1zKSkudGhyb3dFcnJvcihcbiAgICAgICdVbml0IHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCBhcyBibG9ja2hlaWdodCBvciB0aW1lc3RhbXAnLFxuICAgICk7XG5cbiAgICBwYXJhbXMgPSB7XG4gICAgICBmaXJzdFZhbGlkOiAxMCxcbiAgICAgIGxhc3RWYWxpZDogMjMsXG4gICAgICBtaW5EdXJhdGlvbjogMTAsXG4gICAgICBtYXhEdXJhdGlvbjogMjAsXG4gICAgICB1bml0OiAnJyxcbiAgICB9O1xuICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZ2V0VmFsaWRpdHlXaW5kb3cocGFyYW1zKSkudGhyb3dFcnJvcihcbiAgICAgICdVbml0IHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCBhcyBibG9ja2hlaWdodCBvciB0aW1lc3RhbXAnLFxuICAgICk7XG5cbiAgICBwYXJhbXMgPSB7XG4gICAgICBmaXJzdFZhbGlkOiAxMCxcbiAgICAgIGxhc3RWYWxpZDogMjMsXG4gICAgICBtaW5EdXJhdGlvbjogMTAsXG4gICAgICBtYXhEdXJhdGlvbjogNSxcbiAgICAgIHVuaXQ6ICdibG9ja2hlaWdodCcsXG4gICAgfTtcbiAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmdldFZhbGlkaXR5V2luZG93KHBhcmFtcykpLnRocm93RXJyb3IoXG4gICAgICBgRXhwZWN0ZWQgbWF4RHVyYXRpb24gKDUpIHRvIGJlIGdyYXRoZXIgdGhhbiBtaW5EdXJhdGlvbiAoMTApYCxcbiAgICApO1xuXG4gICAgcGFyYW1zID0ge1xuICAgICAgZmlyc3RWYWxpZDogMTAsXG4gICAgICBsYXN0VmFsaWQ6IDExLFxuICAgICAgbWluRHVyYXRpb246IDEwLFxuICAgICAgbWF4RHVyYXRpb246IDIwLFxuICAgICAgdW5pdDogJ3RpbWVzdGFtcCcsXG4gICAgfTtcbiAgICB2YWxpZGl0eVdpbmRvdyA9IHR4QnVpbGRlci5nZXRWYWxpZGl0eVdpbmRvdyhwYXJhbXMpO1xuICAgIHZhbGlkaXR5V2luZG93LnNob3VsZC5oYXZlLnByb3BlcnRpZXMoWydmaXJzdFZhbGlkJywgJ2xhc3RWYWxpZCcsICdtaW5EdXJhdGlvbicsICdtYXhEdXJhdGlvbicsICd1bml0J10pO1xuICAgIHZhbGlkaXR5V2luZG93LmZpcnN0VmFsaWQuc2hvdWxkLmJlLmVxdWFsKDEwKTtcbiAgICB2YWxpZGl0eVdpbmRvdy5sYXN0VmFsaWQuc2hvdWxkLmJlLmVxdWFsKDMwKTtcbiAgICB2YWxpZGl0eVdpbmRvdy5taW5EdXJhdGlvbi5zaG91bGQuYmUuZXF1YWwoMTApO1xuICAgIHZhbGlkaXR5V2luZG93Lm1heER1cmF0aW9uLnNob3VsZC5iZS5lcXVhbCgyMCk7XG4gICAgdmFsaWRpdHlXaW5kb3cudW5pdC5zaG91bGQuYmUuZXF1YWwoJ3RpbWVzdGFtcCcpO1xuXG4gICAgcGFyYW1zID0ge1xuICAgICAgZmlyc3RWYWxpZDogMTAsXG4gICAgICBsYXN0VmFsaWQ6IDIzLFxuICAgICAgbWluRHVyYXRpb246IDEwLFxuICAgICAgbWF4RHVyYXRpb246IDExLFxuICAgICAgdW5pdDogJ2Jsb2NraGVpZ2h0JyxcbiAgICB9O1xuICAgIHZhbGlkaXR5V2luZG93ID0gdHhCdWlsZGVyLmdldFZhbGlkaXR5V2luZG93KHBhcmFtcyk7XG4gICAgdmFsaWRpdHlXaW5kb3cuc2hvdWxkLmhhdmUucHJvcGVydGllcyhbJ2ZpcnN0VmFsaWQnLCAnbGFzdFZhbGlkJywgJ21pbkR1cmF0aW9uJywgJ21heER1cmF0aW9uJywgJ3VuaXQnXSk7XG4gICAgdmFsaWRpdHlXaW5kb3cuZmlyc3RWYWxpZC5zaG91bGQuYmUuZXF1YWwoMTApO1xuICAgIHZhbGlkaXR5V2luZG93Lmxhc3RWYWxpZC5zaG91bGQuYmUuZXF1YWwoMjEpO1xuICAgIHZhbGlkaXR5V2luZG93Lm1pbkR1cmF0aW9uLnNob3VsZC5iZS5lcXVhbCgxMCk7XG4gICAgdmFsaWRpdHlXaW5kb3cubWF4RHVyYXRpb24uc2hvdWxkLmJlLmVxdWFsKDExKTtcbiAgICB2YWxpZGl0eVdpbmRvdy51bml0LnNob3VsZC5iZS5lcXVhbCgnYmxvY2toZWlnaHQnKTtcblxuICAgIHBhcmFtcyA9IHtcbiAgICAgIHVuaXQ6ICd0aW1lc3RhbXAnLFxuICAgIH07XG4gICAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7XG4gICAgdmFsaWRpdHlXaW5kb3cgPSB0eEJ1aWxkZXIuZ2V0VmFsaWRpdHlXaW5kb3cocGFyYW1zKTtcbiAgICB2YWxpZGl0eVdpbmRvdy5zaG91bGQuaGF2ZS5wcm9wZXJ0aWVzKFsnZmlyc3RWYWxpZCcsICdsYXN0VmFsaWQnLCAnbWluRHVyYXRpb24nLCAnbWF4RHVyYXRpb24nLCAndW5pdCddKTtcbiAgICB2YWxpZGl0eVdpbmRvdy5maXJzdFZhbGlkLnNob3VsZC5iZS5ncmVhdGVyVGhhbk9yRXF1YWwoZGF0ZU5vdyk7XG4gICAgdmFsaWRpdHlXaW5kb3cubGFzdFZhbGlkLnNob3VsZC5iZS5lcXVhbCh2YWxpZGl0eVdpbmRvdy5maXJzdFZhbGlkICsgMzE1MzYwMDAwMDApO1xuICAgIHZhbGlkaXR5V2luZG93Lm1pbkR1cmF0aW9uLnNob3VsZC5iZS5lcXVhbCgwKTtcbiAgICB2YWxpZGl0eVdpbmRvdy5tYXhEdXJhdGlvbi5zaG91bGQuYmUuZXF1YWwoMzE1MzYwMDAwMDApO1xuICAgIHZhbGlkaXR5V2luZG93LnVuaXQuc2hvdWxkLmJlLmVxdWFsKCd0aW1lc3RhbXAnKTtcblxuICAgIHBhcmFtcyA9IHtcbiAgICAgIHVuaXQ6ICdibG9ja2hlaWdodCcsXG4gICAgfTtcbiAgICB2YWxpZGl0eVdpbmRvdyA9IHR4QnVpbGRlci5nZXRWYWxpZGl0eVdpbmRvdyhwYXJhbXMpO1xuICAgIHZhbGlkaXR5V2luZG93LnNob3VsZC5oYXZlLnByb3BlcnRpZXMoWydmaXJzdFZhbGlkJywgJ2xhc3RWYWxpZCcsICdtaW5EdXJhdGlvbicsICdtYXhEdXJhdGlvbicsICd1bml0J10pO1xuICAgIHZhbGlkaXR5V2luZG93LmZpcnN0VmFsaWQuc2hvdWxkLmJlLmVxdWFsKDApO1xuICAgIHZhbGlkaXR5V2luZG93Lmxhc3RWYWxpZC5zaG91bGQuYmUuZXF1YWwoMTAwMDAwMCk7XG4gICAgdmFsaWRpdHlXaW5kb3cubWluRHVyYXRpb24uc2hvdWxkLmJlLmVxdWFsKDApO1xuICAgIHZhbGlkaXR5V2luZG93Lm1heER1cmF0aW9uLnNob3VsZC5iZS5lcXVhbCgxMDAwMDAwKTtcbiAgICB2YWxpZGl0eVdpbmRvdy51bml0LnNob3VsZC5iZS5lcXVhbCgnYmxvY2toZWlnaHQnKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { BaseCoin } from '@bitgo-beta/statics';
2
+ import { BaseMessage, BaseMessageBuilder, BaseMessageBuilderFactory, IMessage, IMessageBuilder, MessageOptions, MessageStandardType } from '@bitgo-beta/sdk-core';
3
+ export declare class MockMessageBuilderFactory extends BaseMessageBuilderFactory {
4
+ constructor(coinConfig: Readonly<BaseCoin>);
5
+ getMessageBuilder(type: MessageStandardType): IMessageBuilder;
6
+ }
7
+ export declare class MockMessageBuilder extends BaseMessageBuilder {
8
+ constructor(coinConfig: Readonly<BaseCoin>, type?: MessageStandardType);
9
+ buildMessage(options: MessageOptions): Promise<IMessage>;
10
+ fromBroadcastFormat(broadcastMessage: any): Promise<IMessage>;
11
+ }
12
+ export declare class MockMessage extends BaseMessage {
13
+ constructor(options: MessageOptions);
14
+ getSignablePayload(): Promise<string | Buffer>;
15
+ }
16
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../test/unit/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,yBAA0B,SAAQ,yBAAyB;gBAC1D,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAI1C,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe;CAG9D;AAED,qBAAa,kBAAmB,SAAQ,kBAAkB;gBAC5C,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAE,mBAAiD;IAI7F,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIxD,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;CAUpE;AAED,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,OAAO,EAAE,cAAc;IAI7B,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;CAIrD"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockMessage = exports.MockMessageBuilder = exports.MockMessageBuilderFactory = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ class MockMessageBuilderFactory extends sdk_core_1.BaseMessageBuilderFactory {
6
+ constructor(coinConfig) {
7
+ super(coinConfig);
8
+ }
9
+ getMessageBuilder(type) {
10
+ return new MockMessageBuilder(this.coinConfig, type);
11
+ }
12
+ }
13
+ exports.MockMessageBuilderFactory = MockMessageBuilderFactory;
14
+ class MockMessageBuilder extends sdk_core_1.BaseMessageBuilder {
15
+ constructor(coinConfig, type = sdk_core_1.MessageStandardType.UNKNOWN) {
16
+ super(coinConfig, type);
17
+ }
18
+ async buildMessage(options) {
19
+ return new MockMessage(options);
20
+ }
21
+ async fromBroadcastFormat(broadcastMessage) {
22
+ this.setType(broadcastMessage.type);
23
+ this.setPayload(broadcastMessage.payload);
24
+ this.setSignatures(broadcastMessage.signatures || []);
25
+ this.setSigners(broadcastMessage.signers || []);
26
+ if (broadcastMessage.metadata) {
27
+ this.setMetadata(broadcastMessage.metadata);
28
+ }
29
+ return this.build();
30
+ }
31
+ }
32
+ exports.MockMessageBuilder = MockMessageBuilder;
33
+ class MockMessage extends sdk_core_1.BaseMessage {
34
+ constructor(options) {
35
+ super(options);
36
+ }
37
+ async getSignablePayload() {
38
+ this.signablePayload = Buffer.from(this.payload);
39
+ return this.signablePayload;
40
+ }
41
+ }
42
+ exports.MockMessage = MockMessage;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvZml4dHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBUThCO0FBRTlCLE1BQWEseUJBQTBCLFNBQVEsb0NBQXlCO0lBQ3RFLFlBQVksVUFBOEI7UUFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUF5QjtRQUN6QyxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0Y7QUFSRCw4REFRQztBQUVELE1BQWEsa0JBQW1CLFNBQVEsNkJBQWtCO0lBQ3hELFlBQVksVUFBOEIsRUFBRSxPQUE0Qiw4QkFBbUIsQ0FBQyxPQUFPO1FBQ2pHLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBdUI7UUFDeEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGdCQUFxQjtRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFuQkQsZ0RBbUJDO0FBRUQsTUFBYSxXQUFZLFNBQVEsc0JBQVc7SUFDMUMsWUFBWSxPQUF1QjtRQUNqQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBVEQsa0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZU1lc3NhZ2UsXG4gIEJhc2VNZXNzYWdlQnVpbGRlcixcbiAgQmFzZU1lc3NhZ2VCdWlsZGVyRmFjdG9yeSxcbiAgSU1lc3NhZ2UsXG4gIElNZXNzYWdlQnVpbGRlcixcbiAgTWVzc2FnZU9wdGlvbnMsXG4gIE1lc3NhZ2VTdGFuZGFyZFR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGNsYXNzIE1vY2tNZXNzYWdlQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlTWVzc2FnZUJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8QmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRNZXNzYWdlQnVpbGRlcih0eXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlKTogSU1lc3NhZ2VCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vY2tNZXNzYWdlQnVpbGRlcih0aGlzLmNvaW5Db25maWcsIHR5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrTWVzc2FnZUJ1aWxkZXIgZXh0ZW5kcyBCYXNlTWVzc2FnZUJ1aWxkZXIge1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxCYXNlQ29pbj4sIHR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUgPSBNZXNzYWdlU3RhbmRhcmRUeXBlLlVOS05PV04pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnLCB0eXBlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkTWVzc2FnZShvcHRpb25zOiBNZXNzYWdlT3B0aW9ucyk6IFByb21pc2U8SU1lc3NhZ2U+IHtcbiAgICByZXR1cm4gbmV3IE1vY2tNZXNzYWdlKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgZnJvbUJyb2FkY2FzdEZvcm1hdChicm9hZGNhc3RNZXNzYWdlOiBhbnkpOiBQcm9taXNlPElNZXNzYWdlPiB7XG4gICAgdGhpcy5zZXRUeXBlKGJyb2FkY2FzdE1lc3NhZ2UudHlwZSk7XG4gICAgdGhpcy5zZXRQYXlsb2FkKGJyb2FkY2FzdE1lc3NhZ2UucGF5bG9hZCk7XG4gICAgdGhpcy5zZXRTaWduYXR1cmVzKGJyb2FkY2FzdE1lc3NhZ2Uuc2lnbmF0dXJlcyB8fCBbXSk7XG4gICAgdGhpcy5zZXRTaWduZXJzKGJyb2FkY2FzdE1lc3NhZ2Uuc2lnbmVycyB8fCBbXSk7XG4gICAgaWYgKGJyb2FkY2FzdE1lc3NhZ2UubWV0YWRhdGEpIHtcbiAgICAgIHRoaXMuc2V0TWV0YWRhdGEoYnJvYWRjYXN0TWVzc2FnZS5tZXRhZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJ1aWxkKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tNZXNzYWdlIGV4dGVuZHMgQmFzZU1lc3NhZ2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNZXNzYWdlT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0U2lnbmFibGVQYXlsb2FkKCk6IFByb21pc2U8c3RyaW5nIHwgQnVmZmVyPiB7XG4gICAgdGhpcy5zaWduYWJsZVBheWxvYWQgPSBCdWZmZXIuZnJvbSh0aGlzLnBheWxvYWQpO1xuICAgIHJldHVybiB0aGlzLnNpZ25hYmxlUGF5bG9hZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
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 assert_1 = __importDefault(require("assert"));
7
+ const src_1 = require("../../src");
8
+ describe('Coin factory', () => {
9
+ it('should fail to instantiate an unsupported coin', () => {
10
+ assert_1.default.throws(() => (0, src_1.getBuilder)('fakeUnsupported'));
11
+ });
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBQXVDO0FBRXZDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7UUFDeEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxnQkFBVSxFQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdDb2luIGZhY3RvcnknLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgZmFpbCB0byBpbnN0YW50aWF0ZSBhbiB1bnN1cHBvcnRlZCBjb2luJywgKCkgPT4ge1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZ2V0QnVpbGRlcignZmFrZVVuc3VwcG9ydGVkJykpO1xuICB9KTtcbn0pO1xuIl19