envio 3.3.0-alpha.7 → 3.3.0-alpha.9
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/index.d.ts +23 -5
- package/package.json +6 -6
- package/src/Api.res +1 -1
- package/src/Api.res.mjs +1 -1
- package/src/ChainFetching.res +21 -10
- package/src/ChainFetching.res.mjs +11 -10
- package/src/ChainState.res +401 -171
- package/src/ChainState.res.mjs +270 -104
- package/src/ChainState.resi +19 -7
- package/src/Config.res +11 -27
- package/src/Config.res.mjs +8 -7
- package/src/Core.res +7 -0
- package/src/CrossChainState.res +82 -82
- package/src/CrossChainState.res.mjs +52 -59
- package/src/CrossChainState.resi +1 -1
- package/src/Ecosystem.res +3 -3
- package/src/Ecosystem.res.mjs +3 -3
- package/src/Envio.res +14 -9
- package/src/EnvioGlobal.res +53 -0
- package/src/EnvioGlobal.res.mjs +31 -0
- package/src/EventConfigBuilder.res +117 -69
- package/src/EventConfigBuilder.res.mjs +71 -34
- package/src/EventProcessing.res +19 -15
- package/src/EventProcessing.res.mjs +13 -12
- package/src/FetchState.res +410 -185
- package/src/FetchState.res.mjs +268 -253
- package/src/HandlerLoader.res +8 -113
- package/src/HandlerLoader.res.mjs +2 -88
- package/src/HandlerRegister.res +518 -144
- package/src/HandlerRegister.res.mjs +285 -133
- package/src/HandlerRegister.resi +24 -8
- package/src/IndexerState.res +6 -3
- package/src/IndexerState.res.mjs +3 -3
- package/src/IndexerState.resi +1 -1
- package/src/IndexingAddresses.res +10 -7
- package/src/IndexingAddresses.res.mjs +8 -7
- package/src/IndexingAddresses.resi +3 -1
- package/src/Internal.res +104 -39
- package/src/Internal.res.mjs +11 -1
- package/src/LogSelection.res +102 -165
- package/src/LogSelection.res.mjs +101 -116
- package/src/Main.res +49 -164
- package/src/Main.res.mjs +39 -104
- package/src/Metrics.res +43 -2
- package/src/Metrics.res.mjs +39 -3
- package/src/Prometheus.res +0 -35
- package/src/Prometheus.res.mjs +33 -68
- package/src/RawEvent.res +7 -2
- package/src/RawEvent.res.mjs +4 -4
- package/src/RollbackCommit.res +4 -1
- package/src/RollbackCommit.res.mjs +3 -2
- package/src/SimulateItems.res +20 -7
- package/src/SimulateItems.res.mjs +7 -11
- package/src/TestIndexer.res +1 -1
- package/src/TestIndexer.res.mjs +1 -1
- package/src/sources/BlockStore.res +46 -0
- package/src/sources/BlockStore.res.mjs +24 -0
- package/src/sources/EventRouter.res +19 -12
- package/src/sources/EventRouter.res.mjs +7 -5
- package/src/sources/Evm.res +58 -5
- package/src/sources/Evm.res.mjs +44 -5
- package/src/sources/EvmChain.res +14 -18
- package/src/sources/EvmChain.res.mjs +12 -13
- package/src/sources/FieldMask.res +39 -0
- package/src/sources/FieldMask.res.mjs +42 -0
- package/src/sources/Fuel.res +8 -3
- package/src/sources/Fuel.res.mjs +5 -4
- package/src/sources/HyperFuelSource.res +31 -40
- package/src/sources/HyperFuelSource.res.mjs +52 -44
- package/src/sources/HyperSync.res +31 -9
- package/src/sources/HyperSync.res.mjs +47 -31
- package/src/sources/HyperSync.resi +10 -3
- package/src/sources/HyperSyncClient.res +15 -4
- package/src/sources/HyperSyncHeightStream.res +1 -8
- package/src/sources/HyperSyncHeightStream.res.mjs +0 -2
- package/src/sources/HyperSyncSource.res +58 -90
- package/src/sources/HyperSyncSource.res.mjs +57 -66
- package/src/sources/RpcSource.res +118 -120
- package/src/sources/RpcSource.res.mjs +92 -74
- package/src/sources/RpcWebSocketHeightStream.res +0 -5
- package/src/sources/RpcWebSocketHeightStream.res.mjs +0 -2
- package/src/sources/SimulateSource.res +5 -3
- package/src/sources/SimulateSource.res.mjs +12 -4
- package/src/sources/Source.res +19 -5
- package/src/sources/SourceManager.res +60 -10
- package/src/sources/SourceManager.res.mjs +54 -8
- package/src/sources/SourceManager.resi +10 -0
- package/src/sources/Svm.res +14 -10
- package/src/sources/Svm.res.mjs +23 -6
- package/src/sources/SvmHyperSyncClient.res +5 -6
- package/src/sources/SvmHyperSyncSource.res +82 -41
- package/src/sources/SvmHyperSyncSource.res.mjs +86 -41
- package/src/sources/TransactionStore.res +6 -107
- package/src/sources/TransactionStore.res.mjs +5 -86
- package/svm.schema.json +19 -0
package/src/HandlerLoader.res
CHANGED
|
@@ -72,117 +72,13 @@ let autoLoadFromSrcHandlers = async (~handlers: string) => {
|
|
|
72
72
|
->Promise.all
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
// `
|
|
79
|
-
//
|
|
80
|
-
let
|
|
81
|
-
|
|
82
|
-
let newContracts = chain.contracts->Array.map(contract => {
|
|
83
|
-
let newEvents = contract.events->Array.map(
|
|
84
|
-
ev => {
|
|
85
|
-
let isWildcard = HandlerRegister.isWildcard(
|
|
86
|
-
~contractName=ev.contractName,
|
|
87
|
-
~eventName=ev.name,
|
|
88
|
-
)
|
|
89
|
-
let handler = HandlerRegister.getHandler(
|
|
90
|
-
~contractName=ev.contractName,
|
|
91
|
-
~eventName=ev.name,
|
|
92
|
-
)
|
|
93
|
-
let contractRegister = HandlerRegister.getContractRegister(
|
|
94
|
-
~contractName=ev.contractName,
|
|
95
|
-
~eventName=ev.name,
|
|
96
|
-
)
|
|
97
|
-
switch config.ecosystem.name {
|
|
98
|
-
| Fuel =>
|
|
99
|
-
let fuelEv = ev->(Utils.magic: Internal.eventConfig => Internal.fuelEventConfig)
|
|
100
|
-
|
|
101
|
-
({
|
|
102
|
-
...fuelEv,
|
|
103
|
-
isWildcard,
|
|
104
|
-
handler,
|
|
105
|
-
contractRegister,
|
|
106
|
-
clientAddressFilter: ?EventConfigBuilder.buildAddressFilter([], ~isWildcard),
|
|
107
|
-
dependsOnAddresses: Internal.dependsOnAddresses(
|
|
108
|
-
~isWildcard,
|
|
109
|
-
~filterByAddresses=false,
|
|
110
|
-
),
|
|
111
|
-
} :> Internal.eventConfig)
|
|
112
|
-
| Evm =>
|
|
113
|
-
let evmEv = ev->(Utils.magic: Internal.eventConfig => Internal.evmEventConfig)
|
|
114
|
-
let eventFilters = HandlerRegister.getOnEventWhere(
|
|
115
|
-
~contractName=ev.contractName,
|
|
116
|
-
~eventName=ev.name,
|
|
117
|
-
)
|
|
118
|
-
let indexedParams = evmEv.paramsMetadata->Array.filter(p => p.indexed)
|
|
119
|
-
let {
|
|
120
|
-
getEventFiltersOrThrow,
|
|
121
|
-
filterByAddresses,
|
|
122
|
-
addressFilterParamGroups,
|
|
123
|
-
} = LogSelection.parseEventFiltersOrThrow(
|
|
124
|
-
~eventFilters,
|
|
125
|
-
~sighash=evmEv.sighash,
|
|
126
|
-
~params=indexedParams->Array.map(p => p.name),
|
|
127
|
-
~contractName=ev.contractName,
|
|
128
|
-
~probeChainId=chain.id,
|
|
129
|
-
~onEventBlockFilterSchema=config.ecosystem.onEventBlockFilterSchema,
|
|
130
|
-
~topic1=?indexedParams
|
|
131
|
-
->Array.get(0)
|
|
132
|
-
->Option.map(EventConfigBuilder.buildTopicGetter),
|
|
133
|
-
~topic2=?indexedParams
|
|
134
|
-
->Array.get(1)
|
|
135
|
-
->Option.map(EventConfigBuilder.buildTopicGetter),
|
|
136
|
-
~topic3=?indexedParams
|
|
137
|
-
->Array.get(2)
|
|
138
|
-
->Option.map(EventConfigBuilder.buildTopicGetter),
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
({
|
|
142
|
-
...evmEv,
|
|
143
|
-
isWildcard,
|
|
144
|
-
handler,
|
|
145
|
-
contractRegister,
|
|
146
|
-
getEventFiltersOrThrow,
|
|
147
|
-
filterByAddresses,
|
|
148
|
-
clientAddressFilter: ?EventConfigBuilder.buildAddressFilter(
|
|
149
|
-
addressFilterParamGroups,
|
|
150
|
-
~isWildcard,
|
|
151
|
-
),
|
|
152
|
-
dependsOnAddresses: Internal.dependsOnAddresses(~isWildcard, ~filterByAddresses),
|
|
153
|
-
} :> Internal.eventConfig)
|
|
154
|
-
| Svm =>
|
|
155
|
-
let svmEv =
|
|
156
|
-
ev->(Utils.magic: Internal.eventConfig => Internal.svmInstructionEventConfig)
|
|
157
|
-
({
|
|
158
|
-
...svmEv,
|
|
159
|
-
isWildcard,
|
|
160
|
-
handler,
|
|
161
|
-
contractRegister,
|
|
162
|
-
clientAddressFilter: ?EventConfigBuilder.buildAddressFilter(
|
|
163
|
-
[],
|
|
164
|
-
~isWildcard,
|
|
165
|
-
~srcAddressExpr="event.programId",
|
|
166
|
-
),
|
|
167
|
-
dependsOnAddresses: Internal.dependsOnAddresses(
|
|
168
|
-
~isWildcard,
|
|
169
|
-
~filterByAddresses=false,
|
|
170
|
-
),
|
|
171
|
-
} :> Internal.eventConfig)
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
)
|
|
175
|
-
{...contract, events: newEvents}
|
|
176
|
-
})
|
|
177
|
-
{...chain, contracts: newContracts}
|
|
178
|
-
})
|
|
179
|
-
{...config, chainMap: newChainMap}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// `Config` never reads `HandlerRegister`. The only way to get a config that
|
|
183
|
-
// reflects registration state is through the returned value here.
|
|
184
|
-
let registerAllHandlers = async (~config: Config.t) => {
|
|
185
|
-
HandlerRegister.startRegistration(~ecosystem=config.ecosystem)
|
|
75
|
+
// `Config` holds only event definitions; handler + per-chain `where`
|
|
76
|
+
// registration state is layered on separately as `onEventRegistration`s by
|
|
77
|
+
// `HandlerRegister.finishRegistration`. This loads the user handler files
|
|
78
|
+
// (populating the global `HandlerRegister` registry as a side effect) and
|
|
79
|
+
// returns the resulting per-chain registrations.
|
|
80
|
+
let registerAllHandlers = async (~config: Config.t): HandlerRegister.registrationsByChainId => {
|
|
81
|
+
HandlerRegister.startRegistration(~config)
|
|
186
82
|
|
|
187
83
|
// Auto-load all .js files from src/handlers directory
|
|
188
84
|
await autoLoadFromSrcHandlers(~handlers=config.handlers)
|
|
@@ -194,6 +90,5 @@ let registerAllHandlers = async (~config: Config.t) => {
|
|
|
194
90
|
})
|
|
195
91
|
->Promise.all
|
|
196
92
|
|
|
197
|
-
|
|
198
|
-
(applyRegistrations(~config), registrations)
|
|
93
|
+
HandlerRegister.finishRegistration(~config)
|
|
199
94
|
}
|
|
@@ -5,16 +5,11 @@ import * as Path from "path";
|
|
|
5
5
|
import * as Utils from "./Utils.res.mjs";
|
|
6
6
|
import * as Logging from "./Logging.res.mjs";
|
|
7
7
|
import * as Process from "process";
|
|
8
|
-
import * as ChainMap from "./ChainMap.res.mjs";
|
|
9
|
-
import * as Internal from "./Internal.res.mjs";
|
|
10
8
|
import * as Nodemodule from "node:module";
|
|
11
|
-
import * as LogSelection from "./LogSelection.res.mjs";
|
|
12
|
-
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
13
9
|
import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
14
10
|
import * as Stdlib_Promise from "@rescript/runtime/lib/es6/Stdlib_Promise.js";
|
|
15
11
|
import * as HandlerRegister from "./HandlerRegister.res.mjs";
|
|
16
12
|
import * as Promises from "node:fs/promises";
|
|
17
|
-
import * as EventConfigBuilder from "./EventConfigBuilder.res.mjs";
|
|
18
13
|
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
19
14
|
|
|
20
15
|
try {
|
|
@@ -61,98 +56,17 @@ async function autoLoadFromSrcHandlers(handlers) {
|
|
|
61
56
|
})));
|
|
62
57
|
}
|
|
63
58
|
|
|
64
|
-
function applyRegistrations(config) {
|
|
65
|
-
let newChainMap = ChainMap.map(config.chainMap, chain => {
|
|
66
|
-
let newContracts = chain.contracts.map(contract => {
|
|
67
|
-
let newEvents = contract.events.map(ev => {
|
|
68
|
-
let isWildcard = HandlerRegister.isWildcard(ev.contractName, ev.name);
|
|
69
|
-
let handler = HandlerRegister.getHandler(ev.contractName, ev.name);
|
|
70
|
-
let contractRegister = HandlerRegister.getContractRegister(ev.contractName, ev.name);
|
|
71
|
-
let match = config.ecosystem.name;
|
|
72
|
-
switch (match) {
|
|
73
|
-
case "evm" :
|
|
74
|
-
let eventFilters = HandlerRegister.getOnEventWhere(ev.contractName, ev.name);
|
|
75
|
-
let indexedParams = ev.paramsMetadata.filter(p => p.indexed);
|
|
76
|
-
let match$1 = LogSelection.parseEventFiltersOrThrow(eventFilters, ev.sighash, indexedParams.map(p => p.name), ev.contractName, chain.id, config.ecosystem.onEventBlockFilterSchema, Stdlib_Option.map(indexedParams[0], EventConfigBuilder.buildTopicGetter), Stdlib_Option.map(indexedParams[1], EventConfigBuilder.buildTopicGetter), Stdlib_Option.map(indexedParams[2], EventConfigBuilder.buildTopicGetter));
|
|
77
|
-
let filterByAddresses = match$1.filterByAddresses;
|
|
78
|
-
let newrecord = {...ev};
|
|
79
|
-
newrecord.getEventFiltersOrThrow = match$1.getEventFiltersOrThrow;
|
|
80
|
-
newrecord.contractRegister = contractRegister;
|
|
81
|
-
newrecord.handler = handler;
|
|
82
|
-
newrecord.clientAddressFilter = EventConfigBuilder.buildAddressFilter(match$1.addressFilterParamGroups, isWildcard, undefined);
|
|
83
|
-
newrecord.dependsOnAddresses = Internal.dependsOnAddresses(isWildcard, filterByAddresses);
|
|
84
|
-
newrecord.filterByAddresses = filterByAddresses;
|
|
85
|
-
newrecord.isWildcard = isWildcard;
|
|
86
|
-
return newrecord;
|
|
87
|
-
case "fuel" :
|
|
88
|
-
let newrecord$1 = {...ev};
|
|
89
|
-
newrecord$1.contractRegister = contractRegister;
|
|
90
|
-
newrecord$1.handler = handler;
|
|
91
|
-
newrecord$1.clientAddressFilter = EventConfigBuilder.buildAddressFilter([], isWildcard, undefined);
|
|
92
|
-
newrecord$1.dependsOnAddresses = Internal.dependsOnAddresses(isWildcard, false);
|
|
93
|
-
newrecord$1.isWildcard = isWildcard;
|
|
94
|
-
return newrecord$1;
|
|
95
|
-
case "svm" :
|
|
96
|
-
let newrecord$2 = {...ev};
|
|
97
|
-
newrecord$2.contractRegister = contractRegister;
|
|
98
|
-
newrecord$2.handler = handler;
|
|
99
|
-
newrecord$2.clientAddressFilter = EventConfigBuilder.buildAddressFilter([], isWildcard, "event.programId");
|
|
100
|
-
newrecord$2.dependsOnAddresses = Internal.dependsOnAddresses(isWildcard, false);
|
|
101
|
-
newrecord$2.isWildcard = isWildcard;
|
|
102
|
-
return newrecord$2;
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return {
|
|
106
|
-
name: contract.name,
|
|
107
|
-
abi: contract.abi,
|
|
108
|
-
addresses: contract.addresses,
|
|
109
|
-
events: newEvents,
|
|
110
|
-
startBlock: contract.startBlock
|
|
111
|
-
};
|
|
112
|
-
});
|
|
113
|
-
let newrecord = {...chain};
|
|
114
|
-
newrecord.contracts = newContracts;
|
|
115
|
-
return newrecord;
|
|
116
|
-
});
|
|
117
|
-
return {
|
|
118
|
-
name: config.name,
|
|
119
|
-
description: config.description,
|
|
120
|
-
handlers: config.handlers,
|
|
121
|
-
contractHandlers: config.contractHandlers,
|
|
122
|
-
shouldRollbackOnReorg: config.shouldRollbackOnReorg,
|
|
123
|
-
shouldSaveFullHistory: config.shouldSaveFullHistory,
|
|
124
|
-
storage: config.storage,
|
|
125
|
-
chainMap: newChainMap,
|
|
126
|
-
defaultChain: config.defaultChain,
|
|
127
|
-
ecosystem: config.ecosystem,
|
|
128
|
-
enableRawEvents: config.enableRawEvents,
|
|
129
|
-
maxAddrInPartition: config.maxAddrInPartition,
|
|
130
|
-
batchSize: config.batchSize,
|
|
131
|
-
lowercaseAddresses: config.lowercaseAddresses,
|
|
132
|
-
isDev: config.isDev,
|
|
133
|
-
userEntitiesByName: config.userEntitiesByName,
|
|
134
|
-
userEntities: config.userEntities,
|
|
135
|
-
allEntities: config.allEntities,
|
|
136
|
-
allEnums: config.allEnums
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
|
|
140
59
|
async function registerAllHandlers(config) {
|
|
141
|
-
HandlerRegister.startRegistration(config
|
|
60
|
+
HandlerRegister.startRegistration(config);
|
|
142
61
|
await autoLoadFromSrcHandlers(config.handlers);
|
|
143
62
|
await Promise.all(config.contractHandlers.map(param => registerContractHandlers(param.name, param.handler)));
|
|
144
|
-
|
|
145
|
-
return [
|
|
146
|
-
applyRegistrations(config),
|
|
147
|
-
registrations
|
|
148
|
-
];
|
|
63
|
+
return HandlerRegister.finishRegistration(config);
|
|
149
64
|
}
|
|
150
65
|
|
|
151
66
|
export {
|
|
152
67
|
toImportUrl,
|
|
153
68
|
registerContractHandlers,
|
|
154
69
|
autoLoadFromSrcHandlers,
|
|
155
|
-
applyRegistrations,
|
|
156
70
|
registerAllHandlers,
|
|
157
71
|
}
|
|
158
72
|
/* Not a pure module */
|