@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.
Files changed (34) hide show
  1. package/CHANGELOG.md +300 -0
  2. package/README.md +39 -0
  3. package/dist/actions/fraudAction.d.ts +24 -0
  4. package/dist/actions/fraudAction.d.ts.map +1 -0
  5. package/dist/actions/fraudAction.js +34 -0
  6. package/dist/entities/fraudEntity.d.ts +8 -0
  7. package/dist/entities/fraudEntity.d.ts.map +1 -0
  8. package/dist/entities/fraudEntity.js +38 -0
  9. package/dist/extractor/fraudExtractor.d.ts +39 -0
  10. package/dist/extractor/fraudExtractor.d.ts.map +1 -0
  11. package/dist/extractor/fraudExtractor.js +81 -0
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +4 -0
  15. package/dist/interfaces/types.d.ts +11 -0
  16. package/dist/interfaces/types.d.ts.map +1 -0
  17. package/dist/interfaces/types.js +2 -0
  18. package/dist/migrations/index.d.ts +7 -0
  19. package/dist/migrations/index.d.ts.map +1 -0
  20. package/dist/migrations/index.js +9 -0
  21. package/dist/migrations/postgres/1693308311652-migration.d.ts +7 -0
  22. package/dist/migrations/postgres/1693308311652-migration.d.ts.map +1 -0
  23. package/dist/migrations/postgres/1693308311652-migration.js +29 -0
  24. package/dist/migrations/postgres/1766229066209-migration.d.ts +7 -0
  25. package/dist/migrations/postgres/1766229066209-migration.d.ts.map +1 -0
  26. package/dist/migrations/postgres/1766229066209-migration.js +52 -0
  27. package/dist/migrations/sqlite/1693122371215-migration.d.ts +7 -0
  28. package/dist/migrations/sqlite/1693122371215-migration.d.ts.map +1 -0
  29. package/dist/migrations/sqlite/1693122371215-migration.js +28 -0
  30. package/dist/migrations/sqlite/1766226220592-migration.d.ts +7 -0
  31. package/dist/migrations/sqlite/1766226220592-migration.d.ts.map +1 -0
  32. package/dist/migrations/sqlite/1766226220592-migration.js +114 -0
  33. package/dist/tsconfig.tsbuildinfo +1 -0
  34. 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,8 @@
1
+ import { AbstractErgoBoxEntity } from '@rosen-bridge/abstract-extractor';
2
+ export declare class FraudEntity extends AbstractErgoBoxEntity {
3
+ triggerBoxId: string;
4
+ txId: string;
5
+ wid: string;
6
+ rwtCount: string;
7
+ }
8
+ //# sourceMappingURL=fraudEntity.d.ts.map
@@ -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==
@@ -0,0 +1,4 @@
1
+ export { FraudExtractor } from './extractor/fraudExtractor';
2
+ export { FraudEntity } from './entities/fraudEntity';
3
+ export { migrations } from './migrations/index';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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