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
package/README.md CHANGED
@@ -107,9 +107,9 @@ This scaffolds your entire indexer project, config, schema, and handler function
107
107
 
108
108
  From there, three files define your indexer:
109
109
 
110
- - `config.yaml` networks, contracts, events, and indexing behaviour
111
- - `schema.graphql` the shape of your indexed data
112
- - `src/EventHandlers.*` your handler logic in TypeScript, JavaScript, or ReScript
110
+ - `config.yaml`: networks, contracts, events, and indexing behaviour
111
+ - `schema.graphql`: the shape of your indexed data
112
+ - `src/EventHandlers.*`: your handler logic in TypeScript, JavaScript, or ReScript
113
113
 
114
114
  [Full getting started guide →](https://docs.envio.dev/docs/HyperIndex/getting-started)
115
115
 
package/bin.mjs CHANGED
@@ -1,49 +1,3 @@
1
1
  #!/usr/bin/env node
2
- //@ts-check
3
-
4
- import { spawnSync } from "child_process";
5
- import { createRequire } from "module";
6
-
7
- const require = createRequire(import.meta.url);
8
-
9
- /**
10
- * Returns the executable path for envio located inside node_modules.
11
- * The naming convention is envio-${os}-${arch}
12
- * @see https://nodejs.org/api/os.html#osarch
13
- * @see https://nodejs.org/api/os.html#osplatform
14
- * @example "x/xx/node_modules/envio-darwin-arm64"
15
- */
16
- function getExePath() {
17
- const pkg = `envio-${process.platform}-${process.arch}`;
18
- const bin = "bin/envio";
19
-
20
- try {
21
- return require.resolve(`${pkg}/${bin}`);
22
- } catch {}
23
-
24
- throw new Error(
25
- `Couldn't find envio binary package "${pkg}".\n` +
26
- `Checked: require.resolve("${pkg}/${bin}")\n` +
27
- `If you're using pnpm, yarn, or npm with --omit=optional, ensure optional ` +
28
- `dependencies are installed:\n` +
29
- ` npm install ${pkg}\n`
30
- );
31
- }
32
-
33
- /**
34
- * Runs `envio` with args using nodejs spawn
35
- */
36
- function runEnvio() {
37
- const args = process.argv.slice(2);
38
- const exePath = getExePath();
39
-
40
- const processResult = spawnSync(exePath, args, { stdio: "inherit" });
41
-
42
- if (processResult.error) {
43
- console.error(`Failed to run envio binary at ${exePath}: ${processResult.error.message}`);
44
- process.exit(1);
45
- }
46
- process.exit(processResult.status ?? 1);
47
- }
48
-
49
- runEnvio();
2
+ import { run } from "./src/Bin.res.mjs";
3
+ await run(process.argv.slice(2));
package/evm.schema.json CHANGED
@@ -45,6 +45,17 @@
45
45
  "format": "uint64",
46
46
  "minimum": 0
47
47
  },
48
+ "storage": {
49
+ "description": "Configuration for the storage backends the indexer writes to. Defaults to `postgres: true` when omitted. ClickHouse requires Postgres to be enabled (it is not supported as a single storage yet), and at least one backend must be enabled.",
50
+ "anyOf": [
51
+ {
52
+ "$ref": "#/$defs/StorageConfig"
53
+ },
54
+ {
55
+ "type": "null"
56
+ }
57
+ ]
58
+ },
48
59
  "ecosystem": {
49
60
  "description": "Ecosystem of the project.",
50
61
  "anyOf": [
@@ -123,6 +134,62 @@
123
134
  "chains"
124
135
  ],
125
136
  "$defs": {
137
+ "StorageConfig": {
138
+ "type": "object",
139
+ "properties": {
140
+ "postgres": {
141
+ "description": "Whether to use Postgres as a storage backend (default: true).",
142
+ "type": [
143
+ "boolean",
144
+ "null"
145
+ ]
146
+ },
147
+ "clickhouse": {
148
+ "description": "Whether to additionally sync the indexed data to ClickHouse. Requires Postgres to be enabled (default: false).",
149
+ "type": [
150
+ "boolean",
151
+ "null"
152
+ ]
153
+ }
154
+ },
155
+ "additionalProperties": false,
156
+ "allOf": [
157
+ {
158
+ "not": {
159
+ "properties": {
160
+ "postgres": {
161
+ "const": false
162
+ }
163
+ },
164
+ "required": [
165
+ "postgres"
166
+ ]
167
+ }
168
+ },
169
+ {
170
+ "if": {
171
+ "properties": {
172
+ "clickhouse": {
173
+ "const": true
174
+ }
175
+ },
176
+ "required": [
177
+ "clickhouse"
178
+ ]
179
+ },
180
+ "then": {
181
+ "properties": {
182
+ "postgres": {
183
+ "const": true
184
+ }
185
+ },
186
+ "required": [
187
+ "postgres"
188
+ ]
189
+ }
190
+ }
191
+ ]
192
+ },
126
193
  "EcosystemTag": {
127
194
  "type": "string",
128
195
  "enum": [
package/fuel.schema.json CHANGED
@@ -45,6 +45,17 @@
45
45
  "format": "uint64",
46
46
  "minimum": 0
47
47
  },
48
+ "storage": {
49
+ "description": "Configuration for the storage backends the indexer writes to. Defaults to `postgres: true` when omitted. ClickHouse requires Postgres to be enabled (it is not supported as a single storage yet), and at least one backend must be enabled.",
50
+ "anyOf": [
51
+ {
52
+ "$ref": "#/$defs/StorageConfig"
53
+ },
54
+ {
55
+ "type": "null"
56
+ }
57
+ ]
58
+ },
48
59
  "ecosystem": {
49
60
  "description": "Ecosystem of the project.",
50
61
  "$ref": "#/$defs/EcosystemTag"
@@ -81,6 +92,62 @@
81
92
  "chains"
82
93
  ],
83
94
  "$defs": {
95
+ "StorageConfig": {
96
+ "type": "object",
97
+ "properties": {
98
+ "postgres": {
99
+ "description": "Whether to use Postgres as a storage backend (default: true).",
100
+ "type": [
101
+ "boolean",
102
+ "null"
103
+ ]
104
+ },
105
+ "clickhouse": {
106
+ "description": "Whether to additionally sync the indexed data to ClickHouse. Requires Postgres to be enabled (default: false).",
107
+ "type": [
108
+ "boolean",
109
+ "null"
110
+ ]
111
+ }
112
+ },
113
+ "additionalProperties": false,
114
+ "allOf": [
115
+ {
116
+ "not": {
117
+ "properties": {
118
+ "postgres": {
119
+ "const": false
120
+ }
121
+ },
122
+ "required": [
123
+ "postgres"
124
+ ]
125
+ }
126
+ },
127
+ {
128
+ "if": {
129
+ "properties": {
130
+ "clickhouse": {
131
+ "const": true
132
+ }
133
+ },
134
+ "required": [
135
+ "clickhouse"
136
+ ]
137
+ },
138
+ "then": {
139
+ "properties": {
140
+ "postgres": {
141
+ "const": true
142
+ }
143
+ },
144
+ "required": [
145
+ "postgres"
146
+ ]
147
+ }
148
+ }
149
+ ]
150
+ },
84
151
  "EcosystemTag": {
85
152
  "type": "string",
86
153
  "enum": [