@my-packages-changeit/fraud-extractor 3.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 +300 -0
- package/README.md +39 -0
- package/dist/actions/fraudAction.d.ts +24 -0
- package/dist/actions/fraudAction.d.ts.map +1 -0
- package/dist/actions/fraudAction.js +34 -0
- package/dist/entities/fraudEntity.d.ts +8 -0
- package/dist/entities/fraudEntity.d.ts.map +1 -0
- package/dist/entities/fraudEntity.js +38 -0
- package/dist/extractor/fraudExtractor.d.ts +39 -0
- package/dist/extractor/fraudExtractor.d.ts.map +1 -0
- package/dist/extractor/fraudExtractor.js +81 -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 +11 -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 +9 -0
- package/dist/migrations/postgres/1693308311652-migration.d.ts +7 -0
- package/dist/migrations/postgres/1693308311652-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1693308311652-migration.js +29 -0
- package/dist/migrations/postgres/1766229066209-migration.d.ts +7 -0
- package/dist/migrations/postgres/1766229066209-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1766229066209-migration.js +52 -0
- package/dist/migrations/sqlite/1693122371215-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1693122371215-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1693122371215-migration.js +28 -0
- package/dist/migrations/sqlite/1766226220592-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1766226220592-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1766226220592-migration.js +114 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +42 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# @rosen-bridge/fraud-extractor
|
|
2
|
+
|
|
3
|
+
## 3.0.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Update dependencies
|
|
8
|
+
- @rosen-bridge/abstract-extractor@3.2.3
|
|
9
|
+
|
|
10
|
+
## 3.0.7
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Update dependencies
|
|
15
|
+
- @rosen-bridge/abstract-extractor@3.2.2
|
|
16
|
+
|
|
17
|
+
## 3.0.6
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Update dependencies
|
|
22
|
+
- @rosen-bridge/abstract-extractor@3.2.1
|
|
23
|
+
|
|
24
|
+
## 3.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
|
+
## 3.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
|
+
## 3.0.3
|
|
41
|
+
|
|
42
|
+
### Patch Changes
|
|
43
|
+
|
|
44
|
+
- Update dependencies
|
|
45
|
+
- @rosen-bridge/abstract-extractor@3.1.1
|
|
46
|
+
|
|
47
|
+
## 3.0.2
|
|
48
|
+
|
|
49
|
+
### Patch Changes
|
|
50
|
+
|
|
51
|
+
- Update dependencies
|
|
52
|
+
- @rosen-bridge/abstract-extractor@3.1.0
|
|
53
|
+
|
|
54
|
+
## 3.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
|
+
## 3.0.0
|
|
63
|
+
|
|
64
|
+
### Major Changes
|
|
65
|
+
|
|
66
|
+
- Refactor fraud extractor to extend AbstractErgoBoxExtractor
|
|
67
|
+
- Update AbstractExtractor interface; use `BlockInfo` in `processTransactions` and rename `initializeBoxes` to `initializeData`
|
|
68
|
+
|
|
69
|
+
### Minor Changes
|
|
70
|
+
|
|
71
|
+
- Update AbstractExtractor interface; add `createUsedBlocksQuery` method that returns the query for used blocks
|
|
72
|
+
|
|
73
|
+
### Patch Changes
|
|
74
|
+
|
|
75
|
+
- Update dependencies
|
|
76
|
+
- @rosen-bridge/abstract-logger@4.0.0
|
|
77
|
+
- @rosen-bridge/abstract-extractor@3.0.0
|
|
78
|
+
|
|
79
|
+
## 2.2.3
|
|
80
|
+
|
|
81
|
+
### Patch Changes
|
|
82
|
+
|
|
83
|
+
- Fixed type definitions in entities based migrations
|
|
84
|
+
|
|
85
|
+
## 2.2.2
|
|
86
|
+
|
|
87
|
+
### Patch Changes
|
|
88
|
+
|
|
89
|
+
- Fix package-lock and move typescript and types/node into root
|
|
90
|
+
- Update eslint and plugins:
|
|
91
|
+
- Apply new rules such as sort imports and file name
|
|
92
|
+
- Update dependencies
|
|
93
|
+
- @rosen-bridge/extended-typeorm@1.0.1
|
|
94
|
+
- @rosen-clients/rate-limited-axios@1.1.0
|
|
95
|
+
- @rosen-bridge/rosen-extractor@10.1.1
|
|
96
|
+
- @rosen-bridge/tokens@4.0.1
|
|
97
|
+
- @rosen-bridge/abstract-logger@3.0.1
|
|
98
|
+
- @rosen-bridge/json-bigint@1.1.0
|
|
99
|
+
- @rosen-clients/ergo-explorer@2.1.0
|
|
100
|
+
- @rosen-clients/ergo-node@3.1.0
|
|
101
|
+
- @rosen-bridge/abstract-extractor@2.1.2
|
|
102
|
+
- @rosen-bridge/scanner-interfaces@0.2.1
|
|
103
|
+
|
|
104
|
+
## 2.2.1
|
|
105
|
+
|
|
106
|
+
### Patch Changes
|
|
107
|
+
|
|
108
|
+
- Update dependencies
|
|
109
|
+
- @rosen-bridge/abstract-extractor@2.1.1
|
|
110
|
+
- @rosen-bridge/extended-typeorm@1.0.0
|
|
111
|
+
- @rosen-bridge/json-bigint@1.0.0
|
|
112
|
+
- @rosen-bridge/abstract-logger@3.0.0
|
|
113
|
+
- @rosen-clients/ergo-explorer@2.0.0
|
|
114
|
+
|
|
115
|
+
## 2.2.0
|
|
116
|
+
|
|
117
|
+
### Minor Changes
|
|
118
|
+
|
|
119
|
+
- Upgrade to Node.js version 22.18.0
|
|
120
|
+
|
|
121
|
+
### Patch Changes
|
|
122
|
+
|
|
123
|
+
- Update dependencies
|
|
124
|
+
- @rosen-bridge/abstract-extractor@2.1.0
|
|
125
|
+
- @rosen-bridge/scanner-interfaces@0.2.0
|
|
126
|
+
|
|
127
|
+
## 2.1.3
|
|
128
|
+
|
|
129
|
+
### Patch Changes
|
|
130
|
+
|
|
131
|
+
- Update package license to MIT
|
|
132
|
+
- Update dependencies
|
|
133
|
+
- @rosen-bridge/abstract-extractor@2.0.3
|
|
134
|
+
- @rosen-bridge/scanner-interfaces@0.1.1
|
|
135
|
+
|
|
136
|
+
## 2.1.2
|
|
137
|
+
|
|
138
|
+
### Patch Changes
|
|
139
|
+
|
|
140
|
+
- Update network clients and ethers and rateLimitedAxios packages
|
|
141
|
+
- Update dependencies
|
|
142
|
+
- @rosen-bridge/abstract-extractor@2.0.2
|
|
143
|
+
|
|
144
|
+
## 2.1.1
|
|
145
|
+
|
|
146
|
+
### Patch Changes
|
|
147
|
+
|
|
148
|
+
- Use rate limiting methods using @rosen-bridge/rate-limited-axios to prevent overwhelming the endpoints
|
|
149
|
+
- Updated dependencies
|
|
150
|
+
- @rosen-bridge/abstract-extractor@2.0.1
|
|
151
|
+
|
|
152
|
+
## 2.1.0
|
|
153
|
+
|
|
154
|
+
### Minor Changes
|
|
155
|
+
|
|
156
|
+
- Unify and move shared interfaces and update all package dependencies
|
|
157
|
+
|
|
158
|
+
### Patch Changes
|
|
159
|
+
|
|
160
|
+
- Updated dependencies
|
|
161
|
+
- @rosen-bridge/abstract-extractor@2.0.0
|
|
162
|
+
|
|
163
|
+
## 2.0.13
|
|
164
|
+
|
|
165
|
+
### Patch Changes
|
|
166
|
+
|
|
167
|
+
- Updated dependencies
|
|
168
|
+
- @rosen-bridge/scanner@5.1.0
|
|
169
|
+
- @rosen-bridge/abstract-extractor@1.0.2
|
|
170
|
+
|
|
171
|
+
## 2.0.12
|
|
172
|
+
|
|
173
|
+
### Patch Changes
|
|
174
|
+
|
|
175
|
+
- Update node version to 20
|
|
176
|
+
- Update logger package
|
|
177
|
+
- Updated dependencies
|
|
178
|
+
- @rosen-bridge/abstract-extractor@1.0.1
|
|
179
|
+
- @rosen-bridge/scanner@5.0.2
|
|
180
|
+
|
|
181
|
+
## 2.0.11
|
|
182
|
+
|
|
183
|
+
### Patch Changes
|
|
184
|
+
|
|
185
|
+
- Updated dependencies
|
|
186
|
+
- @rosen-bridge/abstract-extractor@1.0.0
|
|
187
|
+
- @rosen-bridge/scanner@5.0.1
|
|
188
|
+
|
|
189
|
+
## 2.0.10
|
|
190
|
+
|
|
191
|
+
### Patch Changes
|
|
192
|
+
|
|
193
|
+
- Updated dependencies
|
|
194
|
+
- @rosen-bridge/scanner@5.0.0
|
|
195
|
+
- @rosen-bridge/abstract-extractor@0.3.1
|
|
196
|
+
|
|
197
|
+
## 2.0.9
|
|
198
|
+
|
|
199
|
+
### Patch Changes
|
|
200
|
+
|
|
201
|
+
- Updated dependencies
|
|
202
|
+
- @rosen-bridge/scanner@4.1.3
|
|
203
|
+
|
|
204
|
+
## 2.0.8
|
|
205
|
+
|
|
206
|
+
### Patch Changes
|
|
207
|
+
|
|
208
|
+
- Updated dependencies
|
|
209
|
+
- @rosen-bridge/abstract-extractor@0.3.0
|
|
210
|
+
- @rosen-bridge/scanner@4.1.2
|
|
211
|
+
|
|
212
|
+
## 2.0.7
|
|
213
|
+
|
|
214
|
+
### Patch Changes
|
|
215
|
+
|
|
216
|
+
- Updated dependencies
|
|
217
|
+
- @rosen-bridge/scanner@4.1.1
|
|
218
|
+
|
|
219
|
+
## 2.0.6
|
|
220
|
+
|
|
221
|
+
### Patch Changes
|
|
222
|
+
|
|
223
|
+
- Fix explorer response test data
|
|
224
|
+
- Updated dependencies
|
|
225
|
+
- @rosen-bridge/abstract-extractor@0.2.0
|
|
226
|
+
- @rosen-bridge/scanner@4.1.0
|
|
227
|
+
|
|
228
|
+
## 2.0.5
|
|
229
|
+
|
|
230
|
+
### Patch Changes
|
|
231
|
+
|
|
232
|
+
- Updated dependencies
|
|
233
|
+
- @rosen-bridge/abstract-extractor@0.1.5
|
|
234
|
+
- @rosen-bridge/scanner@4.0.5
|
|
235
|
+
|
|
236
|
+
## 2.0.4
|
|
237
|
+
|
|
238
|
+
### Patch Changes
|
|
239
|
+
|
|
240
|
+
- Updated dependencies
|
|
241
|
+
- @rosen-bridge/abstract-extractor@0.1.4
|
|
242
|
+
- @rosen-bridge/scanner@4.0.4
|
|
243
|
+
|
|
244
|
+
## 2.0.3
|
|
245
|
+
|
|
246
|
+
### Patch Changes
|
|
247
|
+
|
|
248
|
+
- Updated dependencies
|
|
249
|
+
- @rosen-bridge/abstract-extractor@0.1.3
|
|
250
|
+
- @rosen-bridge/scanner@4.0.3
|
|
251
|
+
|
|
252
|
+
## 2.0.2
|
|
253
|
+
|
|
254
|
+
### Patch Changes
|
|
255
|
+
|
|
256
|
+
- Updated dependencies
|
|
257
|
+
- @rosen-bridge/abstract-extractor@0.1.2
|
|
258
|
+
- @rosen-bridge/scanner@4.0.2
|
|
259
|
+
|
|
260
|
+
## 2.0.1
|
|
261
|
+
|
|
262
|
+
### Patch Changes
|
|
263
|
+
|
|
264
|
+
- Updated dependencies
|
|
265
|
+
- @rosen-bridge/abstract-extractor@0.1.1
|
|
266
|
+
- @rosen-bridge/scanner@4.0.1
|
|
267
|
+
|
|
268
|
+
## 2.0.0
|
|
269
|
+
|
|
270
|
+
### Major Changes
|
|
271
|
+
|
|
272
|
+
- Updated the InitializeBoxes interface to include the block hash. Previously, only block height was used as initialization point.
|
|
273
|
+
|
|
274
|
+
### Patch Changes
|
|
275
|
+
|
|
276
|
+
- Update abstract extractor interface
|
|
277
|
+
- Updated dependencies
|
|
278
|
+
- @rosen-bridge/scanner@4.0.0
|
|
279
|
+
|
|
280
|
+
## 1.2.9
|
|
281
|
+
|
|
282
|
+
### Patch Changes
|
|
283
|
+
|
|
284
|
+
- Updated dependencies
|
|
285
|
+
- @rosen-bridge/scanner@3.2.9
|
|
286
|
+
|
|
287
|
+
## 1.2.8
|
|
288
|
+
|
|
289
|
+
### Patch Changes
|
|
290
|
+
|
|
291
|
+
- Updated dependencies
|
|
292
|
+
- @rosen-bridge/scanner@3.2.8
|
|
293
|
+
|
|
294
|
+
## 1.2.7
|
|
295
|
+
|
|
296
|
+
### Patch Changes
|
|
297
|
+
|
|
298
|
+
- Update typeorm version
|
|
299
|
+
- Updated dependencies
|
|
300
|
+
- @rosen-bridge/scanner@3.2.7
|
package/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Fraud Extractor
|
|
2
|
+
|
|
3
|
+
### Table of Contents
|
|
4
|
+
|
|
5
|
+
- [Description](#description)
|
|
6
|
+
- [Related Projects](#related-projects)
|
|
7
|
+
- [How to Use the Fraud Extractor](#how-to-use-the-fraud-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. Fraud extractor, extracts fraud boxes information from blocks and stores them in the database. Cleanup service creates frauds from timed out unspent triggers; these triggers might have incorrect data or be a duplicated version of a valid trigger. Then the fraud funds will be seized by the service to punish the faulty reports.
|
|
18
|
+
|
|
19
|
+
## Related Projects
|
|
20
|
+
|
|
21
|
+
TBD
|
|
22
|
+
|
|
23
|
+
## How to Use the Fraud Extractor
|
|
24
|
+
|
|
25
|
+
### Install
|
|
26
|
+
|
|
27
|
+
TBD
|
|
28
|
+
|
|
29
|
+
### Usage
|
|
30
|
+
|
|
31
|
+
TBD
|
|
32
|
+
|
|
33
|
+
## Contributing
|
|
34
|
+
|
|
35
|
+
TBD
|
|
36
|
+
|
|
37
|
+
## License
|
|
38
|
+
|
|
39
|
+
TBD
|
|
@@ -0,0 +1,24 @@
|
|
|
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 { FraudEntity } from '../entities/fraudEntity';
|
|
6
|
+
import { ExtractedFraud } from '../interfaces/types';
|
|
7
|
+
export declare class FraudAction extends AbstractErgoBoxAction<ExtractedFraud, FraudEntity> {
|
|
8
|
+
constructor(dataSource: DataSource, logger?: AbstractLogger);
|
|
9
|
+
/**
|
|
10
|
+
* create the fraud entity from extracted data and block information
|
|
11
|
+
* @param frauds
|
|
12
|
+
* @param block
|
|
13
|
+
* @param extractor
|
|
14
|
+
* @returns the fraud entities (without the id)
|
|
15
|
+
*/
|
|
16
|
+
protected createEntity: (frauds: ExtractedFraud[], block: BlockInfo, extractor: string) => Array<Omit<FraudEntity, "id">>;
|
|
17
|
+
/**
|
|
18
|
+
* convert the database entity back to raw data
|
|
19
|
+
* @param entities
|
|
20
|
+
* @returns the extracted fraud data
|
|
21
|
+
*/
|
|
22
|
+
protected convertEntityToData: (entities: FraudEntity[]) => ExtractedFraud[];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=fraudAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fraudAction.d.ts","sourceRoot":"","sources":["../../lib/actions/fraudAction.ts"],"names":[],"mappings":"AAAA,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,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,WAAY,SAAQ,qBAAqB,CACpD,cAAc,EACd,WAAW,CACZ;gBACa,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc;IAI3D;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,GACpB,QAAQ,cAAc,EAAE,EACxB,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAU/B;IAEF;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,GAC3B,UAAU,WAAW,EAAE,KACtB,cAAc,EAAE,CAEjB;CACH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AbstractErgoBoxAction } from '@rosen-bridge/abstract-extractor';
|
|
2
|
+
import { FraudEntity } from '../entities/fraudEntity';
|
|
3
|
+
export class FraudAction extends AbstractErgoBoxAction {
|
|
4
|
+
constructor(dataSource, logger) {
|
|
5
|
+
super(dataSource, FraudEntity, logger);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* create the fraud entity from extracted data and block information
|
|
9
|
+
* @param frauds
|
|
10
|
+
* @param block
|
|
11
|
+
* @param extractor
|
|
12
|
+
* @returns the fraud entities (without the id)
|
|
13
|
+
*/
|
|
14
|
+
createEntity = (frauds, block, extractor) => {
|
|
15
|
+
return frauds.map((fraud) => ({
|
|
16
|
+
...fraud,
|
|
17
|
+
block: block.hash,
|
|
18
|
+
height: block.height,
|
|
19
|
+
extractor,
|
|
20
|
+
spendBlock: fraud.spendBlock ?? null,
|
|
21
|
+
spendHeight: fraud.spendHeight ?? null,
|
|
22
|
+
spendTxId: fraud.spendTxId ?? null,
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* convert the database entity back to raw data
|
|
27
|
+
* @param entities
|
|
28
|
+
* @returns the extracted fraud data
|
|
29
|
+
*/
|
|
30
|
+
convertEntityToData = (entities) => {
|
|
31
|
+
return entities;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhdWRBY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWN0aW9ucy9mcmF1ZEFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUt6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdEQsTUFBTSxPQUFPLFdBQVksU0FBUSxxQkFHaEM7SUFDQyxZQUFZLFVBQXNCLEVBQUUsTUFBdUI7UUFDekQsS0FBSyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLFlBQVksR0FBRyxDQUN2QixNQUF3QixFQUN4QixLQUFnQixFQUNoQixTQUFpQixFQUNlLEVBQUU7UUFDbEMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNqQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUztZQUNULFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUk7WUFDcEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSTtZQUN0QyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJO1NBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNPLG1CQUFtQixHQUFHLENBQzlCLFFBQXVCLEVBQ0wsRUFBRTtRQUNwQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0RXJnb0JveEFjdGlvbiB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEZyYXVkRW50aXR5IH0gZnJvbSAnLi4vZW50aXRpZXMvZnJhdWRFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdGVkRnJhdWQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEZyYXVkQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RFcmdvQm94QWN0aW9uPFxuICBFeHRyYWN0ZWRGcmF1ZCxcbiAgRnJhdWRFbnRpdHlcbj4ge1xuICBjb25zdHJ1Y3RvcihkYXRhU291cmNlOiBEYXRhU291cmNlLCBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHN1cGVyKGRhdGFTb3VyY2UsIEZyYXVkRW50aXR5LCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgZnJhdWQgZW50aXR5IGZyb20gZXh0cmFjdGVkIGRhdGEgYW5kIGJsb2NrIGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSBmcmF1ZHNcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICogQHJldHVybnMgdGhlIGZyYXVkIGVudGl0aWVzICh3aXRob3V0IHRoZSBpZClcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVFbnRpdHkgPSAoXG4gICAgZnJhdWRzOiBFeHRyYWN0ZWRGcmF1ZFtdLFxuICAgIGJsb2NrOiBCbG9ja0luZm8sXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsXG4gICk6IEFycmF5PE9taXQ8RnJhdWRFbnRpdHksICdpZCc+PiA9PiB7XG4gICAgcmV0dXJuIGZyYXVkcy5tYXAoKGZyYXVkKSA9PiAoe1xuICAgICAgLi4uZnJhdWQsXG4gICAgICBibG9jazogYmxvY2suaGFzaCxcbiAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgZXh0cmFjdG9yLFxuICAgICAgc3BlbmRCbG9jazogZnJhdWQuc3BlbmRCbG9jayA/PyBudWxsLFxuICAgICAgc3BlbmRIZWlnaHQ6IGZyYXVkLnNwZW5kSGVpZ2h0ID8/IG51bGwsXG4gICAgICBzcGVuZFR4SWQ6IGZyYXVkLnNwZW5kVHhJZCA/PyBudWxsLFxuICAgIH0pKTtcbiAgfTtcblxuICAvKipcbiAgICogY29udmVydCB0aGUgZGF0YWJhc2UgZW50aXR5IGJhY2sgdG8gcmF3IGRhdGFcbiAgICogQHBhcmFtIGVudGl0aWVzXG4gICAqIEByZXR1cm5zIHRoZSBleHRyYWN0ZWQgZnJhdWQgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnZlcnRFbnRpdHlUb0RhdGEgPSAoXG4gICAgZW50aXRpZXM6IEZyYXVkRW50aXR5W10sXG4gICk6IEV4dHJhY3RlZEZyYXVkW10gPT4ge1xuICAgIHJldHVybiBlbnRpdGllcztcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fraudEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/fraudEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,qBACa,WAAY,SAAQ,qBAAqB;IAEpD,YAAY,EAAE,MAAM,CAAC;IAGrB,IAAI,EAAE,MAAM,CAAC;IAGb,GAAG,EAAE,MAAM,CAAC;IAGZ,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 FraudEntity = class FraudEntity extends AbstractErgoBoxEntity {
|
|
13
|
+
triggerBoxId;
|
|
14
|
+
txId;
|
|
15
|
+
wid;
|
|
16
|
+
rwtCount;
|
|
17
|
+
};
|
|
18
|
+
__decorate([
|
|
19
|
+
Column({ type: 'varchar' }),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], FraudEntity.prototype, "triggerBoxId", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
Column({ type: 'varchar' }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], FraudEntity.prototype, "txId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
Column({ type: 'varchar' }),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], FraudEntity.prototype, "wid", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
Column({ type: 'varchar' }),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], FraudEntity.prototype, "rwtCount", void 0);
|
|
34
|
+
FraudEntity = __decorate([
|
|
35
|
+
Entity('fraud_entity')
|
|
36
|
+
], FraudEntity);
|
|
37
|
+
export { FraudEntity };
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhdWRFbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZW50aXRpZXMvZnJhdWRFbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd6RCxJQUFNLFdBQVcsR0FBakIsTUFBTSxXQUFZLFNBQVEscUJBQXFCO0lBRXBELFlBQVksQ0FBUztJQUdyQixJQUFJLENBQVM7SUFHYixHQUFHLENBQVM7SUFHWixRQUFRLENBQVM7Q0FDbEIsQ0FBQTtBQVZDO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOztpREFDUDtBQUdyQjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7eUNBQ2Y7QUFHYjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7d0NBQ2hCO0FBR1o7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OzZDQUNYO0FBWE4sV0FBVztJQUR2QixNQUFNLENBQUMsY0FBYyxDQUFDO0dBQ1YsV0FBVyxDQVl2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0RXJnb0JveEVudGl0eSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7IENvbHVtbiwgRW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcblxuQEVudGl0eSgnZnJhdWRfZW50aXR5JylcbmV4cG9ydCBjbGFzcyBGcmF1ZEVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0JveEVudGl0eSB7XG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgdHJpZ2dlckJveElkOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICB0eElkOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICB3aWQ6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIHJ3dENvdW50OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AbstractErgoBoxExtractor, InitializeOptions, TxExtra } from '@rosen-bridge/abstract-extractor';
|
|
2
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
|
+
import { InputExtension, OutputBox, Transaction } from '@rosen-bridge/scanner-interfaces';
|
|
5
|
+
import { FraudAction } from '../actions/fraudAction';
|
|
6
|
+
import { FraudEntity } from '../entities/fraudEntity';
|
|
7
|
+
import { ExtractedFraud } from '../interfaces/types';
|
|
8
|
+
export declare class FraudExtractor extends AbstractErgoBoxExtractor<ExtractedFraud, FraudEntity> {
|
|
9
|
+
readonly actions: FraudAction;
|
|
10
|
+
private readonly id;
|
|
11
|
+
private readonly ergoTree;
|
|
12
|
+
private readonly rwt;
|
|
13
|
+
constructor(dataSource: DataSource, id: string, rwt: string, initializeOptions: InitializeOptions, logger?: AbstractLogger);
|
|
14
|
+
/**
|
|
15
|
+
* get Id for current extractor
|
|
16
|
+
*/
|
|
17
|
+
getId: () => string;
|
|
18
|
+
/**
|
|
19
|
+
* check proper data format in the box
|
|
20
|
+
* @param box
|
|
21
|
+
* @return true if the box has the required data and false otherwise
|
|
22
|
+
*/
|
|
23
|
+
hasBoxData: (box: OutputBox) => boolean;
|
|
24
|
+
/**
|
|
25
|
+
* extract transaction extra information
|
|
26
|
+
* @param tx
|
|
27
|
+
* @returns transaction extra data containing trigger box id
|
|
28
|
+
*/
|
|
29
|
+
getTransactionExtraData: (tx: Transaction) => TxExtra;
|
|
30
|
+
/**
|
|
31
|
+
* extract box data to proper format (not including spending information)
|
|
32
|
+
* @param box
|
|
33
|
+
* @param inputExtensions all input box extensions in transaction
|
|
34
|
+
* @param txExtra transaction extra data containing trigger box id
|
|
35
|
+
* @return extracted data in proper format
|
|
36
|
+
*/
|
|
37
|
+
extractBoxData: (box: OutputBox, _inputExtensions: InputExtension[], txExtra?: TxExtra) => ExtractedFraud | undefined;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=fraudExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fraudExtractor.d.ts","sourceRoot":"","sources":["../../lib/extractor/fraudExtractor.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EACL,cAAc,EACd,SAAS,EACT,WAAW,EACZ,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,cAAe,SAAQ,wBAAwB,CAC1D,cAAc,EACd,WAAW,CACZ;IACC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAG3B,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,CAAC,EAAE,cAAc;IAczB;;OAEG;IACH,KAAK,eAAsB;IAE3B;;;;OAIG;IACH,UAAU,GAAI,KAAK,SAAS,KAAG,OAAO,CAmBpC;IAEF;;;;OAIG;IACH,uBAAuB,GAAI,IAAI,WAAW,KAAG,OAAO,CAEjD;IAEH;;;;;;OAMG;IACH,cAAc,GACZ,KAAK,SAAS,EACd,kBAAkB,cAAc,EAAE,EAClC,UAAU,OAAO,KAChB,cAAc,GAAG,SAAS,CAuB3B;CACH"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import * as wasm from 'ergo-lib-wasm-nodejs';
|
|
3
|
+
import { AbstractErgoBoxExtractor, } from '@rosen-bridge/abstract-extractor';
|
|
4
|
+
import JsonBI from '@rosen-bridge/json-bigint';
|
|
5
|
+
import { FraudAction } from '../actions/fraudAction';
|
|
6
|
+
export class FraudExtractor extends AbstractErgoBoxExtractor {
|
|
7
|
+
actions;
|
|
8
|
+
id;
|
|
9
|
+
ergoTree;
|
|
10
|
+
rwt;
|
|
11
|
+
constructor(dataSource, id, rwt, initializeOptions, logger) {
|
|
12
|
+
super(initializeOptions, logger);
|
|
13
|
+
this.id = id;
|
|
14
|
+
this.ergoTree = wasm.Address.from_base58(initializeOptions.address)
|
|
15
|
+
.to_ergo_tree()
|
|
16
|
+
.to_base16_bytes();
|
|
17
|
+
this.rwt = rwt;
|
|
18
|
+
this.actions = new FraudAction(dataSource, this.logger.child('FraudAction'));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* get Id for current extractor
|
|
22
|
+
*/
|
|
23
|
+
getId = () => `${this.id}`;
|
|
24
|
+
/**
|
|
25
|
+
* check proper data format in the box
|
|
26
|
+
* @param box
|
|
27
|
+
* @return true if the box has the required data and false otherwise
|
|
28
|
+
*/
|
|
29
|
+
hasBoxData = (box) => {
|
|
30
|
+
if (box.ergoTree !== this.ergoTree ||
|
|
31
|
+
box.assets.length === 0 ||
|
|
32
|
+
box.assets[0].tokenId !== this.rwt) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
// Check if R4 register exists and is valid
|
|
36
|
+
try {
|
|
37
|
+
const ergoBox = wasm.ErgoBox.from_json(JsonBI.stringify(box));
|
|
38
|
+
const r4 = ergoBox
|
|
39
|
+
.register_value(wasm.NonMandatoryRegisterId.R4)
|
|
40
|
+
?.to_byte_array();
|
|
41
|
+
return r4 != null;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* extract transaction extra information
|
|
49
|
+
* @param tx
|
|
50
|
+
* @returns transaction extra data containing trigger box id
|
|
51
|
+
*/
|
|
52
|
+
getTransactionExtraData = (tx) => ({
|
|
53
|
+
triggerBoxId: tx.inputs[0].boxId,
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* extract box data to proper format (not including spending information)
|
|
57
|
+
* @param box
|
|
58
|
+
* @param inputExtensions all input box extensions in transaction
|
|
59
|
+
* @param txExtra transaction extra data containing trigger box id
|
|
60
|
+
* @return extracted data in proper format
|
|
61
|
+
*/
|
|
62
|
+
extractBoxData = (box, _inputExtensions, txExtra) => {
|
|
63
|
+
const triggerBoxId = txExtra?.triggerBoxId;
|
|
64
|
+
if (!triggerBoxId) {
|
|
65
|
+
throw new Error(`ImpossibleBehaviour: Trigger boxId is missing for box ${box.boxId}, txExtra: ${JSON.stringify(txExtra)}`);
|
|
66
|
+
}
|
|
67
|
+
const ergoBox = wasm.ErgoBox.from_json(JsonBI.stringify(box));
|
|
68
|
+
const r4 = ergoBox
|
|
69
|
+
.register_value(wasm.NonMandatoryRegisterId.R4)
|
|
70
|
+
?.to_byte_array();
|
|
71
|
+
return {
|
|
72
|
+
identifier: ergoBox.box_id().to_str(),
|
|
73
|
+
triggerBoxId,
|
|
74
|
+
txId: box.transactionId,
|
|
75
|
+
wid: Buffer.from(r4).toString('hex'),
|
|
76
|
+
rwtCount: box.assets[0].amount.toString(),
|
|
77
|
+
serialized: Buffer.from(ergoBox.sigma_serialize_bytes()).toString('base64'),
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhdWRFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZXh0cmFjdG9yL2ZyYXVkRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsd0JBQXdCLEdBR3pCLE1BQU0sa0NBQWtDLENBQUM7QUFHMUMsT0FBTyxNQUFNLE1BQU0sMkJBQTJCLENBQUM7QUFPL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXJELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBR25DO0lBQ1UsT0FBTyxDQUFjO0lBQ2IsRUFBRSxDQUFTO0lBQ1gsUUFBUSxDQUFTO0lBQ2pCLEdBQUcsQ0FBUztJQUU3QixZQUNFLFVBQXNCLEVBQ3RCLEVBQVUsRUFDVixHQUFXLEVBQ1gsaUJBQW9DLEVBQ3BDLE1BQXVCO1FBRXZCLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO2FBQ2hFLFlBQVksRUFBRTthQUNkLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FDNUIsVUFBVSxFQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBRTNCOzs7O09BSUc7SUFDSCxVQUFVLEdBQUcsQ0FBQyxHQUFjLEVBQVcsRUFBRTtRQUN2QyxJQUNFLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVE7WUFDOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN2QixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsR0FBRyxFQUNsQyxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RCxNQUFNLEVBQUUsR0FBRyxPQUFPO2lCQUNmLGNBQWMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILHVCQUF1QixHQUFHLENBQUMsRUFBZSxFQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELFlBQVksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7S0FDakMsQ0FBQyxDQUFDO0lBRUg7Ozs7OztPQU1HO0lBQ0gsY0FBYyxHQUFHLENBQ2YsR0FBYyxFQUNkLGdCQUFrQyxFQUNsQyxPQUFpQixFQUNXLEVBQUU7UUFDOUIsTUFBTSxZQUFZLEdBQUcsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FDYix5REFBeUQsR0FBRyxDQUFDLEtBQUssY0FBYyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzFHLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sRUFBRSxHQUFHLE9BQU87YUFDZixjQUFjLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUMvQyxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBRXBCLE9BQU87WUFDTCxVQUFVLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUNyQyxZQUFZO1lBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1lBQ3ZCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDckMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUN6QyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FDL0QsUUFBUSxDQUNUO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCAqIGFzIHdhc20gZnJvbSAnZXJnby1saWItd2FzbS1ub2RlanMnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdEVyZ29Cb3hFeHRyYWN0b3IsXG4gIEluaXRpYWxpemVPcHRpb25zLFxuICBUeEV4dHJhLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IEpzb25CSSBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCB7XG4gIElucHV0RXh0ZW5zaW9uLFxuICBPdXRwdXRCb3gsXG4gIFRyYW5zYWN0aW9uLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEZyYXVkQWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9mcmF1ZEFjdGlvbic7XG5pbXBvcnQgeyBGcmF1ZEVudGl0eSB9IGZyb20gJy4uL2VudGl0aWVzL2ZyYXVkRW50aXR5JztcbmltcG9ydCB7IEV4dHJhY3RlZEZyYXVkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBGcmF1ZEV4dHJhY3RvciBleHRlbmRzIEFic3RyYWN0RXJnb0JveEV4dHJhY3RvcjxcbiAgRXh0cmFjdGVkRnJhdWQsXG4gIEZyYXVkRW50aXR5XG4+IHtcbiAgcmVhZG9ubHkgYWN0aW9uczogRnJhdWRBY3Rpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlcmdvVHJlZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ3dDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgaWQ6IHN0cmluZyxcbiAgICByd3Q6IHN0cmluZyxcbiAgICBpbml0aWFsaXplT3B0aW9uczogSW5pdGlhbGl6ZU9wdGlvbnMsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICkge1xuICAgIHN1cGVyKGluaXRpYWxpemVPcHRpb25zLCBsb2dnZXIpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmVyZ29UcmVlID0gd2FzbS5BZGRyZXNzLmZyb21fYmFzZTU4KGluaXRpYWxpemVPcHRpb25zLmFkZHJlc3MpXG4gICAgICAudG9fZXJnb190cmVlKClcbiAgICAgIC50b19iYXNlMTZfYnl0ZXMoKTtcbiAgICB0aGlzLnJ3dCA9IHJ3dDtcbiAgICB0aGlzLmFjdGlvbnMgPSBuZXcgRnJhdWRBY3Rpb24oXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgdGhpcy5sb2dnZXIuY2hpbGQoJ0ZyYXVkQWN0aW9uJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+IGAke3RoaXMuaWR9YDtcblxuICAvKipcbiAgICogY2hlY2sgcHJvcGVyIGRhdGEgZm9ybWF0IGluIHRoZSBib3hcbiAgICogQHBhcmFtIGJveFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGJveCBoYXMgdGhlIHJlcXVpcmVkIGRhdGEgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzQm94RGF0YSA9IChib3g6IE91dHB1dEJveCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChcbiAgICAgIGJveC5lcmdvVHJlZSAhPT0gdGhpcy5lcmdvVHJlZSB8fFxuICAgICAgYm94LmFzc2V0cy5sZW5ndGggPT09IDAgfHxcbiAgICAgIGJveC5hc3NldHNbMF0udG9rZW5JZCAhPT0gdGhpcy5yd3RcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBSNCByZWdpc3RlciBleGlzdHMgYW5kIGlzIHZhbGlkXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVyZ29Cb3ggPSB3YXNtLkVyZ29Cb3guZnJvbV9qc29uKEpzb25CSS5zdHJpbmdpZnkoYm94KSk7XG4gICAgICBjb25zdCByNCA9IGVyZ29Cb3hcbiAgICAgICAgLnJlZ2lzdGVyX3ZhbHVlKHdhc20uTm9uTWFuZGF0b3J5UmVnaXN0ZXJJZC5SNClcbiAgICAgICAgPy50b19ieXRlX2FycmF5KCk7XG4gICAgICByZXR1cm4gcjQgIT0gbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3QgdHJhbnNhY3Rpb24gZXh0cmEgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHR4XG4gICAqIEByZXR1cm5zIHRyYW5zYWN0aW9uIGV4dHJhIGRhdGEgY29udGFpbmluZyB0cmlnZ2VyIGJveCBpZFxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25FeHRyYURhdGEgPSAodHg6IFRyYW5zYWN0aW9uKTogVHhFeHRyYSA9PiAoe1xuICAgIHRyaWdnZXJCb3hJZDogdHguaW5wdXRzWzBdLmJveElkLFxuICB9KTtcblxuICAvKipcbiAgICogZXh0cmFjdCBib3ggZGF0YSB0byBwcm9wZXIgZm9ybWF0IChub3QgaW5jbHVkaW5nIHNwZW5kaW5nIGluZm9ybWF0aW9uKVxuICAgKiBAcGFyYW0gYm94XG4gICAqIEBwYXJhbSBpbnB1dEV4dGVuc2lvbnMgYWxsIGlucHV0IGJveCBleHRlbnNpb25zIGluIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB0eEV4dHJhIHRyYW5zYWN0aW9uIGV4dHJhIGRhdGEgY29udGFpbmluZyB0cmlnZ2VyIGJveCBpZFxuICAgKiBAcmV0dXJuIGV4dHJhY3RlZCBkYXRhIGluIHByb3BlciBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RCb3hEYXRhID0gKFxuICAgIGJveDogT3V0cHV0Qm94LFxuICAgIF9pbnB1dEV4dGVuc2lvbnM6IElucHV0RXh0ZW5zaW9uW10sXG4gICAgdHhFeHRyYT86IFR4RXh0cmEsXG4gICk6IEV4dHJhY3RlZEZyYXVkIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCB0cmlnZ2VyQm94SWQgPSB0eEV4dHJhPy50cmlnZ2VyQm94SWQ7XG4gICAgaWYgKCF0cmlnZ2VyQm94SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEltcG9zc2libGVCZWhhdmlvdXI6IFRyaWdnZXIgYm94SWQgaXMgbWlzc2luZyBmb3IgYm94ICR7Ym94LmJveElkfSwgdHhFeHRyYTogJHtKU09OLnN0cmluZ2lmeSh0eEV4dHJhKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlcmdvQm94ID0gd2FzbS5FcmdvQm94LmZyb21fanNvbihKc29uQkkuc3RyaW5naWZ5KGJveCkpO1xuICAgIGNvbnN0IHI0ID0gZXJnb0JveFxuICAgICAgLnJlZ2lzdGVyX3ZhbHVlKHdhc20uTm9uTWFuZGF0b3J5UmVnaXN0ZXJJZC5SNClcbiAgICAgID8udG9fYnl0ZV9hcnJheSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkZW50aWZpZXI6IGVyZ29Cb3guYm94X2lkKCkudG9fc3RyKCksXG4gICAgICB0cmlnZ2VyQm94SWQsXG4gICAgICB0eElkOiBib3gudHJhbnNhY3Rpb25JZCxcbiAgICAgIHdpZDogQnVmZmVyLmZyb20ocjQhKS50b1N0cmluZygnaGV4JyksXG4gICAgICByd3RDb3VudDogYm94LmFzc2V0c1swXS5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgIHNlcmlhbGl6ZWQ6IEJ1ZmZlci5mcm9tKGVyZ29Cb3guc2lnbWFfc2VyaWFsaXplX2J5dGVzKCkpLnRvU3RyaW5nKFxuICAgICAgICAnYmFzZTY0JyxcbiAgICAgICksXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
|
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,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { FraudExtractor } from './extractor/fraudExtractor';
|
|
2
|
+
export { FraudEntity } from './entities/fraudEntity';
|
|
3
|
+
export { migrations } from './migrations/index';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGcmF1ZEV4dHJhY3RvciB9IGZyb20gJy4vZXh0cmFjdG9yL2ZyYXVkRXh0cmFjdG9yJztcbmV4cG9ydCB7IEZyYXVkRW50aXR5IH0gZnJvbSAnLi9lbnRpdGllcy9mcmF1ZEVudGl0eSc7XG5leHBvcnQgeyBtaWdyYXRpb25zIH0gZnJvbSAnLi9taWdyYXRpb25zL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractEntityData } from '@rosen-bridge/abstract-extractor';
|
|
2
|
+
export interface ExtractedFraud extends AbstractEntityData {
|
|
3
|
+
txId: string;
|
|
4
|
+
triggerBoxId: string;
|
|
5
|
+
wid: string;
|
|
6
|
+
rwtCount: string;
|
|
7
|
+
spendBlock?: string | null;
|
|
8
|
+
spendHeight?: number | null;
|
|
9
|
+
spendTxId?: string | null;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/interfaces/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW50ZXJmYWNlcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RFbnRpdHlEYXRhIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1leHRyYWN0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZEZyYXVkIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlEYXRhIHtcbiAgdHhJZDogc3RyaW5nO1xuICB0cmlnZ2VyQm94SWQ6IHN0cmluZztcbiAgd2lkOiBzdHJpbmc7XG4gIHJ3dENvdW50OiBzdHJpbmc7XG4gIHNwZW5kQmxvY2s/OiBzdHJpbmcgfCBudWxsO1xuICBzcGVuZEhlaWdodD86IG51bWJlciB8IG51bGw7XG4gIHNwZW5kVHhJZD86IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { migration1693308311652 } from './postgres/1693308311652-migration';
|
|
2
|
+
import { migration1693122371215 } from './sqlite/1693122371215-migration';
|
|
3
|
+
export declare const migrations: {
|
|
4
|
+
sqlite: (typeof migration1693122371215)[];
|
|
5
|
+
postgres: (typeof migration1693308311652)[];
|
|
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;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,eAAO,MAAM,UAAU;;;CAGtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { migration1693308311652 } from './postgres/1693308311652-migration';
|
|
2
|
+
import { Migration1766229066209 } from './postgres/1766229066209-migration';
|
|
3
|
+
import { migration1693122371215 } from './sqlite/1693122371215-migration';
|
|
4
|
+
import { Migration1766226220592 } from './sqlite/1766226220592-migration';
|
|
5
|
+
export const migrations = {
|
|
6
|
+
sqlite: [migration1693122371215, Migration1766226220592],
|
|
7
|
+
postgres: [migration1693308311652, Migration1766229066209],
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbWlncmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsTUFBTSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDeEQsUUFBUSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7Q0FDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1pZ3JhdGlvbjE2OTMzMDgzMTE2NTIgfSBmcm9tICcuL3Bvc3RncmVzLzE2OTMzMDgzMTE2NTItbWlncmF0aW9uJztcbmltcG9ydCB7IE1pZ3JhdGlvbjE3NjYyMjkwNjYyMDkgfSBmcm9tICcuL3Bvc3RncmVzLzE3NjYyMjkwNjYyMDktbWlncmF0aW9uJztcbmltcG9ydCB7IG1pZ3JhdGlvbjE2OTMxMjIzNzEyMTUgfSBmcm9tICcuL3NxbGl0ZS8xNjkzMTIyMzcxMjE1LW1pZ3JhdGlvbic7XG5pbXBvcnQgeyBNaWdyYXRpb24xNzY2MjI2MjIwNTkyIH0gZnJvbSAnLi9zcWxpdGUvMTc2NjIyNjIyMDU5Mi1taWdyYXRpb24nO1xuXG5leHBvcnQgY29uc3QgbWlncmF0aW9ucyA9IHtcbiAgc3FsaXRlOiBbbWlncmF0aW9uMTY5MzEyMjM3MTIxNSwgTWlncmF0aW9uMTc2NjIyNjIyMDU5Ml0sXG4gIHBvc3RncmVzOiBbbWlncmF0aW9uMTY5MzMwODMxMTY1MiwgTWlncmF0aW9uMTc2NjIyOTA2NjIwOV0sXG59O1xuIl19
|