envio 3.0.0-alpha.21 → 3.0.0-alpha.23

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 (220) hide show
  1. package/README.md +3 -3
  2. package/bin.mjs +2 -48
  3. package/evm.schema.json +67 -0
  4. package/fuel.schema.json +67 -0
  5. package/index.d.ts +822 -38
  6. package/index.js +5 -3
  7. package/package.json +10 -8
  8. package/rescript.json +5 -9
  9. package/src/Address.res +4 -5
  10. package/src/Address.res.mjs +9 -12
  11. package/src/Api.res +15 -0
  12. package/src/Api.res.mjs +20 -0
  13. package/src/Batch.res +32 -34
  14. package/src/Batch.res.mjs +172 -187
  15. package/src/Bin.res +89 -0
  16. package/src/Bin.res.mjs +97 -0
  17. package/src/ChainFetcher.res +33 -57
  18. package/src/ChainFetcher.res.mjs +197 -227
  19. package/src/ChainManager.res +6 -14
  20. package/src/ChainManager.res.mjs +74 -85
  21. package/src/ChainMap.res +14 -16
  22. package/src/ChainMap.res.mjs +38 -38
  23. package/src/Config.res +193 -135
  24. package/src/Config.res.mjs +566 -592
  25. package/src/Core.res +182 -0
  26. package/src/Core.res.mjs +207 -0
  27. package/src/Ecosystem.res +25 -4
  28. package/src/Ecosystem.res.mjs +12 -13
  29. package/src/Env.res +20 -13
  30. package/src/Env.res.mjs +124 -113
  31. package/src/EnvSafe.res +269 -0
  32. package/src/EnvSafe.res.mjs +296 -0
  33. package/src/EnvSafe.resi +18 -0
  34. package/src/Envio.res +37 -26
  35. package/src/Envio.res.mjs +59 -60
  36. package/src/ErrorHandling.res +2 -2
  37. package/src/ErrorHandling.res.mjs +15 -15
  38. package/src/EventConfigBuilder.res +219 -81
  39. package/src/EventConfigBuilder.res.mjs +259 -202
  40. package/src/EventProcessing.res +27 -38
  41. package/src/EventProcessing.res.mjs +165 -183
  42. package/src/EventUtils.res +11 -11
  43. package/src/EventUtils.res.mjs +21 -22
  44. package/src/EvmTypes.res +0 -1
  45. package/src/EvmTypes.res.mjs +5 -5
  46. package/src/FetchState.res +360 -256
  47. package/src/FetchState.res.mjs +958 -914
  48. package/src/GlobalState.res +365 -351
  49. package/src/GlobalState.res.mjs +958 -992
  50. package/src/GlobalStateManager.res +1 -2
  51. package/src/GlobalStateManager.res.mjs +36 -44
  52. package/src/HandlerLoader.res +107 -23
  53. package/src/HandlerLoader.res.mjs +128 -38
  54. package/src/HandlerRegister.res +127 -103
  55. package/src/HandlerRegister.res.mjs +164 -164
  56. package/src/HandlerRegister.resi +12 -4
  57. package/src/Hasura.res +35 -22
  58. package/src/Hasura.res.mjs +158 -167
  59. package/src/InMemoryStore.res +20 -27
  60. package/src/InMemoryStore.res.mjs +64 -80
  61. package/src/InMemoryTable.res +34 -39
  62. package/src/InMemoryTable.res.mjs +165 -170
  63. package/src/Internal.res +52 -33
  64. package/src/Internal.res.mjs +84 -81
  65. package/src/LazyLoader.res.mjs +55 -61
  66. package/src/LoadLayer.res +77 -78
  67. package/src/LoadLayer.res.mjs +160 -189
  68. package/src/LoadManager.res +16 -21
  69. package/src/LoadManager.res.mjs +79 -84
  70. package/src/LogSelection.res +236 -68
  71. package/src/LogSelection.res.mjs +211 -141
  72. package/src/Logging.res +13 -9
  73. package/src/Logging.res.mjs +130 -143
  74. package/src/Main.res +430 -51
  75. package/src/Main.res.mjs +530 -271
  76. package/src/Persistence.res +80 -84
  77. package/src/Persistence.res.mjs +131 -132
  78. package/src/PgStorage.res +294 -167
  79. package/src/PgStorage.res.mjs +799 -817
  80. package/src/Prometheus.res +50 -58
  81. package/src/Prometheus.res.mjs +345 -373
  82. package/src/ReorgDetection.res +22 -24
  83. package/src/ReorgDetection.res.mjs +100 -106
  84. package/src/SafeCheckpointTracking.res +7 -7
  85. package/src/SafeCheckpointTracking.res.mjs +40 -43
  86. package/src/SimulateItems.res +41 -49
  87. package/src/SimulateItems.res.mjs +257 -272
  88. package/src/Sink.res +2 -2
  89. package/src/Sink.res.mjs +22 -26
  90. package/src/TableIndices.res +1 -2
  91. package/src/TableIndices.res.mjs +42 -48
  92. package/src/TestIndexer.res +196 -189
  93. package/src/TestIndexer.res.mjs +536 -536
  94. package/src/TestIndexerProxyStorage.res +16 -16
  95. package/src/TestIndexerProxyStorage.res.mjs +99 -122
  96. package/src/TestIndexerWorker.res +4 -0
  97. package/src/TestIndexerWorker.res.mjs +7 -0
  98. package/src/Throttler.res +3 -3
  99. package/src/Throttler.res.mjs +23 -24
  100. package/src/Time.res +1 -1
  101. package/src/Time.res.mjs +18 -21
  102. package/src/TopicFilter.res +3 -3
  103. package/src/TopicFilter.res.mjs +29 -30
  104. package/src/UserContext.res +93 -54
  105. package/src/UserContext.res.mjs +197 -182
  106. package/src/Utils.res +141 -86
  107. package/src/Utils.res.mjs +334 -295
  108. package/src/bindings/BigDecimal.res +0 -2
  109. package/src/bindings/BigDecimal.res.mjs +19 -23
  110. package/src/bindings/ClickHouse.res +28 -27
  111. package/src/bindings/ClickHouse.res.mjs +243 -240
  112. package/src/bindings/DateFns.res +11 -11
  113. package/src/bindings/DateFns.res.mjs +7 -7
  114. package/src/bindings/EventSource.res.mjs +2 -2
  115. package/src/bindings/Express.res +2 -5
  116. package/src/bindings/Hrtime.res +2 -2
  117. package/src/bindings/Hrtime.res.mjs +30 -32
  118. package/src/bindings/Lodash.res.mjs +1 -1
  119. package/src/bindings/NodeJs.res +14 -9
  120. package/src/bindings/NodeJs.res.mjs +20 -20
  121. package/src/bindings/Pino.res +8 -10
  122. package/src/bindings/Pino.res.mjs +40 -43
  123. package/src/bindings/Postgres.res +7 -5
  124. package/src/bindings/Postgres.res.mjs +9 -9
  125. package/src/bindings/PromClient.res +17 -2
  126. package/src/bindings/PromClient.res.mjs +30 -7
  127. package/src/bindings/SDSL.res.mjs +2 -2
  128. package/src/bindings/Viem.res +4 -4
  129. package/src/bindings/Viem.res.mjs +20 -22
  130. package/src/bindings/Vitest.res +1 -1
  131. package/src/bindings/Vitest.res.mjs +2 -2
  132. package/src/bindings/WebSocket.res +1 -1
  133. package/src/db/EntityHistory.res +9 -3
  134. package/src/db/EntityHistory.res.mjs +84 -59
  135. package/src/db/InternalTable.res +62 -60
  136. package/src/db/InternalTable.res.mjs +271 -203
  137. package/src/db/Schema.res +1 -2
  138. package/src/db/Schema.res.mjs +28 -32
  139. package/src/db/Table.res +28 -27
  140. package/src/db/Table.res.mjs +276 -292
  141. package/src/sources/EventRouter.res +21 -16
  142. package/src/sources/EventRouter.res.mjs +55 -57
  143. package/src/sources/Evm.res +17 -1
  144. package/src/sources/Evm.res.mjs +16 -8
  145. package/src/sources/EvmChain.res +15 -17
  146. package/src/sources/EvmChain.res.mjs +40 -42
  147. package/src/sources/Fuel.res +14 -1
  148. package/src/sources/Fuel.res.mjs +16 -8
  149. package/src/sources/FuelSDK.res +1 -1
  150. package/src/sources/FuelSDK.res.mjs +6 -8
  151. package/src/sources/HyperFuel.res +8 -10
  152. package/src/sources/HyperFuel.res.mjs +113 -123
  153. package/src/sources/HyperFuelClient.res.mjs +6 -7
  154. package/src/sources/HyperFuelSource.res +19 -20
  155. package/src/sources/HyperFuelSource.res.mjs +339 -356
  156. package/src/sources/HyperSync.res +11 -13
  157. package/src/sources/HyperSync.res.mjs +206 -220
  158. package/src/sources/HyperSyncClient.res +5 -7
  159. package/src/sources/HyperSyncClient.res.mjs +70 -75
  160. package/src/sources/HyperSyncHeightStream.res +8 -9
  161. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  162. package/src/sources/HyperSyncJsonApi.res +18 -15
  163. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  164. package/src/sources/HyperSyncSource.res +17 -21
  165. package/src/sources/HyperSyncSource.res.mjs +268 -290
  166. package/src/sources/Rpc.res +5 -5
  167. package/src/sources/Rpc.res.mjs +168 -192
  168. package/src/sources/RpcSource.res +166 -167
  169. package/src/sources/RpcSource.res.mjs +972 -1046
  170. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  171. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  172. package/src/sources/SimulateSource.res +1 -1
  173. package/src/sources/SimulateSource.res.mjs +35 -38
  174. package/src/sources/Source.res +1 -1
  175. package/src/sources/Source.res.mjs +3 -3
  176. package/src/sources/SourceManager.res +39 -20
  177. package/src/sources/SourceManager.res.mjs +340 -371
  178. package/src/sources/SourceManager.resi +2 -1
  179. package/src/sources/Svm.res +12 -5
  180. package/src/sources/Svm.res.mjs +44 -41
  181. package/src/tui/Tui.res +23 -12
  182. package/src/tui/Tui.res.mjs +292 -290
  183. package/src/tui/bindings/Ink.res +2 -4
  184. package/src/tui/bindings/Ink.res.mjs +35 -41
  185. package/src/tui/components/BufferedProgressBar.res +7 -7
  186. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  187. package/src/tui/components/CustomHooks.res +1 -2
  188. package/src/tui/components/CustomHooks.res.mjs +102 -122
  189. package/src/tui/components/Messages.res +1 -2
  190. package/src/tui/components/Messages.res.mjs +38 -42
  191. package/src/tui/components/SyncETA.res +10 -11
  192. package/src/tui/components/SyncETA.res.mjs +178 -196
  193. package/src/tui/components/TuiData.res +1 -1
  194. package/src/tui/components/TuiData.res.mjs +7 -6
  195. package/src/vendored/Rest.res +52 -66
  196. package/src/vendored/Rest.res.mjs +324 -364
  197. package/svm.schema.json +67 -0
  198. package/src/Address.gen.ts +0 -8
  199. package/src/Config.gen.ts +0 -19
  200. package/src/Envio.gen.ts +0 -55
  201. package/src/EvmTypes.gen.ts +0 -6
  202. package/src/InMemoryStore.gen.ts +0 -6
  203. package/src/Internal.gen.ts +0 -64
  204. package/src/PgStorage.gen.ts +0 -10
  205. package/src/PgStorage.res.d.mts +0 -5
  206. package/src/Types.ts +0 -56
  207. package/src/bindings/BigDecimal.gen.ts +0 -14
  208. package/src/bindings/BigDecimal.res.d.mts +0 -5
  209. package/src/bindings/BigInt.gen.ts +0 -10
  210. package/src/bindings/BigInt.res +0 -70
  211. package/src/bindings/BigInt.res.d.mts +0 -5
  212. package/src/bindings/BigInt.res.mjs +0 -154
  213. package/src/bindings/Ethers.res.d.mts +0 -5
  214. package/src/bindings/Pino.gen.ts +0 -17
  215. package/src/bindings/Postgres.gen.ts +0 -8
  216. package/src/bindings/Postgres.res.d.mts +0 -5
  217. package/src/bindings/Promise.res +0 -67
  218. package/src/bindings/Promise.res.mjs +0 -26
  219. package/src/db/InternalTable.gen.ts +0 -36
  220. package/src/sources/HyperSyncClient.gen.ts +0 -19
@@ -21,8 +21,8 @@ type initialChainState = {
21
21
  progressBlockNumber: int,
22
22
  numEventsProcessed: float,
23
23
  firstEventBlockNumber: option<int>,
24
- timestampCaughtUpToHeadOrEndblock: option<Js.Date.t>,
25
- dynamicContracts: array<Internal.indexingContract>,
24
+ timestampCaughtUpToHeadOrEndblock: option<Date.t>,
25
+ indexingAddresses: array<Internal.indexingAddress>,
26
26
  sourceBlockNumber: int,
27
27
  }
28
28
 
@@ -49,6 +49,8 @@ type updatedEntity = {
49
49
  }
50
50
 
51
51
  type storage = {
52
+ // Identifier used as the `storage` label on Prometheus metrics.
53
+ name: string,
52
54
  // Should return true if we already have persisted data
53
55
  // and we can skip initialization
54
56
  isInitialized: unit => promise<bool>,
@@ -119,6 +121,9 @@ type storage = {
119
121
  ~updatedEffectsCache: array<updatedEffectCache>,
120
122
  ~updatedEntities: array<updatedEntity>,
121
123
  ) => promise<unit>,
124
+ // Release any long-lived resources (e.g. the postgres connection pool) so
125
+ // short-lived CLI commands like `db-migrate setup` can exit cleanly.
126
+ close: unit => promise<unit>,
122
127
  }
123
128
 
124
129
  type storageStatus =
@@ -142,10 +147,9 @@ let make = (
142
147
  ~allEnums,
143
148
  ~storage,
144
149
  ) => {
145
- let allEntities =
146
- userEntities->Js.Array2.concat([InternalTable.DynamicContractRegistry.entityConfig])
150
+ let allEntities = userEntities->Array.concat([InternalTable.EnvioAddresses.entityConfig])
147
151
  let allEnums =
148
- allEnums->Js.Array2.concat([EntityHistory.RowAction.config->Table.fromGenericEnumConfig])
152
+ allEnums->Array.concat([EntityHistory.RowAction.config->Table.fromGenericEnumConfig])
149
153
  {
150
154
  userEntities,
151
155
  allEntities,
@@ -192,8 +196,8 @@ let init = {
192
196
  Logging.info(`Found existing indexer storage. Resuming indexing state...`)
193
197
  let initialState = await persistence.storage.resumeInitialState()
194
198
  persistence.storageStatus = Ready(initialState)
195
- let progress = Js.Dict.empty()
196
- initialState.chains->Js.Array2.forEach(c => {
199
+ let progress = Dict.make()
200
+ initialState.chains->Array.forEach(c => {
197
201
  progress->Utils.Dict.setByInt(c.id, c.progressBlockNumber)
198
202
  })
199
203
  Logging.info({
@@ -213,7 +217,7 @@ let getInitializedStorageOrThrow = persistence => {
213
217
  switch persistence.storageStatus {
214
218
  | Unknown
215
219
  | Initializing(_) =>
216
- Js.Exn.raiseError(`Failed to access the indexer storage. The Persistence layer is not initialized.`)
220
+ JsError.throwWithMessage(`Failed to access the indexer storage. The Persistence layer is not initialized.`)
217
221
  | Ready(_) => persistence.storage
218
222
  }
219
223
  }
@@ -222,7 +226,7 @@ let getInitializedState = persistence => {
222
226
  switch persistence.storageStatus {
223
227
  | Unknown
224
228
  | Initializing(_) =>
225
- Js.Exn.raiseError(`Failed to access the initial state. The Persistence layer is not initialized.`)
229
+ JsError.throwWithMessage(`Failed to access the initial state. The Persistence layer is not initialized.`)
226
230
  | Ready(initialState) => initialState
227
231
  }
228
232
  }
@@ -237,9 +241,9 @@ let writeBatch = (
237
241
  switch persistence.storageStatus {
238
242
  | Unknown
239
243
  | Initializing(_) =>
240
- Js.Exn.raiseError(`Failed to access the indexer storage. The Persistence layer is not initialized.`)
244
+ JsError.throwWithMessage(`Failed to access the indexer storage. The Persistence layer is not initialized.`)
241
245
  | Ready({cache}) =>
242
- let updatedEntities = persistence.allEntities->Belt.Array.keepMapU(entityConfig => {
246
+ let updatedEntities = persistence.allEntities->Belt.Array.keepMap(entityConfig => {
243
247
  let updates =
244
248
  inMemoryStore
245
249
  ->InMemoryStore.getInMemTable(~entityConfig)
@@ -259,47 +263,40 @@ let writeBatch = (
259
263
  ~allEntities=persistence.allEntities,
260
264
  ~updatedEntities,
261
265
  ~updatedEffectsCache={
262
- inMemoryStore.effects
263
- ->Js.Dict.keys
264
- ->Belt.Array.keepMapU(effectName => {
265
- let inMemTable = inMemoryStore.effects->Js.Dict.unsafeGet(effectName)
266
+ let acc = []
267
+ inMemoryStore.effects->Utils.Dict.forEach(inMemTable => {
266
268
  let {idsToStore, dict, effect, invalidationsCount} = inMemTable
267
269
  switch idsToStore {
268
- | [] => None
269
- | ids => {
270
- let items = Belt.Array.makeUninitializedUnsafe(ids->Belt.Array.length)
271
- ids->Belt.Array.forEachWithIndex((index, id) => {
272
- items->Js.Array2.unsafe_set(
273
- index,
274
- (
275
- {
276
- id,
277
- output: dict->Js.Dict.unsafeGet(id),
278
- }: Internal.effectCacheItem
279
- ),
280
- )
281
- })
282
- Some({
283
- let effectName = effect.name
284
- let effectCacheRecord = switch cache->Utils.Dict.dangerouslyGetNonOption(
285
- effectName,
286
- ) {
287
- | Some(c) => c
288
- | None => {
289
- let c = {effectName, count: 0}
290
- cache->Js.Dict.set(effectName, c)
291
- c
292
- }
293
- }
294
- let shouldInitialize = effectCacheRecord.count === 0
295
- effectCacheRecord.count =
296
- effectCacheRecord.count + items->Js.Array2.length - invalidationsCount
297
- Prometheus.EffectCacheCount.set(~count=effectCacheRecord.count, ~effectName)
298
- {effect, items, shouldInitialize}
299
- })
270
+ | [] => ()
271
+ | ids =>
272
+ let items = Belt.Array.makeUninitializedUnsafe(ids->Belt.Array.length)
273
+ ids->Belt.Array.forEachWithIndex((index, id) => {
274
+ items->Array.setUnsafe(
275
+ index,
276
+ (
277
+ {
278
+ id,
279
+ output: dict->Dict.getUnsafe(id),
280
+ }: Internal.effectCacheItem
281
+ ),
282
+ )
283
+ })
284
+ let effectName = effect.name
285
+ let effectCacheRecord = switch cache->Utils.Dict.dangerouslyGetNonOption(effectName) {
286
+ | Some(c) => c
287
+ | None =>
288
+ let c = {effectName, count: 0}
289
+ cache->Dict.set(effectName, c)
290
+ c
300
291
  }
292
+ let shouldInitialize = effectCacheRecord.count === 0
293
+ effectCacheRecord.count =
294
+ effectCacheRecord.count + items->Array.length - invalidationsCount
295
+ Prometheus.EffectCacheCount.set(~count=effectCacheRecord.count, ~effectName)
296
+ acc->Array.push({effect, items, shouldInitialize})->ignore
301
297
  }
302
298
  })
299
+ acc
303
300
  },
304
301
  )
305
302
  }
@@ -314,49 +311,48 @@ let prepareRollbackDiff = async (
314
311
  ~rollbackTargetCheckpointId,
315
312
  )
316
313
 
317
- let deletedEntities = Js.Dict.empty()
318
- let setEntities = Js.Dict.empty()
314
+ let deletedEntities = Dict.make()
315
+ let setEntities = Dict.make()
319
316
 
320
- let _ =
321
- await persistence.allEntities
322
- ->Belt.Array.map(async entityConfig => {
323
- let entityTable = inMemStore->InMemoryStore.getInMemTable(~entityConfig)
317
+ let _ = await persistence.allEntities
318
+ ->Belt.Array.map(async entityConfig => {
319
+ let entityTable = inMemStore->InMemoryStore.getInMemTable(~entityConfig)
324
320
 
325
- let (removedIdsResult, restoredEntitiesResult) = await persistence.storage.getRollbackData(
326
- ~entityConfig,
327
- ~rollbackTargetCheckpointId,
328
- )
321
+ let (removedIdsResult, restoredEntitiesResult) = await persistence.storage.getRollbackData(
322
+ ~entityConfig,
323
+ ~rollbackTargetCheckpointId,
324
+ )
329
325
 
330
- // Process removed IDs
331
- removedIdsResult->Js.Array2.forEach(data => {
332
- deletedEntities->Utils.Dict.push(entityConfig.name, data["id"])
333
- entityTable->InMemoryTable.Entity.set(
334
- Delete({
335
- entityId: data["id"],
336
- checkpointId: rollbackDiffCheckpointId,
337
- }),
338
- ~shouldSaveHistory=false,
339
- ~containsRollbackDiffChange=true,
340
- )
341
- })
326
+ // Process removed IDs
327
+ removedIdsResult->Array.forEach(data => {
328
+ deletedEntities->Utils.Dict.push(entityConfig.name, data["id"])
329
+ entityTable->InMemoryTable.Entity.set(
330
+ Delete({
331
+ entityId: data["id"],
332
+ checkpointId: rollbackDiffCheckpointId,
333
+ }),
334
+ ~shouldSaveHistory=false,
335
+ ~containsRollbackDiffChange=true,
336
+ )
337
+ })
342
338
 
343
- let restoredEntities = restoredEntitiesResult->S.parseOrThrow(entityConfig.rowsSchema)
339
+ let restoredEntities = restoredEntitiesResult->S.parseOrThrow(entityConfig.rowsSchema)
344
340
 
345
- // Process restored entities
346
- restoredEntities->Belt.Array.forEach((entity: Internal.entity) => {
347
- setEntities->Utils.Dict.push(entityConfig.name, entity.id)
348
- entityTable->InMemoryTable.Entity.set(
349
- Set({
350
- entityId: entity.id,
351
- checkpointId: rollbackDiffCheckpointId,
352
- entity,
353
- }),
354
- ~shouldSaveHistory=false,
355
- ~containsRollbackDiffChange=true,
356
- )
357
- })
341
+ // Process restored entities
342
+ restoredEntities->Belt.Array.forEach((entity: Internal.entity) => {
343
+ setEntities->Utils.Dict.push(entityConfig.name, entity.id)
344
+ entityTable->InMemoryTable.Entity.set(
345
+ Set({
346
+ entityId: entity.id,
347
+ checkpointId: rollbackDiffCheckpointId,
348
+ entity,
349
+ }),
350
+ ~shouldSaveHistory=false,
351
+ ~containsRollbackDiffChange=true,
352
+ )
358
353
  })
359
- ->Promise.all
354
+ })
355
+ ->Promise.all
360
356
 
361
357
  {
362
358
  "inMemStore": inMemStore,
@@ -2,37 +2,36 @@
2
2
 
3
3
  import * as Utils from "./Utils.res.mjs";
4
4
  import * as Config from "./Config.res.mjs";
5
- import * as Js_exn from "rescript/lib/es6/js_exn.js";
6
5
  import * as Logging from "./Logging.res.mjs";
7
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
6
+ import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
8
7
  import * as Prometheus from "./Prometheus.res.mjs";
9
8
  import * as EntityHistory from "./db/EntityHistory.res.mjs";
10
9
  import * as ErrorHandling from "./ErrorHandling.res.mjs";
11
10
  import * as InMemoryStore from "./InMemoryStore.res.mjs";
12
11
  import * as InMemoryTable from "./InMemoryTable.res.mjs";
13
- import * as Caml_exceptions from "rescript/lib/es6/caml_exceptions.js";
12
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
14
13
  import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
15
- import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js";
14
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
16
15
 
17
- var StorageError = /* @__PURE__ */Caml_exceptions.create("Persistence.StorageError");
16
+ let StorageError = /* @__PURE__ */Primitive_exceptions.create("Persistence.StorageError");
18
17
 
19
18
  function make(userEntities, allEnums, storage) {
20
- var allEntities = userEntities.concat([Config.DynamicContractRegistry.entityConfig]);
21
- var allEnums$1 = allEnums.concat([EntityHistory.RowAction.config]);
19
+ let allEntities = userEntities.concat([Config.EnvioAddresses.entityConfig]);
20
+ let allEnums$1 = allEnums.concat([EntityHistory.RowAction.config]);
22
21
  return {
23
- userEntities: userEntities,
24
- allEntities: allEntities,
25
- allEnums: allEnums$1,
26
- storageStatus: "Unknown",
27
- storage: storage
28
- };
22
+ userEntities: userEntities,
23
+ allEntities: allEntities,
24
+ allEnums: allEnums$1,
25
+ storageStatus: "Unknown",
26
+ storage: storage
27
+ };
29
28
  }
30
29
 
31
30
  async function init(persistence, chainConfigs, resetOpt) {
32
- var reset = resetOpt !== undefined ? resetOpt : false;
31
+ let reset = resetOpt !== undefined ? resetOpt : false;
33
32
  try {
34
- var promise = persistence.storageStatus;
35
- var shouldRun;
33
+ let promise = persistence.storageStatus;
34
+ let shouldRun;
36
35
  if (typeof promise !== "object") {
37
36
  shouldRun = true;
38
37
  } else if (promise.TAG === "Initializing") {
@@ -42,172 +41,172 @@ async function init(persistence, chainConfigs, resetOpt) {
42
41
  shouldRun = reset;
43
42
  }
44
43
  if (!shouldRun) {
45
- return ;
44
+ return;
46
45
  }
47
- var resolveRef = {
46
+ let resolveRef = {
48
47
  contents: null
49
48
  };
50
- var promise$1 = new Promise((function (resolve, param) {
51
- resolveRef.contents = resolve;
52
- }));
49
+ let promise$1 = new Promise((resolve, param) => {
50
+ resolveRef.contents = resolve;
51
+ });
53
52
  persistence.storageStatus = {
54
53
  TAG: "Initializing",
55
54
  _0: promise$1
56
55
  };
57
56
  if (reset || !await persistence.storage.isInitialized()) {
58
- Logging.info("Initializing the indexer storage...");
59
- var initialState = await persistence.storage.initialize(chainConfigs, persistence.allEntities, persistence.allEnums);
60
- Logging.info("The indexer storage is ready. Starting indexing!");
57
+ Logging.info(`Initializing the indexer storage...`);
58
+ let initialState = await persistence.storage.initialize(chainConfigs, persistence.allEntities, persistence.allEnums);
59
+ Logging.info(`The indexer storage is ready. Starting indexing!`);
61
60
  persistence.storageStatus = {
62
61
  TAG: "Ready",
63
62
  _0: initialState
64
63
  };
65
64
  } else {
66
- var match = persistence.storageStatus;
67
- var tmp;
68
- tmp = typeof match !== "object" || match.TAG !== "Initializing" ? false : true;
65
+ let match = persistence.storageStatus;
66
+ let tmp;
67
+ tmp = typeof match !== "object" ? false : match.TAG === "Initializing";
69
68
  if (tmp) {
70
- Logging.info("Found existing indexer storage. Resuming indexing state...");
71
- var initialState$1 = await persistence.storage.resumeInitialState();
69
+ Logging.info(`Found existing indexer storage. Resuming indexing state...`);
70
+ let initialState$1 = await persistence.storage.resumeInitialState();
72
71
  persistence.storageStatus = {
73
72
  TAG: "Ready",
74
73
  _0: initialState$1
75
74
  };
76
- var progress = {};
77
- initialState$1.chains.forEach(function (c) {
78
- progress[c.id] = c.progressBlockNumber;
79
- });
75
+ let progress = {};
76
+ initialState$1.chains.forEach(c => {
77
+ progress[c.id] = c.progressBlockNumber;
78
+ });
80
79
  Logging.info({
81
- msg: "Successfully resumed indexing state! Continuing from the last checkpoint.",
82
- progress: progress
83
- });
80
+ msg: `Successfully resumed indexing state! Continuing from the last checkpoint.`,
81
+ progress: progress
82
+ });
84
83
  }
85
-
86
84
  }
87
85
  return resolveRef.contents();
88
- }
89
- catch (raw_exn){
90
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
91
- return ErrorHandling.mkLogAndRaise(undefined, "Failed to initialize the indexer storage.", exn);
86
+ } catch (raw_exn) {
87
+ let exn = Primitive_exceptions.internalToException(raw_exn);
88
+ return ErrorHandling.mkLogAndRaise(undefined, `Failed to initialize the indexer storage.`, exn);
92
89
  }
93
90
  }
94
91
 
95
92
  function getInitializedStorageOrThrow(persistence) {
96
- var match = persistence.storageStatus;
93
+ let match = persistence.storageStatus;
97
94
  if (typeof match !== "object" || match.TAG === "Initializing") {
98
- return Js_exn.raiseError("Failed to access the indexer storage. The Persistence layer is not initialized.");
95
+ return Stdlib_JsError.throwWithMessage(`Failed to access the indexer storage. The Persistence layer is not initialized.`);
99
96
  } else {
100
97
  return persistence.storage;
101
98
  }
102
99
  }
103
100
 
104
101
  function getInitializedState(persistence) {
105
- var initialState = persistence.storageStatus;
102
+ let initialState = persistence.storageStatus;
106
103
  if (typeof initialState !== "object" || initialState.TAG === "Initializing") {
107
- return Js_exn.raiseError("Failed to access the initial state. The Persistence layer is not initialized.");
104
+ return Stdlib_JsError.throwWithMessage(`Failed to access the initial state. The Persistence layer is not initialized.`);
108
105
  } else {
109
106
  return initialState._0;
110
107
  }
111
108
  }
112
109
 
113
110
  function writeBatch(persistence, batch, config, inMemoryStore, isInReorgThreshold) {
114
- var match = persistence.storageStatus;
111
+ let match = persistence.storageStatus;
115
112
  if (typeof match !== "object") {
116
- return Js_exn.raiseError("Failed to access the indexer storage. The Persistence layer is not initialized.");
113
+ return Stdlib_JsError.throwWithMessage(`Failed to access the indexer storage. The Persistence layer is not initialized.`);
117
114
  }
118
115
  if (match.TAG === "Initializing") {
119
- return Js_exn.raiseError("Failed to access the indexer storage. The Persistence layer is not initialized.");
116
+ return Stdlib_JsError.throwWithMessage(`Failed to access the indexer storage. The Persistence layer is not initialized.`);
120
117
  }
121
- var cache = match._0.cache;
122
- var updatedEntities = Belt_Array.keepMapU(persistence.allEntities, (function (entityConfig) {
123
- var updates = InMemoryTable.Entity.updates(InMemoryStore.getInMemTable(inMemoryStore, entityConfig));
124
- if (Utils.$$Array.isEmpty(updates)) {
125
- return ;
126
- } else {
127
- return {
128
- entityConfig: entityConfig,
129
- updates: updates
130
- };
131
- }
132
- }));
133
- return persistence.storage.writeBatch(batch, InMemoryTable.values(inMemoryStore.rawEvents), inMemoryStore.rollbackTargetCheckpointId, isInReorgThreshold, config, persistence.allEntities, Belt_Array.keepMapU(Object.keys(inMemoryStore.effects), (function (effectName) {
134
- var inMemTable = inMemoryStore.effects[effectName];
135
- var idsToStore = inMemTable.idsToStore;
136
- var invalidationsCount = inMemTable.invalidationsCount;
137
- var effect = inMemTable.effect;
138
- var dict = inMemTable.dict;
139
- if (idsToStore.length === 0) {
140
- return ;
141
- }
142
- var items = new Array(idsToStore.length);
143
- Belt_Array.forEachWithIndex(idsToStore, (function (index, id) {
144
- items[index] = {
145
- id: id,
146
- output: dict[id]
147
- };
148
- }));
149
- var effectName$1 = effect.name;
150
- var c = cache[effectName$1];
151
- var effectCacheRecord;
152
- if (c !== undefined) {
153
- effectCacheRecord = c;
154
- } else {
155
- var c$1 = {
156
- effectName: effectName$1,
157
- count: 0
158
- };
159
- cache[effectName$1] = c$1;
160
- effectCacheRecord = c$1;
161
- }
162
- var shouldInitialize = effectCacheRecord.count === 0;
163
- return effectCacheRecord.count = (effectCacheRecord.count + items.length | 0) - invalidationsCount | 0, Prometheus.EffectCacheCount.set(effectCacheRecord.count, effectName$1), {
164
- effect: effect,
165
- items: items,
166
- shouldInitialize: shouldInitialize
167
- };
168
- })), updatedEntities);
118
+ let cache = match._0.cache;
119
+ let updatedEntities = Belt_Array.keepMap(persistence.allEntities, entityConfig => {
120
+ let updates = InMemoryTable.Entity.updates(InMemoryStore.getInMemTable(inMemoryStore, entityConfig));
121
+ if (Utils.$$Array.isEmpty(updates)) {
122
+ return;
123
+ } else {
124
+ return {
125
+ entityConfig: entityConfig,
126
+ updates: updates
127
+ };
128
+ }
129
+ });
130
+ let acc = [];
131
+ return persistence.storage.writeBatch(batch, InMemoryTable.values(inMemoryStore.rawEvents), inMemoryStore.rollbackTargetCheckpointId, isInReorgThreshold, config, persistence.allEntities, (Utils.Dict.forEach(inMemoryStore.effects, inMemTable => {
132
+ let idsToStore = inMemTable.idsToStore;
133
+ let invalidationsCount = inMemTable.invalidationsCount;
134
+ let effect = inMemTable.effect;
135
+ let dict = inMemTable.dict;
136
+ if (idsToStore.length === 0) {
137
+ return;
138
+ }
139
+ let items = new Array(idsToStore.length);
140
+ Belt_Array.forEachWithIndex(idsToStore, (index, id) => {
141
+ items[index] = {
142
+ id: id,
143
+ output: dict[id]
144
+ };
145
+ });
146
+ let effectName = effect.name;
147
+ let c = cache[effectName];
148
+ let effectCacheRecord;
149
+ if (c !== undefined) {
150
+ effectCacheRecord = c;
151
+ } else {
152
+ let c$1 = {
153
+ effectName: effectName,
154
+ count: 0
155
+ };
156
+ cache[effectName] = c$1;
157
+ effectCacheRecord = c$1;
158
+ }
159
+ let shouldInitialize = effectCacheRecord.count === 0;
160
+ effectCacheRecord.count = (effectCacheRecord.count + items.length | 0) - invalidationsCount | 0;
161
+ Prometheus.EffectCacheCount.set(effectCacheRecord.count, effectName);
162
+ acc.push({
163
+ effect: effect,
164
+ items: items,
165
+ shouldInitialize: shouldInitialize
166
+ });
167
+ }), acc), updatedEntities);
169
168
  }
170
169
 
171
170
  async function prepareRollbackDiff(persistence, rollbackTargetCheckpointId, rollbackDiffCheckpointId) {
172
- var inMemStore = InMemoryStore.make(persistence.allEntities, rollbackTargetCheckpointId);
173
- var deletedEntities = {};
174
- var setEntities = {};
175
- await Promise.all(Belt_Array.map(persistence.allEntities, (async function (entityConfig) {
176
- var entityTable = InMemoryStore.getInMemTable(inMemStore, entityConfig);
177
- var match = await persistence.storage.getRollbackData(entityConfig, rollbackTargetCheckpointId);
178
- match[0].forEach(function (data) {
179
- Utils.Dict.push(deletedEntities, entityConfig.name, data.id);
180
- InMemoryTable.Entity.set(entityTable, {
181
- type: "DELETE",
182
- entityId: data.id,
183
- checkpointId: rollbackDiffCheckpointId
184
- }, false, true);
185
- });
186
- var restoredEntities = S$RescriptSchema.parseOrThrow(match[1], entityConfig.rowsSchema);
187
- return Belt_Array.forEach(restoredEntities, (function (entity) {
188
- Utils.Dict.push(setEntities, entityConfig.name, entity.id);
189
- InMemoryTable.Entity.set(entityTable, {
190
- type: "SET",
191
- entityId: entity.id,
192
- entity: entity,
193
- checkpointId: rollbackDiffCheckpointId
194
- }, false, true);
195
- }));
196
- })));
171
+ let inMemStore = InMemoryStore.make(persistence.allEntities, rollbackTargetCheckpointId);
172
+ let deletedEntities = {};
173
+ let setEntities = {};
174
+ await Promise.all(Belt_Array.map(persistence.allEntities, async entityConfig => {
175
+ let entityTable = InMemoryStore.getInMemTable(inMemStore, entityConfig);
176
+ let match = await persistence.storage.getRollbackData(entityConfig, rollbackTargetCheckpointId);
177
+ match[0].forEach(data => {
178
+ Utils.Dict.push(deletedEntities, entityConfig.name, data.id);
179
+ InMemoryTable.Entity.set(entityTable, {
180
+ type: "DELETE",
181
+ entityId: data.id,
182
+ checkpointId: rollbackDiffCheckpointId
183
+ }, false, true);
184
+ });
185
+ let restoredEntities = S$RescriptSchema.parseOrThrow(match[1], entityConfig.rowsSchema);
186
+ return Belt_Array.forEach(restoredEntities, entity => {
187
+ Utils.Dict.push(setEntities, entityConfig.name, entity.id);
188
+ InMemoryTable.Entity.set(entityTable, {
189
+ type: "SET",
190
+ entityId: entity.id,
191
+ entity: entity,
192
+ checkpointId: rollbackDiffCheckpointId
193
+ }, false, true);
194
+ });
195
+ }));
197
196
  return {
198
- inMemStore: inMemStore,
199
- deletedEntities: deletedEntities,
200
- setEntities: setEntities
201
- };
197
+ inMemStore: inMemStore,
198
+ deletedEntities: deletedEntities,
199
+ setEntities: setEntities
200
+ };
202
201
  }
203
202
 
204
203
  export {
205
- StorageError ,
206
- make ,
207
- init ,
208
- getInitializedStorageOrThrow ,
209
- getInitializedState ,
210
- writeBatch ,
211
- prepareRollbackDiff ,
204
+ StorageError,
205
+ make,
206
+ init,
207
+ getInitializedStorageOrThrow,
208
+ getInitializedState,
209
+ writeBatch,
210
+ prepareRollbackDiff,
212
211
  }
213
212
  /* Utils Not a pure module */