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
@@ -1,27 +1,51 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as Js_exn from "rescript/lib/es6/js_exn.js";
3
+ import * as Utils from "./Utils.res.mjs";
4
4
  import * as Logging from "./Logging.res.mjs";
5
- import * as Caml_obj from "rescript/lib/es6/caml_obj.js";
6
- import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
7
- import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
5
+ import * as Belt_Option from "@rescript/runtime/lib/es6/Belt_Option.js";
6
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
7
+ import * as Primitive_object from "@rescript/runtime/lib/es6/Primitive_object.js";
8
8
 
9
- var eventRegistrations = {};
9
+ let version = Utils.EnvioPackage.value.version;
10
+
11
+ let existing = globalThis.__envioRegistry;
12
+
13
+ let registry;
14
+
15
+ if (existing == null) {
16
+ let fresh_eventRegistrations = {};
17
+ let fresh_activeRegistration = {
18
+ contents: undefined
19
+ };
20
+ let fresh_preRegistered = [];
21
+ let fresh = {
22
+ version: version,
23
+ eventRegistrations: fresh_eventRegistrations,
24
+ activeRegistration: fresh_activeRegistration,
25
+ preRegistered: fresh_preRegistered
26
+ };
27
+ globalThis.__envioRegistry = fresh;
28
+ registry = fresh;
29
+ } else {
30
+ registry = existing.version === version ? existing : Stdlib_JsError.throwWithMessage(`Multiple incompatible envio versions loaded in the same process: ` + existing.version + ` and ` + version + `. Deduplicate the 'envio' dependency in your project.`);
31
+ }
32
+
33
+ let eventRegistrations = registry.eventRegistrations;
10
34
 
11
35
  function getKey(contractName, eventName) {
12
36
  return contractName + "." + eventName;
13
37
  }
14
38
 
15
39
  function get(contractName, eventName) {
16
- var existing = eventRegistrations[getKey(contractName, eventName)];
40
+ let existing = eventRegistrations[getKey(contractName, eventName)];
17
41
  if (existing !== undefined) {
18
42
  return existing;
19
43
  } else {
20
44
  return {
21
- handler: undefined,
22
- contractRegister: undefined,
23
- eventOptions: undefined
24
- };
45
+ handler: undefined,
46
+ contractRegister: undefined,
47
+ eventOptions: undefined
48
+ };
25
49
  }
26
50
  }
27
51
 
@@ -29,28 +53,26 @@ function set(contractName, eventName, registration) {
29
53
  eventRegistrations[getKey(contractName, eventName)] = registration;
30
54
  }
31
55
 
32
- var activeRegistration = {
33
- contents: undefined
34
- };
56
+ let activeRegistration = registry.activeRegistration;
35
57
 
36
- var preRegistered = [];
58
+ let preRegistered = registry.preRegistered;
37
59
 
38
60
  function withRegistration(fn) {
39
- var r = activeRegistration.contents;
61
+ let r = activeRegistration.contents;
40
62
  if (r !== undefined) {
41
63
  if (r.finished) {
42
- return Js_exn.raiseError("The indexer finished initializing, so no more handlers can be registered. Make sure the handlers are registered on the top level of the file.");
64
+ return Stdlib_JsError.throwWithMessage("The indexer finished initializing, so no more handlers can be registered. Make sure the handlers are registered on the top level of the file.");
43
65
  } else {
44
66
  return fn(r);
45
67
  }
46
68
  } else {
47
69
  preRegistered.push(fn);
48
- return ;
70
+ return;
49
71
  }
50
72
  }
51
73
 
52
74
  function startRegistration(ecosystem, multichain) {
53
- var r = {
75
+ let r = {
54
76
  ecosystem: ecosystem,
55
77
  multichain: multichain,
56
78
  registrations: {
@@ -59,27 +81,26 @@ function startRegistration(ecosystem, multichain) {
59
81
  finished: false
60
82
  };
61
83
  activeRegistration.contents = r;
62
- while(preRegistered.length > 0) {
63
- var fn = preRegistered.pop();
84
+ while (preRegistered.length !== 0) {
85
+ let fn = preRegistered.pop();
64
86
  if (fn !== undefined) {
65
87
  fn(r);
66
88
  }
67
-
68
89
  };
69
90
  }
70
91
 
71
92
  function finishRegistration() {
72
- var r = activeRegistration.contents;
93
+ let r = activeRegistration.contents;
73
94
  if (r !== undefined) {
74
95
  r.finished = true;
75
96
  return r.registrations;
76
97
  } else {
77
- return Js_exn.raiseError("The indexer has not started registering handlers, so can't finish it.");
98
+ return Stdlib_JsError.throwWithMessage("The indexer has not started registering handlers, so can't finish it.");
78
99
  }
79
100
  }
80
101
 
81
102
  function isPendingRegistration() {
82
- var r = activeRegistration.contents;
103
+ let r = activeRegistration.contents;
83
104
  if (r !== undefined) {
84
105
  return !r.finished;
85
106
  } else {
@@ -87,48 +108,36 @@ function isPendingRegistration() {
87
108
  }
88
109
  }
89
110
 
90
- var onBlockOptionsSchema = S$RescriptSchema.schema(function (s) {
91
- return {
92
- name: s.m(S$RescriptSchema.string),
93
- chain: s.m(S$RescriptSchema.$$int),
94
- interval: s.m(S$RescriptSchema.$$Option.getOr(S$RescriptSchema.option(S$RescriptSchema.intMin(S$RescriptSchema.$$int, 1, undefined)), 1)),
95
- startBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int)),
96
- endBlock: s.m(S$RescriptSchema.option(S$RescriptSchema.$$int))
97
- };
98
- });
111
+ function throwIfFinishedRegistration(methodName) {
112
+ let match = activeRegistration.contents;
113
+ if (match === undefined) {
114
+ return;
115
+ }
116
+ let match$1 = match.finished;
117
+ if (match$1) {
118
+ return Stdlib_JsError.throwWithMessage(`Cannot call \`indexer.` + methodName + `\` after the indexer has started. Make sure all handlers are registered at the top level of your handler module.`);
119
+ }
120
+ }
99
121
 
100
- function onBlock(rawOptions, handler) {
101
- withRegistration(function (registration) {
102
- var match = registration.multichain;
103
- if (match === "ordered") {
104
- Js_exn.raiseError("Block Handlers are not supported for ordered multichain mode. Please reach out to the Envio team if you need this feature. Or enable unordered multichain mode by removing `multichain: ordered` from the config.yaml file.");
105
- }
106
- var options = S$RescriptSchema.parseOrThrow(rawOptions, onBlockOptionsSchema);
107
- var chainId = options.chain;
108
- var onBlockByChainId = registration.registrations.onBlockByChainId;
109
- var onBlockConfigs = onBlockByChainId[String(chainId)];
110
- if (onBlockConfigs !== undefined) {
111
- onBlockConfigs.push({
112
- index: onBlockConfigs.length,
113
- name: options.name,
114
- chainId: chainId,
115
- startBlock: options.startBlock,
116
- endBlock: options.endBlock,
117
- interval: options.interval,
118
- handler: handler
119
- });
120
- } else {
121
- onBlockByChainId[chainId] = [{
122
- index: 0,
123
- name: options.name,
124
- chainId: chainId,
125
- startBlock: options.startBlock,
126
- endBlock: options.endBlock,
127
- interval: options.interval,
128
- handler: handler
129
- }];
130
- }
131
- });
122
+ function registerOnBlock(name, chainId, interval, startBlock, endBlock, handler) {
123
+ withRegistration(registration => {
124
+ let match = registration.multichain;
125
+ if (match === "ordered") {
126
+ Stdlib_JsError.throwWithMessage("Block Handlers are not supported for ordered multichain mode. Please reach out to the Envio team if you need this feature. Or enable unordered multichain mode by removing `multichain: ordered` from the config.yaml file.");
127
+ }
128
+ let onBlockByChainId = registration.registrations.onBlockByChainId;
129
+ let key = String(chainId);
130
+ let index = Belt_Option.mapWithDefault(onBlockByChainId[key], 0, configs => configs.length);
131
+ Utils.Dict.push(onBlockByChainId, key, {
132
+ index: index,
133
+ name: name,
134
+ chainId: chainId,
135
+ startBlock: startBlock,
136
+ endBlock: endBlock,
137
+ interval: interval,
138
+ handler: handler
139
+ });
140
+ });
132
141
  }
133
142
 
134
143
  function getHandler(contractName, eventName) {
@@ -139,20 +148,16 @@ function getContractRegister(contractName, eventName) {
139
148
  return get(contractName, eventName).contractRegister;
140
149
  }
141
150
 
142
- function getEventFilters(contractName, eventName) {
143
- return Belt_Option.flatMap(get(contractName, eventName).eventOptions, (function (value) {
144
- return value.eventFilters;
145
- }));
151
+ function getOnEventWhere(contractName, eventName) {
152
+ return Belt_Option.flatMap(get(contractName, eventName).eventOptions, value => value.where);
146
153
  }
147
154
 
148
155
  function isWildcard(contractName, eventName) {
149
- return Belt_Option.getWithDefault(Belt_Option.flatMap(get(contractName, eventName).eventOptions, (function (value) {
150
- return value.wildcard;
151
- })), false);
156
+ return Belt_Option.getWithDefault(Belt_Option.flatMap(get(contractName, eventName).eventOptions, value => value.wildcard), false);
152
157
  }
153
158
 
154
159
  function hasRegistration(contractName, eventName) {
155
- var r = get(contractName, eventName);
160
+ let r = get(contractName, eventName);
156
161
  if (Belt_Option.isSome(r.handler)) {
157
162
  return true;
158
163
  } else {
@@ -161,28 +166,26 @@ function hasRegistration(contractName, eventName) {
161
166
  }
162
167
 
163
168
  function raiseDuplicateRegistration(contractName, eventName, msg, logger) {
164
- var fullMsg = msg + " for " + contractName + "." + eventName;
169
+ let fullMsg = msg + " for " + contractName + "." + eventName;
165
170
  Logging.childError(Logging.createChildFrom(logger, {
166
- contractName: contractName,
167
- eventName: eventName
168
- }), fullMsg);
169
- return Js_exn.raiseError(fullMsg);
171
+ contractName: contractName,
172
+ eventName: eventName
173
+ }), fullMsg);
174
+ return Stdlib_JsError.throwWithMessage(fullMsg);
170
175
  }
171
176
 
172
177
  function eventOptionsMatch(existing, incoming) {
173
178
  if (existing !== undefined) {
174
179
  if (incoming !== undefined && existing.wildcard === incoming.wildcard) {
175
- var a = existing.eventFilters;
176
- var b = incoming.eventFilters;
180
+ let a = existing.where;
181
+ let b = incoming.where;
177
182
  if (a !== undefined) {
178
- if (a.TAG === "Static") {
179
- if (b !== undefined && b.TAG === "Static") {
180
- return Caml_obj.equal(a._0, b._0);
183
+ if (b !== undefined) {
184
+ if (typeof a === "function" || typeof b === "function") {
185
+ return a === b;
181
186
  } else {
182
- return false;
187
+ return Primitive_object.equal(a, b);
183
188
  }
184
- } else if (b !== undefined && b.TAG !== "Static") {
185
- return a._0 === b._0;
186
189
  } else {
187
190
  return false;
188
191
  }
@@ -198,102 +201,99 @@ function eventOptionsMatch(existing, incoming) {
198
201
  }
199
202
 
200
203
  function setEventOptions(contractName, eventName, eventOptions, loggerOpt) {
201
- var logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
204
+ let logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
202
205
  if (eventOptions === undefined) {
203
- return ;
206
+ return;
204
207
  }
205
- var t = get(contractName, eventName);
206
- var existingValue = t.eventOptions;
208
+ let t = get(contractName, eventName);
209
+ let existingValue = t.eventOptions;
207
210
  if (existingValue !== undefined) {
208
211
  if (!eventOptionsMatch(existingValue, eventOptions)) {
209
- return raiseDuplicateRegistration(contractName, eventName, "Cannot register handler with different options. Make sure all handlers for the same event use identical options (wildcard, eventFilters)", logger);
212
+ return raiseDuplicateRegistration(contractName, eventName, "Cannot register handler with different options. Make sure all handlers for the same event use identical options (wildcard, where)", logger);
210
213
  } else {
211
- return ;
214
+ return;
212
215
  }
213
216
  } else {
214
217
  return set(contractName, eventName, {
215
- handler: t.handler,
216
- contractRegister: t.contractRegister,
217
- eventOptions: eventOptions
218
- });
218
+ handler: t.handler,
219
+ contractRegister: t.contractRegister,
220
+ eventOptions: eventOptions
221
+ });
219
222
  }
220
223
  }
221
224
 
222
225
  function setHandler(contractName, eventName, handler, eventOptions, loggerOpt) {
223
- var logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
224
- withRegistration(function (_registration) {
225
- var t = get(contractName, eventName);
226
- var prevHandler = t.handler;
227
- if (prevHandler !== undefined) {
228
- var incomingEventOptions = Belt_Option.map(eventOptions, (function (v) {
229
- return v;
230
- }));
231
- if (!eventOptionsMatch(t.eventOptions, incomingEventOptions)) {
232
- return raiseDuplicateRegistration(contractName, eventName, "Cannot register a second handler with different options. Make sure all handlers for the same event use identical options (wildcard, eventFilters)", logger);
233
- }
234
- var composedHandler = async function (args) {
235
- await prevHandler(args);
236
- return await handler(args);
237
- };
238
- return set(contractName, eventName, {
239
- handler: composedHandler,
240
- contractRegister: t.contractRegister,
241
- eventOptions: t.eventOptions
242
- });
243
- }
244
- setEventOptions(contractName, eventName, eventOptions, logger);
245
- var t$1 = get(contractName, eventName);
246
- set(contractName, eventName, {
247
- handler: handler,
248
- contractRegister: t$1.contractRegister,
249
- eventOptions: t$1.eventOptions
250
- });
226
+ let logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
227
+ withRegistration(_registration => {
228
+ let t = get(contractName, eventName);
229
+ let prevHandler = t.handler;
230
+ if (prevHandler !== undefined) {
231
+ let incomingEventOptions = Belt_Option.map(eventOptions, v => v);
232
+ if (!eventOptionsMatch(t.eventOptions, incomingEventOptions)) {
233
+ return raiseDuplicateRegistration(contractName, eventName, "Cannot register a second handler with different options. Make sure all handlers for the same event use identical options (wildcard, where)", logger);
234
+ }
235
+ let composedHandler = async args => {
236
+ await prevHandler(args);
237
+ return await handler(args);
238
+ };
239
+ return set(contractName, eventName, {
240
+ handler: composedHandler,
241
+ contractRegister: t.contractRegister,
242
+ eventOptions: t.eventOptions
251
243
  });
244
+ }
245
+ setEventOptions(contractName, eventName, eventOptions, logger);
246
+ let t$1 = get(contractName, eventName);
247
+ set(contractName, eventName, {
248
+ handler: handler,
249
+ contractRegister: t$1.contractRegister,
250
+ eventOptions: t$1.eventOptions
251
+ });
252
+ });
252
253
  }
253
254
 
254
255
  function setContractRegister(contractName, eventName, contractRegister, eventOptions, loggerOpt) {
255
- var logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
256
- withRegistration(function (_registration) {
257
- var t = get(contractName, eventName);
258
- var prevContractRegister = t.contractRegister;
259
- if (prevContractRegister !== undefined) {
260
- var incomingEventOptions = Belt_Option.map(eventOptions, (function (v) {
261
- return v;
262
- }));
263
- if (!eventOptionsMatch(t.eventOptions, incomingEventOptions)) {
264
- return raiseDuplicateRegistration(contractName, eventName, "Cannot register a second contractRegister with different options. Make sure all handlers for the same event use identical options (wildcard, eventFilters)", logger);
265
- }
266
- var composedContractRegister = async function (args) {
267
- await prevContractRegister(args);
268
- return await contractRegister(args);
269
- };
270
- return set(contractName, eventName, {
271
- handler: t.handler,
272
- contractRegister: composedContractRegister,
273
- eventOptions: t.eventOptions
274
- });
275
- }
276
- setEventOptions(contractName, eventName, eventOptions, logger);
277
- var t$1 = get(contractName, eventName);
278
- set(contractName, eventName, {
279
- handler: t$1.handler,
280
- contractRegister: contractRegister,
281
- eventOptions: t$1.eventOptions
282
- });
256
+ let logger = loggerOpt !== undefined ? loggerOpt : Logging.getLogger();
257
+ withRegistration(_registration => {
258
+ let t = get(contractName, eventName);
259
+ let prevContractRegister = t.contractRegister;
260
+ if (prevContractRegister !== undefined) {
261
+ let incomingEventOptions = Belt_Option.map(eventOptions, v => v);
262
+ if (!eventOptionsMatch(t.eventOptions, incomingEventOptions)) {
263
+ return raiseDuplicateRegistration(contractName, eventName, "Cannot register a second contractRegister with different options. Make sure all handlers for the same event use identical options (wildcard, where)", logger);
264
+ }
265
+ let composedContractRegister = async args => {
266
+ await prevContractRegister(args);
267
+ return await contractRegister(args);
268
+ };
269
+ return set(contractName, eventName, {
270
+ handler: t.handler,
271
+ contractRegister: composedContractRegister,
272
+ eventOptions: t.eventOptions
283
273
  });
274
+ }
275
+ setEventOptions(contractName, eventName, eventOptions, logger);
276
+ let t$1 = get(contractName, eventName);
277
+ set(contractName, eventName, {
278
+ handler: t$1.handler,
279
+ contractRegister: contractRegister,
280
+ eventOptions: t$1.eventOptions
281
+ });
282
+ });
284
283
  }
285
284
 
286
285
  export {
287
- startRegistration ,
288
- isPendingRegistration ,
289
- finishRegistration ,
290
- setHandler ,
291
- setContractRegister ,
292
- getHandler ,
293
- getContractRegister ,
294
- getEventFilters ,
295
- isWildcard ,
296
- hasRegistration ,
297
- onBlock ,
286
+ startRegistration,
287
+ isPendingRegistration,
288
+ finishRegistration,
289
+ throwIfFinishedRegistration,
290
+ setHandler,
291
+ setContractRegister,
292
+ getHandler,
293
+ getContractRegister,
294
+ getOnEventWhere,
295
+ isWildcard,
296
+ hasRegistration,
297
+ registerOnBlock,
298
298
  }
299
- /* onBlockOptionsSchema Not a pure module */
299
+ /* existing Not a pure module */
@@ -3,19 +3,20 @@ type registrations = {onBlockByChainId: dict<array<Internal.onBlockConfig>>}
3
3
  let startRegistration: (~ecosystem: Ecosystem.t, ~multichain: Internal.multichain) => unit
4
4
  let isPendingRegistration: unit => bool
5
5
  let finishRegistration: unit => registrations
6
+ let throwIfFinishedRegistration: (~methodName: string) => unit
6
7
 
7
8
  let setHandler: (
8
9
  ~contractName: string,
9
10
  ~eventName: string,
10
11
  Internal.genericHandler<Internal.genericHandlerArgs<'event, Internal.handlerContext>>,
11
- ~eventOptions: option<Internal.eventOptions<'eventFilters>>,
12
+ ~eventOptions: option<Internal.eventOptions<'where>>,
12
13
  ~logger: Pino.t=?,
13
14
  ) => unit
14
15
  let setContractRegister: (
15
16
  ~contractName: string,
16
17
  ~eventName: string,
17
18
  Internal.genericContractRegister<Internal.genericContractRegisterArgs<'event, 'context>>,
18
- ~eventOptions: option<Internal.eventOptions<'eventFilters>>,
19
+ ~eventOptions: option<Internal.eventOptions<'where>>,
19
20
  ~logger: Pino.t=?,
20
21
  ) => unit
21
22
  let getHandler: (~contractName: string, ~eventName: string) => option<Internal.handler>
@@ -23,8 +24,15 @@ let getContractRegister: (
23
24
  ~contractName: string,
24
25
  ~eventName: string,
25
26
  ) => option<Internal.contractRegister>
26
- let getEventFilters: (~contractName: string, ~eventName: string) => option<Js.Json.t>
27
+ let getOnEventWhere: (~contractName: string, ~eventName: string) => option<JSON.t>
27
28
  let isWildcard: (~contractName: string, ~eventName: string) => bool
28
29
  let hasRegistration: (~contractName: string, ~eventName: string) => bool
29
30
 
30
- let onBlock: (unknown, Internal.onBlockArgs => promise<unit>) => unit
31
+ let registerOnBlock: (
32
+ ~name: string,
33
+ ~chainId: int,
34
+ ~interval: int,
35
+ ~startBlock: option<int>,
36
+ ~endBlock: option<int>,
37
+ ~handler: Internal.onBlockArgs => promise<unit>,
38
+ ) => unit
package/src/Hasura.res CHANGED
@@ -27,7 +27,14 @@ let clearMetadataRoute = Rest.route(() => {
27
27
  path: "",
28
28
  input: s => {
29
29
  let _ = s.field("type", S.literal("clear_metadata"))
30
- let _ = s.field("args", S.literal(Js.Obj.empty()))
30
+ let _ = s.field(
31
+ "args",
32
+ S.literal(
33
+ Object.make(),
34
+
35
+ // Otherwise the entity in gql will be prefixed with the schema name (when it's not public)
36
+ ),
37
+ )
31
38
  s->auth
32
39
  },
33
40
  responses,
@@ -58,13 +65,13 @@ let rawBodyRoute = Rest.route(() => {
58
65
  responses,
59
66
  })
60
67
 
61
- let sendOperation = async (~endpoint, ~auth, ~operation: Js.Json.t) => {
68
+ let sendOperation = async (~endpoint, ~auth, ~operation: JSON.t) => {
62
69
  let maxRetries = 3
63
70
  let rec retry = async (~attempt) => {
64
71
  try {
65
72
  let _ = await rawBodyRoute->Rest.fetch(
66
73
  {
67
- "bodyString": operation->Js.Json.stringify,
74
+ "bodyString": operation->JSON.stringify,
68
75
  "auth": auth,
69
76
  },
70
77
  ~client=Rest.client(endpoint),
@@ -72,7 +79,7 @@ let sendOperation = async (~endpoint, ~auth, ~operation: Js.Json.t) => {
72
79
  } catch {
73
80
  | exn =>
74
81
  if attempt < maxRetries {
75
- let backoffMs = Js.Math.pow_float(~base=2.0, ~exp=attempt->Belt.Int.toFloat)->Belt.Float.toInt * 1000
82
+ let backoffMs = Math.pow(2.0, ~exp=attempt->Belt.Int.toFloat)->Belt.Float.toInt * 1000
76
83
  await Time.resolvePromiseAfterDelay(~delayMilliseconds=backoffMs)
77
84
  await retry(~attempt=attempt + 1)
78
85
  } else {
@@ -111,19 +118,18 @@ let trackTables = async (~endpoint, ~auth, ~pgSchema, ~tableNames: array<string>
111
118
  "args": {
112
119
  // If set to false, any warnings will cause the API call to fail and no new tables to be tracked. Otherwise tables that fail to track will be raised as warnings. (default: true)
113
120
  "allow_warnings": false,
114
- "tables": tableNames->Js.Array2.map(tableName =>
121
+ "tables": tableNames->Array.map(tableName =>
115
122
  {
116
123
  "table": {
117
124
  "name": tableName,
118
125
  "schema": pgSchema,
119
126
  },
120
127
  "configuration": {
121
- // Otherwise the entity in gql will be prefixed with the schema name (when it's not public)
122
128
  "custom_name": tableName,
123
129
  },
124
130
  }
125
131
  ),
126
- }->(Utils.magic: 'a => Js.Json.t),
132
+ }->(Utils.magic: 'a => JSON.t),
127
133
  },
128
134
  ~client=Rest.client(endpoint),
129
135
  )
@@ -167,12 +173,12 @@ let createSelectPermission = async (
167
173
  "source": "default",
168
174
  "permission": {
169
175
  "columns": "*",
170
- "filter": Js.Obj.empty(),
176
+ "filter": Object.make(),
171
177
  "limit": responseLimit,
172
- "allow_aggregations": aggregateEntities->Js.Array2.includes(tableName),
178
+ "allow_aggregations": aggregateEntities->Array.includes(tableName),
173
179
  },
174
180
  },
175
- }->(Utils.magic: 'a => Js.Json.t),
181
+ }->(Utils.magic: 'a => JSON.t),
176
182
  )
177
183
  }
178
184
 
@@ -207,11 +213,11 @@ let createEntityRelationship = async (
207
213
  "schema": pgSchema,
208
214
  "name": mappedEntity,
209
215
  },
210
- "column_mapping": Js.Json.parseExn(`{${derivedFromTo}}`),
216
+ "column_mapping": JSON.parseOrThrow(`{${derivedFromTo}}`),
211
217
  },
212
218
  },
213
219
  },
214
- }->(Utils.magic: 'a => Js.Json.t),
220
+ }->(Utils.magic: 'a => JSON.t),
215
221
  )
216
222
  }
217
223
 
@@ -229,7 +235,7 @@ let trackDatabase = async (
229
235
  InternalTable.Views.metaViewName,
230
236
  InternalTable.Views.chainMetadataViewName,
231
237
  ]
232
- let userTableNames = userEntities->Js.Array2.map(entity => entity.table.tableName)
238
+ let userTableNames = userEntities->Array.map(entity => entity.table.tableName)
233
239
  let tableNames = [exposedInternalTableNames, userTableNames]->Belt.Array.concatMany
234
240
 
235
241
  Logging.info("Tracking tables in Hasura")
@@ -238,19 +244,26 @@ let trackDatabase = async (
238
244
 
239
245
  await trackTables(~endpoint, ~auth, ~pgSchema, ~tableNames)
240
246
 
241
- for i in 0 to tableNames->Js.Array2.length - 1 {
242
- let tableName = tableNames->Js.Array2.unsafe_get(i)
243
- await createSelectPermission(~endpoint, ~auth, ~tableName, ~pgSchema, ~responseLimit, ~aggregateEntities)
247
+ for i in 0 to tableNames->Array.length - 1 {
248
+ let tableName = tableNames->Array.getUnsafe(i)
249
+ await createSelectPermission(
250
+ ~endpoint,
251
+ ~auth,
252
+ ~tableName,
253
+ ~pgSchema,
254
+ ~responseLimit,
255
+ ~aggregateEntities,
256
+ )
244
257
  }
245
258
 
246
- for i in 0 to userEntities->Js.Array2.length - 1 {
247
- let entityConfig = userEntities->Js.Array2.unsafe_get(i)
259
+ for i in 0 to userEntities->Array.length - 1 {
260
+ let entityConfig = userEntities->Array.getUnsafe(i)
248
261
  let {tableName} = entityConfig.table
249
262
 
250
263
  //Set array relationships
251
264
  let derivedFromFields = entityConfig.table->Table.getDerivedFromFields
252
- for j in 0 to derivedFromFields->Js.Array2.length - 1 {
253
- let derivedFromField = derivedFromFields->Js.Array2.unsafe_get(j)
265
+ for j in 0 to derivedFromFields->Array.length - 1 {
266
+ let derivedFromField = derivedFromFields->Array.getUnsafe(j)
254
267
  //determines the actual name of the underlying relational field (if it's an entity mapping then suffixes _id for eg.)
255
268
  let relationalFieldName =
256
269
  schema->Schema.getDerivedFromFieldName(derivedFromField)->Utils.unwrapResultExn
@@ -270,8 +283,8 @@ let trackDatabase = async (
270
283
 
271
284
  //Set object relationships
272
285
  let linkedEntityFields = entityConfig.table->Table.getLinkedEntityFields
273
- for j in 0 to linkedEntityFields->Js.Array2.length - 1 {
274
- let (field, linkedEntityName) = linkedEntityFields->Js.Array2.unsafe_get(j)
286
+ for j in 0 to linkedEntityFields->Array.length - 1 {
287
+ let (field, linkedEntityName) = linkedEntityFields->Array.getUnsafe(j)
275
288
  await createEntityRelationship(
276
289
  ~endpoint,
277
290
  ~auth,