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
@@ -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,50 +64,6 @@ 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
- }
108
-
109
67
  let logStrategy =
110
68
  envSafe->EnvSafe.get(
111
69
  "LOG_STRATEGY",
@@ -122,7 +80,12 @@ let logStrategy =
122
80
  )
123
81
 
124
82
  Logging.setLogger(
125
- Logging.makeLogger(~logStrategy, ~logFilePath, ~defaultFileLogLevel, ~userLogLevel),
83
+ Logging.makeLogger(
84
+ ~logStrategy,
85
+ ~logFilePath,
86
+ ~defaultFileLogLevel,
87
+ ~userLogLevel=userLogLevel->Belt.Option.getWithDefault(#info),
88
+ ),
126
89
  )
127
90
 
128
91
  module Db = {
@@ -137,7 +100,13 @@ module Db = {
137
100
  },
138
101
  )
139
102
  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")
103
+ let publicSchema = envSafe->EnvSafe.get(
104
+ "ENVIO_PG_SCHEMA",
105
+ S.string,
106
+ ~fallback={
107
+ envSafe->EnvSafe.get("ENVIO_PG_PUBLIC_SCHEMA", S.string, ~fallback="public")
108
+ },
109
+ )
141
110
  let ssl = envSafe->EnvSafe.get(
142
111
  "ENVIO_PG_SSL_MODE",
143
112
  Postgres.sslOptionsSchema,
@@ -145,6 +114,7 @@ module Db = {
145
114
  //the SSL modes should be provided as string otherwise as 'require' | 'allow' | 'prefer' | 'verify-full'
146
115
  ~devFallback=Bool(false),
147
116
  )
117
+ let maxConnections = envSafe->EnvSafe.get("ENVIO_PG_MAX_CONNECTIONS", S.int, ~fallback=2)
148
118
  }
149
119
 
150
120
  module ClickHouseSink = {
@@ -224,20 +194,6 @@ module ThrottleWrites = {
224
194
  S.int,
225
195
  ~devFallback=30_000,
226
196
  )
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
197
  }
242
198
 
243
199
  // 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,7 +3,7 @@
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
9
 
@@ -12,42 +12,37 @@ import 'dotenv/config'
12
12
 
13
13
  var envSafe = EnvSafe.make(undefined);
14
14
 
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
15
  var updateSyncTimeOnRestart = EnvSafe.get(envSafe, "UPDATE_SYNC_TIME_ON_RESTART", S$RescriptSchema.bool, undefined, true, undefined, undefined);
31
16
 
32
- var batchSize = EnvSafe.get(envSafe, "MAX_BATCH_SIZE", S$RescriptSchema.option(S$RescriptSchema.$$int), undefined, undefined, undefined, undefined);
33
-
34
17
  var targetBufferSize = EnvSafe.get(envSafe, "ENVIO_INDEXING_MAX_BUFFER_SIZE", S$RescriptSchema.option(S$RescriptSchema.$$int), undefined, undefined, undefined, undefined);
35
18
 
36
19
  var maxAddrInPartition = EnvSafe.get(envSafe, "MAX_PARTITION_SIZE", S$RescriptSchema.$$int, undefined, 5000, undefined, undefined);
37
20
 
38
21
  var maxPartitionConcurrency = EnvSafe.get(envSafe, "ENVIO_MAX_PARTITION_CONCURRENCY", S$RescriptSchema.$$int, undefined, 10, undefined, undefined);
39
22
 
40
- var indexingBlockLag = EnvSafe.get(envSafe, "ENVIO_INDEXING_BLOCK_LAG", S$RescriptSchema.option(S$RescriptSchema.$$int), undefined, undefined, undefined, undefined);
41
-
42
23
  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
24
 
44
25
  var tuiOffEnvVar = EnvSafe.get(envSafe, "TUI_OFF", S$RescriptSchema.bool, undefined, false, undefined, undefined);
45
26
 
27
+ var logLevelSchema = S$RescriptSchema.$$enum([
28
+ "trace",
29
+ "debug",
30
+ "info",
31
+ "warn",
32
+ "error",
33
+ "fatal",
34
+ "udebug",
35
+ "uinfo",
36
+ "uwarn",
37
+ "uerror",
38
+ "silent"
39
+ ]);
40
+
46
41
  var logFilePath = EnvSafe.get(envSafe, "LOG_FILE", S$RescriptSchema.string, undefined, "logs/envio.log", undefined, undefined);
47
42
 
48
- var userLogLevel = getLogLevelConfig("LOG_LEVEL", "info");
43
+ var userLogLevel = EnvSafe.get(envSafe, "LOG_LEVEL", S$RescriptSchema.option(logLevelSchema), undefined, undefined, undefined, undefined);
49
44
 
50
- var defaultFileLogLevel = getLogLevelConfig("FILE_LOG_LEVEL", "trace");
45
+ var defaultFileLogLevel = EnvSafe.get(envSafe, "FILE_LOG_LEVEL", logLevelSchema, undefined, "trace", undefined, undefined);
51
46
 
52
47
  var prodEnvioAppUrl = "https://envio.dev";
53
48
 
@@ -63,58 +58,6 @@ var hypersyncClientSerializationFormat = EnvSafe.get(envSafe, "ENVIO_HYPERSYNC_C
63
58
 
64
59
  var hypersyncClientEnableQueryCaching = EnvSafe.get(envSafe, "ENVIO_HYPERSYNC_CLIENT_ENABLE_QUERY_CACHING", S$RescriptSchema.bool, undefined, true, undefined, undefined);
65
60
 
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);
108
-
109
- var shouldSaveStdDev = shouldSaveJsonFile(saveDataStrategy);
110
-
111
- var Benchmark = {
112
- SaveDataStrategy: SaveDataStrategy,
113
- saveDataStrategy: saveDataStrategy,
114
- shouldSaveData: shouldSaveData$1,
115
- shouldSaveStdDev: shouldSaveStdDev
116
- };
117
-
118
61
  var logStrategy = EnvSafe.get(envSafe, "LOG_STRATEGY", S$RescriptSchema.$$enum([
119
62
  "ecs-file",
120
63
  "ecs-console",
@@ -125,7 +68,7 @@ var logStrategy = EnvSafe.get(envSafe, "LOG_STRATEGY", S$RescriptSchema.$$enum([
125
68
  "both-prettyconsole"
126
69
  ]), undefined, "console-pretty", undefined, undefined);
127
70
 
128
- Logging.setLogger(Logging.makeLogger(logStrategy, logFilePath, defaultFileLogLevel, userLogLevel));
71
+ Logging.setLogger(Logging.makeLogger(logStrategy, logFilePath, defaultFileLogLevel, Belt_Option.getWithDefault(userLogLevel, "info")));
129
72
 
130
73
  var host = EnvSafe.get(envSafe, "ENVIO_PG_HOST", S$RescriptSchema.string, undefined, undefined, "localhost", undefined);
131
74
 
@@ -137,10 +80,12 @@ var password = EnvSafe.get(envSafe, "ENVIO_PG_PASSWORD", S$RescriptSchema.string
137
80
 
138
81
  var database = EnvSafe.get(envSafe, "ENVIO_PG_DATABASE", S$RescriptSchema.string, undefined, undefined, "envio-dev", undefined);
139
82
 
140
- var publicSchema = EnvSafe.get(envSafe, "ENVIO_PG_PUBLIC_SCHEMA", S$RescriptSchema.string, undefined, "public", undefined, undefined);
83
+ 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
84
 
142
85
  var ssl = EnvSafe.get(envSafe, "ENVIO_PG_SSL_MODE", Postgres.sslOptionsSchema, undefined, undefined, false, undefined);
143
86
 
87
+ var maxConnections = EnvSafe.get(envSafe, "ENVIO_PG_MAX_CONNECTIONS", S$RescriptSchema.$$int, undefined, 2, undefined, undefined);
88
+
144
89
  var Db = {
145
90
  host: host,
146
91
  port: port,
@@ -148,7 +93,8 @@ var Db = {
148
93
  password: password,
149
94
  database: database,
150
95
  publicSchema: publicSchema,
151
- ssl: ssl
96
+ ssl: ssl,
97
+ maxConnections: maxConnections
152
98
  };
153
99
 
154
100
  var host$1 = EnvSafe.get(envSafe, "ENVIO_CLICKHOUSE_SINK_HOST", S$RescriptSchema.option(S$RescriptSchema.string), undefined, undefined, undefined, undefined);
@@ -230,28 +176,21 @@ var chainMetadataIntervalMillis = EnvSafe.get(envSafe, "ENVIO_THROTTLE_CHAIN_MET
230
176
 
231
177
  var pruneStaleDataIntervalMillis = EnvSafe.get(envSafe, "ENVIO_THROTTLE_PRUNE_STALE_DATA_INTERVAL_MILLIS", S$RescriptSchema.$$int, undefined, undefined, 30000, undefined);
232
178
 
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
179
  var ThrottleWrites = {
238
180
  chainMetadataIntervalMillis: chainMetadataIntervalMillis,
239
- pruneStaleDataIntervalMillis: pruneStaleDataIntervalMillis,
240
- liveMetricsBenchmarkIntervalMillis: liveMetricsBenchmarkIntervalMillis,
241
- jsonFileBenchmarkIntervalMillis: jsonFileBenchmarkIntervalMillis
181
+ pruneStaleDataIntervalMillis: pruneStaleDataIntervalMillis
242
182
  };
243
183
 
244
184
  EnvSafe.close(envSafe);
245
185
 
246
186
  export {
247
187
  updateSyncTimeOnRestart ,
248
- batchSize ,
249
188
  targetBufferSize ,
250
189
  maxAddrInPartition ,
251
190
  maxPartitionConcurrency ,
252
- indexingBlockLag ,
253
191
  serverPort ,
254
192
  tuiOffEnvVar ,
193
+ logLevelSchema ,
255
194
  logFilePath ,
256
195
  userLogLevel ,
257
196
  defaultFileLogLevel ,
@@ -262,7 +201,6 @@ export {
262
201
  hyperSyncClientMaxRetries ,
263
202
  hypersyncClientSerializationFormat ,
264
203
  hypersyncClientEnableQueryCaching ,
265
- Benchmark ,
266
204
  logStrategy ,
267
205
  Db ,
268
206
  ClickHouseSink ,