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
@@ -1,5 +1,3 @@
1
- open Belt
2
-
3
1
  // EVM simulate block schema — all fields present with defaults for non-nullable ones.
4
2
  // Nullable fields (from Internal.evmNullableBlockFields) use S.null → option<T>.
5
3
  let evmSimulateBlockSchema = S.schema(s =>
@@ -44,13 +42,13 @@ type evmSimulateBlock = {number: int, timestamp: int}
44
42
 
45
43
  let parseEvmSimulateBlock = (
46
44
  ~defaultBlockNumber: int,
47
- ~blockJson: option<Js.Json.t>,
45
+ ~blockJson: option<JSON.t>,
48
46
  ): Internal.eventBlock => {
49
47
  let block = switch blockJson {
50
48
  | Some(json) => json->S.convertOrThrow(evmSimulateBlockSchema)
51
49
  | None =>
52
- Js.Dict.empty()
53
- ->(Utils.magic: dict<unit> => Js.Json.t)
50
+ Dict.make()
51
+ ->(Utils.magic: dict<unit> => JSON.t)
54
52
  ->S.convertOrThrow(evmSimulateBlockSchema)
55
53
  }
56
54
  let block = block->(Utils.magic: _ => Internal.eventBlock)
@@ -58,8 +56,8 @@ let parseEvmSimulateBlock = (
58
56
 
59
57
  // Only set block number when user didn't provide one (schema defaults to 0)
60
58
  if blockJson->Option.isNone || blockFields.number === 0 {
61
- let blockDict = block->(Utils.magic: Internal.eventBlock => Js.Dict.t<unknown>)
62
- blockDict->Js.Dict.set("number", defaultBlockNumber->(Utils.magic: int => unknown))
59
+ let blockDict = block->(Utils.magic: Internal.eventBlock => dict<unknown>)
60
+ blockDict->Dict.set("number", defaultBlockNumber->(Utils.magic: int => unknown))
63
61
  }
64
62
  block
65
63
  }
@@ -78,7 +76,7 @@ let evmSimulateTransactionSchema = S.schema(s =>
78
76
  "effectiveGasPrice": s.matches(S.null(S.bigint)->S.Option.getOr(0n)),
79
77
  "gasUsed": s.matches(S.null(S.bigint)->S.Option.getOr(0n)),
80
78
  "logsBloom": s.matches(S.null(S.string)->S.Option.getOr("")),
81
- "accessList": s.matches(S.null(S.json(~validate=false))->S.Option.getOr(Js.Json.null)),
79
+ "accessList": s.matches(S.null(S.json(~validate=false))->S.Option.getOr(JSON.Encode.null)),
82
80
  // Signature fields
83
81
  "v": s.matches(S.null(S.string)),
84
82
  "r": s.matches(S.null(S.string)),
@@ -107,14 +105,12 @@ let evmSimulateTransactionSchema = S.schema(s =>
107
105
  }
108
106
  )
109
107
 
110
- let parseEvmSimulateTransaction = (
111
- ~transactionJson: option<Js.Json.t>,
112
- ): Internal.eventTransaction => {
108
+ let parseEvmSimulateTransaction = (~transactionJson: option<JSON.t>): Internal.eventTransaction => {
113
109
  let transaction = switch transactionJson {
114
110
  | Some(json) => json->S.convertOrThrow(evmSimulateTransactionSchema)
115
111
  | None =>
116
- Js.Dict.empty()
117
- ->(Utils.magic: dict<unit> => Js.Json.t)
112
+ Dict.make()
113
+ ->(Utils.magic: dict<unit> => JSON.t)
118
114
  ->S.convertOrThrow(evmSimulateTransactionSchema)
119
115
  }
120
116
  transaction->(Utils.magic: _ => Internal.eventTransaction)
@@ -133,13 +129,13 @@ type fuelSimulateBlock = {height: int, time: int}
133
129
 
134
130
  let parseFuelSimulateBlock = (
135
131
  ~defaultBlockNumber: int,
136
- ~blockJson: option<Js.Json.t>,
132
+ ~blockJson: option<JSON.t>,
137
133
  ): Internal.eventBlock => {
138
134
  let block = switch blockJson {
139
135
  | Some(json) => json->S.convertOrThrow(fuelSimulateBlockSchema)
140
136
  | None =>
141
- Js.Dict.empty()
142
- ->(Utils.magic: dict<unit> => Js.Json.t)
137
+ Dict.make()
138
+ ->(Utils.magic: dict<unit> => JSON.t)
143
139
  ->S.convertOrThrow(fuelSimulateBlockSchema)
144
140
  }
145
141
  let block = block->(Utils.magic: _ => Internal.eventBlock)
@@ -147,8 +143,8 @@ let parseFuelSimulateBlock = (
147
143
 
148
144
  // Only set block height when user didn't provide one (schema defaults to 0)
149
145
  if blockJson->Option.isNone || blockFields.height === 0 {
150
- let blockDict = block->(Utils.magic: Internal.eventBlock => Js.Dict.t<unknown>)
151
- blockDict->Js.Dict.set("height", defaultBlockNumber->(Utils.magic: int => unknown))
146
+ let blockDict = block->(Utils.magic: Internal.eventBlock => dict<unknown>)
147
+ blockDict->Dict.set("height", defaultBlockNumber->(Utils.magic: int => unknown))
152
148
  }
153
149
  block
154
150
  }
@@ -161,13 +157,13 @@ let fuelSimulateTransactionSchema = S.schema(s =>
161
157
  )
162
158
 
163
159
  let parseFuelSimulateTransaction = (
164
- ~transactionJson: option<Js.Json.t>,
160
+ ~transactionJson: option<JSON.t>,
165
161
  ): Internal.eventTransaction => {
166
162
  let transaction = switch transactionJson {
167
163
  | Some(json) => json->S.convertOrThrow(fuelSimulateTransactionSchema)
168
164
  | None =>
169
- Js.Dict.empty()
170
- ->(Utils.magic: dict<unit> => Js.Json.t)
165
+ Dict.make()
166
+ ->(Utils.magic: dict<unit> => JSON.t)
171
167
  ->S.convertOrThrow(fuelSimulateTransactionSchema)
172
168
  }
173
169
  transaction->(Utils.magic: _ => Internal.eventTransaction)
@@ -199,11 +195,9 @@ let findEventConfig = (~config: Config.t, ~contractName: string, ~eventName: str
199
195
  found.contents
200
196
  }
201
197
 
202
- let parse = (
203
- ~simulateItems: array<Js.Json.t>,
204
- ~config: Config.t,
205
- ~chainConfig: Config.chain,
206
- ): array<Internal.item> => {
198
+ let parse = (~simulateItems: array<JSON.t>, ~config: Config.t, ~chainConfig: Config.chain): array<
199
+ Internal.item,
200
+ > => {
207
201
  let chain = ChainMap.Chain.makeUnsafe(~chainId=chainConfig.id)
208
202
  let chainId = chainConfig.id
209
203
  let startBlock = chainConfig.startBlock
@@ -213,7 +207,7 @@ let parse = (
213
207
  let items = []
214
208
 
215
209
  simulateItems->Array.forEach(rawJson => {
216
- let raw = rawJson->(Utils.magic: Js.Json.t => rawSimulateItem)
210
+ let raw = rawJson->(Utils.magic: JSON.t => rawSimulateItem)
217
211
 
218
212
  switch (raw->getContract, raw->getEvent) {
219
213
  | (Some(contractName), Some(eventName)) =>
@@ -221,18 +215,18 @@ let parse = (
221
215
  let eventConfig = switch findEventConfig(~config, ~contractName, ~eventName) {
222
216
  | Some(ec) => ec
223
217
  | None =>
224
- Js.Exn.raiseError(
218
+ JsError.throwWithMessage(
225
219
  `simulate: Event "${eventName}" not found on contract "${contractName}". ` ++ `Check that the contract and event names match your config.yaml.`,
226
220
  )
227
221
  }
228
222
 
229
223
  // Parse event item fields
230
- let item = rawJson->(Utils.magic: Js.Json.t => Envio.evmSimulateItem)
224
+ let item = rawJson->(Utils.magic: JSON.t => Envio.evmSimulateItem)
231
225
 
232
226
  // Parse params using the simulate schema — fills missing fields with defaults
233
- let paramsJson: Js.Json.t = switch item.params {
227
+ let paramsJson: JSON.t = switch item.params {
234
228
  | Some(json) => json
235
- | None => Js.Dict.empty()->(Utils.magic: dict<unit> => Js.Json.t)
229
+ | None => Dict.make()->(Utils.magic: dict<unit> => JSON.t)
236
230
  }
237
231
  let params = paramsJson->S.convertOrThrow(eventConfig.simulateParamsSchema)
238
232
 
@@ -260,11 +254,11 @@ let parse = (
260
254
  addr.contents
261
255
  }
262
256
 
263
- let rawItem = rawJson->(Utils.magic: Js.Json.t => {..})
264
- let blockJson: option<Js.Json.t> =
265
- rawItem["block"]->(Utils.magic: 'a => Js.Nullable.t<Js.Json.t>)->Js.Nullable.toOption
266
- let transactionJson: option<Js.Json.t> =
267
- rawItem["transaction"]->(Utils.magic: 'a => Js.Nullable.t<Js.Json.t>)->Js.Nullable.toOption
257
+ let rawItem = rawJson->(Utils.magic: JSON.t => {..})
258
+ let blockJson: option<JSON.t> =
259
+ rawItem["block"]->(Utils.magic: 'a => Nullable.t<JSON.t>)->Nullable.toOption
260
+ let transactionJson: option<JSON.t> =
261
+ rawItem["transaction"]->(Utils.magic: 'a => Nullable.t<JSON.t>)->Nullable.toOption
268
262
  let (block, blockNumber, timestamp) = switch config.ecosystem.name {
269
263
  | Fuel =>
270
264
  let block = parseFuelSimulateBlock(~defaultBlockNumber=currentBlock.contents, ~blockJson)
@@ -274,12 +268,12 @@ let parse = (
274
268
  let block = parseEvmSimulateBlock(~defaultBlockNumber=currentBlock.contents, ~blockJson)
275
269
  let blockFields = block->(Utils.magic: Internal.eventBlock => evmSimulateBlock)
276
270
  (block, blockFields.number, blockFields.timestamp)
277
- | Svm => Js.Exn.raiseError("simulate is not supported for SVM ecosystem")
271
+ | Svm => JsError.throwWithMessage("simulate is not supported for SVM ecosystem")
278
272
  }
279
273
  let transaction = switch config.ecosystem.name {
280
274
  | Fuel => parseFuelSimulateTransaction(~transactionJson)
281
275
  | Evm => parseEvmSimulateTransaction(~transactionJson)
282
- | Svm => Js.Exn.raiseError("simulate is not supported for SVM ecosystem")
276
+ | Svm => JsError.throwWithMessage("simulate is not supported for SVM ecosystem")
283
277
  }
284
278
 
285
279
  // Update currentBlock for subsequent items
@@ -308,7 +302,7 @@ let parse = (
308
302
  ->ignore
309
303
 
310
304
  | _ =>
311
- Js.Exn.raiseError(`simulate: Invalid item. Each item must have "contract" and "event" fields.`)
305
+ JsError.throwWithMessage(`simulate: Invalid item. Each item must have "contract" and "event" fields.`)
312
306
  }
313
307
  })
314
308
 
@@ -317,29 +311,27 @@ let parse = (
317
311
 
318
312
  // Apply simulate source config from processConfig JSON to a Config.t
319
313
  // This patches chainMap entries that have simulate items with CustomSources
320
- let patchConfig = (~config: Config.t, ~processConfig: Js.Json.t): Config.t => {
321
- let processChains: option<Js.Dict.t<Js.Json.t>> =
322
- (processConfig->(Utils.magic: Js.Json.t => {..}))["chains"]->Js.Nullable.toOption
314
+ let patchConfig = (~config: Config.t, ~processConfig: JSON.t): Config.t => {
315
+ let processChains: option<dict<JSON.t>> =
316
+ (processConfig->(Utils.magic: JSON.t => {..}))["chains"]->Nullable.toOption
323
317
  switch processChains {
324
318
  | Some(chainsDict) =>
325
319
  let newChainMap = config.chainMap->ChainMap.mapWithKey((chain, chainConfig) => {
326
320
  let chainIdStr = chain->ChainMap.Chain.toChainId->Int.toString
327
- switch chainsDict->Js.Dict.get(chainIdStr) {
321
+ switch chainsDict->Dict.get(chainIdStr) {
328
322
  | Some(processChainJson) =>
329
- let simulateRaw: option<array<Js.Json.t>> =
330
- (processChainJson->(Utils.magic: Js.Json.t => {..}))["simulate"]->Js.Nullable.toOption
323
+ let simulateRaw: option<array<JSON.t>> =
324
+ (processChainJson->(Utils.magic: JSON.t => {..}))["simulate"]->Nullable.toOption
331
325
  switch simulateRaw {
332
326
  | Some(simulateItems) =>
333
327
  let items = parse(~simulateItems, ~config, ~chainConfig)
334
328
  // Use endBlock from processConfig (the user-specified range)
335
329
  let startBlock: int =
336
- (processChainJson->(Utils.magic: Js.Json.t => {..}))["startBlock"]->(
330
+ (processChainJson->(Utils.magic: JSON.t => {..}))["startBlock"]->(
337
331
  Utils.magic: 'a => int
338
332
  )
339
333
  let endBlock: int =
340
- (processChainJson->(Utils.magic: Js.Json.t => {..}))["endBlock"]->(
341
- Utils.magic: 'a => int
342
- )
334
+ (processChainJson->(Utils.magic: JSON.t => {..}))["endBlock"]->(Utils.magic: 'a => int)
343
335
  let source = SimulateSource.make(~items, ~endBlock, ~chain)
344
336
  {...chainConfig, startBlock, endBlock, sourceConfig: Config.CustomSources([source])}
345
337
  | None => chainConfig