@my-packages-changeit/address-extractor 7.0.8
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.
- package/CHANGELOG.md +296 -0
- package/README.md +61 -0
- package/dist/actions/boxAction.d.ts +18 -0
- package/dist/actions/boxAction.d.ts.map +1 -0
- package/dist/actions/boxAction.js +28 -0
- package/dist/entities/boxEntity.d.ts +5 -0
- package/dist/entities/boxEntity.d.ts.map +1 -0
- package/dist/entities/boxEntity.js +23 -0
- package/dist/extractor/ergoUtxoExtractor.d.ts +33 -0
- package/dist/extractor/ergoUtxoExtractor.d.ts.map +1 -0
- package/dist/extractor/ergoUtxoExtractor.js +49 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/interfaces/types.d.ts +6 -0
- package/dist/interfaces/types.d.ts.map +1 -0
- package/dist/interfaces/types.js +2 -0
- package/dist/migrations/index.d.ts +7 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +23 -0
- package/dist/migrations/postgres/1688558553044-migration.d.ts +7 -0
- package/dist/migrations/postgres/1688558553044-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1688558553044-migration.js +24 -0
- package/dist/migrations/postgres/1689151869889-migration.d.ts +7 -0
- package/dist/migrations/postgres/1689151869889-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1689151869889-migration.js +15 -0
- package/dist/migrations/postgres/1737785465594-migration.d.ts +7 -0
- package/dist/migrations/postgres/1737785465594-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1737785465594-migration.js +39 -0
- package/dist/migrations/postgres/1758958610937-migration.d.ts +7 -0
- package/dist/migrations/postgres/1758958610937-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1758958610937-migration.js +30 -0
- package/dist/migrations/sqlite/1688555566662-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1688555566662-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1688555566662-migration.js +23 -0
- package/dist/migrations/sqlite/1689143753142-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1689143753142-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1689143753142-migration.js +85 -0
- package/dist/migrations/sqlite/1737532655167-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1737532655167-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1737532655167-migration.js +99 -0
- package/dist/migrations/sqlite/1758049849122-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1758049849122-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1758049849122-migration.js +96 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +6 -0
- package/package.json +43 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# @rosen-bridge/address-extractor
|
|
2
|
+
|
|
3
|
+
## 7.0.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Update dependencies
|
|
8
|
+
- @rosen-bridge/abstract-extractor@3.2.3
|
|
9
|
+
|
|
10
|
+
## 7.0.7
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Update dependencies
|
|
15
|
+
- @rosen-bridge/abstract-extractor@3.2.2
|
|
16
|
+
|
|
17
|
+
## 7.0.6
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Update dependencies
|
|
22
|
+
- @rosen-bridge/abstract-extractor@3.2.1
|
|
23
|
+
|
|
24
|
+
## 7.0.5
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- Update dependencies
|
|
29
|
+
- @rosen-bridge/abstract-extractor@3.2.0
|
|
30
|
+
- @rosen-bridge/scanner-interfaces@1.0.0
|
|
31
|
+
|
|
32
|
+
## 7.0.4
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- Update dependencies
|
|
37
|
+
- @rosen-bridge/abstract-extractor@3.1.2
|
|
38
|
+
- @rosen-bridge/extended-typeorm@1.1.0
|
|
39
|
+
|
|
40
|
+
## 7.0.3
|
|
41
|
+
|
|
42
|
+
### Patch Changes
|
|
43
|
+
|
|
44
|
+
- Update dependencies
|
|
45
|
+
- @rosen-bridge/abstract-extractor@3.1.1
|
|
46
|
+
|
|
47
|
+
## 7.0.2
|
|
48
|
+
|
|
49
|
+
### Patch Changes
|
|
50
|
+
|
|
51
|
+
- Update dependencies
|
|
52
|
+
- @rosen-bridge/abstract-extractor@3.1.0
|
|
53
|
+
|
|
54
|
+
## 7.0.1
|
|
55
|
+
|
|
56
|
+
### Patch Changes
|
|
57
|
+
|
|
58
|
+
- Update dependencies
|
|
59
|
+
- @rosen-bridge/abstract-extractor@3.0.1
|
|
60
|
+
- @rosen-bridge/scanner-interfaces@0.2.2
|
|
61
|
+
|
|
62
|
+
## 7.0.0
|
|
63
|
+
|
|
64
|
+
### Major Changes
|
|
65
|
+
|
|
66
|
+
- Update AbstractExtractor interface; use `BlockInfo` in `processTransactions` and rename `initializeBoxes` to `initializeData`
|
|
67
|
+
- Update abstract database entity to be general; rename `boxId` columnt to `identifier`
|
|
68
|
+
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- Update dependencies
|
|
72
|
+
- @rosen-bridge/abstract-logger@4.0.0
|
|
73
|
+
- @rosen-bridge/abstract-extractor@3.0.0
|
|
74
|
+
|
|
75
|
+
## 6.3.0
|
|
76
|
+
|
|
77
|
+
### Minor Changes
|
|
78
|
+
|
|
79
|
+
- Move `@rosen-bridge/json-bigint` to dependencies to ensure it's available at runtime
|
|
80
|
+
|
|
81
|
+
## 6.2.2
|
|
82
|
+
|
|
83
|
+
### Patch Changes
|
|
84
|
+
|
|
85
|
+
- Fix package-lock and move typescript and types/node into root
|
|
86
|
+
- Update eslint and plugins:
|
|
87
|
+
- Apply new rules such as sort imports and file name
|
|
88
|
+
- Update dependencies
|
|
89
|
+
- @rosen-bridge/extended-typeorm@1.0.1
|
|
90
|
+
- @rosen-clients/rate-limited-axios@1.1.0
|
|
91
|
+
- @rosen-bridge/rosen-extractor@10.1.1
|
|
92
|
+
- @rosen-bridge/tokens@4.0.1
|
|
93
|
+
- @rosen-bridge/abstract-logger@3.0.1
|
|
94
|
+
- @rosen-bridge/json-bigint@1.1.0
|
|
95
|
+
- @rosen-clients/ergo-explorer@2.1.0
|
|
96
|
+
- @rosen-clients/ergo-node@3.1.0
|
|
97
|
+
- @rosen-bridge/abstract-extractor@2.1.2
|
|
98
|
+
- @rosen-bridge/scanner-interfaces@0.2.1
|
|
99
|
+
|
|
100
|
+
## 6.2.1
|
|
101
|
+
|
|
102
|
+
### Patch Changes
|
|
103
|
+
|
|
104
|
+
- Update dependencies
|
|
105
|
+
- @rosen-bridge/abstract-extractor@2.1.1
|
|
106
|
+
- @rosen-bridge/extended-typeorm@1.0.0
|
|
107
|
+
- @rosen-bridge/abstract-logger@3.0.0
|
|
108
|
+
|
|
109
|
+
## 6.2.0
|
|
110
|
+
|
|
111
|
+
### Minor Changes
|
|
112
|
+
|
|
113
|
+
- Upgrade to Node.js version 22.18.0
|
|
114
|
+
|
|
115
|
+
### Patch Changes
|
|
116
|
+
|
|
117
|
+
- Update dependencies
|
|
118
|
+
- @rosen-bridge/abstract-extractor@2.1.0
|
|
119
|
+
- @rosen-bridge/scanner-interfaces@0.2.0
|
|
120
|
+
|
|
121
|
+
## 6.1.3
|
|
122
|
+
|
|
123
|
+
### Patch Changes
|
|
124
|
+
|
|
125
|
+
- Update package license to MIT
|
|
126
|
+
- Update dependencies
|
|
127
|
+
- @rosen-bridge/abstract-extractor@2.0.3
|
|
128
|
+
- @rosen-bridge/scanner-interfaces@0.1.1
|
|
129
|
+
|
|
130
|
+
## 6.1.2
|
|
131
|
+
|
|
132
|
+
### Patch Changes
|
|
133
|
+
|
|
134
|
+
- Update network clients and ethers and rateLimitedAxios packages
|
|
135
|
+
- Update dependencies
|
|
136
|
+
- @rosen-bridge/abstract-extractor@2.0.2
|
|
137
|
+
|
|
138
|
+
## 6.1.1
|
|
139
|
+
|
|
140
|
+
### Patch Changes
|
|
141
|
+
|
|
142
|
+
- Use rate limiting methods using @rosen-bridge/rate-limited-axios to prevent overwhelming the endpoints
|
|
143
|
+
- Updated dependencies
|
|
144
|
+
- @rosen-bridge/abstract-extractor@2.0.1
|
|
145
|
+
|
|
146
|
+
## 6.1.0
|
|
147
|
+
|
|
148
|
+
### Minor Changes
|
|
149
|
+
|
|
150
|
+
- Unify and move shared interfaces and update all package dependencies
|
|
151
|
+
|
|
152
|
+
### Patch Changes
|
|
153
|
+
|
|
154
|
+
- Updated dependencies
|
|
155
|
+
- @rosen-bridge/abstract-extractor@2.0.0
|
|
156
|
+
|
|
157
|
+
## 6.0.2
|
|
158
|
+
|
|
159
|
+
### Patch Changes
|
|
160
|
+
|
|
161
|
+
- Updated dependencies
|
|
162
|
+
- @rosen-bridge/abstract-extractor@1.0.2
|
|
163
|
+
|
|
164
|
+
## 6.0.1
|
|
165
|
+
|
|
166
|
+
### Patch Changes
|
|
167
|
+
|
|
168
|
+
- Update node version to 20
|
|
169
|
+
- Update logger package
|
|
170
|
+
- Updated dependencies
|
|
171
|
+
- @rosen-bridge/abstract-extractor@1.0.1
|
|
172
|
+
|
|
173
|
+
## 6.0.0
|
|
174
|
+
|
|
175
|
+
### Major Changes
|
|
176
|
+
|
|
177
|
+
- Update database entity and action to extend the abstract class
|
|
178
|
+
|
|
179
|
+
### Minor Changes
|
|
180
|
+
|
|
181
|
+
- Update db action interface to support callbacks
|
|
182
|
+
|
|
183
|
+
### Patch Changes
|
|
184
|
+
|
|
185
|
+
- Updated dependencies
|
|
186
|
+
- @rosen-bridge/abstract-extractor@1.0.0
|
|
187
|
+
|
|
188
|
+
## 5.0.8
|
|
189
|
+
|
|
190
|
+
### Patch Changes
|
|
191
|
+
|
|
192
|
+
- Remove unnecessary properties from abstract extracted data type
|
|
193
|
+
- Updated dependencies
|
|
194
|
+
- @rosen-bridge/abstract-extractor@0.3.1
|
|
195
|
+
|
|
196
|
+
## 5.0.7
|
|
197
|
+
|
|
198
|
+
### Patch Changes
|
|
199
|
+
|
|
200
|
+
- Change processTransaction Block interface to use minimal information
|
|
201
|
+
- Updated dependencies
|
|
202
|
+
- @rosen-bridge/abstract-extractor@0.3.0
|
|
203
|
+
|
|
204
|
+
## 5.0.6
|
|
205
|
+
|
|
206
|
+
### Patch Changes
|
|
207
|
+
|
|
208
|
+
- Remove redundant `getTxBlock` function
|
|
209
|
+
- Updated dependencies
|
|
210
|
+
- @rosen-bridge/abstract-extractor@0.2.0
|
|
211
|
+
|
|
212
|
+
## 5.0.5
|
|
213
|
+
|
|
214
|
+
### Patch Changes
|
|
215
|
+
|
|
216
|
+
- fix storing duplicate boxes
|
|
217
|
+
- Updated dependencies
|
|
218
|
+
- @rosen-bridge/abstract-extractor@0.1.5
|
|
219
|
+
|
|
220
|
+
## 5.0.4
|
|
221
|
+
|
|
222
|
+
### Patch Changes
|
|
223
|
+
|
|
224
|
+
- Updated dependencies
|
|
225
|
+
- @rosen-bridge/abstract-extractor@0.1.4
|
|
226
|
+
|
|
227
|
+
## 5.0.3
|
|
228
|
+
|
|
229
|
+
### Patch Changes
|
|
230
|
+
|
|
231
|
+
- Updated dependencies
|
|
232
|
+
- @rosen-bridge/abstract-extractor@0.1.3
|
|
233
|
+
|
|
234
|
+
## 5.0.2
|
|
235
|
+
|
|
236
|
+
### Patch Changes
|
|
237
|
+
|
|
238
|
+
- Updated dependencies
|
|
239
|
+
- @rosen-bridge/abstract-extractor@0.1.2
|
|
240
|
+
|
|
241
|
+
## 5.0.1
|
|
242
|
+
|
|
243
|
+
### Patch Changes
|
|
244
|
+
|
|
245
|
+
- Fix ErgoNetworkType import
|
|
246
|
+
|
|
247
|
+
## 5.0.0
|
|
248
|
+
|
|
249
|
+
### Major Changes
|
|
250
|
+
|
|
251
|
+
- Use abstract initializable extractor and update initilialization procedure to support both node and expolorer APIs
|
|
252
|
+
|
|
253
|
+
### Patch Changes
|
|
254
|
+
|
|
255
|
+
- Updated dependencies
|
|
256
|
+
- @rosen-bridge/abstract-extractor@0.1.1
|
|
257
|
+
|
|
258
|
+
## 4.0.0
|
|
259
|
+
|
|
260
|
+
### Major Changes
|
|
261
|
+
|
|
262
|
+
- Updated the InitializeBoxes interface to include the block hash. Previously, only block height was used as initialization point.
|
|
263
|
+
|
|
264
|
+
### Patch Changes
|
|
265
|
+
|
|
266
|
+
- Update abstract extractor interface
|
|
267
|
+
- Updated dependencies
|
|
268
|
+
- @rosen-bridge/scanner@4.0.0
|
|
269
|
+
|
|
270
|
+
## 3.3.3
|
|
271
|
+
|
|
272
|
+
### Patch Changes
|
|
273
|
+
|
|
274
|
+
- Updated dependencies
|
|
275
|
+
- @rosen-bridge/scanner@3.2.9
|
|
276
|
+
|
|
277
|
+
## 3.3.2
|
|
278
|
+
|
|
279
|
+
### Patch Changes
|
|
280
|
+
|
|
281
|
+
- Updated dependencies
|
|
282
|
+
- @rosen-bridge/scanner@3.2.8
|
|
283
|
+
|
|
284
|
+
## 3.3.1
|
|
285
|
+
|
|
286
|
+
### Patch Changes
|
|
287
|
+
|
|
288
|
+
- Update typeorm version
|
|
289
|
+
- Updated dependencies
|
|
290
|
+
- @rosen-bridge/scanner@3.2.7
|
|
291
|
+
|
|
292
|
+
## 3.3.0
|
|
293
|
+
|
|
294
|
+
### Minor Changes
|
|
295
|
+
|
|
296
|
+
- Ignore old spent boxes validation in address extractor initialization
|
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Address Extractor
|
|
2
|
+
|
|
3
|
+
### Table of Contents
|
|
4
|
+
|
|
5
|
+
- [Description](#description)
|
|
6
|
+
- [Related Projects](#related-projects)
|
|
7
|
+
- [How to Use the Address Extractor](#how-to-use-the-address-extractor)
|
|
8
|
+
- [Install](#install)
|
|
9
|
+
- [Usage](#usage)
|
|
10
|
+
- [Contributing](#contributing)
|
|
11
|
+
- [License](#license)
|
|
12
|
+
|
|
13
|
+
<a name="headers"/>
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
Data extractors are modules that are integrated within a scanner. They drive the required information from the scanned blocks and store them in their own database. The address extractor is the simplest data extractor that tracks a specific address and stores all boxes belonging to that address. Furthermore, this extractor also can track a list of specific assets within the required address boxes. Currently, the address extractor can only be used to track the ergo addresses.
|
|
18
|
+
|
|
19
|
+
## Related Projects
|
|
20
|
+
|
|
21
|
+
This module is used within the [Scanner](https://github.com/rosen-bridge/scanner) project. The address scanner is currently used in the [Watcher](https://github.com/rosen-bridge/watcher) service to drive the watcher fee boxes and WID box (The watcher box with a specific WID token that is used for watcher authentication).
|
|
22
|
+
|
|
23
|
+
## How to Use the Address Extractor
|
|
24
|
+
|
|
25
|
+
### Install
|
|
26
|
+
|
|
27
|
+
This project is written in node-js using Esnext module and typeorm database. Extractors are not standalone projects and should be used as scanner modules. You can easily install it using npm with the command:
|
|
28
|
+
|
|
29
|
+
```shell
|
|
30
|
+
npm install @rosen-bridge/address-extractor
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Alternatively, you can build and use it manually by cloning the project and running:
|
|
34
|
+
|
|
35
|
+
```shell
|
|
36
|
+
npm install
|
|
37
|
+
npm run build
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Usage
|
|
41
|
+
|
|
42
|
+
At the first step, you need to create a scanner instance; follow the steps [here](https://github.com/rosen-bridge/scanner) to create a running instance of scanner. Then you need to instantiate your address extractor and register it to your scanner:
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
const addressExtractor = new ErgoUTXOExtractor(
|
|
46
|
+
dataSource,
|
|
47
|
+
<extractor_name>,
|
|
48
|
+
<network_type>,
|
|
49
|
+
<address>,
|
|
50
|
+
OPTIONAL<Array<asset_id>>
|
|
51
|
+
)
|
|
52
|
+
scanner.registerExtractor(addressExtractor)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Contributing
|
|
56
|
+
|
|
57
|
+
TBD
|
|
58
|
+
|
|
59
|
+
## License
|
|
60
|
+
|
|
61
|
+
TBD
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AbstractErgoBoxAction } from '@rosen-bridge/abstract-extractor';
|
|
2
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
|
+
import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
|
|
5
|
+
import { BoxEntity } from '../entities/boxEntity';
|
|
6
|
+
import { ExtractedBox } from '../interfaces/types';
|
|
7
|
+
export declare class BoxEntityAction extends AbstractErgoBoxAction<ExtractedBox, BoxEntity> {
|
|
8
|
+
constructor(dataSource: DataSource, logger?: AbstractLogger);
|
|
9
|
+
/**
|
|
10
|
+
* create the box entity from extracted data and block information
|
|
11
|
+
*/
|
|
12
|
+
createEntity: (boxes: ExtractedBox[], block: BlockInfo, extractor: string) => Omit<BoxEntity, "id">[];
|
|
13
|
+
/**
|
|
14
|
+
* convert the database entity back to raw data
|
|
15
|
+
*/
|
|
16
|
+
convertEntityToData: (entities: BoxEntity[]) => ExtractedBox[];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=boxAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boxAction.d.ts","sourceRoot":"","sources":["../../lib/actions/boxAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,qBAAa,eAAgB,SAAQ,qBAAqB,CACxD,YAAY,EACZ,SAAS,CACV;gBACa,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc;IAI3D;;OAEG;IACH,YAAY,GACV,OAAO,YAAY,EAAE,EACrB,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CASxB;IAEF;;OAEG;IACH,mBAAmB,GAAI,UAAU,SAAS,EAAE,KAAG,YAAY,EAAE,CAI3D;CACH"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { pick } from 'lodash-es';
|
|
2
|
+
import { AbstractErgoBoxAction } from '@rosen-bridge/abstract-extractor';
|
|
3
|
+
import { BoxEntity } from '../entities/boxEntity';
|
|
4
|
+
export class BoxEntityAction extends AbstractErgoBoxAction {
|
|
5
|
+
constructor(dataSource, logger) {
|
|
6
|
+
super(dataSource, BoxEntity, logger);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* create the box entity from extracted data and block information
|
|
10
|
+
*/
|
|
11
|
+
createEntity = (boxes, block, extractor) => {
|
|
12
|
+
return boxes.map((box) => ({
|
|
13
|
+
address: box.address,
|
|
14
|
+
identifier: box.identifier,
|
|
15
|
+
block: block.hash,
|
|
16
|
+
height: block.height,
|
|
17
|
+
serialized: box.serialized,
|
|
18
|
+
extractor: extractor,
|
|
19
|
+
}));
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* convert the database entity back to raw data
|
|
23
|
+
*/
|
|
24
|
+
convertEntityToData = (entities) => {
|
|
25
|
+
return entities.map((data) => pick(data, ['identifier', 'address', 'serialized']));
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94QWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvYm94QWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE1BQU0sT0FBTyxlQUFnQixTQUFRLHFCQUdwQztJQUNDLFlBQVksVUFBc0IsRUFBRSxNQUF1QjtRQUN6RCxLQUFLLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLEdBQUcsQ0FDYixLQUFxQixFQUNyQixLQUFnQixFQUNoQixTQUFpQixFQUNRLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDMUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2pCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDMUIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILG1CQUFtQixHQUFHLENBQUMsUUFBcUIsRUFBa0IsRUFBRTtRQUM5RCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RFcmdvQm94QWN0aW9uIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1leHRyYWN0b3InO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcbmltcG9ydCB7IEJsb2NrSW5mbyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQm94RW50aXR5IH0gZnJvbSAnLi4vZW50aXRpZXMvYm94RW50aXR5JztcbmltcG9ydCB7IEV4dHJhY3RlZEJveCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQm94RW50aXR5QWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RFcmdvQm94QWN0aW9uPFxuICBFeHRyYWN0ZWRCb3gsXG4gIEJveEVudGl0eVxuPiB7XG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIoZGF0YVNvdXJjZSwgQm94RW50aXR5LCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgYm94IGVudGl0eSBmcm9tIGV4dHJhY3RlZCBkYXRhIGFuZCBibG9jayBpbmZvcm1hdGlvblxuICAgKi9cbiAgY3JlYXRlRW50aXR5ID0gKFxuICAgIGJveGVzOiBFeHRyYWN0ZWRCb3hbXSxcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBPbWl0PEJveEVudGl0eSwgJ2lkJz5bXSA9PiB7XG4gICAgcmV0dXJuIGJveGVzLm1hcCgoYm94KSA9PiAoe1xuICAgICAgYWRkcmVzczogYm94LmFkZHJlc3MsXG4gICAgICBpZGVudGlmaWVyOiBib3guaWRlbnRpZmllcixcbiAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgaGVpZ2h0OiBibG9jay5oZWlnaHQsXG4gICAgICBzZXJpYWxpemVkOiBib3guc2VyaWFsaXplZCxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pKTtcbiAgfTtcblxuICAvKipcbiAgICogY29udmVydCB0aGUgZGF0YWJhc2UgZW50aXR5IGJhY2sgdG8gcmF3IGRhdGFcbiAgICovXG4gIGNvbnZlcnRFbnRpdHlUb0RhdGEgPSAoZW50aXRpZXM6IEJveEVudGl0eVtdKTogRXh0cmFjdGVkQm94W10gPT4ge1xuICAgIHJldHVybiBlbnRpdGllcy5tYXAoKGRhdGEpID0+XG4gICAgICBwaWNrKGRhdGEsIFsnaWRlbnRpZmllcicsICdhZGRyZXNzJywgJ3NlcmlhbGl6ZWQnXSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boxEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/boxEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,qBACa,SAAU,SAAQ,qBAAqB;IAElD,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { AbstractErgoBoxEntity } from '@rosen-bridge/abstract-extractor';
|
|
11
|
+
import { Column, Entity } from '@rosen-bridge/extended-typeorm';
|
|
12
|
+
let BoxEntity = class BoxEntity extends AbstractErgoBoxEntity {
|
|
13
|
+
address;
|
|
14
|
+
};
|
|
15
|
+
__decorate([
|
|
16
|
+
Column({ type: 'varchar' }),
|
|
17
|
+
__metadata("design:type", String)
|
|
18
|
+
], BoxEntity.prototype, "address", void 0);
|
|
19
|
+
BoxEntity = __decorate([
|
|
20
|
+
Entity('box_entity')
|
|
21
|
+
], BoxEntity);
|
|
22
|
+
export { BoxEntity };
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94RW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2VudGl0aWVzL2JveEVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3pELElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBVSxTQUFRLHFCQUFxQjtJQUVsRCxPQUFPLENBQVM7Q0FDakIsQ0FBQTtBQURDO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzswQ0FDWjtBQUZMLFNBQVM7SUFEckIsTUFBTSxDQUFDLFlBQVksQ0FBQztHQUNSLFNBQVMsQ0FHckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdEVyZ29Cb3hFbnRpdHkgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBDb2x1bW4sIEVudGl0eSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5cbkBFbnRpdHkoJ2JveF9lbnRpdHknKVxuZXhwb3J0IGNsYXNzIEJveEVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0JveEVudGl0eSB7XG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgYWRkcmVzczogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as ergoLib from 'ergo-lib-wasm-nodejs';
|
|
2
|
+
import { AbstractErgoBoxExtractor } from '@rosen-bridge/abstract-extractor';
|
|
3
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
4
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
5
|
+
import { OutputBox, ErgoNetworkType } from '@rosen-bridge/scanner-interfaces';
|
|
6
|
+
import { BoxEntityAction } from '../actions/boxAction';
|
|
7
|
+
import { BoxEntity } from '../entities/boxEntity';
|
|
8
|
+
import { ExtractedBox } from '../interfaces/types';
|
|
9
|
+
export declare class ErgoUTXOExtractor extends AbstractErgoBoxExtractor<ExtractedBox, BoxEntity> {
|
|
10
|
+
readonly actions: BoxEntityAction;
|
|
11
|
+
private readonly id;
|
|
12
|
+
private readonly networkType;
|
|
13
|
+
private readonly ergoTree?;
|
|
14
|
+
private readonly tokens;
|
|
15
|
+
constructor(dataSource: DataSource, id: string, networkType: ergoLib.NetworkPrefix, url: string, type: ErgoNetworkType, address: string, tokens?: Array<string>, logger?: AbstractLogger, initialize?: boolean);
|
|
16
|
+
/**
|
|
17
|
+
* get Id for current extractor
|
|
18
|
+
*/
|
|
19
|
+
getId: () => string;
|
|
20
|
+
/**
|
|
21
|
+
* check proper data format in the box
|
|
22
|
+
* @param box
|
|
23
|
+
* @return true if the box has the required data and false otherwise
|
|
24
|
+
*/
|
|
25
|
+
hasBoxData: (box: OutputBox) => boolean;
|
|
26
|
+
/**
|
|
27
|
+
* extract box data to proper format (not including spending information)
|
|
28
|
+
* @param box
|
|
29
|
+
* @return extracted data in proper format
|
|
30
|
+
*/
|
|
31
|
+
extractBoxData: (box: OutputBox) => ExtractedBox | undefined;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ergoUtxoExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ergoUtxoExtractor.d.ts","sourceRoot":"","sources":["../../lib/extractor/ergoUtxoExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EAEzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,qBAAa,iBAAkB,SAAQ,wBAAwB,CAC7D,YAAY,EACZ,SAAS,CACV;IACC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAGrC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,OAAO,CAAC,aAAa,EAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,MAAM,CAAC,EAAE,cAAc,EACvB,UAAU,UAAO;IAenB;;OAEG;IACH,KAAK,eAAsB;IAE3B;;;;OAIG;IACH,UAAU,GAAI,KAAK,SAAS,KAAG,OAAO,CAKpC;IAEF;;;;OAIG;IACH,cAAc,GAAI,KAAK,SAAS,KAAG,YAAY,GAAG,SAAS,CAazD;CACH"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import * as ergoLib from 'ergo-lib-wasm-nodejs';
|
|
3
|
+
import { AbstractErgoBoxExtractor, boxHasToken, } from '@rosen-bridge/abstract-extractor';
|
|
4
|
+
import { BoxEntityAction } from '../actions/boxAction';
|
|
5
|
+
import { JsonBI } from '../utils';
|
|
6
|
+
export class ErgoUTXOExtractor extends AbstractErgoBoxExtractor {
|
|
7
|
+
actions;
|
|
8
|
+
id;
|
|
9
|
+
networkType;
|
|
10
|
+
ergoTree;
|
|
11
|
+
tokens;
|
|
12
|
+
constructor(dataSource, id, networkType, url, type, address, tokens, logger, initialize = true) {
|
|
13
|
+
super({ type, url, address, active: initialize }, logger);
|
|
14
|
+
this.id = id;
|
|
15
|
+
this.networkType = networkType;
|
|
16
|
+
this.ergoTree = address
|
|
17
|
+
? ergoLib.Address.from_base58(address).to_ergo_tree().to_base16_bytes()
|
|
18
|
+
: undefined;
|
|
19
|
+
this.tokens = tokens ? tokens : [];
|
|
20
|
+
this.actions = new BoxEntityAction(dataSource, this.logger.child('BoxEntityAction'));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* get Id for current extractor
|
|
24
|
+
*/
|
|
25
|
+
getId = () => `${this.id}`;
|
|
26
|
+
/**
|
|
27
|
+
* check proper data format in the box
|
|
28
|
+
* @param box
|
|
29
|
+
* @return true if the box has the required data and false otherwise
|
|
30
|
+
*/
|
|
31
|
+
hasBoxData = (box) => {
|
|
32
|
+
return ((!this.ergoTree || box.ergoTree == this.ergoTree) &&
|
|
33
|
+
(this.tokens.length == 0 || boxHasToken(box, this.tokens)));
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* extract box data to proper format (not including spending information)
|
|
37
|
+
* @param box
|
|
38
|
+
* @return extracted data in proper format
|
|
39
|
+
*/
|
|
40
|
+
extractBoxData = (box) => {
|
|
41
|
+
const ergoBox = ergoLib.ErgoBox.from_json(JsonBI.stringify(box));
|
|
42
|
+
return {
|
|
43
|
+
identifier: ergoBox.box_id().to_str(),
|
|
44
|
+
address: ergoLib.Address.recreate_from_ergo_tree(ergoLib.ErgoTree.from_base16_bytes(ergoBox.ergo_tree().to_base16_bytes())).to_base58(this.networkType),
|
|
45
|
+
serialized: Buffer.from(ergoBox.sigma_serialize_bytes()).toString('base64'),
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJnb1V0eG9FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZXh0cmFjdG9yL2VyZ29VdHhvRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLFdBQVcsR0FDWixNQUFNLGtDQUFrQyxDQUFDO0FBSzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSx3QkFHdEM7SUFDVSxPQUFPLENBQWtCO0lBQ2pCLEVBQUUsQ0FBUztJQUNYLFdBQVcsQ0FBd0I7SUFDbkMsUUFBUSxDQUFVO0lBQ2xCLE1BQU0sQ0FBZ0I7SUFFdkMsWUFDRSxVQUFzQixFQUN0QixFQUFVLEVBQ1YsV0FBa0MsRUFDbEMsR0FBVyxFQUNYLElBQXFCLEVBQ3JCLE9BQWUsRUFDZixNQUFzQixFQUN0QixNQUF1QixFQUN2QixVQUFVLEdBQUcsSUFBSTtRQUVqQixLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU87WUFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLGVBQWUsRUFBRTtZQUN2RSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQ2hDLFVBQVUsRUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBRTNCOzs7O09BSUc7SUFDSCxVQUFVLEdBQUcsQ0FBQyxHQUFjLEVBQVcsRUFBRTtRQUN2QyxPQUFPLENBQ0wsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzNELENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsY0FBYyxHQUFHLENBQUMsR0FBYyxFQUE0QixFQUFFO1FBQzVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxPQUFPO1lBQ0wsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDckMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQzlDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQ2hDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FDdEMsQ0FDRixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzdCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUMvRCxRQUFRLENBQ1Q7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0ICogYXMgZXJnb0xpYiBmcm9tICdlcmdvLWxpYi13YXNtLW5vZGVqcyc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0RXJnb0JveEV4dHJhY3RvcixcbiAgYm94SGFzVG9rZW4sXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBPdXRwdXRCb3gsIEVyZ29OZXR3b3JrVHlwZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQm94RW50aXR5QWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9ib3hBY3Rpb24nO1xuaW1wb3J0IHsgQm94RW50aXR5IH0gZnJvbSAnLi4vZW50aXRpZXMvYm94RW50aXR5JztcbmltcG9ydCB7IEV4dHJhY3RlZEJveCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHlwZXMnO1xuaW1wb3J0IHsgSnNvbkJJIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgRXJnb1VUWE9FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdEVyZ29Cb3hFeHRyYWN0b3I8XG4gIEV4dHJhY3RlZEJveCxcbiAgQm94RW50aXR5XG4+IHtcbiAgcmVhZG9ubHkgYWN0aW9uczogQm94RW50aXR5QWN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya1R5cGU6IGVyZ29MaWIuTmV0d29ya1ByZWZpeDtcbiAgcHJpdmF0ZSByZWFkb25seSBlcmdvVHJlZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlbnM6IEFycmF5PHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICBpZDogc3RyaW5nLFxuICAgIG5ldHdvcmtUeXBlOiBlcmdvTGliLk5ldHdvcmtQcmVmaXgsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdHlwZTogRXJnb05ldHdvcmtUeXBlLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICB0b2tlbnM/OiBBcnJheTxzdHJpbmc+LFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyLFxuICAgIGluaXRpYWxpemUgPSB0cnVlLFxuICApIHtcbiAgICBzdXBlcih7IHR5cGUsIHVybCwgYWRkcmVzcywgYWN0aXZlOiBpbml0aWFsaXplIH0sIGxvZ2dlcik7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMubmV0d29ya1R5cGUgPSBuZXR3b3JrVHlwZTtcbiAgICB0aGlzLmVyZ29UcmVlID0gYWRkcmVzc1xuICAgICAgPyBlcmdvTGliLkFkZHJlc3MuZnJvbV9iYXNlNTgoYWRkcmVzcykudG9fZXJnb190cmVlKCkudG9fYmFzZTE2X2J5dGVzKClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zID8gdG9rZW5zIDogW107XG4gICAgdGhpcy5hY3Rpb25zID0gbmV3IEJveEVudGl0eUFjdGlvbihcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgICB0aGlzLmxvZ2dlci5jaGlsZCgnQm94RW50aXR5QWN0aW9uJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+IGAke3RoaXMuaWR9YDtcblxuICAvKipcbiAgICogY2hlY2sgcHJvcGVyIGRhdGEgZm9ybWF0IGluIHRoZSBib3hcbiAgICogQHBhcmFtIGJveFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGJveCBoYXMgdGhlIHJlcXVpcmVkIGRhdGEgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzQm94RGF0YSA9IChib3g6IE91dHB1dEJveCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAoIXRoaXMuZXJnb1RyZWUgfHwgYm94LmVyZ29UcmVlID09IHRoaXMuZXJnb1RyZWUpICYmXG4gICAgICAodGhpcy50b2tlbnMubGVuZ3RoID09IDAgfHwgYm94SGFzVG9rZW4oYm94LCB0aGlzLnRva2VucykpXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogZXh0cmFjdCBib3ggZGF0YSB0byBwcm9wZXIgZm9ybWF0IChub3QgaW5jbHVkaW5nIHNwZW5kaW5nIGluZm9ybWF0aW9uKVxuICAgKiBAcGFyYW0gYm94XG4gICAqIEByZXR1cm4gZXh0cmFjdGVkIGRhdGEgaW4gcHJvcGVyIGZvcm1hdFxuICAgKi9cbiAgZXh0cmFjdEJveERhdGEgPSAoYm94OiBPdXRwdXRCb3gpOiBFeHRyYWN0ZWRCb3ggfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGVyZ29Cb3ggPSBlcmdvTGliLkVyZ29Cb3guZnJvbV9qc29uKEpzb25CSS5zdHJpbmdpZnkoYm94KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkZW50aWZpZXI6IGVyZ29Cb3guYm94X2lkKCkudG9fc3RyKCksXG4gICAgICBhZGRyZXNzOiBlcmdvTGliLkFkZHJlc3MucmVjcmVhdGVfZnJvbV9lcmdvX3RyZWUoXG4gICAgICAgIGVyZ29MaWIuRXJnb1RyZWUuZnJvbV9iYXNlMTZfYnl0ZXMoXG4gICAgICAgICAgZXJnb0JveC5lcmdvX3RyZWUoKS50b19iYXNlMTZfYnl0ZXMoKSxcbiAgICAgICAgKSxcbiAgICAgICkudG9fYmFzZTU4KHRoaXMubmV0d29ya1R5cGUpLFxuICAgICAgc2VyaWFsaXplZDogQnVmZmVyLmZyb20oZXJnb0JveC5zaWdtYV9zZXJpYWxpemVfYnl0ZXMoKSkudG9TdHJpbmcoXG4gICAgICAgICdiYXNlNjQnLFxuICAgICAgKSxcbiAgICB9O1xuICB9O1xufVxuIl19
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ErgoUTXOExtractor } from './extractor/ergoUtxoExtractor';
|
|
2
|
+
export { BoxEntity } from './entities/boxEntity';
|
|
3
|
+
export { migrations } from './migrations/index';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEVyZ29VVFhPRXh0cmFjdG9yIH0gZnJvbSAnLi9leHRyYWN0b3IvZXJnb1V0eG9FeHRyYWN0b3InO1xuZXhwb3J0IHsgQm94RW50aXR5IH0gZnJvbSAnLi9lbnRpdGllcy9ib3hFbnRpdHknO1xuZXhwb3J0IHsgbWlncmF0aW9ucyB9IGZyb20gJy4vbWlncmF0aW9ucy9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/interfaces/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW50ZXJmYWNlcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRCb3gge1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgc2VyaWFsaXplZDogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { migration1688558553044 } from './postgres/1688558553044-migration';
|
|
2
|
+
import { migration1688555566662 } from './sqlite/1688555566662-migration';
|
|
3
|
+
export declare const migrations: {
|
|
4
|
+
sqlite: (typeof migration1688555566662)[];
|
|
5
|
+
postgres: (typeof migration1688558553044)[];
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAI5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAK1E,eAAO,MAAM,UAAU;;;CAatB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { migration1688558553044 } from './postgres/1688558553044-migration';
|
|
2
|
+
import { migration1689151869889 } from './postgres/1689151869889-migration';
|
|
3
|
+
import { migration1737785465594 } from './postgres/1737785465594-migration';
|
|
4
|
+
import { Migration1758958610937 } from './postgres/1758958610937-migration';
|
|
5
|
+
import { migration1688555566662 } from './sqlite/1688555566662-migration';
|
|
6
|
+
import { migration1689143753142 } from './sqlite/1689143753142-migration';
|
|
7
|
+
import { migration1737532655167 } from './sqlite/1737532655167-migration';
|
|
8
|
+
import { Migration1758049849122 } from './sqlite/1758049849122-migration';
|
|
9
|
+
export const migrations = {
|
|
10
|
+
sqlite: [
|
|
11
|
+
migration1688555566662,
|
|
12
|
+
migration1689143753142,
|
|
13
|
+
migration1737532655167,
|
|
14
|
+
Migration1758049849122,
|
|
15
|
+
],
|
|
16
|
+
postgres: [
|
|
17
|
+
migration1688558553044,
|
|
18
|
+
migration1689151869889,
|
|
19
|
+
migration1737785465594,
|
|
20
|
+
Migration1758958610937,
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbWlncmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsTUFBTSxFQUFFO1FBQ04sc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIsc0JBQXNCO0tBQ3ZCO0lBQ0QsUUFBUSxFQUFFO1FBQ1Isc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIsc0JBQXNCO0tBQ3ZCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1pZ3JhdGlvbjE2ODg1NTg1NTMwNDQgfSBmcm9tICcuL3Bvc3RncmVzLzE2ODg1NTg1NTMwNDQtbWlncmF0aW9uJztcbmltcG9ydCB7IG1pZ3JhdGlvbjE2ODkxNTE4Njk4ODkgfSBmcm9tICcuL3Bvc3RncmVzLzE2ODkxNTE4Njk4ODktbWlncmF0aW9uJztcbmltcG9ydCB7IG1pZ3JhdGlvbjE3Mzc3ODU0NjU1OTQgfSBmcm9tICcuL3Bvc3RncmVzLzE3Mzc3ODU0NjU1OTQtbWlncmF0aW9uJztcbmltcG9ydCB7IE1pZ3JhdGlvbjE3NTg5NTg2MTA5MzcgfSBmcm9tICcuL3Bvc3RncmVzLzE3NTg5NTg2MTA5MzctbWlncmF0aW9uJztcbmltcG9ydCB7IG1pZ3JhdGlvbjE2ODg1NTU1NjY2NjIgfSBmcm9tICcuL3NxbGl0ZS8xNjg4NTU1NTY2NjYyLW1pZ3JhdGlvbic7XG5pbXBvcnQgeyBtaWdyYXRpb24xNjg5MTQzNzUzMTQyIH0gZnJvbSAnLi9zcWxpdGUvMTY4OTE0Mzc1MzE0Mi1taWdyYXRpb24nO1xuaW1wb3J0IHsgbWlncmF0aW9uMTczNzUzMjY1NTE2NyB9IGZyb20gJy4vc3FsaXRlLzE3Mzc1MzI2NTUxNjctbWlncmF0aW9uJztcbmltcG9ydCB7IE1pZ3JhdGlvbjE3NTgwNDk4NDkxMjIgfSBmcm9tICcuL3NxbGl0ZS8xNzU4MDQ5ODQ5MTIyLW1pZ3JhdGlvbic7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRpb25zID0ge1xuICBzcWxpdGU6IFtcbiAgICBtaWdyYXRpb24xNjg4NTU1NTY2NjYyLFxuICAgIG1pZ3JhdGlvbjE2ODkxNDM3NTMxNDIsXG4gICAgbWlncmF0aW9uMTczNzUzMjY1NTE2NyxcbiAgICBNaWdyYXRpb24xNzU4MDQ5ODQ5MTIyLFxuICBdLFxuICBwb3N0Z3JlczogW1xuICAgIG1pZ3JhdGlvbjE2ODg1NTg1NTMwNDQsXG4gICAgbWlncmF0aW9uMTY4OTE1MTg2OTg4OSxcbiAgICBtaWdyYXRpb24xNzM3Nzg1NDY1NTk0LFxuICAgIE1pZ3JhdGlvbjE3NTg5NTg2MTA5MzcsXG4gIF0sXG59O1xuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from '@rosen-bridge/extended-typeorm';
|
|
2
|
+
export declare class migration1688558553044 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=1688558553044-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1688558553044-migration.d.ts","sourceRoot":"","sources":["../../../lib/migrations/postgres/1688558553044-migration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACZ,MAAM,gCAAgC,CAAC;AAExC,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,IAAI,SAA4B;IAEnB,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class migration1688558553044 {
|
|
2
|
+
name = 'migration1688558553044';
|
|
3
|
+
async up(queryRunner) {
|
|
4
|
+
await queryRunner.query(`
|
|
5
|
+
CREATE TABLE "box_entity" (
|
|
6
|
+
"id" SERIAL NOT NULL,
|
|
7
|
+
"address" character varying NOT NULL,
|
|
8
|
+
"boxId" character varying NOT NULL,
|
|
9
|
+
"createBlock" character varying NOT NULL,
|
|
10
|
+
"creationHeight" integer NOT NULL,
|
|
11
|
+
"serialized" character varying NOT NULL,
|
|
12
|
+
"spendBlock" text,
|
|
13
|
+
"extractor" character varying NOT NULL,
|
|
14
|
+
CONSTRAINT "PK_b3b74bea44218399800c0136bb6" PRIMARY KEY ("id")
|
|
15
|
+
)
|
|
16
|
+
`);
|
|
17
|
+
}
|
|
18
|
+
async down(queryRunner) {
|
|
19
|
+
await queryRunner.query(`
|
|
20
|
+
DROP TABLE "box_entity"
|
|
21
|
+
`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY4ODU1ODU1MzA0NC1taWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbWlncmF0aW9ucy9wb3N0Z3Jlcy8xNjg4NTU4NTUzMDQ0LW1pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLElBQUksR0FBRyx3QkFBd0IsQ0FBQztJQUV6QixLQUFLLENBQUMsRUFBRSxDQUFDLFdBQXdCO1FBQ3RDLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQzs7Ozs7Ozs7Ozs7O1NBWW5CLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQXdCO1FBQ3hDLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQzs7U0FFbkIsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTWlncmF0aW9uSW50ZXJmYWNlLFxuICBRdWVyeVJ1bm5lcixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcblxuZXhwb3J0IGNsYXNzIG1pZ3JhdGlvbjE2ODg1NTg1NTMwNDQgaW1wbGVtZW50cyBNaWdyYXRpb25JbnRlcmZhY2Uge1xuICBuYW1lID0gJ21pZ3JhdGlvbjE2ODg1NTg1NTMwNDQnO1xuXG4gIHB1YmxpYyBhc3luYyB1cChxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgXCJib3hfZW50aXR5XCIgKFxuICAgICAgICAgICAgICAgIFwiaWRcIiBTRVJJQUwgTk9UIE5VTEwsXG4gICAgICAgICAgICAgICAgXCJhZGRyZXNzXCIgY2hhcmFjdGVyIHZhcnlpbmcgTk9UIE5VTEwsXG4gICAgICAgICAgICAgICAgXCJib3hJZFwiIGNoYXJhY3RlciB2YXJ5aW5nIE5PVCBOVUxMLFxuICAgICAgICAgICAgICAgIFwiY3JlYXRlQmxvY2tcIiBjaGFyYWN0ZXIgdmFyeWluZyBOT1QgTlVMTCxcbiAgICAgICAgICAgICAgICBcImNyZWF0aW9uSGVpZ2h0XCIgaW50ZWdlciBOT1QgTlVMTCxcbiAgICAgICAgICAgICAgICBcInNlcmlhbGl6ZWRcIiBjaGFyYWN0ZXIgdmFyeWluZyBOT1QgTlVMTCxcbiAgICAgICAgICAgICAgICBcInNwZW5kQmxvY2tcIiB0ZXh0LFxuICAgICAgICAgICAgICAgIFwiZXh0cmFjdG9yXCIgY2hhcmFjdGVyIHZhcnlpbmcgTk9UIE5VTEwsXG4gICAgICAgICAgICAgICAgQ09OU1RSQUlOVCBcIlBLX2IzYjc0YmVhNDQyMTgzOTk4MDBjMDEzNmJiNlwiIFBSSU1BUlkgS0VZIChcImlkXCIpXG4gICAgICAgICAgICApXG4gICAgICAgIGApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRvd24ocXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIucXVlcnkoYFxuICAgICAgICAgICAgRFJPUCBUQUJMRSBcImJveF9lbnRpdHlcIlxuICAgICAgICBgKTtcbiAgfVxufVxuIl19
|