@my-packages-changeit/raw-data-provider 0.2.0

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 (85) hide show
  1. package/CHANGELOG.md +145 -0
  2. package/README.md +24 -0
  3. package/dist/abstractRawDataProvider.d.ts +48 -0
  4. package/dist/abstractRawDataProvider.d.ts.map +1 -0
  5. package/dist/abstractRawDataProvider.js +111 -0
  6. package/dist/actions/index.d.ts +2 -0
  7. package/dist/actions/index.d.ts.map +1 -0
  8. package/dist/actions/index.js +2 -0
  9. package/dist/actions/rawDataProviderStateEntityAction.d.ts +59 -0
  10. package/dist/actions/rawDataProviderStateEntityAction.d.ts.map +1 -0
  11. package/dist/actions/rawDataProviderStateEntityAction.js +98 -0
  12. package/dist/constants.d.ts +2 -0
  13. package/dist/constants.d.ts.map +1 -0
  14. package/dist/constants.js +2 -0
  15. package/dist/entities/index.d.ts +2 -0
  16. package/dist/entities/index.d.ts.map +1 -0
  17. package/dist/entities/index.js +2 -0
  18. package/dist/entities/rawDataProviderStateEntity.d.ts +6 -0
  19. package/dist/entities/rawDataProviderStateEntity.d.ts.map +1 -0
  20. package/dist/entities/rawDataProviderStateEntity.js +32 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +5 -0
  24. package/dist/migrations/index.d.ts +7 -0
  25. package/dist/migrations/index.d.ts.map +1 -0
  26. package/dist/migrations/index.js +7 -0
  27. package/dist/migrations/postgres/1762178180934-migration.d.ts +7 -0
  28. package/dist/migrations/postgres/1762178180934-migration.d.ts.map +1 -0
  29. package/dist/migrations/postgres/1762178180934-migration.js +18 -0
  30. package/dist/migrations/postgres/index.d.ts +2 -0
  31. package/dist/migrations/postgres/index.d.ts.map +1 -0
  32. package/dist/migrations/postgres/index.js +2 -0
  33. package/dist/migrations/sqlite/1762178166781-migration.d.ts +7 -0
  34. package/dist/migrations/sqlite/1762178166781-migration.d.ts.map +1 -0
  35. package/dist/migrations/sqlite/1762178166781-migration.js +18 -0
  36. package/dist/migrations/sqlite/index.d.ts +2 -0
  37. package/dist/migrations/sqlite/index.d.ts.map +1 -0
  38. package/dist/migrations/sqlite/index.js +2 -0
  39. package/dist/providers/bitcoin/bitcoinEsploraRawDataProvider.d.ts +25 -0
  40. package/dist/providers/bitcoin/bitcoinEsploraRawDataProvider.d.ts.map +1 -0
  41. package/dist/providers/bitcoin/bitcoinEsploraRawDataProvider.js +52 -0
  42. package/dist/providers/bitcoin/bitcoinRpcRawDataProvider.d.ts +23 -0
  43. package/dist/providers/bitcoin/bitcoinRpcRawDataProvider.d.ts.map +1 -0
  44. package/dist/providers/bitcoin/bitcoinRpcRawDataProvider.js +49 -0
  45. package/dist/providers/bitcoin/index.d.ts +3 -0
  46. package/dist/providers/bitcoin/index.d.ts.map +1 -0
  47. package/dist/providers/bitcoin/index.js +3 -0
  48. package/dist/providers/cardano/cardanoKoiosRawDataProvider.d.ts +108 -0
  49. package/dist/providers/cardano/cardanoKoiosRawDataProvider.d.ts.map +1 -0
  50. package/dist/providers/cardano/cardanoKoiosRawDataProvider.js +36 -0
  51. package/dist/providers/cardano/cardanoOgmiosRawDataProvider.d.ts +43 -0
  52. package/dist/providers/cardano/cardanoOgmiosRawDataProvider.d.ts.map +1 -0
  53. package/dist/providers/cardano/cardanoOgmiosRawDataProvider.js +112 -0
  54. package/dist/providers/cardano/index.d.ts +3 -0
  55. package/dist/providers/cardano/index.d.ts.map +1 -0
  56. package/dist/providers/cardano/index.js +3 -0
  57. package/dist/providers/doge/dogeRpcRawDataProvider.d.ts +22 -0
  58. package/dist/providers/doge/dogeRpcRawDataProvider.d.ts.map +1 -0
  59. package/dist/providers/doge/dogeRpcRawDataProvider.js +45 -0
  60. package/dist/providers/doge/index.d.ts +2 -0
  61. package/dist/providers/doge/index.d.ts.map +1 -0
  62. package/dist/providers/doge/index.js +2 -0
  63. package/dist/providers/ergo/ergoExplorerRawDataProvider.d.ts +96 -0
  64. package/dist/providers/ergo/ergoExplorerRawDataProvider.d.ts.map +1 -0
  65. package/dist/providers/ergo/ergoExplorerRawDataProvider.js +44 -0
  66. package/dist/providers/ergo/ergoNodeRawDataProvider.d.ts +149 -0
  67. package/dist/providers/ergo/ergoNodeRawDataProvider.d.ts.map +1 -0
  68. package/dist/providers/ergo/ergoNodeRawDataProvider.js +47 -0
  69. package/dist/providers/ergo/index.d.ts +3 -0
  70. package/dist/providers/ergo/index.d.ts.map +1 -0
  71. package/dist/providers/ergo/index.js +3 -0
  72. package/dist/providers/evm/evmRawDataProvider.d.ts +23 -0
  73. package/dist/providers/evm/evmRawDataProvider.d.ts.map +1 -0
  74. package/dist/providers/evm/evmRawDataProvider.js +46 -0
  75. package/dist/providers/evm/index.d.ts +2 -0
  76. package/dist/providers/evm/index.d.ts.map +1 -0
  77. package/dist/providers/evm/index.js +2 -0
  78. package/dist/providers/index.d.ts +6 -0
  79. package/dist/providers/index.d.ts.map +1 -0
  80. package/dist/providers/index.js +6 -0
  81. package/dist/tsconfig.tsbuildinfo +1 -0
  82. package/dist/types.d.ts +43 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/package.json +56 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,145 @@
1
+ # @rosen-bridge/raw-data-provider
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Add valid_contract field to transactions
8
+
9
+ ### Patch Changes
10
+
11
+ - Update dependencies
12
+ - @rosen-bridge/cardano-observation-extractor@3.0.6
13
+
14
+ ## 0.1.9
15
+
16
+ ### Patch Changes
17
+
18
+ - Update dependencies
19
+ - @rosen-bridge/abstract-scanner@2.0.3
20
+ - @rosen-bridge/abstract-observation-extractor@1.0.10
21
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.6
22
+ - @rosen-bridge/ergo-observation-extractor@2.0.5
23
+ - @rosen-bridge/evm-observation-extractor@7.0.5
24
+ - @rosen-bridge/bitcoin-scanner@1.1.3
25
+ - @rosen-bridge/bitcoin-observation-extractor@8.0.5
26
+ - @rosen-bridge/cardano-observation-extractor@3.0.5
27
+
28
+ ## 0.1.8
29
+
30
+ ### Patch Changes
31
+
32
+ - Update dependencies
33
+ - @rosen-bridge/abstract-observation-extractor@1.0.9
34
+ - @rosen-bridge/abstract-scanner@2.0.2
35
+ - @rosen-bridge/bitcoin-observation-extractor@8.0.4
36
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.5
37
+ - @rosen-bridge/bitcoin-scanner@1.1.2
38
+ - @rosen-bridge/cardano-observation-extractor@3.0.4
39
+ - @rosen-bridge/ergo-observation-extractor@2.0.4
40
+ - @rosen-bridge/evm-observation-extractor@7.0.4
41
+ - @rosen-clients/cardano-koios@3.1.3
42
+ - @rosen-clients/ergo-explorer@2.1.3
43
+ - @rosen-clients/ergo-node@3.1.3
44
+ - @rosen-clients/rate-limited-axios@2.0.1
45
+
46
+ ## 0.1.7
47
+
48
+ ### Patch Changes
49
+
50
+ - Update dependencies
51
+ - @rosen-bridge/abstract-observation-extractor@1.0.8
52
+ - @rosen-bridge/abstract-scanner@2.0.1
53
+ - @rosen-bridge/bitcoin-observation-extractor@8.0.3
54
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.4
55
+ - @rosen-bridge/bitcoin-scanner@1.1.1
56
+ - @rosen-bridge/cardano-observation-extractor@3.0.3
57
+ - @rosen-bridge/ergo-observation-extractor@2.0.3
58
+ - @rosen-bridge/evm-observation-extractor@7.0.3
59
+
60
+ ## 0.1.6
61
+
62
+ ### Patch Changes
63
+
64
+ - Update dependencies
65
+ - @rosen-bridge/abstract-observation-extractor@1.0.7
66
+ - @rosen-bridge/abstract-scanner@2.0.0
67
+ - @rosen-bridge/bitcoin-observation-extractor@8.0.2
68
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.3
69
+ - @rosen-bridge/bitcoin-scanner@1.1.0
70
+ - @rosen-bridge/cardano-observation-extractor@3.0.2
71
+ - @rosen-bridge/ergo-observation-extractor@2.0.2
72
+ - @rosen-bridge/evm-observation-extractor@7.0.2
73
+ - @rosen-bridge/scanner-interfaces@1.0.0
74
+
75
+ ## 0.1.5
76
+
77
+ ### Patch Changes
78
+
79
+ - Update dependencies
80
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.2
81
+
82
+ ## 0.1.4
83
+
84
+ ### Patch Changes
85
+
86
+ - Update dependencies
87
+ - @rosen-bridge/abstract-observation-extractor@1.0.6
88
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.1
89
+ - @rosen-bridge/bitcoin-observation-extractor@8.0.1
90
+ - @rosen-bridge/cardano-observation-extractor@3.0.1
91
+ - @rosen-bridge/ergo-observation-extractor@2.0.1
92
+ - @rosen-bridge/evm-observation-extractor@7.0.1
93
+
94
+ ## 0.1.3
95
+
96
+ ### Patch Changes
97
+
98
+ - Update dependencies
99
+ - @rosen-bridge/abstract-observation-extractor@1.0.5
100
+ - @rosen-bridge/abstract-scanner@1.0.4
101
+ - @rosen-bridge/bitcoin-observation-extractor@8.0.0
102
+ - @rosen-bridge/bitcoin-runes-observation-extractor@3.0.0
103
+ - @rosen-bridge/bitcoin-scanner@1.0.4
104
+ - @rosen-bridge/cardano-observation-extractor@3.0.0
105
+ - @rosen-bridge/ergo-observation-extractor@2.0.0
106
+ - @rosen-bridge/evm-observation-extractor@7.0.0
107
+ - @rosen-bridge/extended-typeorm@1.1.0
108
+
109
+ ## 0.1.2
110
+
111
+ ### Patch Changes
112
+
113
+ - Update dependencies
114
+ - @rosen-bridge/abstract-observation-extractor@1.0.4
115
+ - @rosen-bridge/abstract-scanner@1.0.3
116
+ - @rosen-bridge/bitcoin-observation-extractor@7.0.4
117
+ - @rosen-bridge/bitcoin-runes-observation-extractor@2.0.4
118
+ - @rosen-bridge/bitcoin-scanner@1.0.3
119
+ - @rosen-bridge/cardano-observation-extractor@2.0.4
120
+ - @rosen-bridge/ergo-observation-extractor@1.0.4
121
+ - @rosen-bridge/evm-observation-extractor@6.0.4
122
+ - @rosen-clients/cardano-koios@3.1.2
123
+ - @rosen-clients/ergo-explorer@2.1.2
124
+ - @rosen-clients/ergo-node@3.1.2
125
+ - @rosen-clients/rate-limited-axios@2.0.0
126
+
127
+ ## 0.1.1
128
+
129
+ ### Patch Changes
130
+
131
+ - Update dependencies
132
+ - @rosen-bridge/abstract-observation-extractor@1.0.3
133
+ - @rosen-bridge/abstract-scanner@1.0.2
134
+ - @rosen-bridge/bitcoin-scanner@1.0.2
135
+ - @rosen-bridge/bitcoin-runes-observation-extractor@2.0.3
136
+ - @rosen-bridge/bitcoin-observation-extractor@7.0.3
137
+ - @rosen-bridge/cardano-observation-extractor@2.0.3
138
+ - @rosen-bridge/ergo-observation-extractor@1.0.3
139
+ - @rosen-bridge/evm-observation-extractor@6.0.3
140
+
141
+ ## 0.1.0
142
+
143
+ ### Minor Changes
144
+
145
+ - Initialize raw-data-provider package
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,48 @@
1
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
2
+ import { AbstractObservationExtractor, 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<TxType> {
7
+ protected chain: string;
8
+ protected dataSource: DataSource;
9
+ protected extractor: AbstractObservationExtractor<TxType>;
10
+ protected logger: AbstractLogger;
11
+ protected action: RawDataProviderStateEntityAction;
12
+ constructor(chain: string, dataSource: DataSource, extractor: AbstractObservationExtractor<TxType>, logger?: AbstractLogger);
13
+ /**
14
+ * Retrieves the current RawDataProviderStateEntity for the configured chain.
15
+ *
16
+ * @returns The existing or newly created RawDataProviderStateEntity
17
+ */
18
+ protected fetchOrCreateStateForChain: () => Promise<RawDataProviderStateEntity>;
19
+ /**
20
+ * Iterates through observations of the current chain and fills their rawData field.
21
+ * Updates the syncedHeight after each processed observation until the chain is fully synced.
22
+ *
23
+ * @returns void
24
+ */
25
+ fillRawData: () => Promise<void>;
26
+ /**
27
+ * fetch transactions related to the input observation parameter
28
+ *
29
+ * @param observation
30
+ * @returns { Promise<TxType[]> }
31
+ */
32
+ protected abstract fetchObservationTxs: (observation: ObservationEntity) => Promise<TxType[] | undefined>;
33
+ /**
34
+ * Process observation and write rawData
35
+ *
36
+ * @param observation
37
+ * @return {boolean} determining result of process done successfully or no
38
+ */
39
+ protected processObservation: (observation: ObservationEntity) => Promise<boolean>;
40
+ /**
41
+ * Fills the raw data field for all ObservationEntity records of the current chain of input RawDataProviderStateEntity
42
+ *
43
+ * @param state
44
+ * @returns
45
+ */
46
+ protected fillObservationsRawData: (state: RawDataProviderStateEntity) => Promise<RawDataProviderStateEntity>;
47
+ }
48
+ //# 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,EACL,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,8CAA8C,CAAC;AACtD,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,CAAC,MAAM;IAIhD,SAAS,CAAC,KAAK,EAAE,MAAM;IACvB,SAAS,CAAC,UAAU,EAAE,UAAU;IAChC,SAAS,CAAC,SAAS,EAAE,4BAA4B,CAAC,MAAM,CAAC;IACzD,SAAS,CAAC,MAAM,EAAE,cAAc;IANlC,SAAS,CAAC,MAAM,EAAE,gCAAgC,CAAC;gBAGvC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,4BAA4B,CAAC,MAAM,CAAC,EAC/C,MAAM,GAAE,cAAkC;IAQtD;;;;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,mBAAmB,EAAE,CACtC,WAAW,EAAE,iBAAiB,KAC3B,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACnC;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,GAAU,aAAa,iBAAiB,sBAgBlE;IAEF;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,GAC/B,OAAO,0BAA0B,KAChC,OAAO,CAAC,0BAA0B,CAAC,CAiCpC;CACH"}
@@ -0,0 +1,111 @@
1
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
2
+ import { RawDataProviderStateEntityAction } from './actions/rawDataProviderStateEntityAction';
3
+ export class AbstractRawDataProvider {
4
+ chain;
5
+ dataSource;
6
+ extractor;
7
+ logger;
8
+ action;
9
+ constructor(chain, dataSource, extractor, logger = new DummyLogger()) {
10
+ this.chain = chain;
11
+ this.dataSource = dataSource;
12
+ this.extractor = extractor;
13
+ this.logger = logger;
14
+ this.action = new RawDataProviderStateEntityAction(dataSource, logger.child('RawDataProviderStateEntityAction'));
15
+ }
16
+ /**
17
+ * Retrieves the current RawDataProviderStateEntity for the configured chain.
18
+ *
19
+ * @returns The existing or newly created RawDataProviderStateEntity
20
+ */
21
+ fetchOrCreateStateForChain = async () => {
22
+ let state = await this.action.fetchByChain(this.chain);
23
+ if (!state) {
24
+ const latestChainObservation = await this.action.fetchLatestObservationByChain(this.chain);
25
+ let lastHeight = 0;
26
+ if (!latestChainObservation) {
27
+ this.logger.warn(`Not find any ObservationEntity for the ${this.chain} chain`);
28
+ }
29
+ else {
30
+ lastHeight = latestChainObservation.height;
31
+ }
32
+ state = await this.action.store({
33
+ chain: this.chain,
34
+ lastHeight: lastHeight,
35
+ syncedHeight: 0,
36
+ });
37
+ this.logger.debug(`Created RawDataProviderStateEntity on [${this.chain}] chain at height ${lastHeight}`);
38
+ }
39
+ return state;
40
+ };
41
+ /**
42
+ * Iterates through observations of the current chain and fills their rawData field.
43
+ * Updates the syncedHeight after each processed observation until the chain is fully synced.
44
+ *
45
+ * @returns void
46
+ */
47
+ fillRawData = async () => {
48
+ this.logger.info(`RawDataProvider Starting raw-data filling for [${this.chain}] chain`);
49
+ let state = await this.fetchOrCreateStateForChain();
50
+ while (state.syncedHeight < state.lastHeight) {
51
+ this.logger.debug(`RawDataProvider Fetching observations for [${this.chain}] chain from height > ${state.syncedHeight}`);
52
+ try {
53
+ const result = await this.fillObservationsRawData(state);
54
+ state = result;
55
+ }
56
+ catch (err) {
57
+ this.logger.error(`RawDataProvider Error: ${err}`);
58
+ if (err instanceof Error && err.stack)
59
+ this.logger.error(err.stack);
60
+ break;
61
+ }
62
+ }
63
+ this.logger.info(`RawDataProvider Finished filling raw-data for [${this.chain}] chain`);
64
+ };
65
+ /**
66
+ * Process observation and write rawData
67
+ *
68
+ * @param observation
69
+ * @return {boolean} determining result of process done successfully or no
70
+ */
71
+ processObservation = async (observation) => {
72
+ try {
73
+ const block = { height: observation.height, hash: observation.block };
74
+ const txs = await this.fetchObservationTxs(observation);
75
+ if (!txs)
76
+ throw new Error(`Transaction [${observation.sourceTxId}] not found or invalid response from ${this.chain} chain.`);
77
+ this.extractor.processTransactions(txs, block);
78
+ }
79
+ catch (err) {
80
+ this.logger.error(`Processing of observation for ${this.chain} failed: ${err}`);
81
+ return false;
82
+ }
83
+ return true;
84
+ };
85
+ /**
86
+ * Fills the raw data field for all ObservationEntity records of the current chain of input RawDataProviderStateEntity
87
+ *
88
+ * @param state
89
+ * @returns
90
+ */
91
+ fillObservationsRawData = async (state) => {
92
+ const observations = await this.action.fetchChainObservations(this.chain, state.syncedHeight, this.extractor.getId());
93
+ if (observations.length === 0)
94
+ throw new Error(`ImpossibleBehavior: No more observations found for [${this.chain}] chain`);
95
+ for (const observation of observations) {
96
+ this.logger.debug(`RawDataProvider Updating rawData for observation at height ${observation.height} for [${this.chain}] chain`);
97
+ const isSuccess = await this.processObservation(observation);
98
+ if (isSuccess) {
99
+ this.logger.debug(`RawDataProvider successfully processed observation at height ${observation.height} for [${this.chain}] chain`);
100
+ }
101
+ else {
102
+ throw new Error(`RawDataProvider failed to process observation at height ${observation.height} for [${this.chain}] chain`);
103
+ }
104
+ state.syncedHeight = observation.height;
105
+ await this.action.store(state);
106
+ this.logger.debug(`RawDataProvider syncedHeight updated to ${observation.height} for [${this.chain}] chain`);
107
+ }
108
+ return state;
109
+ };
110
+ }
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RSYXdEYXRhUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvYWJzdHJhY3RSYXdEYXRhUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU81RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUc5RixNQUFNLE9BQWdCLHVCQUF1QjtJQUkvQjtJQUNBO0lBQ0E7SUFDQTtJQU5GLE1BQU0sQ0FBbUM7SUFFbkQsWUFDWSxLQUFhLEVBQ2IsVUFBc0IsRUFDdEIsU0FBK0MsRUFDL0MsU0FBeUIsSUFBSSxXQUFXLEVBQUU7UUFIMUMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBc0M7UUFDL0MsV0FBTSxHQUFOLE1BQU0sQ0FBb0M7UUFFcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGdDQUFnQyxDQUNoRCxVQUFVLEVBQ1YsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTywwQkFBMEIsR0FDbEMsS0FBSyxJQUF5QyxFQUFFO1FBQzlDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sc0JBQXNCLEdBQzFCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEFic3RyYWN0T2JzZXJ2YXRpb25FeHRyYWN0b3IsXG4gIE9ic2VydmF0aW9uRW50aXR5LFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LW9ic2VydmF0aW9uLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcblxuaW1wb3J0IHsgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2FjdGlvbnMvcmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlBY3Rpb24nO1xuaW1wb3J0IHsgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkgfSBmcm9tICcuL2VudGl0aWVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmF3RGF0YVByb3ZpZGVyPFR4VHlwZT4ge1xuICBwcm90ZWN0ZWQgYWN0aW9uOiBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eUFjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2hhaW46IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdG9yOiBBYnN0cmFjdE9ic2VydmF0aW9uRXh0cmFjdG9yPFR4VHlwZT4sXG4gICAgcHJvdGVjdGVkIGxvZ2dlcjogQWJzdHJhY3RMb2dnZXIgPSBuZXcgRHVtbXlMb2dnZXIoKSxcbiAgKSB7XG4gICAgdGhpcy5hY3Rpb24gPSBuZXcgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlBY3Rpb24oXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgbG9nZ2VyLmNoaWxkKCdSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eUFjdGlvbicpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IGZvciB0aGUgY29uZmlndXJlZCBjaGFpbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGV4aXN0aW5nIG9yIG5ld2x5IGNyZWF0ZWQgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlcbiAgICovXG4gIHByb3RlY3RlZCBmZXRjaE9yQ3JlYXRlU3RhdGVGb3JDaGFpbiA9XG4gICAgYXN5bmMgKCk6IFByb21pc2U8UmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHk+ID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuYWN0aW9uLmZldGNoQnlDaGFpbih0aGlzLmNoYWluKTtcbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgY29uc3QgbGF0ZXN0Q2hhaW5PYnNlcnZhdGlvbiA9XG4gICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb24uZmV0Y2hMYXRlc3RPYnNlcnZhdGlvbkJ5Q2hhaW4odGhpcy5jaGFpbik7XG4gICAgICAgIGxldCBsYXN0SGVpZ2h0ID0gMDtcbiAgICAgICAgaWYgKCFsYXRlc3RDaGFpbk9ic2VydmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICAgIGBOb3QgZmluZCBhbnkgT2JzZXJ2YXRpb25FbnRpdHkgZm9yIHRoZSAke3RoaXMuY2hhaW59IGNoYWluYCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RIZWlnaHQgPSBsYXRlc3RDaGFpbk9ic2VydmF0aW9uLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuYWN0aW9uLnN0b3JlKHtcbiAgICAgICAgICBjaGFpbjogdGhpcy5jaGFpbixcbiAgICAgICAgICBsYXN0SGVpZ2h0OiBsYXN0SGVpZ2h0LFxuICAgICAgICAgIHN5bmNlZEhlaWdodDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBDcmVhdGVkIFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IG9uIFske3RoaXMuY2hhaW59XSBjaGFpbiBhdCBoZWlnaHQgJHtsYXN0SGVpZ2h0fWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgdGhyb3VnaCBvYnNlcnZhdGlvbnMgb2YgdGhlIGN1cnJlbnQgY2hhaW4gYW5kIGZpbGxzIHRoZWlyIHJhd0RhdGEgZmllbGQuXG4gICAqIFVwZGF0ZXMgdGhlIHN5bmNlZEhlaWdodCBhZnRlciBlYWNoIHByb2Nlc3NlZCBvYnNlcnZhdGlvbiB1bnRpbCB0aGUgY2hhaW4gaXMgZnVsbHkgc3luY2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBmaWxsUmF3RGF0YSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYFJhd0RhdGFQcm92aWRlciBTdGFydGluZyByYXctZGF0YSBmaWxsaW5nIGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW5gLFxuICAgICk7XG5cbiAgICBsZXQgc3RhdGU6IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5ID1cbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hPckNyZWF0ZVN0YXRlRm9yQ2hhaW4oKTtcbiAgICB3aGlsZSAoc3RhdGUuc3luY2VkSGVpZ2h0IDwgc3RhdGUubGFzdEhlaWdodCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBSYXdEYXRhUHJvdmlkZXIgRmV0Y2hpbmcgb2JzZXJ2YXRpb25zIGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW4gZnJvbSBoZWlnaHQgPiAke3N0YXRlLnN5bmNlZEhlaWdodH1gLFxuICAgICAgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZmlsbE9ic2VydmF0aW9uc1Jhd0RhdGEoc3RhdGUpO1xuICAgICAgICBzdGF0ZSA9IHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgUmF3RGF0YVByb3ZpZGVyIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5zdGFjaykgdGhpcy5sb2dnZXIuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgIGBSYXdEYXRhUHJvdmlkZXIgRmluaXNoZWQgZmlsbGluZyByYXctZGF0YSBmb3IgWyR7dGhpcy5jaGFpbn1dIGNoYWluYCxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmZXRjaCB0cmFuc2FjdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgb2JzZXJ2YXRpb24gcGFyYW1ldGVyXG4gICAqXG4gICAqIEBwYXJhbSBvYnNlcnZhdGlvblxuICAgKiBAcmV0dXJucyB7IFByb21pc2U8VHhUeXBlW10+IH1cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBmZXRjaE9ic2VydmF0aW9uVHhzOiAoXG4gICAgb2JzZXJ2YXRpb246IE9ic2VydmF0aW9uRW50aXR5LFxuICApID0+IFByb21pc2U8VHhUeXBlW10gfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogUHJvY2VzcyBvYnNlcnZhdGlvbiBhbmQgd3JpdGUgcmF3RGF0YVxuICAgKlxuICAgKiBAcGFyYW0gb2JzZXJ2YXRpb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gZGV0ZXJtaW5pbmcgcmVzdWx0IG9mIHByb2Nlc3MgZG9uZSBzdWNjZXNzZnVsbHkgb3Igbm9cbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzT2JzZXJ2YXRpb24gPSBhc3luYyAob2JzZXJ2YXRpb246IE9ic2VydmF0aW9uRW50aXR5KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJsb2NrID0geyBoZWlnaHQ6IG9ic2VydmF0aW9uLmhlaWdodCwgaGFzaDogb2JzZXJ2YXRpb24uYmxvY2sgfTtcbiAgICAgIGNvbnN0IHR4cyA9IGF3YWl0IHRoaXMuZmV0Y2hPYnNlcnZhdGlvblR4cyhvYnNlcnZhdGlvbik7XG4gICAgICBpZiAoIXR4cylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUcmFuc2FjdGlvbiBbJHtvYnNlcnZhdGlvbi5zb3VyY2VUeElkfV0gbm90IGZvdW5kIG9yIGludmFsaWQgcmVzcG9uc2UgZnJvbSAke3RoaXMuY2hhaW59IGNoYWluLmAsXG4gICAgICAgICk7XG4gICAgICB0aGlzLmV4dHJhY3Rvci5wcm9jZXNzVHJhbnNhY3Rpb25zKHR4cywgYmxvY2spO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBQcm9jZXNzaW5nIG9mIG9ic2VydmF0aW9uIGZvciAke3RoaXMuY2hhaW59IGZhaWxlZDogJHtlcnJ9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaWxscyB0aGUgcmF3IGRhdGEgZmllbGQgZm9yIGFsbCBPYnNlcnZhdGlvbkVudGl0eSByZWNvcmRzIG9mIHRoZSBjdXJyZW50IGNoYWluIG9mIGlucHV0IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5XG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIGZpbGxPYnNlcnZhdGlvbnNSYXdEYXRhID0gYXN5bmMgKFxuICAgIHN0YXRlOiBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSxcbiAgKTogUHJvbWlzZTxSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eT4gPT4ge1xuICAgIGNvbnN0IG9ic2VydmF0aW9ucyA9IGF3YWl0IHRoaXMuYWN0aW9uLmZldGNoQ2hhaW5PYnNlcnZhdGlvbnMoXG4gICAgICB0aGlzLmNoYWluLFxuICAgICAgc3RhdGUuc3luY2VkSGVpZ2h0LFxuICAgICAgdGhpcy5leHRyYWN0b3IuZ2V0SWQoKSxcbiAgICApO1xuXG4gICAgaWYgKG9ic2VydmF0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbXBvc3NpYmxlQmVoYXZpb3I6IE5vIG1vcmUgb2JzZXJ2YXRpb25zIGZvdW5kIGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW5gLFxuICAgICAgKTtcblxuICAgIGZvciAoY29uc3Qgb2JzZXJ2YXRpb24gb2Ygb2JzZXJ2YXRpb25zKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJhd0RhdGFQcm92aWRlciBVcGRhdGluZyByYXdEYXRhIGZvciBvYnNlcnZhdGlvbiBhdCBoZWlnaHQgJHtvYnNlcnZhdGlvbi5oZWlnaHR9IGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW5gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlzU3VjY2VzcyA9IGF3YWl0IHRoaXMucHJvY2Vzc09ic2VydmF0aW9uKG9ic2VydmF0aW9uKTtcbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFJhd0RhdGFQcm92aWRlciBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIG9ic2VydmF0aW9uIGF0IGhlaWdodCAke29ic2VydmF0aW9uLmhlaWdodH0gZm9yIFske3RoaXMuY2hhaW59XSBjaGFpbmAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFJhd0RhdGFQcm92aWRlciBmYWlsZWQgdG8gcHJvY2VzcyBvYnNlcnZhdGlvbiBhdCBoZWlnaHQgJHtvYnNlcnZhdGlvbi5oZWlnaHR9IGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3RhdGUuc3luY2VkSGVpZ2h0ID0gb2JzZXJ2YXRpb24uaGVpZ2h0O1xuICAgICAgYXdhaXQgdGhpcy5hY3Rpb24uc3RvcmUoc3RhdGUpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBSYXdEYXRhUHJvdmlkZXIgc3luY2VkSGVpZ2h0IHVwZGF0ZWQgdG8gJHtvYnNlcnZhdGlvbi5oZWlnaHR9IGZvciBbJHt0aGlzLmNoYWlufV0gY2hhaW5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export { RawDataProviderStateEntityAction } from './rawDataProviderStateEntityAction';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,59 @@
1
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
2
+ import { ObservationEntity } from '@rosen-bridge/abstract-observation-extractor';
3
+ import { BlockEntity } from '@rosen-bridge/abstract-scanner';
4
+ import { DataSource, Repository } from '@rosen-bridge/extended-typeorm';
5
+ import { RawDataProviderStateEntity } from '../entities';
6
+ export declare class RawDataProviderStateEntityAction {
7
+ protected dataSource: DataSource;
8
+ protected logger: AbstractLogger;
9
+ protected readonly repository: Repository<RawDataProviderStateEntity>;
10
+ protected readonly blockRepository: Repository<BlockEntity>;
11
+ protected readonly observationRepository: Repository<ObservationEntity>;
12
+ constructor(dataSource: DataSource, logger?: AbstractLogger);
13
+ /**
14
+ * Stores one RawDataProviderStateEntity in the database
15
+ *
16
+ * @param rawDataProviderEntities
17
+ * @returns {RawDataProviderStateEntity} saved instance
18
+ */
19
+ store: (rawDataProviderEntity: RawDataProviderStateEntity) => Promise<RawDataProviderStateEntity>;
20
+ /**
21
+ * Retrieves the RawDataProviderStateEntity of specific chain
22
+ *
23
+ * @param chain
24
+ * @returns {RawDataProviderStateEntity | null} Chain-related state, or null if not found
25
+ */
26
+ fetchByChain: (chain: string) => Promise<RawDataProviderStateEntity | null>;
27
+ /**
28
+ * Retrieves the latest ObservationEntity for the specified chain
29
+ *
30
+ * @param chain
31
+ * @returns {ObservationEntity | null} Latest related observation, or null if not found
32
+ */
33
+ fetchLatestObservationByChain: (chain: string) => Promise<ObservationEntity | null>;
34
+ /**
35
+ * Fetches a batch of ObservationEntity records for the given chain
36
+ *
37
+ * @param chain
38
+ * @param offsetHeight
39
+ * @param length
40
+ * @returns {ObservationEntity[]} Chain-related observations
41
+ */
42
+ fetchChainObservations: (chain: string, offsetHeight: number, extractorId: string, length?: number) => Promise<ObservationEntity[]>;
43
+ /**
44
+ * return saved block by scannerName & height if exists
45
+ *
46
+ * @param scannerName
47
+ * @param height
48
+ * @return Promise<BlockEntity or undefined>
49
+ */
50
+ getBlockOfHeight: (scannerName: string, height: number) => Promise<BlockEntity | undefined>;
51
+ /**
52
+ * return lowest height of saved block by chain if exists
53
+ *
54
+ * @param chain
55
+ * @return Promise<BlockEntity or undefined>
56
+ */
57
+ getFirstBlockOfChain: (chain: string) => Promise<BlockEntity | undefined>;
58
+ }
59
+ //# 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,EAAE,WAAW,EAAW,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,UAAU,EAEV,UAAU,EACX,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,qBAAa,gCAAgC;IAMzC,SAAS,CAAC,UAAU,EAAE,UAAU;IAChC,SAAS,CAAC,MAAM,EAAE,cAAc;IANlC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,0BAA0B,CAAC,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC5D,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBAG5D,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,cAAkC;IAOtD;;;;;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,aAAa,MAAM,EACnB,SAAQ,MAA+B,KACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAU7B;IAEF;;;;;;OAMG;IACH,gBAAgB,GACd,aAAa,MAAM,EACnB,QAAQ,MAAM,KACb,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAKjC;IAEF;;;;;OAKG;IACH,oBAAoB,GAClB,OAAO,MAAM,KACZ,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAMjC;CACH"}
@@ -0,0 +1,98 @@
1
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
2
+ import { ObservationEntity } from '@rosen-bridge/abstract-observation-extractor';
3
+ import { BlockEntity, PROCEED } from '@rosen-bridge/abstract-scanner';
4
+ import { MoreThan, } from '@rosen-bridge/extended-typeorm';
5
+ import { OBSERVATION_BATCH_SIZE } from '../constants';
6
+ import { RawDataProviderStateEntity } from '../entities';
7
+ export class RawDataProviderStateEntityAction {
8
+ dataSource;
9
+ logger;
10
+ repository;
11
+ blockRepository;
12
+ observationRepository;
13
+ constructor(dataSource, logger = new DummyLogger()) {
14
+ this.dataSource = dataSource;
15
+ this.logger = logger;
16
+ this.repository = dataSource.getRepository(RawDataProviderStateEntity);
17
+ this.blockRepository = dataSource.getRepository(BlockEntity);
18
+ this.observationRepository = dataSource.getRepository(ObservationEntity);
19
+ }
20
+ /**
21
+ * Stores one RawDataProviderStateEntity in the database
22
+ *
23
+ * @param rawDataProviderEntities
24
+ * @returns {RawDataProviderStateEntity} saved instance
25
+ */
26
+ store = async (rawDataProviderEntity) => {
27
+ const state = await this.repository.save(rawDataProviderEntity);
28
+ this.logger.debug(`raw-data for chain state [${JSON.stringify(rawDataProviderEntity)}] stored in database`);
29
+ return state;
30
+ };
31
+ /**
32
+ * Retrieves the RawDataProviderStateEntity of specific chain
33
+ *
34
+ * @param chain
35
+ * @returns {RawDataProviderStateEntity | null} Chain-related state, or null if not found
36
+ */
37
+ fetchByChain = async (chain) => {
38
+ return await this.repository.findOne({ where: { chain: chain } });
39
+ };
40
+ /**
41
+ * Retrieves the latest ObservationEntity for the specified chain
42
+ *
43
+ * @param chain
44
+ * @returns {ObservationEntity | null} Latest related observation, or null if not found
45
+ */
46
+ fetchLatestObservationByChain = async (chain) => {
47
+ return await this.observationRepository.findOne({
48
+ where: { fromChain: chain, rawData: '' },
49
+ order: { height: 'DESC' },
50
+ });
51
+ };
52
+ /**
53
+ * Fetches a batch of ObservationEntity records for the given chain
54
+ *
55
+ * @param chain
56
+ * @param offsetHeight
57
+ * @param length
58
+ * @returns {ObservationEntity[]} Chain-related observations
59
+ */
60
+ fetchChainObservations = async (chain, offsetHeight, extractorId, length = OBSERVATION_BATCH_SIZE) => {
61
+ return await this.observationRepository.find({
62
+ where: {
63
+ fromChain: chain,
64
+ height: MoreThan(offsetHeight),
65
+ extractor: extractorId,
66
+ },
67
+ order: { height: 'ASC' },
68
+ take: length,
69
+ });
70
+ };
71
+ /**
72
+ * return saved block by scannerName & height if exists
73
+ *
74
+ * @param scannerName
75
+ * @param height
76
+ * @return Promise<BlockEntity or undefined>
77
+ */
78
+ getBlockOfHeight = async (scannerName, height) => {
79
+ const block = await this.blockRepository.findOne({
80
+ where: { status: PROCEED, scanner: scannerName, height: height },
81
+ });
82
+ return block || undefined;
83
+ };
84
+ /**
85
+ * return lowest height of saved block by chain if exists
86
+ *
87
+ * @param chain
88
+ * @return Promise<BlockEntity or undefined>
89
+ */
90
+ getFirstBlockOfChain = async (chain) => {
91
+ const block = await this.blockRepository.findOne({
92
+ where: { status: PROCEED, scanner: chain },
93
+ order: { height: 'ASC' },
94
+ });
95
+ return block || undefined;
96
+ };
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlBY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWN0aW9ucy9yYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eUFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUVMLFFBQVEsR0FFVCxNQUFNLGdDQUFnQyxDQUFDO0FBRXhDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekQsTUFBTSxPQUFPLGdDQUFnQztJQU0vQjtJQUNBO0lBTk8sVUFBVSxDQUF5QztJQUNuRCxlQUFlLENBQTBCO0lBQ3pDLHFCQUFxQixDQUFnQztJQUV4RSxZQUNZLFVBQXNCLEVBQ3RCLFNBQXlCLElBQUksV0FBVyxFQUFFO1FBRDFDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBb0M7UUFFcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxHQUFHLEtBQUssRUFDWCxxQkFBaUQsRUFDWixFQUFFO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiw2QkFBNkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FDekYsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsS0FBSyxFQUNsQixLQUFhLEVBQytCLEVBQUU7UUFDOUMsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILDZCQUE2QixHQUFHLEtBQUssRUFDbkMsS0FBYSxFQUNzQixFQUFFO1FBQ3JDLE9BQU8sTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO1lBQzlDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7Ozs7O09BT0c7SUFDSCxzQkFBc0IsR0FBRyxLQUFLLEVBQzVCLEtBQWEsRUFDYixZQUFvQixFQUNwQixXQUFtQixFQUNuQixTQUFpQixzQkFBc0IsRUFDVCxFQUFFO1FBQ2hDLE9BQU8sTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzNDLEtBQUssRUFBRTtnQkFDTCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQzlCLFNBQVMsRUFBRSxXQUFXO2FBQ3ZCO1lBQ0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUN4QixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7Ozs7T0FNRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFDdEIsV0FBbUIsRUFDbkIsTUFBYyxFQUNvQixFQUFFO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7WUFDL0MsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7U0FDakUsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLElBQUksU0FBUyxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gsb0JBQW9CLEdBQUcsS0FBSyxFQUMxQixLQUFhLEVBQ3FCLEVBQUU7UUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUMvQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFDMUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUN6QixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssSUFBSSxTQUFTLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBPYnNlcnZhdGlvbkVudGl0eSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtb2JzZXJ2YXRpb24tZXh0cmFjdG9yJztcbmltcG9ydCB7IEJsb2NrRW50aXR5LCBQUk9DRUVEIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1zY2FubmVyJztcbmltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIE1vcmVUaGFuLFxuICBSZXBvc2l0b3J5LFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuXG5pbXBvcnQgeyBPQlNFUlZBVElPTl9CQVRDSF9TSVpFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IH0gZnJvbSAnLi4vZW50aXRpZXMnO1xuXG5leHBvcnQgY2xhc3MgUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHlBY3Rpb24ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVwb3NpdG9yeTogUmVwb3NpdG9yeTxSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eT47XG4gIHByb3RlY3RlZCByZWFkb25seSBibG9ja1JlcG9zaXRvcnk6IFJlcG9zaXRvcnk8QmxvY2tFbnRpdHk+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb2JzZXJ2YXRpb25SZXBvc2l0b3J5OiBSZXBvc2l0b3J5PE9ic2VydmF0aW9uRW50aXR5PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlciA9IG5ldyBEdW1teUxvZ2dlcigpLFxuICApIHtcbiAgICB0aGlzLnJlcG9zaXRvcnkgPSBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkpO1xuICAgIHRoaXMuYmxvY2tSZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KEJsb2NrRW50aXR5KTtcbiAgICB0aGlzLm9ic2VydmF0aW9uUmVwb3NpdG9yeSA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShPYnNlcnZhdGlvbkVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmVzIG9uZSBSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eSBpbiB0aGUgZGF0YWJhc2VcbiAgICpcbiAgICogQHBhcmFtIHJhd0RhdGFQcm92aWRlckVudGl0aWVzXG4gICAqIEByZXR1cm5zIHtSYXdEYXRhUHJvdmlkZXJTdGF0ZUVudGl0eX0gc2F2ZWQgaW5zdGFuY2VcbiAgICovXG4gIHN0b3JlID0gYXN5bmMgKFxuICAgIHJhd0RhdGFQcm92aWRlckVudGl0eTogUmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHksXG4gICk6IFByb21pc2U8UmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHk+ID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5zYXZlKHJhd0RhdGFQcm92aWRlckVudGl0eSk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICBgcmF3LWRhdGEgZm9yIGNoYWluIHN0YXRlIFske0pTT04uc3RyaW5naWZ5KHJhd0RhdGFQcm92aWRlckVudGl0eSl9XSBzdG9yZWQgaW4gZGF0YWJhc2VgLFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFJhd0RhdGFQcm92aWRlclN0YXRlRW50aXR5IG9mIHNwZWNpZmljIGNoYWluXG4gICAqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJucyB7UmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkgfCBudWxsfSBDaGFpbi1yZWxhdGVkIHN0YXRlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZmV0Y2hCeUNoYWluID0gYXN5bmMgKFxuICAgIGNoYWluOiBzdHJpbmcsXG4gICk6IFByb21pc2U8UmF3RGF0YVByb3ZpZGVyU3RhdGVFbnRpdHkgfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5maW5kT25lKHsgd2hlcmU6IHsgY2hhaW46IGNoYWluIH0gfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGF0ZXN0IE9ic2VydmF0aW9uRW50aXR5IGZvciB0aGUgc3BlY2lmaWVkIGNoYWluXG4gICAqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YXRpb25FbnRpdHkgfCBudWxsfSBMYXRlc3QgcmVsYXRlZCBvYnNlcnZhdGlvbiwgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIGZldGNoTGF0ZXN0T2JzZXJ2YXRpb25CeUNoYWluID0gYXN5bmMgKFxuICAgIGNoYWluOiBzdHJpbmcsXG4gICk6IFByb21pc2U8T2JzZXJ2YXRpb25FbnRpdHkgfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub2JzZXJ2YXRpb25SZXBvc2l0b3J5LmZpbmRPbmUoe1xuICAgICAgd2hlcmU6IHsgZnJvbUNoYWluOiBjaGFpbiwgcmF3RGF0YTogJycgfSxcbiAgICAgIG9yZGVyOiB7IGhlaWdodDogJ0RFU0MnIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYSBiYXRjaCBvZiBPYnNlcnZhdGlvbkVudGl0eSByZWNvcmRzIGZvciB0aGUgZ2l2ZW4gY2hhaW5cbiAgICpcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEBwYXJhbSBvZmZzZXRIZWlnaHRcbiAgICogQHBhcmFtIGxlbmd0aFxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YXRpb25FbnRpdHlbXX0gQ2hhaW4tcmVsYXRlZCBvYnNlcnZhdGlvbnNcbiAgICovXG4gIGZldGNoQ2hhaW5PYnNlcnZhdGlvbnMgPSBhc3luYyAoXG4gICAgY2hhaW46IHN0cmluZyxcbiAgICBvZmZzZXRIZWlnaHQ6IG51bWJlcixcbiAgICBleHRyYWN0b3JJZDogc3RyaW5nLFxuICAgIGxlbmd0aDogbnVtYmVyID0gT0JTRVJWQVRJT05fQkFUQ0hfU0laRSxcbiAgKTogUHJvbWlzZTxPYnNlcnZhdGlvbkVudGl0eVtdPiA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub2JzZXJ2YXRpb25SZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgZnJvbUNoYWluOiBjaGFpbixcbiAgICAgICAgaGVpZ2h0OiBNb3JlVGhhbihvZmZzZXRIZWlnaHQpLFxuICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcklkLFxuICAgICAgfSxcbiAgICAgIG9yZGVyOiB7IGhlaWdodDogJ0FTQycgfSxcbiAgICAgIHRha2U6IGxlbmd0aCxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJuIHNhdmVkIGJsb2NrIGJ5IHNjYW5uZXJOYW1lICYgaGVpZ2h0IGlmIGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0gc2Nhbm5lck5hbWVcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcmV0dXJuIFByb21pc2U8QmxvY2tFbnRpdHkgb3IgdW5kZWZpbmVkPlxuICAgKi9cbiAgZ2V0QmxvY2tPZkhlaWdodCA9IGFzeW5jIChcbiAgICBzY2FubmVyTmFtZTogc3RyaW5nLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApOiBQcm9taXNlPEJsb2NrRW50aXR5IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLmJsb2NrUmVwb3NpdG9yeS5maW5kT25lKHtcbiAgICAgIHdoZXJlOiB7IHN0YXR1czogUFJPQ0VFRCwgc2Nhbm5lcjogc2Nhbm5lck5hbWUsIGhlaWdodDogaGVpZ2h0IH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrIHx8IHVuZGVmaW5lZDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJuIGxvd2VzdCBoZWlnaHQgb2Ygc2F2ZWQgYmxvY2sgYnkgY2hhaW4gaWYgZXhpc3RzXG4gICAqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIFByb21pc2U8QmxvY2tFbnRpdHkgb3IgdW5kZWZpbmVkPlxuICAgKi9cbiAgZ2V0Rmlyc3RCbG9ja09mQ2hhaW4gPSBhc3luYyAoXG4gICAgY2hhaW46IHN0cmluZyxcbiAgKTogUHJvbWlzZTxCbG9ja0VudGl0eSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5ibG9ja1JlcG9zaXRvcnkuZmluZE9uZSh7XG4gICAgICB3aGVyZTogeyBzdGF0dXM6IFBST0NFRUQsIHNjYW5uZXI6IGNoYWluIH0sXG4gICAgICBvcmRlcjogeyBoZWlnaHQ6ICdBU0MnIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrIHx8IHVuZGVmaW5lZDtcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare const OBSERVATION_BATCH_SIZE = 10;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -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,2 @@
1
+ export { RawDataProviderStateEntity } from './rawDataProviderStateEntity';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ export declare class RawDataProviderStateEntity {
2
+ chain: string;
3
+ lastHeight: number;
4
+ syncedHeight: number;
5
+ }
6
+ //# sourceMappingURL=rawDataProviderStateEntity.d.ts.map
@@ -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==
@@ -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=index.d.ts.map
@@ -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