envio 3.9.0 → 3.10.0

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 (110) hide show
  1. package/evm.schema.json +26 -0
  2. package/fuel.schema.json +26 -0
  3. package/index.d.ts +35 -3
  4. package/package.json +6 -7
  5. package/src/Batch.res +9 -0
  6. package/src/ChainState.res +35 -39
  7. package/src/ChainState.res.mjs +14 -11
  8. package/src/ChainState.resi +15 -7
  9. package/src/Config.res +52 -44
  10. package/src/Config.res.mjs +51 -17
  11. package/src/Core.res +4 -0
  12. package/src/CrossChainState.res +15 -23
  13. package/src/CrossChainState.res.mjs +10 -18
  14. package/src/CrossChainState.resi +4 -1
  15. package/src/Ecosystem.res +7 -2
  16. package/src/Envio.res +6 -4
  17. package/src/EventConfigBuilder.res +169 -26
  18. package/src/EventConfigBuilder.res.mjs +124 -15
  19. package/src/HandlerRegister.res +21 -4
  20. package/src/HandlerRegister.res.mjs +24 -5
  21. package/src/InMemoryStore.res +9 -7
  22. package/src/InMemoryStore.res.mjs +3 -3
  23. package/src/IndexerState.res +43 -6
  24. package/src/IndexerState.res.mjs +36 -7
  25. package/src/IndexerState.resi +4 -4
  26. package/src/Internal.res +16 -17
  27. package/src/Metrics.res +72 -6
  28. package/src/Metrics.res.mjs +30 -2
  29. package/src/Persistence.res +36 -30
  30. package/src/Persistence.res.mjs +1 -20
  31. package/src/PgStorage.res +104 -56
  32. package/src/PgStorage.res.mjs +57 -35
  33. package/src/PruneStaleHistory.res +85 -52
  34. package/src/PruneStaleHistory.res.mjs +63 -37
  35. package/src/Rollback.res +68 -45
  36. package/src/Rollback.res.mjs +38 -19
  37. package/src/RollbackCommit.res +7 -9
  38. package/src/RollbackCommit.res.mjs +5 -6
  39. package/src/SafeCheckpointTracking.res +11 -11
  40. package/src/SafeCheckpointTracking.res.mjs +7 -6
  41. package/src/SimulateItems.res +33 -18
  42. package/src/SimulateItems.res.mjs +26 -22
  43. package/src/Sink.res +38 -26
  44. package/src/Sink.res.mjs +21 -16
  45. package/src/TestIndexer.res +5 -5
  46. package/src/TestIndexer.res.mjs +1 -1
  47. package/src/Utils.res +170 -0
  48. package/src/Utils.res.mjs +153 -0
  49. package/src/Writing.res +2 -2
  50. package/src/Writing.res.mjs +1 -1
  51. package/src/bindings/ClickHouse.res +366 -698
  52. package/src/bindings/ClickHouse.res.mjs +371 -421
  53. package/src/bindings/ClickHouseSink.res +337 -0
  54. package/src/bindings/ClickHouseSink.res.mjs +246 -0
  55. package/src/bindings/EventSource.res +8 -2
  56. package/src/bindings/NodeJs.res +6 -0
  57. package/src/bindings/Vitest.res +23 -0
  58. package/src/bindings/Vitest.res.mjs +3 -0
  59. package/src/bindings/WebSocket.res +9 -10
  60. package/src/db/CheckpointBounds.res +53 -0
  61. package/src/db/CheckpointBounds.res.mjs +44 -0
  62. package/src/db/EntityFilter.res +36 -17
  63. package/src/db/EntityFilter.res.mjs +25 -14
  64. package/src/db/EntityHistory.res +47 -22
  65. package/src/db/EntityHistory.res.mjs +19 -12
  66. package/src/db/InternalTable.res +84 -35
  67. package/src/db/InternalTable.res.mjs +56 -23
  68. package/src/db/RollbackFloors.res +55 -0
  69. package/src/db/RollbackFloors.res.mjs +92 -0
  70. package/src/db/Table.res +22 -4
  71. package/src/db/Table.res.mjs +30 -9
  72. package/src/sources/Evm.res +2 -0
  73. package/src/sources/Evm.res.mjs +2 -0
  74. package/src/sources/EvmHyperSyncSource.res +3 -3
  75. package/src/sources/EvmHyperSyncSource.res.mjs +3 -3
  76. package/src/sources/EvmRpcWs.res +124 -0
  77. package/src/sources/EvmRpcWs.res.mjs +117 -0
  78. package/src/sources/Fuel.res +2 -0
  79. package/src/sources/Fuel.res.mjs +2 -0
  80. package/src/sources/FuelHyperSyncSource.res +1 -1
  81. package/src/sources/FuelHyperSyncSource.res.mjs +2 -1
  82. package/src/sources/HeightFeed.res +568 -0
  83. package/src/sources/HeightFeed.res.mjs +452 -0
  84. package/src/sources/HeightStream.res +257 -0
  85. package/src/sources/HeightStream.res.mjs +194 -0
  86. package/src/sources/HyperSync.res +5 -0
  87. package/src/sources/HyperSync.res.mjs +3 -0
  88. package/src/sources/HyperSync.resi +4 -0
  89. package/src/sources/HyperSyncSSE.res +49 -0
  90. package/src/sources/HyperSyncSSE.res.mjs +79 -0
  91. package/src/sources/RpcSource.res +1 -1
  92. package/src/sources/RpcSource.res.mjs +2 -2
  93. package/src/sources/Source.res +54 -1
  94. package/src/sources/Source.res.mjs +25 -0
  95. package/src/sources/SourceManager.res +220 -227
  96. package/src/sources/SourceManager.res.mjs +139 -164
  97. package/src/sources/SourceManager.resi +8 -0
  98. package/src/sources/Svm.res +2 -0
  99. package/src/sources/Svm.res.mjs +2 -0
  100. package/src/sources/SvmHyperSyncClient.res +70 -127
  101. package/src/sources/SvmHyperSyncClient.res.mjs +51 -25
  102. package/src/sources/SvmHyperSyncSource.res +18 -15
  103. package/src/sources/SvmHyperSyncSource.res.mjs +5 -4
  104. package/svm.schema.json +1 -75
  105. package/src/MemoryStorage.res +0 -729
  106. package/src/MemoryStorage.res.mjs +0 -586
  107. package/src/sources/HyperSyncHeightStream.res +0 -129
  108. package/src/sources/HyperSyncHeightStream.res.mjs +0 -110
  109. package/src/sources/RpcWebSocketHeightStream.res +0 -175
  110. package/src/sources/RpcWebSocketHeightStream.res.mjs +0 -180
@@ -0,0 +1,117 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Rpc from "./Rpc.res.mjs";
4
+ import * as Utils from "../Utils.res.mjs";
5
+ import * as HeightStream from "./HeightStream.res.mjs";
6
+ import * as Stdlib_JsExn from "@rescript/runtime/lib/es6/Stdlib_JsExn.js";
7
+ import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
8
+
9
+ let subscribeRequestIdText = (1).toString();
10
+
11
+ let subscribeRequestJson = JSON.stringify({
12
+ jsonrpc: "2.0",
13
+ id: 1,
14
+ method: "eth_subscribe",
15
+ params: ["newHeads"]
16
+ });
17
+
18
+ let responseIdSchema = S$RescriptSchema.nullable(S$RescriptSchema.union([
19
+ S$RescriptSchema.string,
20
+ S$RescriptSchema.transform(S$RescriptSchema.int, param => ({
21
+ p: id => id.toString()
22
+ }))
23
+ ]));
24
+
25
+ function refusesSubscribe(id, subscribed) {
26
+ if (id !== undefined) {
27
+ return id === subscribeRequestIdText;
28
+ } else {
29
+ return !subscribed;
30
+ }
31
+ }
32
+
33
+ let wsMessageSchema = S$RescriptSchema.union([
34
+ S$RescriptSchema.object(s => {
35
+ s.f("method", S$RescriptSchema.literal("eth_subscription"));
36
+ return {
37
+ TAG: "NewHead",
38
+ _0: s.f("params", S$RescriptSchema.object(s => s.f("result", S$RescriptSchema.object(s => s.f("number", Rpc.hexIntSchema)))))
39
+ };
40
+ }),
41
+ S$RescriptSchema.object(s => {
42
+ let id = s.f("id", responseIdSchema);
43
+ s.f("result", S$RescriptSchema.string);
44
+ return {
45
+ TAG: "Response",
46
+ id: id,
47
+ isError: false
48
+ };
49
+ }),
50
+ S$RescriptSchema.object(s => {
51
+ let id = s.f("id", responseIdSchema);
52
+ s.f("error", S$RescriptSchema.object(s => s.f("code", S$RescriptSchema.int)));
53
+ return {
54
+ TAG: "Response",
55
+ id: id,
56
+ isError: true
57
+ };
58
+ })
59
+ ]);
60
+
61
+ function subscribe(wsUrl, onHeight, onStatus) {
62
+ return HeightStream.subscribe(60000, onHeight, onStatus, driver => {
63
+ let ws = new WebSocket(wsUrl);
64
+ let subscribed = {
65
+ contents: false
66
+ };
67
+ ws.onopen = () => {
68
+ ws.send(subscribeRequestJson);
69
+ };
70
+ ws.onmessage = event => {
71
+ if (typeof event.data !== "string") {
72
+ return driver.onUnreadable("binary frame");
73
+ }
74
+ let text = event.data;
75
+ let message = Utils.Option.catchToNone(() => S$RescriptSchema.parseOrThrow(JSON.parse(text), wsMessageSchema));
76
+ if (message === undefined) {
77
+ return driver.onUnreadable(text);
78
+ }
79
+ if (message.TAG === "NewHead") {
80
+ return driver.onHeight(message._0);
81
+ }
82
+ let id = message.id;
83
+ if (id !== undefined && !message.isError) {
84
+ if (id === subscribeRequestIdText) {
85
+ subscribed.contents = true;
86
+ return driver.onConnected();
87
+ } else {
88
+ return;
89
+ }
90
+ }
91
+ if (message.isError && refusesSubscribe(id, subscribed.contents)) {
92
+ return driver.onFailure("SubscribeRejected", text);
93
+ }
94
+ };
95
+ ws.onerror = error => driver.onFailure("TransportError", Stdlib_JsExn.message(error));
96
+ ws.onclose = () => driver.onFailure("Closed", undefined);
97
+ return () => {
98
+ ws.close();
99
+ };
100
+ });
101
+ }
102
+
103
+ let staleTimeout = 60000;
104
+
105
+ let subscribeRequestId = 1;
106
+
107
+ export {
108
+ staleTimeout,
109
+ subscribeRequestId,
110
+ subscribeRequestIdText,
111
+ subscribeRequestJson,
112
+ responseIdSchema,
113
+ refusesSubscribe,
114
+ wsMessageSchema,
115
+ subscribe,
116
+ }
117
+ /* subscribeRequestIdText Not a pure module */
@@ -40,6 +40,8 @@ let make = (~logger: Pino.t): Ecosystem.t => {
40
40
  blockTimestampName: "time",
41
41
  blockHashName: "id",
42
42
  onBlockMethodName: "onBlock",
43
+ contractNoun: "contract",
44
+ eventNoun: "event",
43
45
  // Fuel filter shape: `{block: {height: {_gte?, _lte?, _every?}}}`.
44
46
  // Inner range chunk parsed by `blockRangeSchema` in `Main.res`.
45
47
  onBlockFilterSchema: S.object(s =>
@@ -33,6 +33,8 @@ function make(logger) {
33
33
  blockTimestampName: "time",
34
34
  blockHashName: "id",
35
35
  onBlockMethodName: "onBlock",
36
+ contractNoun: "contract",
37
+ eventNoun: "event",
36
38
  onBlockFilterSchema: S$RescriptSchema.object(s => s.f("block", S$RescriptSchema.option(S$RescriptSchema.object(s2 => s2.f("height", S$RescriptSchema.unknown))))),
37
39
  onEventBlockFilterSchema: S$RescriptSchema.object(s => s.f("block", S$RescriptSchema.option(S$RescriptSchema.strict(S$RescriptSchema.object(s2 => s2.f("height", S$RescriptSchema.unknown)))))),
38
40
  logger: logger,
@@ -208,7 +208,7 @@ Learn more or get a free Envio API token at: https://envio.dev/app/api-tokens`)
208
208
  sourceFor: Sync,
209
209
  chainId,
210
210
  getBlockHashes,
211
- pollingInterval: 100,
211
+ pollingInterval: HyperSync.pollingInterval,
212
212
  poweredByHyperSync: true,
213
213
  getHeightOrThrow: async () => {
214
214
  let timerRef = Performance.now()
@@ -2,6 +2,7 @@
2
2
 
3
3
  import * as Source from "./Source.res.mjs";
4
4
  import * as Logging from "../Logging.res.mjs";
5
+ import * as HyperSync from "./HyperSync.res.mjs";
5
6
  import * as Performance from "../bindings/Performance.res.mjs";
6
7
  import * as Stdlib_JsExn from "@rescript/runtime/lib/es6/Stdlib_JsExn.js";
7
8
  import * as ErrorHandling from "../ErrorHandling.res.mjs";
@@ -180,7 +181,7 @@ Learn more or get a free Envio API token at: https://envio.dev/app/api-tokens`);
180
181
  sourceFor: "Sync",
181
182
  chainId: chainId,
182
183
  poweredByHyperSync: true,
183
- pollingInterval: 100,
184
+ pollingInterval: HyperSync.pollingInterval,
184
185
  getBlockHashes: getBlockHashes,
185
186
  getHeightOrThrow: async () => {
186
187
  let timerRef = Performance.now();