@rosen-bridge/rosen-extractor 9.0.0 → 10.1.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 (90) hide show
  1. package/CHANGELOG.md +300 -0
  2. package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.d.ts → abstractRosenDataExtractor.d.ts} +1 -1
  3. package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.d.ts.map → abstractRosenDataExtractor.d.ts.map} +1 -1
  4. package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.js → abstractRosenDataExtractor.js} +1 -1
  5. package/dist/getRosenData/abstract/types.d.ts +1 -0
  6. package/dist/getRosenData/abstract/types.d.ts.map +1 -1
  7. package/dist/getRosenData/abstract/types.js +1 -1
  8. package/dist/getRosenData/bitcoin/{BitcoinEsploraRosenExtractor.d.ts → bitcoinEsploraRosenExtractor.d.ts} +2 -2
  9. package/dist/getRosenData/bitcoin/{BitcoinEsploraRosenExtractor.d.ts.map → bitcoinEsploraRosenExtractor.d.ts.map} +1 -1
  10. package/dist/getRosenData/bitcoin/bitcoinEsploraRosenExtractor.js +108 -0
  11. package/dist/getRosenData/bitcoin/{BitcoinRosenExtractor.d.ts → bitcoinRosenExtractor.d.ts} +2 -2
  12. package/dist/getRosenData/bitcoin/{BitcoinRosenExtractor.d.ts.map → bitcoinRosenExtractor.d.ts.map} +1 -1
  13. package/dist/getRosenData/bitcoin/bitcoinRosenExtractor.js +116 -0
  14. package/dist/getRosenData/bitcoin/{BitcoinRpcRosenExtractor.d.ts → bitcoinRpcRosenExtractor.d.ts} +2 -2
  15. package/dist/getRosenData/bitcoin/{BitcoinRpcRosenExtractor.d.ts.map → bitcoinRpcRosenExtractor.d.ts.map} +1 -1
  16. package/dist/getRosenData/bitcoin/bitcoinRpcRosenExtractor.js +109 -0
  17. package/dist/getRosenData/bitcoin/utils.js +1 -1
  18. package/dist/getRosenData/bitcoin-runes/{BitcoinRunesEsploraRosenExtractor.d.ts → bitcoinRunesEsploraRosenExtractor.d.ts} +2 -2
  19. package/dist/getRosenData/bitcoin-runes/{BitcoinRunesEsploraRosenExtractor.d.ts.map → bitcoinRunesEsploraRosenExtractor.d.ts.map} +1 -1
  20. package/dist/getRosenData/bitcoin-runes/bitcoinRunesEsploraRosenExtractor.js +117 -0
  21. package/dist/getRosenData/bitcoin-runes/{BitcoinRunesRosenExtractor.d.ts → bitcoinRunesRosenExtractor.d.ts} +12 -13
  22. package/dist/getRosenData/bitcoin-runes/bitcoinRunesRosenExtractor.d.ts.map +1 -0
  23. package/dist/getRosenData/bitcoin-runes/bitcoinRunesRosenExtractor.js +141 -0
  24. package/dist/getRosenData/bitcoin-runes/{BitcoinRunesRpcRosenExtractor.d.ts → bitcoinRunesRpcRosenExtractor.d.ts} +2 -2
  25. package/dist/getRosenData/bitcoin-runes/{BitcoinRunesRpcRosenExtractor.d.ts.map → bitcoinRunesRpcRosenExtractor.d.ts.map} +1 -1
  26. package/dist/getRosenData/bitcoin-runes/bitcoinRunesRpcRosenExtractor.js +117 -0
  27. package/dist/getRosenData/bitcoin-runes/types.d.ts +25 -0
  28. package/dist/getRosenData/bitcoin-runes/types.d.ts.map +1 -1
  29. package/dist/getRosenData/bitcoin-runes/types.js +1 -1
  30. package/dist/getRosenData/bitcoin-runes/utils.js +1 -1
  31. package/dist/getRosenData/cardano/{CardanoBlockFrostRosenExtractor.d.ts → cardanoBlockFrostRosenExtractor.d.ts} +2 -2
  32. package/dist/getRosenData/cardano/{CardanoBlockFrostRosenExtractor.d.ts.map → cardanoBlockFrostRosenExtractor.d.ts.map} +1 -1
  33. package/dist/getRosenData/cardano/cardanoBlockFrostRosenExtractor.js +96 -0
  34. package/dist/getRosenData/cardano/{CardanoGraphQLRosenExtractor.d.ts → cardanoGraphQLRosenExtractor.d.ts} +2 -2
  35. package/dist/getRosenData/cardano/{CardanoGraphQLRosenExtractor.d.ts.map → cardanoGraphQLRosenExtractor.d.ts.map} +1 -1
  36. package/dist/getRosenData/cardano/cardanoGraphQLRosenExtractor.js +94 -0
  37. package/dist/getRosenData/cardano/{CardanoKoiosRosenExtractor.d.ts → cardanoKoiosRosenExtractor.d.ts} +2 -2
  38. package/dist/getRosenData/cardano/{CardanoKoiosRosenExtractor.d.ts.map → cardanoKoiosRosenExtractor.d.ts.map} +1 -1
  39. package/dist/getRosenData/cardano/cardanoKoiosRosenExtractor.js +97 -0
  40. package/dist/getRosenData/cardano/{CardanoOgmiosRosenExtractor.d.ts → cardanoOgmiosRosenExtractor.d.ts} +2 -2
  41. package/dist/getRosenData/cardano/{CardanoOgmiosRosenExtractor.d.ts.map → cardanoOgmiosRosenExtractor.d.ts.map} +1 -1
  42. package/dist/getRosenData/cardano/cardanoOgmiosRosenExtractor.js +99 -0
  43. package/dist/getRosenData/cardano/{CardanoRosenExtractor.d.ts → cardanoRosenExtractor.d.ts} +2 -2
  44. package/dist/getRosenData/cardano/{CardanoRosenExtractor.d.ts.map → cardanoRosenExtractor.d.ts.map} +1 -1
  45. package/dist/getRosenData/cardano/cardanoRosenExtractor.js +90 -0
  46. package/dist/getRosenData/doge/{DogeEsploraRosenExtractor.d.ts → dogeEsploraRosenExtractor.d.ts} +2 -2
  47. package/dist/getRosenData/doge/{DogeEsploraRosenExtractor.d.ts.map → dogeEsploraRosenExtractor.d.ts.map} +1 -1
  48. package/dist/getRosenData/doge/dogeEsploraRosenExtractor.js +107 -0
  49. package/dist/getRosenData/doge/{DogeRosenExtractor.d.ts → dogeRosenExtractor.d.ts} +2 -2
  50. package/dist/getRosenData/doge/{DogeRosenExtractor.d.ts.map → dogeRosenExtractor.d.ts.map} +1 -1
  51. package/dist/getRosenData/doge/dogeRosenExtractor.js +115 -0
  52. package/dist/getRosenData/doge/{DogeRpcRosenExtractor.d.ts → dogeRpcRosenExtractor.d.ts} +2 -2
  53. package/dist/getRosenData/doge/{DogeRpcRosenExtractor.d.ts.map → dogeRpcRosenExtractor.d.ts.map} +1 -1
  54. package/dist/getRosenData/doge/dogeRpcRosenExtractor.js +108 -0
  55. package/dist/getRosenData/doge/utils.js +1 -1
  56. package/dist/getRosenData/ergo/{ErgoNodeRosenExtractor.d.ts → ergoNodeRosenExtractor.d.ts} +2 -2
  57. package/dist/getRosenData/ergo/{ErgoNodeRosenExtractor.d.ts.map → ergoNodeRosenExtractor.d.ts.map} +1 -1
  58. package/dist/getRosenData/ergo/ergoNodeRosenExtractor.js +106 -0
  59. package/dist/getRosenData/ergo/{ErgoRosenExtractor.d.ts → ergoRosenExtractor.d.ts} +2 -2
  60. package/dist/getRosenData/ergo/{ErgoRosenExtractor.d.ts.map → ergoRosenExtractor.d.ts.map} +1 -1
  61. package/dist/getRosenData/ergo/{ErgoRosenExtractor.js → ergoRosenExtractor.js} +3 -3
  62. package/dist/getRosenData/evm/{EvmEthersRosenExtractor.d.ts → evmEthersRosenExtractor.d.ts} +3 -3
  63. package/dist/getRosenData/evm/{EvmEthersRosenExtractor.d.ts.map → evmEthersRosenExtractor.d.ts.map} +1 -1
  64. package/dist/getRosenData/evm/{EvmEthersRosenExtractor.js → evmEthersRosenExtractor.js} +3 -3
  65. package/dist/getRosenData/evm/{EvmRosenExtractor.d.ts → evmRosenExtractor.d.ts} +3 -3
  66. package/dist/getRosenData/evm/{EvmRosenExtractor.d.ts.map → evmRosenExtractor.d.ts.map} +1 -1
  67. package/dist/getRosenData/evm/{EvmRosenExtractor.js → evmRosenExtractor.js} +3 -3
  68. package/dist/getRosenData/evm/{EvmRpcRosenExtractor.d.ts → evmRpcRosenExtractor.d.ts} +2 -2
  69. package/dist/getRosenData/evm/{EvmRpcRosenExtractor.d.ts.map → evmRpcRosenExtractor.d.ts.map} +1 -1
  70. package/dist/getRosenData/evm/{EvmRpcRosenExtractor.js → evmRpcRosenExtractor.js} +4 -3
  71. package/dist/index.d.ts +20 -20
  72. package/dist/index.js +21 -21
  73. package/dist/utils.js +1 -1
  74. package/package.json +25 -19
  75. package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +0 -105
  76. package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.js +0 -113
  77. package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +0 -106
  78. package/dist/getRosenData/bitcoin-runes/BitcoinRunesEsploraRosenExtractor.js +0 -114
  79. package/dist/getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.d.ts.map +0 -1
  80. package/dist/getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.js +0 -121
  81. package/dist/getRosenData/bitcoin-runes/BitcoinRunesRpcRosenExtractor.js +0 -114
  82. package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +0 -94
  83. package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +0 -92
  84. package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.js +0 -95
  85. package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +0 -97
  86. package/dist/getRosenData/cardano/CardanoRosenExtractor.js +0 -88
  87. package/dist/getRosenData/doge/DogeEsploraRosenExtractor.js +0 -104
  88. package/dist/getRosenData/doge/DogeRosenExtractor.js +0 -112
  89. package/dist/getRosenData/doge/DogeRpcRosenExtractor.js +0 -105
  90. package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.js +0 -105
package/CHANGELOG.md ADDED
@@ -0,0 +1,300 @@
1
+ # @rosen-bridge/rosen-extractor
2
+
3
+ ## 10.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Add rawData value to The RosenData interface
8
+
9
+ ### Patch Changes
10
+
11
+ - Remove unused dependencies and install missed dependencies
12
+
13
+ ## 10.0.0
14
+
15
+ ### Major Changes
16
+
17
+ - Update node version to 22.18
18
+
19
+ ### Patch Changes
20
+
21
+ - Fix Bitcoin Runes extractors for unordered transactions
22
+ - Fix BitcoinRunesRosenExtractor to fully extract RosenData
23
+ - Update dependencies
24
+ - @rosen-bridge/abstract-logger@3.0.0
25
+ - @rosen-bridge/address-codec@1.0.0
26
+ - @rosen-bridge/json-bigint@1.0.0
27
+ - @rosen-bridge/tokens@4.0.0
28
+
29
+ ## 9.0.0
30
+
31
+ ### Major Changes
32
+
33
+ - Rename Runes chain name to Bitcoin Runes
34
+
35
+ ### Patch Changes
36
+
37
+ - Update Bitcoin Runes getLockDataChunks to ignore the first 3 output boxes
38
+
39
+ ## 8.1.0
40
+
41
+ ### Minor Changes
42
+
43
+ - Update versions of nodejs to 20.11 & typescript to 5.8
44
+
45
+ ### Patch Changes
46
+
47
+ - Update dependencies
48
+ - @rosen-bridge/abstract-logger@2.1.0
49
+ - @rosen-bridge/address-codec@0.7.0
50
+ - @rosen-bridge/json-bigint@0.2.0
51
+ - @rosen-bridge/tokens@3.2.0
52
+
53
+ ## 8.0.1
54
+
55
+ ### Patch Changes
56
+
57
+ - Downgrade ethers version
58
+ - Updated dependencies
59
+ - @rosen-bridge/address-codec@0.6.3
60
+
61
+ ## 8.0.0
62
+
63
+ ### Major Changes
64
+
65
+ - Unify Cardano interfaces (this change only affects `CardanoTx` interface which is used in `CardanoRosenExtractor.extractRawData`)
66
+ - Use new `CardanoTxInput` interface for `CardanoTx.inputs` which only has `txId` and `index` fields
67
+ - Rename `policy_id` to **`policyId`** and `asset_name` to **`assetName`** in `CardanoAsset` interface
68
+
69
+ ### Patch Changes
70
+
71
+ - Update dependencies
72
+ - @rosen-bridge/tokens@3.1.1
73
+
74
+ ## 7.3.3
75
+
76
+ ### Patch Changes
77
+
78
+ - Update ethers version to v6.14.3
79
+ - Updated dependencies
80
+ - @rosen-bridge/address-codec@0.6.2
81
+
82
+ ## 7.3.2
83
+
84
+ ### Patch Changes
85
+
86
+ - Replace tiny-secp256k1 dependency with @bitcoinerlab/secp256k1
87
+ - Updated dependencies
88
+ - @rosen-bridge/address-codec@0.6.1
89
+
90
+ ## 7.3.1
91
+
92
+ ### Patch Changes
93
+
94
+ - Export TokenTransformation type
95
+
96
+ ## 7.3.0
97
+
98
+ ### Minor Changes
99
+
100
+ - Implement rosen extractor for Bitcoin Runes
101
+
102
+ ### Patch Changes
103
+
104
+ - Updated dependencies
105
+ - @rosen-bridge/address-codec@0.6.0
106
+
107
+ ## 7.2.2
108
+
109
+ ### Patch Changes
110
+
111
+ - Improve EvmEthersRosenExtractor performance by checking address before type conversion and full validation
112
+ - Updated dependencies
113
+ - @rosen-bridge/address-codec@0.5.2
114
+ - @rosen-bridge/tokens@3.1.0
115
+
116
+ ## 7.2.1
117
+
118
+ ### Patch Changes
119
+
120
+ - Updated dependencies
121
+ - @rosen-bridge/tokens@3.0.0
122
+
123
+ ## 7.2.0
124
+
125
+ ### Minor Changes
126
+
127
+ - Update koios rosen extractor to use the new interfaces from cardano serialization lib
128
+
129
+ ### Patch Changes
130
+
131
+ - Use cardano serialization lib v13
132
+ - Updated dependencies
133
+ - @rosen-bridge/address-codec@0.5.1
134
+
135
+ ## 7.1.1
136
+
137
+ ### Patch Changes
138
+
139
+ - Fix RPC types of doge
140
+
141
+ ## 7.1.0
142
+
143
+ ### Minor Changes
144
+
145
+ - Add RPC to for Doge
146
+
147
+ ## 7.0.1
148
+
149
+ ### Patch Changes
150
+
151
+ - Updated dependencies
152
+ - @rosen-bridge/address-codec@0.5.0
153
+
154
+ ## 7.0.0
155
+
156
+ ### Major Changes
157
+
158
+ - Constructor get `TokenMap` instead of `RosenTokens`
159
+
160
+ ### Minor Changes
161
+
162
+ - Add rosen extractor for the dogecoin blockchain
163
+
164
+ ### Patch Changes
165
+
166
+ - Fix floating error in BitcoinRpcRosenExtractor
167
+ - Updated dependencies
168
+ - @rosen-bridge/tokens@2.0.0
169
+
170
+ ## 6.3.1
171
+
172
+ ### Patch Changes
173
+
174
+ - Updated dependencies
175
+ - @rosen-bridge/tokens@1.2.2
176
+ - @rosen-bridge/address-codec@0.4.0
177
+
178
+ ## 6.3.0
179
+
180
+ ### Minor Changes
181
+
182
+ - Add Binance chain
183
+
184
+ ## 6.2.2
185
+
186
+ ### Patch Changes
187
+
188
+ - Updated dependencies
189
+ - @rosen-bridge/abstract-logger@2.0.1
190
+
191
+ ## 6.2.1
192
+
193
+ ### Patch Changes
194
+
195
+ - Updated dependencies
196
+ - @rosen-bridge/abstract-logger@2.0.0
197
+
198
+ ## 6.2.0
199
+
200
+ ### Minor Changes
201
+
202
+ - Verify destination address encoded in lock transactions
203
+
204
+ ### Patch Changes
205
+
206
+ - Updated dependencies
207
+ - @rosen-bridge/address-codec@0.3.0
208
+
209
+ ## 6.1.1
210
+
211
+ ### Patch Changes
212
+
213
+ - fix EvmRosenExtractor serialization
214
+
215
+ ## 6.1.0
216
+
217
+ ### Minor Changes
218
+
219
+ - add EvmEthersRosenExtractor
220
+
221
+ ## 6.0.1
222
+
223
+ ### Patch Changes
224
+
225
+ - Updated dependencies
226
+ - @rosen-bridge/tokens@1.2.1
227
+
228
+ ## 6.0.0
229
+
230
+ ### Major Changes
231
+
232
+ - consider decimals drop in AbstractRosenDataExtractor
233
+
234
+ ### Patch Changes
235
+
236
+ - Updated dependencies
237
+ - @rosen-bridge/tokens@1.2.0
238
+
239
+ ## 5.0.1
240
+
241
+ ### Patch Changes
242
+
243
+ - Fix btc rpc extractor to extract amount without decimal
244
+
245
+ ## 5.0.0
246
+
247
+ ### Major Changes
248
+
249
+ - change fromAddress to first input box ID (Only for Bitcoin)
250
+
251
+ ### Minor Changes
252
+
253
+ - add bitcoin RPC rosen extractor
254
+
255
+ ## 4.1.1
256
+
257
+ ### Patch Changes
258
+
259
+ - fix bitcoin rosen-extractors (remove PUSH_DATA1 opcode from expected OP_RETURN script)
260
+
261
+ ## 4.1.0
262
+
263
+ ### Minor Changes
264
+
265
+ - allow custom order for tx outputs in bitcoin extractors
266
+
267
+ ## 4.0.1
268
+
269
+ ### Patch Changes
270
+
271
+ - check token availability on target chain
272
+ - Updated dependencies
273
+ - @rosen-bridge/address-codec@0.2.1
274
+
275
+ ## 4.0.0
276
+
277
+ ### Major Changes
278
+
279
+ - change EvmRosenExtractor tx format
280
+
281
+ ### Minor Changes
282
+
283
+ - add universal evm rosen extractor
284
+
285
+ ## 3.5.0
286
+
287
+ ### Minor Changes
288
+
289
+ - RPC rosen extractor added for EVM chains
290
+
291
+ ### Patch Changes
292
+
293
+ - Updated dependencies
294
+ - @rosen-bridge/address-codec@0.2.0
295
+
296
+ ## 3.4.0
297
+
298
+ ### Minor Changes
299
+
300
+ - add universal bitcoin rosen extractor
@@ -16,4 +16,4 @@ export default abstract class AbstractRosenDataExtractor<TransactionType> {
16
16
  */
17
17
  abstract extractRawData: (transaction: TransactionType) => RosenData | undefined;
18
18
  }
19
- //# sourceMappingURL=AbstractRosenDataExtractor.d.ts.map
19
+ //# sourceMappingURL=abstractRosenDataExtractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractRosenDataExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/AbstractRosenDataExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAG5E,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,0BAA0B,CAAC,eAAe;IACtE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAE3B,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAM1E;;OAEG;IACH,GAAG,GAAI,aAAa,eAAe,KAAG,SAAS,GAAG,SAAS,CAoBzD;IAEF;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,eAAe,KACzB,SAAS,GAAG,SAAS,CAAC;CAC5B"}
1
+ {"version":3,"file":"abstractRosenDataExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/abstractRosenDataExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAG5E,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,0BAA0B,CAAC,eAAe;IACtE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAE3B,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAM1E;;OAEG;IACH,GAAG,GAAI,aAAa,eAAe,KAAG,SAAS,GAAG,SAAS,CAoBzD;IAEF;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,eAAe,KACzB,SAAS,GAAG,SAAS,CAAC;CAC5B"}
@@ -29,4 +29,4 @@ export default class AbstractRosenDataExtractor {
29
29
  return rawData;
30
30
  };
31
31
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxPQUFPLE9BQWdCLDBCQUEwQjtJQUVuQyxNQUFNLENBQWlCO0lBQ3ZCLE1BQU0sQ0FBVztJQUNqQixXQUFXLENBQVM7SUFFdkMsWUFBWSxXQUFtQixFQUFFLE1BQWdCLEVBQUUsTUFBdUI7UUFDeEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLEdBQUcsQ0FBQyxXQUE0QixFQUF5QixFQUFFO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsZ0RBQWdELE9BQU8sQ0FBQyxTQUFTLGVBQWUsT0FBTyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsRUFBRSxDQUNySCxDQUFDO2dCQUNGLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNO2lCQUN6QixVQUFVLENBQ1QsT0FBTyxDQUFDLGtCQUFrQixFQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUN0QixJQUFJLENBQUMsS0FBSyxDQUNYO2lCQUNBLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0NBUUgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgdmFsaWRhdGVBZGRyZXNzIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hZGRyZXNzLWNvZGVjJztcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGNoYWluOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9rZW5zOiBUb2tlbk1hcDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2tBZGRyZXNzOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICB0aGlzLmxvY2tBZGRyZXNzID0gbG9ja0FkZHJlc3M7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgPyBsb2dnZXIgOiBuZXcgRHVtbXlMb2dnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGFuZCB3cmFwIHRoZSBhbW91bnRcbiAgICovXG4gIGdldCA9ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25UeXBlKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCByYXdEYXRhID0gdGhpcy5leHRyYWN0UmF3RGF0YSh0cmFuc2FjdGlvbik7XG4gICAgaWYgKHJhd0RhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhyYXdEYXRhLnRvQ2hhaW4sIHJhd0RhdGEudG9BZGRyZXNzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFJlY2VpdmVyIGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsZWQgKGFkZHJlc3MgWyR7cmF3RGF0YS50b0FkZHJlc3N9XSBvbiBjaGFpbiBbJHtyYXdEYXRhLnRvQ2hhaW59XSkgd2l0aCBlcnJvcjogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJhd0RhdGEuYW1vdW50ID0gdGhpcy50b2tlbnNcbiAgICAgICAgLndyYXBBbW91bnQoXG4gICAgICAgICAgcmF3RGF0YS5zb3VyY2VDaGFpblRva2VuSWQsXG4gICAgICAgICAgQmlnSW50KHJhd0RhdGEuYW1vdW50KSxcbiAgICAgICAgICB0aGlzLmNoYWluXG4gICAgICAgIClcbiAgICAgICAgLmFtb3VudC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gcmF3RGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogZXh0cmFjdHMgUm9zZW5EYXRhIGZyb20gZ2l2ZW4gbG9jayB0cmFuc2FjdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgZXh0cmFjdFJhd0RhdGE6IChcbiAgICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25UeXBlXG4gICkgPT4gUm9zZW5EYXRhIHwgdW5kZWZpbmVkO1xufVxuIl19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L2Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxPQUFPLE9BQWdCLDBCQUEwQjtJQUVuQyxNQUFNLENBQWlCO0lBQ3ZCLE1BQU0sQ0FBVztJQUNqQixXQUFXLENBQVM7SUFFdkMsWUFBWSxXQUFtQixFQUFFLE1BQWdCLEVBQUUsTUFBdUI7UUFDeEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLEdBQUcsQ0FBQyxXQUE0QixFQUF5QixFQUFFO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsZ0RBQWdELE9BQU8sQ0FBQyxTQUFTLGVBQWUsT0FBTyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsRUFBRSxDQUNySCxDQUFDO2dCQUNGLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNO2lCQUN6QixVQUFVLENBQ1QsT0FBTyxDQUFDLGtCQUFrQixFQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUN0QixJQUFJLENBQUMsS0FBSyxDQUNYO2lCQUNBLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0NBUUgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgdmFsaWRhdGVBZGRyZXNzIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hZGRyZXNzLWNvZGVjJztcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGNoYWluOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9rZW5zOiBUb2tlbk1hcDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2tBZGRyZXNzOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICB0aGlzLmxvY2tBZGRyZXNzID0gbG9ja0FkZHJlc3M7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgPyBsb2dnZXIgOiBuZXcgRHVtbXlMb2dnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGFuZCB3cmFwIHRoZSBhbW91bnRcbiAgICovXG4gIGdldCA9ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25UeXBlKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCByYXdEYXRhID0gdGhpcy5leHRyYWN0UmF3RGF0YSh0cmFuc2FjdGlvbik7XG4gICAgaWYgKHJhd0RhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhyYXdEYXRhLnRvQ2hhaW4sIHJhd0RhdGEudG9BZGRyZXNzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFJlY2VpdmVyIGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsZWQgKGFkZHJlc3MgWyR7cmF3RGF0YS50b0FkZHJlc3N9XSBvbiBjaGFpbiBbJHtyYXdEYXRhLnRvQ2hhaW59XSkgd2l0aCBlcnJvcjogJHtlfWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByYXdEYXRhLmFtb3VudCA9IHRoaXMudG9rZW5zXG4gICAgICAgIC53cmFwQW1vdW50KFxuICAgICAgICAgIHJhd0RhdGEuc291cmNlQ2hhaW5Ub2tlbklkLFxuICAgICAgICAgIEJpZ0ludChyYXdEYXRhLmFtb3VudCksXG4gICAgICAgICAgdGhpcy5jaGFpbixcbiAgICAgICAgKVxuICAgICAgICAuYW1vdW50LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiByYXdEYXRhO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhYnN0cmFjdCBleHRyYWN0UmF3RGF0YTogKFxuICAgIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblR5cGUsXG4gICkgPT4gUm9zZW5EYXRhIHwgdW5kZWZpbmVkO1xufVxuIl19
@@ -8,6 +8,7 @@ interface RosenData {
8
8
  amount: string;
9
9
  targetChainTokenId: string;
10
10
  sourceTxId: string;
11
+ rawData: string;
11
12
  }
12
13
  interface TokenTransformation {
13
14
  from: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/types.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/types.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgUm9zZW5EYXRhIHtcbiAgdG9DaGFpbjogc3RyaW5nO1xuICB0b0FkZHJlc3M6IHN0cmluZztcbiAgYnJpZGdlRmVlOiBzdHJpbmc7XG4gIG5ldHdvcmtGZWU6IHN0cmluZztcbiAgZnJvbUFkZHJlc3M6IHN0cmluZztcbiAgc291cmNlQ2hhaW5Ub2tlbklkOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICB0YXJnZXRDaGFpblRva2VuSWQ6IHN0cmluZztcbiAgc291cmNlVHhJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVG9rZW5UcmFuc2Zvcm1hdGlvbiB7XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB7IFJvc2VuRGF0YSwgVG9rZW5UcmFuc2Zvcm1hdGlvbiB9O1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgUm9zZW5EYXRhIHtcbiAgdG9DaGFpbjogc3RyaW5nO1xuICB0b0FkZHJlc3M6IHN0cmluZztcbiAgYnJpZGdlRmVlOiBzdHJpbmc7XG4gIG5ldHdvcmtGZWU6IHN0cmluZztcbiAgZnJvbUFkZHJlc3M6IHN0cmluZztcbiAgc291cmNlQ2hhaW5Ub2tlbklkOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICB0YXJnZXRDaGFpblRva2VuSWQ6IHN0cmluZztcbiAgc291cmNlVHhJZDogc3RyaW5nO1xuICByYXdEYXRhOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUb2tlblRyYW5zZm9ybWF0aW9uIHtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHsgUm9zZW5EYXRhLCBUb2tlblRyYW5zZm9ybWF0aW9uIH07XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { RosenData, TokenTransformation } from '../abstract/types';
2
- import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
2
+ import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
3
3
  import { BitcoinEsploraTransaction, EsploraTxOutput } from './types';
4
4
  import { TokenMap } from '@rosen-bridge/tokens';
5
5
  import { AbstractLogger } from '@rosen-bridge/abstract-logger';
@@ -19,4 +19,4 @@ export declare class BitcoinEsploraRosenExtractor extends AbstractRosenDataExtra
19
19
  */
20
20
  getAssetTransformation: (box: EsploraTxOutput, toChain: string) => TokenTransformation | undefined;
21
21
  }
22
- //# sourceMappingURL=BitcoinEsploraRosenExtractor.d.ts.map
22
+ //# sourceMappingURL=bitcoinEsploraRosenExtractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BitcoinEsploraRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EACL,yBAAyB,EACzB,eAAe,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,qBAAa,4BAA6B,SAAQ,0BAA0B,CAAC,yBAAyB,CAAC;IACrG,QAAQ,CAAC,KAAK,aAAiB;IAC/B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GACZ,aAAa,yBAAyB,KACrC,SAAS,GAAG,SAAS,CA6EtB;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
1
+ {"version":3,"file":"bitcoinEsploraRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/bitcoin/bitcoinEsploraRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EACL,yBAAyB,EACzB,eAAe,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,qBAAa,4BAA6B,SAAQ,0BAA0B,CAAC,yBAAyB,CAAC;IACrG,QAAQ,CAAC,KAAK,aAAiB;IAC/B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GACZ,aAAa,yBAAyB,KACrC,SAAS,GAAG,SAAS,CAgFtB;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
@@ -0,0 +1,108 @@
1
+ import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
2
+ import { BITCOIN_CHAIN, BITCOIN_NATIVE_TOKEN } from '../const';
3
+ import { address } from 'bitcoinjs-lib';
4
+ import { parseOpReturn } from './utils';
5
+ export class BitcoinEsploraRosenExtractor extends AbstractRosenDataExtractor {
6
+ chain = BITCOIN_CHAIN;
7
+ lockScriptPubKey;
8
+ constructor(lockAddress, tokens, logger) {
9
+ super(lockAddress, tokens, logger);
10
+ this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
11
+ }
12
+ /**
13
+ * extracts RosenData from given lock transaction in Esplora format
14
+ * @param transaction the lock transaction in Esplora format
15
+ */
16
+ extractRawData = (transaction) => {
17
+ const baseError = `No rosen data found for tx [${transaction.txid}]`;
18
+ try {
19
+ const outputs = transaction.vout;
20
+ if (outputs.length < 2) {
21
+ this.logger.debug(baseError + `: Insufficient number of boxes`);
22
+ return undefined;
23
+ }
24
+ let validData = false; // an OP_RETURN box with valid data is found
25
+ let validLock = false; // a lock box is found with available asset transformation
26
+ // parse rosen data from OP_RETURN box
27
+ let opReturnData;
28
+ let rawData = '';
29
+ for (let i = 0; i < outputs.length; i++) {
30
+ const output = outputs[i];
31
+ if (output.scriptpubkey.slice(0, 2) !== '6a')
32
+ continue; // not an OP_RETURN utxo
33
+ try {
34
+ opReturnData = parseOpReturn(output.scriptpubkey);
35
+ rawData = output.scriptpubkey;
36
+ validData = true;
37
+ break;
38
+ }
39
+ catch (e) {
40
+ this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.txid}.${i}]: ${e}`);
41
+ }
42
+ }
43
+ if (!validData || !opReturnData) {
44
+ this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
45
+ return undefined;
46
+ }
47
+ // find target chain token id
48
+ let assetTransformation;
49
+ for (let i = 0; i < outputs.length; i++) {
50
+ const output = outputs[i];
51
+ if (output.scriptpubkey !== this.lockScriptPubKey)
52
+ continue; // utxo address is not lock address
53
+ assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
54
+ if (assetTransformation) {
55
+ validLock = true;
56
+ break;
57
+ }
58
+ }
59
+ if (!validLock || !assetTransformation) {
60
+ this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
61
+ return undefined;
62
+ }
63
+ const fromAddress = `box:${transaction.vin[0].txid}.${transaction.vin[0].vout}`;
64
+ return {
65
+ toChain: opReturnData.toChain,
66
+ toAddress: opReturnData.toAddress,
67
+ bridgeFee: opReturnData.bridgeFee,
68
+ networkFee: opReturnData.networkFee,
69
+ fromAddress: fromAddress,
70
+ sourceChainTokenId: assetTransformation.from,
71
+ amount: assetTransformation.amount,
72
+ targetChainTokenId: assetTransformation.to,
73
+ sourceTxId: transaction.txid,
74
+ rawData,
75
+ };
76
+ }
77
+ catch (e) {
78
+ this.logger.debug(`An error occurred while getting Bitcoin rosen data from Esplora: ${e}`);
79
+ if (e instanceof Error && e.stack) {
80
+ this.logger.debug(e.stack);
81
+ }
82
+ }
83
+ return undefined;
84
+ };
85
+ /**
86
+ * extracts and builds token transformation from UTXO and tokenMap
87
+ * @param box transaction output
88
+ * @param toChain event target chain
89
+ */
90
+ getAssetTransformation = (box, toChain) => {
91
+ // try to build transformation using locked BTC
92
+ const wrappedBtc = this.tokens.search(BITCOIN_CHAIN, {
93
+ tokenId: BITCOIN_NATIVE_TOKEN,
94
+ });
95
+ if (wrappedBtc.length > 0 && Object.hasOwn(wrappedBtc[0], toChain)) {
96
+ const satoshiAmount = box.value;
97
+ return {
98
+ from: BITCOIN_NATIVE_TOKEN,
99
+ to: this.tokens.getID(wrappedBtc[0], toChain),
100
+ amount: satoshiAmount.toString(),
101
+ };
102
+ }
103
+ else {
104
+ return undefined;
105
+ }
106
+ };
107
+ }
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pbkVzcGxvcmFSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvYml0Y29pbi9iaXRjb2luRXNwbG9yYVJvc2VuRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sMEJBQTBCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVEvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxPQUFPLDRCQUE2QixTQUFRLDBCQUFxRDtJQUM1RixLQUFLLEdBQUcsYUFBYSxDQUFDO0lBQ3JCLGdCQUFnQixDQUFTO0lBRW5DLFlBQVksV0FBbUIsRUFBRSxNQUFnQixFQUFFLE1BQXVCO1FBQ3hFLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLENBQ2YsV0FBc0MsRUFDZixFQUFFO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLCtCQUErQixXQUFXLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDckUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLFNBQVMsQ0FBQztZ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bWF0aW9uIH0gZnJvbSAnLi4vYWJzdHJhY3QvdHlwZXMnO1xuaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L2Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IEJJVENPSU5fQ0hBSU4sIEJJVENPSU5fTkFUSVZFX1RPS0VOIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHtcbiAgQml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbixcbiAgRXNwbG9yYVR4T3V0cHV0LFxuICBPcFJldHVybkRhdGEsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IGFkZHJlc3MgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IHBhcnNlT3BSZXR1cm4gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEJpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gQklUQ09JTl9DSEFJTjtcbiAgcHJvdGVjdGVkIGxvY2tTY3JpcHRQdWJLZXk6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihsb2NrQWRkcmVzczogc3RyaW5nLCB0b2tlbnM6IFRva2VuTWFwLCBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHN1cGVyKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlcik7XG4gICAgdGhpcy5sb2NrU2NyaXB0UHViS2V5ID0gYWRkcmVzcy50b091dHB1dFNjcmlwdChsb2NrQWRkcmVzcykudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gRXNwbG9yYSBmb3JtYXRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIEVzcGxvcmEgZm9ybWF0XG4gICAqL1xuICBleHRyYWN0UmF3RGF0YSA9IChcbiAgICB0cmFuc2FjdGlvbjogQml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbixcbiAgKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24udHhpZH1dYDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLnZvdXQ7XG4gICAgICBpZiAob3V0cHV0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEluc3VmZmljaWVudCBudW1iZXIgb2YgYm94ZXNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IHZhbGlkRGF0YSA9IGZhbHNlOyAvLyBhbiBPUF9SRVRVUk4gYm94IHdpdGggdmFsaWQgZGF0YSBpcyBmb3VuZFxuICAgICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlOyAvLyBhIGxvY2sgYm94IGlzIGZvdW5kIHdpdGggYXZhaWxhYmxlIGFzc2V0IHRyYW5zZm9ybWF0aW9uXG5cbiAgICAgIC8vIHBhcnNlIHJvc2VuIGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94XG4gICAgICBsZXQgb3BSZXR1cm5EYXRhOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgcmF3RGF0YTogc3RyaW5nID0gJyc7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgICAgaWYgKG91dHB1dC5zY3JpcHRwdWJrZXkuc2xpY2UoMCwgMikgIT09ICc2YScpIGNvbnRpbnVlOyAvLyBub3QgYW4gT1BfUkVUVVJOIHV0eG9cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG9wUmV0dXJuRGF0YSA9IHBhcnNlT3BSZXR1cm4ob3V0cHV0LnNjcmlwdHB1YmtleSk7XG4gICAgICAgICAgcmF3RGF0YSA9IG91dHB1dC5zY3JpcHRwdWJrZXk7XG4gICAgICAgICAgdmFsaWREYXRhID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBleHRyYWN0IGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94IFske3RyYW5zYWN0aW9uLnR4aWR9LiR7aX1dOiAke2V9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZhbGlkRGF0YSB8fCAhb3BSZXR1cm5EYXRhKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArIGA6IE5vIE9QX1JFVFVSTiBib3ggd2l0aCB2YWxpZCBkYXRhIGlzIGZvdW5kYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCB0YXJnZXQgY2hhaW4gdG9rZW4gaWRcbiAgICAgIGxldCBhc3NldFRyYW5zZm9ybWF0aW9uOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0cHVia2V5ICE9PSB0aGlzLmxvY2tTY3JpcHRQdWJLZXkpIGNvbnRpbnVlOyAvLyB1dHhvIGFkZHJlc3MgaXMgbm90IGxvY2sgYWRkcmVzc1xuICAgICAgICBhc3NldFRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRBc3NldFRyYW5zZm9ybWF0aW9uKFxuICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFzc2V0VHJhbnNmb3JtYXRpb24pIHtcbiAgICAgICAgICB2YWxpZExvY2sgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZhbGlkTG9jayB8fCAhYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZmluZCByb3NlbiBhc3NldCB0cmFuc2Zvcm1hdGlvbmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gYGJveDoke3RyYW5zYWN0aW9uLnZpblswXS50eGlkfS4ke3RyYW5zYWN0aW9uLnZpblswXS52b3V0fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBvcFJldHVybkRhdGEudG9BZGRyZXNzLFxuICAgICAgICBicmlkZ2VGZWU6IG9wUmV0dXJuRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IG9wUmV0dXJuRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICBhbW91bnQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uYW1vdW50LFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24udG8sXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLnR4aWQsXG4gICAgICAgIHJhd0RhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBCaXRjb2luIHJvc2VuIGRhdGEgZnJvbSBFc3Bsb3JhOiAke2V9YCxcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBVVFhPIGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBFc3Bsb3JhVHhPdXRwdXQsXG4gICAgdG9DaGFpbjogc3RyaW5nLFxuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIEJUQ1xuICAgIGNvbnN0IHdyYXBwZWRCdGMgPSB0aGlzLnRva2Vucy5zZWFyY2goQklUQ09JTl9DSEFJTiwge1xuICAgICAgdG9rZW5JZDogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgfSk7XG4gICAgaWYgKHdyYXBwZWRCdGMubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHdyYXBwZWRCdGNbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICBjb25zdCBzYXRvc2hpQW1vdW50ID0gYm94LnZhbHVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRCh3cmFwcGVkQnRjWzBdLCB0b0NoYWluKSxcbiAgICAgICAgYW1vdW50OiBzYXRvc2hpQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { RosenData, TokenTransformation } from '../abstract/types';
2
- import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
2
+ import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
3
3
  import { BitcoinTxOutput } from './types';
4
4
  import { TokenMap } from '@rosen-bridge/tokens';
5
5
  import { AbstractLogger } from '@rosen-bridge/abstract-logger';
@@ -19,4 +19,4 @@ export declare class BitcoinRosenExtractor extends AbstractRosenDataExtractor<st
19
19
  */
20
20
  getAssetTransformation: (box: BitcoinTxOutput, toChain: string) => TokenTransformation | undefined;
21
21
  }
22
- //# sourceMappingURL=BitcoinRosenExtractor.d.ts.map
22
+ //# sourceMappingURL=bitcoinRosenExtractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BitcoinRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/bitcoin/BitcoinRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAa,eAAe,EAAgB,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,qBAAa,qBAAsB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IAC3E,QAAQ,CAAC,KAAK,aAAiB;IAC/B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GAAI,uBAAuB,MAAM,KAAG,SAAS,GAAG,SAAS,CAqFrE;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
1
+ {"version":3,"file":"bitcoinRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/bitcoin/bitcoinRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAa,eAAe,EAAgB,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,qBAAa,qBAAsB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IAC3E,QAAQ,CAAC,KAAK,aAAiB;IAC/B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GAAI,uBAAuB,MAAM,KAAG,SAAS,GAAG,SAAS,CAwFrE;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
@@ -0,0 +1,116 @@
1
+ import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
2
+ import { BITCOIN_CHAIN, BITCOIN_NATIVE_TOKEN } from '../const';
3
+ import { address } from 'bitcoinjs-lib';
4
+ import { parseOpReturn } from './utils';
5
+ import JsonBigInt from '@rosen-bridge/json-bigint';
6
+ export class BitcoinRosenExtractor extends AbstractRosenDataExtractor {
7
+ chain = BITCOIN_CHAIN;
8
+ lockScriptPubKey;
9
+ constructor(lockAddress, tokens, logger) {
10
+ super(lockAddress, tokens, logger);
11
+ this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
12
+ }
13
+ /**
14
+ * extracts RosenData from given lock transaction in BitcoinTx format
15
+ * @param serializedTransaction stringified transaction in BitcoinTx format
16
+ */
17
+ extractRawData = (serializedTransaction) => {
18
+ let transaction;
19
+ try {
20
+ transaction = JsonBigInt.parse(serializedTransaction);
21
+ }
22
+ catch (e) {
23
+ throw new Error(`Failed to parse transaction json to BitcoinTx format while extracting rosen data: ${e}`);
24
+ }
25
+ const baseError = `No rosen data found for tx [${transaction.id}]`;
26
+ try {
27
+ const outputs = transaction.outputs;
28
+ if (outputs.length < 2) {
29
+ this.logger.debug(baseError + `: Insufficient number of boxes`);
30
+ return undefined;
31
+ }
32
+ let validData = false; // an OP_RETURN box with valid data is found
33
+ let validLock = false; // a lock box is found with available asset transformation
34
+ // parse rosen data from OP_RETURN box
35
+ let opReturnData;
36
+ let rawData = '';
37
+ for (let i = 0; i < outputs.length; i++) {
38
+ const output = outputs[i];
39
+ if (output.scriptPubKey.slice(0, 2) !== '6a')
40
+ continue; // not an OP_RETURN utxo
41
+ try {
42
+ opReturnData = parseOpReturn(output.scriptPubKey);
43
+ rawData = output.scriptPubKey;
44
+ validData = true;
45
+ break;
46
+ }
47
+ catch (e) {
48
+ this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.id}.${i}]: ${e}`);
49
+ }
50
+ }
51
+ if (!validData || !opReturnData) {
52
+ this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
53
+ return undefined;
54
+ }
55
+ // find target chain token id
56
+ let assetTransformation;
57
+ for (let i = 0; i < outputs.length; i++) {
58
+ const output = outputs[i];
59
+ if (output.scriptPubKey !== this.lockScriptPubKey)
60
+ continue; // utxo address is not lock address
61
+ assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
62
+ if (assetTransformation) {
63
+ validLock = true;
64
+ break;
65
+ }
66
+ }
67
+ if (!validLock || !assetTransformation) {
68
+ this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
69
+ return undefined;
70
+ }
71
+ const fromAddress = `box:${transaction.inputs[0].txId}.${transaction.inputs[0].index}`;
72
+ return {
73
+ toChain: opReturnData.toChain,
74
+ toAddress: opReturnData.toAddress,
75
+ bridgeFee: opReturnData.bridgeFee,
76
+ networkFee: opReturnData.networkFee,
77
+ fromAddress: fromAddress,
78
+ sourceChainTokenId: assetTransformation.from,
79
+ amount: assetTransformation.amount,
80
+ targetChainTokenId: assetTransformation.to,
81
+ sourceTxId: transaction.id,
82
+ rawData,
83
+ };
84
+ }
85
+ catch (e) {
86
+ this.logger.debug(`An error occurred while getting Bitcoin rosen data: ${e}`);
87
+ if (e instanceof Error && e.stack) {
88
+ this.logger.debug(e.stack);
89
+ }
90
+ }
91
+ return undefined;
92
+ };
93
+ /**
94
+ * extracts and builds token transformation from UTXO and tokenMap
95
+ * @param box transaction output
96
+ * @param toChain event target chain
97
+ */
98
+ getAssetTransformation = (box, toChain) => {
99
+ // try to build transformation using locked BTC
100
+ const wrappedBtc = this.tokens.search(BITCOIN_CHAIN, {
101
+ tokenId: BITCOIN_NATIVE_TOKEN,
102
+ });
103
+ if (wrappedBtc.length > 0 && Object.hasOwn(wrappedBtc[0], toChain)) {
104
+ const satoshiAmount = box.value;
105
+ return {
106
+ from: BITCOIN_NATIVE_TOKEN,
107
+ to: this.tokens.getID(wrappedBtc[0], toChain),
108
+ amount: satoshiAmount.toString(),
109
+ };
110
+ }
111
+ else {
112
+ return undefined;
113
+ }
114
+ };
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pblJvc2VuRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2dldFJvc2VuRGF0YS9iaXRjb2luL2JpdGNvaW5Sb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hDLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSwwQkFBa0M7SUFDbEUsS0FBSyxHQUFHLGFBQWEsQ0FBQztJQUNyQixnQkFBZ0IsQ0FBUztJQUVuQyxZQUFZLFdBQW1CLEVBQUUsTUFBZ0IsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsR0FBRyxDQUFDLHFCQUE2QixFQUF5QixFQUFFO1FBQ3hFLElBQUksV0FBc0IsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYixxRkFBcUYsQ0FBQyxFQUFFLENBQ3pGLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsK0JBQStCLFdBQVcs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QyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO2dCQUM3QyxNQUFNLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTthQUNqQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEsIFRva2VuVHJhbnNmb3JtYXRpb24gfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvYWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgQklUQ09JTl9DSEFJTiwgQklUQ09JTl9OQVRJVkVfVE9LRU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBCaXRjb2luVHgsIEJpdGNvaW5UeE91dHB1dCwgT3BSZXR1cm5EYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgYWRkcmVzcyB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgcGFyc2VPcFJldHVybiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmV4cG9ydCBjbGFzcyBCaXRjb2luUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxzdHJpbmc+IHtcbiAgcmVhZG9ubHkgY2hhaW4gPSBCSVRDT0lOX0NIQUlOO1xuICBwcm90ZWN0ZWQgbG9ja1NjcmlwdFB1YktleTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGxvY2tBZGRyZXNzOiBzdHJpbmcsIHRva2VuczogVG9rZW5NYXAsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIobG9ja0FkZHJlc3MsIHRva2VucywgbG9nZ2VyKTtcbiAgICB0aGlzLmxvY2tTY3JpcHRQdWJLZXkgPSBhZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGxvY2tBZGRyZXNzKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogZXh0cmFjdHMgUm9zZW5EYXRhIGZyb20gZ2l2ZW4gbG9jayB0cmFuc2FjdGlvbiBpbiBCaXRjb2luVHggZm9ybWF0XG4gICAqIEBwYXJhbSBzZXJpYWxpemVkVHJhbnNhY3Rpb24gc3RyaW5naWZpZWQgdHJhbnNhY3Rpb24gaW4gQml0Y29pblR4IGZvcm1hdFxuICAgKi9cbiAgZXh0cmFjdFJhd0RhdGEgPSAoc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBSb3NlbkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB0cmFuc2FjdGlvbjogQml0Y29pblR4O1xuICAgIHRyeSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IEpzb25CaWdJbnQucGFyc2Uoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgdHJhbnNhY3Rpb24ganNvbiB0byBCaXRjb2luVHggZm9ybWF0IHdoaWxlIGV4dHJhY3Rpbmcgcm9zZW4gZGF0YTogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaWR9XWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0cmFuc2FjdGlvbi5vdXRwdXRzO1xuICAgICAgaWYgKG91dHB1dHMubGVuZ3RoIDwgMikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhiYXNlRXJyb3IgKyBgOiBJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGJveGVzYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWxpZERhdGEgPSBmYWxzZTsgLy8gYW4gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRcbiAgICAgIGxldCB2YWxpZExvY2sgPSBmYWxzZTsgLy8gYSBsb2NrIGJveCBpcyBmb3VuZCB3aXRoIGF2YWlsYWJsZSBhc3NldCB0cmFuc2Zvcm1hdGlvblxuXG4gICAgICAvLyBwYXJzZSByb3NlbiBkYXRhIGZyb20gT1BfUkVUVVJOIGJveFxuICAgICAgbGV0IG9wUmV0dXJuRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHJhd0RhdGE6IHN0cmluZyA9ICcnO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0UHViS2V5LnNsaWNlKDAsIDIpICE9PSAnNmEnKSBjb250aW51ZTsgLy8gbm90IGFuIE9QX1JFVFVSTiB1dHhvXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcFJldHVybkRhdGEgPSBwYXJzZU9wUmV0dXJuKG91dHB1dC5zY3JpcHRQdWJLZXkpO1xuICAgICAgICAgIHJhd0RhdGEgPSBvdXRwdXQuc2NyaXB0UHViS2V5O1xuICAgICAgICAgIHZhbGlkRGF0YSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gT1BfUkVUVVJOIGJveCBbJHt0cmFuc2FjdGlvbi5pZH0uJHtpfV06ICR7ZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWREYXRhIHx8ICFvcFJldHVybkRhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogTm8gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRgLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBmaW5kIHRhcmdldCBjaGFpbiB0b2tlbiBpZFxuICAgICAgbGV0IGFzc2V0VHJhbnNmb3JtYXRpb246IFRva2VuVHJhbnNmb3JtYXRpb24gfCB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgICAgaWYgKG91dHB1dC5zY3JpcHRQdWJLZXkgIT09IHRoaXMubG9ja1NjcmlwdFB1YktleSkgY29udGludWU7IC8vIHV0eG8gYWRkcmVzcyBpcyBub3QgbG9jayBhZGRyZXNzXG4gICAgICAgIGFzc2V0VHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldEFzc2V0VHJhbnNmb3JtYXRpb24oXG4gICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgIG9wUmV0dXJuRGF0YS50b0NoYWluLFxuICAgICAgICApO1xuICAgICAgICBpZiAoYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICAgIHZhbGlkTG9jayA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRMb2NrIHx8ICFhc3NldFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArIGA6IEZhaWxlZCB0byBmaW5kIHJvc2VuIGFzc2V0IHRyYW5zZm9ybWF0aW9uYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSBgYm94OiR7dHJhbnNhY3Rpb24uaW5wdXRzWzBdLnR4SWR9LiR7dHJhbnNhY3Rpb24uaW5wdXRzWzBdLmluZGV4fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBvcFJldHVybkRhdGEudG9BZGRyZXNzLFxuICAgICAgICBicmlkZ2VGZWU6IG9wUmV0dXJuRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IG9wUmV0dXJuRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICBhbW91bnQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uYW1vdW50LFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24udG8sXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLmlkLFxuICAgICAgICByYXdEYXRhLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgQml0Y29pbiByb3NlbiBkYXRhOiAke2V9YCxcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBVVFhPIGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBCaXRjb2luVHhPdXRwdXQsXG4gICAgdG9DaGFpbjogc3RyaW5nLFxuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIEJUQ1xuICAgIGNvbnN0IHdyYXBwZWRCdGMgPSB0aGlzLnRva2Vucy5zZWFyY2goQklUQ09JTl9DSEFJTiwge1xuICAgICAgdG9rZW5JZDogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgfSk7XG4gICAgaWYgKHdyYXBwZWRCdGMubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHdyYXBwZWRCdGNbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICBjb25zdCBzYXRvc2hpQW1vdW50ID0gYm94LnZhbHVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRCh3cmFwcGVkQnRjWzBdLCB0b0NoYWluKSxcbiAgICAgICAgYW1vdW50OiBzYXRvc2hpQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==