@bitgo/sdk-coin-flrp 1.3.4 → 1.4.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 (130) hide show
  1. package/dist/src/flrp.d.ts +6 -75
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +13 -298
  4. package/dist/src/index.d.ts +0 -1
  5. package/dist/src/index.d.ts.map +1 -1
  6. package/dist/src/index.js +1 -2
  7. package/dist/src/lib/ExportInCTxBuilder.d.ts +51 -0
  8. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/ExportInCTxBuilder.js +186 -0
  10. package/dist/src/lib/ExportInPTxBuilder.d.ts +47 -0
  11. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/ExportInPTxBuilder.js +273 -0
  13. package/dist/src/lib/ImportInCTxBuilder.d.ts +48 -0
  14. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/ImportInCTxBuilder.js +215 -0
  16. package/dist/src/lib/ImportInPTxBuilder.d.ts +33 -0
  17. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/ImportInPTxBuilder.js +180 -0
  19. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +18 -16
  20. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  21. package/dist/src/lib/atomicInCTransactionBuilder.js +38 -36
  22. package/dist/src/lib/atomicTransactionBuilder.d.ts +42 -79
  23. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/atomicTransactionBuilder.js +138 -281
  25. package/dist/src/lib/iface.d.ts +50 -51
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +22 -10
  28. package/dist/src/lib/index.d.ts +2 -3
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +5 -6
  31. package/dist/src/lib/keyPair.d.ts +1 -1
  32. package/dist/src/lib/keyPair.d.ts.map +1 -1
  33. package/dist/src/lib/keyPair.js +9 -5
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +32 -67
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.js +91 -205
  37. package/dist/src/lib/transaction.d.ts +8 -73
  38. package/dist/src/lib/transaction.d.ts.map +1 -1
  39. package/dist/src/lib/transaction.js +159 -210
  40. package/dist/src/lib/transactionBuilder.d.ts +56 -34
  41. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  42. package/dist/src/lib/transactionBuilder.js +113 -70
  43. package/dist/src/lib/transactionBuilderFactory.d.ts +35 -30
  44. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  45. package/dist/src/lib/transactionBuilderFactory.js +133 -74
  46. package/dist/src/lib/utils.d.ts +73 -151
  47. package/dist/src/lib/utils.d.ts.map +1 -1
  48. package/dist/src/lib/utils.js +197 -390
  49. package/dist/test/resources/transactionData/exportInC.d.ts +20 -0
  50. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
  51. package/dist/test/resources/transactionData/exportInC.js +34 -0
  52. package/dist/test/resources/transactionData/exportInP.d.ts +69 -0
  53. package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
  54. package/dist/test/resources/transactionData/exportInP.js +140 -0
  55. package/dist/test/resources/transactionData/importInC.d.ts +27 -0
  56. package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
  57. package/dist/test/resources/transactionData/importInC.js +44 -0
  58. package/dist/test/resources/transactionData/importInP.d.ts +35 -0
  59. package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
  60. package/dist/test/resources/transactionData/importInP.js +58 -0
  61. package/dist/test/unit/lib/exportInCTxBuilder.js +95 -513
  62. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +1 -1
  63. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -1
  64. package/dist/test/unit/lib/exportInPTxBuilder.js +110 -366
  65. package/dist/test/unit/lib/importInCTxBuilder.d.ts +1 -1
  66. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -1
  67. package/dist/test/unit/lib/importInCTxBuilder.js +40 -251
  68. package/dist/test/unit/lib/importInPTxBuilder.d.ts +1 -1
  69. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -1
  70. package/dist/test/unit/lib/importInPTxBuilder.js +61 -489
  71. package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
  72. package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
  73. package/dist/test/unit/lib/signFlowTestSuit.js +89 -0
  74. package/dist/test/unit/lib/utils.js +29 -302
  75. package/dist/tsconfig.tsbuildinfo +1 -1
  76. package/package.json +8 -10
  77. package/dist/src/iface.d.ts +0 -25
  78. package/dist/src/iface.d.ts.map +0 -1
  79. package/dist/src/iface.js +0 -3
  80. package/dist/src/lib/constants.d.ts +0 -170
  81. package/dist/src/lib/constants.d.ts.map +0 -1
  82. package/dist/src/lib/constants.js +0 -227
  83. package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
  84. package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
  85. package/dist/src/lib/delegatorTxBuilder.js +0 -224
  86. package/dist/src/lib/errors.d.ts +0 -8
  87. package/dist/src/lib/errors.d.ts.map +0 -1
  88. package/dist/src/lib/errors.js +0 -19
  89. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  90. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  91. package/dist/src/lib/exportInCTxBuilder.js +0 -199
  92. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  93. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  94. package/dist/src/lib/exportInPTxBuilder.js +0 -120
  95. package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
  96. package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
  97. package/dist/src/lib/importInCTxBuilder.js +0 -403
  98. package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
  99. package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
  100. package/dist/src/lib/importInPTxBuilder.js +0 -464
  101. package/dist/src/lib/types.d.ts +0 -78
  102. package/dist/src/lib/types.d.ts.map +0 -1
  103. package/dist/src/lib/types.js +0 -5
  104. package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
  105. package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
  106. package/dist/src/lib/validatorTxBuilder.js +0 -180
  107. package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
  108. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
  109. package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
  110. package/dist/test/unit/flrp.d.ts +0 -2
  111. package/dist/test/unit/flrp.d.ts.map +0 -1
  112. package/dist/test/unit/flrp.js +0 -118
  113. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
  114. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
  115. package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
  116. package/dist/test/unit/lib/transaction.d.ts +0 -2
  117. package/dist/test/unit/lib/transaction.d.ts.map +0 -1
  118. package/dist/test/unit/lib/transaction.js +0 -460
  119. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
  120. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
  121. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
  122. package/dist/test/unit/smoke.d.ts +0 -2
  123. package/dist/test/unit/smoke.d.ts.map +0 -1
  124. package/dist/test/unit/smoke.js +0 -23
  125. package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
  126. package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
  127. package/dist/test/unit/transactionBuilder.test.js +0 -114
  128. package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
  129. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
  130. package/dist/test/unit/validatorTxBuilder.test.js +0 -293
@@ -1,91 +1,150 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionBuilderFactory = exports.DelegatorTxBuilder = exports.ValidatorTxBuilder = exports.ImportTxBuilder = exports.ExportTxBuilder = void 0;
6
+ exports.TransactionBuilderFactory = void 0;
7
+ const flarejs_1 = require("@flarenetwork/flarejs");
4
8
  const sdk_core_1 = require("@bitgo/sdk-core");
5
- const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
6
- // Placeholder builders - basic implementations for testing
7
- class ExportTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
8
- get transactionType() {
9
- return sdk_core_1.TransactionType.Export;
9
+ const ExportInPTxBuilder_1 = require("./ExportInPTxBuilder");
10
+ const ImportInPTxBuilder_1 = require("./ImportInPTxBuilder");
11
+ const ExportInCTxBuilder_1 = require("./ExportInCTxBuilder");
12
+ const ImportInCTxBuilder_1 = require("./ImportInCTxBuilder");
13
+ const utils_1 = __importDefault(require("./utils"));
14
+ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this.recoverSigner = false;
10
18
  }
11
- constructor(coinConfig) {
12
- super(coinConfig);
13
- // Don't throw error, allow placeholder functionality
14
- }
15
- }
16
- exports.ExportTxBuilder = ExportTxBuilder;
17
- class ImportTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
18
- get transactionType() {
19
- return sdk_core_1.TransactionType.Import;
20
- }
21
- constructor(coinConfig) {
22
- super(coinConfig);
23
- // Don't throw error, allow placeholder functionality
24
- }
25
- }
26
- exports.ImportTxBuilder = ImportTxBuilder;
27
- class ValidatorTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
28
- get transactionType() {
29
- return sdk_core_1.TransactionType.AddValidator;
19
+ /**
20
+ * Extract credentials from remaining bytes after transaction using FlareJS codec.
21
+ * This is the proper way to parse credentials - using the codec's UnpackPrefix method.
22
+ * @param credentialBytes Remaining bytes after the transaction (starts with numCredentials)
23
+ * @param codec The FlareJS codec to use for unpacking
24
+ * @returns Array of parsed credentials
25
+ */
26
+ extractCredentialsWithCodec(credentialBytes, codec) {
27
+ const credentials = [];
28
+ if (credentialBytes.length < 4) {
29
+ return credentials;
30
+ }
31
+ // Skip the first 4 bytes (numCredentials as Int type)
32
+ // The codec doesn't know about this Int, so we skip it manually
33
+ let remainingBytes = credentialBytes.slice(4);
34
+ let moreCredentials = true;
35
+ do {
36
+ try {
37
+ const unpacked = codec.UnpackPrefix(remainingBytes);
38
+ credentials.push(unpacked[0]);
39
+ remainingBytes = unpacked[1];
40
+ }
41
+ catch (e) {
42
+ moreCredentials = false;
43
+ }
44
+ } while (remainingBytes.length > 0 && moreCredentials);
45
+ return credentials;
30
46
  }
31
- constructor(coinConfig) {
32
- super(coinConfig);
33
- // Don't throw error, allow placeholder functionality
47
+ /** @inheritdoc */
48
+ from(raw) {
49
+ utils_1.default.validateRawTransaction(raw);
50
+ const rawNoHex = utils_1.default.removeHexPrefix(raw);
51
+ const rawBuffer = Buffer.from(rawNoHex, 'hex');
52
+ let txSource;
53
+ const network = this._coinConfig.network;
54
+ let tx;
55
+ let credentials = [];
56
+ try {
57
+ txSource = 'EVM';
58
+ const evmManager = flarejs_1.utils.getManagerForVM('EVM');
59
+ // Use getCodecFromBuffer to get both codec and remaining bytes
60
+ const [codec, txBytes] = evmManager.getCodecFromBuffer(rawBuffer);
61
+ // UnpackPrefix returns [transaction, remainingBytes]
62
+ const [transaction, credentialBytes] = codec.UnpackPrefix(txBytes);
63
+ tx = transaction;
64
+ // Extract credentials from remaining bytes using codec
65
+ if (credentialBytes.length > 4) {
66
+ credentials = this.extractCredentialsWithCodec(credentialBytes, codec);
67
+ }
68
+ const blockchainId = tx.getBlockchainId();
69
+ if (blockchainId === network.cChainBlockchainID) {
70
+ console.log('Parsed as EVM transaction on C-Chain');
71
+ }
72
+ }
73
+ catch (e) {
74
+ txSource = 'PVM';
75
+ const pvmManager = flarejs_1.utils.getManagerForVM('PVM');
76
+ // Use getCodecFromBuffer to get both codec and remaining bytes
77
+ const [codec, txBytes] = pvmManager.getCodecFromBuffer(rawBuffer);
78
+ // UnpackPrefix returns [transaction, remainingBytes]
79
+ const [transaction, credentialBytes] = codec.UnpackPrefix(txBytes);
80
+ tx = transaction;
81
+ // Extract credentials from remaining bytes using codec
82
+ if (credentialBytes.length > 4) {
83
+ credentials = this.extractCredentialsWithCodec(credentialBytes, codec);
84
+ }
85
+ const blockchainId = tx.getBlockchainId();
86
+ if (blockchainId === network.blockchainID) {
87
+ console.log('Parsed as PVM transaction on P-Chain');
88
+ }
89
+ }
90
+ if (txSource === 'EVM') {
91
+ if (ExportInCTxBuilder_1.ExportInCTxBuilder.verifyTxType(tx._type)) {
92
+ const exportBuilder = this.getExportInCBuilder();
93
+ exportBuilder.initBuilder(tx, rawBuffer, credentials);
94
+ return exportBuilder;
95
+ }
96
+ else if (ImportInCTxBuilder_1.ImportInCTxBuilder.verifyTxType(tx._type)) {
97
+ const importBuilder = this.getImportInCBuilder();
98
+ importBuilder.initBuilder(tx, rawBuffer, credentials);
99
+ return importBuilder;
100
+ }
101
+ }
102
+ else if (txSource === 'PVM') {
103
+ if (ImportInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(tx._type)) {
104
+ const importBuilder = this.getImportInPBuilder();
105
+ importBuilder.initBuilder(tx, rawBuffer, credentials);
106
+ return importBuilder;
107
+ }
108
+ else if (ExportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(tx._type)) {
109
+ const exportBuilder = this.getExportInPBuilder();
110
+ exportBuilder.initBuilder(tx, rawBuffer, credentials);
111
+ return exportBuilder;
112
+ }
113
+ }
114
+ throw new sdk_core_1.NotSupported('Transaction type not supported');
34
115
  }
35
- }
36
- exports.ValidatorTxBuilder = ValidatorTxBuilder;
37
- class DelegatorTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
38
- get transactionType() {
39
- return sdk_core_1.TransactionType.AddDelegator;
116
+ /** @inheritdoc */
117
+ getTransferBuilder() {
118
+ throw new sdk_core_1.NotSupported('Transfer is not supported in P Chain');
40
119
  }
41
- constructor(coinConfig) {
42
- super(coinConfig);
43
- // Don't throw error, allow placeholder functionality
120
+ /**
121
+ * Export Cross chain transfer
122
+ */
123
+ getExportInPBuilder() {
124
+ return new ExportInPTxBuilder_1.ExportInPTxBuilder(this._coinConfig);
44
125
  }
45
- }
46
- exports.DelegatorTxBuilder = DelegatorTxBuilder;
47
- /**
48
- * Factory for Flare P-chain transaction builders
49
- */
50
- class TransactionBuilderFactory {
51
- constructor(coinConfig) {
52
- this._coinConfig = coinConfig;
126
+ /**
127
+ * Import Cross chain transfer
128
+ */
129
+ getImportInPBuilder() {
130
+ return new ImportInPTxBuilder_1.ImportInPTxBuilder(this._coinConfig);
53
131
  }
54
132
  /**
55
- * Create a transaction builder from a hex string
56
- * @param txHex - Transaction hex string
133
+ * Import in C chain Cross chain transfer
57
134
  */
58
- from(txHex) {
59
- // TODO: Parse the hex and determine transaction type, then return appropriate builder
60
- // For now, return a basic export builder as that's the most common use case
61
- if (!txHex) {
62
- throw new Error('Transaction hex is required');
63
- }
64
- // Create a mock export builder for now
65
- // In the future, this will parse the transaction and determine the correct type
66
- const builder = new ExportTxBuilder(this._coinConfig);
67
- // Initialize with the hex data (placeholder)
68
- builder.initBuilder({ txHex });
69
- return builder;
135
+ getImportInCBuilder() {
136
+ return new ImportInCTxBuilder_1.ImportInCTxBuilder(this._coinConfig);
70
137
  }
71
138
  /**
72
- * Create a transaction builder for a specific type
73
- * @param type - Transaction type
139
+ * Export in C chain Cross chain transfer
74
140
  */
75
- getBuilder(type) {
76
- switch (type) {
77
- case sdk_core_1.TransactionType.Export:
78
- return new ExportTxBuilder(this._coinConfig);
79
- case sdk_core_1.TransactionType.Import:
80
- return new ImportTxBuilder(this._coinConfig);
81
- case sdk_core_1.TransactionType.AddValidator:
82
- return new ValidatorTxBuilder(this._coinConfig);
83
- case sdk_core_1.TransactionType.AddDelegator:
84
- return new DelegatorTxBuilder(this._coinConfig);
85
- default:
86
- throw new sdk_core_1.NotImplementedError(`Transaction type ${type} not supported`);
87
- }
141
+ getExportInCBuilder() {
142
+ return new ExportInCTxBuilder_1.ExportInCTxBuilder(this._coinConfig);
143
+ }
144
+ /** @inheritdoc */
145
+ getWalletInitializationBuilder() {
146
+ throw new sdk_core_1.NotSupported('Wallet initialization is not needed');
88
147
  }
89
148
  }
90
149
  exports.TransactionBuilderFactory = TransactionBuilderFactory;
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw4Q0FBdUU7QUFDdkUseUVBQXNFO0FBRXRFLDJEQUEyRDtBQUMzRCxNQUFhLGVBQWdCLFNBQVEsbURBQXdCO0lBQzNELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixxREFBcUQ7SUFDdkQsQ0FBQztDQUNGO0FBVEQsMENBU0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsbURBQXdCO0lBQzNELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixxREFBcUQ7SUFDdkQsQ0FBQztDQUNGO0FBVEQsMENBU0M7QUFFRCxNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIscURBQXFEO0lBQ3ZELENBQUM7Q0FDRjtBQVRELGdEQVNDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSxtREFBd0I7SUFDOUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLHFEQUFxRDtJQUN2RCxDQUFDO0NBQ0Y7QUFURCxnREFTQztBQUVEOztHQUVHO0FBQ0gsTUFBYSx5QkFBeUI7SUFHcEMsWUFBWSxVQUFnQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLEtBQWE7UUFDaEIsc0ZBQXNGO1FBQ3RGLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxnRkFBZ0Y7UUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXRELDZDQUE2QztRQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUvQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQXFCO1FBQzlCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLDBCQUFlLENBQUMsTUFBTTtnQkFDekIsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0MsS0FBSywwQkFBZSxDQUFDLE1BQU07Z0JBQ3pCLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLEtBQUssMEJBQWUsQ0FBQyxZQUFZO2dCQUMvQixPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xELEtBQUssMEJBQWUsQ0FBQyxZQUFZO2dCQUMvQixPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xEO2dCQUNFLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQyxvQkFBb0IsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE5Q0QsOERBOENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5cbi8vIFBsYWNlaG9sZGVyIGJ1aWxkZXJzIC0gYmFzaWMgaW1wbGVtZW50YXRpb25zIGZvciB0ZXN0aW5nXG5leHBvcnQgY2xhc3MgRXhwb3J0VHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkV4cG9ydDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgLy8gRG9uJ3QgdGhyb3cgZXJyb3IsIGFsbG93IHBsYWNlaG9sZGVyIGZ1bmN0aW9uYWxpdHlcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW1wb3J0VHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgLy8gRG9uJ3QgdGhyb3cgZXJyb3IsIGFsbG93IHBsYWNlaG9sZGVyIGZ1bmN0aW9uYWxpdHlcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgLy8gRG9uJ3QgdGhyb3cgZXJyb3IsIGFsbG93IHBsYWNlaG9sZGVyIGZ1bmN0aW9uYWxpdHlcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZWdhdG9yVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRvcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgLy8gRG9uJ3QgdGhyb3cgZXJyb3IsIGFsbG93IHBsYWNlaG9sZGVyIGZ1bmN0aW9uYWxpdHlcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIEZsYXJlIFAtY2hhaW4gdHJhbnNhY3Rpb24gYnVpbGRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+O1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgdGhpcy5fY29pbkNvbmZpZyA9IGNvaW5Db25maWc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdHJhbnNhY3Rpb24gYnVpbGRlciBmcm9tIGEgaGV4IHN0cmluZ1xuICAgKiBAcGFyYW0gdHhIZXggLSBUcmFuc2FjdGlvbiBoZXggc3RyaW5nXG4gICAqL1xuICBmcm9tKHR4SGV4OiBzdHJpbmcpOiBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIC8vIFRPRE86IFBhcnNlIHRoZSBoZXggYW5kIGRldGVybWluZSB0cmFuc2FjdGlvbiB0eXBlLCB0aGVuIHJldHVybiBhcHByb3ByaWF0ZSBidWlsZGVyXG4gICAgLy8gRm9yIG5vdywgcmV0dXJuIGEgYmFzaWMgZXhwb3J0IGJ1aWxkZXIgYXMgdGhhdCdzIHRoZSBtb3N0IGNvbW1vbiB1c2UgY2FzZVxuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGV4IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbW9jayBleHBvcnQgYnVpbGRlciBmb3Igbm93XG4gICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyB3aWxsIHBhcnNlIHRoZSB0cmFuc2FjdGlvbiBhbmQgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHR5cGVcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEV4cG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcblxuICAgIC8vIEluaXRpYWxpemUgd2l0aCB0aGUgaGV4IGRhdGEgKHBsYWNlaG9sZGVyKVxuICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIoeyB0eEhleCB9KTtcblxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZm9yIGEgc3BlY2lmaWMgdHlwZVxuICAgKiBAcGFyYW0gdHlwZSAtIFRyYW5zYWN0aW9uIHR5cGVcbiAgICovXG4gIGdldEJ1aWxkZXIodHlwZTogVHJhbnNhY3Rpb25UeXBlKTogQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkV4cG9ydDpcbiAgICAgICAgcmV0dXJuIG5ldyBFeHBvcnRUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ6XG4gICAgICAgIHJldHVybiBuZXcgSW1wb3J0VHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yOlxuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRvcjpcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxlZ2F0b3JUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcihgVHJhbnNhY3Rpb24gdHlwZSAke3R5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBOEY7QUFDOUYsOENBQThFO0FBRzlFLDZEQUEwRDtBQUMxRCw2REFBMEQ7QUFDMUQsNkRBQTBEO0FBQzFELDZEQUEwRDtBQUMxRCxvREFBNEI7QUFFNUIsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFHMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFIWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztJQUloQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssMkJBQTJCLENBQUMsZUFBMkIsRUFBRSxLQUFVO1FBQ3pFLE1BQU0sV0FBVyxHQUFpQixFQUFFLENBQUM7UUFDckMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsZ0VBQWdFO1FBQ2hFLElBQUksY0FBYyxHQUFlLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTNCLEdBQUcsQ0FBQztZQUNGLElBQUksQ0FBQztnQkFDSCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNwRCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQWUsQ0FBQyxDQUFDO2dCQUM1QyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBZSxDQUFDO1lBQzdDLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMs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LENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBdEpELDhEQXNKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWxzIGFzIEZsYXJlVXRpbHMsIGV2bVNlcmlhbCwgcHZtU2VyaWFsLCBDcmVkZW50aWFsIH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRmxhcmVOZXR3b3JrLCBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi9FeHBvcnRJblBUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi9JbXBvcnRJblBUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9FeHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9JbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBjcmVkZW50aWFscyBmcm9tIHJlbWFpbmluZyBieXRlcyBhZnRlciB0cmFuc2FjdGlvbiB1c2luZyBGbGFyZUpTIGNvZGVjLlxuICAgKiBUaGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIHBhcnNlIGNyZWRlbnRpYWxzIC0gdXNpbmcgdGhlIGNvZGVjJ3MgVW5wYWNrUHJlZml4IG1ldGhvZC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxCeXRlcyBSZW1haW5pbmcgYnl0ZXMgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIChzdGFydHMgd2l0aCBudW1DcmVkZW50aWFscylcbiAgICogQHBhcmFtIGNvZGVjIFRoZSBGbGFyZUpTIGNvZGVjIHRvIHVzZSBmb3IgdW5wYWNraW5nXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHBhcnNlZCBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0Q3JlZGVudGlhbHNXaXRoQ29kZWMoY3JlZGVudGlhbEJ5dGVzOiBVaW50OEFycmF5LCBjb2RlYzogYW55KTogQ3JlZGVudGlhbFtdIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdID0gW107XG4gICAgaWYgKGNyZWRlbnRpYWxCeXRlcy5sZW5ndGggPCA0KSB7XG4gICAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gU2tpcCB0aGUgZmlyc3QgNCBieXRlcyAobnVtQ3JlZGVudGlhbHMgYXMgSW50IHR5cGUpXG4gICAgLy8gVGhlIGNvZGVjIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIEludCwgc28gd2Ugc2tpcCBpdCBtYW51YWxseVxuICAgIGxldCByZW1haW5pbmdCeXRlczogVWludDhBcnJheSA9IGNyZWRlbnRpYWxCeXRlcy5zbGljZSg0KTtcbiAgICBsZXQgbW9yZUNyZWRlbnRpYWxzID0gdHJ1ZTtcblxuICAgIGRvIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVucGFja2VkID0gY29kZWMuVW5wYWNrUHJlZml4KHJlbWFpbmluZ0J5dGVzKTtcbiAgICAgICAgY3JlZGVudGlhbHMucHVzaCh1bnBhY2tlZFswXSBhcyBDcmVkZW50aWFsKTtcbiAgICAgICAgcmVtYWluaW5nQnl0ZXMgPSB1bnBhY2tlZFsxXSBhcyBVaW50OEFycmF5O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtb3JlQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChyZW1haW5pbmdCeXRlcy5sZW5ndGggPiAwICYmIG1vcmVDcmVkZW50aWFscyk7XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHJhd05vSGV4ID0gdXRpbHMucmVtb3ZlSGV4UHJlZml4KHJhdyk7XG4gICAgY29uc3QgcmF3QnVmZmVyID0gQnVmZmVyLmZyb20ocmF3Tm9IZXgsICdoZXgnKTtcbiAgICBsZXQgdHhTb3VyY2U6ICdFVk0nIHwgJ1BWTSc7XG5cbiAgICBjb25zdCBuZXR3b3JrID0gdGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEZsYXJlTmV0d29yaztcbiAgICBsZXQgdHg6IGFueTtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHR4U291cmNlID0gJ0VWTSc7XG4gICAgICBjb25zdCBldm1NYW5hZ2VyID0gRmxhcmVVdGlscy5nZXRNYW5hZ2VyRm9yVk0oJ0VWTScpO1xuXG4gICAgICAvLyBVc2UgZ2V0Q29kZWNGcm9tQnVmZmVyIHRvIGdldCBib3RoIGNvZGVjIGFuZCByZW1haW5pbmcgYnl0ZXNcbiAgICAgIGNvbnN0IFtjb2RlYywgdHhCeXRlc10gPSBldm1NYW5hZ2VyLmdldENvZGVjRnJvbUJ1ZmZlcihyYXdCdWZmZXIpO1xuICAgICAgLy8gVW5wYWNrUHJlZml4IHJldHVybnMgW3RyYW5zYWN0aW9uLCByZW1haW5pbmdCeXRlc11cbiAgICAgIGNvbnN0IFt0cmFuc2FjdGlvbiwgY3JlZGVudGlhbEJ5dGVzXSA9IGNvZGVjLlVucGFja1ByZWZpeCh0eEJ5dGVzKSBhcyBbYW55LCBVaW50OEFycmF5XTtcbiAgICAgIHR4ID0gdHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIEV4dHJhY3QgY3JlZGVudGlhbHMgZnJvbSByZW1haW5pbmcgYnl0ZXMgdXNpbmcgY29kZWNcbiAgICAgIGlmIChjcmVkZW50aWFsQnl0ZXMubGVuZ3RoID4gNCkge1xuICAgICAgICBjcmVkZW50aWFscyA9IHRoaXMuZXh0cmFjdENyZWRlbnRpYWxzV2l0aENvZGVjKGNyZWRlbnRpYWxCeXRlcywgY29kZWMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9ja2NoYWluSWQgPSB0eC5nZXRCbG9ja2NoYWluSWQoKTtcbiAgICAgIGlmIChibG9ja2NoYWluSWQgPT09IG5ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXJzZWQgYXMgRVZNIHRyYW5zYWN0aW9uIG9uIEMtQ2hhaW4nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0eFNvdXJjZSA9ICdQVk0nO1xuICAgICAgY29uc3QgcHZtTWFuYWdlciA9IEZsYXJlVXRpbHMuZ2V0TWFuYWdlckZvclZNKCdQVk0nKTtcblxuICAgICAgLy8gVXNlIGdldENvZGVjRnJvbUJ1ZmZlciB0byBnZXQgYm90aCBjb2RlYyBhbmQgcmVtYWluaW5nIGJ5dGVzXG4gICAgICBjb25zdCBbY29kZWMsIHR4Qnl0ZXNdID0gcHZtTWFuYWdlci5nZXRDb2RlY0Zyb21CdWZmZXIocmF3QnVmZmVyKTtcbiAgICAgIC8vIFVucGFja1ByZWZpeCByZXR1cm5zIFt0cmFuc2FjdGlvbiwgcmVtYWluaW5nQnl0ZXNdXG4gICAgICBjb25zdCBbdHJhbnNhY3Rpb24sIGNyZWRlbnRpYWxCeXRlc10gPSBjb2RlYy5VbnBhY2tQcmVmaXgodHhCeXRlcykgYXMgW2FueSwgVWludDhBcnJheV07XG4gICAgICB0eCA9IHRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBFeHRyYWN0IGNyZWRlbnRpYWxzIGZyb20gcmVtYWluaW5nIGJ5dGVzIHVzaW5nIGNvZGVjXG4gICAgICBpZiAoY3JlZGVudGlhbEJ5dGVzLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSB0aGlzLmV4dHJhY3RDcmVkZW50aWFsc1dpdGhDb2RlYyhjcmVkZW50aWFsQnl0ZXMsIGNvZGVjKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvY2tjaGFpbklkID0gdHguZ2V0QmxvY2tjaGFpbklkKCk7XG4gICAgICBpZiAoYmxvY2tjaGFpbklkID09PSBuZXR3b3JrLmJsb2NrY2hhaW5JRCkge1xuICAgICAgICBjb25zb2xlLmxvZygnUGFyc2VkIGFzIFBWTSB0cmFuc2FjdGlvbiBvbiBQLUNoYWluJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR4U291cmNlID09PSAnRVZNJykge1xuICAgICAgaWYgKEV4cG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguX3R5cGUpKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydEJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICAgZXhwb3J0QnVpbGRlci5pbml0QnVpbGRlcih0eCBhcyBldm1TZXJpYWwuRXhwb3J0VHgsIHJhd0J1ZmZlciwgY3JlZGVudGlhbHMpO1xuICAgICAgICByZXR1cm4gZXhwb3J0QnVpbGRlcjtcbiAgICAgIH0gZWxzZSBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5fdHlwZSkpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0QnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgICBpbXBvcnRCdWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeCwgcmF3QnVmZmVyLCBjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBpbXBvcnRCdWlsZGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHhTb3VyY2UgPT09ICdQVk0nKSB7XG4gICAgICBpZiAoSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5fdHlwZSkpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0QnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5QQnVpbGRlcigpO1xuICAgICAgICBpbXBvcnRCdWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeCwgcmF3QnVmZmVyLCBjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBpbXBvcnRCdWlsZGVyO1xuICAgICAgfSBlbHNlIGlmIChFeHBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4Ll90eXBlKSkge1xuICAgICAgICBjb25zdCBleHBvcnRCdWlsZGVyID0gdGhpcy5nZXRFeHBvcnRJblBCdWlsZGVyKCk7XG4gICAgICAgIGV4cG9ydEJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgcHZtU2VyaWFsLkV4cG9ydFR4LCByYXdCdWZmZXIsIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zZmVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUCBDaGFpbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKi9cbiAgZ2V0RXhwb3J0SW5QQnVpbGRlcigpOiBFeHBvcnRJblBUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRXhwb3J0SW5QVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKi9cbiAgZ2V0SW1wb3J0SW5QQnVpbGRlcigpOiBJbXBvcnRJblBUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0SW5QVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqL1xuICBnZXRJbXBvcnRJbkNCdWlsZGVyKCk6IEltcG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGluIEMgY2hhaW4gQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICovXG4gIGdldEV4cG9ydEluQ0J1aWxkZXIoKTogRXhwb3J0SW5DVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydEluQ1R4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdXYWxsZXQgaW5pdGlhbGl6YXRpb24gaXMgbm90IG5lZWRlZCcpO1xuICB9XG59XG4iXX0=
@@ -1,219 +1,141 @@
1
- import { TransferableOutput } from '@flarenetwork/flarejs';
1
+ import { Signature, TransferableOutput, Id } from '@flarenetwork/flarejs';
2
2
  import { BaseUtils, Entry } from '@bitgo/sdk-core';
3
3
  import { FlareNetwork } from '@bitgo/statics';
4
- import { DeprecatedOutput, DeprecatedTx, Output } from './iface';
5
- export declare const createHexRegex: (length: number, requirePrefix?: boolean) => RegExp;
6
- export declare const createFlexibleHexRegex: (requirePrefix?: boolean) => RegExp;
4
+ import { Buffer } from 'buffer';
5
+ import { Output, DeprecatedTx } from './iface';
7
6
  export declare class Utils implements BaseUtils {
8
- addressToString: (hrp: string, prefix: string, address: Buffer) => string;
7
+ /**
8
+ * Check if addresses in wallet match UTXO output addresses
9
+ */
9
10
  includeIn(walletAddresses: string[], otxoOutputAddresses: string[]): boolean;
10
11
  /**
11
- * Checks if it is a valid address no illegal characters
12
- *
13
- * @param {string} address - address to be validated
14
- * @returns {boolean} - the validation result
12
+ * Validates a Flare address or array of addresses
13
+ * @param {string | string[]} address - address(es) to validate
14
+ * @returns {boolean} - validation result
15
15
  */
16
- /** @inheritdoc */
17
16
  isValidAddress(address: string | string[]): boolean;
18
17
  private isValidAddressRegex;
19
18
  /**
20
- * Checks if the string is a valid protocol public key or
21
- * extended public key.
22
- *
23
- * @param {string} pub - the public key to be validated
24
- * @returns {boolean} - the validation result
19
+ * Validates a block ID
20
+ * @param {string} hash - block ID to validate
21
+ * @returns {boolean} - validation result
22
+ */
23
+ isValidBlockId(hash: string): boolean;
24
+ /**
25
+ * Validates a public key
26
+ * @param {string} pub - public key to validate
27
+ * @returns {boolean} - validation result
25
28
  */
26
29
  isValidPublicKey(pub: string): boolean;
27
- parseAddress: (address: string) => Buffer;
28
- stringToAddress: (address: string, hrp?: string) => Buffer;
29
30
  /**
30
- * Returns whether or not the string is a valid protocol private key, or extended
31
- * private key.
32
- *
33
- * The protocol key format is described in the @stacks/transactions npm package, in the
34
- * createStacksPrivateKey function:
35
- * https://github.com/blockstack/stacks.js/blob/master/packages/transactions/src/keys.ts#L125
36
- *
37
- * @param {string} prv - the private key (or extended private key) to be validated
38
- * @returns {boolean} - the validation result
31
+ * Validates a private key
32
+ * @param {string} prv - private key to validate
33
+ * @returns {boolean} - validation result
39
34
  */
40
35
  isValidPrivateKey(prv: string): boolean;
41
36
  /**
42
- * Returns whether or not the string is a composed of hex chars only
43
- *
44
- * @param {string} maybe - the string to be validated
45
- * @returns {boolean} - the validation result
37
+ * Checks if a string contains only hex characters
46
38
  */
47
- allHexChars(maybe: string): boolean;
39
+ allHexChars(str: string): boolean;
48
40
  /**
49
- * Lightweight Ethereum address validation
50
- * Validates that an address is a 40-character hex string (optionally prefixed with 0x)
51
- *
52
- * @param {string} address - the Ethereum address to validate
53
- * @returns {boolean} - true if valid Ethereum address format
41
+ * Creates a signature using the Flare network parameters
42
+ * Returns a 65-byte signature (64 bytes signature + 1 byte recovery parameter)
54
43
  */
55
- isValidEthereumAddress(address: string): boolean;
44
+ createSignature(network: FlareNetwork, message: Buffer, prv: Buffer): Buffer;
56
45
  /**
57
- * Pick specific properties from an object (replaces lodash.pick)
58
- *
59
- * @param {T} obj - the source object
60
- * @param {K[]} keys - array of property keys to pick
61
- * @returns {Pick<T, K>} - new object with only the specified properties
46
+ * Verifies a signature
62
47
  */
63
- pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
48
+ verifySignature(network: FlareNetwork, message: Buffer, signature: Buffer, publicKey: Buffer): boolean;
64
49
  /**
65
- * Deep equality comparison (replaces lodash.isEqual)
66
- *
67
- * @param {unknown} a - first value to compare
68
- * @param {unknown} b - second value to compare
69
- * @returns {boolean} - true if values are deeply equal
50
+ * Creates a new signature object
70
51
  */
71
- isEqual(a: unknown, b: unknown): boolean;
72
- /** @inheritdoc */
73
- isValidSignature(signature: string): boolean;
74
- /** @inheritdoc */
75
- isValidTransactionId(txId: string): boolean;
76
- /** @inheritdoc */
77
- isValidBlockId(blockId: string): boolean;
52
+ createNewSig(sigHex: string): Signature;
78
53
  /**
79
- * FlareJS wrapper to create signature and return it for credentials
80
- * @param network
81
- * @param message
82
- * @param prv
83
- * @return signature
54
+ * Creates an empty signature with embedded address for signature slot identification.
55
+ * The address is embedded at position 90 (after the first 45 zero bytes).
56
+ * This allows the signing logic to determine which slot belongs to which address.
57
+ * @param addressHex The 20-byte address in hex format (40 chars, without 0x prefix)
84
58
  */
85
- createSignature(network: FlareNetwork, message: Buffer, prv: Buffer): Buffer;
59
+ createEmptySigWithAddress(addressHex: string): Signature;
86
60
  /**
87
- * FlareJS wrapper to verify signature
88
- * @param network
89
- * @param message
90
- * @param signature
91
- * @param publicKey - public key instead of private key for verification
92
- * @return true if it's verify successful
61
+ * Extracts the embedded address from an empty signature.
62
+ * Returns the address hex string (40 chars) or empty string if not found.
93
63
  */
94
- verifySignature(network: FlareNetwork, message: Buffer, signature: Buffer, publicKey: Buffer): boolean;
64
+ getAddressFromEmptySig(sig: string): string;
95
65
  /**
96
- * FlareJS wrapper to recover signature
97
- * @param network
98
- * @param message
99
- * @param signature
100
- * @return recovered public key
66
+ * Computes SHA256 hash
101
67
  */
102
- recoverySignature(network: FlareNetwork, message: Buffer, signature: Buffer): Buffer;
103
68
  sha256(buf: Uint8Array): Buffer;
104
69
  /**
105
- * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
106
- * It's to reuse in TransactionBuilder and TransactionBuilderFactory
107
- *
108
- * @param rawTransaction Transaction as hex string
70
+ * Validates raw transaction format
109
71
  */
110
72
  validateRawTransaction(rawTransaction: string): void;
111
73
  /**
112
- * Check if tx is for the blockchainId
113
- *
114
- * @param {DeprecatedTx} tx
115
- * @param {string} blockchainId
116
- * @returns true if tx is for blockchainId
117
- */
118
- isTransactionOf(tx: DeprecatedTx, blockchainId: string): boolean;
119
- /**
120
- * Check if Output is from PVM.
121
- * Output could be EVM or PVM output.
122
- * @param {DeprecatedOutput} output
123
- * @returns {boolean} output has transferable output structure
124
- */
125
- deprecatedIsTransferableOutput(output: DeprecatedOutput): boolean;
126
- /**
127
- * Check if Output is from PVM.
128
- * Output could be EVM or PVM output.
129
- * @param {Output} output
130
- * @returns {boolean} output is TransferableOutput
74
+ * Checks if output is TransferableOutput type
131
75
  */
132
76
  isTransferableOutput(output: Output): output is TransferableOutput;
133
77
  /**
134
- * Return a mapper function to that network address representation.
135
- * @param network required to stringify addresses
136
- * @return mapper function
137
- */
138
- deprecatedMapOutputToEntry(network: FlareNetwork): (output: DeprecatedOutput) => Entry;
139
- /**
140
- * Return a mapper function to that network address representation.
141
- * @param network required to stringify addresses
142
- * @return mapper function
78
+ * Maps outputs to entry format
143
79
  */
144
80
  mapOutputToEntry(network: FlareNetwork): (Output: any) => Entry;
145
81
  /**
146
- * remove hex prefix (0x)
147
- * @param hex string
148
- * @returns hex without 0x
82
+ * Removes 0x prefix from hex string
149
83
  */
150
84
  removeHexPrefix(hex: string): string;
151
85
  /**
152
- * Outputidx convert from number (as string) to buffer.
153
- * @param {string} outputidx number
154
- * @return {Buffer} buffer of size 4 with that number value
86
+ * Converts output index to buffer
155
87
  */
156
88
  outputidxNumberToBuffer(outputidx: string): Buffer;
157
89
  /**
158
- * Outputidx buffer to number (as string)
159
- * @param {Buffer} outputidx
160
- * @return {string} outputidx number
90
+ * Converts output index buffer to number string
161
91
  */
162
92
  outputidxBufferToNumber(outputidx: Buffer): string;
93
+ isValidSignature(signature: string): boolean;
94
+ isValidTransactionId(txId: string): boolean;
163
95
  /**
164
- * Convert string to bytes for FlareJS memo
165
- * Follows FlareJS utils.stringToBytes pattern
166
- * @param {string} text - Text to convert
167
- * @returns {Uint8Array} Byte array
168
- */
169
- stringToBytes(text: string): Uint8Array;
170
- /**
171
- * Convert bytes to string from FlareJS memo
172
- * @param {Uint8Array} bytes - Bytes to convert
173
- * @returns {string} Decoded string
96
+ * Helper method to convert address components to string
174
97
  */
175
- bytesToString(bytes: Uint8Array): string;
98
+ addressToString: (hrp: string, prefix: string, address: Buffer) => string;
176
99
  /**
177
- * Create memo bytes from various input formats
178
- * Supports string, JSON object, or raw bytes
179
- * @param {string | Record<string, unknown> | Uint8Array} memo - Memo data
180
- * @returns {Uint8Array} Memo bytes for FlareJS
100
+ * Decodes a base58 string with checksum to a Buffer
181
101
  */
182
- createMemoBytes(memo: string | Record<string, unknown> | Uint8Array): Uint8Array;
102
+ cb58Decode(str: string): Buffer;
183
103
  /**
184
- * Parse memo bytes to string
185
- * @param {Uint8Array} memoBytes - Memo bytes from FlareJS transaction
186
- * @returns {string} Decoded memo string
104
+ * Validates a checksum on a Buffer and returns true if valid, false if not
187
105
  */
188
- parseMemoBytes(memoBytes: Uint8Array): string;
106
+ private validateChecksum;
189
107
  /**
190
- * Validate memo size (FlareJS has transaction size limits)
191
- * @param {Uint8Array} memoBytes - Memo bytes
192
- * @param {number} maxSize - Maximum size in bytes (default 4KB)
193
- * @returns {boolean} Whether memo is within size limits
108
+ * Encodes a Buffer as a base58 string with checksum
194
109
  */
195
- validateMemoSize(memoBytes: Uint8Array, maxSize?: number): boolean;
110
+ cb58Encode(bytes: Buffer): string;
196
111
  /**
197
112
  * Adds a checksum to a Buffer and returns the concatenated result
198
113
  */
199
114
  private addChecksum;
200
115
  /**
201
- * Validates a checksum on a Buffer and returns true if valid, false if not
116
+ * Parse an address string into a Buffer
117
+ * @param address - The address to parse
118
+ * @returns Buffer containing the parsed address
202
119
  */
203
- private validateChecksum;
204
- /**
205
- * Encodes a Buffer as a base58 string with checksum
206
- */
207
- cb58Encode(bytes: Buffer): string;
120
+ parseAddress: (address: string) => Buffer;
121
+ stringToAddress: (address: string, hrp?: string) => Buffer;
208
122
  /**
209
- * Decodes a base58 string with checksum to a Buffer
123
+ * Check if tx is for the blockchainId
124
+ *
125
+ * @param {DeprecatedTx} tx
126
+ * @param {string} blockchainId
127
+ * @returns true if tx is for blockchainId
210
128
  */
211
- cb58Decode(str: string): Buffer;
129
+ isTransactionOf(tx: DeprecatedTx, blockchainId: string): boolean;
130
+ flareIdString(value: string): Id;
212
131
  /**
213
- * Checks if a string is a valid CB58 (base58 with checksum) format
132
+ * FlareJS wrapper to recover signature
133
+ * @param network
134
+ * @param message
135
+ * @param signature
136
+ * @return recovered public key
214
137
  */
215
- private isCB58;
216
- isValidId(id: string): boolean;
138
+ recoverySignature(network: FlareNetwork, message: Buffer, signature: Buffer): Buffer;
217
139
  }
218
140
  declare const utils: Utils;
219
141
  export default utils;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}