@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.
- package/README.md +49 -0
- package/dist/entities/blockEntity.d.ts +17 -0
- package/dist/entities/blockEntity.d.ts.map +1 -0
- package/dist/entities/blockEntity.js +78 -0
- package/dist/entities/extractorStatusEntity.d.ts +7 -0
- package/dist/entities/extractorStatusEntity.d.ts.map +1 -0
- package/dist/entities/extractorStatusEntity.js +37 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/migrations/index.d.ts +7 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +31 -0
- package/dist/migrations/postgres/1688545690867-migration.d.ts +7 -0
- package/dist/migrations/postgres/1688545690867-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1688545690867-migration.js +30 -0
- package/dist/migrations/postgres/1713803486477-migration.d.ts +7 -0
- package/dist/migrations/postgres/1713803486477-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1713803486477-migration.js +20 -0
- package/dist/migrations/postgres/1718789786123-migration.d.ts +7 -0
- package/dist/migrations/postgres/1718789786123-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1718789786123-migration.js +12 -0
- package/dist/migrations/postgres/1722697954558-migration.d.ts +7 -0
- package/dist/migrations/postgres/1722697954558-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1722697954558-migration.js +52 -0
- package/dist/migrations/postgres/1746701087567-migration.d.ts +7 -0
- package/dist/migrations/postgres/1746701087567-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1746701087567-migration.js +32 -0
- package/dist/migrations/postgres/1747657653564-migration.d.ts +7 -0
- package/dist/migrations/postgres/1747657653564-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1747657653564-migration.js +134 -0
- package/dist/migrations/sqlite/1688555497475-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1688555497475-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1688555497475-migration.js +29 -0
- package/dist/migrations/sqlite/1713786682123-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1713786682123-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1713786682123-migration.js +20 -0
- package/dist/migrations/sqlite/1718789744123-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1718789744123-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1718789744123-migration.js +12 -0
- package/dist/migrations/sqlite/1722697111974-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1722697111974-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1722697111974-migration.js +112 -0
- package/dist/migrations/sqlite/1746701087234-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1746701087234-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1746701087234-migration.js +32 -0
- package/dist/migrations/sqlite/1747655941239-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1747655941239-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1747655941239-migration.js +134 -0
- package/dist/scanner/abstract/generalScanner.d.ts +63 -0
- package/dist/scanner/abstract/generalScanner.d.ts.map +1 -0
- package/dist/scanner/abstract/generalScanner.js +173 -0
- package/dist/scanner/abstract/scanner.d.ts +48 -0
- package/dist/scanner/abstract/scanner.d.ts.map +1 -0
- package/dist/scanner/abstract/scanner.js +154 -0
- package/dist/scanner/abstract/webSocketScanner.d.ts +29 -0
- package/dist/scanner/abstract/webSocketScanner.d.ts.map +1 -0
- package/dist/scanner/abstract/webSocketScanner.js +89 -0
- package/dist/scanner/action.d.ts +83 -0
- package/dist/scanner/action.d.ts.map +1 -0
- package/dist/scanner/action.js +251 -0
- package/dist/scanner/interfaces.d.ts +12 -0
- package/dist/scanner/interfaces.d.ts.map +1 -0
- package/dist/scanner/interfaces.js +2 -0
- package/dist/scanner/network/ConnectorSelectionStrategies.d.ts +27 -0
- package/dist/scanner/network/ConnectorSelectionStrategies.d.ts.map +1 -0
- package/dist/scanner/network/ConnectorSelectionStrategies.js +22 -0
- package/dist/scanner/network/NetworkConnectorManager.d.ts +64 -0
- package/dist/scanner/network/NetworkConnectorManager.d.ts.map +1 -0
- package/dist/scanner/network/NetworkConnectorManager.js +125 -0
- 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
|
+
}
|