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
@@ -0,0 +1,299 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Js_exn from "rescript/lib/es6/js_exn.js";
4
+ import * as Logging from "./Logging.res.mjs";
5
+ import * as Caml_obj from "rescript/lib/es6/caml_obj.js";
6
+ import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
7
+ import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
8
+
9
+ var eventRegistrations = {};
10
+
11
+ function getKey(contractName, eventName) {
12
+ return contractName + "." + eventName;
13
+ }
14
+
15
+ function get(contractName, eventName) {
16
+ var existing = eventRegistrations[getKey(contractName, eventName)];
17
+ if (existing !== undefined) {
18
+ return existing;
19
+ } else {
20
+ return {
21
+ handler: undefined,
22
+ contractRegister: undefined,
23
+ eventOptions: undefined
24
+ };
25
+ }
26
+ }
27
+
28
+ function set(contractName, eventName, registration) {
29
+ eventRegistrations[getKey(contractName, eventName)] = registration;
30
+ }
31
+
32
+ var activeRegistration = {
33
+ contents: undefined
34
+ };
35
+
36
+ var preRegistered = [];
37
+
38
+ function withRegistration(fn) {
39
+ var r = activeRegistration.contents;
40
+ if (r !== undefined) {
41
+ if (r.finished) {
42
+ return Js_exn.raiseError("The indexer finished initializing, so no more handlers can be registered. Make sure the handlers are registered on the top level of the file.");
43
+ } else {
44
+ return fn(r);
45
+ }
46
+ } else {
47
+ preRegistered.push(fn);
48
+ return ;
49
+ }
50
+ }
51
+
52
+ function startRegistration(ecosystem, multichain) {
53
+ var r = {
54
+ ecosystem: ecosystem,
55
+ multichain: multichain,
56
+ registrations: {
57
+ onBlockByChainId: {}
58
+ },
59
+ finished: false
60
+ };
61
+ activeRegistration.contents = r;
62
+ while(preRegistered.length > 0) {
63
+ var fn = preRegistered.pop();
64
+ if (fn !== undefined) {
65
+ fn(r);
66
+ }
67
+
68
+ };
69
+ }
70
+
71
+ function finishRegistration() {
72
+ var r = activeRegistration.contents;
73
+ if (r !== undefined) {
74
+ r.finished = true;
75
+ return r.registrations;
76
+ } else {
77
+ return Js_exn.raiseError("The indexer has not started registering handlers, so can't finish it.");
78
+ }
79
+ }
80
+
81
+ function isPendingRegistration() {
82
+ var r = activeRegistration.contents;
83
+ if (r !== undefined) {
84
+ return !r.finished;
85
+ } else {
86
+ return false;
87
+ }
88
+ }
89
+
90
+ var onBlockOptionsSchema = S$RescriptSchema.schema(function (s) {
91
+ return {
92
+ name: s.m(S$RescriptSchema.string),
93
+ chain: s.m(S$RescriptSchema.$$int),
94
+ interval: s.m(S$RescriptSchema.$$Option.getOr(S$RescriptSchema.option(S$RescriptSchema.intMin(S$RescriptSchema.$$int, 1, undefined)), 1)),
95
+ startBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int)),
96
+ endBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int))
97
+ };
98
+ });
99
+
100
+ function onBlock(rawOptions, handler) {
101
+ withRegistration(function (registration) {
102
+ var match = registration.multichain;
103
+ if (match === "ordered") {
104
+ Js_exn.raiseError("Block Handlers are not supported for ordered multichain mode. Please reach out to the Envio team if you need this feature. Or enable unordered multichain mode by removing `multichain: ordered` from the config.yaml file.");
105
+ }
106
+ var options = S$RescriptSchema.parseOrThrow(rawOptions, onBlockOptionsSchema);
107
+ var chainId = options.chain;
108
+ var onBlockByChainId = registration.registrations.onBlockByChainId;
109
+ var onBlockConfigs = onBlockByChainId[String(chainId)];
110
+ if (onBlockConfigs !== undefined) {
111
+ onBlockConfigs.push({
112
+ index: onBlockConfigs.length,
113
+ name: options.name,
114
+ chainId: chainId,
115
+ startBlock: options.startBlock,
116
+ endBlock: options.endBlock,
117
+ interval: options.interval,
118
+ handler: handler
119
+ });
120
+ } else {
121
+ onBlockByChainId[chainId] = [{
122
+ index: 0,
123
+ name: options.name,
124
+ chainId: chainId,
125
+ startBlock: options.startBlock,
126
+ endBlock: options.endBlock,
127
+ interval: options.interval,
128
+ handler: handler
129
+ }];
130
+ }
131
+ });
132
+ }
133
+
134
+ function getHandler(contractName, eventName) {
135
+ return get(contractName, eventName).handler;
136
+ }
137
+
138
+ function getContractRegister(contractName, eventName) {
139
+ return get(contractName, eventName).contractRegister;
140
+ }
141
+
142
+ function getEventFilters(contractName, eventName) {
143
+ return Belt_Option.flatMap(get(contractName, eventName).eventOptions, (function (value) {
144
+ return value.eventFilters;
145
+ }));
146
+ }
147
+
148
+ function isWildcard(contractName, eventName) {
149
+ return Belt_Option.getWithDefault(Belt_Option.flatMap(get(contractName, eventName).eventOptions, (function (value) {
150
+ return value.wildcard;
151
+ })), false);
152
+ }
153
+
154
+ function hasRegistration(contractName, eventName) {
155
+ var r = get(contractName, eventName);
156
+ if (Belt_Option.isSome(r.handler)) {
157
+ return true;
158
+ } else {
159
+ return Belt_Option.isSome(r.contractRegister);
160
+ }
161
+ }
162
+
163
+ function raiseDuplicateRegistration(contractName, eventName, msg, logger) {
164
+ var fullMsg = msg + " for " + contractName + "." + eventName;
165
+ Logging.childError(Logging.createChildFrom(logger, {
166
+ contractName: contractName,
167
+ eventName: eventName
168
+ }), fullMsg);
169
+ return Js_exn.raiseError(fullMsg);
170
+ }
171
+
172
+ function eventOptionsMatch(existing, incoming) {
173
+ if (existing !== undefined) {
174
+ if (incoming !== undefined && existing.wildcard === incoming.wildcard) {
175
+ var a = existing.eventFilters;
176
+ var b = incoming.eventFilters;
177
+ if (a !== undefined) {
178
+ if (a.TAG === "Static") {
179
+ if (b !== undefined && b.TAG === "Static") {
180
+ return Caml_obj.equal(a._0, b._0);
181
+ } else {
182
+ return false;
183
+ }
184
+ } else if (b !== undefined && b.TAG !== "Static") {
185
+ return a._0 === b._0;
186
+ } else {
187
+ return false;
188
+ }
189
+ } else {
190
+ return b === undefined;
191
+ }
192
+ } else {
193
+ return false;
194
+ }
195
+ } else {
196
+ return incoming === undefined;
197
+ }
198
+ }
199
+
200
+ function setEventOptions(contractName, eventName, eventOptions, loggerOpt) {
201
+ var logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
202
+ if (eventOptions === undefined) {
203
+ return ;
204
+ }
205
+ var t = get(contractName, eventName);
206
+ var existingValue = t.eventOptions;
207
+ if (existingValue !== undefined) {
208
+ if (!eventOptionsMatch(existingValue, eventOptions)) {
209
+ return raiseDuplicateRegistration(contractName, eventName, "Cannot register handler with different options. Make sure all handlers for the same event use identical options (wildcard, eventFilters)", logger);
210
+ } else {
211
+ return ;
212
+ }
213
+ } else {
214
+ return set(contractName, eventName, {
215
+ handler: t.handler,
216
+ contractRegister: t.contractRegister,
217
+ eventOptions: eventOptions
218
+ });
219
+ }
220
+ }
221
+
222
+ function setHandler(contractName, eventName, handler, eventOptions, loggerOpt) {
223
+ var logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
224
+ withRegistration(function (_registration) {
225
+ var t = get(contractName, eventName);
226
+ var prevHandler = t.handler;
227
+ if (prevHandler !== undefined) {
228
+ var incomingEventOptions = Belt_Option.map(eventOptions, (function (v) {
229
+ return v;
230
+ }));
231
+ if (!eventOptionsMatch(t.eventOptions, incomingEventOptions)) {
232
+ return raiseDuplicateRegistration(contractName, eventName, "Cannot register a second handler with different options. Make sure all handlers for the same event use identical options (wildcard, eventFilters)", logger);
233
+ }
234
+ var composedHandler = async function (args) {
235
+ await prevHandler(args);
236
+ return await handler(args);
237
+ };
238
+ return set(contractName, eventName, {
239
+ handler: composedHandler,
240
+ contractRegister: t.contractRegister,
241
+ eventOptions: t.eventOptions
242
+ });
243
+ }
244
+ setEventOptions(contractName, eventName, eventOptions, logger);
245
+ var t$1 = get(contractName, eventName);
246
+ set(contractName, eventName, {
247
+ handler: handler,
248
+ contractRegister: t$1.contractRegister,
249
+ eventOptions: t$1.eventOptions
250
+ });
251
+ });
252
+ }
253
+
254
+ function setContractRegister(contractName, eventName, contractRegister, eventOptions, loggerOpt) {
255
+ var logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
256
+ withRegistration(function (_registration) {
257
+ var t = get(contractName, eventName);
258
+ var prevContractRegister = t.contractRegister;
259
+ if (prevContractRegister !== undefined) {
260
+ var incomingEventOptions = Belt_Option.map(eventOptions, (function (v) {
261
+ return v;
262
+ }));
263
+ if (!eventOptionsMatch(t.eventOptions, incomingEventOptions)) {
264
+ return raiseDuplicateRegistration(contractName, eventName, "Cannot register a second contractRegister with different options. Make sure all handlers for the same event use identical options (wildcard, eventFilters)", logger);
265
+ }
266
+ var composedContractRegister = async function (args) {
267
+ await prevContractRegister(args);
268
+ return await contractRegister(args);
269
+ };
270
+ return set(contractName, eventName, {
271
+ handler: t.handler,
272
+ contractRegister: composedContractRegister,
273
+ eventOptions: t.eventOptions
274
+ });
275
+ }
276
+ setEventOptions(contractName, eventName, eventOptions, logger);
277
+ var t$1 = get(contractName, eventName);
278
+ set(contractName, eventName, {
279
+ handler: t$1.handler,
280
+ contractRegister: contractRegister,
281
+ eventOptions: t$1.eventOptions
282
+ });
283
+ });
284
+ }
285
+
286
+ export {
287
+ startRegistration ,
288
+ isPendingRegistration ,
289
+ finishRegistration ,
290
+ setHandler ,
291
+ setContractRegister ,
292
+ getHandler ,
293
+ getContractRegister ,
294
+ getEventFilters ,
295
+ isWildcard ,
296
+ hasRegistration ,
297
+ onBlock ,
298
+ }
299
+ /* onBlockOptionsSchema Not a pure module */
@@ -1,30 +1,30 @@
1
- type registrations = {
2
- onBlockByChainId: dict<array<Internal.onBlockConfig>>,
3
- mutable hasEvents: bool,
4
- }
1
+ type registrations = {onBlockByChainId: dict<array<Internal.onBlockConfig>>}
5
2
 
6
3
  let startRegistration: (~ecosystem: Ecosystem.t, ~multichain: Config.multichain) => unit
7
4
  let isPendingRegistration: unit => bool
8
5
  let finishRegistration: unit => registrations
9
6
 
10
- type t
11
- let make: (~contractName: string, ~eventName: string) => t
12
7
  let setHandler: (
13
- t,
8
+ ~contractName: string,
9
+ ~eventName: string,
14
10
  Internal.genericHandler<Internal.genericHandlerArgs<'event, Internal.handlerContext>>,
15
11
  ~eventOptions: option<Internal.eventOptions<'eventFilters>>,
16
12
  ~logger: Pino.t=?,
17
13
  ) => unit
18
14
  let setContractRegister: (
19
- t,
15
+ ~contractName: string,
16
+ ~eventName: string,
20
17
  Internal.genericContractRegister<Internal.genericContractRegisterArgs<'event, 'context>>,
21
18
  ~eventOptions: option<Internal.eventOptions<'eventFilters>>,
22
19
  ~logger: Pino.t=?,
23
20
  ) => unit
24
- let getHandler: t => option<Internal.handler>
25
- let getContractRegister: t => option<Internal.contractRegister>
26
- let getEventFilters: t => option<Js.Json.t>
27
- let isWildcard: t => bool
28
- let hasRegistration: t => bool
21
+ let getHandler: (~contractName: string, ~eventName: string) => option<Internal.handler>
22
+ let getContractRegister: (
23
+ ~contractName: string,
24
+ ~eventName: string,
25
+ ) => option<Internal.contractRegister>
26
+ let getEventFilters: (~contractName: string, ~eventName: string) => option<Js.Json.t>
27
+ let isWildcard: (~contractName: string, ~eventName: string) => bool
28
+ let hasRegistration: (~contractName: string, ~eventName: string) => bool
29
29
 
30
30
  let onBlock: (unknown, Internal.onBlockArgs => promise<unit>) => unit