@rosen-bridge/raw-data-provider 0.1.0-0022763f
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 +7 -0
- package/README.md +24 -0
- package/dist/abstractRawDataProvider.d.ts +40 -0
- package/dist/abstractRawDataProvider.d.ts.map +1 -0
- package/dist/abstractRawDataProvider.js +89 -0
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +2 -0
- package/dist/actions/rawDataProviderStateEntityAction.d.ts +42 -0
- package/dist/actions/rawDataProviderStateEntityAction.d.ts.map +1 -0
- package/dist/actions/rawDataProviderStateEntityAction.js +65 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2 -0
- package/dist/entities/index.d.ts +2 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +2 -0
- package/dist/entities/rawDataProviderStateEntity.d.ts +6 -0
- package/dist/entities/rawDataProviderStateEntity.d.ts.map +1 -0
- package/dist/entities/rawDataProviderStateEntity.js +32 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/migrations/index.d.ts +7 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +7 -0
- package/dist/migrations/postgres/1762178180934-migration.d.ts +7 -0
- package/dist/migrations/postgres/1762178180934-migration.d.ts.map +1 -0
- package/dist/migrations/postgres/1762178180934-migration.js +18 -0
- package/dist/migrations/postgres/index.d.ts +2 -0
- package/dist/migrations/postgres/index.d.ts.map +1 -0
- package/dist/migrations/postgres/index.js +2 -0
- package/dist/migrations/sqlite/1762178166781-migration.d.ts +7 -0
- package/dist/migrations/sqlite/1762178166781-migration.d.ts.map +1 -0
- package/dist/migrations/sqlite/1762178166781-migration.js +18 -0
- package/dist/migrations/sqlite/index.d.ts +2 -0
- package/dist/migrations/sqlite/index.d.ts.map +1 -0
- package/dist/migrations/sqlite/index.js +2 -0
- package/dist/providers/bitcoin/bitcoinEsploraRawDataProvider.d.ts +20 -0
- package/dist/providers/bitcoin/bitcoinEsploraRawDataProvider.d.ts.map +1 -0
- package/dist/providers/bitcoin/bitcoinEsploraRawDataProvider.js +38 -0
- package/dist/providers/bitcoin/bitcoinRpcRawDataProvider.d.ts +21 -0
- package/dist/providers/bitcoin/bitcoinRpcRawDataProvider.d.ts.map +1 -0
- package/dist/providers/bitcoin/bitcoinRpcRawDataProvider.js +49 -0
- package/dist/providers/bitcoin/index.d.ts +2 -0
- package/dist/providers/bitcoin/index.d.ts.map +1 -0
- package/dist/providers/bitcoin/index.js +2 -0
- package/dist/providers/bitcoinRunes/bitcoinRunesRpcRawDataProvider.d.ts +21 -0
- package/dist/providers/bitcoinRunes/bitcoinRunesRpcRawDataProvider.d.ts.map +1 -0
- package/dist/providers/bitcoinRunes/bitcoinRunesRpcRawDataProvider.js +49 -0
- package/dist/providers/bitcoinRunes/index.d.ts +2 -0
- package/dist/providers/bitcoinRunes/index.d.ts.map +1 -0
- package/dist/providers/bitcoinRunes/index.js +2 -0
- package/dist/providers/cardano/cardanoKoiosRawDataProvider.d.ts +108 -0
- package/dist/providers/cardano/cardanoKoiosRawDataProvider.d.ts.map +1 -0
- package/dist/providers/cardano/cardanoKoiosRawDataProvider.js +44 -0
- package/dist/providers/cardano/index.d.ts +2 -0
- package/dist/providers/cardano/index.d.ts.map +1 -0
- package/dist/providers/cardano/index.js +2 -0
- package/dist/providers/doge/dogeRpcRawDataProvider.d.ts +21 -0
- package/dist/providers/doge/dogeRpcRawDataProvider.d.ts.map +1 -0
- package/dist/providers/doge/dogeRpcRawDataProvider.js +49 -0
- package/dist/providers/doge/index.d.ts +2 -0
- package/dist/providers/doge/index.d.ts.map +1 -0
- package/dist/providers/doge/index.js +2 -0
- package/dist/providers/ergo/ergoExplorerRawDataProvider.d.ts +95 -0
- package/dist/providers/ergo/ergoExplorerRawDataProvider.d.ts.map +1 -0
- package/dist/providers/ergo/ergoExplorerRawDataProvider.js +44 -0
- package/dist/providers/ergo/ergoNodeRawDataProvider.d.ts +148 -0
- package/dist/providers/ergo/ergoNodeRawDataProvider.d.ts.map +1 -0
- package/dist/providers/ergo/ergoNodeRawDataProvider.js +47 -0
- package/dist/providers/ergo/index.d.ts +3 -0
- package/dist/providers/ergo/index.d.ts.map +1 -0
- package/dist/providers/ergo/index.js +3 -0
- package/dist/providers/evm/evmRawDataProvider.d.ts +23 -0
- package/dist/providers/evm/evmRawDataProvider.d.ts.map +1 -0
- package/dist/providers/evm/evmRawDataProvider.js +54 -0
- package/dist/providers/evm/index.d.ts +2 -0
- package/dist/providers/evm/index.d.ts.map +1 -0
- package/dist/providers/evm/index.js +2 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +7 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/package.json +57 -0
package/CHANGELOG.md
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @rosen-bridge/raw-data-provider
|
|
2
|
+
|
|
3
|
+
## Table of contents
|
|
4
|
+
|
|
5
|
+
- [Introduction](#introduction)
|
|
6
|
+
- [Installation](#installation)
|
|
7
|
+
|
|
8
|
+
## Introduction
|
|
9
|
+
|
|
10
|
+
This package populates missing rawData values for extractors records stored in the database.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
npm:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm i @rosen-bridge/raw-data-provider
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
yarn:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
yarn add @rosen-bridge/raw-data-provider
|
|
24
|
+
```
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ObservationEntity } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
|
+
import { RawDataProviderStateEntityAction } from './actions/rawDataProviderStateEntityAction';
|
|
5
|
+
import { RawDataProviderStateEntity } from './entities';
|
|
6
|
+
export declare abstract class AbstractRawDataProvider {
|
|
7
|
+
protected chain: string;
|
|
8
|
+
protected dataSource: DataSource;
|
|
9
|
+
protected logger: AbstractLogger;
|
|
10
|
+
protected action: RawDataProviderStateEntityAction;
|
|
11
|
+
constructor(chain: string, dataSource: DataSource, logger?: AbstractLogger);
|
|
12
|
+
/**
|
|
13
|
+
* Retrieves the current RawDataProviderStateEntity for the configured chain.
|
|
14
|
+
*
|
|
15
|
+
* @returns The existing or newly created RawDataProviderStateEntity
|
|
16
|
+
*/
|
|
17
|
+
protected fetchOrCreateStateForChain: () => Promise<RawDataProviderStateEntity>;
|
|
18
|
+
/**
|
|
19
|
+
* Iterates through observations of the current chain and fills their rawData field.
|
|
20
|
+
* Updates the syncedHeight after each processed observation until the chain is fully synced.
|
|
21
|
+
*
|
|
22
|
+
* @returns void
|
|
23
|
+
*/
|
|
24
|
+
fillRawData: () => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Process observation and write rawData
|
|
27
|
+
*
|
|
28
|
+
* @param observation
|
|
29
|
+
* @return {boolean} determining result of process done successfully or no
|
|
30
|
+
*/
|
|
31
|
+
protected abstract processObservation: (observation: ObservationEntity) => Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Fills the raw data field for all ObservationEntity records of the current chain of input RawDataProviderStateEntity
|
|
34
|
+
*
|
|
35
|
+
* @param state
|
|
36
|
+
* @returns
|
|
37
|
+
*/
|
|
38
|
+
protected fillObservationsRawData: (state: RawDataProviderStateEntity) => Promise<RawDataProviderStateEntity>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=abstractRawDataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstractRawDataProvider.d.ts","sourceRoot":"","sources":["../lib/abstractRawDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,8BAAsB,uBAAuB;IAIzC,SAAS,CAAC,KAAK,EAAE,MAAM;IACvB,SAAS,CAAC,UAAU,EAAE,UAAU;IAChC,SAAS,CAAC,MAAM,EAAE,cAAc;IALlC,SAAS,CAAC,MAAM,EAAE,gCAAgC,CAAC;gBAGvC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,cAAkC;IAKtD;;;;OAIG;IACH,SAAS,CAAC,0BAA0B,QACxB,OAAO,CAAC,0BAA0B,CAAC,CAuB3C;IAEJ;;;;;OAKG;IACH,WAAW,QAAa,OAAO,CAAC,IAAI,CAAC,CAwBnC;IAEF;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CACrC,WAAW,EAAE,iBAAiB,KAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,GAC/B,OAAO,0BAA0B,KAChC,OAAO,CAAC,0BAA0B,CAAC,CAgCpC;CACH"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { RawDataProviderStateEntityAction } from './actions/rawDataProviderStateEntityAction';
|
|
3
|
+
export class AbstractRawDataProvider {
|
|
4
|
+
chain;
|
|
5
|
+
dataSource;
|
|
6
|
+
logger;
|
|
7
|
+
action;
|
|
8
|
+
constructor(chain, dataSource, logger = new DummyLogger()) {
|
|
9
|
+
this.chain = chain;
|
|
10
|
+
this.dataSource = dataSource;
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.action = new RawDataProviderStateEntityAction(dataSource, logger);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves the current RawDataProviderStateEntity for the configured chain.
|
|
16
|
+
*
|
|
17
|
+
* @returns The existing or newly created RawDataProviderStateEntity
|
|
18
|
+
*/
|
|
19
|
+
fetchOrCreateStateForChain = async () => {
|
|
20
|
+
let state = await this.action.fetchByChain(this.chain);
|
|
21
|
+
if (!state) {
|
|
22
|
+
const latestChainObservation = await this.action.fetchLatestObservationByChain(this.chain);
|
|
23
|
+
let lastHeight = 0;
|
|
24
|
+
if (!latestChainObservation) {
|
|
25
|
+
this.logger.warn(`Not find any ObservationEntity for the ${this.chain} chain`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
lastHeight = latestChainObservation.height;
|
|
29
|
+
}
|
|
30
|
+
state = await this.action.store({
|
|
31
|
+
chain: this.chain,
|
|
32
|
+
lastHeight: lastHeight,
|
|
33
|
+
syncedHeight: 0,
|
|
34
|
+
});
|
|
35
|
+
this.logger.debug(`Created RawDataProviderStateEntity on [${this.chain}] chain at height ${lastHeight}`);
|
|
36
|
+
}
|
|
37
|
+
return state;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Iterates through observations of the current chain and fills their rawData field.
|
|
41
|
+
* Updates the syncedHeight after each processed observation until the chain is fully synced.
|
|
42
|
+
*
|
|
43
|
+
* @returns void
|
|
44
|
+
*/
|
|
45
|
+
fillRawData = async () => {
|
|
46
|
+
this.logger.info(`RawDataProvider Starting raw-data filling for [${this.chain}] chain`);
|
|
47
|
+
let state = await this.fetchOrCreateStateForChain();
|
|
48
|
+
while (state.syncedHeight < state.lastHeight) {
|
|
49
|
+
this.logger.debug(`RawDataProvider Fetching observations for [${this.chain}] chain from height > ${state.syncedHeight}`);
|
|
50
|
+
try {
|
|
51
|
+
const result = await this.fillObservationsRawData(state);
|
|
52
|
+
state = result;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
this.logger.error(`RawDataProvider Error: ${err}`);
|
|
56
|
+
if (err instanceof Error && err.stack)
|
|
57
|
+
this.logger.error(err.stack);
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.logger.info(`RawDataProvider Finished filling raw-data for [${this.chain}] chain`);
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Fills the raw data field for all ObservationEntity records of the current chain of input RawDataProviderStateEntity
|
|
65
|
+
*
|
|
66
|
+
* @param state
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
fillObservationsRawData = async (state) => {
|
|
70
|
+
const observations = await this.action.fetchChainObservations(this.chain, state.syncedHeight);
|
|
71
|
+
if (observations.length === 0)
|
|
72
|
+
throw new Error(`ImpossibleBehavior: No more observations found for [${this.chain}] chain`);
|
|
73
|
+
for (const observation of observations) {
|
|
74
|
+
this.logger.debug(`RawDataProvider Updating rawData for observation at height ${observation.height} for [${this.chain}] chain`);
|
|
75
|
+
const isSuccess = await this.processObservation(observation);
|
|
76
|
+
if (isSuccess) {
|
|
77
|
+
this.logger.debug(`RawDataProvider successfully processed observation at height ${observation.height} for [${this.chain}] chain`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw new Error(`RawDataProvider failed to process observation at height ${observation.height} for [${this.chain}] chain`);
|
|
81
|
+
}
|
|
82
|
+
state.syncedHeight = observation.height;
|
|
83
|
+
await this.action.store(state);
|
|
84
|
+
this.logger.debug(`RawDataProvider syncedHeight updated to ${observation.height} for [${this.chain}] chain`);
|
|
85
|
+
}
|
|
86
|
+
return state;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RSYXdEYXRhUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvYWJzdHJhY3RSYXdEYXRhUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUk1RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUc5RixNQUFNLE9BQWdCLHVCQUF1QjtJQUkvQjtJQUNBO0lBQ0E7SUFMRixNQUFNLENBQW1DO0lBRW5ELFlBQ1ksS0FBYSxFQUNiLFVBQXNCLEVBQ3RCLFNBQXlCLElBQUksV0FBVyxFQUFFO1FBRjFDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQW9DO1FBRXBELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O09BSUc7SUFDTywwQkFBMEIsR0FDbEMsS0FBSyxJQUF5QyxFQUFFO1FBQzlDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sc0JBQXNCLEdBQzFCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCwwQ0FBMEMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUM3RCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNO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QUFNLENBQUM7WUFDeEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwyQ0FBMkMsV0FBVyxDQUFDLE1BQU0sU0FBUyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQzFGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IE9ic2VydmF0aW9uRW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5cbmltcG9ydCB7IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25zL3Jhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5QWN0aW9uJztcbmltcG9ydCB7IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IH0gZnJvbSAnLi9lbnRpdGllcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJhd0RhdGFQcm92aWRlciB7XG4gIHByb3RlY3RlZCBhY3Rpb246IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5QWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGFpbjogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIHByb3RlY3RlZCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyID0gbmV3IER1bW15TG9nZ2VyKCksXG4gICkge1xuICAgIHRoaXMuYWN0aW9uID0gbmV3IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5QWN0aW9uKGRhdGFTb3VyY2UsIGxvZ2dlcik7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IGZvciB0aGUgY29uZmlndXJlZCBjaGFpbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGV4aXN0aW5nIG9yIG5ld2x5IGNyZWF0ZWQgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlcbiAgICovXG4gIHByb3RlY3RlZCBmZXRjaE9yQ3JlYXRlU3RhdGVGb3JDaGFpbiA9XG4gICAgYXN5bmMgKCk6IFByb21pc2U8UmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHk+ID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuYWN0aW9uLmZldGNoQnlDaGFpbih0aGlzLmNoYWluKTtcbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgY29uc3QgbGF0ZXN0Q2hhaW5PYnNlcnZhdGlvbiA9XG4gICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb24uZmV0Y2hMYXRlc3RPYnNlcnZhdGlvbkJ5Q2hhaW4odGhpcy5jaGFpbik7XG4gICAgICAgIGxldCBsYXN0SGVpZ2h0ID0gMDtcbiAgICAgICAgaWYgKCFsYXRlc3RDaGFpbk9ic2VydmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICAgIGBOb3QgZmluZCBhbnkgT2JzZXJ2YXRpb25FbnRpdHkgZm9yIHRoZSAke3RoaXMuY2hhaW59IGNoYWluYCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RIZWlnaHQgPSBsYXRlc3RDaGFpbk9ic2VydmF0aW9uLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuYWN0aW9uLnN0b3JlKHtcbiAgICAgICAgICBjaGFpbjogdGhpcy5jaGFpbixcbiAgICAgICAgICBsYXN0SGVpZ2h0OiBsYXN0SGVpZ2h0LFxuICAgICAgICAgIHN5bmNlZEhlaWdodDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBDcmVhdGVkIFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IG9uIFske3RoaXMuY2hhaW59XSBjaGFpbiBhdCBoZWlnaHQgJHtsYXN0SGVpZ2h0fWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgdGhyb3VnaCBvYnNlcnZhdGlvbnMgb2YgdGhlIGN1cnJlbnQgY2hhaW4gYW5kIGZpbGxzIHRoZWlyIHJhd0RhdGEgZmllbGQuXG4gICAqIFVwZGF0ZXMgdGhlIHN5bmNlZEhlaWdodCBhZnRlciBlYWNoIHByb2Nlc3NlZCBvYnNlcnZhdGlvbiB1bnRpbCB0aGUgY2hhaW4gaXMgZnVsbHkgc3luY2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBmaWxsUmF3RGF0YSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYFJhd0RhdGFQcm92aWRlciBTdGFydGluZyByYXctZGF0YSBmaWxsaW5nIGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW5gLFxuICAgICk7XG5cbiAgICBsZXQgc3RhdGU6IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5ID1cbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hPckNyZWF0ZVN0YXRlRm9yQ2hhaW4oKTtcbiAgICB3aGlsZSAoc3RhdGUuc3luY2VkSGVpZ2h0IDwgc3RhdGUubGFzdEhlaWdodCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBSYXdEYXRhUHJvdmlkZXIgRmV0Y2hpbmcgb2JzZXJ2YXRpb25zIGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW4gZnJvbSBoZWlnaHQgPiAke3N0YXRlLnN5bmNlZEhlaWdodH1gLFxuICAgICAgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZmlsbE9ic2VydmF0aW9uc1Jhd0RhdGEoc3RhdGUpO1xuICAgICAgICBzdGF0ZSA9IHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgUmF3RGF0YVByb3ZpZGVyIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5zdGFjaykgdGhpcy5sb2dnZXIuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgIGBSYXdEYXRhUHJvdmlkZXIgRmluaXNoZWQgZmlsbGluZyByYXctZGF0YSBmb3IgWyR7dGhpcy5jaGFpbn1dIGNoYWluYCxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIG9ic2VydmF0aW9uIGFuZCB3cml0ZSByYXdEYXRhXG4gICAqXG4gICAqIEBwYXJhbSBvYnNlcnZhdGlvblxuICAgKiBAcmV0dXJuIHtib29sZWFufSBkZXRlcm1pbmluZyByZXN1bHQgb2YgcHJvY2VzcyBkb25lIHN1Y2Nlc3NmdWxseSBvciBub1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByb2Nlc3NPYnNlcnZhdGlvbjogKFxuICAgIG9ic2VydmF0aW9uOiBPYnNlcnZhdGlvbkVudGl0eSxcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBGaWxscyB0aGUgcmF3IGRhdGEgZmllbGQgZm9yIGFsbCBPYnNlcnZhdGlvbkVudGl0eSByZWNvcmRzIG9mIHRoZSBjdXJyZW50IGNoYWluIG9mIGlucHV0IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5XG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIGZpbGxPYnNlcnZhdGlvbnNSYXdEYXRhID0gYXN5bmMgKFxuICAgIHN0YXRlOiBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSxcbiAgKTogUHJvbWlzZTxSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eT4gPT4ge1xuICAgIGNvbnN0IG9ic2VydmF0aW9ucyA9IGF3YWl0IHRoaXMuYWN0aW9uLmZldGNoQ2hhaW5PYnNlcnZhdGlvbnMoXG4gICAgICB0aGlzLmNoYWluLFxuICAgICAgc3RhdGUuc3luY2VkSGVpZ2h0LFxuICAgICk7XG5cbiAgICBpZiAob2JzZXJ2YXRpb25zLmxlbmd0aCA9PT0gMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEltcG9zc2libGVCZWhhdmlvcjogTm8gbW9yZSBvYnNlcnZhdGlvbnMgZm91bmQgZm9yIFske3RoaXMuY2hhaW59XSBjaGFpbmAsXG4gICAgICApO1xuXG4gICAgZm9yIChjb25zdCBvYnNlcnZhdGlvbiBvZiBvYnNlcnZhdGlvbnMpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUmF3RGF0YVByb3ZpZGVyIFVwZGF0aW5nIHJhd0RhdGEgZm9yIG9ic2VydmF0aW9uIGF0IGhlaWdodCAke29ic2VydmF0aW9uLmhlaWdodH0gZm9yIFske3RoaXMuY2hhaW59XSBjaGFpbmAsXG4gICAgICApO1xuICAgICAgY29uc3QgaXNTdWNjZXNzID0gYXdhaXQgdGhpcy5wcm9jZXNzT2JzZXJ2YXRpb24ob2JzZXJ2YXRpb24pO1xuICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgUmF3RGF0YVByb3ZpZGVyIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgb2JzZXJ2YXRpb24gYXQgaGVpZ2h0ICR7b2JzZXJ2YXRpb24uaGVpZ2h0fSBmb3IgWyR7dGhpcy5jaGFpbn1dIGNoYWluYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUmF3RGF0YVByb3ZpZGVyIGZhaWxlZCB0byBwcm9jZXNzIG9ic2VydmF0aW9uIGF0IGhlaWdodCAke29ic2VydmF0aW9uLmhlaWdodH0gZm9yIFske3RoaXMuY2hhaW59XSBjaGFpbmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5zeW5jZWRIZWlnaHQgPSBvYnNlcnZhdGlvbi5oZWlnaHQ7XG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbi5zdG9yZShzdGF0ZSk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJhd0RhdGFQcm92aWRlciBzeW5jZWRIZWlnaHQgdXBkYXRlZCB0byAke29ic2VydmF0aW9uLmhlaWdodH0gZm9yIFske3RoaXMuY2hhaW59XSBjaGFpbmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { RawDataProviderStateEntityAction } from './rawDataProviderStateEntityAction';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9yYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eUFjdGlvbic7XG4iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ObservationEntity } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
|
+
import { DataSource, Repository } from '@rosen-bridge/extended-typeorm';
|
|
4
|
+
import { RawDataProviderStateEntity } from '../entities';
|
|
5
|
+
export declare class RawDataProviderStateEntityAction {
|
|
6
|
+
protected dataSource: DataSource;
|
|
7
|
+
protected logger: AbstractLogger;
|
|
8
|
+
protected readonly repository: Repository<RawDataProviderStateEntity>;
|
|
9
|
+
protected readonly observationRepository: Repository<ObservationEntity>;
|
|
10
|
+
constructor(dataSource: DataSource, logger?: AbstractLogger);
|
|
11
|
+
/**
|
|
12
|
+
* Stores one RawDataProviderStateEntity in the database
|
|
13
|
+
*
|
|
14
|
+
* @param rawDataProviderEntities
|
|
15
|
+
* @returns {RawDataProviderStateEntity} saved instance
|
|
16
|
+
*/
|
|
17
|
+
store: (rawDataProviderEntity: RawDataProviderStateEntity) => Promise<RawDataProviderStateEntity>;
|
|
18
|
+
/**
|
|
19
|
+
* Retrieves the RawDataProviderStateEntity of specific chain
|
|
20
|
+
*
|
|
21
|
+
* @param chain
|
|
22
|
+
* @returns {RawDataProviderStateEntity | null} Chain-related state, or null if not found
|
|
23
|
+
*/
|
|
24
|
+
fetchByChain: (chain: string) => Promise<RawDataProviderStateEntity | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Retrieves the latest ObservationEntity for the specified chain
|
|
27
|
+
*
|
|
28
|
+
* @param chain
|
|
29
|
+
* @returns {ObservationEntity | null} Latest related observation, or null if not found
|
|
30
|
+
*/
|
|
31
|
+
fetchLatestObservationByChain: (chain: string) => Promise<ObservationEntity | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Fetches a batch of ObservationEntity records for the given chain
|
|
34
|
+
*
|
|
35
|
+
* @param chain
|
|
36
|
+
* @param offsetHeight
|
|
37
|
+
* @param length
|
|
38
|
+
* @returns {ObservationEntity[]} Chain-related observations
|
|
39
|
+
*/
|
|
40
|
+
fetchChainObservations: (chain: string, offsetHeight: number, length?: number) => Promise<ObservationEntity[]>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=rawDataProviderStateEntityAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawDataProviderStateEntityAction.d.ts","sourceRoot":"","sources":["../../lib/actions/rawDataProviderStateEntityAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EACL,UAAU,EAEV,UAAU,EACX,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,qBAAa,gCAAgC;IAKzC,SAAS,CAAC,UAAU,EAAE,UAAU;IAChC,SAAS,CAAC,MAAM,EAAE,cAAc;IALlC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,0BAA0B,CAAC,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBAG5D,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,cAAkC;IAMtD;;;;;OAKG;IACH,KAAK,GACH,uBAAuB,0BAA0B,KAChD,OAAO,CAAC,0BAA0B,CAAC,CAMpC;IAEF;;;;;OAKG;IACH,YAAY,GACV,OAAO,MAAM,KACZ,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAE3C;IAEF;;;;;OAKG;IACH,6BAA6B,GAC3B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAKlC;IAEF;;;;;;;OAOG;IACH,sBAAsB,GACpB,OAAO,MAAM,EACb,cAAc,MAAM,EACpB,SAAQ,MAA+B,KACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAM7B;CACH"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ObservationEntity } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
|
+
import { MoreThan, } from '@rosen-bridge/extended-typeorm';
|
|
4
|
+
import { OBSERVATION_BATCH_SIZE } from '../constants';
|
|
5
|
+
import { RawDataProviderStateEntity } from '../entities';
|
|
6
|
+
export class RawDataProviderStateEntityAction {
|
|
7
|
+
dataSource;
|
|
8
|
+
logger;
|
|
9
|
+
repository;
|
|
10
|
+
observationRepository;
|
|
11
|
+
constructor(dataSource, logger = new DummyLogger()) {
|
|
12
|
+
this.dataSource = dataSource;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
this.repository = dataSource.getRepository(RawDataProviderStateEntity);
|
|
15
|
+
this.observationRepository = dataSource.getRepository(ObservationEntity);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Stores one RawDataProviderStateEntity in the database
|
|
19
|
+
*
|
|
20
|
+
* @param rawDataProviderEntities
|
|
21
|
+
* @returns {RawDataProviderStateEntity} saved instance
|
|
22
|
+
*/
|
|
23
|
+
store = async (rawDataProviderEntity) => {
|
|
24
|
+
const state = await this.repository.save(rawDataProviderEntity);
|
|
25
|
+
this.logger.debug(`raw-data for chain state [${JSON.stringify(rawDataProviderEntity)}] stored in database`);
|
|
26
|
+
return state;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Retrieves the RawDataProviderStateEntity of specific chain
|
|
30
|
+
*
|
|
31
|
+
* @param chain
|
|
32
|
+
* @returns {RawDataProviderStateEntity | null} Chain-related state, or null if not found
|
|
33
|
+
*/
|
|
34
|
+
fetchByChain = async (chain) => {
|
|
35
|
+
return await this.repository.findOne({ where: { chain: chain } });
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Retrieves the latest ObservationEntity for the specified chain
|
|
39
|
+
*
|
|
40
|
+
* @param chain
|
|
41
|
+
* @returns {ObservationEntity | null} Latest related observation, or null if not found
|
|
42
|
+
*/
|
|
43
|
+
fetchLatestObservationByChain = async (chain) => {
|
|
44
|
+
return await this.observationRepository.findOne({
|
|
45
|
+
where: { fromChain: chain, rawData: '' },
|
|
46
|
+
order: { height: 'DESC' },
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Fetches a batch of ObservationEntity records for the given chain
|
|
51
|
+
*
|
|
52
|
+
* @param chain
|
|
53
|
+
* @param offsetHeight
|
|
54
|
+
* @param length
|
|
55
|
+
* @returns {ObservationEntity[]} Chain-related observations
|
|
56
|
+
*/
|
|
57
|
+
fetchChainObservations = async (chain, offsetHeight, length = OBSERVATION_BATCH_SIZE) => {
|
|
58
|
+
return await this.observationRepository.find({
|
|
59
|
+
where: { fromChain: chain, height: MoreThan(offsetHeight) },
|
|
60
|
+
order: { height: 'ASC' },
|
|
61
|
+
take: length,
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlBY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWN0aW9ucy9yYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eUFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pGLE9BQU8sRUFFTCxRQUFRLEdBRVQsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpELE1BQU0sT0FBTyxnQ0FBZ0M7SUFLL0I7SUFDQTtJQUxPLFVBQVUsQ0FBeUM7SUFDbkQscUJBQXFCLENBQWdDO0lBRXhFLFlBQ1ksVUFBc0IsRUFDdEIsU0FBeUIsSUFBSSxXQUFXLEVBQUU7UUFEMUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFvQztRQUVwRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssR0FBRyxLQUFLLEVBQ1gscUJBQWlELEVBQ1osRUFBRTtRQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsNkJBQTZCLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsc0JBQXNCLENBQ3pGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gsWUFBWSxHQUFHLEtBQUssRUFDbEIsS0FBYSxFQUMrQixFQUFFO1FBQzlDLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCw2QkFBNkIsR0FBRyxLQUFLLEVBQ25DLEtBQWEsRUFDc0IsRUFBRTtRQUNyQyxPQUFPLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztZQUM5QyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDeEMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7Ozs7OztPQU9HO0lBQ0gsc0JBQXNCLEdBQUcsS0FBSyxFQUM1QixLQUFhLEVBQ2IsWUFBb0IsRUFDcEIsU0FBaUIsc0JBQXNCLEVBQ1QsRUFBRTtRQUNoQyxPQUFPLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUMzQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDM0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUN4QixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgT2JzZXJ2YXRpb25FbnRpdHkgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LW9ic2VydmF0aW9uLWV4dHJhY3Rvcic7XG5pbXBvcnQge1xuICBEYXRhU291cmNlLFxuICBNb3JlVGhhbixcbiAgUmVwb3NpdG9yeSxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcblxuaW1wb3J0IHsgT0JTRVJWQVRJT05fQkFUQ0hfU0laRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSB9IGZyb20gJy4uL2VudGl0aWVzJztcblxuZXhwb3J0IGNsYXNzIFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5QWN0aW9uIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk8UmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHk+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb2JzZXJ2YXRpb25SZXBvc2l0b3J5OiBSZXBvc2l0b3J5PE9ic2VydmF0aW9uRW50aXR5PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlciA9IG5ldyBEdW1teUxvZ2dlcigpLFxuICApIHtcbiAgICB0aGlzLnJlcG9zaXRvcnkgPSBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkpO1xuICAgIHRoaXMub2JzZXJ2YXRpb25SZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KE9ic2VydmF0aW9uRW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZXMgb25lIFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IGluIHRoZSBkYXRhYmFzZVxuICAgKlxuICAgKiBAcGFyYW0gcmF3RGF0YVByb3ZpZGVyRW50aXRpZXNcbiAgICogQHJldHVybnMge1Jhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5fSBzYXZlZCBpbnN0YW5jZVxuICAgKi9cbiAgc3RvcmUgPSBhc3luYyAoXG4gICAgcmF3RGF0YVByb3ZpZGVyRW50aXR5OiBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSxcbiAgKTogUHJvbWlzZTxSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eT4gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LnNhdmUocmF3RGF0YVByb3ZpZGVyRW50aXR5KTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGByYXctZGF0YSBmb3IgY2hhaW4gc3RhdGUgWyR7SlNPTi5zdHJpbmdpZnkocmF3RGF0YVByb3ZpZGVyRW50aXR5KX1dIHN0b3JlZCBpbiBkYXRhYmFzZWAsXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkgb2Ygc3BlY2lmaWMgY2hhaW5cbiAgICpcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm5zIHtSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSB8IG51bGx9IENoYWluLXJlbGF0ZWQgc3RhdGUsIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBmZXRjaEJ5Q2hhaW4gPSBhc3luYyAoXG4gICAgY2hhaW46IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSB8IG51bGw+ID0+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmZpbmRPbmUoeyB3aGVyZTogeyBjaGFpbjogY2hhaW4gfSB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYXRlc3QgT2JzZXJ2YXRpb25FbnRpdHkgZm9yIHRoZSBzcGVjaWZpZWQgY2hhaW5cbiAgICpcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhdGlvbkVudGl0eSB8IG51bGx9IExhdGVzdCByZWxhdGVkIG9ic2VydmF0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZmV0Y2hMYXRlc3RPYnNlcnZhdGlvbkJ5Q2hhaW4gPSBhc3luYyAoXG4gICAgY2hhaW46IHN0cmluZyxcbiAgKTogUHJvbWlzZTxPYnNlcnZhdGlvbkVudGl0eSB8IG51bGw+ID0+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vYnNlcnZhdGlvblJlcG9zaXRvcnkuZmluZE9uZSh7XG4gICAgICB3aGVyZTogeyBmcm9tQ2hhaW46IGNoYWluLCByYXdEYXRhOiAnJyB9LFxuICAgICAgb3JkZXI6IHsgaGVpZ2h0OiAnREVTQycgfSxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGJhdGNoIG9mIE9ic2VydmF0aW9uRW50aXR5IHJlY29yZHMgZm9yIHRoZSBnaXZlbiBjaGFpblxuICAgKlxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHBhcmFtIG9mZnNldEhlaWdodFxuICAgKiBAcGFyYW0gbGVuZ3RoXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhdGlvbkVudGl0eVtdfSBDaGFpbi1yZWxhdGVkIG9ic2VydmF0aW9uc1xuICAgKi9cbiAgZmV0Y2hDaGFpbk9ic2VydmF0aW9ucyA9IGFzeW5jIChcbiAgICBjaGFpbjogc3RyaW5nLFxuICAgIG9mZnNldEhlaWdodDogbnVtYmVyLFxuICAgIGxlbmd0aDogbnVtYmVyID0gT0JTRVJWQVRJT05fQkFUQ0hfU0laRSxcbiAgKTogUHJvbWlzZTxPYnNlcnZhdGlvbkVudGl0eVtdPiA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub2JzZXJ2YXRpb25SZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHsgZnJvbUNoYWluOiBjaGFpbiwgaGVpZ2h0OiBNb3JlVGhhbihvZmZzZXRIZWlnaHQpIH0sXG4gICAgICBvcmRlcjogeyBoZWlnaHQ6ICdBU0MnIH0sXG4gICAgICB0YWtlOiBsZW5ndGgsXG4gICAgfSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,KAAK,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const OBSERVATION_BATCH_SIZE = 10;
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT0JTRVJWQVRJT05fQkFUQ0hfU0laRSA9IDEwO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { RawDataProviderStateEntity } from './rawDataProviderStateEntity';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZW50aXRpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSB9IGZyb20gJy4vcmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHknO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawDataProviderStateEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/rawDataProviderStateEntity.ts"],"names":[],"mappings":"AAEA,qBACa,0BAA0B;IAErC,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;IAGnB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { Entity, Column, PrimaryColumn } from '@rosen-bridge/extended-typeorm';
|
|
11
|
+
let RawDataProviderStateEntity = class RawDataProviderStateEntity {
|
|
12
|
+
chain;
|
|
13
|
+
lastHeight;
|
|
14
|
+
syncedHeight;
|
|
15
|
+
};
|
|
16
|
+
__decorate([
|
|
17
|
+
PrimaryColumn({ type: 'varchar' }),
|
|
18
|
+
__metadata("design:type", String)
|
|
19
|
+
], RawDataProviderStateEntity.prototype, "chain", void 0);
|
|
20
|
+
__decorate([
|
|
21
|
+
Column({ type: 'integer' }),
|
|
22
|
+
__metadata("design:type", Number)
|
|
23
|
+
], RawDataProviderStateEntity.prototype, "lastHeight", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
Column({ type: 'integer' }),
|
|
26
|
+
__metadata("design:type", Number)
|
|
27
|
+
], RawDataProviderStateEntity.prototype, "syncedHeight", void 0);
|
|
28
|
+
RawDataProviderStateEntity = __decorate([
|
|
29
|
+
Entity('raw_data_provider_state_entity')
|
|
30
|
+
], RawDataProviderStateEntity);
|
|
31
|
+
export { RawDataProviderStateEntity };
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZW50aXRpZXMvcmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEUsSUFBTSwwQkFBMEIsR0FBaEMsTUFBTSwwQkFBMEI7SUFFckMsS0FBSyxDQUFTO0lBR2QsVUFBVSxDQUFTO0lBR25CLFlBQVksQ0FBUztDQUN0QixDQUFBO0FBUEM7SUFEQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7O3lEQUNyQjtBQUdkO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzs4REFDVDtBQUduQjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7Z0VBQ1A7QUFSViwwQkFBMEI7SUFEdEMsTUFBTSxDQUFDLGdDQUFnQyxDQUFDO0dBQzVCLDBCQUEwQixDQVN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgQ29sdW1uLCBQcmltYXJ5Q29sdW1uIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcblxuQEVudGl0eSgncmF3X2RhdGFfcHJvdmlkZXJfc3RhdGVfZW50aXR5JylcbmV4cG9ydCBjbGFzcyBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSB7XG4gIEBQcmltYXJ5Q29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIGNoYWluOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICdpbnRlZ2VyJyB9KVxuICBsYXN0SGVpZ2h0OiBudW1iZXI7XG5cbiAgQENvbHVtbih7IHR5cGU6ICdpbnRlZ2VyJyB9KVxuICBzeW5jZWRIZWlnaHQ6IG51bWJlcjtcbn1cbiJdfQ==
|
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,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AbstractRawDataProvider } from './abstractRawDataProvider';
|
|
2
|
+
export { RawDataProviderStateEntity } from './entities';
|
|
3
|
+
export { migrations } from './migrations';
|
|
4
|
+
export * from './providers';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBYnN0cmFjdFJhd0RhdGFQcm92aWRlciB9IGZyb20gJy4vYWJzdHJhY3RSYXdEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHsgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkgfSBmcm9tICcuL2VudGl0aWVzJztcbmV4cG9ydCB7IG1pZ3JhdGlvbnMgfSBmcm9tICcuL21pZ3JhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Migration1762178180934 } from './postgres';
|
|
2
|
+
import { Migration1762178166781 } from './sqlite';
|
|
3
|
+
export declare const migrations: {
|
|
4
|
+
postgres: (typeof Migration1762178180934)[];
|
|
5
|
+
sqlite: (typeof Migration1762178166781)[];
|
|
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,YAAY,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAElD,eAAO,MAAM,UAAU;;;CAGtB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Migration1762178180934 } from './postgres';
|
|
2
|
+
import { Migration1762178166781 } from './sqlite';
|
|
3
|
+
export const migrations = {
|
|
4
|
+
postgres: [Migration1762178180934],
|
|
5
|
+
sqlite: [Migration1762178166781],
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbWlncmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixRQUFRLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztJQUNsQyxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztDQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWlncmF0aW9uMTc2MjE3ODE4MDkzNCB9IGZyb20gJy4vcG9zdGdyZXMnO1xuaW1wb3J0IHsgTWlncmF0aW9uMTc2MjE3ODE2Njc4MSB9IGZyb20gJy4vc3FsaXRlJztcblxuZXhwb3J0IGNvbnN0IG1pZ3JhdGlvbnMgPSB7XG4gIHBvc3RncmVzOiBbTWlncmF0aW9uMTc2MjE3ODE4MDkzNF0sXG4gIHNxbGl0ZTogW01pZ3JhdGlvbjE3NjIxNzgxNjY3ODFdLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from '@rosen-bridge/extended-typeorm';
|
|
2
|
+
export declare class Migration1762178180934 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=1762178180934-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1762178180934-migration.d.ts","sourceRoot":"","sources":["../../../lib/migrations/postgres/1762178180934-migration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACZ,MAAM,gCAAgC,CAAC;AAExC,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,IAAI,SAA4B;IAEnB,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class Migration1762178180934 {
|
|
2
|
+
name = 'Migration1762178180934';
|
|
3
|
+
async up(queryRunner) {
|
|
4
|
+
await queryRunner.query(`
|
|
5
|
+
CREATE TABLE "raw_data_provider_state_entity" (
|
|
6
|
+
"chain" varchar PRIMARY KEY NOT NULL,
|
|
7
|
+
"lastHeight" integer NOT NULL,
|
|
8
|
+
"syncedHeight" integer NOT NULL
|
|
9
|
+
)
|
|
10
|
+
`);
|
|
11
|
+
}
|
|
12
|
+
async down(queryRunner) {
|
|
13
|
+
await queryRunner.query(`
|
|
14
|
+
DROP TABLE "raw_data_provider_state_entity"
|
|
15
|
+
`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc2MjE3ODE4MDkzNC1taWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbWlncmF0aW9ucy9wb3N0Z3Jlcy8xNzYyMTc4MTgwOTM0LW1pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLElBQUksR0FBRyx3QkFBd0IsQ0FBQztJQUV6QixLQUFLLENBQUMsRUFBRSxDQUFDLFdBQXdCO1FBQ3RDLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQzs7Ozs7O1NBTW5CLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQXdCO1FBQ3hDLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQzs7U0FFbkIsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTWlncmF0aW9uSW50ZXJmYWNlLFxuICBRdWVyeVJ1bm5lcixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcblxuZXhwb3J0IGNsYXNzIE1pZ3JhdGlvbjE3NjIxNzgxODA5MzQgaW1wbGVtZW50cyBNaWdyYXRpb25JbnRlcmZhY2Uge1xuICBuYW1lID0gJ01pZ3JhdGlvbjE3NjIxNzgxODA5MzQnO1xuXG4gIHB1YmxpYyBhc3luYyB1cChxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgXCJyYXdfZGF0YV9wcm92aWRlcl9zdGF0ZV9lbnRpdHlcIiAoXG4gICAgICAgICAgICAgICAgXCJjaGFpblwiIHZhcmNoYXIgUFJJTUFSWSBLRVkgTk9UIE5VTEwsXG4gICAgICAgICAgICAgICAgXCJsYXN0SGVpZ2h0XCIgaW50ZWdlciBOT1QgTlVMTCxcbiAgICAgICAgICAgICAgICBcInN5bmNlZEhlaWdodFwiIGludGVnZXIgTk9UIE5VTExcbiAgICAgICAgICAgIClcbiAgICAgICAgYCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZG93bihxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5xdWVyeShgXG4gICAgICAgICAgICBEUk9QIFRBQkxFIFwicmF3X2RhdGFfcHJvdmlkZXJfc3RhdGVfZW50aXR5XCJcbiAgICAgICAgYCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/migrations/postgres/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { Migration1762178180934 } from './1762178180934-migration';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbWlncmF0aW9ucy9wb3N0Z3Jlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE1pZ3JhdGlvbjE3NjIxNzgxODA5MzQgfSBmcm9tICcuLzE3NjIxNzgxODA5MzQtbWlncmF0aW9uJztcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from '@rosen-bridge/extended-typeorm';
|
|
2
|
+
export declare class Migration1762178166781 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=1762178166781-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1762178166781-migration.d.ts","sourceRoot":"","sources":["../../../lib/migrations/sqlite/1762178166781-migration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACZ,MAAM,gCAAgC,CAAC;AAExC,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,IAAI,SAA4B;IAEnB,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class Migration1762178166781 {
|
|
2
|
+
name = 'Migration1762178166781';
|
|
3
|
+
async up(queryRunner) {
|
|
4
|
+
await queryRunner.query(`
|
|
5
|
+
CREATE TABLE "raw_data_provider_state_entity" (
|
|
6
|
+
"chain" varchar PRIMARY KEY NOT NULL,
|
|
7
|
+
"lastHeight" integer NOT NULL,
|
|
8
|
+
"syncedHeight" integer NOT NULL
|
|
9
|
+
)
|
|
10
|
+
`);
|
|
11
|
+
}
|
|
12
|
+
async down(queryRunner) {
|
|
13
|
+
await queryRunner.query(`
|
|
14
|
+
DROP TABLE "raw_data_provider_state_entity"
|
|
15
|
+
`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc2MjE3ODE2Njc4MS1taWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbWlncmF0aW9ucy9zcWxpdGUvMTc2MjE3ODE2Njc4MS1taWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxJQUFJLEdBQUcsd0JBQXdCLENBQUM7SUFFekIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUF3QjtRQUN0QyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUM7Ozs7OztTQU1uQixDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBQyxXQUF3QjtRQUN4QyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUM7O1NBRW5CLENBQUMsQ0FBQztJQUNULENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1pZ3JhdGlvbkludGVyZmFjZSxcbiAgUXVlcnlSdW5uZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5cbmV4cG9ydCBjbGFzcyBNaWdyYXRpb24xNzYyMTc4MTY2NzgxIGltcGxlbWVudHMgTWlncmF0aW9uSW50ZXJmYWNlIHtcbiAgbmFtZSA9ICdNaWdyYXRpb24xNzYyMTc4MTY2NzgxJztcblxuICBwdWJsaWMgYXN5bmMgdXAocXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIucXVlcnkoYFxuICAgICAgICAgICAgQ1JFQVRFIFRBQkxFIFwicmF3X2RhdGFfcHJvdmlkZXJfc3RhdGVfZW50aXR5XCIgKFxuICAgICAgICAgICAgICAgIFwiY2hhaW5cIiB2YXJjaGFyIFBSSU1BUlkgS0VZIE5PVCBOVUxMLFxuICAgICAgICAgICAgICAgIFwibGFzdEhlaWdodFwiIGludGVnZXIgTk9UIE5VTEwsXG4gICAgICAgICAgICAgICAgXCJzeW5jZWRIZWlnaHRcIiBpbnRlZ2VyIE5PVCBOVUxMXG4gICAgICAgICAgICApXG4gICAgICAgIGApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRvd24ocXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIucXVlcnkoYFxuICAgICAgICAgICAgRFJPUCBUQUJMRSBcInJhd19kYXRhX3Byb3ZpZGVyX3N0YXRlX2VudGl0eVwiXG4gICAgICAgIGApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/migrations/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { Migration1762178166781 } from './1762178166781-migration';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbWlncmF0aW9ucy9zcWxpdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNaWdyYXRpb24xNzYyMTc4MTY2NzgxIH0gZnJvbSAnLi8xNzYyMTc4MTY2NzgxLW1pZ3JhdGlvbic7XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ObservationEntity } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
|
+
import { BitcoinEsploraObservationExtractor } from '@rosen-bridge/bitcoin-observation-extractor';
|
|
4
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
5
|
+
import { AbstractRawDataProvider } from '../../abstractRawDataProvider';
|
|
6
|
+
export declare class BitcoinEsploraRawDataProvider extends AbstractRawDataProvider {
|
|
7
|
+
protected dataSource: DataSource;
|
|
8
|
+
protected extractor: BitcoinEsploraObservationExtractor;
|
|
9
|
+
protected logger: AbstractLogger;
|
|
10
|
+
protected client: import("@rosen-clients/rate-limited-axios").Axios;
|
|
11
|
+
constructor(dataSource: DataSource, extractor: BitcoinEsploraObservationExtractor, esploraBaseUrl: string, logger: AbstractLogger);
|
|
12
|
+
/**
|
|
13
|
+
* Process observation and write rawData
|
|
14
|
+
*
|
|
15
|
+
* @param observation
|
|
16
|
+
* @return {boolean} determining result of process done successfully or no
|
|
17
|
+
*/
|
|
18
|
+
protected processObservation: (observation: ObservationEntity) => Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=bitcoinEsploraRawDataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitcoinEsploraRawDataProvider.d.ts","sourceRoot":"","sources":["../../../lib/providers/bitcoin/bitcoinEsploraRawDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAI5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,qBAAa,6BAA8B,SAAQ,uBAAuB;IAItE,SAAS,CAAC,UAAU,EAAE,UAAU;IAChC,SAAS,CAAC,SAAS,EAAE,kCAAkC;IAEvD,SAAS,CAAC,MAAM,EAAE,cAAc;IANlC,SAAS,CAAC,MAAM,oDAAC;gBAGL,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,kCAAkC,EACvD,cAAc,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc;IAMlC;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,GAAU,aAAa,iBAAiB,sBAgBlE;CACH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import axios from '@rosen-clients/rate-limited-axios';
|
|
2
|
+
import { AbstractRawDataProvider } from '../../abstractRawDataProvider';
|
|
3
|
+
export class BitcoinEsploraRawDataProvider extends AbstractRawDataProvider {
|
|
4
|
+
dataSource;
|
|
5
|
+
extractor;
|
|
6
|
+
logger;
|
|
7
|
+
client;
|
|
8
|
+
constructor(dataSource, extractor, esploraBaseUrl, logger) {
|
|
9
|
+
super('bitcoin', dataSource, logger);
|
|
10
|
+
this.dataSource = dataSource;
|
|
11
|
+
this.extractor = extractor;
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
this.client = axios.create({ baseURL: esploraBaseUrl });
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Process observation and write rawData
|
|
17
|
+
*
|
|
18
|
+
* @param observation
|
|
19
|
+
* @return {boolean} determining result of process done successfully or no
|
|
20
|
+
*/
|
|
21
|
+
processObservation = async (observation) => {
|
|
22
|
+
try {
|
|
23
|
+
const block = { height: observation.height, hash: observation.block };
|
|
24
|
+
const tx = await this.client.post(`/tx/${observation.sourceTxId}`, {
|
|
25
|
+
method: 'getrawtransaction',
|
|
26
|
+
id: 0,
|
|
27
|
+
params: [observation.sourceTxId, true],
|
|
28
|
+
});
|
|
29
|
+
this.extractor.processTransactions([tx.data], block);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
this.logger.error(`Processing of observation for bitcoin-esplora failed: ${err}`);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pbkVzcGxvcmFSYXdEYXRhUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdmlkZXJzL2JpdGNvaW4vYml0Y29pbkVzcGxvcmFSYXdEYXRhUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLE1BQU0sbUNBQW1DLENBQUM7QUFFdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsTUFBTSxPQUFPLDZCQUE4QixTQUFRLHVCQUF1QjtJQUk1RDtJQUNBO0lBRUE7SUFORixNQUFNLENBQUM7SUFFakIsWUFDWSxVQUFzQixFQUN0QixTQUE2QyxFQUN2RCxjQUFzQixFQUNaLE1BQXNCO1FBRWhDLEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBTDNCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBb0M7UUFFN0MsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFHaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLFdBQThCLEVBQUUsRUFBRTtRQUN0RSxJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxFQUFFLG1CQUFtQjtnQkFDM0IsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7YUFDdkMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFjLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHlEQUF5RCxHQUFHLEVBQUUsQ0FDL0QsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IE9ic2VydmF0aW9uRW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgQml0Y29pbkVzcGxvcmFPYnNlcnZhdGlvbkV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYml0Y29pbi1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9jayB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCBheGlvcyBmcm9tICdAcm9zZW4tY2xpZW50cy9yYXRlLWxpbWl0ZWQtYXhpb3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFJhd0RhdGFQcm92aWRlciB9IGZyb20gJy4uLy4uL2Fic3RyYWN0UmF3RGF0YVByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJpdGNvaW5Fc3Bsb3JhUmF3RGF0YVByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RSYXdEYXRhUHJvdmlkZXIge1xuICBwcm90ZWN0ZWQgY2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIHByb3RlY3RlZCBleHRyYWN0b3I6IEJpdGNvaW5Fc3Bsb3JhT2JzZXJ2YXRpb25FeHRyYWN0b3IsXG4gICAgZXNwbG9yYUJhc2VVcmw6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgc3VwZXIoJ2JpdGNvaW4nLCBkYXRhU291cmNlLCBsb2dnZXIpO1xuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHsgYmFzZVVSTDogZXNwbG9yYUJhc2VVcmwgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBvYnNlcnZhdGlvbiBhbmQgd3JpdGUgcmF3RGF0YVxuICAgKlxuICAgKiBAcGFyYW0gb2JzZXJ2YXRpb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gZGV0ZXJtaW5pbmcgcmVzdWx0IG9mIHByb2Nlc3MgZG9uZSBzdWNjZXNzZnVsbHkgb3Igbm9cbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzT2JzZXJ2YXRpb24gPSBhc3luYyAob2JzZXJ2YXRpb246IE9ic2VydmF0aW9uRW50aXR5KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJsb2NrID0geyBoZWlnaHQ6IG9ic2VydmF0aW9uLmhlaWdodCwgaGFzaDogb2JzZXJ2YXRpb24uYmxvY2sgfTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdChgL3R4LyR7b2JzZXJ2YXRpb24uc291cmNlVHhJZH1gLCB7XG4gICAgICAgIG1ldGhvZDogJ2dldHJhd3RyYW5zYWN0aW9uJyxcbiAgICAgICAgaWQ6IDAsXG4gICAgICAgIHBhcmFtczogW29ic2VydmF0aW9uLnNvdXJjZVR4SWQsIHRydWVdLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmV4dHJhY3Rvci5wcm9jZXNzVHJhbnNhY3Rpb25zKFt0eC5kYXRhXSwgYmxvY2sgYXMgQmxvY2spO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBQcm9jZXNzaW5nIG9mIG9ic2VydmF0aW9uIGZvciBiaXRjb2luLWVzcGxvcmEgZmFpbGVkOiAke2Vycn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG4iXX0=
|