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.
- package/README.md +164 -30
- package/bin.mjs +49 -0
- package/evm.schema.json +79 -169
- package/fuel.schema.json +50 -21
- package/index.d.ts +497 -1
- package/index.js +4 -0
- package/package.json +42 -31
- package/rescript.json +4 -1
- package/src/Batch.res +11 -8
- package/src/Batch.res.mjs +11 -9
- package/src/ChainFetcher.res +531 -0
- package/src/ChainFetcher.res.mjs +339 -0
- package/src/ChainManager.res +190 -0
- package/src/ChainManager.res.mjs +166 -0
- package/src/Change.res +3 -3
- package/src/Config.gen.ts +19 -0
- package/src/Config.res +737 -22
- package/src/Config.res.mjs +703 -26
- package/src/{Indexer.res → Ctx.res} +1 -1
- package/src/Ecosystem.res +9 -124
- package/src/Ecosystem.res.mjs +19 -160
- package/src/Env.res +30 -74
- package/src/Env.res.mjs +25 -87
- package/src/Envio.gen.ts +3 -1
- package/src/Envio.res +20 -9
- package/src/EventProcessing.res +469 -0
- package/src/EventProcessing.res.mjs +337 -0
- package/src/EvmTypes.gen.ts +6 -0
- package/src/EvmTypes.res +1 -0
- package/src/FetchState.res +1256 -639
- package/src/FetchState.res.mjs +1135 -612
- package/src/GlobalState.res +1190 -0
- package/src/GlobalState.res.mjs +1183 -0
- package/src/GlobalStateManager.res +68 -0
- package/src/GlobalStateManager.res.mjs +75 -0
- package/src/GlobalStateManager.resi +7 -0
- package/src/HandlerLoader.res +89 -0
- package/src/HandlerLoader.res.mjs +79 -0
- package/src/HandlerRegister.res +357 -0
- package/src/HandlerRegister.res.mjs +299 -0
- package/src/{EventRegister.resi → HandlerRegister.resi} +13 -13
- package/src/Hasura.res +111 -175
- package/src/Hasura.res.mjs +88 -150
- package/src/InMemoryStore.res +1 -1
- package/src/InMemoryStore.res.mjs +3 -3
- package/src/InMemoryTable.res +1 -1
- package/src/InMemoryTable.res.mjs +1 -1
- package/src/Internal.gen.ts +4 -0
- package/src/Internal.res +230 -12
- package/src/Internal.res.mjs +115 -1
- package/src/LoadLayer.res +444 -0
- package/src/LoadLayer.res.mjs +296 -0
- package/src/LoadLayer.resi +32 -0
- package/src/LogSelection.res +33 -27
- package/src/LogSelection.res.mjs +6 -0
- package/src/Logging.res +21 -7
- package/src/Logging.res.mjs +16 -8
- package/src/Main.res +377 -0
- package/src/Main.res.mjs +339 -0
- package/src/Persistence.res +7 -21
- package/src/Persistence.res.mjs +3 -3
- package/src/PgStorage.gen.ts +10 -0
- package/src/PgStorage.res +116 -69
- package/src/PgStorage.res.d.mts +5 -0
- package/src/PgStorage.res.mjs +93 -50
- package/src/Prometheus.res +294 -224
- package/src/Prometheus.res.mjs +353 -340
- package/src/ReorgDetection.res +6 -10
- package/src/ReorgDetection.res.mjs +6 -6
- package/src/SafeCheckpointTracking.res +4 -4
- package/src/SafeCheckpointTracking.res.mjs +2 -2
- package/src/Sink.res +4 -2
- package/src/Sink.res.mjs +2 -1
- package/src/TableIndices.res +0 -1
- package/src/TestIndexer.res +692 -0
- package/src/TestIndexer.res.mjs +527 -0
- package/src/TestIndexerProxyStorage.res +205 -0
- package/src/TestIndexerProxyStorage.res.mjs +151 -0
- package/src/TopicFilter.res +1 -1
- package/src/Types.ts +1 -1
- package/src/UserContext.res +424 -0
- package/src/UserContext.res.mjs +279 -0
- package/src/Utils.res +97 -26
- package/src/Utils.res.mjs +91 -44
- package/src/bindings/BigInt.res +10 -0
- package/src/bindings/BigInt.res.mjs +15 -0
- package/src/bindings/ClickHouse.res +120 -23
- package/src/bindings/ClickHouse.res.mjs +118 -28
- package/src/bindings/DateFns.res +74 -0
- package/src/bindings/DateFns.res.mjs +22 -0
- package/src/bindings/EventSource.res +8 -1
- package/src/bindings/EventSource.res.mjs +8 -1
- package/src/bindings/Express.res +1 -0
- package/src/bindings/Hrtime.res +14 -1
- package/src/bindings/Hrtime.res.mjs +22 -2
- package/src/bindings/Hrtime.resi +4 -0
- package/src/bindings/Lodash.res +0 -1
- package/src/bindings/NodeJs.res +49 -3
- package/src/bindings/NodeJs.res.mjs +11 -3
- package/src/bindings/Pino.res +24 -10
- package/src/bindings/Pino.res.mjs +14 -8
- package/src/bindings/Postgres.gen.ts +8 -0
- package/src/bindings/Postgres.res +5 -1
- package/src/bindings/Postgres.res.d.mts +5 -0
- package/src/bindings/PromClient.res +0 -10
- package/src/bindings/PromClient.res.mjs +0 -3
- package/src/bindings/Vitest.res +142 -0
- package/src/bindings/Vitest.res.mjs +9 -0
- package/src/bindings/WebSocket.res +27 -0
- package/src/bindings/WebSocket.res.mjs +2 -0
- package/src/bindings/Yargs.res +8 -0
- package/src/bindings/Yargs.res.mjs +2 -0
- package/src/db/EntityHistory.res +7 -7
- package/src/db/EntityHistory.res.mjs +9 -9
- package/src/db/InternalTable.res +59 -111
- package/src/db/InternalTable.res.mjs +73 -104
- package/src/db/Table.res +27 -8
- package/src/db/Table.res.mjs +25 -14
- package/src/sources/Evm.res +84 -0
- package/src/sources/Evm.res.mjs +105 -0
- package/src/sources/EvmChain.res +94 -0
- package/src/sources/EvmChain.res.mjs +60 -0
- package/src/sources/Fuel.res +19 -34
- package/src/sources/Fuel.res.mjs +34 -16
- package/src/sources/FuelSDK.res +38 -0
- package/src/sources/FuelSDK.res.mjs +29 -0
- package/src/sources/HyperFuel.res +2 -2
- package/src/sources/HyperFuel.resi +1 -1
- package/src/sources/HyperFuelClient.res +2 -2
- package/src/sources/HyperFuelSource.res +33 -13
- package/src/sources/HyperFuelSource.res.mjs +24 -16
- package/src/sources/HyperSync.res +36 -6
- package/src/sources/HyperSync.res.mjs +9 -7
- package/src/sources/HyperSync.resi +4 -0
- package/src/sources/HyperSyncClient.res +1 -1
- package/src/sources/HyperSyncHeightStream.res +47 -116
- package/src/sources/HyperSyncHeightStream.res.mjs +46 -73
- package/src/sources/HyperSyncSource.res +118 -139
- package/src/sources/HyperSyncSource.res.mjs +104 -121
- package/src/sources/Rpc.res +86 -14
- package/src/sources/Rpc.res.mjs +101 -9
- package/src/sources/RpcSource.res +621 -364
- package/src/sources/RpcSource.res.mjs +843 -410
- package/src/sources/RpcWebSocketHeightStream.res +181 -0
- package/src/sources/RpcWebSocketHeightStream.res.mjs +196 -0
- package/src/sources/Source.res +7 -5
- package/src/sources/SourceManager.res +325 -225
- package/src/sources/SourceManager.res.mjs +314 -171
- package/src/sources/SourceManager.resi +17 -6
- package/src/sources/Svm.res +81 -0
- package/src/sources/Svm.res.mjs +90 -0
- package/src/tui/Tui.res +247 -0
- package/src/tui/Tui.res.mjs +337 -0
- package/src/tui/bindings/Ink.res +371 -0
- package/src/tui/bindings/Ink.res.mjs +72 -0
- package/src/tui/bindings/Style.res +123 -0
- package/src/tui/bindings/Style.res.mjs +2 -0
- package/src/tui/components/BufferedProgressBar.res +40 -0
- package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
- package/src/tui/components/CustomHooks.res +122 -0
- package/src/tui/components/CustomHooks.res.mjs +179 -0
- package/src/tui/components/Messages.res +41 -0
- package/src/tui/components/Messages.res.mjs +75 -0
- package/src/tui/components/SyncETA.res +174 -0
- package/src/tui/components/SyncETA.res.mjs +263 -0
- package/src/tui/components/TuiData.res +47 -0
- package/src/tui/components/TuiData.res.mjs +34 -0
- package/svm.schema.json +112 -0
- package/bin.js +0 -48
- package/src/EventRegister.res +0 -241
- package/src/EventRegister.res.mjs +0 -240
- package/src/bindings/Ethers.gen.ts +0 -14
- package/src/bindings/Ethers.res +0 -204
- package/src/bindings/Ethers.res.mjs +0 -130
- /package/src/{Indexer.res.mjs → Ctx.res.mjs} +0 -0
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
}
|
package/src/Ecosystem.res.mjs
CHANGED
|
@@ -1,170 +1,29 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
20
|
+
return {
|
|
21
|
+
block: Caml_option.some(blockEvent),
|
|
22
|
+
context: context
|
|
23
|
+
};
|
|
160
24
|
}
|
|
161
25
|
|
|
162
26
|
export {
|
|
163
|
-
|
|
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 =
|
|
40
|
-
let defaultFileLogLevel =
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
43
|
+
var userLogLevel = EnvSafe.get(envSafe, "LOG_LEVEL", S$RescriptSchema.option(logLevelSchema), undefined, undefined, undefined, undefined);
|
|
49
44
|
|
|
50
|
-
var defaultFileLogLevel =
|
|
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 ,
|