envio 3.0.0-alpha.21 → 3.0.0-alpha.23

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 (220) hide show
  1. package/README.md +3 -3
  2. package/bin.mjs +2 -48
  3. package/evm.schema.json +67 -0
  4. package/fuel.schema.json +67 -0
  5. package/index.d.ts +822 -38
  6. package/index.js +5 -3
  7. package/package.json +10 -8
  8. package/rescript.json +5 -9
  9. package/src/Address.res +4 -5
  10. package/src/Address.res.mjs +9 -12
  11. package/src/Api.res +15 -0
  12. package/src/Api.res.mjs +20 -0
  13. package/src/Batch.res +32 -34
  14. package/src/Batch.res.mjs +172 -187
  15. package/src/Bin.res +89 -0
  16. package/src/Bin.res.mjs +97 -0
  17. package/src/ChainFetcher.res +33 -57
  18. package/src/ChainFetcher.res.mjs +197 -227
  19. package/src/ChainManager.res +6 -14
  20. package/src/ChainManager.res.mjs +74 -85
  21. package/src/ChainMap.res +14 -16
  22. package/src/ChainMap.res.mjs +38 -38
  23. package/src/Config.res +193 -135
  24. package/src/Config.res.mjs +566 -592
  25. package/src/Core.res +182 -0
  26. package/src/Core.res.mjs +207 -0
  27. package/src/Ecosystem.res +25 -4
  28. package/src/Ecosystem.res.mjs +12 -13
  29. package/src/Env.res +20 -13
  30. package/src/Env.res.mjs +124 -113
  31. package/src/EnvSafe.res +269 -0
  32. package/src/EnvSafe.res.mjs +296 -0
  33. package/src/EnvSafe.resi +18 -0
  34. package/src/Envio.res +37 -26
  35. package/src/Envio.res.mjs +59 -60
  36. package/src/ErrorHandling.res +2 -2
  37. package/src/ErrorHandling.res.mjs +15 -15
  38. package/src/EventConfigBuilder.res +219 -81
  39. package/src/EventConfigBuilder.res.mjs +259 -202
  40. package/src/EventProcessing.res +27 -38
  41. package/src/EventProcessing.res.mjs +165 -183
  42. package/src/EventUtils.res +11 -11
  43. package/src/EventUtils.res.mjs +21 -22
  44. package/src/EvmTypes.res +0 -1
  45. package/src/EvmTypes.res.mjs +5 -5
  46. package/src/FetchState.res +360 -256
  47. package/src/FetchState.res.mjs +958 -914
  48. package/src/GlobalState.res +365 -351
  49. package/src/GlobalState.res.mjs +958 -992
  50. package/src/GlobalStateManager.res +1 -2
  51. package/src/GlobalStateManager.res.mjs +36 -44
  52. package/src/HandlerLoader.res +107 -23
  53. package/src/HandlerLoader.res.mjs +128 -38
  54. package/src/HandlerRegister.res +127 -103
  55. package/src/HandlerRegister.res.mjs +164 -164
  56. package/src/HandlerRegister.resi +12 -4
  57. package/src/Hasura.res +35 -22
  58. package/src/Hasura.res.mjs +158 -167
  59. package/src/InMemoryStore.res +20 -27
  60. package/src/InMemoryStore.res.mjs +64 -80
  61. package/src/InMemoryTable.res +34 -39
  62. package/src/InMemoryTable.res.mjs +165 -170
  63. package/src/Internal.res +52 -33
  64. package/src/Internal.res.mjs +84 -81
  65. package/src/LazyLoader.res.mjs +55 -61
  66. package/src/LoadLayer.res +77 -78
  67. package/src/LoadLayer.res.mjs +160 -189
  68. package/src/LoadManager.res +16 -21
  69. package/src/LoadManager.res.mjs +79 -84
  70. package/src/LogSelection.res +236 -68
  71. package/src/LogSelection.res.mjs +211 -141
  72. package/src/Logging.res +13 -9
  73. package/src/Logging.res.mjs +130 -143
  74. package/src/Main.res +430 -51
  75. package/src/Main.res.mjs +530 -271
  76. package/src/Persistence.res +80 -84
  77. package/src/Persistence.res.mjs +131 -132
  78. package/src/PgStorage.res +294 -167
  79. package/src/PgStorage.res.mjs +799 -817
  80. package/src/Prometheus.res +50 -58
  81. package/src/Prometheus.res.mjs +345 -373
  82. package/src/ReorgDetection.res +22 -24
  83. package/src/ReorgDetection.res.mjs +100 -106
  84. package/src/SafeCheckpointTracking.res +7 -7
  85. package/src/SafeCheckpointTracking.res.mjs +40 -43
  86. package/src/SimulateItems.res +41 -49
  87. package/src/SimulateItems.res.mjs +257 -272
  88. package/src/Sink.res +2 -2
  89. package/src/Sink.res.mjs +22 -26
  90. package/src/TableIndices.res +1 -2
  91. package/src/TableIndices.res.mjs +42 -48
  92. package/src/TestIndexer.res +196 -189
  93. package/src/TestIndexer.res.mjs +536 -536
  94. package/src/TestIndexerProxyStorage.res +16 -16
  95. package/src/TestIndexerProxyStorage.res.mjs +99 -122
  96. package/src/TestIndexerWorker.res +4 -0
  97. package/src/TestIndexerWorker.res.mjs +7 -0
  98. package/src/Throttler.res +3 -3
  99. package/src/Throttler.res.mjs +23 -24
  100. package/src/Time.res +1 -1
  101. package/src/Time.res.mjs +18 -21
  102. package/src/TopicFilter.res +3 -3
  103. package/src/TopicFilter.res.mjs +29 -30
  104. package/src/UserContext.res +93 -54
  105. package/src/UserContext.res.mjs +197 -182
  106. package/src/Utils.res +141 -86
  107. package/src/Utils.res.mjs +334 -295
  108. package/src/bindings/BigDecimal.res +0 -2
  109. package/src/bindings/BigDecimal.res.mjs +19 -23
  110. package/src/bindings/ClickHouse.res +28 -27
  111. package/src/bindings/ClickHouse.res.mjs +243 -240
  112. package/src/bindings/DateFns.res +11 -11
  113. package/src/bindings/DateFns.res.mjs +7 -7
  114. package/src/bindings/EventSource.res.mjs +2 -2
  115. package/src/bindings/Express.res +2 -5
  116. package/src/bindings/Hrtime.res +2 -2
  117. package/src/bindings/Hrtime.res.mjs +30 -32
  118. package/src/bindings/Lodash.res.mjs +1 -1
  119. package/src/bindings/NodeJs.res +14 -9
  120. package/src/bindings/NodeJs.res.mjs +20 -20
  121. package/src/bindings/Pino.res +8 -10
  122. package/src/bindings/Pino.res.mjs +40 -43
  123. package/src/bindings/Postgres.res +7 -5
  124. package/src/bindings/Postgres.res.mjs +9 -9
  125. package/src/bindings/PromClient.res +17 -2
  126. package/src/bindings/PromClient.res.mjs +30 -7
  127. package/src/bindings/SDSL.res.mjs +2 -2
  128. package/src/bindings/Viem.res +4 -4
  129. package/src/bindings/Viem.res.mjs +20 -22
  130. package/src/bindings/Vitest.res +1 -1
  131. package/src/bindings/Vitest.res.mjs +2 -2
  132. package/src/bindings/WebSocket.res +1 -1
  133. package/src/db/EntityHistory.res +9 -3
  134. package/src/db/EntityHistory.res.mjs +84 -59
  135. package/src/db/InternalTable.res +62 -60
  136. package/src/db/InternalTable.res.mjs +271 -203
  137. package/src/db/Schema.res +1 -2
  138. package/src/db/Schema.res.mjs +28 -32
  139. package/src/db/Table.res +28 -27
  140. package/src/db/Table.res.mjs +276 -292
  141. package/src/sources/EventRouter.res +21 -16
  142. package/src/sources/EventRouter.res.mjs +55 -57
  143. package/src/sources/Evm.res +17 -1
  144. package/src/sources/Evm.res.mjs +16 -8
  145. package/src/sources/EvmChain.res +15 -17
  146. package/src/sources/EvmChain.res.mjs +40 -42
  147. package/src/sources/Fuel.res +14 -1
  148. package/src/sources/Fuel.res.mjs +16 -8
  149. package/src/sources/FuelSDK.res +1 -1
  150. package/src/sources/FuelSDK.res.mjs +6 -8
  151. package/src/sources/HyperFuel.res +8 -10
  152. package/src/sources/HyperFuel.res.mjs +113 -123
  153. package/src/sources/HyperFuelClient.res.mjs +6 -7
  154. package/src/sources/HyperFuelSource.res +19 -20
  155. package/src/sources/HyperFuelSource.res.mjs +339 -356
  156. package/src/sources/HyperSync.res +11 -13
  157. package/src/sources/HyperSync.res.mjs +206 -220
  158. package/src/sources/HyperSyncClient.res +5 -7
  159. package/src/sources/HyperSyncClient.res.mjs +70 -75
  160. package/src/sources/HyperSyncHeightStream.res +8 -9
  161. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  162. package/src/sources/HyperSyncJsonApi.res +18 -15
  163. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  164. package/src/sources/HyperSyncSource.res +17 -21
  165. package/src/sources/HyperSyncSource.res.mjs +268 -290
  166. package/src/sources/Rpc.res +5 -5
  167. package/src/sources/Rpc.res.mjs +168 -192
  168. package/src/sources/RpcSource.res +166 -167
  169. package/src/sources/RpcSource.res.mjs +972 -1046
  170. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  171. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  172. package/src/sources/SimulateSource.res +1 -1
  173. package/src/sources/SimulateSource.res.mjs +35 -38
  174. package/src/sources/Source.res +1 -1
  175. package/src/sources/Source.res.mjs +3 -3
  176. package/src/sources/SourceManager.res +39 -20
  177. package/src/sources/SourceManager.res.mjs +340 -371
  178. package/src/sources/SourceManager.resi +2 -1
  179. package/src/sources/Svm.res +12 -5
  180. package/src/sources/Svm.res.mjs +44 -41
  181. package/src/tui/Tui.res +23 -12
  182. package/src/tui/Tui.res.mjs +292 -290
  183. package/src/tui/bindings/Ink.res +2 -4
  184. package/src/tui/bindings/Ink.res.mjs +35 -41
  185. package/src/tui/components/BufferedProgressBar.res +7 -7
  186. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  187. package/src/tui/components/CustomHooks.res +1 -2
  188. package/src/tui/components/CustomHooks.res.mjs +102 -122
  189. package/src/tui/components/Messages.res +1 -2
  190. package/src/tui/components/Messages.res.mjs +38 -42
  191. package/src/tui/components/SyncETA.res +10 -11
  192. package/src/tui/components/SyncETA.res.mjs +178 -196
  193. package/src/tui/components/TuiData.res +1 -1
  194. package/src/tui/components/TuiData.res.mjs +7 -6
  195. package/src/vendored/Rest.res +52 -66
  196. package/src/vendored/Rest.res.mjs +324 -364
  197. package/svm.schema.json +67 -0
  198. package/src/Address.gen.ts +0 -8
  199. package/src/Config.gen.ts +0 -19
  200. package/src/Envio.gen.ts +0 -55
  201. package/src/EvmTypes.gen.ts +0 -6
  202. package/src/InMemoryStore.gen.ts +0 -6
  203. package/src/Internal.gen.ts +0 -64
  204. package/src/PgStorage.gen.ts +0 -10
  205. package/src/PgStorage.res.d.mts +0 -5
  206. package/src/Types.ts +0 -56
  207. package/src/bindings/BigDecimal.gen.ts +0 -14
  208. package/src/bindings/BigDecimal.res.d.mts +0 -5
  209. package/src/bindings/BigInt.gen.ts +0 -10
  210. package/src/bindings/BigInt.res +0 -70
  211. package/src/bindings/BigInt.res.d.mts +0 -5
  212. package/src/bindings/BigInt.res.mjs +0 -154
  213. package/src/bindings/Ethers.res.d.mts +0 -5
  214. package/src/bindings/Pino.gen.ts +0 -17
  215. package/src/bindings/Postgres.gen.ts +0 -8
  216. package/src/bindings/Postgres.res.d.mts +0 -5
  217. package/src/bindings/Promise.res +0 -67
  218. package/src/bindings/Promise.res.mjs +0 -26
  219. package/src/db/InternalTable.gen.ts +0 -36
  220. package/src/sources/HyperSyncClient.gen.ts +0 -19
package/src/Main.res.mjs CHANGED
@@ -2,18 +2,18 @@
2
2
 
3
3
  import * as Env from "./Env.res.mjs";
4
4
  import * as Tui from "./tui/Tui.res.mjs";
5
- import * as Caml from "rescript/lib/es6/caml.js";
5
+ import * as Core from "./Core.res.mjs";
6
+ import * as Envio from "./Envio.res.mjs";
6
7
  import * as Utils from "./Utils.res.mjs";
7
- import * as Js_dict from "rescript/lib/es6/js_dict.js";
8
+ import * as Config from "./Config.res.mjs";
8
9
  import * as Logging from "./Logging.res.mjs";
9
10
  import Express from "express";
10
11
  import * as Process from "process";
11
12
  import * as ChainMap from "./ChainMap.res.mjs";
12
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
13
+ import * as PgStorage from "./PgStorage.res.mjs";
13
14
  import * as FetchState from "./FetchState.res.mjs";
14
15
  import * as Prometheus from "./Prometheus.res.mjs";
15
- import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
16
- import * as Caml_option from "rescript/lib/es6/caml_option.js";
16
+ import * as Belt_Option from "@rescript/runtime/lib/es6/Belt_Option.js";
17
17
  import * as GlobalState from "./GlobalState.res.mjs";
18
18
  import * as Persistence from "./Persistence.res.mjs";
19
19
  import * as PromClient from "prom-client";
@@ -21,156 +21,392 @@ import Yargs from "yargs/yargs";
21
21
  import * as ChainFetcher from "./ChainFetcher.res.mjs";
22
22
  import * as ChainManager from "./ChainManager.res.mjs";
23
23
  import * as HandlerLoader from "./HandlerLoader.res.mjs";
24
+ import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
24
25
  import * as SourceManager from "./sources/SourceManager.res.mjs";
26
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
25
27
  import * as Helpers from "yargs/helpers";
28
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
29
+ import * as HandlerRegister from "./HandlerRegister.res.mjs";
30
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
26
31
  import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
27
32
  import * as GlobalStateManager from "./GlobalStateManager.res.mjs";
33
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
28
34
 
29
- var chainDataSchema = S$RescriptSchema.schema(function (s) {
30
- return {
31
- chainId: s.m(S$RescriptSchema.$$float),
32
- poweredByHyperSync: s.m(S$RescriptSchema.bool),
33
- firstEventBlockNumber: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int)),
34
- latestProcessedBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int)),
35
- timestampCaughtUpToHeadOrEndblock: s.m(S$RescriptSchema.option(S$RescriptSchema.datetime(S$RescriptSchema.string, undefined))),
36
- numEventsProcessed: s.m(S$RescriptSchema.$$float),
37
- latestFetchedBlockNumber: s.m(S$RescriptSchema.$$int),
38
- currentBlockHeight: s.m(S$RescriptSchema.$$int),
39
- numBatchesFetched: s.m(S$RescriptSchema.$$int),
40
- startBlock: s.m(S$RescriptSchema.$$int),
41
- endBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int)),
42
- numAddresses: s.m(S$RescriptSchema.$$int)
43
- };
44
- });
35
+ let chainDataSchema = S$RescriptSchema.schema(s => ({
36
+ chainId: s.m(S$RescriptSchema.float),
37
+ poweredByHyperSync: s.m(S$RescriptSchema.bool),
38
+ firstEventBlockNumber: s.m(S$RescriptSchema.option(S$RescriptSchema.int)),
39
+ latestProcessedBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.int)),
40
+ timestampCaughtUpToHeadOrEndblock: s.m(S$RescriptSchema.option(S$RescriptSchema.datetime(S$RescriptSchema.string, undefined))),
41
+ numEventsProcessed: s.m(S$RescriptSchema.float),
42
+ latestFetchedBlockNumber: s.m(S$RescriptSchema.int),
43
+ currentBlockHeight: s.m(S$RescriptSchema.int),
44
+ numBatchesFetched: s.m(S$RescriptSchema.int),
45
+ startBlock: s.m(S$RescriptSchema.int),
46
+ endBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.int)),
47
+ numAddresses: s.m(S$RescriptSchema.int)
48
+ }));
49
+
50
+ let stateSchema = S$RescriptSchema.union([
51
+ S$RescriptSchema.literal({
52
+ status: "disabled"
53
+ }),
54
+ S$RescriptSchema.literal({
55
+ status: "initializing"
56
+ }),
57
+ S$RescriptSchema.schema(s => ({
58
+ status: "active",
59
+ envioVersion: s.m(S$RescriptSchema.string),
60
+ chains: s.m(S$RescriptSchema.array(chainDataSchema)),
61
+ indexerStartTime: s.m(S$RescriptSchema.datetime(S$RescriptSchema.string, undefined)),
62
+ isPreRegisteringDynamicContracts: false,
63
+ isUnorderedMultichainMode: s.m(S$RescriptSchema.bool),
64
+ rollbackOnReorg: s.m(S$RescriptSchema.bool)
65
+ }))
66
+ ]);
45
67
 
46
- var stateSchema = S$RescriptSchema.union([
47
- S$RescriptSchema.literal({
48
- status: "disabled"
49
- }),
50
- S$RescriptSchema.literal({
51
- status: "initializing"
52
- }),
53
- S$RescriptSchema.schema(function (s) {
54
- return {
55
- status: "active",
56
- envioVersion: s.m(S$RescriptSchema.string),
57
- chains: s.m(S$RescriptSchema.array(chainDataSchema)),
58
- indexerStartTime: s.m(S$RescriptSchema.datetime(S$RescriptSchema.string, undefined)),
59
- isPreRegisteringDynamicContracts: false,
60
- isUnorderedMultichainMode: s.m(S$RescriptSchema.bool),
61
- rollbackOnReorg: s.m(S$RescriptSchema.bool)
62
- };
63
- })
64
- ]);
68
+ let blockRangeSchema = S$RescriptSchema.strict(S$RescriptSchema.object(s => ({
69
+ _gte: s.f("_gte", S$RescriptSchema.option(S$RescriptSchema.int)),
70
+ _lte: s.f("_lte", S$RescriptSchema.option(S$RescriptSchema.int)),
71
+ _every: s.f("_every", S$RescriptSchema.Option.getOr(S$RescriptSchema.option(S$RescriptSchema.intMin(S$RescriptSchema.int, 1, undefined)), 1))
72
+ })));
73
+
74
+ let defaultBlockRange = {
75
+ _gte: undefined,
76
+ _lte: undefined,
77
+ _every: 1
78
+ };
65
79
 
66
- var globalGsManagerRef = {
80
+ let globalGsManagerRef = {
67
81
  contents: undefined
68
82
  };
69
83
 
70
- function getGlobalIndexer(config) {
71
- var indexer = Object.create(null);
72
- Object.defineProperty(Object.defineProperty(indexer, "name", {
73
- enumerable: true,
74
- value: config.name
75
- }), "description", {
84
+ let globalPersistenceRef = {
85
+ contents: undefined
86
+ };
87
+
88
+ function getInitialChainState(chainId) {
89
+ let persistence = globalPersistenceRef.contents;
90
+ if (persistence === undefined) {
91
+ return;
92
+ }
93
+ let initialState = persistence.storageStatus;
94
+ if (typeof initialState !== "object" || initialState.TAG === "Initializing") {
95
+ return;
96
+ } else {
97
+ return initialState._0.chains.find(c => c.id === chainId);
98
+ }
99
+ }
100
+
101
+ function buildChainsObject(config) {
102
+ let chainIds = [];
103
+ let chains = Object.create(null);
104
+ ChainMap.values(config.chainMap).forEach(chainConfig => {
105
+ let chainIdStr = chainConfig.id.toString();
106
+ chainIds.push(chainConfig.id);
107
+ let chainObj = Object.create(null);
108
+ Object.defineProperty(Object.defineProperty(Object.defineProperty(Object.defineProperty(Object.defineProperty(chainObj, "id", {
109
+ enumerable: true,
110
+ value: chainConfig.id
111
+ }), "startBlock", {
112
+ enumerable: true,
113
+ get: () => {
114
+ let chainState = getInitialChainState(chainConfig.id);
115
+ if (chainState !== undefined) {
116
+ return chainState.startBlock;
117
+ } else {
118
+ return chainConfig.startBlock;
119
+ }
120
+ }
121
+ }), "endBlock", {
122
+ enumerable: true,
123
+ get: () => {
124
+ let match = getInitialChainState(chainConfig.id);
125
+ if (match === undefined) {
126
+ return chainConfig.endBlock;
127
+ }
128
+ let eb = match.endBlock;
129
+ if (eb !== undefined) {
130
+ return eb;
131
+ } else {
132
+ return chainConfig.endBlock;
133
+ }
134
+ }
135
+ }), "name", {
136
+ enumerable: true,
137
+ value: chainConfig.name
138
+ }), "isLive", {
139
+ enumerable: true,
140
+ get: () => {
141
+ let gsManager = globalGsManagerRef.contents;
142
+ if (gsManager !== undefined) {
143
+ let state = GlobalStateManager.getState(Primitive_option.valFromOption(gsManager));
144
+ let chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
145
+ return ChainFetcher.isReady(ChainMap.get(state.chainManager.chainFetchers, chain));
146
+ }
147
+ let chainState = getInitialChainState(chainConfig.id);
148
+ if (chainState !== undefined) {
149
+ return Stdlib_Option.isSome(chainState.timestampCaughtUpToHeadOrEndblock);
150
+ } else {
151
+ return false;
152
+ }
153
+ }
154
+ });
155
+ chainConfig.contracts.forEach(contract => {
156
+ let contractObj = Object.create(null);
157
+ Object.defineProperty(Object.defineProperty(Object.defineProperty(contractObj, "name", {
76
158
  enumerable: true,
77
- value: config.description
78
- });
79
- var chainIds = [];
80
- var chains = Object.create(null);
81
- Belt_Array.forEach(ChainMap.values(config.chainMap), (function (chainConfig) {
82
- var chainIdStr = String(chainConfig.id);
83
- chainIds.push(chainConfig.id);
84
- var chainObj = Object.create(null);
85
- Object.defineProperty(Object.defineProperty(Object.defineProperty(Object.defineProperty(Object.defineProperty(chainObj, "id", {
86
- enumerable: true,
87
- value: chainConfig.id
88
- }), "startBlock", {
89
- enumerable: true,
90
- value: chainConfig.startBlock
91
- }), "endBlock", {
92
- enumerable: true,
93
- value: chainConfig.endBlock
94
- }), "name", {
95
- enumerable: true,
96
- value: chainConfig.name
97
- }), "isLive", {
98
- enumerable: true,
99
- get: (function () {
100
- var gsManager = globalGsManagerRef.contents;
101
- if (gsManager === undefined) {
102
- return false;
103
- }
104
- var state = GlobalStateManager.getState(Caml_option.valFromOption(gsManager));
105
- var chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
106
- var chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
107
- return ChainFetcher.isReady(chainFetcher);
108
- })
109
- });
110
- Belt_Array.forEach(chainConfig.contracts, (function (contract) {
111
- var contractObj = Object.create(null);
112
- Object.defineProperty(Object.defineProperty(Object.defineProperty(contractObj, "name", {
113
- enumerable: true,
114
- value: contract.name
115
- }), "abi", {
116
- enumerable: true,
117
- value: contract.abi
118
- }), "addresses", {
119
- enumerable: true,
120
- get: (function () {
121
- var gsManager = globalGsManagerRef.contents;
122
- if (gsManager === undefined) {
123
- return contract.addresses;
124
- }
125
- var state = GlobalStateManager.getState(Caml_option.valFromOption(gsManager));
126
- var chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
127
- var chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
128
- var indexingContracts = chainFetcher.fetchState.indexingContracts;
129
- var addresses = [];
130
- var values = Js_dict.values(indexingContracts);
131
- for(var idx = 0 ,idx_finish = values.length; idx < idx_finish; ++idx){
132
- var indexingContract = values[idx];
133
- if (indexingContract.contractName === contract.name) {
134
- addresses.push(indexingContract.address);
135
- }
136
-
137
- }
138
- return addresses;
139
- })
140
- });
141
- Object.defineProperty(chainObj, contract.name, {
142
- enumerable: true,
143
- value: contractObj
144
- });
145
- }));
146
- Object.defineProperty(chains, chainIdStr, {
147
- enumerable: true,
148
- value: chainObj
149
- });
150
- if (chainConfig.name !== chainIdStr) {
151
- Object.defineProperty(chains, chainConfig.name, {
152
- enumerable: false,
153
- value: chainObj
154
- });
155
- return ;
156
- }
157
-
158
- }));
159
- Object.defineProperty(indexer, "chainIds", {
159
+ value: contract.name
160
+ }), "abi", {
161
+ enumerable: true,
162
+ value: contract.abi
163
+ }), "addresses", {
160
164
  enumerable: true,
161
- value: chainIds
165
+ get: () => {
166
+ let gsManager = globalGsManagerRef.contents;
167
+ if (gsManager !== undefined) {
168
+ let state = GlobalStateManager.getState(Primitive_option.valFromOption(gsManager));
169
+ let chain = ChainMap.Chain.makeUnsafe(chainConfig.id);
170
+ let chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
171
+ let indexingAddresses = chainFetcher.fetchState.indexingAddresses;
172
+ let addresses = [];
173
+ let values = Object.values(indexingAddresses);
174
+ for (let idx = 0, idx_finish = values.length; idx < idx_finish; ++idx) {
175
+ let indexingContract = values[idx];
176
+ if (indexingContract.contractName === contract.name) {
177
+ addresses.push(indexingContract.address);
178
+ }
179
+ }
180
+ return addresses;
181
+ }
182
+ let chainState = getInitialChainState(chainConfig.id);
183
+ if (chainState === undefined) {
184
+ return contract.addresses;
185
+ }
186
+ let addresses$1 = contract.addresses.slice();
187
+ chainState.indexingAddresses.forEach(dc => {
188
+ if (dc.contractName === contract.name) {
189
+ addresses$1.push(dc.address);
190
+ return;
191
+ }
192
+ });
193
+ return addresses$1;
194
+ }
162
195
  });
163
- Object.defineProperty(indexer, "chains", {
196
+ Object.defineProperty(chainObj, contract.name, {
164
197
  enumerable: true,
165
- value: chains
198
+ value: contractObj
199
+ });
200
+ });
201
+ Object.defineProperty(chains, chainIdStr, {
202
+ enumerable: true,
203
+ value: chainObj
204
+ });
205
+ if (chainConfig.name !== chainIdStr) {
206
+ Object.defineProperty(chains, chainConfig.name, {
207
+ enumerable: false,
208
+ value: chainObj
166
209
  });
167
- return indexer;
210
+ return;
211
+ }
212
+ });
213
+ return [
214
+ chains,
215
+ chainIds
216
+ ];
217
+ }
218
+
219
+ function getGlobalIndexer() {
220
+ let parseIdentityConfig = identityConfig => {
221
+ let match;
222
+ if (typeof identityConfig.contract === "string") {
223
+ match = [
224
+ identityConfig.contract,
225
+ identityConfig.event
226
+ ];
227
+ } else {
228
+ let event = identityConfig.event;
229
+ match = [
230
+ event.contract,
231
+ event._0
232
+ ];
233
+ }
234
+ let wildcard = identityConfig.wildcard;
235
+ let where = identityConfig.where;
236
+ let eventOptions = wildcard !== undefined || where !== undefined ? ({
237
+ wildcard: wildcard,
238
+ where: where
239
+ }) : undefined;
240
+ return [
241
+ match[0],
242
+ match[1],
243
+ eventOptions
244
+ ];
245
+ };
246
+ let onEventFn = (identityConfig, handler) => {
247
+ HandlerRegister.throwIfFinishedRegistration("onEvent");
248
+ let match = parseIdentityConfig(identityConfig);
249
+ HandlerRegister.setHandler(match[0], match[1], handler, match[2], undefined);
250
+ };
251
+ let contractRegisterFn = (identityConfig, handler) => {
252
+ HandlerRegister.throwIfFinishedRegistration("contractRegister");
253
+ let match = parseIdentityConfig(identityConfig);
254
+ HandlerRegister.setContractRegister(match[0], match[1], handler, match[2], undefined);
255
+ };
256
+ let extractRange = (filter, name, ecosystem) => {
257
+ try {
258
+ let inner = S$RescriptSchema.parseOrThrow(filter, ecosystem.onBlockFilterSchema);
259
+ if (inner !== undefined) {
260
+ return S$RescriptSchema.parseOrThrow(Primitive_option.valFromOption(inner), blockRangeSchema);
261
+ } else {
262
+ return defaultBlockRange;
263
+ }
264
+ } catch (raw_exn) {
265
+ let exn = Primitive_exceptions.internalToException(raw_exn);
266
+ if (exn.RE_EXN_ID === S$RescriptSchema.Raised) {
267
+ return Stdlib_JsError.throwWithMessage(`\`indexer.` + ecosystem.onBlockMethodName + `("` + name + `")\` \`where\` returned an invalid filter: ` + Utils.prettifyExn(exn._1));
268
+ }
269
+ throw exn;
270
+ }
271
+ };
272
+ let onBlockFn = (rawOptions, handler) => {
273
+ HandlerRegister.throwIfFinishedRegistration("onBlock");
274
+ let config = Config.loadWithoutRegistrations();
275
+ let ecosystem = config.ecosystem;
276
+ let match = buildChainsObject(config);
277
+ let chains = match[0];
278
+ let name = rawOptions.name;
279
+ let logger = Logging.createChild({
280
+ onBlock: name
281
+ });
282
+ let w = rawOptions.where;
283
+ let where = w === undefined || w === null ? undefined : (
284
+ typeof w === "function" ? rawOptions.where : Stdlib_JsError.throwWithMessage(`\`indexer.` + ecosystem.onBlockMethodName + `("` + name + `")\` expected \`where\` to be a function or omitted, but got ` + typeof w + `.`)
285
+ );
286
+ let matchedAny = {
287
+ contents: false
288
+ };
289
+ ChainMap.values(config.chainMap).forEach(chainConfig => {
290
+ let chainId = chainConfig.id;
291
+ let chainObj = chains[chainId.toString()];
292
+ let result = where !== undefined ? where({
293
+ chain: chainObj
294
+ }) : true;
295
+ let match = result === true ? [
296
+ true,
297
+ defaultBlockRange
298
+ ] : (
299
+ result === false ? [
300
+ false,
301
+ defaultBlockRange
302
+ ] : (
303
+ typeof result === "object" && !Array.isArray(result) && result !== null ? [
304
+ true,
305
+ extractRange(result, name, ecosystem)
306
+ ] : Stdlib_JsError.throwWithMessage(`\`indexer.` + ecosystem.onBlockMethodName + `("` + name + `")\` \`where\` predicate returned an invalid value of type ` + typeof result + `. Expected boolean or a filter object.`)
307
+ )
308
+ );
309
+ if (!match[0]) {
310
+ return;
311
+ }
312
+ let range = match[1];
313
+ matchedAny.contents = true;
314
+ HandlerRegister.registerOnBlock(name, chainId, range._every, range._gte, range._lte, handler);
315
+ });
316
+ if (!matchedAny.contents) {
317
+ return Logging.childWarn(logger, `\`indexer.` + ecosystem.onBlockMethodName + `\` matched 0 chains. Check the \`where\` predicate.`);
318
+ }
319
+ };
320
+ let keysMemo = {
321
+ contents: undefined
322
+ };
323
+ let getKeys = () => {
324
+ let k = keysMemo.contents;
325
+ if (k !== undefined) {
326
+ return k;
327
+ }
328
+ let match = Config.loadWithoutRegistrations().ecosystem.name;
329
+ let keys;
330
+ let exit = 0;
331
+ switch (match) {
332
+ case "evm" :
333
+ case "fuel" :
334
+ exit = 1;
335
+ break;
336
+ case "svm" :
337
+ keys = [
338
+ "name",
339
+ "description",
340
+ "chainIds",
341
+ "chains",
342
+ "onSlot"
343
+ ];
344
+ break;
345
+ }
346
+ if (exit === 1) {
347
+ keys = [
348
+ "name",
349
+ "description",
350
+ "chainIds",
351
+ "chains",
352
+ "onEvent",
353
+ "contractRegister",
354
+ "onBlock"
355
+ ];
356
+ }
357
+ keysMemo.contents = keys;
358
+ return keys;
359
+ };
360
+ let get = prop => {
361
+ switch (prop) {
362
+ case "chainIds" :
363
+ return buildChainsObject(Config.loadWithoutRegistrations())[1];
364
+ case "chains" :
365
+ return buildChainsObject(Config.loadWithoutRegistrations())[0];
366
+ case "contractRegister" :
367
+ return contractRegisterFn;
368
+ case "description" :
369
+ return Config.loadWithoutRegistrations().description;
370
+ case "name" :
371
+ return Config.loadWithoutRegistrations().name;
372
+ case "onEvent" :
373
+ return onEventFn;
374
+ case "onBlock" :
375
+ case "onSlot" :
376
+ return onBlockFn;
377
+ default:
378
+ return Stdlib_JsError.throwWithMessage(`Field \`` + prop + `\` does not exist on \`indexer\`. Available fields: ` + getKeys().join(", ") + `.`);
379
+ }
380
+ };
381
+ let traps_get = (target, prop) => {
382
+ if (typeof prop === "string") {
383
+ return get(prop);
384
+ } else {
385
+ return target[prop];
386
+ }
387
+ };
388
+ let traps_ownKeys = param => getKeys();
389
+ let traps_getOwnPropertyDescriptor = (param, prop) => {
390
+ if (typeof prop === "string" && getKeys().includes(prop)) {
391
+ return {
392
+ value: get(prop),
393
+ enumerable: true,
394
+ configurable: true
395
+ };
396
+ }
397
+ };
398
+ let traps = {
399
+ get: traps_get,
400
+ ownKeys: traps_ownKeys,
401
+ getOwnPropertyDescriptor: traps_getOwnPropertyDescriptor
402
+ };
403
+ return new Proxy(Object.create(null), traps);
168
404
  }
169
405
 
170
406
  function startServer(getState, ctx, isDevelopmentMode) {
171
- var app = Express();
172
- var consoleCorsMiddleware = function (req, res, next) {
173
- var origin = Js_dict.get(req.headers, "origin");
407
+ let app = Express();
408
+ let consoleCorsMiddleware = (req, res, next) => {
409
+ let origin = req.headers["origin"];
174
410
  if (origin !== undefined && (origin === Env.prodEnvioAppUrl || origin === Env.envioAppUrl)) {
175
411
  res.setHeader("Access-Control-Allow-Origin", origin);
176
412
  }
@@ -178,7 +414,7 @@ function startServer(getState, ctx, isDevelopmentMode) {
178
414
  res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
179
415
  if (req.method === "OPTIONS") {
180
416
  res.sendStatus(200);
181
- return ;
417
+ return;
182
418
  } else {
183
419
  return next();
184
420
  }
@@ -186,156 +422,179 @@ function startServer(getState, ctx, isDevelopmentMode) {
186
422
  app.use("/console", consoleCorsMiddleware);
187
423
  app.use("/metrics", consoleCorsMiddleware);
188
424
  app.use("/metrics/runtime", consoleCorsMiddleware);
189
- app.get("/healthz", (function (_req, res) {
190
- res.sendStatus(200);
191
- }));
192
- app.get("/console/state", (function (_req, res) {
193
- var state = isDevelopmentMode ? getState() : ({
194
- status: "disabled"
195
- });
196
- res.json(S$RescriptSchema.reverseConvertToJsonOrThrow(state, stateSchema));
197
- }));
198
- app.post("/console/syncCache", (function (_req, res) {
199
- if (isDevelopmentMode) {
200
- Persistence.getInitializedStorageOrThrow(ctx.persistence).dumpEffectCache().then(function () {
201
- res.json(true);
202
- });
203
- } else {
204
- res.json(false);
205
- }
206
- }));
207
- var runtimeRegistry = new PromClient.Registry();
208
- PromClient.collectDefaultMetrics({
209
- register: runtimeRegistry
425
+ app.get("/healthz", (_req, res) => {
426
+ res.sendStatus(200);
427
+ });
428
+ app.get("/console/state", (_req, res) => {
429
+ let state = isDevelopmentMode ? getState() : ({
430
+ status: "disabled"
210
431
  });
211
- app.get("/metrics", (function (_req, res) {
212
- res.set("Content-Type", PromClient.register.contentType);
213
- PromClient.register.metrics().then(function (metrics) {
214
- return res.end(metrics);
215
- });
216
- }));
217
- app.get("/metrics/runtime", (function (_req, res) {
218
- res.set("Content-Type", runtimeRegistry.contentType);
219
- runtimeRegistry.metrics().then(function (metrics) {
220
- return res.end(metrics);
221
- });
222
- }));
223
- var server = app.listen(Env.serverPort);
224
- server.on("error", (function (err) {
225
- var code = err.code;
226
- if (code === "EADDRINUSE") {
227
- Logging.error("Port " + String(Env.serverPort) + " is already in use. To fix this either:" + ("\n 1. Kill the process using the port: lsof -ti :" + String(Env.serverPort) + " | xargs kill -9") + "\n 2. Use a different port by setting the ENVIO_INDEXER_PORT environment variable: ENVIO_INDEXER_PORT=9899 envio start");
228
- } else {
229
- Logging.errorWithExn(err, "Failed to start indexer server");
230
- }
231
- Process.exit(1);
232
- }));
432
+ res.json(S$RescriptSchema.reverseConvertToJsonOrThrow(state, stateSchema));
433
+ });
434
+ app.post("/console/syncCache", (_req, res) => {
435
+ if (isDevelopmentMode) {
436
+ Persistence.getInitializedStorageOrThrow(ctx.persistence).dumpEffectCache().then(() => {
437
+ res.json(true);
438
+ });
439
+ } else {
440
+ res.json(false);
441
+ }
442
+ });
443
+ let runtimeRegistry = new PromClient.Registry();
444
+ PromClient.collectDefaultMetrics({
445
+ register: runtimeRegistry
446
+ });
447
+ app.get("/metrics", (_req, res) => {
448
+ res.set("Content-Type", PromClient.register.contentType);
449
+ PromClient.register.metrics().then(metrics => res.end(metrics));
450
+ });
451
+ app.get("/metrics/runtime", (_req, res) => {
452
+ res.set("Content-Type", runtimeRegistry.contentType);
453
+ runtimeRegistry.metrics().then(metrics => res.end(metrics));
454
+ });
455
+ let server = app.listen(Env.serverPort);
456
+ server.on("error", err => {
457
+ let code = err.code;
458
+ if (code === "EADDRINUSE") {
459
+ Logging.error(`Port ` + Env.serverPort.toString() + ` is already in use. To fix this either:` + (`\n 1. Kill the process using the port: lsof -ti :` + Env.serverPort.toString() + ` | xargs kill -9`) + `\n 2. Use a different port by setting the ENVIO_INDEXER_PORT environment variable: ENVIO_INDEXER_PORT=9899 envio start`);
460
+ } else {
461
+ Logging.errorWithExn(err, "Failed to start indexer server");
462
+ }
463
+ Process.exit(1);
464
+ });
233
465
  }
234
466
 
235
- async function start(makeGeneratedConfig, persistence, isTestOpt, exitAfterFirstEventBlockOpt, patchConfig) {
236
- var isTest = isTestOpt !== undefined ? isTestOpt : false;
237
- var exitAfterFirstEventBlock = exitAfterFirstEventBlockOpt !== undefined ? exitAfterFirstEventBlockOpt : false;
238
- var mainArgs = Yargs(Helpers.hideBin(process.argv)).argv;
239
- var shouldUseTui = !isTest && !Belt_Option.getWithDefault(mainArgs["tui-off"], Env.tuiOffEnvVar);
240
- var isDevelopmentMode = !isTest && Env.Db.password === "testing";
241
- var configWithoutRegistrations = makeGeneratedConfig();
242
- var registrations = await HandlerLoader.registerAllHandlers(configWithoutRegistrations);
243
- var config = makeGeneratedConfig();
244
- var config$1 = isTest ? ({
245
- name: config.name,
246
- description: config.description,
247
- handlers: config.handlers,
248
- contractHandlers: config.contractHandlers,
249
- shouldRollbackOnReorg: false,
250
- shouldSaveFullHistory: config.shouldSaveFullHistory,
251
- multichain: config.multichain,
252
- chainMap: config.chainMap,
253
- defaultChain: config.defaultChain,
254
- ecosystem: config.ecosystem,
255
- enableRawEvents: config.enableRawEvents,
256
- maxAddrInPartition: config.maxAddrInPartition,
257
- batchSize: config.batchSize,
258
- lowercaseAddresses: config.lowercaseAddresses,
259
- addContractNameToContractNameMapping: config.addContractNameToContractNameMapping,
260
- userEntitiesByName: config.userEntitiesByName,
261
- userEntities: config.userEntities,
262
- allEntities: config.allEntities,
263
- allEnums: config.allEnums
264
- }) : config;
265
- var config$2 = patchConfig !== undefined ? patchConfig(config$1, registrations) : config$1;
266
- var ctx = {
467
+ async function migrate(reset, persistedState) {
468
+ let config = Config.loadWithoutRegistrations();
469
+ let persistence = PgStorage.makePersistenceFromConfig(config, undefined);
470
+ await Persistence.init(persistence, ChainMap.values(config.chainMap), reset);
471
+ await Core.upsertPersistedState(JSON.stringify(persistedState));
472
+ return await persistence.storage.close();
473
+ }
474
+
475
+ async function dropSchema() {
476
+ let config = Config.loadWithoutRegistrations();
477
+ let persistence = PgStorage.makePersistenceFromConfig(config, undefined);
478
+ await persistence.storage.reset();
479
+ return await persistence.storage.close();
480
+ }
481
+
482
+ async function start(persistence, migrate, isTestOpt, exitAfterFirstEventBlockOpt, patchConfig) {
483
+ let isTest = isTestOpt !== undefined ? isTestOpt : false;
484
+ let exitAfterFirstEventBlock = exitAfterFirstEventBlockOpt !== undefined ? exitAfterFirstEventBlockOpt : false;
485
+ let mainArgs = Yargs(Helpers.hideBin(process.argv)).argv;
486
+ let shouldUseTui = !isTest && !Belt_Option.getWithDefault(mainArgs["tui-off"], Env.tuiOffEnvVar);
487
+ let isDevelopmentMode = !isTest && Envio.isDevMode();
488
+ let configWithoutRegistrations = Config.loadWithoutRegistrations();
489
+ let persistence$1 = persistence !== undefined ? persistence : PgStorage.makePersistenceFromConfig(configWithoutRegistrations, undefined);
490
+ globalPersistenceRef.contents = persistence$1;
491
+ let reset = Stdlib_Option.getOr(Stdlib_Option.map(migrate, m => m.reset), false);
492
+ await Persistence.init(persistence$1, ChainMap.values(configWithoutRegistrations.chainMap), reset);
493
+ if (migrate !== undefined) {
494
+ await Core.upsertPersistedState(JSON.stringify(migrate.persistedState));
495
+ }
496
+ let match = await HandlerLoader.registerAllHandlers(configWithoutRegistrations);
497
+ let registrations = match[1];
498
+ let config = match[0];
499
+ let config$1 = isTest ? ({
500
+ name: config.name,
501
+ description: config.description,
502
+ handlers: config.handlers,
503
+ contractHandlers: config.contractHandlers,
504
+ shouldRollbackOnReorg: false,
505
+ shouldSaveFullHistory: config.shouldSaveFullHistory,
506
+ storage: config.storage,
507
+ multichain: config.multichain,
508
+ chainMap: config.chainMap,
509
+ defaultChain: config.defaultChain,
510
+ ecosystem: config.ecosystem,
511
+ enableRawEvents: config.enableRawEvents,
512
+ maxAddrInPartition: config.maxAddrInPartition,
513
+ batchSize: config.batchSize,
514
+ lowercaseAddresses: config.lowercaseAddresses,
515
+ userEntitiesByName: config.userEntitiesByName,
516
+ userEntities: config.userEntities,
517
+ allEntities: config.allEntities,
518
+ allEnums: config.allEnums
519
+ }) : config;
520
+ let config$2 = patchConfig !== undefined ? patchConfig(config$1, registrations) : config$1;
521
+ let ctx = {
267
522
  registrations: registrations,
268
523
  config: config$2,
269
- persistence: persistence
524
+ persistence: persistence$1
270
525
  };
271
- var envioVersion = Utils.EnvioPackage.value.version;
526
+ let envioVersion = Utils.EnvioPackage.value.version;
272
527
  Prometheus.Info.set(envioVersion);
273
528
  Prometheus.ProcessStartTimeSeconds.set();
274
529
  Prometheus.RollbackEnabled.set(config$2.shouldRollbackOnReorg);
275
530
  if (!isTest) {
276
- startServer((function () {
277
- var gsManager = globalGsManagerRef.contents;
278
- if (gsManager === undefined) {
279
- return {
280
- status: "initializing"
281
- };
282
- }
283
- var state = GlobalStateManager.getState(Caml_option.valFromOption(gsManager));
284
- var chains = Belt_Array.map(ChainMap.values(state.chainManager.chainFetchers), (function (cf) {
285
- var latestFetchedBlockNumber = Caml.int_max(FetchState.bufferBlockNumber(cf.fetchState), 0);
286
- var knownHeight = ChainFetcher.hasProcessedToEndblock(cf) ? Belt_Option.getWithDefault(cf.fetchState.endBlock, cf.fetchState.knownHeight) : cf.fetchState.knownHeight;
287
- return {
288
- chainId: cf.chainConfig.id,
289
- poweredByHyperSync: SourceManager.getActiveSource(cf.sourceManager).poweredByHyperSync,
290
- firstEventBlockNumber: cf.fetchState.firstEventBlock,
291
- latestProcessedBlock: cf.committedProgressBlockNumber === -1 ? undefined : cf.committedProgressBlockNumber,
292
- timestampCaughtUpToHeadOrEndblock: cf.timestampCaughtUpToHeadOrEndblock,
293
- numEventsProcessed: cf.numEventsProcessed,
294
- latestFetchedBlockNumber: latestFetchedBlockNumber,
295
- currentBlockHeight: knownHeight,
296
- numBatchesFetched: 0,
297
- startBlock: cf.fetchState.startBlock,
298
- endBlock: cf.fetchState.endBlock,
299
- numAddresses: FetchState.numAddresses(cf.fetchState)
300
- };
301
- }));
302
- var match = config$2.multichain;
303
- var tmp;
304
- tmp = match === "ordered" ? false : true;
305
- return {
306
- status: "active",
307
- envioVersion: envioVersion,
308
- chains: chains,
309
- indexerStartTime: state.indexerStartTime,
310
- isPreRegisteringDynamicContracts: false,
311
- isUnorderedMultichainMode: tmp,
312
- rollbackOnReorg: config$2.shouldRollbackOnReorg
313
- };
314
- }), ctx, isDevelopmentMode);
531
+ startServer(() => {
532
+ let gsManager = globalGsManagerRef.contents;
533
+ if (gsManager === undefined) {
534
+ return {
535
+ status: "initializing"
536
+ };
537
+ }
538
+ let state = GlobalStateManager.getState(Primitive_option.valFromOption(gsManager));
539
+ let chains = ChainMap.values(state.chainManager.chainFetchers).map(cf => {
540
+ let latestFetchedBlockNumber = Primitive_int.max(FetchState.bufferBlockNumber(cf.fetchState), 0);
541
+ let knownHeight = ChainFetcher.hasProcessedToEndblock(cf) ? Stdlib_Option.getOr(cf.fetchState.endBlock, cf.fetchState.knownHeight) : cf.fetchState.knownHeight;
542
+ return {
543
+ chainId: cf.chainConfig.id,
544
+ poweredByHyperSync: SourceManager.getActiveSource(cf.sourceManager).poweredByHyperSync,
545
+ firstEventBlockNumber: cf.fetchState.firstEventBlock,
546
+ latestProcessedBlock: cf.committedProgressBlockNumber === -1 ? undefined : cf.committedProgressBlockNumber,
547
+ timestampCaughtUpToHeadOrEndblock: cf.timestampCaughtUpToHeadOrEndblock,
548
+ numEventsProcessed: cf.numEventsProcessed,
549
+ latestFetchedBlockNumber: latestFetchedBlockNumber,
550
+ currentBlockHeight: knownHeight,
551
+ numBatchesFetched: 0,
552
+ startBlock: cf.fetchState.startBlock,
553
+ endBlock: cf.fetchState.endBlock,
554
+ numAddresses: FetchState.numAddresses(cf.fetchState)
555
+ };
556
+ });
557
+ let match = config$2.multichain;
558
+ let tmp;
559
+ tmp = match !== "ordered";
560
+ return {
561
+ status: "active",
562
+ envioVersion: envioVersion,
563
+ chains: chains,
564
+ indexerStartTime: state.indexerStartTime,
565
+ isPreRegisteringDynamicContracts: false,
566
+ isUnorderedMultichainMode: tmp,
567
+ rollbackOnReorg: config$2.shouldRollbackOnReorg
568
+ };
569
+ }, ctx, isDevelopmentMode);
315
570
  }
316
- await Persistence.init(persistence, ChainMap.values(config$2.chainMap), undefined);
317
- var chainManager = await ChainManager.makeFromDbState(Persistence.getInitializedState(persistence), config$2, registrations);
318
- var globalState = GlobalState.make(ctx, chainManager, isDevelopmentMode, shouldUseTui, exitAfterFirstEventBlock);
319
- var gsManager = GlobalStateManager.make(globalState, undefined);
571
+ let chainManager = ChainManager.makeFromDbState(Persistence.getInitializedState(persistence$1), config$2, registrations);
572
+ let globalState = GlobalState.make(ctx, chainManager, isDevelopmentMode, shouldUseTui, exitAfterFirstEventBlock);
573
+ let gsManager = GlobalStateManager.make(globalState, undefined);
320
574
  if (shouldUseTui) {
321
- Tui.start(function () {
322
- return GlobalStateManager.getState(gsManager);
323
- });
575
+ Tui.start(() => GlobalStateManager.getState(gsManager));
324
576
  }
325
- globalGsManagerRef.contents = Caml_option.some(gsManager);
577
+ globalGsManagerRef.contents = Primitive_option.some(gsManager);
326
578
  GlobalStateManager.dispatchTask(gsManager, {
327
- TAG: "NextQuery",
328
- _0: "CheckAllChains"
329
- });
579
+ TAG: "NextQuery",
580
+ _0: "CheckAllChains"
581
+ });
330
582
  return GlobalStateManager.dispatchTask(gsManager, "ProcessEventBatch");
331
583
  }
332
584
 
333
585
  export {
334
- chainDataSchema ,
335
- stateSchema ,
336
- globalGsManagerRef ,
337
- getGlobalIndexer ,
338
- startServer ,
339
- start ,
586
+ chainDataSchema,
587
+ stateSchema,
588
+ blockRangeSchema,
589
+ defaultBlockRange,
590
+ globalGsManagerRef,
591
+ globalPersistenceRef,
592
+ getInitialChainState,
593
+ buildChainsObject,
594
+ getGlobalIndexer,
595
+ startServer,
596
+ migrate,
597
+ dropSchema,
598
+ start,
340
599
  }
341
600
  /* chainDataSchema Not a pure module */