envio 3.0.0-alpha.0 → 3.0.0-alpha.10

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 (136) hide show
  1. package/README.md +2 -2
  2. package/evm.schema.json +53 -57
  3. package/fuel.schema.json +35 -31
  4. package/index.d.ts +446 -1
  5. package/index.js +4 -0
  6. package/package.json +23 -11
  7. package/rescript.json +4 -1
  8. package/src/Batch.res.mjs +1 -1
  9. package/src/Benchmark.res +394 -0
  10. package/src/Benchmark.res.mjs +398 -0
  11. package/src/ChainFetcher.res +526 -0
  12. package/src/ChainFetcher.res.mjs +343 -0
  13. package/src/ChainManager.res +182 -0
  14. package/src/ChainManager.res.mjs +150 -0
  15. package/src/Config.res +367 -27
  16. package/src/Config.res.mjs +338 -28
  17. package/src/{Indexer.res → Ctx.res} +1 -1
  18. package/src/Ecosystem.res +25 -0
  19. package/src/Ecosystem.res.mjs +29 -0
  20. package/src/Env.res +252 -0
  21. package/src/Env.res.mjs +271 -0
  22. package/src/Envio.gen.ts +9 -1
  23. package/src/Envio.res +12 -9
  24. package/src/EventProcessing.res +476 -0
  25. package/src/EventProcessing.res.mjs +341 -0
  26. package/src/EventRegister.res +4 -15
  27. package/src/EventRegister.res.mjs +3 -9
  28. package/src/EventRegister.resi +2 -8
  29. package/src/FetchState.res +54 -29
  30. package/src/FetchState.res.mjs +62 -35
  31. package/src/GlobalState.res +1163 -0
  32. package/src/GlobalState.res.mjs +1196 -0
  33. package/src/GlobalStateManager.res +68 -0
  34. package/src/GlobalStateManager.res.mjs +75 -0
  35. package/src/GlobalStateManager.resi +7 -0
  36. package/src/HandlerLoader.res +89 -0
  37. package/src/HandlerLoader.res.mjs +79 -0
  38. package/src/Internal.gen.ts +3 -14
  39. package/src/Internal.res +45 -13
  40. package/src/LoadLayer.res +444 -0
  41. package/src/LoadLayer.res.mjs +296 -0
  42. package/src/LoadLayer.resi +32 -0
  43. package/src/LogSelection.res +33 -27
  44. package/src/LogSelection.res.mjs +6 -0
  45. package/src/Logging.res +11 -4
  46. package/src/Logging.res.mjs +14 -6
  47. package/src/Main.res +351 -0
  48. package/src/Main.res.mjs +312 -0
  49. package/src/Persistence.res +1 -2
  50. package/src/PgStorage.gen.ts +10 -0
  51. package/src/PgStorage.res +28 -34
  52. package/src/PgStorage.res.d.mts +5 -0
  53. package/src/PgStorage.res.mjs +27 -27
  54. package/src/Prometheus.res +8 -8
  55. package/src/Prometheus.res.mjs +10 -10
  56. package/src/ReorgDetection.res +6 -10
  57. package/src/ReorgDetection.res.mjs +6 -6
  58. package/src/TestIndexer.res +536 -0
  59. package/src/TestIndexer.res.mjs +412 -0
  60. package/src/TestIndexerProxyStorage.res +210 -0
  61. package/src/TestIndexerProxyStorage.res.mjs +157 -0
  62. package/src/Types.ts +1 -1
  63. package/src/UserContext.res +355 -0
  64. package/src/UserContext.res.mjs +236 -0
  65. package/src/Utils.res +28 -0
  66. package/src/Utils.res.mjs +18 -0
  67. package/src/bindings/ClickHouse.res +31 -1
  68. package/src/bindings/ClickHouse.res.mjs +27 -1
  69. package/src/bindings/DateFns.res +71 -0
  70. package/src/bindings/DateFns.res.mjs +22 -0
  71. package/src/bindings/Ethers.res +27 -67
  72. package/src/bindings/Ethers.res.mjs +18 -70
  73. package/src/bindings/EventSource.res +13 -0
  74. package/src/bindings/EventSource.res.mjs +2 -0
  75. package/src/bindings/NodeJs.res +44 -3
  76. package/src/bindings/NodeJs.res.mjs +11 -3
  77. package/src/bindings/Pino.res +21 -7
  78. package/src/bindings/Pino.res.mjs +11 -5
  79. package/src/bindings/Postgres.gen.ts +8 -0
  80. package/src/bindings/Postgres.res +3 -0
  81. package/src/bindings/Postgres.res.d.mts +5 -0
  82. package/src/bindings/RescriptMocha.res +123 -0
  83. package/src/bindings/RescriptMocha.res.mjs +18 -0
  84. package/src/bindings/Vitest.res +134 -0
  85. package/src/bindings/Vitest.res.mjs +9 -0
  86. package/src/bindings/Yargs.res +8 -0
  87. package/src/bindings/Yargs.res.mjs +2 -0
  88. package/src/db/InternalTable.res +2 -0
  89. package/src/db/InternalTable.res.mjs +1 -1
  90. package/src/sources/Evm.res +87 -0
  91. package/src/sources/Evm.res.mjs +105 -0
  92. package/src/sources/EvmChain.res +90 -0
  93. package/src/sources/EvmChain.res.mjs +57 -0
  94. package/src/sources/Fuel.res +19 -34
  95. package/src/sources/Fuel.res.mjs +34 -16
  96. package/src/sources/FuelSDK.res +38 -0
  97. package/src/sources/FuelSDK.res.mjs +29 -0
  98. package/src/sources/HyperFuel.res +2 -2
  99. package/src/sources/HyperFuel.resi +1 -1
  100. package/src/sources/HyperFuelClient.res +2 -2
  101. package/src/sources/HyperFuelSource.res +8 -8
  102. package/src/sources/HyperFuelSource.res.mjs +5 -5
  103. package/src/sources/HyperSyncHeightStream.res +97 -0
  104. package/src/sources/HyperSyncHeightStream.res.mjs +94 -0
  105. package/src/sources/HyperSyncSource.res +64 -172
  106. package/src/sources/HyperSyncSource.res.mjs +73 -155
  107. package/src/sources/Rpc.res +43 -0
  108. package/src/sources/Rpc.res.mjs +31 -0
  109. package/src/sources/RpcSource.res +32 -130
  110. package/src/sources/RpcSource.res.mjs +47 -121
  111. package/src/sources/Source.res +3 -2
  112. package/src/sources/SourceManager.res +183 -108
  113. package/src/sources/SourceManager.res.mjs +162 -99
  114. package/src/sources/SourceManager.resi +4 -5
  115. package/src/sources/Svm.res +59 -0
  116. package/src/sources/Svm.res.mjs +79 -0
  117. package/src/tui/Tui.res +266 -0
  118. package/src/tui/Tui.res.mjs +342 -0
  119. package/src/tui/bindings/Ink.res +376 -0
  120. package/src/tui/bindings/Ink.res.mjs +75 -0
  121. package/src/tui/bindings/Style.res +123 -0
  122. package/src/tui/bindings/Style.res.mjs +2 -0
  123. package/src/tui/components/BufferedProgressBar.res +40 -0
  124. package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
  125. package/src/tui/components/CustomHooks.res +122 -0
  126. package/src/tui/components/CustomHooks.res.mjs +179 -0
  127. package/src/tui/components/Messages.res +41 -0
  128. package/src/tui/components/Messages.res.mjs +75 -0
  129. package/src/tui/components/SyncETA.res +193 -0
  130. package/src/tui/components/SyncETA.res.mjs +269 -0
  131. package/src/tui/components/TuiData.res +46 -0
  132. package/src/tui/components/TuiData.res.mjs +29 -0
  133. package/src/Platform.res +0 -140
  134. package/src/Platform.res.mjs +0 -170
  135. package/src/bindings/Ethers.gen.ts +0 -14
  136. /package/src/{Indexer.res.mjs → Ctx.res.mjs} +0 -0
@@ -0,0 +1,296 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Utils from "./Utils.res.mjs";
4
+ import * as Hrtime from "./bindings/Hrtime.res.mjs";
5
+ import * as Logging from "./Logging.res.mjs";
6
+ import * as Internal from "./Internal.res.mjs";
7
+ import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
8
+ import * as Prometheus from "./Prometheus.res.mjs";
9
+ import * as Caml_option from "rescript/lib/es6/caml_option.js";
10
+ import * as LoadManager from "./LoadManager.res.mjs";
11
+ import * as Persistence from "./Persistence.res.mjs";
12
+ import * as TableIndices from "./TableIndices.res.mjs";
13
+ import * as ErrorHandling from "./ErrorHandling.res.mjs";
14
+ import * as InMemoryStore from "./InMemoryStore.res.mjs";
15
+ import * as InMemoryTable from "./InMemoryTable.res.mjs";
16
+ import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
17
+ import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js";
18
+
19
+ function loadById(loadManager, persistence, entityConfig, inMemoryStore, shouldGroup, item, entityId) {
20
+ var key = entityConfig.name + ".get";
21
+ var inMemTable = InMemoryStore.getInMemTable(inMemoryStore, entityConfig);
22
+ var load = async function (idsToLoad, param) {
23
+ var timerRef = Prometheus.StorageLoad.startOperation(key);
24
+ var dbEntities;
25
+ try {
26
+ dbEntities = await Persistence.getInitializedStorageOrThrow(persistence).loadByIdsOrThrow(idsToLoad, entityConfig.table, entityConfig.rowsSchema);
27
+ }
28
+ catch (raw_exn){
29
+ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
30
+ if (exn.RE_EXN_ID === Persistence.StorageError) {
31
+ dbEntities = ErrorHandling.mkLogAndRaise(Logging.getItemLogger(item), exn.message, exn.reason);
32
+ } else {
33
+ throw exn;
34
+ }
35
+ }
36
+ var entitiesMap = {};
37
+ for(var idx = 0 ,idx_finish = dbEntities.length; idx < idx_finish; ++idx){
38
+ var entity = dbEntities[idx];
39
+ entitiesMap[entity.id] = entity;
40
+ }
41
+ idsToLoad.forEach(function (entityId) {
42
+ InMemoryTable.Entity.initValue(inMemTable, entityId, entitiesMap[entityId], false);
43
+ });
44
+ return Prometheus.StorageLoad.endOperation(timerRef, key, idsToLoad.length, dbEntities.length);
45
+ };
46
+ return LoadManager.call(loadManager, entityId, key, load, LoadManager.noopHasher, shouldGroup, (function (hash) {
47
+ return InMemoryTable.hasByHash(inMemTable.table, hash);
48
+ }), InMemoryTable.Entity.getUnsafe(inMemTable));
49
+ }
50
+
51
+ function callEffect(effect, arg, inMemTable, timerRef, onError) {
52
+ var effectName = effect.name;
53
+ var hadActiveCalls = effect.activeCallsCount > 0;
54
+ effect.activeCallsCount = effect.activeCallsCount + 1 | 0;
55
+ Prometheus.SafeGauge.handleInt(Prometheus.EffectCalls.activeCallsCount, effectName, effect.activeCallsCount);
56
+ if (hadActiveCalls) {
57
+ var elapsed = Hrtime.millisBetween(effect.prevCallStartTimerRef, timerRef);
58
+ if (elapsed > 0) {
59
+ Prometheus.SafeCounter.incrementMany(Prometheus.EffectCalls.timeCounter, effectName, Hrtime.millisBetween(effect.prevCallStartTimerRef, timerRef));
60
+ }
61
+
62
+ }
63
+ effect.prevCallStartTimerRef = timerRef;
64
+ return effect.handler(arg).then(function (output) {
65
+ inMemTable.dict[arg.cacheKey] = output;
66
+ if (arg.context.cache) {
67
+ inMemTable.idsToStore.push(arg.cacheKey);
68
+ return ;
69
+ }
70
+
71
+ }).catch(function (exn) {
72
+ onError(arg.cacheKey, exn);
73
+ }).finally(function () {
74
+ effect.activeCallsCount = effect.activeCallsCount - 1 | 0;
75
+ Prometheus.SafeGauge.handleInt(Prometheus.EffectCalls.activeCallsCount, effectName, effect.activeCallsCount);
76
+ var newTimer = Hrtime.makeTimer();
77
+ Prometheus.SafeCounter.incrementMany(Prometheus.EffectCalls.timeCounter, effectName, Hrtime.millisBetween(effect.prevCallStartTimerRef, newTimer));
78
+ effect.prevCallStartTimerRef = newTimer;
79
+ Prometheus.SafeCounter.increment(Prometheus.EffectCalls.totalCallsCount, effectName);
80
+ Prometheus.SafeCounter.incrementMany(Prometheus.EffectCalls.sumTimeCounter, effectName, Hrtime.intFromMillis(Hrtime.toMillis(Hrtime.timeSince(timerRef))));
81
+ });
82
+ }
83
+
84
+ function executeWithRateLimit(effect, effectArgs, inMemTable, onError, isFromQueue) {
85
+ var effectName = effect.name;
86
+ var timerRef = Hrtime.makeTimer();
87
+ var promises = [];
88
+ var state = effect.rateLimit;
89
+ if (state !== undefined) {
90
+ var now = Date.now();
91
+ if (now >= state.windowStartTime + state.durationMs) {
92
+ state.availableCalls = state.callsPerDuration;
93
+ state.windowStartTime = now;
94
+ state.nextWindowPromise = undefined;
95
+ }
96
+ var immediateCount = Math.min(state.availableCalls, effectArgs.length);
97
+ var immediateArgs = Belt_Array.slice(effectArgs, 0, immediateCount);
98
+ var queuedArgs = Belt_Array.sliceToEnd(effectArgs, immediateCount);
99
+ state.availableCalls = state.availableCalls - immediateCount | 0;
100
+ for(var idx = 0 ,idx_finish = immediateArgs.length; idx < idx_finish; ++idx){
101
+ promises.push(callEffect(effect, immediateArgs[idx], inMemTable, timerRef, onError));
102
+ }
103
+ if (immediateCount > 0 && isFromQueue) {
104
+ state.queueCount = state.queueCount - immediateCount | 0;
105
+ Prometheus.EffectQueueCount.set(state.queueCount, effectName);
106
+ }
107
+ if (Utils.$$Array.notEmpty(queuedArgs)) {
108
+ if (!isFromQueue) {
109
+ state.queueCount = state.queueCount + queuedArgs.length | 0;
110
+ Prometheus.EffectQueueCount.set(state.queueCount, effectName);
111
+ }
112
+ var millisUntilReset = {
113
+ contents: 0
114
+ };
115
+ var p = state.nextWindowPromise;
116
+ var nextWindowPromise;
117
+ if (p !== undefined) {
118
+ nextWindowPromise = Caml_option.valFromOption(p);
119
+ } else {
120
+ millisUntilReset.contents = state.windowStartTime + state.durationMs - now | 0;
121
+ var p$1 = Utils.delay(millisUntilReset.contents);
122
+ state.nextWindowPromise = Caml_option.some(p$1);
123
+ nextWindowPromise = p$1;
124
+ }
125
+ promises.push(nextWindowPromise.then(function () {
126
+ if (millisUntilReset.contents > 0) {
127
+ Prometheus.SafeCounter.incrementMany(Prometheus.EffectQueueCount.timeCounter, effectName, millisUntilReset.contents);
128
+ }
129
+ return executeWithRateLimit(effect, queuedArgs, inMemTable, onError, true);
130
+ }));
131
+ }
132
+
133
+ } else {
134
+ for(var idx$1 = 0 ,idx_finish$1 = effectArgs.length; idx$1 < idx_finish$1; ++idx$1){
135
+ promises.push(callEffect(effect, effectArgs[idx$1], inMemTable, timerRef, onError));
136
+ }
137
+ }
138
+ return Promise.all(promises);
139
+ }
140
+
141
+ function loadEffect(loadManager, persistence, effect, effectArgs, inMemoryStore, shouldGroup, item) {
142
+ var effectName = effect.name;
143
+ var key = effectName + ".effect";
144
+ var inMemTable = InMemoryStore.getEffectInMemTable(inMemoryStore, effect);
145
+ var load = async function (args, onError) {
146
+ var idsToLoad = args.map(function (arg) {
147
+ return arg.cacheKey;
148
+ });
149
+ var idsFromCache = new Set();
150
+ var match = persistence.storageStatus;
151
+ var tmp;
152
+ tmp = typeof match !== "object" || match.TAG === "Initializing" ? false : Utils.Dict.has(match._0.cache, effectName);
153
+ if (tmp) {
154
+ var timerRef = Prometheus.StorageLoad.startOperation(key);
155
+ var match$1 = effect.storageMeta;
156
+ var outputSchema = match$1.outputSchema;
157
+ var dbEntities;
158
+ try {
159
+ dbEntities = await Persistence.getInitializedStorageOrThrow(persistence).loadByIdsOrThrow(idsToLoad, match$1.table, Internal.effectCacheItemRowsSchema);
160
+ }
161
+ catch (raw_exn){
162
+ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
163
+ Logging.childWarn(Logging.getItemLogger(item), {
164
+ msg: "Failed to load cache effect cache. The indexer will continue working, but the effect will not be able to use the cache.",
165
+ err: Utils.prettifyExn(exn),
166
+ effect: effectName
167
+ });
168
+ dbEntities = [];
169
+ }
170
+ dbEntities.forEach(function (dbEntity) {
171
+ try {
172
+ var output = S$RescriptSchema.parseOrThrow(dbEntity.output, outputSchema);
173
+ idsFromCache.add(dbEntity.id);
174
+ inMemTable.dict[dbEntity.id] = output;
175
+ return ;
176
+ }
177
+ catch (raw_error){
178
+ var error = Caml_js_exceptions.internalToOCamlException(raw_error);
179
+ if (error.RE_EXN_ID === S$RescriptSchema.Raised) {
180
+ inMemTable.invalidationsCount = inMemTable.invalidationsCount + 1 | 0;
181
+ Prometheus.EffectCacheInvalidationsCount.increment(effectName);
182
+ return Logging.childTrace(Logging.getItemLogger(item), {
183
+ msg: "Invalidated effect cache",
184
+ input: dbEntity.id,
185
+ effect: effectName,
186
+ err: S$RescriptSchema.$$Error.message(error._1)
187
+ });
188
+ }
189
+ throw error;
190
+ }
191
+ });
192
+ Prometheus.StorageLoad.endOperation(timerRef, key, idsToLoad.length, dbEntities.length);
193
+ }
194
+ var remainingCallsCount = idsToLoad.length - idsFromCache.size | 0;
195
+ if (remainingCallsCount <= 0) {
196
+ return ;
197
+ }
198
+ var argsToCall = [];
199
+ for(var idx = 0 ,idx_finish = args.length; idx < idx_finish; ++idx){
200
+ var arg = args[idx];
201
+ if (!idsFromCache.has(arg.cacheKey)) {
202
+ argsToCall.push(arg);
203
+ }
204
+
205
+ }
206
+ if (Utils.$$Array.notEmpty(argsToCall)) {
207
+ return await executeWithRateLimit(effect, argsToCall, inMemTable, onError, false);
208
+ }
209
+
210
+ };
211
+ return LoadManager.call(loadManager, effectArgs, key, load, (function (args) {
212
+ return args.cacheKey;
213
+ }), shouldGroup, (function (hash) {
214
+ return Utils.Dict.has(inMemTable.dict, hash);
215
+ }), (function (hash) {
216
+ return inMemTable.dict[hash];
217
+ }));
218
+ }
219
+
220
+ function loadByField(loadManager, persistence, operator, entityConfig, inMemoryStore, fieldName, fieldValueSchema, shouldGroup, item, fieldValue) {
221
+ var operatorCallName;
222
+ switch (operator) {
223
+ case "Eq" :
224
+ operatorCallName = "eq";
225
+ break;
226
+ case "Gt" :
227
+ operatorCallName = "gt";
228
+ break;
229
+ case "Lt" :
230
+ operatorCallName = "lt";
231
+ break;
232
+
233
+ }
234
+ var key = entityConfig.name + ".getWhere." + fieldName + "." + operatorCallName;
235
+ var inMemTable = InMemoryStore.getInMemTable(inMemoryStore, entityConfig);
236
+ var load = async function (fieldValues, param) {
237
+ var timerRef = Prometheus.StorageLoad.startOperation(key);
238
+ var size = {
239
+ contents: 0
240
+ };
241
+ var indiciesToLoad = fieldValues.map(function (fieldValue) {
242
+ return {
243
+ fieldName: fieldName,
244
+ fieldValue: fieldValue,
245
+ operator: operator
246
+ };
247
+ });
248
+ await Promise.all(indiciesToLoad.map(async function (index) {
249
+ InMemoryTable.Entity.addEmptyIndex(inMemTable, index);
250
+ try {
251
+ var tmp;
252
+ switch (index.operator) {
253
+ case "Eq" :
254
+ tmp = "=";
255
+ break;
256
+ case "Gt" :
257
+ tmp = ">";
258
+ break;
259
+ case "Lt" :
260
+ tmp = "<";
261
+ break;
262
+
263
+ }
264
+ var entities = await Persistence.getInitializedStorageOrThrow(persistence).loadByFieldOrThrow(TableIndices.Index.getFieldName(index), fieldValueSchema, index.fieldValue, tmp, entityConfig.table, entityConfig.rowsSchema);
265
+ Belt_Array.forEach(entities, (function (entity) {
266
+ InMemoryTable.Entity.initValue(inMemTable, entity.id, entity, false);
267
+ }));
268
+ size.contents = size.contents + entities.length | 0;
269
+ return ;
270
+ }
271
+ catch (raw_exn){
272
+ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
273
+ if (exn.RE_EXN_ID === Persistence.StorageError) {
274
+ return ErrorHandling.mkLogAndRaise(Logging.createChildFrom(Logging.getItemLogger(item), {
275
+ operator: operatorCallName,
276
+ tableName: entityConfig.table.tableName,
277
+ fieldName: fieldName,
278
+ fieldValue: fieldValue
279
+ }), exn.message, exn.reason);
280
+ }
281
+ throw exn;
282
+ }
283
+ }));
284
+ return Prometheus.StorageLoad.endOperation(timerRef, key, fieldValues.length, size.contents);
285
+ };
286
+ return LoadManager.call(loadManager, fieldValue, key, load, (function (fieldValue) {
287
+ return TableIndices.FieldValue.toString(fieldValue);
288
+ }), shouldGroup, InMemoryTable.Entity.hasIndex(inMemTable, fieldName, operator), InMemoryTable.Entity.getUnsafeOnIndex(inMemTable, fieldName, operator));
289
+ }
290
+
291
+ export {
292
+ loadById ,
293
+ loadByField ,
294
+ loadEffect ,
295
+ }
296
+ /* Utils Not a pure module */
@@ -0,0 +1,32 @@
1
+ let loadById: (
2
+ ~loadManager: LoadManager.t,
3
+ ~persistence: Persistence.t,
4
+ ~entityConfig: Internal.entityConfig,
5
+ ~inMemoryStore: InMemoryStore.t,
6
+ ~shouldGroup: bool,
7
+ ~item: Internal.item,
8
+ ~entityId: string,
9
+ ) => promise<option<Internal.entity>>
10
+
11
+ let loadByField: (
12
+ ~loadManager: LoadManager.t,
13
+ ~persistence: Persistence.t,
14
+ ~operator: TableIndices.Operator.t,
15
+ ~entityConfig: Internal.entityConfig,
16
+ ~inMemoryStore: InMemoryStore.t,
17
+ ~fieldName: string,
18
+ ~fieldValueSchema: RescriptSchema.S.t<'fieldValue>,
19
+ ~shouldGroup: bool,
20
+ ~item: Internal.item,
21
+ ~fieldValue: 'fieldValue,
22
+ ) => promise<array<Internal.entity>>
23
+
24
+ let loadEffect: (
25
+ ~loadManager: LoadManager.t,
26
+ ~persistence: Persistence.t,
27
+ ~effect: Internal.effect,
28
+ ~effectArgs: Internal.effectArgs,
29
+ ~inMemoryStore: InMemoryStore.t,
30
+ ~shouldGroup: bool,
31
+ ~item: Internal.item,
32
+ ) => promise<Internal.effectOutput>
@@ -84,38 +84,44 @@ let parseEventFiltersOrThrow = {
84
84
  }
85
85
 
86
86
  let parse = (eventFilters: Js.Json.t): array<Internal.topicSelection> => {
87
- switch eventFilters {
88
- | Array([]) => [%raw(`{}`)]
89
- | Array(a) => a
90
- | _ => [eventFilters]
91
- }->Js.Array2.map(eventFilter => {
92
- switch eventFilter {
93
- | Object(eventFilter) => {
94
- let filterKeys = eventFilter->Js.Dict.keys
95
- switch filterKeys {
96
- | [] => default
97
- | _ => {
98
- filterKeys->Js.Array2.forEach(key => {
99
- if params->Js.Array2.includes(key)->not {
100
- // In TS type validation doesn't catch this
101
- // when we have eventFilters as a callback
102
- Js.Exn.raiseError(
103
- `Invalid event filters configuration. The event doesn't have an indexed parameter "${key}" and can't use it for filtering`,
104
- )
87
+ if eventFilters === Obj.magic(true) {
88
+ [default]
89
+ } else if eventFilters === Obj.magic(false) {
90
+ []
91
+ } else {
92
+ switch eventFilters {
93
+ | Array([]) => [%raw(`{}`)]
94
+ | Array(a) => a
95
+ | _ => [eventFilters]
96
+ }->Js.Array2.map(eventFilter => {
97
+ switch eventFilter {
98
+ | Object(eventFilter) => {
99
+ let filterKeys = eventFilter->Js.Dict.keys
100
+ switch filterKeys {
101
+ | [] => default
102
+ | _ => {
103
+ filterKeys->Js.Array2.forEach(key => {
104
+ if params->Js.Array2.includes(key)->not {
105
+ // In TS type validation doesn't catch this
106
+ // when we have eventFilters as a callback
107
+ Js.Exn.raiseError(
108
+ `Invalid event filters configuration. The event doesn't have an indexed parameter "${key}" and can't use it for filtering`,
109
+ )
110
+ }
111
+ })
112
+ {
113
+ Internal.topic0,
114
+ topic1: topic1(eventFilter),
115
+ topic2: topic2(eventFilter),
116
+ topic3: topic3(eventFilter),
105
117
  }
106
- })
107
- {
108
- Internal.topic0,
109
- topic1: topic1(eventFilter),
110
- topic2: topic2(eventFilter),
111
- topic3: topic3(eventFilter),
112
118
  }
113
119
  }
114
120
  }
121
+ | _ => Js.Exn.raiseError("Invalid event filters configuration. Expected an object")
115
122
  }
116
- | _ => Js.Exn.raiseError("Invalid event filters configuration. Expected an object")
117
- }
118
- })
123
+ })
124
+ }
119
125
  }
120
126
 
121
127
  let getEventFiltersOrThrow = switch eventFilters {
@@ -100,6 +100,12 @@ function parseEventFiltersOrThrow(eventFilters, sighash, params, topic1Opt, topi
100
100
  topic3: emptyTopics
101
101
  };
102
102
  var parse = function (eventFilters) {
103
+ if (eventFilters === true) {
104
+ return [$$default];
105
+ }
106
+ if (eventFilters === false) {
107
+ return [];
108
+ }
103
109
  var tmp;
104
110
  tmp = !Array.isArray(eventFilters) && (eventFilters === null || typeof eventFilters !== "object") && typeof eventFilters !== "number" && typeof eventFilters !== "string" && typeof eventFilters !== "boolean" ? [eventFilters] : (
105
111
  Array.isArray(eventFilters) ? (
package/src/Logging.res CHANGED
@@ -42,33 +42,40 @@ let makeLogger = (~logStrategy, ~logFilePath, ~defaultFileLogLevel, ~userLogLeve
42
42
  let makeMultiStreamLogger =
43
43
  MultiStreamLogger.make(~userLogLevel, ~defaultFileLogLevel, ~customLevels=logLevels, ...)
44
44
 
45
+ // Empty base disables pid and hostname in logs
46
+ let base: Js.Json.t = %raw("{}")
47
+
45
48
  switch logStrategy {
46
49
  | EcsFile =>
47
50
  makeWithOptionsAndTransport(
48
51
  {
49
52
  ...Pino.ECS.make(),
50
53
  customLevels: logLevels,
54
+ base,
51
55
  },
52
56
  Transport.make(pinoFile),
53
57
  )
54
- | EcsConsoleMultistream => makeMultiStreamLogger(~logFile=None, ~options=Some(Pino.ECS.make()))
58
+ | EcsConsoleMultistream =>
59
+ makeMultiStreamLogger(~logFile=None, ~options=Some({...Pino.ECS.make(), base}))
55
60
  | EcsConsole =>
56
61
  make({
57
62
  ...Pino.ECS.make(),
58
63
  level: userLogLevel,
59
64
  customLevels: logLevels,
65
+ base,
60
66
  })
61
67
  | FileOnly =>
62
68
  makeWithOptionsAndTransport(
63
69
  {
64
70
  customLevels: logLevels,
65
71
  level: defaultFileLogLevel,
72
+ base,
66
73
  },
67
74
  Transport.make(pinoFile),
68
75
  )
69
- | ConsoleRaw => makeMultiStreamLogger(~logFile=None, ~options=None)
70
- | ConsolePretty => makeMultiStreamLogger(~logFile=None, ~options=None)
71
- | Both => makeMultiStreamLogger(~logFile=Some(logFilePath), ~options=None)
76
+ | ConsoleRaw => makeMultiStreamLogger(~logFile=None, ~options=Some({base: base}))
77
+ | ConsolePretty => makeMultiStreamLogger(~logFile=None, ~options=Some({base: base}))
78
+ | Both => makeMultiStreamLogger(~logFile=Some(logFilePath), ~options=Some({base: base}))
72
79
  }
73
80
  }
74
81
 
@@ -71,27 +71,35 @@ function makeLogger(logStrategy, logFilePath, defaultFileLogLevel, userLogLevel)
71
71
  var makeMultiStreamLogger = function (none, none$1) {
72
72
  return Pino.MultiStreamLogger.make(userLogLevel, logLevels, none, none$1, defaultFileLogLevel);
73
73
  };
74
+ var base = {};
74
75
  switch (logStrategy) {
75
76
  case "ecs-file" :
76
77
  var newrecord = Caml_obj.obj_dup(Pino.ECS.make());
77
- return Pino$1.pino((newrecord.customLevels = logLevels, newrecord), Pino$1.transport(pinoFile));
78
+ return Pino$1.pino((newrecord.base = base, newrecord.customLevels = logLevels, newrecord), Pino$1.transport(pinoFile));
78
79
  case "ecs-console" :
79
80
  var newrecord$1 = Caml_obj.obj_dup(Pino.ECS.make());
80
- return Pino$1.pino((newrecord$1.customLevels = logLevels, newrecord$1.level = userLogLevel, newrecord$1));
81
+ return Pino$1.pino((newrecord$1.base = base, newrecord$1.customLevels = logLevels, newrecord$1.level = userLogLevel, newrecord$1));
81
82
  case "ecs-console-multistream" :
82
- return makeMultiStreamLogger(undefined, Pino.ECS.make());
83
+ var newrecord$2 = Caml_obj.obj_dup(Pino.ECS.make());
84
+ return makeMultiStreamLogger(undefined, (newrecord$2.base = base, newrecord$2));
83
85
  case "file-only" :
84
86
  return Pino$1.pino({
85
87
  level: defaultFileLogLevel,
86
- customLevels: logLevels
88
+ customLevels: logLevels,
89
+ base: base
87
90
  }, Pino$1.transport(pinoFile));
88
91
  case "console-raw" :
89
92
  case "console-pretty" :
90
- return makeMultiStreamLogger(undefined, undefined);
93
+ break;
91
94
  case "both-prettyconsole" :
92
- return makeMultiStreamLogger(logFilePath, undefined);
95
+ return makeMultiStreamLogger(logFilePath, {
96
+ base: base
97
+ });
93
98
 
94
99
  }
100
+ return makeMultiStreamLogger(undefined, {
101
+ base: base
102
+ });
95
103
  }
96
104
 
97
105
  function setLogger(l) {