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
@@ -2,168 +2,159 @@
2
2
 
3
3
  import * as Table from "../db/Table.res.mjs";
4
4
  import * as Utils from "../Utils.res.mjs";
5
- import * as Js_exn from "rescript/lib/es6/js_exn.js";
6
5
  import * as Logging from "../Logging.res.mjs";
7
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
6
+ import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
8
7
  import * as Persistence from "../Persistence.res.mjs";
9
8
  import * as EntityHistory from "../db/EntityHistory.res.mjs";
10
9
  import * as InternalTable from "../db/InternalTable.res.mjs";
10
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
11
11
  import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
12
- import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js";
12
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
13
13
 
14
14
  function getClickHouseFieldType(fieldType, isNullable, isArray) {
15
- var baseType;
15
+ let baseType;
16
16
  if (typeof fieldType !== "object") {
17
17
  switch (fieldType) {
18
18
  case "Boolean" :
19
- baseType = "Bool";
20
- break;
19
+ baseType = "Bool";
20
+ break;
21
21
  case "Uint32" :
22
- baseType = "UInt32";
23
- break;
22
+ baseType = "UInt32";
23
+ break;
24
24
  case "UInt52" :
25
25
  case "UInt64" :
26
- baseType = "UInt64";
27
- break;
26
+ baseType = "UInt64";
27
+ break;
28
28
  case "Number" :
29
- baseType = "Float64";
30
- break;
29
+ baseType = "Float64";
30
+ break;
31
31
  case "Int32" :
32
32
  case "Serial" :
33
- baseType = "Int32";
34
- break;
33
+ baseType = "Int32";
34
+ break;
35
35
  case "BigSerial" :
36
- baseType = "Int64";
37
- break;
36
+ baseType = "Int64";
37
+ break;
38
38
  case "String" :
39
39
  case "Json" :
40
- baseType = "String";
41
- break;
40
+ baseType = "String";
41
+ break;
42
42
  case "Date" :
43
- baseType = "DateTime64(3, 'UTC')";
44
- break;
45
-
43
+ baseType = "DateTime64(3, 'UTC')";
44
+ break;
46
45
  }
47
46
  } else {
48
47
  switch (fieldType.type) {
49
48
  case "BigInt" :
50
- var precision = fieldType.precision;
51
- baseType = precision !== undefined && precision <= 38 ? "Decimal(" + precision.toString() + ",0)" : "String";
52
- break;
49
+ let precision = fieldType.precision;
50
+ baseType = precision !== undefined && precision <= 38 ? `Decimal(` + precision.toString() + `,0)` : "String";
51
+ break;
53
52
  case "BigDecimal" :
54
- var config = fieldType.config;
55
- if (config !== undefined) {
56
- var scale = config[1];
57
- var precision$1 = config[0];
58
- baseType = precision$1 > 38 || scale > precision$1 ? "String" : "Decimal(" + precision$1.toString() + "," + scale.toString() + ")";
59
- } else {
60
- baseType = "String";
61
- }
62
- break;
53
+ let config = fieldType.config;
54
+ if (config !== undefined) {
55
+ let scale = config[1];
56
+ let precision$1 = config[0];
57
+ baseType = precision$1 > 38 || scale > precision$1 ? "String" : `Decimal(` + precision$1.toString() + `,` + scale.toString() + `)`;
58
+ } else {
59
+ baseType = "String";
60
+ }
61
+ break;
63
62
  case "Enum" :
64
- var config$1 = fieldType.config;
65
- var variantsLength = config$1.variants.length;
66
- var enumType = variantsLength <= 127 ? "Enum8" : "Enum16";
67
- var enumValues = Belt_Array.map(config$1.variants, (function (variant) {
68
- return "'" + variant + "'";
69
- })).join(", ");
70
- baseType = enumType + "(" + enumValues + ")";
71
- break;
63
+ let config$1 = fieldType.config;
64
+ let variantsLength = config$1.variants.length;
65
+ let enumType = variantsLength <= 127 ? "Enum8" : "Enum16";
66
+ let enumValues = Belt_Array.map(config$1.variants, variant => `'` + variant + `'`).join(", ");
67
+ baseType = enumType + `(` + enumValues + `)`;
68
+ break;
72
69
  case "Entity" :
73
- baseType = "String";
74
- break;
75
-
70
+ baseType = "String";
71
+ break;
76
72
  }
77
73
  }
78
- var baseType$1 = isArray ? "Array(" + baseType + ")" : baseType;
74
+ let baseType$1 = isArray ? `Array(` + baseType + `)` : baseType;
79
75
  if (isNullable) {
80
- return "Nullable(" + baseType$1 + ")";
76
+ return `Nullable(` + baseType$1 + `)`;
81
77
  } else {
82
78
  return baseType$1;
83
79
  }
84
80
  }
85
81
 
86
82
  function makeClickHouseEntitySchema(table) {
87
- return S$RescriptSchema.schema(function (s) {
88
- var dict = {};
89
- Belt_Array.forEach(table.fields, (function (field) {
90
- if (field.TAG !== "Field") {
91
- return ;
92
- }
93
- var f = field._0;
94
- var fieldName = Table.getDbFieldName(f);
95
- var match = f.fieldType;
96
- var fieldSchema;
97
- if (typeof match !== "object") {
98
- switch (match) {
99
- case "UInt52" :
100
- var uint52Schema = S$RescriptSchema.preprocess(S$RescriptSchema.$$float, (function (param) {
101
- return {
102
- p: (function (unknown) {
103
- return Number(unknown);
104
- })
105
- };
106
- }));
107
- fieldSchema = f.isNullable ? S$RescriptSchema.$$null(uint52Schema) : (
108
- f.isArray ? S$RescriptSchema.array(uint52Schema) : uint52Schema
109
- );
110
- break;
111
- case "Date" :
112
- var dateSchema = Utils.Schema.clickHouseDate;
113
- fieldSchema = f.isNullable ? S$RescriptSchema.$$null(dateSchema) : (
114
- f.isArray ? S$RescriptSchema.array(dateSchema) : dateSchema
115
- );
116
- break;
117
- default:
118
- fieldSchema = f.fieldSchema;
119
- }
120
- } else {
121
- fieldSchema = f.fieldSchema;
122
- }
123
- dict[fieldName] = s.m(fieldSchema);
124
- }));
125
- return dict;
126
- });
83
+ return S$RescriptSchema.schema(s => {
84
+ let dict = {};
85
+ Belt_Array.forEach(table.fields, field => {
86
+ if (field.TAG !== "Field") {
87
+ return;
88
+ }
89
+ let f = field._0;
90
+ let fieldName = Table.getDbFieldName(f);
91
+ let match = f.fieldType;
92
+ let fieldSchema;
93
+ if (typeof match !== "object") {
94
+ switch (match) {
95
+ case "UInt52" :
96
+ let uint52Schema = S$RescriptSchema.preprocess(S$RescriptSchema.float, param => ({
97
+ p: unknown => parseFloat(unknown)
98
+ }));
99
+ fieldSchema = f.isNullable ? S$RescriptSchema.$$null(uint52Schema) : (
100
+ f.isArray ? S$RescriptSchema.array(uint52Schema) : uint52Schema
101
+ );
102
+ break;
103
+ case "Date" :
104
+ let dateSchema = Utils.Schema.clickHouseDate;
105
+ fieldSchema = f.isNullable ? S$RescriptSchema.$$null(dateSchema) : (
106
+ f.isArray ? S$RescriptSchema.array(dateSchema) : dateSchema
107
+ );
108
+ break;
109
+ default:
110
+ fieldSchema = f.fieldSchema;
111
+ }
112
+ } else {
113
+ fieldSchema = f.fieldSchema;
114
+ }
115
+ dict[fieldName] = s.m(fieldSchema);
116
+ });
117
+ return dict;
118
+ });
127
119
  }
128
120
 
129
- var logger = Logging.createChild({
130
- context: "ClickHouse"
131
- });
121
+ let logger = Logging.createChild({
122
+ context: "ClickHouse"
123
+ });
132
124
 
133
125
  async function insertWithRetry(client, table, values, format, retriesOpt) {
134
- var retries = retriesOpt !== undefined ? retriesOpt : 8;
126
+ let retries = retriesOpt !== undefined ? retriesOpt : 8;
135
127
  try {
136
128
  return await client.insert({
137
- table: table,
138
- values: values,
139
- format: format
140
- });
141
- }
142
- catch (raw_exn){
143
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
129
+ table: table,
130
+ values: values,
131
+ format: format
132
+ });
133
+ } catch (raw_exn) {
134
+ let exn = Primitive_exceptions.internalToException(raw_exn);
144
135
  if (retries > 0) {
145
- var delayMs = Math.min(1000, 100 + (Math.imul(900, 8 - retries | 0) / 7 | 0) | 0);
136
+ let delayMs = Math.min(1000, 100 + ((900 * (8 - retries | 0) | 0) / 7 | 0) | 0);
146
137
  if (values.length > 1) {
147
138
  Logging.childWarn(logger, {
148
- msg: "ClickHouse insert failed, splitting batch in half and retrying",
149
- table: table,
150
- batchSize: values.length,
151
- retriesLeft: retries,
152
- err: Utils.prettifyExn(exn)
153
- });
139
+ msg: "ClickHouse insert failed, splitting batch in half and retrying",
140
+ table: table,
141
+ batchSize: values.length,
142
+ retriesLeft: retries,
143
+ err: Utils.prettifyExn(exn)
144
+ });
154
145
  await Utils.delay(delayMs);
155
- var mid = (values.length >> 1);
156
- var first = values.slice(0, mid);
157
- var second = values.slice(mid);
146
+ let mid = (values.length >> 1);
147
+ let first = values.slice(0, mid);
148
+ let second = values.slice(mid);
158
149
  await insertWithRetry(client, table, first, format, retries - 1 | 0);
159
150
  return await insertWithRetry(client, table, second, format, retries - 1 | 0);
160
151
  }
161
152
  Logging.childWarn(logger, {
162
- msg: "ClickHouse insert failed, retrying after delay",
163
- table: table,
164
- retriesLeft: retries,
165
- err: Utils.prettifyExn(exn)
166
- });
153
+ msg: "ClickHouse insert failed, retrying after delay",
154
+ table: table,
155
+ retriesLeft: retries,
156
+ err: Utils.prettifyExn(exn)
157
+ });
167
158
  await Utils.delay(delayMs);
168
159
  return await insertWithRetry(client, table, values, format, retries - 1 | 0);
169
160
  }
@@ -172,144 +163,158 @@ async function insertWithRetry(client, table, values, format, retriesOpt) {
172
163
  }
173
164
 
174
165
  async function setCheckpointsOrThrow(client, batch, database) {
175
- var checkpointsCount = batch.checkpointIds.length;
166
+ let checkpointsCount = batch.checkpointIds.length;
176
167
  if (checkpointsCount === 0) {
177
- return ;
168
+ return;
178
169
  }
179
- var checkpointRows = [];
180
- for(var idx = 0; idx < checkpointsCount; ++idx){
170
+ let checkpointRows = [];
171
+ for (let idx = 0; idx < checkpointsCount; ++idx) {
181
172
  checkpointRows.push([
182
- batch.checkpointIds[idx].toString(),
183
- batch.checkpointChainIds[idx],
184
- batch.checkpointBlockNumbers[idx],
185
- batch.checkpointBlockHashes[idx],
186
- batch.checkpointEventsProcessed[idx]
187
- ]);
173
+ batch.checkpointIds[idx].toString(),
174
+ batch.checkpointChainIds[idx],
175
+ batch.checkpointBlockNumbers[idx],
176
+ batch.checkpointBlockHashes[idx],
177
+ batch.checkpointEventsProcessed[idx]
178
+ ]);
188
179
  }
189
180
  try {
190
- return await insertWithRetry(client, database + ".\`" + InternalTable.Checkpoints.table.tableName + "\`", checkpointRows, "JSONCompactEachRow", undefined);
191
- }
192
- catch (raw_exn){
193
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
181
+ return await insertWithRetry(client, database + `.\`` + InternalTable.Checkpoints.table.tableName + `\``, checkpointRows, "JSONCompactEachRow", undefined);
182
+ } catch (raw_exn) {
183
+ let exn = Primitive_exceptions.internalToException(raw_exn);
194
184
  throw {
195
- RE_EXN_ID: Persistence.StorageError,
196
- message: "Failed to insert checkpoints into ClickHouse table \"" + InternalTable.Checkpoints.table.tableName + "\"",
197
- reason: Utils.prettifyExn(exn),
198
- Error: new Error()
199
- };
185
+ RE_EXN_ID: Persistence.StorageError,
186
+ message: `Failed to insert checkpoints into ClickHouse table "` + InternalTable.Checkpoints.table.tableName + `"`,
187
+ reason: Utils.prettifyExn(exn),
188
+ Error: new Error()
189
+ };
200
190
  }
201
191
  }
202
192
 
203
193
  async function setUpdatesOrThrow(client, cache, updates, entityConfig, database) {
204
194
  if (updates.length === 0) {
205
- return ;
195
+ return;
206
196
  }
207
- var cached = cache.get(entityConfig);
208
- var match;
197
+ let cached = cache.get(entityConfig);
198
+ let match;
209
199
  if (cached !== undefined) {
210
200
  match = cached;
211
201
  } else {
212
- var cached_tableName = database + ".\`" + EntityHistory.historyTableName(entityConfig.name, entityConfig.index) + "\`";
213
- var cached_convertOrThrow = S$RescriptSchema.compile(S$RescriptSchema.union([
214
- EntityHistory.makeSetUpdateSchema(makeClickHouseEntitySchema(entityConfig.table)),
215
- S$RescriptSchema.object(function (s) {
216
- s.tag(EntityHistory.changeFieldName, "DELETE");
217
- return {
218
- type: "DELETE",
219
- entityId: s.f(Table.idFieldName, S$RescriptSchema.string),
220
- checkpointId: s.f(EntityHistory.checkpointIdFieldName, EntityHistory.unsafeCheckpointIdSchema)
221
- };
222
- })
223
- ]), "Output", "Json", "Sync", false);
224
- var cached$1 = {
202
+ let cached_tableName = database + `.\`` + EntityHistory.historyTableName(entityConfig.name, entityConfig.index) + `\``;
203
+ let cached_convertOrThrow = S$RescriptSchema.compile(S$RescriptSchema.union([
204
+ EntityHistory.makeSetUpdateSchema(makeClickHouseEntitySchema(entityConfig.table)),
205
+ S$RescriptSchema.object(s => {
206
+ s.tag(EntityHistory.changeFieldName, "DELETE");
207
+ return {
208
+ type: "DELETE",
209
+ entityId: s.f(Table.idFieldName, S$RescriptSchema.string),
210
+ checkpointId: s.f(EntityHistory.checkpointIdFieldName, EntityHistory.unsafeCheckpointIdSchema)
211
+ };
212
+ })
213
+ ]), "Output", "Json", "Sync", false);
214
+ let cached$1 = {
225
215
  tableName: cached_tableName,
226
216
  convertOrThrow: cached_convertOrThrow
227
217
  };
228
218
  cache.set(entityConfig, cached$1);
229
219
  match = cached$1;
230
220
  }
231
- var convertOrThrow = match.convertOrThrow;
232
- var tableName = match.tableName;
221
+ let convertOrThrow = match.convertOrThrow;
222
+ let tableName = match.tableName;
233
223
  try {
234
- var values = updates.map(function (update) {
235
- return convertOrThrow(update.latestChange);
236
- });
224
+ let values = updates.map(update => convertOrThrow(update.latestChange));
237
225
  return await insertWithRetry(client, tableName, values, "JSONEachRow", undefined);
238
- }
239
- catch (raw_exn){
240
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
226
+ } catch (raw_exn) {
227
+ let exn = Primitive_exceptions.internalToException(raw_exn);
241
228
  throw {
242
- RE_EXN_ID: Persistence.StorageError,
243
- message: "Failed to insert items into ClickHouse table \"" + tableName + "\"",
244
- reason: Utils.prettifyExn(exn),
245
- Error: new Error()
246
- };
229
+ RE_EXN_ID: Persistence.StorageError,
230
+ message: `Failed to insert items into ClickHouse table "` + tableName + `"`,
231
+ reason: Utils.prettifyExn(exn),
232
+ Error: new Error()
233
+ };
247
234
  }
248
235
  }
249
236
 
250
237
  function makeCreateHistoryTableQuery(entityConfig, database) {
251
- var fieldDefinitions = Belt_Array.keepMap(entityConfig.table.fields, (function (field) {
252
- if (field.TAG !== "Field") {
253
- return ;
254
- }
255
- var field$1 = field._0;
256
- var fieldName = Table.getDbFieldName(field$1);
257
- var clickHouseType = getClickHouseFieldType(field$1.fieldType, field$1.isNullable, field$1.isArray);
258
- return "\`" + fieldName + "\` " + clickHouseType;
259
- }));
260
- return "CREATE TABLE IF NOT EXISTS " + database + ".\`" + EntityHistory.historyTableName(entityConfig.name, entityConfig.index) + "\` (\n " + fieldDefinitions.join(",\n ") + ",\n \`" + EntityHistory.checkpointIdFieldName + "\` " + getClickHouseFieldType("UInt64", false, false) + ",\n \`" + EntityHistory.changeFieldName + "\` " + getClickHouseFieldType({
261
- type: "Enum",
262
- config: EntityHistory.RowAction.config
263
- }, false, false) + "\n)\nENGINE = MergeTree()\nORDER BY (" + Table.idFieldName + ", " + EntityHistory.checkpointIdFieldName + ")";
238
+ let fieldDefinitions = Belt_Array.keepMap(entityConfig.table.fields, field => {
239
+ if (field.TAG !== "Field") {
240
+ return;
241
+ }
242
+ let field$1 = field._0;
243
+ let fieldName = Table.getDbFieldName(field$1);
244
+ let clickHouseType = getClickHouseFieldType(field$1.fieldType, field$1.isNullable, field$1.isArray);
245
+ return `\`` + fieldName + `\` ` + clickHouseType;
246
+ });
247
+ return `CREATE TABLE IF NOT EXISTS ` + database + `.\`` + EntityHistory.historyTableName(entityConfig.name, entityConfig.index) + `\` (
248
+ ` + fieldDefinitions.join(",\n ") + `,
249
+ \`` + EntityHistory.checkpointIdFieldName + `\` ` + getClickHouseFieldType("UInt64", false, false) + `,
250
+ \`` + EntityHistory.changeFieldName + `\` ` + getClickHouseFieldType({
251
+ type: "Enum",
252
+ config: EntityHistory.RowAction.config
253
+ }, false, false) + `
254
+ )
255
+ ENGINE = MergeTree()
256
+ ORDER BY (` + Table.idFieldName + `, ` + EntityHistory.checkpointIdFieldName + `)`;
264
257
  }
265
258
 
266
259
  function makeCreateCheckpointsTableQuery(database) {
267
- return "CREATE TABLE IF NOT EXISTS " + database + ".\`" + InternalTable.Checkpoints.table.tableName + "\` (\n \`" + "id" + "\` " + getClickHouseFieldType("UInt64", false, false) + ",\n \`" + "chain_id" + "\` " + getClickHouseFieldType("Int32", false, false) + ",\n \`" + "block_number" + "\` " + getClickHouseFieldType("Int32", false, false) + ",\n \`" + "block_hash" + "\` " + getClickHouseFieldType("String", true, false) + ",\n \`" + "events_processed" + "\` " + getClickHouseFieldType("UInt64", false, false) + "\n)\nENGINE = MergeTree()\nORDER BY (" + "id" + ")";
260
+ return `CREATE TABLE IF NOT EXISTS ` + database + `.\`` + InternalTable.Checkpoints.table.tableName + `\` (
261
+ \`` + "id" + `\` ` + getClickHouseFieldType("UInt64", false, false) + `,
262
+ \`` + "chain_id" + `\` ` + getClickHouseFieldType("Int32", false, false) + `,
263
+ \`` + "block_number" + `\` ` + getClickHouseFieldType("Int32", false, false) + `,
264
+ \`` + "block_hash" + `\` ` + getClickHouseFieldType("String", true, false) + `,
265
+ \`` + "events_processed" + `\` ` + getClickHouseFieldType("UInt64", false, false) + `
266
+ )
267
+ ENGINE = MergeTree()
268
+ ORDER BY (` + "id" + `)`;
268
269
  }
269
270
 
270
271
  function makeCreateViewQuery(entityConfig, database) {
271
- var historyTableName = EntityHistory.historyTableName(entityConfig.name, entityConfig.index);
272
- var checkpointsTableName = InternalTable.Checkpoints.table.tableName;
273
- var entityFields = Belt_Array.keepMap(entityConfig.table.fields, (function (field) {
274
- if (field.TAG !== "Field") {
275
- return ;
276
- }
277
- var fieldName = Table.getDbFieldName(field._0);
278
- return "\`" + fieldName + "\`";
279
- })).join(", ");
280
- return "CREATE VIEW IF NOT EXISTS " + database + ".\`" + entityConfig.name + "\` AS\nSELECT " + entityFields + "\nFROM (\n SELECT " + entityFields + ", \`" + EntityHistory.changeFieldName + "\`\n FROM " + database + ".\`" + historyTableName + "\`\n WHERE \`" + EntityHistory.checkpointIdFieldName + "\` <= (SELECT max(" + "id" + ") FROM " + database + ".\`" + checkpointsTableName + "\`)\n ORDER BY \`" + EntityHistory.checkpointIdFieldName + "\` DESC\n LIMIT 1 BY \`" + Table.idFieldName + "\`\n)\nWHERE \`" + EntityHistory.changeFieldName + "\` = '" + "SET" + "'";
272
+ let historyTableName = EntityHistory.historyTableName(entityConfig.name, entityConfig.index);
273
+ let checkpointsTableName = InternalTable.Checkpoints.table.tableName;
274
+ let entityFields = Belt_Array.keepMap(entityConfig.table.fields, field => {
275
+ if (field.TAG !== "Field") {
276
+ return;
277
+ }
278
+ let fieldName = Table.getDbFieldName(field._0);
279
+ return `\`` + fieldName + `\``;
280
+ }).join(", ");
281
+ return `CREATE VIEW IF NOT EXISTS ` + database + `.\`` + entityConfig.name + `\` AS
282
+ SELECT ` + entityFields + `
283
+ FROM (
284
+ SELECT ` + entityFields + `, \`` + EntityHistory.changeFieldName + `\`
285
+ FROM ` + database + `.\`` + historyTableName + `\`
286
+ WHERE \`` + EntityHistory.checkpointIdFieldName + `\` <= (SELECT max(` + "id" + `) FROM ` + database + `.\`` + checkpointsTableName + `\`)
287
+ ORDER BY \`` + EntityHistory.checkpointIdFieldName + `\` DESC
288
+ LIMIT 1 BY \`` + Table.idFieldName + `\`
289
+ )
290
+ WHERE \`` + EntityHistory.changeFieldName + `\` = '` + "SET" + `'`;
281
291
  }
282
292
 
283
293
  async function initialize(client, database, entities, param) {
284
294
  try {
285
295
  await client.exec({
286
- query: "TRUNCATE DATABASE IF EXISTS " + database
287
- });
296
+ query: `TRUNCATE DATABASE IF EXISTS ` + database
297
+ });
288
298
  await client.exec({
289
- query: "CREATE DATABASE IF NOT EXISTS " + database
290
- });
299
+ query: `CREATE DATABASE IF NOT EXISTS ` + database
300
+ });
291
301
  await client.exec({
292
- query: "USE " + database
293
- });
294
- await Promise.all(Belt_Array.map(entities, (function (entityConfig) {
295
- return client.exec({
296
- query: makeCreateHistoryTableQuery(entityConfig, database)
297
- });
298
- })));
302
+ query: `USE ` + database
303
+ });
304
+ await Promise.all(Belt_Array.map(entities, entityConfig => client.exec({
305
+ query: makeCreateHistoryTableQuery(entityConfig, database)
306
+ })));
299
307
  await client.exec({
300
- query: makeCreateCheckpointsTableQuery(database)
301
- });
302
- await Promise.all(Belt_Array.map(entities, (function (entityConfig) {
303
- return client.exec({
304
- query: makeCreateViewQuery(entityConfig, database)
305
- });
306
- })));
308
+ query: makeCreateCheckpointsTableQuery(database)
309
+ });
310
+ await Promise.all(Belt_Array.map(entities, entityConfig => client.exec({
311
+ query: makeCreateViewQuery(entityConfig, database)
312
+ })));
307
313
  return Logging.trace("ClickHouse sink initialization completed successfully");
308
- }
309
- catch (raw_exn){
310
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
314
+ } catch (raw_exn) {
315
+ let exn = Primitive_exceptions.internalToException(raw_exn);
311
316
  Logging.errorWithExn(exn, "Failed to initialize ClickHouse sink");
312
- return Js_exn.raiseError("ClickHouse initialization failed");
317
+ return Stdlib_JsError.throwWithMessage("ClickHouse initialization failed");
313
318
  }
314
319
  }
315
320
 
@@ -317,49 +322,47 @@ async function resume(client, database, checkpointId) {
317
322
  try {
318
323
  try {
319
324
  await client.exec({
320
- query: "USE " + database
321
- });
322
- }
323
- catch (raw_exn){
324
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
325
- Logging.errorWithExn(exn, "ClickHouse sink database \"" + database + "\" not found. Please run 'envio start -r' to reinitialize the indexer (it'll also drop Postgres database).");
326
- Js_exn.raiseError("ClickHouse resume failed");
325
+ query: `USE ` + database
326
+ });
327
+ } catch (raw_exn) {
328
+ let exn = Primitive_exceptions.internalToException(raw_exn);
329
+ Logging.errorWithExn(exn, `ClickHouse sink database "` + database + `" not found. Please run 'envio start -r' to reinitialize the indexer (it'll also drop Postgres database).`);
330
+ Stdlib_JsError.throwWithMessage("ClickHouse resume failed");
327
331
  }
328
- var tablesResult = await client.query({
329
- query: "SHOW TABLES FROM " + database + " LIKE '" + EntityHistory.historyTablePrefix + "%'"
330
- });
331
- var tables = await tablesResult.json();
332
- await Promise.all(Belt_Array.map(tables, (function (table) {
333
- var tableName = table.name;
334
- return client.exec({
335
- query: "ALTER TABLE " + database + ".\`" + tableName + "\` DELETE WHERE \`" + EntityHistory.checkpointIdFieldName + "\` > " + checkpointId.toString()
336
- });
337
- })));
332
+ let tablesResult = await client.query({
333
+ query: `SHOW TABLES FROM ` + database + ` LIKE '` + EntityHistory.historyTablePrefix + `%'`
334
+ });
335
+ let tables = await tablesResult.json();
336
+ await Promise.all(Belt_Array.map(tables, table => {
337
+ let tableName = table.name;
338
+ return client.exec({
339
+ query: `ALTER TABLE ` + database + `.\`` + tableName + `\` DELETE WHERE \`` + EntityHistory.checkpointIdFieldName + `\` > ` + checkpointId.toString()
340
+ });
341
+ }));
338
342
  return await client.exec({
339
- query: "DELETE FROM " + database + ".\`" + InternalTable.Checkpoints.table.tableName + "\` WHERE \`" + Table.idFieldName + "\` > " + checkpointId.toString()
340
- });
341
- }
342
- catch (raw_exn$1){
343
- var exn$1 = Caml_js_exceptions.internalToOCamlException(raw_exn$1);
343
+ query: `DELETE FROM ` + database + `.\`` + InternalTable.Checkpoints.table.tableName + `\` WHERE \`` + Table.idFieldName + `\` > ` + checkpointId.toString()
344
+ });
345
+ } catch (raw_exn$1) {
346
+ let exn$1 = Primitive_exceptions.internalToException(raw_exn$1);
344
347
  if (exn$1.RE_EXN_ID === Persistence.StorageError) {
345
348
  throw exn$1;
346
349
  }
347
350
  Logging.errorWithExn(exn$1, "Failed to resume ClickHouse sink");
348
- return Js_exn.raiseError("ClickHouse resume failed");
351
+ return Stdlib_JsError.throwWithMessage("ClickHouse resume failed");
349
352
  }
350
353
  }
351
354
 
352
355
  export {
353
- getClickHouseFieldType ,
354
- makeClickHouseEntitySchema ,
355
- logger ,
356
- insertWithRetry ,
357
- setCheckpointsOrThrow ,
358
- setUpdatesOrThrow ,
359
- makeCreateHistoryTableQuery ,
360
- makeCreateCheckpointsTableQuery ,
361
- makeCreateViewQuery ,
362
- initialize ,
363
- resume ,
356
+ getClickHouseFieldType,
357
+ makeClickHouseEntitySchema,
358
+ logger,
359
+ insertWithRetry,
360
+ setCheckpointsOrThrow,
361
+ setUpdatesOrThrow,
362
+ makeCreateHistoryTableQuery,
363
+ makeCreateCheckpointsTableQuery,
364
+ makeCreateViewQuery,
365
+ initialize,
366
+ resume,
364
367
  }
365
368
  /* logger Not a pure module */