envio 3.2.0 → 3.3.0-alpha.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 (113) hide show
  1. package/package.json +6 -7
  2. package/src/Batch.res +12 -15
  3. package/src/Batch.res.mjs +4 -5
  4. package/src/BatchProcessing.res +199 -0
  5. package/src/BatchProcessing.res.mjs +125 -0
  6. package/src/ChainFetching.res +375 -0
  7. package/src/ChainFetching.res.mjs +206 -0
  8. package/src/ChainMetadata.res +27 -0
  9. package/src/ChainMetadata.res.mjs +27 -0
  10. package/src/ChainState.res +618 -0
  11. package/src/ChainState.res.mjs +461 -0
  12. package/src/ChainState.resi +85 -0
  13. package/src/Config.res +13 -4
  14. package/src/Config.res.mjs +8 -3
  15. package/src/ContractRegisterContext.res +106 -0
  16. package/src/ContractRegisterContext.res.mjs +76 -0
  17. package/src/Core.res +3 -0
  18. package/src/CrossChainState.res +269 -0
  19. package/src/CrossChainState.res.mjs +197 -0
  20. package/src/CrossChainState.resi +47 -0
  21. package/src/Ecosystem.res +58 -0
  22. package/src/Ecosystem.res.mjs +43 -1
  23. package/src/Env.res +7 -2
  24. package/src/Env.res.mjs +5 -2
  25. package/src/EventConfigBuilder.res +35 -0
  26. package/src/EventConfigBuilder.res.mjs +21 -0
  27. package/src/EventProcessing.res +60 -46
  28. package/src/EventProcessing.res.mjs +33 -32
  29. package/src/EventUtils.res +0 -4
  30. package/src/EventUtils.res.mjs +0 -4
  31. package/src/ExitOnCaughtUp.res +10 -0
  32. package/src/ExitOnCaughtUp.res.mjs +22 -0
  33. package/src/FetchState.res +162 -113
  34. package/src/FetchState.res.mjs +181 -119
  35. package/src/HandlerLoader.res +6 -1
  36. package/src/HandlerLoader.res.mjs +13 -36
  37. package/src/InMemoryStore.res +36 -451
  38. package/src/InMemoryStore.res.mjs +20 -369
  39. package/src/IndexerLoop.res +44 -0
  40. package/src/IndexerLoop.res.mjs +46 -0
  41. package/src/IndexerState.res +544 -0
  42. package/src/IndexerState.res.mjs +547 -0
  43. package/src/IndexerState.resi +132 -0
  44. package/src/Internal.res +44 -7
  45. package/src/LoadLayer.res +20 -18
  46. package/src/LoadLayer.res.mjs +14 -12
  47. package/src/LoadLayer.resi +6 -3
  48. package/src/LogSelection.res +86 -17
  49. package/src/LogSelection.res.mjs +67 -14
  50. package/src/Logging.res +11 -44
  51. package/src/Logging.res.mjs +10 -42
  52. package/src/Main.res +54 -79
  53. package/src/Main.res.mjs +44 -56
  54. package/src/PgStorage.res +8 -71
  55. package/src/PgStorage.res.mjs +3 -47
  56. package/src/Prometheus.res +7 -8
  57. package/src/Prometheus.res.mjs +7 -4
  58. package/src/PruneStaleHistory.res +45 -0
  59. package/src/PruneStaleHistory.res.mjs +46 -0
  60. package/src/RawEvent.res +73 -0
  61. package/src/RawEvent.res.mjs +51 -0
  62. package/src/Rollback.res +204 -0
  63. package/src/Rollback.res.mjs +118 -0
  64. package/src/SimulateItems.res +12 -10
  65. package/src/SimulateItems.res.mjs +1 -1
  66. package/src/TestIndexer.res +34 -27
  67. package/src/TestIndexer.res.mjs +4 -1
  68. package/src/UserContext.res +26 -114
  69. package/src/UserContext.res.mjs +15 -78
  70. package/src/Writing.res +242 -0
  71. package/src/Writing.res.mjs +215 -0
  72. package/src/db/InternalTable.res +14 -27
  73. package/src/sources/Evm.res +40 -1
  74. package/src/sources/Evm.res.mjs +94 -84
  75. package/src/sources/Fuel.res +40 -1
  76. package/src/sources/Fuel.res.mjs +36 -26
  77. package/src/sources/HyperFuel.res +41 -120
  78. package/src/sources/HyperFuel.res.mjs +42 -80
  79. package/src/sources/HyperFuel.resi +1 -24
  80. package/src/sources/HyperFuelClient.res +16 -297
  81. package/src/sources/HyperFuelClient.res.mjs +5 -4
  82. package/src/sources/HyperFuelSource.res +33 -8
  83. package/src/sources/HyperFuelSource.res.mjs +56 -10
  84. package/src/sources/HyperSyncSource.res +7 -5
  85. package/src/sources/HyperSyncSource.res.mjs +3 -3
  86. package/src/sources/RpcSource.res +2 -2
  87. package/src/sources/RpcSource.res.mjs +1 -1
  88. package/src/sources/SourceManager.res +8 -18
  89. package/src/sources/SourceManager.res.mjs +8 -5
  90. package/src/sources/SourceManager.resi +4 -1
  91. package/src/sources/Svm.res +18 -1
  92. package/src/sources/Svm.res.mjs +30 -22
  93. package/src/sources/SvmHyperSyncSource.res +1 -1
  94. package/src/sources/SvmHyperSyncSource.res.mjs +1 -1
  95. package/src/tui/Tui.res +38 -36
  96. package/src/tui/Tui.res.mjs +51 -51
  97. package/src/ChainFetcher.res +0 -519
  98. package/src/ChainFetcher.res.mjs +0 -314
  99. package/src/ChainManager.res +0 -358
  100. package/src/ChainManager.res.mjs +0 -291
  101. package/src/Ctx.res +0 -6
  102. package/src/Ctx.res.mjs +0 -2
  103. package/src/GlobalState.res +0 -1056
  104. package/src/GlobalState.res.mjs +0 -1086
  105. package/src/GlobalStateManager.res +0 -57
  106. package/src/GlobalStateManager.res.mjs +0 -68
  107. package/src/GlobalStateManager.resi +0 -7
  108. package/src/Ports.res +0 -5
  109. package/src/Ports.res.mjs +0 -9
  110. package/src/adapters/MarkBatchProcessedAdapter.res +0 -5
  111. package/src/adapters/MarkBatchProcessedAdapter.res.mjs +0 -14
  112. package/src/sources/EnvioApiClient.res +0 -15
  113. package/src/sources/EnvioApiClient.res.mjs +0 -24
@@ -1,291 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as Env from "./Env.res.mjs";
4
- import * as Batch from "./Batch.res.mjs";
5
- import * as Utils from "./Utils.res.mjs";
6
- import * as Config from "./Config.res.mjs";
7
- import * as ChainMap from "./ChainMap.res.mjs";
8
- import * as Prometheus from "./Prometheus.res.mjs";
9
- import * as ChainFetcher from "./ChainFetcher.res.mjs";
10
- import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
11
- import * as SafeCheckpointTracking from "./SafeCheckpointTracking.res.mjs";
12
-
13
- function isProgressInReorgThreshold(progressBlockNumber, sourceBlockNumber, maxReorgDepth) {
14
- if (maxReorgDepth > 0 && sourceBlockNumber > 0) {
15
- return progressBlockNumber > (sourceBlockNumber - maxReorgDepth | 0);
16
- } else {
17
- return false;
18
- }
19
- }
20
-
21
- function calculateTargetBufferSize(activeChainsCount) {
22
- if (Env.targetBufferSize !== undefined) {
23
- return Env.targetBufferSize;
24
- }
25
- switch (activeChainsCount) {
26
- case 1 :
27
- return 60000;
28
- case 2 :
29
- return 30000;
30
- case 3 :
31
- return 20000;
32
- case 4 :
33
- return 15000;
34
- case 5 :
35
- return 10000;
36
- default:
37
- return 5000;
38
- }
39
- }
40
-
41
- function makeFromDbState(initialState, config, registrations, reducedPollingInterval) {
42
- let isInReorgThreshold = initialState.cleanRun ? false : initialState.chains.some(chain => isProgressInReorgThreshold(chain.progressBlockNumber, chain.sourceBlockNumber, chain.maxReorgDepth));
43
- let targetBufferSize = calculateTargetBufferSize(initialState.chains.length);
44
- Prometheus.ProcessingMaxBatchSize.set(config.batchSize);
45
- Prometheus.IndexingTargetBufferSize.set(targetBufferSize);
46
- Prometheus.ReorgThreshold.set(isInReorgThreshold);
47
- Utils.Dict.forEach(initialState.cache, param => {
48
- let count = param.count;
49
- Prometheus.EffectCacheCount.set(count, param.effectName);
50
- });
51
- let isRealtime = !Env.updateSyncTimeOnRestart && initialState.chains.length !== 0 && initialState.chains.every(c => Stdlib_Option.isSome(c.timestampCaughtUpToHeadOrEndblock));
52
- let chainFetchersArr = initialState.chains.map(resumedChainState => {
53
- let chain = Config.getChain(config, resumedChainState.id);
54
- let chainConfig = ChainMap.get(config.chainMap, chain);
55
- return [
56
- chain,
57
- ChainFetcher.makeFromDbState(chainConfig, resumedChainState, initialState.reorgCheckpoints, isInReorgThreshold, isRealtime, config, registrations, targetBufferSize, reducedPollingInterval)
58
- ];
59
- });
60
- let chainFetchers = ChainMap.fromArrayUnsafe(chainFetchersArr);
61
- let allChainsReady = {
62
- contents: chainFetchersArr.length !== 0
63
- };
64
- chainFetchersArr.forEach(param => {
65
- let cf = param[1];
66
- let chain = param[0];
67
- Prometheus.ProgressBlockNumber.set(cf.committedProgressBlockNumber, chain);
68
- Prometheus.ProgressReady.init(chain);
69
- if (ChainFetcher.isReady(cf)) {
70
- return Prometheus.ProgressReady.set(chain);
71
- } else {
72
- allChainsReady.contents = false;
73
- return;
74
- }
75
- });
76
- if (allChainsReady.contents) {
77
- Prometheus.ProgressReady.setAllReady();
78
- }
79
- return {
80
- chainFetchers: chainFetchers,
81
- isInReorgThreshold: isInReorgThreshold,
82
- isRealtime: isRealtime
83
- };
84
- }
85
-
86
- function getChainFetcher(chainManager, chain) {
87
- return ChainMap.get(chainManager.chainFetchers, chain);
88
- }
89
-
90
- function setChainFetcher(chainManager, chainFetcher) {
91
- return {
92
- chainFetchers: ChainMap.set(chainManager.chainFetchers, ChainMap.Chain.makeUnsafe(chainFetcher.chainConfig.id), chainFetcher),
93
- isInReorgThreshold: chainManager.isInReorgThreshold,
94
- isRealtime: chainManager.isRealtime
95
- };
96
- }
97
-
98
- function nextItemIsNone(chainManager) {
99
- return !Batch.hasReadyItem(ChainMap.map(chainManager.chainFetchers, cf => cf.fetchState));
100
- }
101
-
102
- function createBatch(chainManager, processedCheckpointId, batchSizeTarget, isRollback) {
103
- return Batch.make(processedCheckpointId + (
104
- isRollback ? 1n : 0n
105
- ), ChainMap.map(chainManager.chainFetchers, cf => ({
106
- fetchState: cf.fetchState,
107
- reorgDetection: cf.reorgDetection,
108
- progressBlockNumber: cf.committedProgressBlockNumber,
109
- sourceBlockNumber: cf.fetchState.knownHeight,
110
- totalEventsProcessed: cf.numEventsProcessed,
111
- chainConfig: cf.chainConfig
112
- })), batchSizeTarget, chainManager.isInReorgThreshold);
113
- }
114
-
115
- function isProgressAtHead(chainManager) {
116
- return ChainMap.values(chainManager.chainFetchers).every(cf => cf.isProgressAtHead);
117
- }
118
-
119
- function isActivelyIndexing(chainManager) {
120
- return ChainMap.values(chainManager.chainFetchers).every(ChainFetcher.isActivelyIndexing);
121
- }
122
-
123
- function getSafeCheckpointId(chainManager) {
124
- let chainFetchers = ChainMap.values(chainManager.chainFetchers);
125
- let result;
126
- for (let idx = 0, idx_finish = chainFetchers.length; idx < idx_finish; ++idx) {
127
- let chainFetcher = chainFetchers[idx];
128
- let safeCheckpointTracking = chainFetcher.safeCheckpointTracking;
129
- if (safeCheckpointTracking !== undefined) {
130
- let safeCheckpointId = SafeCheckpointTracking.getSafeCheckpointId(safeCheckpointTracking, chainFetcher.fetchState.knownHeight);
131
- let current = result;
132
- if (!(current !== undefined && safeCheckpointId >= current)) {
133
- result = safeCheckpointId;
134
- }
135
- }
136
- }
137
- let id = result;
138
- if (id !== undefined && id > 0n) {
139
- return id;
140
- }
141
- }
142
-
143
- function updateProgressedChains(chainManager, batch) {
144
- let nextQueueItemIsNone = nextItemIsNone(chainManager);
145
- let allChainsAtHead = isProgressAtHead(chainManager);
146
- let allChainsReady = {
147
- contents: true
148
- };
149
- let chainFetchers = ChainMap.map(chainManager.chainFetchers, prev => {
150
- let chain = ChainMap.Chain.makeUnsafe(prev.chainConfig.id);
151
- let maybeChainAfterBatch = batch.progressedChainsById[chain];
152
- let cf;
153
- if (maybeChainAfterBatch !== undefined) {
154
- if (prev.committedProgressBlockNumber !== maybeChainAfterBatch.progressBlockNumber) {
155
- Prometheus.ProgressBlockNumber.set(maybeChainAfterBatch.progressBlockNumber, chain);
156
- }
157
- if (prev.numEventsProcessed !== maybeChainAfterBatch.totalEventsProcessed) {
158
- Prometheus.ProgressEventsCount.set(maybeChainAfterBatch.totalEventsProcessed, chain);
159
- }
160
- let eventItem = Batch.findLastEventItem(batch, chain);
161
- if (eventItem !== undefined) {
162
- let blockTimestamp = eventItem.timestamp;
163
- let currentTimeMs = Date.now() | 0;
164
- let blockTimestampMs = blockTimestamp * 1000 | 0;
165
- let latencyMs = currentTimeMs - blockTimestampMs | 0;
166
- Prometheus.ProgressLatency.set(latencyMs, chain);
167
- }
168
- let match = prev.fetchState.firstEventBlock;
169
- let tmp;
170
- if (match !== undefined) {
171
- tmp = prev.fetchState;
172
- } else {
173
- let firstEventBlock = Batch.findFirstEventBlockNumber(batch, chain);
174
- if (firstEventBlock !== undefined) {
175
- let init = prev.fetchState;
176
- tmp = {
177
- optimizedPartitions: init.optimizedPartitions,
178
- startBlock: init.startBlock,
179
- endBlock: init.endBlock,
180
- normalSelection: init.normalSelection,
181
- indexingAddresses: init.indexingAddresses,
182
- contractConfigs: init.contractConfigs,
183
- chainId: init.chainId,
184
- latestOnBlockBlockNumber: init.latestOnBlockBlockNumber,
185
- blockLag: init.blockLag,
186
- buffer: init.buffer,
187
- targetBufferSize: init.targetBufferSize,
188
- onBlockConfigs: init.onBlockConfigs,
189
- knownHeight: init.knownHeight,
190
- firstEventBlock: firstEventBlock
191
- };
192
- } else {
193
- tmp = prev.fetchState;
194
- }
195
- }
196
- let safeCheckpointTracking = prev.safeCheckpointTracking;
197
- cf = {
198
- logger: prev.logger,
199
- fetchState: tmp,
200
- sourceManager: prev.sourceManager,
201
- chainConfig: prev.chainConfig,
202
- isProgressAtHead: prev.isProgressAtHead || maybeChainAfterBatch.isProgressAtHeadWhenBatchCreated,
203
- timestampCaughtUpToHeadOrEndblock: prev.timestampCaughtUpToHeadOrEndblock,
204
- committedProgressBlockNumber: maybeChainAfterBatch.progressBlockNumber,
205
- numEventsProcessed: maybeChainAfterBatch.totalEventsProcessed,
206
- reorgDetection: prev.reorgDetection,
207
- safeCheckpointTracking: safeCheckpointTracking !== undefined ? SafeCheckpointTracking.updateOnNewBatch(safeCheckpointTracking, prev.fetchState.knownHeight, chain, batch.checkpointIds, batch.checkpointBlockNumbers, batch.checkpointChainIds) : undefined
208
- };
209
- } else {
210
- cf = prev;
211
- }
212
- let cf$1;
213
- if (ChainFetcher.hasProcessedToEndblock(cf)) {
214
- let timestampCaughtUpToHeadOrEndblock = ChainFetcher.isReady(cf) ? cf.timestampCaughtUpToHeadOrEndblock : new Date();
215
- cf$1 = {
216
- logger: cf.logger,
217
- fetchState: cf.fetchState,
218
- sourceManager: cf.sourceManager,
219
- chainConfig: cf.chainConfig,
220
- isProgressAtHead: cf.isProgressAtHead,
221
- timestampCaughtUpToHeadOrEndblock: timestampCaughtUpToHeadOrEndblock,
222
- committedProgressBlockNumber: cf.committedProgressBlockNumber,
223
- numEventsProcessed: cf.numEventsProcessed,
224
- reorgDetection: cf.reorgDetection,
225
- safeCheckpointTracking: cf.safeCheckpointTracking
226
- };
227
- } else if (!ChainFetcher.isReady(cf) && cf.isProgressAtHead) {
228
- if (nextQueueItemIsNone && allChainsAtHead) {
229
- cf$1 = {
230
- logger: cf.logger,
231
- fetchState: cf.fetchState,
232
- sourceManager: cf.sourceManager,
233
- chainConfig: cf.chainConfig,
234
- isProgressAtHead: cf.isProgressAtHead,
235
- timestampCaughtUpToHeadOrEndblock: new Date(),
236
- committedProgressBlockNumber: cf.committedProgressBlockNumber,
237
- numEventsProcessed: cf.numEventsProcessed,
238
- reorgDetection: cf.reorgDetection,
239
- safeCheckpointTracking: cf.safeCheckpointTracking
240
- };
241
- } else {
242
- let hasNoMoreEventsToProcess = ChainFetcher.hasNoMoreEventsToProcess(cf);
243
- cf$1 = hasNoMoreEventsToProcess ? ({
244
- logger: cf.logger,
245
- fetchState: cf.fetchState,
246
- sourceManager: cf.sourceManager,
247
- chainConfig: cf.chainConfig,
248
- isProgressAtHead: cf.isProgressAtHead,
249
- timestampCaughtUpToHeadOrEndblock: new Date(),
250
- committedProgressBlockNumber: cf.committedProgressBlockNumber,
251
- numEventsProcessed: cf.numEventsProcessed,
252
- reorgDetection: cf.reorgDetection,
253
- safeCheckpointTracking: cf.safeCheckpointTracking
254
- }) : cf;
255
- }
256
- } else {
257
- cf$1 = cf;
258
- }
259
- if (ChainFetcher.isReady(cf$1)) {
260
- if (!ChainFetcher.isReady(prev)) {
261
- Prometheus.ProgressReady.set(chain);
262
- }
263
- } else {
264
- allChainsReady.contents = false;
265
- }
266
- return cf$1;
267
- });
268
- if (allChainsReady.contents) {
269
- Prometheus.ProgressReady.setAllReady();
270
- }
271
- return {
272
- chainFetchers: chainFetchers,
273
- isInReorgThreshold: chainManager.isInReorgThreshold,
274
- isRealtime: chainManager.isRealtime || allChainsReady.contents
275
- };
276
- }
277
-
278
- export {
279
- isProgressInReorgThreshold,
280
- calculateTargetBufferSize,
281
- makeFromDbState,
282
- getChainFetcher,
283
- setChainFetcher,
284
- nextItemIsNone,
285
- createBatch,
286
- isProgressAtHead,
287
- isActivelyIndexing,
288
- getSafeCheckpointId,
289
- updateProgressedChains,
290
- }
291
- /* Env Not a pure module */
package/src/Ctx.res DELETED
@@ -1,6 +0,0 @@
1
- type t = {
2
- registrations: HandlerRegister.registrations,
3
- config: Config.t,
4
- persistence: Persistence.t,
5
- inMemoryStore: InMemoryStore.t,
6
- }
package/src/Ctx.res.mjs DELETED
@@ -1,2 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
- /* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */