envio 3.0.0-alpha.21 → 3.0.0-alpha.22

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 (219) hide show
  1. package/bin.mjs +2 -48
  2. package/evm.schema.json +67 -0
  3. package/fuel.schema.json +67 -0
  4. package/index.d.ts +822 -38
  5. package/index.js +5 -3
  6. package/package.json +10 -8
  7. package/rescript.json +5 -9
  8. package/src/Address.res +4 -5
  9. package/src/Address.res.mjs +9 -12
  10. package/src/Api.res +15 -0
  11. package/src/Api.res.mjs +20 -0
  12. package/src/Batch.res +32 -34
  13. package/src/Batch.res.mjs +172 -187
  14. package/src/Bin.res +89 -0
  15. package/src/Bin.res.mjs +97 -0
  16. package/src/ChainFetcher.res +33 -57
  17. package/src/ChainFetcher.res.mjs +197 -227
  18. package/src/ChainManager.res +6 -14
  19. package/src/ChainManager.res.mjs +74 -85
  20. package/src/ChainMap.res +14 -16
  21. package/src/ChainMap.res.mjs +38 -38
  22. package/src/Config.res +193 -135
  23. package/src/Config.res.mjs +566 -592
  24. package/src/Core.res +182 -0
  25. package/src/Core.res.mjs +207 -0
  26. package/src/Ecosystem.res +25 -4
  27. package/src/Ecosystem.res.mjs +12 -13
  28. package/src/Env.res +20 -13
  29. package/src/Env.res.mjs +124 -113
  30. package/src/EnvSafe.res +269 -0
  31. package/src/EnvSafe.res.mjs +296 -0
  32. package/src/EnvSafe.resi +18 -0
  33. package/src/Envio.res +37 -26
  34. package/src/Envio.res.mjs +59 -60
  35. package/src/ErrorHandling.res +2 -2
  36. package/src/ErrorHandling.res.mjs +15 -15
  37. package/src/EventConfigBuilder.res +219 -81
  38. package/src/EventConfigBuilder.res.mjs +259 -202
  39. package/src/EventProcessing.res +27 -38
  40. package/src/EventProcessing.res.mjs +165 -183
  41. package/src/EventUtils.res +11 -11
  42. package/src/EventUtils.res.mjs +21 -22
  43. package/src/EvmTypes.res +0 -1
  44. package/src/EvmTypes.res.mjs +5 -5
  45. package/src/FetchState.res +360 -256
  46. package/src/FetchState.res.mjs +958 -914
  47. package/src/GlobalState.res +365 -351
  48. package/src/GlobalState.res.mjs +958 -992
  49. package/src/GlobalStateManager.res +1 -2
  50. package/src/GlobalStateManager.res.mjs +36 -44
  51. package/src/HandlerLoader.res +107 -23
  52. package/src/HandlerLoader.res.mjs +128 -38
  53. package/src/HandlerRegister.res +127 -103
  54. package/src/HandlerRegister.res.mjs +164 -164
  55. package/src/HandlerRegister.resi +12 -4
  56. package/src/Hasura.res +35 -22
  57. package/src/Hasura.res.mjs +158 -167
  58. package/src/InMemoryStore.res +20 -27
  59. package/src/InMemoryStore.res.mjs +64 -80
  60. package/src/InMemoryTable.res +34 -39
  61. package/src/InMemoryTable.res.mjs +165 -170
  62. package/src/Internal.res +52 -33
  63. package/src/Internal.res.mjs +84 -81
  64. package/src/LazyLoader.res.mjs +55 -61
  65. package/src/LoadLayer.res +77 -78
  66. package/src/LoadLayer.res.mjs +160 -189
  67. package/src/LoadManager.res +16 -21
  68. package/src/LoadManager.res.mjs +79 -84
  69. package/src/LogSelection.res +236 -68
  70. package/src/LogSelection.res.mjs +211 -141
  71. package/src/Logging.res +13 -9
  72. package/src/Logging.res.mjs +130 -143
  73. package/src/Main.res +428 -51
  74. package/src/Main.res.mjs +528 -271
  75. package/src/Persistence.res +77 -84
  76. package/src/Persistence.res.mjs +131 -132
  77. package/src/PgStorage.res +291 -167
  78. package/src/PgStorage.res.mjs +797 -817
  79. package/src/Prometheus.res +50 -58
  80. package/src/Prometheus.res.mjs +345 -373
  81. package/src/ReorgDetection.res +22 -24
  82. package/src/ReorgDetection.res.mjs +100 -106
  83. package/src/SafeCheckpointTracking.res +7 -7
  84. package/src/SafeCheckpointTracking.res.mjs +40 -43
  85. package/src/SimulateItems.res +41 -49
  86. package/src/SimulateItems.res.mjs +257 -272
  87. package/src/Sink.res +2 -2
  88. package/src/Sink.res.mjs +22 -26
  89. package/src/TableIndices.res +1 -2
  90. package/src/TableIndices.res.mjs +42 -48
  91. package/src/TestIndexer.res +196 -189
  92. package/src/TestIndexer.res.mjs +536 -536
  93. package/src/TestIndexerProxyStorage.res +15 -16
  94. package/src/TestIndexerProxyStorage.res.mjs +98 -122
  95. package/src/TestIndexerWorker.res +4 -0
  96. package/src/TestIndexerWorker.res.mjs +7 -0
  97. package/src/Throttler.res +3 -3
  98. package/src/Throttler.res.mjs +23 -24
  99. package/src/Time.res +1 -1
  100. package/src/Time.res.mjs +18 -21
  101. package/src/TopicFilter.res +3 -3
  102. package/src/TopicFilter.res.mjs +29 -30
  103. package/src/UserContext.res +93 -54
  104. package/src/UserContext.res.mjs +197 -182
  105. package/src/Utils.res +141 -86
  106. package/src/Utils.res.mjs +334 -295
  107. package/src/bindings/BigDecimal.res +0 -2
  108. package/src/bindings/BigDecimal.res.mjs +19 -23
  109. package/src/bindings/ClickHouse.res +28 -27
  110. package/src/bindings/ClickHouse.res.mjs +243 -240
  111. package/src/bindings/DateFns.res +11 -11
  112. package/src/bindings/DateFns.res.mjs +7 -7
  113. package/src/bindings/EventSource.res.mjs +2 -2
  114. package/src/bindings/Express.res +2 -5
  115. package/src/bindings/Hrtime.res +2 -2
  116. package/src/bindings/Hrtime.res.mjs +30 -32
  117. package/src/bindings/Lodash.res.mjs +1 -1
  118. package/src/bindings/NodeJs.res +14 -9
  119. package/src/bindings/NodeJs.res.mjs +20 -20
  120. package/src/bindings/Pino.res +8 -10
  121. package/src/bindings/Pino.res.mjs +40 -43
  122. package/src/bindings/Postgres.res +2 -5
  123. package/src/bindings/Postgres.res.mjs +9 -9
  124. package/src/bindings/PromClient.res +17 -2
  125. package/src/bindings/PromClient.res.mjs +30 -7
  126. package/src/bindings/SDSL.res.mjs +2 -2
  127. package/src/bindings/Viem.res +4 -4
  128. package/src/bindings/Viem.res.mjs +20 -22
  129. package/src/bindings/Vitest.res +1 -1
  130. package/src/bindings/Vitest.res.mjs +2 -2
  131. package/src/bindings/WebSocket.res +1 -1
  132. package/src/db/EntityHistory.res +9 -3
  133. package/src/db/EntityHistory.res.mjs +84 -59
  134. package/src/db/InternalTable.res +62 -60
  135. package/src/db/InternalTable.res.mjs +271 -203
  136. package/src/db/Schema.res +1 -2
  137. package/src/db/Schema.res.mjs +28 -32
  138. package/src/db/Table.res +28 -27
  139. package/src/db/Table.res.mjs +276 -292
  140. package/src/sources/EventRouter.res +21 -16
  141. package/src/sources/EventRouter.res.mjs +55 -57
  142. package/src/sources/Evm.res +17 -1
  143. package/src/sources/Evm.res.mjs +16 -8
  144. package/src/sources/EvmChain.res +15 -17
  145. package/src/sources/EvmChain.res.mjs +40 -42
  146. package/src/sources/Fuel.res +14 -1
  147. package/src/sources/Fuel.res.mjs +16 -8
  148. package/src/sources/FuelSDK.res +1 -1
  149. package/src/sources/FuelSDK.res.mjs +6 -8
  150. package/src/sources/HyperFuel.res +8 -10
  151. package/src/sources/HyperFuel.res.mjs +113 -123
  152. package/src/sources/HyperFuelClient.res.mjs +6 -7
  153. package/src/sources/HyperFuelSource.res +19 -20
  154. package/src/sources/HyperFuelSource.res.mjs +339 -356
  155. package/src/sources/HyperSync.res +11 -13
  156. package/src/sources/HyperSync.res.mjs +206 -220
  157. package/src/sources/HyperSyncClient.res +5 -7
  158. package/src/sources/HyperSyncClient.res.mjs +70 -75
  159. package/src/sources/HyperSyncHeightStream.res +8 -9
  160. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  161. package/src/sources/HyperSyncJsonApi.res +18 -15
  162. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  163. package/src/sources/HyperSyncSource.res +17 -21
  164. package/src/sources/HyperSyncSource.res.mjs +268 -290
  165. package/src/sources/Rpc.res +5 -5
  166. package/src/sources/Rpc.res.mjs +168 -192
  167. package/src/sources/RpcSource.res +166 -167
  168. package/src/sources/RpcSource.res.mjs +972 -1046
  169. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  170. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  171. package/src/sources/SimulateSource.res +1 -1
  172. package/src/sources/SimulateSource.res.mjs +35 -38
  173. package/src/sources/Source.res +1 -1
  174. package/src/sources/Source.res.mjs +3 -3
  175. package/src/sources/SourceManager.res +39 -20
  176. package/src/sources/SourceManager.res.mjs +340 -371
  177. package/src/sources/SourceManager.resi +2 -1
  178. package/src/sources/Svm.res +12 -5
  179. package/src/sources/Svm.res.mjs +44 -41
  180. package/src/tui/Tui.res +23 -12
  181. package/src/tui/Tui.res.mjs +292 -290
  182. package/src/tui/bindings/Ink.res +2 -4
  183. package/src/tui/bindings/Ink.res.mjs +35 -41
  184. package/src/tui/components/BufferedProgressBar.res +7 -7
  185. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  186. package/src/tui/components/CustomHooks.res +1 -2
  187. package/src/tui/components/CustomHooks.res.mjs +102 -122
  188. package/src/tui/components/Messages.res +1 -2
  189. package/src/tui/components/Messages.res.mjs +38 -42
  190. package/src/tui/components/SyncETA.res +10 -11
  191. package/src/tui/components/SyncETA.res.mjs +178 -196
  192. package/src/tui/components/TuiData.res +1 -1
  193. package/src/tui/components/TuiData.res.mjs +7 -6
  194. package/src/vendored/Rest.res +52 -66
  195. package/src/vendored/Rest.res.mjs +324 -364
  196. package/svm.schema.json +67 -0
  197. package/src/Address.gen.ts +0 -8
  198. package/src/Config.gen.ts +0 -19
  199. package/src/Envio.gen.ts +0 -55
  200. package/src/EvmTypes.gen.ts +0 -6
  201. package/src/InMemoryStore.gen.ts +0 -6
  202. package/src/Internal.gen.ts +0 -64
  203. package/src/PgStorage.gen.ts +0 -10
  204. package/src/PgStorage.res.d.mts +0 -5
  205. package/src/Types.ts +0 -56
  206. package/src/bindings/BigDecimal.gen.ts +0 -14
  207. package/src/bindings/BigDecimal.res.d.mts +0 -5
  208. package/src/bindings/BigInt.gen.ts +0 -10
  209. package/src/bindings/BigInt.res +0 -70
  210. package/src/bindings/BigInt.res.d.mts +0 -5
  211. package/src/bindings/BigInt.res.mjs +0 -154
  212. package/src/bindings/Ethers.res.d.mts +0 -5
  213. package/src/bindings/Pino.gen.ts +0 -17
  214. package/src/bindings/Postgres.gen.ts +0 -8
  215. package/src/bindings/Postgres.res.d.mts +0 -5
  216. package/src/bindings/Promise.res +0 -67
  217. package/src/bindings/Promise.res.mjs +0 -26
  218. package/src/db/InternalTable.gen.ts +0 -36
  219. package/src/sources/HyperSyncClient.gen.ts +0 -19
@@ -1,5 +1,3 @@
1
- open Belt
2
-
3
1
  type sourceManagerStatus = Idle | WaitingForNewBlock | Querieng
4
2
 
5
3
  type sourceState = {
@@ -26,6 +24,7 @@ type t = {
26
24
  newBlockStallTimeout: int,
27
25
  newBlockStallTimeoutLive: int,
28
26
  stalledPollingInterval: int,
27
+ reducedPollingInterval: int,
29
28
  getHeightRetryInterval: (~retry: int) => int,
30
29
  mutable activeSource: Source.t,
31
30
  mutable waitingForNewBlockStateId: option<int>,
@@ -75,6 +74,7 @@ let make = (
75
74
  ~newBlockStallTimeout=60_000,
76
75
  ~newBlockStallTimeoutLive=20_000,
77
76
  ~stalledPollingInterval=5_000,
77
+ ~reducedPollingInterval=60_000,
78
78
  ~recoveryTimeout=60_000.0,
79
79
  ~getHeightRetryInterval=makeGetHeightRetryInterval(
80
80
  ~initialRetryInterval=1000,
@@ -82,12 +82,13 @@ let make = (
82
82
  ~maxRetryInterval=60_000,
83
83
  ),
84
84
  ) => {
85
- let hasLive = sources->Js.Array2.some(s => s.sourceFor === Live)
86
- let initialActiveSource = switch sources->Js.Array2.find(source =>
85
+ let hasLive = sources->Array.some(s => s.sourceFor === Live)
86
+ let initialActiveSource = switch sources->Array.find(source =>
87
87
  getSourceRole(~sourceFor=source.sourceFor, ~isLive, ~hasLive) === Some(Primary)
88
88
  ) {
89
89
  | Some(source) => source
90
- | None => Js.Exn.raiseError("Invalid configuration, no data-source for historical sync provided")
90
+ | None =>
91
+ JsError.throwWithMessage("Invalid configuration, no data-source for historical sync provided")
91
92
  }
92
93
  Prometheus.IndexingMaxConcurrency.set(
93
94
  ~maxConcurrency=maxPartitionConcurrency,
@@ -113,6 +114,7 @@ let make = (
113
114
  newBlockStallTimeout,
114
115
  newBlockStallTimeoutLive,
115
116
  stalledPollingInterval,
117
+ reducedPollingInterval,
116
118
  getHeightRetryInterval,
117
119
  recoveryTimeout,
118
120
  statusStart: Hrtime.makeTimer(),
@@ -214,7 +216,7 @@ let disableSource = (sourceManager: t, sourceState: sourceState) => {
214
216
  if sourceState.source.sourceFor === Live {
215
217
  // Only clear hasLive if no other non-disabled Live sources remain
216
218
  let hasOtherLive =
217
- sourceManager.sourcesState->Js.Array2.some(s =>
219
+ sourceManager.sourcesState->Array.some(s =>
218
220
  s !== sourceState && !s.disabled && s.source.sourceFor === Live
219
221
  )
220
222
  sourceManager.hasLive = hasOtherLive
@@ -233,6 +235,7 @@ let getSourceNewHeight = async (
233
235
  ~isLive,
234
236
  ~status: ref<status>,
235
237
  ~logger,
238
+ ~reducedPolling,
236
239
  ) => {
237
240
  let source = sourceState.source
238
241
  let initialHeight = sourceState.knownHeight
@@ -295,7 +298,9 @@ let getSourceNewHeight = async (
295
298
  sourceState.unsubscribe = Some(unsubscribe)
296
299
  | _ =>
297
300
  // Slowdown polling when the chain isn't progressing
298
- let pollingInterval = if status.contents === Stalled {
301
+ let pollingInterval = if reducedPolling {
302
+ sourceManager.reducedPollingInterval
303
+ } else if status.contents === Stalled {
299
304
  sourceManager.stalledPollingInterval
300
305
  } else {
301
306
  source.pollingInterval
@@ -331,15 +336,15 @@ let getSourceNewHeight = async (
331
336
 
332
337
  let compareByOldestFailure = (a: sourceState, b: sourceState) =>
333
338
  switch (a.lastFailedAt, b.lastFailedAt) {
334
- | (None, Some(_)) => -1
335
- | (Some(_), None) => 1
336
- | (Some(a), Some(b)) => a < b ? -1 : a > b ? 1 : 0
337
- | (None, None) => 0
339
+ | (None, Some(_)) => Ordering.less
340
+ | (Some(_), None) => Ordering.greater
341
+ | (Some(a), Some(b)) => a < b ? Ordering.less : a > b ? Ordering.greater : Ordering.equal
342
+ | (None, None) => Ordering.equal
338
343
  }
339
344
 
340
345
  // Priority: working primaries > working secondaries > all primaries.
341
346
  let getNextSources = (sourceManager, ~isLive, ~excludedSources=?) => {
342
- let now = Js.Date.now()
347
+ let now = Date.now()
343
348
  let workingPrimarySources = []
344
349
  let allPrimarySources = []
345
350
  let workingSecondarySources = []
@@ -377,7 +382,8 @@ let getNextSources = (sourceManager, ~isLive, ~excludedSources=?) => {
377
382
  workingSecondarySources
378
383
  } else {
379
384
  // All primaries in recovery — sort by oldest lastFailedAt (closest to recovery first)
380
- allPrimarySources->Js.Array2.sortInPlaceWith(compareByOldestFailure)
385
+ allPrimarySources->Array.sort(compareByOldestFailure)
386
+ allPrimarySources
381
387
  }
382
388
  }
383
389
 
@@ -389,7 +395,7 @@ let getNextSource = (sourceManager, ~isLive, ~excludedSources=?) => {
389
395
  | None => None
390
396
  | Some(first) if first.source === sourceManager.activeSource => Some(first)
391
397
  | _ =>
392
- switch sources->Js.Array2.find(s => s.source === sourceManager.activeSource) {
398
+ switch sources->Array.find(s => s.source === sourceManager.activeSource) {
393
399
  | Some(_) as result => result
394
400
  | None => sources->Array.get(0)
395
401
  }
@@ -397,7 +403,7 @@ let getNextSource = (sourceManager, ~isLive, ~excludedSources=?) => {
397
403
  }
398
404
 
399
405
  // Polls for a block height greater than the given block number to ensure a new block is available for indexing.
400
- let waitForNewBlock = async (sourceManager: t, ~knownHeight, ~isLive) => {
406
+ let waitForNewBlock = async (sourceManager: t, ~knownHeight, ~isLive, ~reducedPolling) => {
401
407
  let {sourcesState} = sourceManager
402
408
 
403
409
  let logger = Logging.createChild(
@@ -406,13 +412,24 @@ let waitForNewBlock = async (sourceManager: t, ~knownHeight, ~isLive) => {
406
412
  "knownHeight": knownHeight,
407
413
  },
408
414
  )
409
- logger->Logging.childTrace("Initiating check for new blocks.")
415
+ if reducedPolling {
416
+ logger->Logging.childTrace(
417
+ `Waiting for new blocks with reduced polling (${(sourceManager.reducedPollingInterval / 1000)
418
+ ->Int.toString}s). Chain is caught up, waiting for other chains to backfill.`,
419
+ )
420
+ } else {
421
+ logger->Logging.childTrace("Initiating check for new blocks.")
422
+ }
410
423
 
411
424
  let mainSources = sourceManager->getNextSources(~isLive)
412
425
 
413
426
  let status = ref(Active)
414
427
 
415
- let stallTimeout = if isLive {
428
+ // Use a much longer stall timeout when reduced polling is active
429
+ // to avoid spurious stall warnings while waiting for other chains to backfill
430
+ let stallTimeout = if reducedPolling {
431
+ sourceManager.reducedPollingInterval * 2
432
+ } else if isLive {
416
433
  sourceManager.newBlockStallTimeoutLive
417
434
  } else {
418
435
  sourceManager.newBlockStallTimeout
@@ -430,6 +447,7 @@ let waitForNewBlock = async (sourceManager: t, ~knownHeight, ~isLive) => {
430
447
  ~isLive,
431
448
  ~status,
432
449
  ~logger,
450
+ ~reducedPolling,
433
451
  ),
434
452
  )
435
453
  })
@@ -439,7 +457,7 @@ let waitForNewBlock = async (sourceManager: t, ~knownHeight, ~isLive) => {
439
457
  let fallbackSources = []
440
458
  sourcesState->Array.forEach(sourceState => {
441
459
  if (
442
- !(mainSources->Js.Array2.includes(sourceState)) &&
460
+ !(mainSources->Array.includes(sourceState)) &&
443
461
  getSourceRole(
444
462
  ~sourceFor=sourceState.source.sourceFor,
445
463
  ~isLive,
@@ -479,6 +497,7 @@ let waitForNewBlock = async (sourceManager: t, ~knownHeight, ~isLive) => {
479
497
  ~isLive,
480
498
  ~status,
481
499
  ~logger,
500
+ ~reducedPolling,
482
501
  ),
483
502
  )
484
503
  }),
@@ -560,7 +579,7 @@ let executeQuery = async (sourceManager: t, ~query: FetchState.query, ~knownHeig
560
579
  ~fromBlock=query.fromBlock,
561
580
  ~toBlock,
562
581
  ~addressesByContractName=query.addressesByContractName,
563
- ~indexingContracts=query.indexingContracts,
582
+ ~indexingAddresses=query.indexingAddresses,
564
583
  ~partitionId=query.partitionId,
565
584
  ~knownHeight,
566
585
  ~selection=query.selection,
@@ -647,7 +666,7 @@ let executeQuery = async (sourceManager: t, ~query: FetchState.query, ~knownHeig
647
666
  }
648
667
 
649
668
  if shouldSwitch {
650
- let now = Js.Date.now()
669
+ let now = Date.now()
651
670
  sourceState.lastFailedAt = Some(now)
652
671
  // Check if there's a working (recovered) source to switch to immediately
653
672
  let nextSource =