envio 2.28.0-alpha.3 → 2.28.0-rc.0

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.
@@ -11,35 +11,6 @@ var Belt_Array = require("rescript/lib/js/belt_Array.js");
11
11
  var EntityHistory = require("./EntityHistory.res.js");
12
12
  var S$RescriptSchema = require("rescript-schema/src/S.res.js");
13
13
 
14
- var blockTimestampFieldName = "block_timestamp";
15
-
16
- var blockNumberFieldName = "block_number";
17
-
18
- var logIndexFieldName = "log_index";
19
-
20
- var isPreRegisteringDynamicContractsFieldName = "is_pre_registering_dynamic_contracts";
21
-
22
- var table = Table.mkTable("event_sync_state", undefined, [
23
- Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
24
- Table.mkField(blockNumberFieldName, "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
25
- Table.mkField(logIndexFieldName, "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
26
- Table.mkField(blockTimestampFieldName, "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
27
- Table.mkField(isPreRegisteringDynamicContractsFieldName, "BOOLEAN", S$RescriptSchema.bool, "false", undefined, undefined, undefined, undefined, undefined)
28
- ]);
29
-
30
- function resetCurrentCurrentSyncStateQuery(pgSchema) {
31
- return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\n SET " + blockNumberFieldName + " = 0, \n " + logIndexFieldName + " = 0, \n " + blockTimestampFieldName + " = 0, \n " + isPreRegisteringDynamicContractsFieldName + " = false;";
32
- }
33
-
34
- var EventSyncState = {
35
- blockTimestampFieldName: blockTimestampFieldName,
36
- blockNumberFieldName: blockNumberFieldName,
37
- logIndexFieldName: logIndexFieldName,
38
- isPreRegisteringDynamicContractsFieldName: isPreRegisteringDynamicContractsFieldName,
39
- table: table,
40
- resetCurrentCurrentSyncStateQuery: resetCurrentCurrentSyncStateQuery
41
- };
42
-
43
14
  var fields = [
44
15
  "id",
45
16
  "start_block",
@@ -47,14 +18,15 @@ var fields = [
47
18
  "source_block",
48
19
  "first_event_block",
49
20
  "buffer_block",
21
+ "progress_block",
50
22
  "ready_at",
51
23
  "events_processed",
24
+ "_progress_log_index",
52
25
  "_is_hyper_sync",
53
- "_latest_processed_block",
54
26
  "_num_batches_fetched"
55
27
  ];
56
28
 
57
- var table$1 = Table.mkTable("envio_chains", undefined, [
29
+ var table = Table.mkTable("envio_chains", undefined, [
58
30
  Table.mkField("id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
59
31
  Table.mkField("start_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
60
32
  Table.mkField("end_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
@@ -64,7 +36,8 @@ var table$1 = Table.mkTable("envio_chains", undefined, [
64
36
  Table.mkField("ready_at", "TIMESTAMP WITH TIME ZONE NULL", S$RescriptSchema.$$null(Utils.Schema.dbDate), undefined, undefined, true, undefined, undefined, undefined),
65
37
  Table.mkField("events_processed", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
66
38
  Table.mkField("_is_hyper_sync", "BOOLEAN", S$RescriptSchema.bool, undefined, undefined, undefined, undefined, undefined, undefined),
67
- Table.mkField("_latest_processed_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
39
+ Table.mkField("progress_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
40
+ Table.mkField("_progress_log_index", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
68
41
  Table.mkField("_num_batches_fetched", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
69
42
  ]);
70
43
 
@@ -73,12 +46,13 @@ function initialFromConfig(chainConfig) {
73
46
  id: chainConfig.id,
74
47
  start_block: chainConfig.startBlock,
75
48
  end_block: Js_null.fromOption(chainConfig.endBlock),
76
- source_block: 0,
49
+ progress_block: -1,
50
+ _progress_log_index: null,
51
+ events_processed: 0,
77
52
  first_event_block: null,
78
53
  buffer_block: -1,
54
+ source_block: 0,
79
55
  ready_at: null,
80
- events_processed: 0,
81
- _latest_processed_block: null,
82
56
  _is_hyper_sync: false,
83
57
  _num_batches_fetched: 0
84
58
  };
@@ -113,53 +87,85 @@ function makeInitialValuesQuery(pgSchema, chainConfigs) {
113
87
  }));
114
88
  return "(" + values.join(", ") + ")";
115
89
  }));
116
- return "INSERT INTO \"" + pgSchema + "\".\"" + table$1.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
90
+ return "INSERT INTO \"" + pgSchema + "\".\"" + table.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
117
91
  }
118
92
 
119
- var updateFields = [
93
+ var metaFields = [
120
94
  "source_block",
121
- "first_event_block",
122
95
  "buffer_block",
96
+ "first_event_block",
123
97
  "ready_at",
124
- "events_processed",
125
98
  "_is_hyper_sync",
126
- "_latest_processed_block",
127
99
  "_num_batches_fetched"
128
100
  ];
129
101
 
130
- function makeSingleUpdateQuery(pgSchema) {
131
- var setClauses = Belt_Array.mapWithIndex(updateFields, (function (index, field) {
102
+ function makeMetaFieldsUpdateQuery(pgSchema) {
103
+ var setClauses = Belt_Array.mapWithIndex(metaFields, (function (index, field) {
132
104
  var paramIndex = index + 2 | 0;
133
105
  return "\"" + field + "\" = $" + String(paramIndex);
134
106
  }));
135
- return "UPDATE \"" + pgSchema + "\".\"" + table$1.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
107
+ return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
108
+ }
109
+
110
+ var progressFields = [
111
+ "progress_block",
112
+ "_progress_log_index",
113
+ "events_processed"
114
+ ];
115
+
116
+ function makeProgressFieldsUpdateQuery(pgSchema) {
117
+ var setClauses = Belt_Array.mapWithIndex(progressFields, (function (index, field) {
118
+ var paramIndex = index + 2 | 0;
119
+ return "\"" + field + "\" = $" + String(paramIndex);
120
+ }));
121
+ return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
122
+ }
123
+
124
+ function setMeta(sql, pgSchema, chainsData) {
125
+ var query = makeMetaFieldsUpdateQuery(pgSchema);
126
+ var promises = [];
127
+ Utils.Dict.forEachWithKey(chainsData, (function (chainId, data) {
128
+ var params = [];
129
+ params.push(chainId);
130
+ metaFields.forEach(function (field) {
131
+ var value = data[field];
132
+ params.push(value);
133
+ });
134
+ promises.push(sql.unsafe(query, params, {prepare: true}));
135
+ }));
136
+ return Promise.all(promises);
136
137
  }
137
138
 
138
- function setValues(sql, pgSchema, chainsData) {
139
- var query = makeSingleUpdateQuery(pgSchema);
140
- return Promise.all(Belt_Array.map(chainsData, (function (chain) {
141
- var params = [];
142
- var idValue = Js_dict.get(chain, "id");
143
- params.push(idValue);
144
- updateFields.forEach(function (field) {
145
- var value = Js_dict.get(chain, field);
146
- params.push(value);
147
- });
148
- return sql.unsafe(query, params, {prepare: true});
149
- })));
139
+ function setProgressedChains(sql, pgSchema, progressedChains) {
140
+ var query = makeProgressFieldsUpdateQuery(pgSchema);
141
+ var promises = [];
142
+ progressedChains.forEach(function (data) {
143
+ var params = [];
144
+ params.push(data.chainId);
145
+ progressFields.forEach(function (field) {
146
+ params.push(field === "events_processed" ? data.totalEventsProcessed : (
147
+ field === "progress_block" ? data.progressBlockNumber : Js_null.fromOption(data.progressNextBlockLogIndex)
148
+ ));
149
+ });
150
+ promises.push(sql.unsafe(query, params, {prepare: true}));
151
+ });
152
+ return Promise.all(promises);
150
153
  }
151
154
 
152
155
  var Chains = {
153
156
  fields: fields,
154
- table: table$1,
157
+ table: table,
155
158
  initialFromConfig: initialFromConfig,
156
159
  makeInitialValuesQuery: makeInitialValuesQuery,
157
- updateFields: updateFields,
158
- makeSingleUpdateQuery: makeSingleUpdateQuery,
159
- setValues: setValues
160
+ metaFields: metaFields,
161
+ makeMetaFieldsUpdateQuery: makeMetaFieldsUpdateQuery,
162
+ progressFields: progressFields,
163
+ makeProgressFieldsUpdateQuery: makeProgressFieldsUpdateQuery,
164
+ setMeta: setMeta,
165
+ setProgressedChains: setProgressedChains
160
166
  };
161
167
 
162
- var table$2 = Table.mkTable("persisted_state", undefined, [
168
+ var table$1 = Table.mkTable("persisted_state", undefined, [
163
169
  Table.mkField("id", "SERIAL", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
164
170
  Table.mkField("envio_version", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
165
171
  Table.mkField("config_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
@@ -169,17 +175,17 @@ var table$2 = Table.mkTable("persisted_state", undefined, [
169
175
  ]);
170
176
 
171
177
  var PersistedState = {
172
- table: table$2
178
+ table: table$1
173
179
  };
174
180
 
175
- var table$3 = Table.mkTable("end_of_block_range_scanned_data", undefined, [
181
+ var table$2 = Table.mkTable("end_of_block_range_scanned_data", undefined, [
176
182
  Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
177
183
  Table.mkField("block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
178
184
  Table.mkField("block_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
179
185
  ]);
180
186
 
181
187
  var EndOfBlockRangeScannedData = {
182
- table: table$3
188
+ table: table$2
183
189
  };
184
190
 
185
191
  var schema = S$RescriptSchema.schema(function (s) {
@@ -199,7 +205,7 @@ var schema = S$RescriptSchema.schema(function (s) {
199
205
  };
200
206
  });
201
207
 
202
- var table$4 = Table.mkTable("raw_events", undefined, [
208
+ var table$3 = Table.mkTable("raw_events", undefined, [
203
209
  Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
204
210
  Table.mkField("event_id", "NUMERIC", S$RescriptSchema.bigint, undefined, undefined, undefined, undefined, undefined, undefined),
205
211
  Table.mkField("event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
@@ -218,7 +224,7 @@ var table$4 = Table.mkTable("raw_events", undefined, [
218
224
 
219
225
  var RawEvents = {
220
226
  schema: schema,
221
- table: table$4
227
+ table: table$3
222
228
  };
223
229
 
224
230
  var metaViewName = "_meta";
@@ -226,11 +232,11 @@ var metaViewName = "_meta";
226
232
  var chainMetadataViewName = "chain_metadata";
227
233
 
228
234
  function makeMetaViewQuery(pgSchema) {
229
- return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \n SELECT \n \"" + "id" + "\" AS \"chainId\",\n \"" + "start_block" + "\" AS \"startBlock\", \n \"" + "end_block" + "\" AS \"endBlock\",\n \"" + "buffer_block" + "\" AS \"bufferBlock\",\n \"" + "ready_at" + "\" AS \"readyAt\",\n \"" + "first_event_block" + "\" AS \"firstEventBlock\",\n \"" + "events_processed" + "\" AS \"eventsProcessed\",\n (\"" + "ready_at" + "\" IS NOT NULL) AS \"isReady\"\n FROM \"" + pgSchema + "\".\"" + table$1.tableName + "\"\n ORDER BY \"" + "id" + "\";";
235
+ return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \n SELECT \n \"" + "id" + "\" AS \"chainId\",\n \"" + "start_block" + "\" AS \"startBlock\", \n \"" + "end_block" + "\" AS \"endBlock\",\n \"" + "progress_block" + "\" AS \"progressBlock\",\n \"" + "buffer_block" + "\" AS \"bufferBlock\",\n \"" + "first_event_block" + "\" AS \"firstEventBlock\",\n \"" + "events_processed" + "\" AS \"eventsProcessed\",\n \"" + "source_block" + "\" AS \"sourceBlock\",\n \"" + "ready_at" + "\" AS \"readyAt\",\n (\"" + "ready_at" + "\" IS NOT NULL) AS \"isReady\"\n FROM \"" + pgSchema + "\".\"" + table.tableName + "\"\n ORDER BY \"" + "id" + "\";";
230
236
  }
231
237
 
232
238
  function makeChainMetadataViewQuery(pgSchema) {
233
- return "CREATE VIEW \"" + pgSchema + "\".\"" + chainMetadataViewName + "\" AS \n SELECT \n \"" + "source_block" + "\" AS \"block_height\",\n \"" + "id" + "\" AS \"chain_id\",\n \"" + "end_block" + "\" AS \"end_block\", \n \"" + "first_event_block" + "\" AS \"first_event_block_number\",\n \"" + "_is_hyper_sync" + "\" AS \"is_hyper_sync\",\n \"" + "buffer_block" + "\" AS \"latest_fetched_block_number\",\n \"" + "_latest_processed_block" + "\" AS \"latest_processed_block\",\n \"" + "_num_batches_fetched" + "\" AS \"num_batches_fetched\",\n \"" + "events_processed" + "\" AS \"num_events_processed\",\n \"" + "start_block" + "\" AS \"start_block\",\n \"" + "ready_at" + "\" AS \"timestamp_caught_up_to_head_or_endblock\"\n FROM \"" + pgSchema + "\".\"" + table$1.tableName + "\";";
239
+ return "CREATE VIEW \"" + pgSchema + "\".\"" + chainMetadataViewName + "\" AS \n SELECT \n \"" + "source_block" + "\" AS \"block_height\",\n \"" + "id" + "\" AS \"chain_id\",\n \"" + "end_block" + "\" AS \"end_block\", \n \"" + "first_event_block" + "\" AS \"first_event_block_number\",\n \"" + "_is_hyper_sync" + "\" AS \"is_hyper_sync\",\n \"" + "buffer_block" + "\" AS \"latest_fetched_block_number\",\n \"" + "progress_block" + "\" AS \"latest_processed_block\",\n \"" + "_num_batches_fetched" + "\" AS \"num_batches_fetched\",\n \"" + "events_processed" + "\" AS \"num_events_processed\",\n \"" + "start_block" + "\" AS \"start_block\",\n \"" + "ready_at" + "\" AS \"timestamp_caught_up_to_head_or_endblock\"\n FROM \"" + pgSchema + "\".\"" + table.tableName + "\";";
234
240
  }
235
241
 
236
242
  var Views = {
@@ -263,7 +269,7 @@ var schema$1 = S$RescriptSchema.schema(function (s) {
263
269
 
264
270
  var rowsSchema = S$RescriptSchema.array(schema$1);
265
271
 
266
- var table$5 = Table.mkTable(name, undefined, [
272
+ var table$4 = Table.mkTable(name, undefined, [
267
273
  Table.mkField("id", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, true, undefined, undefined),
268
274
  Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
269
275
  Table.mkField("registering_event_block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
@@ -276,24 +282,50 @@ var table$5 = Table.mkTable(name, undefined, [
276
282
  Table.mkField("contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
277
283
  ]);
278
284
 
279
- var entityHistory = EntityHistory.fromTable(table$5, schema$1);
285
+ var entityHistory = EntityHistory.fromTable(table$4, schema$1);
280
286
 
281
287
  var config = {
282
288
  name: name,
283
289
  schema: schema$1,
284
290
  rowsSchema: rowsSchema,
285
- table: table$5,
291
+ table: table$4,
286
292
  entityHistory: entityHistory
287
293
  };
288
294
 
295
+ function makeCleanUpOnRestartQuery(pgSchema, chains) {
296
+ var query = {
297
+ contents: ""
298
+ };
299
+ chains.forEach(function (chain) {
300
+ if (query.contents !== "") {
301
+ query.contents = query.contents + "\n";
302
+ }
303
+ var progressBlockNumber = chain.progress_block;
304
+ var progressNextBlockLogIndex = chain._progress_log_index;
305
+ var tmp;
306
+ tmp = progressNextBlockLogIndex === null ? (
307
+ progressBlockNumber !== -1 ? " AND registering_event_block_number > " + String(progressBlockNumber) : ""
308
+ ) : " AND (\n registering_event_block_number > " + String(progressBlockNumber + 1 | 0) + "\n OR registering_event_block_number = " + String(progressBlockNumber + 1 | 0) + "\n AND registering_event_log_index > " + String(progressNextBlockLogIndex) + "\n)";
309
+ var progressBlockNumber$1 = chain.progress_block;
310
+ var progressNextBlockLogIndex$1 = chain._progress_log_index;
311
+ var tmp$1;
312
+ tmp$1 = progressNextBlockLogIndex$1 === null ? (
313
+ progressBlockNumber$1 !== -1 ? " AND entity_history_block_number > " + String(progressBlockNumber$1) : ""
314
+ ) : " AND (\n entity_history_block_number > " + String(progressBlockNumber$1 + 1 | 0) + "\n OR entity_history_block_number = " + String(progressBlockNumber$1 + 1 | 0) + "\n AND entity_history_log_index > " + String(progressNextBlockLogIndex$1) + "\n)";
315
+ query.contents = query.contents + ("DELETE FROM \"" + pgSchema + "\".\"" + table$4.tableName + "\"\nWHERE chain_id = " + String(chain.id) + tmp + ";\nDELETE FROM \"" + pgSchema + "\".\"" + table$4.tableName + "_history\"\nWHERE entity_history_chain_id = " + String(chain.id) + tmp$1 + ";");
316
+ });
317
+ return query.contents;
318
+ }
319
+
289
320
  var DynamicContractRegistry = {
290
321
  name: name,
291
322
  makeId: makeId,
292
323
  schema: schema$1,
293
324
  rowsSchema: rowsSchema,
294
- table: table$5,
325
+ table: table$4,
295
326
  entityHistory: entityHistory,
296
- config: config
327
+ config: config,
328
+ makeCleanUpOnRestartQuery: makeCleanUpOnRestartQuery
297
329
  };
298
330
 
299
331
  var isPrimaryKey = true;
@@ -305,7 +337,6 @@ var isIndex = true;
305
337
  exports.isPrimaryKey = isPrimaryKey;
306
338
  exports.isNullable = isNullable;
307
339
  exports.isIndex = isIndex;
308
- exports.EventSyncState = EventSyncState;
309
340
  exports.Chains = Chains;
310
341
  exports.PersistedState = PersistedState;
311
342
  exports.EndOfBlockRangeScannedData = EndOfBlockRangeScannedData;