envio 3.0.0-alpha.21 → 3.0.0-alpha.22

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 (219) hide show
  1. package/bin.mjs +2 -48
  2. package/evm.schema.json +67 -0
  3. package/fuel.schema.json +67 -0
  4. package/index.d.ts +822 -38
  5. package/index.js +5 -3
  6. package/package.json +10 -8
  7. package/rescript.json +5 -9
  8. package/src/Address.res +4 -5
  9. package/src/Address.res.mjs +9 -12
  10. package/src/Api.res +15 -0
  11. package/src/Api.res.mjs +20 -0
  12. package/src/Batch.res +32 -34
  13. package/src/Batch.res.mjs +172 -187
  14. package/src/Bin.res +89 -0
  15. package/src/Bin.res.mjs +97 -0
  16. package/src/ChainFetcher.res +33 -57
  17. package/src/ChainFetcher.res.mjs +197 -227
  18. package/src/ChainManager.res +6 -14
  19. package/src/ChainManager.res.mjs +74 -85
  20. package/src/ChainMap.res +14 -16
  21. package/src/ChainMap.res.mjs +38 -38
  22. package/src/Config.res +193 -135
  23. package/src/Config.res.mjs +566 -592
  24. package/src/Core.res +182 -0
  25. package/src/Core.res.mjs +207 -0
  26. package/src/Ecosystem.res +25 -4
  27. package/src/Ecosystem.res.mjs +12 -13
  28. package/src/Env.res +20 -13
  29. package/src/Env.res.mjs +124 -113
  30. package/src/EnvSafe.res +269 -0
  31. package/src/EnvSafe.res.mjs +296 -0
  32. package/src/EnvSafe.resi +18 -0
  33. package/src/Envio.res +37 -26
  34. package/src/Envio.res.mjs +59 -60
  35. package/src/ErrorHandling.res +2 -2
  36. package/src/ErrorHandling.res.mjs +15 -15
  37. package/src/EventConfigBuilder.res +219 -81
  38. package/src/EventConfigBuilder.res.mjs +259 -202
  39. package/src/EventProcessing.res +27 -38
  40. package/src/EventProcessing.res.mjs +165 -183
  41. package/src/EventUtils.res +11 -11
  42. package/src/EventUtils.res.mjs +21 -22
  43. package/src/EvmTypes.res +0 -1
  44. package/src/EvmTypes.res.mjs +5 -5
  45. package/src/FetchState.res +360 -256
  46. package/src/FetchState.res.mjs +958 -914
  47. package/src/GlobalState.res +365 -351
  48. package/src/GlobalState.res.mjs +958 -992
  49. package/src/GlobalStateManager.res +1 -2
  50. package/src/GlobalStateManager.res.mjs +36 -44
  51. package/src/HandlerLoader.res +107 -23
  52. package/src/HandlerLoader.res.mjs +128 -38
  53. package/src/HandlerRegister.res +127 -103
  54. package/src/HandlerRegister.res.mjs +164 -164
  55. package/src/HandlerRegister.resi +12 -4
  56. package/src/Hasura.res +35 -22
  57. package/src/Hasura.res.mjs +158 -167
  58. package/src/InMemoryStore.res +20 -27
  59. package/src/InMemoryStore.res.mjs +64 -80
  60. package/src/InMemoryTable.res +34 -39
  61. package/src/InMemoryTable.res.mjs +165 -170
  62. package/src/Internal.res +52 -33
  63. package/src/Internal.res.mjs +84 -81
  64. package/src/LazyLoader.res.mjs +55 -61
  65. package/src/LoadLayer.res +77 -78
  66. package/src/LoadLayer.res.mjs +160 -189
  67. package/src/LoadManager.res +16 -21
  68. package/src/LoadManager.res.mjs +79 -84
  69. package/src/LogSelection.res +236 -68
  70. package/src/LogSelection.res.mjs +211 -141
  71. package/src/Logging.res +13 -9
  72. package/src/Logging.res.mjs +130 -143
  73. package/src/Main.res +428 -51
  74. package/src/Main.res.mjs +528 -271
  75. package/src/Persistence.res +77 -84
  76. package/src/Persistence.res.mjs +131 -132
  77. package/src/PgStorage.res +291 -167
  78. package/src/PgStorage.res.mjs +797 -817
  79. package/src/Prometheus.res +50 -58
  80. package/src/Prometheus.res.mjs +345 -373
  81. package/src/ReorgDetection.res +22 -24
  82. package/src/ReorgDetection.res.mjs +100 -106
  83. package/src/SafeCheckpointTracking.res +7 -7
  84. package/src/SafeCheckpointTracking.res.mjs +40 -43
  85. package/src/SimulateItems.res +41 -49
  86. package/src/SimulateItems.res.mjs +257 -272
  87. package/src/Sink.res +2 -2
  88. package/src/Sink.res.mjs +22 -26
  89. package/src/TableIndices.res +1 -2
  90. package/src/TableIndices.res.mjs +42 -48
  91. package/src/TestIndexer.res +196 -189
  92. package/src/TestIndexer.res.mjs +536 -536
  93. package/src/TestIndexerProxyStorage.res +15 -16
  94. package/src/TestIndexerProxyStorage.res.mjs +98 -122
  95. package/src/TestIndexerWorker.res +4 -0
  96. package/src/TestIndexerWorker.res.mjs +7 -0
  97. package/src/Throttler.res +3 -3
  98. package/src/Throttler.res.mjs +23 -24
  99. package/src/Time.res +1 -1
  100. package/src/Time.res.mjs +18 -21
  101. package/src/TopicFilter.res +3 -3
  102. package/src/TopicFilter.res.mjs +29 -30
  103. package/src/UserContext.res +93 -54
  104. package/src/UserContext.res.mjs +197 -182
  105. package/src/Utils.res +141 -86
  106. package/src/Utils.res.mjs +334 -295
  107. package/src/bindings/BigDecimal.res +0 -2
  108. package/src/bindings/BigDecimal.res.mjs +19 -23
  109. package/src/bindings/ClickHouse.res +28 -27
  110. package/src/bindings/ClickHouse.res.mjs +243 -240
  111. package/src/bindings/DateFns.res +11 -11
  112. package/src/bindings/DateFns.res.mjs +7 -7
  113. package/src/bindings/EventSource.res.mjs +2 -2
  114. package/src/bindings/Express.res +2 -5
  115. package/src/bindings/Hrtime.res +2 -2
  116. package/src/bindings/Hrtime.res.mjs +30 -32
  117. package/src/bindings/Lodash.res.mjs +1 -1
  118. package/src/bindings/NodeJs.res +14 -9
  119. package/src/bindings/NodeJs.res.mjs +20 -20
  120. package/src/bindings/Pino.res +8 -10
  121. package/src/bindings/Pino.res.mjs +40 -43
  122. package/src/bindings/Postgres.res +2 -5
  123. package/src/bindings/Postgres.res.mjs +9 -9
  124. package/src/bindings/PromClient.res +17 -2
  125. package/src/bindings/PromClient.res.mjs +30 -7
  126. package/src/bindings/SDSL.res.mjs +2 -2
  127. package/src/bindings/Viem.res +4 -4
  128. package/src/bindings/Viem.res.mjs +20 -22
  129. package/src/bindings/Vitest.res +1 -1
  130. package/src/bindings/Vitest.res.mjs +2 -2
  131. package/src/bindings/WebSocket.res +1 -1
  132. package/src/db/EntityHistory.res +9 -3
  133. package/src/db/EntityHistory.res.mjs +84 -59
  134. package/src/db/InternalTable.res +62 -60
  135. package/src/db/InternalTable.res.mjs +271 -203
  136. package/src/db/Schema.res +1 -2
  137. package/src/db/Schema.res.mjs +28 -32
  138. package/src/db/Table.res +28 -27
  139. package/src/db/Table.res.mjs +276 -292
  140. package/src/sources/EventRouter.res +21 -16
  141. package/src/sources/EventRouter.res.mjs +55 -57
  142. package/src/sources/Evm.res +17 -1
  143. package/src/sources/Evm.res.mjs +16 -8
  144. package/src/sources/EvmChain.res +15 -17
  145. package/src/sources/EvmChain.res.mjs +40 -42
  146. package/src/sources/Fuel.res +14 -1
  147. package/src/sources/Fuel.res.mjs +16 -8
  148. package/src/sources/FuelSDK.res +1 -1
  149. package/src/sources/FuelSDK.res.mjs +6 -8
  150. package/src/sources/HyperFuel.res +8 -10
  151. package/src/sources/HyperFuel.res.mjs +113 -123
  152. package/src/sources/HyperFuelClient.res.mjs +6 -7
  153. package/src/sources/HyperFuelSource.res +19 -20
  154. package/src/sources/HyperFuelSource.res.mjs +339 -356
  155. package/src/sources/HyperSync.res +11 -13
  156. package/src/sources/HyperSync.res.mjs +206 -220
  157. package/src/sources/HyperSyncClient.res +5 -7
  158. package/src/sources/HyperSyncClient.res.mjs +70 -75
  159. package/src/sources/HyperSyncHeightStream.res +8 -9
  160. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  161. package/src/sources/HyperSyncJsonApi.res +18 -15
  162. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  163. package/src/sources/HyperSyncSource.res +17 -21
  164. package/src/sources/HyperSyncSource.res.mjs +268 -290
  165. package/src/sources/Rpc.res +5 -5
  166. package/src/sources/Rpc.res.mjs +168 -192
  167. package/src/sources/RpcSource.res +166 -167
  168. package/src/sources/RpcSource.res.mjs +972 -1046
  169. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  170. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  171. package/src/sources/SimulateSource.res +1 -1
  172. package/src/sources/SimulateSource.res.mjs +35 -38
  173. package/src/sources/Source.res +1 -1
  174. package/src/sources/Source.res.mjs +3 -3
  175. package/src/sources/SourceManager.res +39 -20
  176. package/src/sources/SourceManager.res.mjs +340 -371
  177. package/src/sources/SourceManager.resi +2 -1
  178. package/src/sources/Svm.res +12 -5
  179. package/src/sources/Svm.res.mjs +44 -41
  180. package/src/tui/Tui.res +23 -12
  181. package/src/tui/Tui.res.mjs +292 -290
  182. package/src/tui/bindings/Ink.res +2 -4
  183. package/src/tui/bindings/Ink.res.mjs +35 -41
  184. package/src/tui/components/BufferedProgressBar.res +7 -7
  185. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  186. package/src/tui/components/CustomHooks.res +1 -2
  187. package/src/tui/components/CustomHooks.res.mjs +102 -122
  188. package/src/tui/components/Messages.res +1 -2
  189. package/src/tui/components/Messages.res.mjs +38 -42
  190. package/src/tui/components/SyncETA.res +10 -11
  191. package/src/tui/components/SyncETA.res.mjs +178 -196
  192. package/src/tui/components/TuiData.res +1 -1
  193. package/src/tui/components/TuiData.res.mjs +7 -6
  194. package/src/vendored/Rest.res +52 -66
  195. package/src/vendored/Rest.res.mjs +324 -364
  196. package/svm.schema.json +67 -0
  197. package/src/Address.gen.ts +0 -8
  198. package/src/Config.gen.ts +0 -19
  199. package/src/Envio.gen.ts +0 -55
  200. package/src/EvmTypes.gen.ts +0 -6
  201. package/src/InMemoryStore.gen.ts +0 -6
  202. package/src/Internal.gen.ts +0 -64
  203. package/src/PgStorage.gen.ts +0 -10
  204. package/src/PgStorage.res.d.mts +0 -5
  205. package/src/Types.ts +0 -56
  206. package/src/bindings/BigDecimal.gen.ts +0 -14
  207. package/src/bindings/BigDecimal.res.d.mts +0 -5
  208. package/src/bindings/BigInt.gen.ts +0 -10
  209. package/src/bindings/BigInt.res +0 -70
  210. package/src/bindings/BigInt.res.d.mts +0 -5
  211. package/src/bindings/BigInt.res.mjs +0 -154
  212. package/src/bindings/Ethers.res.d.mts +0 -5
  213. package/src/bindings/Pino.gen.ts +0 -17
  214. package/src/bindings/Postgres.gen.ts +0 -8
  215. package/src/bindings/Postgres.res.d.mts +0 -5
  216. package/src/bindings/Promise.res +0 -67
  217. package/src/bindings/Promise.res.mjs +0 -26
  218. package/src/db/InternalTable.gen.ts +0 -36
  219. 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 */