envio 3.0.0-alpha.2 → 3.0.0-alpha.21

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 (184) 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 +578 -1
  6. package/index.js +4 -0
  7. package/package.json +47 -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 +725 -25
  18. package/src/Config.res.mjs +692 -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 +33 -73
  23. package/src/Env.res.mjs +29 -85
  24. package/src/Envio.gen.ts +3 -1
  25. package/src/Envio.res +77 -9
  26. package/src/Envio.res.mjs +39 -1
  27. package/src/EventConfigBuilder.res +408 -0
  28. package/src/EventConfigBuilder.res.mjs +376 -0
  29. package/src/EventProcessing.res +469 -0
  30. package/src/EventProcessing.res.mjs +337 -0
  31. package/src/EvmTypes.gen.ts +6 -0
  32. package/src/EvmTypes.res +1 -0
  33. package/src/FetchState.res +1256 -639
  34. package/src/FetchState.res.mjs +1135 -612
  35. package/src/GlobalState.res +1224 -0
  36. package/src/GlobalState.res.mjs +1291 -0
  37. package/src/GlobalStateManager.res +68 -0
  38. package/src/GlobalStateManager.res.mjs +75 -0
  39. package/src/GlobalStateManager.resi +7 -0
  40. package/src/HandlerLoader.res +89 -0
  41. package/src/HandlerLoader.res.mjs +79 -0
  42. package/src/HandlerRegister.res +357 -0
  43. package/src/HandlerRegister.res.mjs +299 -0
  44. package/src/HandlerRegister.resi +30 -0
  45. package/src/Hasura.res +111 -175
  46. package/src/Hasura.res.mjs +88 -150
  47. package/src/InMemoryStore.res +1 -1
  48. package/src/InMemoryStore.res.mjs +3 -3
  49. package/src/InMemoryTable.res +1 -1
  50. package/src/InMemoryTable.res.mjs +1 -1
  51. package/src/Internal.gen.ts +6 -0
  52. package/src/Internal.res +265 -12
  53. package/src/Internal.res.mjs +115 -1
  54. package/src/LoadLayer.res +444 -0
  55. package/src/LoadLayer.res.mjs +296 -0
  56. package/src/LoadLayer.resi +32 -0
  57. package/src/LogSelection.res +33 -27
  58. package/src/LogSelection.res.mjs +6 -0
  59. package/src/Logging.res +21 -7
  60. package/src/Logging.res.mjs +16 -8
  61. package/src/Main.res +390 -0
  62. package/src/Main.res.mjs +341 -0
  63. package/src/Persistence.res +7 -21
  64. package/src/Persistence.res.mjs +3 -3
  65. package/src/PgStorage.gen.ts +10 -0
  66. package/src/PgStorage.res +116 -69
  67. package/src/PgStorage.res.d.mts +5 -0
  68. package/src/PgStorage.res.mjs +93 -50
  69. package/src/Prometheus.res +294 -224
  70. package/src/Prometheus.res.mjs +353 -340
  71. package/src/ReorgDetection.res +6 -10
  72. package/src/ReorgDetection.res.mjs +6 -6
  73. package/src/SafeCheckpointTracking.res +4 -4
  74. package/src/SafeCheckpointTracking.res.mjs +2 -2
  75. package/src/SimulateItems.res +353 -0
  76. package/src/SimulateItems.res.mjs +335 -0
  77. package/src/Sink.res +4 -2
  78. package/src/Sink.res.mjs +2 -1
  79. package/src/TableIndices.res +0 -1
  80. package/src/TestIndexer.res +913 -0
  81. package/src/TestIndexer.res.mjs +698 -0
  82. package/src/TestIndexerProxyStorage.res +205 -0
  83. package/src/TestIndexerProxyStorage.res.mjs +151 -0
  84. package/src/TopicFilter.res +1 -1
  85. package/src/Types.ts +1 -1
  86. package/src/UserContext.res +424 -0
  87. package/src/UserContext.res.mjs +279 -0
  88. package/src/Utils.res +97 -26
  89. package/src/Utils.res.mjs +91 -44
  90. package/src/bindings/BigInt.res +10 -0
  91. package/src/bindings/BigInt.res.mjs +15 -0
  92. package/src/bindings/ClickHouse.res +120 -23
  93. package/src/bindings/ClickHouse.res.mjs +118 -28
  94. package/src/bindings/DateFns.res +74 -0
  95. package/src/bindings/DateFns.res.mjs +22 -0
  96. package/src/bindings/EventSource.res +11 -2
  97. package/src/bindings/EventSource.res.mjs +8 -1
  98. package/src/bindings/Express.res +1 -0
  99. package/src/bindings/Hrtime.res +14 -1
  100. package/src/bindings/Hrtime.res.mjs +22 -2
  101. package/src/bindings/Hrtime.resi +4 -0
  102. package/src/bindings/Lodash.res +0 -1
  103. package/src/bindings/NodeJs.res +49 -3
  104. package/src/bindings/NodeJs.res.mjs +11 -3
  105. package/src/bindings/Pino.res +24 -10
  106. package/src/bindings/Pino.res.mjs +14 -8
  107. package/src/bindings/Postgres.gen.ts +8 -0
  108. package/src/bindings/Postgres.res +5 -1
  109. package/src/bindings/Postgres.res.d.mts +5 -0
  110. package/src/bindings/PromClient.res +0 -10
  111. package/src/bindings/PromClient.res.mjs +0 -3
  112. package/src/bindings/Vitest.res +144 -0
  113. package/src/bindings/Vitest.res.mjs +9 -0
  114. package/src/bindings/WebSocket.res +27 -0
  115. package/src/bindings/WebSocket.res.mjs +2 -0
  116. package/src/bindings/Yargs.res +8 -0
  117. package/src/bindings/Yargs.res.mjs +2 -0
  118. package/src/db/EntityHistory.res +7 -7
  119. package/src/db/EntityHistory.res.mjs +9 -9
  120. package/src/db/InternalTable.res +59 -111
  121. package/src/db/InternalTable.res.mjs +73 -104
  122. package/src/db/Table.res +27 -8
  123. package/src/db/Table.res.mjs +25 -14
  124. package/src/sources/Evm.res +84 -0
  125. package/src/sources/Evm.res.mjs +105 -0
  126. package/src/sources/EvmChain.res +94 -0
  127. package/src/sources/EvmChain.res.mjs +60 -0
  128. package/src/sources/Fuel.res +19 -34
  129. package/src/sources/Fuel.res.mjs +34 -16
  130. package/src/sources/FuelSDK.res +38 -0
  131. package/src/sources/FuelSDK.res.mjs +29 -0
  132. package/src/sources/HyperFuel.res +2 -2
  133. package/src/sources/HyperFuel.resi +1 -1
  134. package/src/sources/HyperFuelClient.res +2 -2
  135. package/src/sources/HyperFuelSource.res +35 -13
  136. package/src/sources/HyperFuelSource.res.mjs +26 -16
  137. package/src/sources/HyperSync.res +61 -60
  138. package/src/sources/HyperSync.res.mjs +53 -67
  139. package/src/sources/HyperSync.resi +6 -4
  140. package/src/sources/HyperSyncClient.res +29 -2
  141. package/src/sources/HyperSyncClient.res.mjs +9 -0
  142. package/src/sources/HyperSyncHeightStream.res +76 -118
  143. package/src/sources/HyperSyncHeightStream.res.mjs +68 -75
  144. package/src/sources/HyperSyncSource.res +122 -143
  145. package/src/sources/HyperSyncSource.res.mjs +106 -121
  146. package/src/sources/Rpc.res +86 -14
  147. package/src/sources/Rpc.res.mjs +101 -9
  148. package/src/sources/RpcSource.res +731 -364
  149. package/src/sources/RpcSource.res.mjs +845 -410
  150. package/src/sources/RpcWebSocketHeightStream.res +181 -0
  151. package/src/sources/RpcWebSocketHeightStream.res.mjs +196 -0
  152. package/src/sources/SimulateSource.res +59 -0
  153. package/src/sources/SimulateSource.res.mjs +50 -0
  154. package/src/sources/Source.res +7 -5
  155. package/src/sources/SourceManager.res +358 -221
  156. package/src/sources/SourceManager.res.mjs +346 -171
  157. package/src/sources/SourceManager.resi +17 -6
  158. package/src/sources/Svm.res +81 -0
  159. package/src/sources/Svm.res.mjs +90 -0
  160. package/src/tui/Tui.res +247 -0
  161. package/src/tui/Tui.res.mjs +337 -0
  162. package/src/tui/bindings/Ink.res +371 -0
  163. package/src/tui/bindings/Ink.res.mjs +72 -0
  164. package/src/tui/bindings/Style.res +123 -0
  165. package/src/tui/bindings/Style.res.mjs +2 -0
  166. package/src/tui/components/BufferedProgressBar.res +40 -0
  167. package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
  168. package/src/tui/components/CustomHooks.res +122 -0
  169. package/src/tui/components/CustomHooks.res.mjs +179 -0
  170. package/src/tui/components/Messages.res +41 -0
  171. package/src/tui/components/Messages.res.mjs +75 -0
  172. package/src/tui/components/SyncETA.res +174 -0
  173. package/src/tui/components/SyncETA.res.mjs +263 -0
  174. package/src/tui/components/TuiData.res +47 -0
  175. package/src/tui/components/TuiData.res.mjs +34 -0
  176. package/svm.schema.json +112 -0
  177. package/bin.js +0 -48
  178. package/src/EventRegister.res +0 -241
  179. package/src/EventRegister.res.mjs +0 -240
  180. package/src/EventRegister.resi +0 -30
  181. package/src/bindings/Ethers.gen.ts +0 -14
  182. package/src/bindings/Ethers.res +0 -204
  183. package/src/bindings/Ethers.res.mjs +0 -130
  184. /package/src/{Indexer.res.mjs → Ctx.res.mjs} +0 -0
@@ -1,5 +1,5 @@
1
1
  type t = {
2
- registrations: EventRegister.registrations,
2
+ registrations: HandlerRegister.registrations,
3
3
  config: Config.t,
4
4
  persistence: Persistence.t,
5
5
  }
package/src/Ecosystem.res CHANGED
@@ -1,4 +1,4 @@
1
- type name = | @as("evm") Evm | @as("fuel") Fuel
1
+ type name = | @as("evm") Evm | @as("fuel") Fuel | @as("svm") Svm
2
2
 
3
3
  type t = {
4
4
  name: name,
@@ -13,128 +13,13 @@ type t = {
13
13
  cleanUpRawEventFieldsInPlace: Js.Json.t => unit,
14
14
  }
15
15
 
16
- module Evm = {
17
- @get external getNumber: Internal.eventBlock => int = "number"
18
- @get external getTimestamp: Internal.eventBlock => int = "timestamp"
19
- @get external getId: Internal.eventBlock => string = "hash"
20
-
21
- let cleanUpRawEventFieldsInPlace: Js.Json.t => unit = %raw(`fields => {
22
- delete fields.hash
23
- delete fields.number
24
- delete fields.timestamp
25
- }`)
26
- }
27
-
28
- let evm: t = {
29
- name: Evm,
30
- blockFields: [
31
- "number",
32
- "timestamp",
33
- "hash",
34
- "parentHash",
35
- "nonce",
36
- "sha3Uncles",
37
- "logsBloom",
38
- "transactionsRoot",
39
- "stateRoot",
40
- "receiptsRoot",
41
- "miner",
42
- "difficulty",
43
- "totalDifficulty",
44
- "extraData",
45
- "size",
46
- "gasLimit",
47
- "gasUsed",
48
- "uncles",
49
- "baseFeePerGas",
50
- "blobGasUsed",
51
- "excessBlobGas",
52
- "parentBeaconBlockRoot",
53
- "withdrawalsRoot",
54
- "l1BlockNumber",
55
- "sendCount",
56
- "sendRoot",
57
- "mixHash",
58
- ],
59
- transactionFields: [
60
- "transactionIndex",
61
- "hash",
62
- "from",
63
- "to",
64
- "gas",
65
- "gasPrice",
66
- "maxPriorityFeePerGas",
67
- "maxFeePerGas",
68
- "cumulativeGasUsed",
69
- "effectiveGasPrice",
70
- "gasUsed",
71
- "input",
72
- "nonce",
73
- "value",
74
- "v",
75
- "r",
76
- "s",
77
- "contractAddress",
78
- "logsBloom",
79
- "root",
80
- "status",
81
- "yParity",
82
- "chainId",
83
- "maxFeePerBlobGas",
84
- "blobVersionedHashes",
85
- "type",
86
- "l1Fee",
87
- "l1GasPrice",
88
- "l1GasUsed",
89
- "l1FeeScalar",
90
- "gasUsedForL1",
91
- "accessList",
92
- "authorizationList",
93
- ],
94
- blockNumberName: "number",
95
- blockTimestampName: "timestamp",
96
- blockHashName: "hash",
97
- getNumber: Evm.getNumber,
98
- getTimestamp: Evm.getTimestamp,
99
- getId: Evm.getId,
100
- cleanUpRawEventFieldsInPlace: Evm.cleanUpRawEventFieldsInPlace,
101
- }
102
-
103
- module Fuel = {
104
- @get external getNumber: Internal.eventBlock => int = "height"
105
- @get external getTimestamp: Internal.eventBlock => int = "time"
106
- @get external getId: Internal.eventBlock => string = "id"
107
-
108
- let cleanUpRawEventFieldsInPlace: Js.Json.t => unit = %raw(`fields => {
109
- delete fields.id
110
- delete fields.height
111
- delete fields.time
112
- }`)
113
- }
114
-
115
- let fuel: t = {
116
- name: Fuel,
117
- blockFields: ["id", "height", "time"],
118
- transactionFields: ["id"],
119
- blockNumberName: "height",
120
- blockTimestampName: "time",
121
- blockHashName: "id",
122
- getNumber: Fuel.getNumber,
123
- getTimestamp: Fuel.getTimestamp,
124
- getId: Fuel.getId,
125
- cleanUpRawEventFieldsInPlace: Fuel.cleanUpRawEventFieldsInPlace,
126
- }
127
-
128
- let fromName = (name: name): t => {
129
- switch name {
130
- | Evm => evm
131
- | Fuel => fuel
16
+ let makeOnBlockArgs = (~blockNumber: int, ~ecosystem: t, ~context): Internal.onBlockArgs => {
17
+ switch ecosystem.name {
18
+ | Svm => {slot: blockNumber, context}
19
+ | _ => {
20
+ let blockEvent = Js.Dict.empty()
21
+ blockEvent->Js.Dict.set(ecosystem.blockNumberName, blockNumber->(Utils.magic: int => unknown))
22
+ {block: blockEvent->(Utils.magic: Js.Dict.t<unknown> => Internal.blockEvent), context}
23
+ }
132
24
  }
133
25
  }
134
-
135
- // Create a block event object for block handlers based on ecosystem
136
- let makeBlockEvent = (~blockNumber: int, ecosystem: t): Internal.blockEvent => {
137
- let blockEvent = Js.Dict.empty()
138
- blockEvent->Js.Dict.set(ecosystem.blockNumberName, blockNumber->Utils.magic)
139
- blockEvent->Utils.magic
140
- }
@@ -1,170 +1,29 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
-
4
- var cleanUpRawEventFieldsInPlace = (fields => {
5
- delete fields.hash
6
- delete fields.number
7
- delete fields.timestamp
8
- });
9
-
10
- var Evm = {
11
- cleanUpRawEventFieldsInPlace: cleanUpRawEventFieldsInPlace
12
- };
13
-
14
- var evm_blockFields = [
15
- "number",
16
- "timestamp",
17
- "hash",
18
- "parentHash",
19
- "nonce",
20
- "sha3Uncles",
21
- "logsBloom",
22
- "transactionsRoot",
23
- "stateRoot",
24
- "receiptsRoot",
25
- "miner",
26
- "difficulty",
27
- "totalDifficulty",
28
- "extraData",
29
- "size",
30
- "gasLimit",
31
- "gasUsed",
32
- "uncles",
33
- "baseFeePerGas",
34
- "blobGasUsed",
35
- "excessBlobGas",
36
- "parentBeaconBlockRoot",
37
- "withdrawalsRoot",
38
- "l1BlockNumber",
39
- "sendCount",
40
- "sendRoot",
41
- "mixHash"
42
- ];
43
-
44
- var evm_transactionFields = [
45
- "transactionIndex",
46
- "hash",
47
- "from",
48
- "to",
49
- "gas",
50
- "gasPrice",
51
- "maxPriorityFeePerGas",
52
- "maxFeePerGas",
53
- "cumulativeGasUsed",
54
- "effectiveGasPrice",
55
- "gasUsed",
56
- "input",
57
- "nonce",
58
- "value",
59
- "v",
60
- "r",
61
- "s",
62
- "contractAddress",
63
- "logsBloom",
64
- "root",
65
- "status",
66
- "yParity",
67
- "chainId",
68
- "maxFeePerBlobGas",
69
- "blobVersionedHashes",
70
- "type",
71
- "l1Fee",
72
- "l1GasPrice",
73
- "l1GasUsed",
74
- "l1FeeScalar",
75
- "gasUsedForL1",
76
- "accessList",
77
- "authorizationList"
78
- ];
79
-
80
- function evm_getNumber(prim) {
81
- return prim.number;
82
- }
83
-
84
- function evm_getTimestamp(prim) {
85
- return prim.timestamp;
86
- }
87
-
88
- function evm_getId(prim) {
89
- return prim.hash;
90
- }
91
-
92
- var evm = {
93
- name: "evm",
94
- blockFields: evm_blockFields,
95
- transactionFields: evm_transactionFields,
96
- blockNumberName: "number",
97
- blockTimestampName: "timestamp",
98
- blockHashName: "hash",
99
- getNumber: evm_getNumber,
100
- getTimestamp: evm_getTimestamp,
101
- getId: evm_getId,
102
- cleanUpRawEventFieldsInPlace: cleanUpRawEventFieldsInPlace
103
- };
104
-
105
- var cleanUpRawEventFieldsInPlace$1 = (fields => {
106
- delete fields.id
107
- delete fields.height
108
- delete fields.time
109
- });
110
-
111
- var Fuel = {
112
- cleanUpRawEventFieldsInPlace: cleanUpRawEventFieldsInPlace$1
113
- };
114
-
115
- var fuel_blockFields = [
116
- "id",
117
- "height",
118
- "time"
119
- ];
120
-
121
- var fuel_transactionFields = ["id"];
122
-
123
- function fuel_getNumber(prim) {
124
- return prim.height;
125
- }
126
-
127
- function fuel_getTimestamp(prim) {
128
- return prim.time;
129
- }
130
-
131
- function fuel_getId(prim) {
132
- return prim.id;
133
- }
134
-
135
- var fuel = {
136
- name: "fuel",
137
- blockFields: fuel_blockFields,
138
- transactionFields: fuel_transactionFields,
139
- blockNumberName: "height",
140
- blockTimestampName: "time",
141
- blockHashName: "id",
142
- getNumber: fuel_getNumber,
143
- getTimestamp: fuel_getTimestamp,
144
- getId: fuel_getId,
145
- cleanUpRawEventFieldsInPlace: cleanUpRawEventFieldsInPlace$1
146
- };
147
-
148
- function fromName(name) {
149
- if (name === "evm") {
150
- return evm;
151
- } else {
152
- return fuel;
3
+ import * as Caml_option from "rescript/lib/es6/caml_option.js";
4
+
5
+ function makeOnBlockArgs(blockNumber, ecosystem, context) {
6
+ var match = ecosystem.name;
7
+ switch (match) {
8
+ case "evm" :
9
+ case "fuel" :
10
+ break;
11
+ case "svm" :
12
+ return {
13
+ slot: blockNumber,
14
+ context: context
15
+ };
16
+
153
17
  }
154
- }
155
-
156
- function makeBlockEvent(blockNumber, ecosystem) {
157
18
  var blockEvent = {};
158
19
  blockEvent[ecosystem.blockNumberName] = blockNumber;
159
- return blockEvent;
20
+ return {
21
+ block: Caml_option.some(blockEvent),
22
+ context: context
23
+ };
160
24
  }
161
25
 
162
26
  export {
163
- Evm ,
164
- evm ,
165
- Fuel ,
166
- fuel ,
167
- fromName ,
168
- makeBlockEvent ,
27
+ makeOnBlockArgs ,
169
28
  }
170
29
  /* No side effect */
package/src/Env.res CHANGED
@@ -1,26 +1,15 @@
1
-
2
1
  // Loads the .env from the root working directory
3
2
  %%raw(`import 'dotenv/config'`)
4
3
 
5
- %%private(
6
- let envSafe = EnvSafe.make()
4
+ %%private(let envSafe = EnvSafe.make())
7
5
 
8
- let getLogLevelConfig = (name, ~default): Pino.logLevel =>
9
- envSafe->EnvSafe.get(
10
- name,
11
- S.enum([#trace, #debug, #info, #warn, #error, #fatal, #udebug, #uinfo, #uwarn, #uerror]),
12
- ~fallback=default,
13
- )
14
- )
15
6
  // resets the timestampCaughtUpToHeadOrEndblock after a restart when true
16
7
  let updateSyncTimeOnRestart =
17
8
  envSafe->EnvSafe.get("UPDATE_SYNC_TIME_ON_RESTART", S.bool, ~fallback=true)
18
- let batchSize = envSafe->EnvSafe.get("MAX_BATCH_SIZE", S.option(S.int))
19
9
  let targetBufferSize = envSafe->EnvSafe.get("ENVIO_INDEXING_MAX_BUFFER_SIZE", S.option(S.int))
20
10
  let maxAddrInPartition = envSafe->EnvSafe.get("MAX_PARTITION_SIZE", S.int, ~fallback=5_000)
21
11
  let maxPartitionConcurrency =
22
12
  envSafe->EnvSafe.get("ENVIO_MAX_PARTITION_CONCURRENCY", S.int, ~fallback=10)
23
- let indexingBlockLag = envSafe->EnvSafe.get("ENVIO_INDEXING_BLOCK_LAG", S.option(S.int))
24
13
 
25
14
  // FIXME: This broke HS grafana dashboard. Should investigate it later. Maybe we should use :: as a default value?
26
15
  // We want to be able to set it to 0.0.0.0
@@ -35,9 +24,22 @@ let serverPort =
35
24
 
36
25
  let tuiOffEnvVar = envSafe->EnvSafe.get("TUI_OFF", S.bool, ~fallback=false)
37
26
 
27
+ let logLevelSchema = S.enum([
28
+ #trace,
29
+ #debug,
30
+ #info,
31
+ #warn,
32
+ #error,
33
+ #fatal,
34
+ #udebug,
35
+ #uinfo,
36
+ #uwarn,
37
+ #uerror,
38
+ #silent,
39
+ ])
38
40
  let logFilePath = envSafe->EnvSafe.get("LOG_FILE", S.string, ~fallback="logs/envio.log")
39
- let userLogLevel = getLogLevelConfig("LOG_LEVEL", ~default=#info)
40
- let defaultFileLogLevel = getLogLevelConfig("FILE_LOG_LEVEL", ~default=#trace)
41
+ let userLogLevel = envSafe->EnvSafe.get("LOG_LEVEL", S.option(logLevelSchema))
42
+ let defaultFileLogLevel = envSafe->EnvSafe.get("FILE_LOG_LEVEL", logLevelSchema, ~fallback=#trace)
41
43
 
42
44
  let prodEnvioAppUrl = "https://envio.dev"
43
45
  let envioAppUrl = envSafe->EnvSafe.get("ENVIO_APP", S.string, ~fallback=prodEnvioAppUrl)
@@ -62,49 +64,9 @@ let hypersyncClientSerializationFormat =
62
64
  let hypersyncClientEnableQueryCaching =
63
65
  envSafe->EnvSafe.get("ENVIO_HYPERSYNC_CLIENT_ENABLE_QUERY_CACHING", S.bool, ~fallback=true)
64
66
 
65
- module Benchmark = {
66
- module SaveDataStrategy: {
67
- type t
68
- let schema: S.t<t>
69
- let default: t
70
- let shouldSaveJsonFile: t => bool
71
- let shouldSavePrometheus: t => bool
72
- let shouldSaveData: t => bool
73
- } = {
74
- @unboxed
75
- type t = Bool(bool) | @as("json-file") JsonFile | @as("prometheus") Prometheus
76
-
77
- let schema = S.enum([Bool(true), Bool(false), JsonFile, Prometheus])
78
- let default = Bool(false)
79
-
80
- let shouldSaveJsonFile = self =>
81
- switch self {
82
- | JsonFile | Bool(true) => true
83
- | _ => false
84
- }
85
-
86
- let shouldSavePrometheus = _ => true
87
-
88
- let shouldSaveData = self => self->shouldSavePrometheus || self->shouldSaveJsonFile
89
- }
90
-
91
- let saveDataStrategy =
92
- envSafe->EnvSafe.get(
93
- "ENVIO_SAVE_BENCHMARK_DATA",
94
- SaveDataStrategy.schema,
95
- ~fallback=SaveDataStrategy.default,
96
- )
97
-
98
- let shouldSaveData = saveDataStrategy->SaveDataStrategy.shouldSaveData
99
-
100
- /**
101
- StdDev involves saving sum of squares of data points, which could get very large.
102
-
103
- Currently only do this for local runs on json-file and not prometheus.
104
- */
105
- let shouldSaveStdDev =
106
- saveDataStrategy->SaveDataStrategy.shouldSaveJsonFile
107
- }
67
+ let hypersyncLogLevel =
68
+ envSafe->EnvSafe.get("ENVIO_HYPERSYNC_LOG_LEVEL", HyperSyncClient.logLevelSchema, ~fallback=#info)
69
+ HyperSyncClient.setLogLevel(hypersyncLogLevel)
108
70
 
109
71
  let logStrategy =
110
72
  envSafe->EnvSafe.get(
@@ -122,7 +84,12 @@ let logStrategy =
122
84
  )
123
85
 
124
86
  Logging.setLogger(
125
- Logging.makeLogger(~logStrategy, ~logFilePath, ~defaultFileLogLevel, ~userLogLevel),
87
+ Logging.makeLogger(
88
+ ~logStrategy,
89
+ ~logFilePath,
90
+ ~defaultFileLogLevel,
91
+ ~userLogLevel=userLogLevel->Belt.Option.getWithDefault(#info),
92
+ ),
126
93
  )
127
94
 
128
95
  module Db = {
@@ -137,7 +104,13 @@ module Db = {
137
104
  },
138
105
  )
139
106
  let database = envSafe->EnvSafe.get("ENVIO_PG_DATABASE", S.string, ~devFallback="envio-dev")
140
- let publicSchema = envSafe->EnvSafe.get("ENVIO_PG_PUBLIC_SCHEMA", S.string, ~fallback="public")
107
+ let publicSchema = envSafe->EnvSafe.get(
108
+ "ENVIO_PG_SCHEMA",
109
+ S.string,
110
+ ~fallback={
111
+ envSafe->EnvSafe.get("ENVIO_PG_PUBLIC_SCHEMA", S.string, ~fallback="public")
112
+ },
113
+ )
141
114
  let ssl = envSafe->EnvSafe.get(
142
115
  "ENVIO_PG_SSL_MODE",
143
116
  Postgres.sslOptionsSchema,
@@ -145,6 +118,7 @@ module Db = {
145
118
  //the SSL modes should be provided as string otherwise as 'require' | 'allow' | 'prefer' | 'verify-full'
146
119
  ~devFallback=Bool(false),
147
120
  )
121
+ let maxConnections = envSafe->EnvSafe.get("ENVIO_PG_MAX_CONNECTIONS", S.int, ~fallback=2)
148
122
  }
149
123
 
150
124
  module ClickHouseSink = {
@@ -224,20 +198,6 @@ module ThrottleWrites = {
224
198
  S.int,
225
199
  ~devFallback=30_000,
226
200
  )
227
-
228
- let liveMetricsBenchmarkIntervalMillis =
229
- envSafe->EnvSafe.get(
230
- "ENVIO_THROTTLE_LIVE_METRICS_BENCHMARK_INTERVAL_MILLIS",
231
- S.int,
232
- ~devFallback=1_000,
233
- )
234
-
235
- let jsonFileBenchmarkIntervalMillis =
236
- envSafe->EnvSafe.get(
237
- "ENVIO_THROTTLE_JSON_FILE_BENCHMARK_INTERVAL_MILLIS",
238
- S.int,
239
- ~devFallback=500,
240
- )
241
201
  }
242
202
 
243
203
  // You need to close the envSafe after you're done with it so that it immediately tells you about your misconfigured environment on startup.
package/src/Env.res.mjs CHANGED
@@ -3,51 +3,47 @@
3
3
  import * as EnvSafe from "rescript-envsafe/src/EnvSafe.res.mjs";
4
4
  import * as Logging from "./Logging.res.mjs";
5
5
  import * as Postgres from "./bindings/Postgres.res.mjs";
6
- import * as Caml_option from "rescript/lib/es6/caml_option.js";
6
+ import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
7
7
  import * as HyperSyncClient from "./sources/HyperSyncClient.res.mjs";
8
8
  import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
9
+ import * as HypersyncClient from "@envio-dev/hypersync-client";
9
10
 
10
11
  import 'dotenv/config'
11
12
  ;
12
13
 
13
14
  var envSafe = EnvSafe.make(undefined);
14
15
 
15
- function getLogLevelConfig(name, $$default) {
16
- return EnvSafe.get(envSafe, name, S$RescriptSchema.$$enum([
17
- "trace",
18
- "debug",
19
- "info",
20
- "warn",
21
- "error",
22
- "fatal",
23
- "udebug",
24
- "uinfo",
25
- "uwarn",
26
- "uerror"
27
- ]), undefined, $$default, undefined, undefined);
28
- }
29
-
30
16
  var updateSyncTimeOnRestart = EnvSafe.get(envSafe, "UPDATE_SYNC_TIME_ON_RESTART", S$RescriptSchema.bool, undefined, true, undefined, undefined);
31
17
 
32
- var batchSize = EnvSafe.get(envSafe, "MAX_BATCH_SIZE", S$RescriptSchema.option(S$RescriptSchema.$$int), undefined, undefined, undefined, undefined);
33
-
34
18
  var targetBufferSize = EnvSafe.get(envSafe, "ENVIO_INDEXING_MAX_BUFFER_SIZE", S$RescriptSchema.option(S$RescriptSchema.$$int), undefined, undefined, undefined, undefined);
35
19
 
36
20
  var maxAddrInPartition = EnvSafe.get(envSafe, "MAX_PARTITION_SIZE", S$RescriptSchema.$$int, undefined, 5000, undefined, undefined);
37
21
 
38
22
  var maxPartitionConcurrency = EnvSafe.get(envSafe, "ENVIO_MAX_PARTITION_CONCURRENCY", S$RescriptSchema.$$int, undefined, 10, undefined, undefined);
39
23
 
40
- var indexingBlockLag = EnvSafe.get(envSafe, "ENVIO_INDEXING_BLOCK_LAG", S$RescriptSchema.option(S$RescriptSchema.$$int), undefined, undefined, undefined, undefined);
41
-
42
24
  var serverPort = EnvSafe.get(envSafe, "ENVIO_INDEXER_PORT", S$RescriptSchema.port(S$RescriptSchema.$$int, undefined), undefined, EnvSafe.get(envSafe, "METRICS_PORT", S$RescriptSchema.port(S$RescriptSchema.$$int, undefined), undefined, 9898, undefined, undefined), undefined, undefined);
43
25
 
44
26
  var tuiOffEnvVar = EnvSafe.get(envSafe, "TUI_OFF", S$RescriptSchema.bool, undefined, false, undefined, undefined);
45
27
 
28
+ var logLevelSchema = S$RescriptSchema.$$enum([
29
+ "trace",
30
+ "debug",
31
+ "info",
32
+ "warn",
33
+ "error",
34
+ "fatal",
35
+ "udebug",
36
+ "uinfo",
37
+ "uwarn",
38
+ "uerror",
39
+ "silent"
40
+ ]);
41
+
46
42
  var logFilePath = EnvSafe.get(envSafe, "LOG_FILE", S$RescriptSchema.string, undefined, "logs/envio.log", undefined, undefined);
47
43
 
48
- var userLogLevel = getLogLevelConfig("LOG_LEVEL", "info");
44
+ var userLogLevel = EnvSafe.get(envSafe, "LOG_LEVEL", S$RescriptSchema.option(logLevelSchema), undefined, undefined, undefined, undefined);
49
45
 
50
- var defaultFileLogLevel = getLogLevelConfig("FILE_LOG_LEVEL", "trace");
46
+ var defaultFileLogLevel = EnvSafe.get(envSafe, "FILE_LOG_LEVEL", logLevelSchema, undefined, "trace", undefined, undefined);
51
47
 
52
48
  var prodEnvioAppUrl = "https://envio.dev";
53
49
 
@@ -63,57 +59,9 @@ var hypersyncClientSerializationFormat = EnvSafe.get(envSafe, "ENVIO_HYPERSYNC_C
63
59
 
64
60
  var hypersyncClientEnableQueryCaching = EnvSafe.get(envSafe, "ENVIO_HYPERSYNC_CLIENT_ENABLE_QUERY_CACHING", S$RescriptSchema.bool, undefined, true, undefined, undefined);
65
61
 
66
- var schema = S$RescriptSchema.$$enum([
67
- true,
68
- false,
69
- "json-file",
70
- "prometheus"
71
- ]);
72
-
73
- var $$default = false;
74
-
75
- function shouldSaveJsonFile(self) {
76
- if (typeof self !== "boolean") {
77
- if (self === "json-file") {
78
- return true;
79
- } else {
80
- return false;
81
- }
82
- } else if (self) {
83
- return true;
84
- } else {
85
- return false;
86
- }
87
- }
88
-
89
- function shouldSavePrometheus(param) {
90
- return true;
91
- }
92
-
93
- function shouldSaveData(self) {
94
- return true;
95
- }
96
-
97
- var SaveDataStrategy = {
98
- schema: schema,
99
- $$default: $$default,
100
- shouldSaveJsonFile: shouldSaveJsonFile,
101
- shouldSavePrometheus: shouldSavePrometheus,
102
- shouldSaveData: shouldSaveData
103
- };
104
-
105
- var saveDataStrategy = EnvSafe.get(envSafe, "ENVIO_SAVE_BENCHMARK_DATA", schema, undefined, Caml_option.some($$default), undefined, undefined);
106
-
107
- var shouldSaveData$1 = shouldSaveData(saveDataStrategy);
62
+ var hypersyncLogLevel = EnvSafe.get(envSafe, "ENVIO_HYPERSYNC_LOG_LEVEL", HyperSyncClient.logLevelSchema, undefined, "info", undefined, undefined);
108
63
 
109
- var shouldSaveStdDev = shouldSaveJsonFile(saveDataStrategy);
110
-
111
- var Benchmark = {
112
- SaveDataStrategy: SaveDataStrategy,
113
- saveDataStrategy: saveDataStrategy,
114
- shouldSaveData: shouldSaveData$1,
115
- shouldSaveStdDev: shouldSaveStdDev
116
- };
64
+ HypersyncClient.setLogLevel(hypersyncLogLevel);
117
65
 
118
66
  var logStrategy = EnvSafe.get(envSafe, "LOG_STRATEGY", S$RescriptSchema.$$enum([
119
67
  "ecs-file",
@@ -125,7 +73,7 @@ var logStrategy = EnvSafe.get(envSafe, "LOG_STRATEGY", S$RescriptSchema.$$enum([
125
73
  "both-prettyconsole"
126
74
  ]), undefined, "console-pretty", undefined, undefined);
127
75
 
128
- Logging.setLogger(Logging.makeLogger(logStrategy, logFilePath, defaultFileLogLevel, userLogLevel));
76
+ Logging.setLogger(Logging.makeLogger(logStrategy, logFilePath, defaultFileLogLevel, Belt_Option.getWithDefault(userLogLevel, "info")));
129
77
 
130
78
  var host = EnvSafe.get(envSafe, "ENVIO_PG_HOST", S$RescriptSchema.string, undefined, undefined, "localhost", undefined);
131
79
 
@@ -137,10 +85,12 @@ var password = EnvSafe.get(envSafe, "ENVIO_PG_PASSWORD", S$RescriptSchema.string
137
85
 
138
86
  var database = EnvSafe.get(envSafe, "ENVIO_PG_DATABASE", S$RescriptSchema.string, undefined, undefined, "envio-dev", undefined);
139
87
 
140
- var publicSchema = EnvSafe.get(envSafe, "ENVIO_PG_PUBLIC_SCHEMA", S$RescriptSchema.string, undefined, "public", undefined, undefined);
88
+ var publicSchema = EnvSafe.get(envSafe, "ENVIO_PG_SCHEMA", S$RescriptSchema.string, undefined, EnvSafe.get(envSafe, "ENVIO_PG_PUBLIC_SCHEMA", S$RescriptSchema.string, undefined, "public", undefined, undefined), undefined, undefined);
141
89
 
142
90
  var ssl = EnvSafe.get(envSafe, "ENVIO_PG_SSL_MODE", Postgres.sslOptionsSchema, undefined, undefined, false, undefined);
143
91
 
92
+ var maxConnections = EnvSafe.get(envSafe, "ENVIO_PG_MAX_CONNECTIONS", S$RescriptSchema.$$int, undefined, 2, undefined, undefined);
93
+
144
94
  var Db = {
145
95
  host: host,
146
96
  port: port,
@@ -148,7 +98,8 @@ var Db = {
148
98
  password: password,
149
99
  database: database,
150
100
  publicSchema: publicSchema,
151
- ssl: ssl
101
+ ssl: ssl,
102
+ maxConnections: maxConnections
152
103
  };
153
104
 
154
105
  var host$1 = EnvSafe.get(envSafe, "ENVIO_CLICKHOUSE_SINK_HOST", S$RescriptSchema.option(S$RescriptSchema.string), undefined, undefined, undefined, undefined);
@@ -230,28 +181,21 @@ var chainMetadataIntervalMillis = EnvSafe.get(envSafe, "ENVIO_THROTTLE_CHAIN_MET
230
181
 
231
182
  var pruneStaleDataIntervalMillis = EnvSafe.get(envSafe, "ENVIO_THROTTLE_PRUNE_STALE_DATA_INTERVAL_MILLIS", S$RescriptSchema.$$int, undefined, undefined, 30000, undefined);
232
183
 
233
- var liveMetricsBenchmarkIntervalMillis = EnvSafe.get(envSafe, "ENVIO_THROTTLE_LIVE_METRICS_BENCHMARK_INTERVAL_MILLIS", S$RescriptSchema.$$int, undefined, undefined, 1000, undefined);
234
-
235
- var jsonFileBenchmarkIntervalMillis = EnvSafe.get(envSafe, "ENVIO_THROTTLE_JSON_FILE_BENCHMARK_INTERVAL_MILLIS", S$RescriptSchema.$$int, undefined, undefined, 500, undefined);
236
-
237
184
  var ThrottleWrites = {
238
185
  chainMetadataIntervalMillis: chainMetadataIntervalMillis,
239
- pruneStaleDataIntervalMillis: pruneStaleDataIntervalMillis,
240
- liveMetricsBenchmarkIntervalMillis: liveMetricsBenchmarkIntervalMillis,
241
- jsonFileBenchmarkIntervalMillis: jsonFileBenchmarkIntervalMillis
186
+ pruneStaleDataIntervalMillis: pruneStaleDataIntervalMillis
242
187
  };
243
188
 
244
189
  EnvSafe.close(envSafe);
245
190
 
246
191
  export {
247
192
  updateSyncTimeOnRestart ,
248
- batchSize ,
249
193
  targetBufferSize ,
250
194
  maxAddrInPartition ,
251
195
  maxPartitionConcurrency ,
252
- indexingBlockLag ,
253
196
  serverPort ,
254
197
  tuiOffEnvVar ,
198
+ logLevelSchema ,
255
199
  logFilePath ,
256
200
  userLogLevel ,
257
201
  defaultFileLogLevel ,
@@ -262,7 +206,7 @@ export {
262
206
  hyperSyncClientMaxRetries ,
263
207
  hypersyncClientSerializationFormat ,
264
208
  hypersyncClientEnableQueryCaching ,
265
- Benchmark ,
209
+ hypersyncLogLevel ,
266
210
  logStrategy ,
267
211
  Db ,
268
212
  ClickHouseSink ,