envio 3.0.0-alpha.2 → 3.0.0-alpha.20

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 (175) hide show
  1. package/README.md +164 -30
  2. package/bin.mjs +49 -0
  3. package/evm.schema.json +79 -169
  4. package/fuel.schema.json +50 -21
  5. package/index.d.ts +497 -1
  6. package/index.js +4 -0
  7. package/package.json +42 -31
  8. package/rescript.json +4 -1
  9. package/src/Batch.res +11 -8
  10. package/src/Batch.res.mjs +11 -9
  11. package/src/ChainFetcher.res +531 -0
  12. package/src/ChainFetcher.res.mjs +339 -0
  13. package/src/ChainManager.res +190 -0
  14. package/src/ChainManager.res.mjs +166 -0
  15. package/src/Change.res +3 -3
  16. package/src/Config.gen.ts +19 -0
  17. package/src/Config.res +737 -22
  18. package/src/Config.res.mjs +703 -26
  19. package/src/{Indexer.res → Ctx.res} +1 -1
  20. package/src/Ecosystem.res +9 -124
  21. package/src/Ecosystem.res.mjs +19 -160
  22. package/src/Env.res +30 -74
  23. package/src/Env.res.mjs +25 -87
  24. package/src/Envio.gen.ts +3 -1
  25. package/src/Envio.res +20 -9
  26. package/src/EventProcessing.res +469 -0
  27. package/src/EventProcessing.res.mjs +337 -0
  28. package/src/EvmTypes.gen.ts +6 -0
  29. package/src/EvmTypes.res +1 -0
  30. package/src/FetchState.res +1256 -639
  31. package/src/FetchState.res.mjs +1135 -612
  32. package/src/GlobalState.res +1190 -0
  33. package/src/GlobalState.res.mjs +1183 -0
  34. package/src/GlobalStateManager.res +68 -0
  35. package/src/GlobalStateManager.res.mjs +75 -0
  36. package/src/GlobalStateManager.resi +7 -0
  37. package/src/HandlerLoader.res +89 -0
  38. package/src/HandlerLoader.res.mjs +79 -0
  39. package/src/HandlerRegister.res +357 -0
  40. package/src/HandlerRegister.res.mjs +299 -0
  41. package/src/{EventRegister.resi → HandlerRegister.resi} +13 -13
  42. package/src/Hasura.res +111 -175
  43. package/src/Hasura.res.mjs +88 -150
  44. package/src/InMemoryStore.res +1 -1
  45. package/src/InMemoryStore.res.mjs +3 -3
  46. package/src/InMemoryTable.res +1 -1
  47. package/src/InMemoryTable.res.mjs +1 -1
  48. package/src/Internal.gen.ts +4 -0
  49. package/src/Internal.res +230 -12
  50. package/src/Internal.res.mjs +115 -1
  51. package/src/LoadLayer.res +444 -0
  52. package/src/LoadLayer.res.mjs +296 -0
  53. package/src/LoadLayer.resi +32 -0
  54. package/src/LogSelection.res +33 -27
  55. package/src/LogSelection.res.mjs +6 -0
  56. package/src/Logging.res +21 -7
  57. package/src/Logging.res.mjs +16 -8
  58. package/src/Main.res +377 -0
  59. package/src/Main.res.mjs +339 -0
  60. package/src/Persistence.res +7 -21
  61. package/src/Persistence.res.mjs +3 -3
  62. package/src/PgStorage.gen.ts +10 -0
  63. package/src/PgStorage.res +116 -69
  64. package/src/PgStorage.res.d.mts +5 -0
  65. package/src/PgStorage.res.mjs +93 -50
  66. package/src/Prometheus.res +294 -224
  67. package/src/Prometheus.res.mjs +353 -340
  68. package/src/ReorgDetection.res +6 -10
  69. package/src/ReorgDetection.res.mjs +6 -6
  70. package/src/SafeCheckpointTracking.res +4 -4
  71. package/src/SafeCheckpointTracking.res.mjs +2 -2
  72. package/src/Sink.res +4 -2
  73. package/src/Sink.res.mjs +2 -1
  74. package/src/TableIndices.res +0 -1
  75. package/src/TestIndexer.res +692 -0
  76. package/src/TestIndexer.res.mjs +527 -0
  77. package/src/TestIndexerProxyStorage.res +205 -0
  78. package/src/TestIndexerProxyStorage.res.mjs +151 -0
  79. package/src/TopicFilter.res +1 -1
  80. package/src/Types.ts +1 -1
  81. package/src/UserContext.res +424 -0
  82. package/src/UserContext.res.mjs +279 -0
  83. package/src/Utils.res +97 -26
  84. package/src/Utils.res.mjs +91 -44
  85. package/src/bindings/BigInt.res +10 -0
  86. package/src/bindings/BigInt.res.mjs +15 -0
  87. package/src/bindings/ClickHouse.res +120 -23
  88. package/src/bindings/ClickHouse.res.mjs +118 -28
  89. package/src/bindings/DateFns.res +74 -0
  90. package/src/bindings/DateFns.res.mjs +22 -0
  91. package/src/bindings/EventSource.res +8 -1
  92. package/src/bindings/EventSource.res.mjs +8 -1
  93. package/src/bindings/Express.res +1 -0
  94. package/src/bindings/Hrtime.res +14 -1
  95. package/src/bindings/Hrtime.res.mjs +22 -2
  96. package/src/bindings/Hrtime.resi +4 -0
  97. package/src/bindings/Lodash.res +0 -1
  98. package/src/bindings/NodeJs.res +49 -3
  99. package/src/bindings/NodeJs.res.mjs +11 -3
  100. package/src/bindings/Pino.res +24 -10
  101. package/src/bindings/Pino.res.mjs +14 -8
  102. package/src/bindings/Postgres.gen.ts +8 -0
  103. package/src/bindings/Postgres.res +5 -1
  104. package/src/bindings/Postgres.res.d.mts +5 -0
  105. package/src/bindings/PromClient.res +0 -10
  106. package/src/bindings/PromClient.res.mjs +0 -3
  107. package/src/bindings/Vitest.res +142 -0
  108. package/src/bindings/Vitest.res.mjs +9 -0
  109. package/src/bindings/WebSocket.res +27 -0
  110. package/src/bindings/WebSocket.res.mjs +2 -0
  111. package/src/bindings/Yargs.res +8 -0
  112. package/src/bindings/Yargs.res.mjs +2 -0
  113. package/src/db/EntityHistory.res +7 -7
  114. package/src/db/EntityHistory.res.mjs +9 -9
  115. package/src/db/InternalTable.res +59 -111
  116. package/src/db/InternalTable.res.mjs +73 -104
  117. package/src/db/Table.res +27 -8
  118. package/src/db/Table.res.mjs +25 -14
  119. package/src/sources/Evm.res +84 -0
  120. package/src/sources/Evm.res.mjs +105 -0
  121. package/src/sources/EvmChain.res +94 -0
  122. package/src/sources/EvmChain.res.mjs +60 -0
  123. package/src/sources/Fuel.res +19 -34
  124. package/src/sources/Fuel.res.mjs +34 -16
  125. package/src/sources/FuelSDK.res +38 -0
  126. package/src/sources/FuelSDK.res.mjs +29 -0
  127. package/src/sources/HyperFuel.res +2 -2
  128. package/src/sources/HyperFuel.resi +1 -1
  129. package/src/sources/HyperFuelClient.res +2 -2
  130. package/src/sources/HyperFuelSource.res +33 -13
  131. package/src/sources/HyperFuelSource.res.mjs +24 -16
  132. package/src/sources/HyperSync.res +36 -6
  133. package/src/sources/HyperSync.res.mjs +9 -7
  134. package/src/sources/HyperSync.resi +4 -0
  135. package/src/sources/HyperSyncClient.res +1 -1
  136. package/src/sources/HyperSyncHeightStream.res +47 -116
  137. package/src/sources/HyperSyncHeightStream.res.mjs +46 -73
  138. package/src/sources/HyperSyncSource.res +118 -139
  139. package/src/sources/HyperSyncSource.res.mjs +104 -121
  140. package/src/sources/Rpc.res +86 -14
  141. package/src/sources/Rpc.res.mjs +101 -9
  142. package/src/sources/RpcSource.res +621 -364
  143. package/src/sources/RpcSource.res.mjs +843 -410
  144. package/src/sources/RpcWebSocketHeightStream.res +181 -0
  145. package/src/sources/RpcWebSocketHeightStream.res.mjs +196 -0
  146. package/src/sources/Source.res +7 -5
  147. package/src/sources/SourceManager.res +325 -225
  148. package/src/sources/SourceManager.res.mjs +314 -171
  149. package/src/sources/SourceManager.resi +17 -6
  150. package/src/sources/Svm.res +81 -0
  151. package/src/sources/Svm.res.mjs +90 -0
  152. package/src/tui/Tui.res +247 -0
  153. package/src/tui/Tui.res.mjs +337 -0
  154. package/src/tui/bindings/Ink.res +371 -0
  155. package/src/tui/bindings/Ink.res.mjs +72 -0
  156. package/src/tui/bindings/Style.res +123 -0
  157. package/src/tui/bindings/Style.res.mjs +2 -0
  158. package/src/tui/components/BufferedProgressBar.res +40 -0
  159. package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
  160. package/src/tui/components/CustomHooks.res +122 -0
  161. package/src/tui/components/CustomHooks.res.mjs +179 -0
  162. package/src/tui/components/Messages.res +41 -0
  163. package/src/tui/components/Messages.res.mjs +75 -0
  164. package/src/tui/components/SyncETA.res +174 -0
  165. package/src/tui/components/SyncETA.res.mjs +263 -0
  166. package/src/tui/components/TuiData.res +47 -0
  167. package/src/tui/components/TuiData.res.mjs +34 -0
  168. package/svm.schema.json +112 -0
  169. package/bin.js +0 -48
  170. package/src/EventRegister.res +0 -241
  171. package/src/EventRegister.res.mjs +0 -240
  172. package/src/bindings/Ethers.gen.ts +0 -14
  173. package/src/bindings/Ethers.res +0 -204
  174. package/src/bindings/Ethers.res.mjs +0 -130
  175. /package/src/{Indexer.res.mjs → Ctx.res.mjs} +0 -0
@@ -77,13 +77,10 @@ let make = (
77
77
  }
78
78
  }
79
79
 
80
- let getDataByBlockNumberCopyInThreshold = (
81
- {dataByBlockNumber, maxReorgDepth}: t,
82
- ~currentBlockHeight,
83
- ) => {
80
+ let getDataByBlockNumberCopyInThreshold = ({dataByBlockNumber, maxReorgDepth}: t, ~knownHeight) => {
84
81
  // Js engine automatically orders numeric object keys
85
82
  let ascBlockNumberKeys = dataByBlockNumber->Js.Dict.keys
86
- let thresholdBlockNumber = currentBlockHeight - maxReorgDepth
83
+ let thresholdBlockNumber = knownHeight - maxReorgDepth
87
84
 
88
85
  let copy = Js.Dict.empty()
89
86
 
@@ -105,10 +102,9 @@ let getDataByBlockNumberCopyInThreshold = (
105
102
  let registerReorgGuard = (
106
103
  {maxReorgDepth, shouldRollbackOnReorg} as self: t,
107
104
  ~reorgGuard: reorgGuard,
108
- ~currentBlockHeight,
105
+ ~knownHeight,
109
106
  ) => {
110
- let dataByBlockNumberCopyInThreshold =
111
- self->getDataByBlockNumberCopyInThreshold(~currentBlockHeight)
107
+ let dataByBlockNumberCopyInThreshold = self->getDataByBlockNumberCopyInThreshold(~knownHeight)
112
108
 
113
109
  let {rangeLastBlock, prevRangeLastBlock} = reorgGuard
114
110
 
@@ -248,12 +244,12 @@ let rollbackToValidBlockNumber = (
248
244
  }
249
245
  }
250
246
 
251
- let getThresholdBlockNumbersBelowBlock = (self: t, ~blockNumber: int, ~currentBlockHeight) => {
247
+ let getThresholdBlockNumbersBelowBlock = (self: t, ~blockNumber: int, ~knownHeight) => {
252
248
  let arr = []
253
249
 
254
250
  // Js engine automatically orders numeric object keys
255
251
  let ascBlockNumberKeys = self.dataByBlockNumber->Js.Dict.keys
256
- let thresholdBlockNumber = currentBlockHeight - self.maxReorgDepth
252
+ let thresholdBlockNumber = knownHeight - self.maxReorgDepth
257
253
 
258
254
  for idx in 0 to ascBlockNumberKeys->Array.length - 1 {
259
255
  let blockNumberKey = ascBlockNumberKeys->Js.Array2.unsafe_get(idx)
@@ -30,10 +30,10 @@ function make(chainReorgCheckpoints, maxReorgDepth, shouldRollbackOnReorg) {
30
30
  };
31
31
  }
32
32
 
33
- function getDataByBlockNumberCopyInThreshold(param, currentBlockHeight) {
33
+ function getDataByBlockNumberCopyInThreshold(param, knownHeight) {
34
34
  var dataByBlockNumber = param.dataByBlockNumber;
35
35
  var ascBlockNumberKeys = Object.keys(dataByBlockNumber);
36
- var thresholdBlockNumber = currentBlockHeight - param.maxReorgDepth | 0;
36
+ var thresholdBlockNumber = knownHeight - param.maxReorgDepth | 0;
37
37
  var copy = {};
38
38
  for(var idx = 0 ,idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx){
39
39
  var blockNumberKey = ascBlockNumberKeys[idx];
@@ -47,10 +47,10 @@ function getDataByBlockNumberCopyInThreshold(param, currentBlockHeight) {
47
47
  return copy;
48
48
  }
49
49
 
50
- function registerReorgGuard(self, reorgGuard, currentBlockHeight) {
50
+ function registerReorgGuard(self, reorgGuard, knownHeight) {
51
51
  var maxReorgDepth = self.maxReorgDepth;
52
52
  var shouldRollbackOnReorg = self.shouldRollbackOnReorg;
53
- var dataByBlockNumberCopyInThreshold = getDataByBlockNumberCopyInThreshold(self, currentBlockHeight);
53
+ var dataByBlockNumberCopyInThreshold = getDataByBlockNumberCopyInThreshold(self, knownHeight);
54
54
  var prevRangeLastBlock = reorgGuard.prevRangeLastBlock;
55
55
  var rangeLastBlock = reorgGuard.rangeLastBlock;
56
56
  var scannedBlock = dataByBlockNumberCopyInThreshold[String(rangeLastBlock.blockNumber)];
@@ -159,10 +159,10 @@ function rollbackToValidBlockNumber(param, blockNumber) {
159
159
  };
160
160
  }
161
161
 
162
- function getThresholdBlockNumbersBelowBlock(self, blockNumber, currentBlockHeight) {
162
+ function getThresholdBlockNumbersBelowBlock(self, blockNumber, knownHeight) {
163
163
  var arr = [];
164
164
  var ascBlockNumberKeys = Object.keys(self.dataByBlockNumber);
165
- var thresholdBlockNumber = currentBlockHeight - self.maxReorgDepth | 0;
165
+ var thresholdBlockNumber = knownHeight - self.maxReorgDepth | 0;
166
166
  for(var idx = 0 ,idx_finish = ascBlockNumberKeys.length; idx < idx_finish; ++idx){
167
167
  var blockNumberKey = ascBlockNumberKeys[idx];
168
168
  var scannedBlock = self.dataByBlockNumber[blockNumberKey];
@@ -4,7 +4,7 @@
4
4
  // The safe checkpoint id can be used to optimize checkpoints traverse logic and
5
5
  // make pruning operation super cheap.
6
6
  type t = {
7
- checkpointIds: array<float>,
7
+ checkpointIds: array<bigint>,
8
8
  checkpointBlockNumbers: array<int>,
9
9
  maxReorgDepth: int,
10
10
  }
@@ -37,10 +37,10 @@ let getSafeCheckpointId = (safeCheckpointTracking: t, ~sourceBlockNumber: int) =
37
37
  let safeBlockNumber = sourceBlockNumber - safeCheckpointTracking.maxReorgDepth
38
38
 
39
39
  switch safeCheckpointTracking.checkpointIds {
40
- | [] => 0.
40
+ | [] => 0n
41
41
  | _
42
42
  if safeCheckpointTracking.checkpointBlockNumbers->Belt.Array.getUnsafe(0) >
43
- safeBlockNumber => 0.
43
+ safeBlockNumber => 0n
44
44
  | [checkpointId] => checkpointId
45
45
  | _ => {
46
46
  let trackingCheckpointsCount = safeCheckpointTracking.checkpointIds->Array.length
@@ -71,7 +71,7 @@ let updateOnNewBatch = (
71
71
  safeCheckpointTracking: t,
72
72
  ~sourceBlockNumber: int,
73
73
  ~chainId: int,
74
- ~batchCheckpointIds: array<float>,
74
+ ~batchCheckpointIds: array<bigint>,
75
75
  ~batchCheckpointBlockNumbers: array<int>,
76
76
  ~batchCheckpointChainIds: array<int>,
77
77
  ) => {
@@ -22,10 +22,10 @@ function getSafeCheckpointId(safeCheckpointTracking, sourceBlockNumber) {
22
22
  var safeBlockNumber = sourceBlockNumber - safeCheckpointTracking.maxReorgDepth | 0;
23
23
  var match = safeCheckpointTracking.checkpointIds;
24
24
  if (match.length === 0) {
25
- return 0;
25
+ return 0n;
26
26
  }
27
27
  if (safeCheckpointTracking.checkpointBlockNumbers[0] > safeBlockNumber) {
28
- return 0;
28
+ return 0n;
29
29
  }
30
30
  if (match.length === 1) {
31
31
  return match[0];
package/src/Sink.res CHANGED
@@ -5,7 +5,7 @@ type t = {
5
5
  ~entities: array<Internal.entityConfig>=?,
6
6
  ~enums: array<Table.enumConfig<Table.enum>>=?,
7
7
  ) => promise<unit>,
8
- resume: (~checkpointId: float) => promise<unit>,
8
+ resume: (~checkpointId: Internal.checkpointId) => promise<unit>,
9
9
  writeBatch: (
10
10
  ~batch: Batch.t,
11
11
  ~updatedEntities: array<Persistence.updatedEntity>,
@@ -27,6 +27,8 @@ let makeClickHouse = (~host, ~database, ~username, ~password): t => {
27
27
  | None => "envio_sink"
28
28
  }
29
29
 
30
+ let cache = Utils.WeakMap.make()
31
+
30
32
  {
31
33
  name: "ClickHouse",
32
34
  initialize: (~chainConfigs as _=[], ~entities=[], ~enums=[]) => {
@@ -38,7 +40,7 @@ let makeClickHouse = (~host, ~database, ~username, ~password): t => {
38
40
  writeBatch: async (~batch, ~updatedEntities) => {
39
41
  await Promise.all(
40
42
  updatedEntities->Belt.Array.map(({entityConfig, updates}) => {
41
- ClickHouse.setUpdatesOrThrow(client, ~updates, ~entityConfig, ~database)
43
+ ClickHouse.setUpdatesOrThrow(client, ~cache, ~updates, ~entityConfig, ~database)
42
44
  }),
43
45
  )->Promise.ignoreValue
44
46
  await ClickHouse.setCheckpointsOrThrow(client, ~batch, ~database)
package/src/Sink.res.mjs CHANGED
@@ -11,6 +11,7 @@ function makeClickHouse(host, database, username, password) {
11
11
  password: password
12
12
  });
13
13
  var database$1 = database !== undefined ? database : "envio_sink";
14
+ var cache = new WeakMap();
14
15
  return {
15
16
  name: "ClickHouse",
16
17
  initialize: (function ($staropt$star, $staropt$star$1, $staropt$star$2) {
@@ -24,7 +25,7 @@ function makeClickHouse(host, database, username, password) {
24
25
  }),
25
26
  writeBatch: (async function (batch, updatedEntities) {
26
27
  await Promise.all(Belt_Array.map(updatedEntities, (function (param) {
27
- return ClickHouse.setUpdatesOrThrow(client, param.updates, param.entityConfig, database$1);
28
+ return ClickHouse.setUpdatesOrThrow(client, cache, param.updates, param.entityConfig, database$1);
28
29
  })));
29
30
  return await ClickHouse.setCheckpointsOrThrow(client, batch, database$1);
30
31
  })
@@ -107,4 +107,3 @@ module Index = {
107
107
  | Single(index) => SingleIndex.evaluate(index, ~fieldName, ~fieldValue)
108
108
  }
109
109
  }
110
-