@rosen-bridge/abstract-scanner 0.1.0-52fc0239

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 (71) hide show
  1. package/README.md +49 -0
  2. package/dist/entities/blockEntity.d.ts +17 -0
  3. package/dist/entities/blockEntity.d.ts.map +1 -0
  4. package/dist/entities/blockEntity.js +78 -0
  5. package/dist/entities/extractorStatusEntity.d.ts +7 -0
  6. package/dist/entities/extractorStatusEntity.d.ts.map +1 -0
  7. package/dist/entities/extractorStatusEntity.js +37 -0
  8. package/dist/index.d.ts +11 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +10 -0
  11. package/dist/migrations/index.d.ts +7 -0
  12. package/dist/migrations/index.d.ts.map +1 -0
  13. package/dist/migrations/index.js +31 -0
  14. package/dist/migrations/postgres/1688545690867-migration.d.ts +7 -0
  15. package/dist/migrations/postgres/1688545690867-migration.d.ts.map +1 -0
  16. package/dist/migrations/postgres/1688545690867-migration.js +30 -0
  17. package/dist/migrations/postgres/1713803486477-migration.d.ts +7 -0
  18. package/dist/migrations/postgres/1713803486477-migration.d.ts.map +1 -0
  19. package/dist/migrations/postgres/1713803486477-migration.js +20 -0
  20. package/dist/migrations/postgres/1718789786123-migration.d.ts +7 -0
  21. package/dist/migrations/postgres/1718789786123-migration.d.ts.map +1 -0
  22. package/dist/migrations/postgres/1718789786123-migration.js +12 -0
  23. package/dist/migrations/postgres/1722697954558-migration.d.ts +7 -0
  24. package/dist/migrations/postgres/1722697954558-migration.d.ts.map +1 -0
  25. package/dist/migrations/postgres/1722697954558-migration.js +52 -0
  26. package/dist/migrations/postgres/1746701087567-migration.d.ts +7 -0
  27. package/dist/migrations/postgres/1746701087567-migration.d.ts.map +1 -0
  28. package/dist/migrations/postgres/1746701087567-migration.js +32 -0
  29. package/dist/migrations/postgres/1747657653564-migration.d.ts +7 -0
  30. package/dist/migrations/postgres/1747657653564-migration.d.ts.map +1 -0
  31. package/dist/migrations/postgres/1747657653564-migration.js +134 -0
  32. package/dist/migrations/sqlite/1688555497475-migration.d.ts +7 -0
  33. package/dist/migrations/sqlite/1688555497475-migration.d.ts.map +1 -0
  34. package/dist/migrations/sqlite/1688555497475-migration.js +29 -0
  35. package/dist/migrations/sqlite/1713786682123-migration.d.ts +7 -0
  36. package/dist/migrations/sqlite/1713786682123-migration.d.ts.map +1 -0
  37. package/dist/migrations/sqlite/1713786682123-migration.js +20 -0
  38. package/dist/migrations/sqlite/1718789744123-migration.d.ts +7 -0
  39. package/dist/migrations/sqlite/1718789744123-migration.d.ts.map +1 -0
  40. package/dist/migrations/sqlite/1718789744123-migration.js +12 -0
  41. package/dist/migrations/sqlite/1722697111974-migration.d.ts +7 -0
  42. package/dist/migrations/sqlite/1722697111974-migration.d.ts.map +1 -0
  43. package/dist/migrations/sqlite/1722697111974-migration.js +112 -0
  44. package/dist/migrations/sqlite/1746701087234-migration.d.ts +7 -0
  45. package/dist/migrations/sqlite/1746701087234-migration.d.ts.map +1 -0
  46. package/dist/migrations/sqlite/1746701087234-migration.js +32 -0
  47. package/dist/migrations/sqlite/1747655941239-migration.d.ts +7 -0
  48. package/dist/migrations/sqlite/1747655941239-migration.d.ts.map +1 -0
  49. package/dist/migrations/sqlite/1747655941239-migration.js +134 -0
  50. package/dist/scanner/abstract/generalScanner.d.ts +63 -0
  51. package/dist/scanner/abstract/generalScanner.d.ts.map +1 -0
  52. package/dist/scanner/abstract/generalScanner.js +173 -0
  53. package/dist/scanner/abstract/scanner.d.ts +48 -0
  54. package/dist/scanner/abstract/scanner.d.ts.map +1 -0
  55. package/dist/scanner/abstract/scanner.js +154 -0
  56. package/dist/scanner/abstract/webSocketScanner.d.ts +29 -0
  57. package/dist/scanner/abstract/webSocketScanner.d.ts.map +1 -0
  58. package/dist/scanner/abstract/webSocketScanner.js +89 -0
  59. package/dist/scanner/action.d.ts +83 -0
  60. package/dist/scanner/action.d.ts.map +1 -0
  61. package/dist/scanner/action.js +251 -0
  62. package/dist/scanner/interfaces.d.ts +12 -0
  63. package/dist/scanner/interfaces.d.ts.map +1 -0
  64. package/dist/scanner/interfaces.js +2 -0
  65. package/dist/scanner/network/ConnectorSelectionStrategies.d.ts +27 -0
  66. package/dist/scanner/network/ConnectorSelectionStrategies.d.ts.map +1 -0
  67. package/dist/scanner/network/ConnectorSelectionStrategies.js +22 -0
  68. package/dist/scanner/network/NetworkConnectorManager.d.ts +64 -0
  69. package/dist/scanner/network/NetworkConnectorManager.d.ts.map +1 -0
  70. package/dist/scanner/network/NetworkConnectorManager.js +125 -0
  71. package/package.json +54 -0
@@ -0,0 +1,125 @@
1
+ import { FailoverStrategy, } from './ConnectorSelectionStrategies';
2
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
3
+ /**
4
+ * Network connector manager that can handle multiple connectors
5
+ * for a single network with pluggable selection strategy
6
+ */
7
+ export class NetworkConnectorManager {
8
+ strategy;
9
+ logger;
10
+ connectors;
11
+ currentConnectorIndex;
12
+ constructor(strategy = new FailoverStrategy(), logger = new DummyLogger()) {
13
+ this.strategy = strategy;
14
+ this.logger = logger;
15
+ this.connectors = [];
16
+ this.currentConnectorIndex = 0;
17
+ this.strategy = strategy;
18
+ this.logger.debug('NetworkConnectorManager initialized');
19
+ }
20
+ /**
21
+ * Add a new connector to the manager
22
+ * @param connector The network connector instance
23
+ */
24
+ addConnector(connector) {
25
+ this.connectors.push(connector);
26
+ this.logger.info(`Added new connector. Total connectors: ${this.connectors.length}`);
27
+ }
28
+ /**
29
+ * Get the current active connector
30
+ * @returns The current network connector instance
31
+ * @throws Error if no connectors are available
32
+ */
33
+ getCurrentConnector() {
34
+ if (this.connectors.length === 0) {
35
+ throw new Error('No connectors available');
36
+ }
37
+ this.logger.debug(`Using connector at index ${this.currentConnectorIndex}`);
38
+ return this.connectors[this.currentConnectorIndex];
39
+ }
40
+ /**
41
+ * Execute an operation using the configured strategy
42
+ * @param operation The operation to execute
43
+ * @returns The result of the operation
44
+ */
45
+ async executeWithStrategy(operation) {
46
+ if (this.connectors.length === 0) {
47
+ throw new Error('No connectors available for operation');
48
+ }
49
+ let lastError;
50
+ let attempts = 0;
51
+ const maxAttempts = this.connectors.length;
52
+ while (attempts < maxAttempts) {
53
+ try {
54
+ const connector = this.connectors[this.currentConnectorIndex];
55
+ this.logger.debug(`Attempt ${attempts + 1}/${maxAttempts} with connector at index ${this.currentConnectorIndex}`);
56
+ const result = await operation(connector);
57
+ this.currentConnectorIndex = this.strategy.selectNextConnector(this.connectors, this.currentConnectorIndex);
58
+ this.logger.debug(`Operation successful, next connector index: ${this.currentConnectorIndex}`);
59
+ return result;
60
+ }
61
+ catch (error) {
62
+ lastError = error;
63
+ this.logger.warn(`Operation failed with connector at index ${this.currentConnectorIndex}: ${lastError.message}`);
64
+ this.currentConnectorIndex = this.strategy.selectNextConnector(this.connectors, this.currentConnectorIndex, lastError);
65
+ attempts++;
66
+ }
67
+ }
68
+ throw lastError || new Error('All connectors failed');
69
+ }
70
+ /**
71
+ * Set the strategy to use for connector selection
72
+ * @param strategy The strategy to use
73
+ */
74
+ setStrategy(strategy) {
75
+ this.logger.info('Setting new connector selection strategy');
76
+ this.strategy = strategy;
77
+ }
78
+ /**
79
+ * Get a block at a specific height
80
+ * @param height The height of the block to get
81
+ * @returns The block at the specified height
82
+ */
83
+ getBlockAtHeight = async (height) => {
84
+ return this.executeWithStrategy((connector) => connector.getBlockAtHeight(height));
85
+ };
86
+ /**
87
+ * Get the current height of the blockchain
88
+ * @returns The current height
89
+ */
90
+ getCurrentHeight = async () => {
91
+ return this.executeWithStrategy((connector) => connector.getCurrentHeight());
92
+ };
93
+ /**
94
+ * Get all transactions in a block
95
+ * @param blockHash The hash of the block to get transactions from
96
+ * @returns Array of transactions in the block
97
+ */
98
+ getBlockTxs = async (blockHash) => {
99
+ return this.executeWithStrategy((connector) => connector.getBlockTxs(blockHash));
100
+ };
101
+ /**
102
+ * Get the number of available connectors
103
+ * @returns The number of connectors
104
+ */
105
+ getConnectorCount() {
106
+ const count = this.connectors.length;
107
+ this.logger.debug(`Current connector count: ${count}`);
108
+ return count;
109
+ }
110
+ /**
111
+ * Remove a connector at the specified index
112
+ * @param index The index of the connector to remove
113
+ */
114
+ removeConnector(index) {
115
+ if (index < 0 || index >= this.connectors.length) {
116
+ throw new Error('Invalid connector index');
117
+ }
118
+ this.logger.info(`Removing connector at index ${index}`);
119
+ this.connectors.splice(index, 1);
120
+ if (this.currentConnectorIndex >= this.connectors.length) {
121
+ this.currentConnectorIndex = 0;
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya0Nvbm5lY3Rvck1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9uZXR3b3JrL05ldHdvcmtDb25uZWN0b3JNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFFTCxnQkFBZ0IsR0FDakIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVFOzs7R0FHRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFPeEI7SUFDQTtJQUxGLFVBQVUsQ0FBbUQ7SUFDN0QscUJBQXFCLENBQVM7SUFFdEMsWUFDVSxXQUF3RCxJQUFJLGdCQUFnQixFQUFtQixFQUMvRixTQUF5QixJQUFJLFdBQVcsRUFBRTtRQUQxQyxhQUFRLEdBQVIsUUFBUSxDQUF1RjtRQUMvRixXQUFNLEdBQU4sTUFBTSxDQUFvQztRQUVsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVksQ0FDakIsU0FBb0Q7UUFFcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsMENBQTBDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHlC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QVMsRUFBRSxFQUFFLENBQzVDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQ2pDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSSxpQkFBaUI7UUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLEtBQWE7UUFDbEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDeEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcixcbiAgQmxvY2ssXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIENvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWd5LFxuICBGYWlsb3ZlclN0cmF0ZWd5LFxufSBmcm9tICcuL0Nvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWdpZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuXG4vKipcbiAqIE5ldHdvcmsgY29ubmVjdG9yIG1hbmFnZXIgdGhhdCBjYW4gaGFuZGxlIG11bHRpcGxlIGNvbm5lY3RvcnNcbiAqIGZvciBhIHNpbmdsZSBuZXR3b3JrIHdpdGggcGx1Z2dhYmxlIHNlbGVjdGlvbiBzdHJhdGVneVxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0Nvbm5lY3Rvck1hbmFnZXI8VHJhbnNhY3Rpb25UeXBlPlxuICBpbXBsZW1lbnRzIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxUcmFuc2FjdGlvblR5cGU+XG57XG4gIHByaXZhdGUgY29ubmVjdG9yczogQXJyYXk8QWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4+O1xuICBwcml2YXRlIGN1cnJlbnRDb25uZWN0b3JJbmRleDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RyYXRlZ3k6IENvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWd5PFRyYW5zYWN0aW9uVHlwZT4gPSBuZXcgRmFpbG92ZXJTdHJhdGVneTxUcmFuc2FjdGlvblR5cGU+KCksXG4gICAgcHJpdmF0ZSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyID0gbmV3IER1bW15TG9nZ2VyKClcbiAgKSB7XG4gICAgdGhpcy5jb25uZWN0b3JzID0gW107XG4gICAgdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXggPSAwO1xuICAgIHRoaXMuc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTmV0d29ya0Nvbm5lY3Rvck1hbmFnZXIgaW5pdGlhbGl6ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgY29ubmVjdG9yIHRvIHRoZSBtYW5hZ2VyXG4gICAqIEBwYXJhbSBjb25uZWN0b3IgVGhlIG5ldHdvcmsgY29ubmVjdG9yIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgYWRkQ29ubmVjdG9yKFxuICAgIGNvbm5lY3RvcjogQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0b3JzLnB1c2goY29ubmVjdG9yKTtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYEFkZGVkIG5ldyBjb25uZWN0b3IuIFRvdGFsIGNvbm5lY3RvcnM6ICR7dGhpcy5jb25uZWN0b3JzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbm5lY3RvclxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBuZXR3b3JrIGNvbm5lY3RvciBpbnN0YW5jZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vIGNvbm5lY3RvcnMgYXJlIGF2YWlsYWJsZVxuICAgKi9cbiAgZ2V0Q3VycmVudENvbm5lY3RvcigpOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29ubmVjdG9ycyBhdmFpbGFibGUnKTtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFVzaW5nIGNvbm5lY3RvciBhdCBpbmRleCAke3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4fWApO1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3RvcnNbdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYW4gb3BlcmF0aW9uIHVzaW5nIHRoZSBjb25maWd1cmVkIHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0byBleGVjdXRlXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlV2l0aFN0cmF0ZWd5PFQ+KFxuICAgIG9wZXJhdGlvbjogKFxuICAgICAgY29ubmVjdG9yOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPlxuICAgICkgPT4gUHJvbWlzZTxUPlxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25uZWN0b3JzIGF2YWlsYWJsZSBmb3Igb3BlcmF0aW9uJyk7XG4gICAgfVxuXG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IHRoaXMuY29ubmVjdG9ycy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzW3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4XTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEF0dGVtcHQgJHthdHRlbXB0cyArIDF9LyR7bWF4QXR0ZW1wdHN9IHdpdGggY29ubmVjdG9yIGF0IGluZGV4ICR7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleFxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbihjb25uZWN0b3IpO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IHRoaXMuc3RyYXRlZ3kuc2VsZWN0TmV4dENvbm5lY3RvcihcbiAgICAgICAgICB0aGlzLmNvbm5lY3RvcnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYE9wZXJhdGlvbiBzdWNjZXNzZnVsLCBuZXh0IGNvbm5lY3RvciBpbmRleDogJHt0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleH1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBhcyBFcnJvcjtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICBgT3BlcmF0aW9uIGZhaWxlZCB3aXRoIGNvbm5lY3RvciBhdCBpbmRleCAke3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4fTogJHtsYXN0RXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VycmVudENvbm5lY3RvckluZGV4ID0gdGhpcy5zdHJhdGVneS5zZWxlY3ROZXh0Q29ubmVjdG9yKFxuICAgICAgICAgIHRoaXMuY29ubmVjdG9ycyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCxcbiAgICAgICAgICBsYXN0RXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignQWxsIGNvbm5lY3RvcnMgZmFpbGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdHJhdGVneSB0byB1c2UgZm9yIGNvbm5lY3RvciBzZWxlY3Rpb25cbiAgICogQHBhcmFtIHN0cmF0ZWd5IFRoZSBzdHJhdGVneSB0byB1c2VcbiAgICovXG4gIHB1YmxpYyBzZXRTdHJhdGVneShcbiAgICBzdHJhdGVneTogQ29ubmVjdG9yU2VsZWN0aW9uU3RyYXRlZ3k8VHJhbnNhY3Rpb25UeXBlPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKCdTZXR0aW5nIG5ldyBjb25uZWN0b3Igc2VsZWN0aW9uIHN0cmF0ZWd5Jyk7XG4gICAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGJsb2NrIGF0IGEgc3BlY2lmaWMgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgYmxvY2sgdG8gZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBibG9jayBhdCB0aGUgc3BlY2lmaWVkIGhlaWdodFxuICAgKi9cbiAgZ2V0QmxvY2tBdEhlaWdodCA9IGFzeW5jIChoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8QmxvY2s+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlV2l0aFN0cmF0ZWd5KChjb25uZWN0b3IpID0+XG4gICAgICBjb25uZWN0b3IuZ2V0QmxvY2tBdEhlaWdodChoZWlnaHQpXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGhlaWdodCBvZiB0aGUgYmxvY2tjaGFpblxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBoZWlnaHRcbiAgICovXG4gIGdldEN1cnJlbnRIZWlnaHQgPSBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlV2l0aFN0cmF0ZWd5KChjb25uZWN0b3IpID0+XG4gICAgICBjb25uZWN0b3IuZ2V0Q3VycmVudEhlaWdodCgpXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGFsbCB0cmFuc2FjdGlvbnMgaW4gYSBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tIYXNoIFRoZSBoYXNoIG9mIHRoZSBibG9jayB0byBnZXQgdHJhbnNhY3Rpb25zIGZyb21cbiAgICogQHJldHVybnMgQXJyYXkgb2YgdHJhbnNhY3Rpb25zIGluIHRoZSBibG9ja1xuICAgKi9cbiAgZ2V0QmxvY2tUeHMgPSBhc3luYyAoYmxvY2tIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFRyYW5zYWN0aW9uVHlwZT4+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlV2l0aFN0cmF0ZWd5KChjb25uZWN0b3IpID0+XG4gICAgICBjb25uZWN0b3IuZ2V0QmxvY2tUeHMoYmxvY2tIYXNoKVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb25uZWN0b3JzXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY29ubmVjdG9yc1xuICAgKi9cbiAgcHVibGljIGdldENvbm5lY3RvckNvdW50KCk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDdXJyZW50IGNvbm5lY3RvciBjb3VudDogJHtjb3VudH1gKTtcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29ubmVjdG9yIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgY29ubmVjdG9yIHRvIHJlbW92ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNvbm5lY3RvcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29ubmVjdG9yIGluZGV4Jyk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmluZm8oYFJlbW92aW5nIGNvbm5lY3RvciBhdCBpbmRleCAke2luZGV4fWApO1xuICAgIHRoaXMuY29ubmVjdG9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA+PSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@rosen-bridge/abstract-scanner",
3
+ "version": "0.1.0-52fc0239",
4
+ "description": "Abstract scanner toolkit for blockchain scanning with logging.",
5
+ "author": "Rosen Team",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "scripts": {
10
+ "prettify": "prettier --write . --ignore-path ../../.gitignore",
11
+ "lint": "eslint --fix . && npm run prettify",
12
+ "test": "jest",
13
+ "coverage": "jest --detectOpenHandles --coverage",
14
+ "build": "tsc --build",
15
+ "type-check": "tsc --noEmit",
16
+ "release": "npm run test && npm run build && npm publish --access public"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/rosen-bridge/scanner"
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "dependencies": {
26
+ "@rosen-bridge/abstract-extractor": "^2.0.3-52fc0239",
27
+ "@rosen-bridge/abstract-logger": "^2.0.1",
28
+ "@rosen-bridge/json-bigint": "^0.1.0",
29
+ "@rosen-bridge/scanner-interfaces": "^0.1.1-52fc0239",
30
+ "await-semaphore": "^0.1.3",
31
+ "lodash-es": "^4.17.21",
32
+ "reflect-metadata": "^0.1.13",
33
+ "sqlite3": "^5.1.7",
34
+ "@rosen-bridge/extended-typeorm": "^0.2.1"
35
+ },
36
+ "type": "module",
37
+ "devDependencies": {
38
+ "@babel/preset-env": "^7.19.0",
39
+ "@types/jest": "^28.1.6",
40
+ "@types/lodash-es": "^4.17.12",
41
+ "@types/node": "^22.18.0",
42
+ "@typescript-eslint/eslint-plugin": "^5.30.7",
43
+ "@typescript-eslint/parser": "^5.26.0",
44
+ "eslint": "^8.16.0",
45
+ "eslint-config-prettier": "^8.5.0",
46
+ "jest": "^28.1.3",
47
+ "prettier": "2.7.1",
48
+ "ts-jest": "^28.0.7",
49
+ "typescript": "^4.7.4"
50
+ },
51
+ "engines": {
52
+ "node": ">=22.18.0"
53
+ }
54
+ }