envio 2.27.6 → 2.28.0-alpha.2

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.
@@ -0,0 +1,315 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+ 'use strict';
3
+
4
+ var Table = require("./Table.res.js");
5
+ var Utils = require("../Utils.res.js");
6
+ var Js_exn = require("rescript/lib/js/js_exn.js");
7
+ var Address = require("../Address.res.js");
8
+ var Js_dict = require("rescript/lib/js/js_dict.js");
9
+ var Js_null = require("rescript/lib/js/js_null.js");
10
+ var Belt_Array = require("rescript/lib/js/belt_Array.js");
11
+ var EntityHistory = require("./EntityHistory.res.js");
12
+ var S$RescriptSchema = require("rescript-schema/src/S.res.js");
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
+ var fields = [
44
+ "id",
45
+ "start_block",
46
+ "end_block",
47
+ "source_block",
48
+ "first_event_block",
49
+ "buffer_block",
50
+ "ready_at",
51
+ "events_processed",
52
+ "_is_hyper_sync",
53
+ "_latest_processed_block",
54
+ "_num_batches_fetched"
55
+ ];
56
+
57
+ var table$1 = Table.mkTable("envio_chains", undefined, [
58
+ Table.mkField("id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
59
+ Table.mkField("start_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
60
+ Table.mkField("end_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
61
+ Table.mkField("buffer_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
62
+ Table.mkField("source_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
63
+ Table.mkField("first_event_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
64
+ Table.mkField("ready_at", "TIMESTAMP WITH TIME ZONE NULL", S$RescriptSchema.$$null(Utils.Schema.dbDate), undefined, undefined, true, undefined, undefined, undefined),
65
+ Table.mkField("events_processed", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
66
+ 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),
68
+ Table.mkField("_num_batches_fetched", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
69
+ ]);
70
+
71
+ function initialFromConfig(chainConfig) {
72
+ return {
73
+ id: chainConfig.id,
74
+ start_block: chainConfig.startBlock,
75
+ end_block: Js_null.fromOption(chainConfig.endBlock),
76
+ source_block: 0,
77
+ first_event_block: null,
78
+ buffer_block: -1,
79
+ ready_at: null,
80
+ events_processed: 0,
81
+ _latest_processed_block: null,
82
+ _is_hyper_sync: false,
83
+ _num_batches_fetched: 0
84
+ };
85
+ }
86
+
87
+ function makeInitialValuesQuery(pgSchema, chainConfigs) {
88
+ if (chainConfigs.length === 0) {
89
+ return ;
90
+ }
91
+ var columnNames = Belt_Array.map(fields, (function (field) {
92
+ return "\"" + field + "\"";
93
+ }));
94
+ var valuesRows = Belt_Array.map(chainConfigs, (function (chainConfig) {
95
+ var initialValues = initialFromConfig(chainConfig);
96
+ var values = Belt_Array.map(fields, (function (field) {
97
+ var value = Js_dict.get(initialValues, field);
98
+ var match = typeof value;
99
+ switch (match) {
100
+ case "boolean" :
101
+ if (value) {
102
+ return "true";
103
+ } else {
104
+ return "false";
105
+ }
106
+ case "number" :
107
+ return String(value);
108
+ case "object" :
109
+ return "NULL";
110
+ default:
111
+ return Js_exn.raiseError("Invalid envio_chains value type");
112
+ }
113
+ }));
114
+ return "(" + values.join(", ") + ")";
115
+ }));
116
+ return "INSERT INTO \"" + pgSchema + "\".\"" + table$1.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
117
+ }
118
+
119
+ var updateFields = [
120
+ "source_block",
121
+ "first_event_block",
122
+ "buffer_block",
123
+ "ready_at",
124
+ "events_processed",
125
+ "_is_hyper_sync",
126
+ "_latest_processed_block",
127
+ "_num_batches_fetched"
128
+ ];
129
+
130
+ function makeSingleUpdateQuery(pgSchema) {
131
+ var setClauses = Belt_Array.mapWithIndex(updateFields, (function (index, field) {
132
+ var paramIndex = index + 2 | 0;
133
+ return "\"" + field + "\" = $" + String(paramIndex);
134
+ }));
135
+ return "UPDATE \"" + pgSchema + "\".\"" + table$1.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
136
+ }
137
+
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
+ })));
150
+ }
151
+
152
+ var Chains = {
153
+ fields: fields,
154
+ table: table$1,
155
+ initialFromConfig: initialFromConfig,
156
+ makeInitialValuesQuery: makeInitialValuesQuery,
157
+ updateFields: updateFields,
158
+ makeSingleUpdateQuery: makeSingleUpdateQuery,
159
+ setValues: setValues
160
+ };
161
+
162
+ var table$2 = Table.mkTable("persisted_state", undefined, [
163
+ Table.mkField("id", "SERIAL", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
164
+ Table.mkField("envio_version", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
165
+ Table.mkField("config_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
166
+ Table.mkField("schema_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
167
+ Table.mkField("handler_files_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
168
+ Table.mkField("abi_files_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
169
+ ]);
170
+
171
+ var PersistedState = {
172
+ table: table$2
173
+ };
174
+
175
+ var table$3 = Table.mkTable("end_of_block_range_scanned_data", undefined, [
176
+ Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
177
+ Table.mkField("block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
178
+ Table.mkField("block_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
179
+ ]);
180
+
181
+ var EndOfBlockRangeScannedData = {
182
+ table: table$3
183
+ };
184
+
185
+ var schema = S$RescriptSchema.schema(function (s) {
186
+ return {
187
+ chain_id: s.m(S$RescriptSchema.$$int),
188
+ event_id: s.m(S$RescriptSchema.bigint),
189
+ event_name: s.m(S$RescriptSchema.string),
190
+ contract_name: s.m(S$RescriptSchema.string),
191
+ block_number: s.m(S$RescriptSchema.$$int),
192
+ log_index: s.m(S$RescriptSchema.$$int),
193
+ src_address: s.m(Address.schema),
194
+ block_hash: s.m(S$RescriptSchema.string),
195
+ block_timestamp: s.m(S$RescriptSchema.$$int),
196
+ block_fields: s.m(S$RescriptSchema.json(false)),
197
+ transaction_fields: s.m(S$RescriptSchema.json(false)),
198
+ params: s.m(S$RescriptSchema.json(false))
199
+ };
200
+ });
201
+
202
+ var table$4 = Table.mkTable("raw_events", undefined, [
203
+ Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
204
+ Table.mkField("event_id", "NUMERIC", S$RescriptSchema.bigint, undefined, undefined, undefined, undefined, undefined, undefined),
205
+ Table.mkField("event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
206
+ Table.mkField("contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
207
+ Table.mkField("block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
208
+ Table.mkField("log_index", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
209
+ Table.mkField("src_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
210
+ Table.mkField("block_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
211
+ Table.mkField("block_timestamp", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
212
+ Table.mkField("block_fields", "JSONB", S$RescriptSchema.json(false), undefined, undefined, undefined, undefined, undefined, undefined),
213
+ Table.mkField("transaction_fields", "JSONB", S$RescriptSchema.json(false), undefined, undefined, undefined, undefined, undefined, undefined),
214
+ Table.mkField("params", "JSONB", S$RescriptSchema.json(false), undefined, undefined, undefined, undefined, undefined, undefined),
215
+ Table.mkField("db_write_timestamp", "TIMESTAMP", S$RescriptSchema.$$int, "CURRENT_TIMESTAMP", undefined, undefined, undefined, undefined, undefined),
216
+ Table.mkField("serial", "SERIAL", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, true, undefined, undefined)
217
+ ]);
218
+
219
+ var RawEvents = {
220
+ schema: schema,
221
+ table: table$4
222
+ };
223
+
224
+ var metaViewName = "_meta";
225
+
226
+ var chainMetadataViewName = "chain_metadata";
227
+
228
+ 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" + "\";";
230
+ }
231
+
232
+ 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 + "\";";
234
+ }
235
+
236
+ var Views = {
237
+ metaViewName: metaViewName,
238
+ chainMetadataViewName: chainMetadataViewName,
239
+ makeMetaViewQuery: makeMetaViewQuery,
240
+ makeChainMetadataViewQuery: makeChainMetadataViewQuery
241
+ };
242
+
243
+ var name = "dynamic_contract_registry";
244
+
245
+ function makeId(chainId, contractAddress) {
246
+ return String(chainId) + "-" + contractAddress;
247
+ }
248
+
249
+ var schema$1 = S$RescriptSchema.schema(function (s) {
250
+ return {
251
+ id: s.m(S$RescriptSchema.string),
252
+ chain_id: s.m(S$RescriptSchema.$$int),
253
+ registering_event_block_number: s.m(S$RescriptSchema.$$int),
254
+ registering_event_log_index: s.m(S$RescriptSchema.$$int),
255
+ registering_event_block_timestamp: s.m(S$RescriptSchema.$$int),
256
+ registering_event_contract_name: s.m(S$RescriptSchema.string),
257
+ registering_event_name: s.m(S$RescriptSchema.string),
258
+ registering_event_src_address: s.m(Address.schema),
259
+ contract_address: s.m(Address.schema),
260
+ contract_name: s.m(S$RescriptSchema.string)
261
+ };
262
+ });
263
+
264
+ var rowsSchema = S$RescriptSchema.array(schema$1);
265
+
266
+ var table$5 = Table.mkTable(name, undefined, [
267
+ Table.mkField("id", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, true, undefined, undefined),
268
+ Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
269
+ Table.mkField("registering_event_block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
270
+ Table.mkField("registering_event_log_index", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
271
+ Table.mkField("registering_event_block_timestamp", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
272
+ Table.mkField("registering_event_contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
273
+ Table.mkField("registering_event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
274
+ Table.mkField("registering_event_src_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
275
+ Table.mkField("contract_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
276
+ Table.mkField("contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
277
+ ]);
278
+
279
+ var entityHistory = EntityHistory.fromTable(table$5, schema$1);
280
+
281
+ var config = {
282
+ name: name,
283
+ schema: schema$1,
284
+ rowsSchema: rowsSchema,
285
+ table: table$5,
286
+ entityHistory: entityHistory
287
+ };
288
+
289
+ var DynamicContractRegistry = {
290
+ name: name,
291
+ makeId: makeId,
292
+ schema: schema$1,
293
+ rowsSchema: rowsSchema,
294
+ table: table$5,
295
+ entityHistory: entityHistory,
296
+ config: config
297
+ };
298
+
299
+ var isPrimaryKey = true;
300
+
301
+ var isNullable = true;
302
+
303
+ var isIndex = true;
304
+
305
+ exports.isPrimaryKey = isPrimaryKey;
306
+ exports.isNullable = isNullable;
307
+ exports.isIndex = isIndex;
308
+ exports.EventSyncState = EventSyncState;
309
+ exports.Chains = Chains;
310
+ exports.PersistedState = PersistedState;
311
+ exports.EndOfBlockRangeScannedData = EndOfBlockRangeScannedData;
312
+ exports.RawEvents = RawEvents;
313
+ exports.Views = Views;
314
+ exports.DynamicContractRegistry = DynamicContractRegistry;
315
+ /* table Not a pure module */
@@ -44,8 +44,14 @@ module Dict = {
44
44
  }
45
45
  }
46
46
 
47
- @inline
48
- let panic = message => Exn.raiseError(Exn.makeError(`[rescript-rest] ${message}`))
47
+ let panic = (message, ~params: option<{..}>=?) => {
48
+ let error = Exn.makeError(`[rescript-rest] ${message}`)
49
+ switch params {
50
+ | Some(params) => (error->Obj.magic)["params"] = params
51
+ | None => ()
52
+ }
53
+ Exn.raiseError(error)
54
+ }
49
55
 
50
56
  @val
51
57
  external encodeURIComponent: string => string = "encodeURIComponent"
@@ -808,6 +814,9 @@ let fetch = (type input response, route: route<input, response>, input, ~client=
808
814
  | S.Raised(error) =>
809
815
  panic(
810
816
  `Failed parsing response at ${error.path->S.Path.toString}. Reason: ${error->S.Error.reason}`,
817
+ ~params={
818
+ "response": fetcherResponse,
819
+ },
811
820
  )
812
821
  }
813
822
  }
@@ -1,9 +1,18 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
  'use strict';
3
3
 
4
+ var Caml_option = require("rescript/lib/js/caml_option.js");
4
5
  var S$RescriptSchema = require("rescript-schema/src/S.res.js");
5
6
  var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
6
7
 
8
+ function panic(message, params) {
9
+ var error = new Error("[rescript-rest] " + message);
10
+ if (params !== undefined) {
11
+ error.params = Caml_option.valFromOption(params);
12
+ }
13
+ throw error;
14
+ }
15
+
7
16
  async function $$default(args) {
8
17
  var result = await fetch(args.path, args);
9
18
  var contentType = result.headers.get("content-type");
@@ -34,9 +43,11 @@ var ApiFetcher = {
34
43
 
35
44
  function register(map, status, builder) {
36
45
  if (map[status]) {
37
- throw new Error("[rescript-rest] " + ("Response for the \"" + status + "\" status registered multiple times"));
46
+ return panic("Response for the \"" + status + "\" status registered multiple times", undefined);
47
+ } else {
48
+ map[status] = builder;
49
+ return ;
38
50
  }
39
- map[status] = builder;
40
51
  }
41
52
 
42
53
  function parsePath(_path, pathItems, pathParams) {
@@ -48,24 +59,24 @@ function parsePath(_path, pathItems, pathParams) {
48
59
  var paramStartIdx = path.indexOf("{");
49
60
  if (paramStartIdx !== -1) {
50
61
  var paramEndIdx = path.indexOf("}");
51
- if (paramEndIdx !== -1) {
52
- if (paramStartIdx > paramEndIdx) {
53
- throw new Error("[rescript-rest] Path parameter is not enclosed in curly braces");
54
- }
55
- var paramName = path.slice(paramStartIdx + 1 | 0, paramEndIdx);
56
- if (paramName === "") {
57
- throw new Error("[rescript-rest] Path parameter name cannot be empty");
58
- }
59
- var param = {
60
- name: paramName
61
- };
62
- pathItems.push(path.slice(0, paramStartIdx));
63
- pathItems.push(param);
64
- pathParams[paramName] = param;
65
- _path = path.slice(paramEndIdx + 1 | 0);
66
- continue ;
62
+ if (paramEndIdx === -1) {
63
+ return panic("Path contains an unclosed parameter", undefined);
64
+ }
65
+ if (paramStartIdx > paramEndIdx) {
66
+ panic("Path parameter is not enclosed in curly braces", undefined);
67
67
  }
68
- throw new Error("[rescript-rest] Path contains an unclosed parameter");
68
+ var paramName = path.slice(paramStartIdx + 1 | 0, paramEndIdx);
69
+ if (paramName === "") {
70
+ panic("Path parameter name cannot be empty", undefined);
71
+ }
72
+ var param = {
73
+ name: paramName
74
+ };
75
+ pathItems.push(path.slice(0, paramStartIdx));
76
+ pathItems.push(param);
77
+ pathParams[paramName] = param;
78
+ _path = path.slice(paramEndIdx + 1 | 0);
79
+ continue ;
69
80
  }
70
81
  pathItems.push(path);
71
82
  return ;
@@ -279,7 +290,7 @@ function params(route) {
279
290
  match.TAG === "literal" && match._0.kind === "String" ? false : true
280
291
  );
281
292
  if (isNonStringBased) {
282
- throw new Error("[rescript-rest] Only string-based schemas are allowed in rawBody");
293
+ panic("Only string-based schemas are allowed in rawBody", undefined);
283
294
  }
284
295
  ((isRawBody = true));
285
296
  return s.f("body", schema);
@@ -292,7 +303,7 @@ function params(route) {
292
303
  }),
293
304
  param: (function (fieldName, schema) {
294
305
  if (!pathParams[fieldName]) {
295
- throw new Error("[rescript-rest] " + ("Path parameter \"" + fieldName + "\" is not defined in the path"));
306
+ panic("Path parameter \"" + fieldName + "\" is not defined in the path", undefined);
296
307
  }
297
308
  return s.nested("params").f(fieldName, coerceSchema(schema));
298
309
  }),
@@ -386,7 +397,7 @@ function params(route) {
386
397
  responses.push(builder);
387
398
  });
388
399
  if (responses.length === 0) {
389
- throw new Error("[rescript-rest] At least single response should be registered");
400
+ panic("At least single response should be registered", undefined);
390
401
  }
391
402
  params$2 = {
392
403
  method: definition.method,
@@ -444,7 +455,7 @@ function getCompletePath(baseUrl, pathItems, maybeQuery, maybeParams, jsonQueryO
444
455
  if (param !== undefined) {
445
456
  path = path + param;
446
457
  } else {
447
- throw new Error("[rescript-rest] " + ("Path parameter \"" + name + "\" is not defined in input"));
458
+ panic("Path parameter \"" + name + "\" is not defined in input", undefined);
448
459
  }
449
460
  }
450
461
  }
@@ -494,11 +505,7 @@ function $$fetch$1(route, input, client) {
494
505
  client$1 = client;
495
506
  } else {
496
507
  var client$2 = $$global.c;
497
- if (client$2 !== undefined) {
498
- client$1 = client$2;
499
- } else {
500
- throw new Error("[rescript-rest] " + ("Client is not set for the " + match.path + " fetch request. Please, use Rest.setGlobalClient or pass a client explicitly to the Rest.fetch arguments"));
501
- }
508
+ client$1 = client$2 !== undefined ? client$2 : panic("Client is not set for the " + match.path + " fetch request. Please, use Rest.setGlobalClient or pass a client explicitly to the Rest.fetch arguments", undefined);
502
509
  }
503
510
  var data = S$RescriptSchema.reverseConvertOrThrow(input, match.inputSchema);
504
511
  if (data.body !== (void 0)) {
@@ -528,11 +535,11 @@ function $$fetch$1(route, input, client) {
528
535
  var error$1 = error._1;
529
536
  var match = error$1.code;
530
537
  if (typeof match === "object" && match.TAG === "InvalidType" && error$1.path === S$RescriptSchema.Path.empty) {
531
- var message = "Failed parsing response data. Reason: Expected " + getSchemaField(match.expected, "data").schema.n() + ", received " + match.received.data;
532
- throw new Error("[rescript-rest] " + message);
538
+ return panic("Failed parsing response data. Reason: Expected " + getSchemaField(match.expected, "data").schema.n() + ", received " + match.received.data, undefined);
533
539
  }
534
- var message$1 = "Failed parsing response at " + error$1.path + ". Reason: " + S$RescriptSchema.$$Error.reason(error$1);
535
- throw new Error("[rescript-rest] " + message$1);
540
+ return panic("Failed parsing response at " + error$1.path + ". Reason: " + S$RescriptSchema.$$Error.reason(error$1), {
541
+ response: fetcherResponse
542
+ });
536
543
  }
537
544
  throw error;
538
545
  }
@@ -541,7 +548,7 @@ function $$fetch$1(route, input, client) {
541
548
  if (fetcherResponse.data && typeof fetcherResponse.data.message === "string") {
542
549
  error$2 = error$2 + ". Message: " + fetcherResponse.data.message;
543
550
  }
544
- throw new Error("[rescript-rest] " + error$2);
551
+ return panic(error$2, undefined);
545
552
  }
546
553
  });
547
554
  }
@@ -557,9 +564,11 @@ function client(baseUrl, fetcherOpt) {
557
564
  function setGlobalClient(baseUrl, fetcher) {
558
565
  var match = $$global.c;
559
566
  if (match !== undefined) {
560
- throw new Error("[rescript-rest] There's already a global client defined. You can have only one global client at a time.");
567
+ return panic("There's already a global client defined. You can have only one global client at a time.", undefined);
568
+ } else {
569
+ $$global.c = client(baseUrl, fetcher);
570
+ return ;
561
571
  }
562
- $$global.c = client(baseUrl, fetcher);
563
572
  }
564
573
 
565
574
  var $$Response = {};