@secondlayer/shared 6.18.0 → 6.20.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.
- package/dist/src/db/index.d.ts +68 -1
- package/dist/src/db/index.js +282 -2
- package/dist/src/db/index.js.map +6 -5
- package/dist/src/db/queries/chain-reorgs.d.ts +15 -2
- package/dist/src/db/queries/chain-reorgs.js +286 -1
- package/dist/src/db/queries/chain-reorgs.js.map +7 -6
- package/dist/src/db/queries/subgraphs.js +278 -1
- package/dist/src/db/queries/subgraphs.js.map +6 -5
- package/dist/src/env.d.ts +7 -1
- package/dist/src/env.js +5 -1
- package/dist/src/env.js.map +3 -3
- package/dist/src/index-http.d.ts +21 -0
- package/dist/src/index-http.js +50 -10
- package/dist/src/index-http.js.map +3 -3
- package/dist/src/index.d.ts +78 -1
- package/dist/src/index.js +327 -1
- package/dist/src/index.js.map +7 -5
- package/dist/src/logger.js +4 -1
- package/dist/src/logger.js.map +3 -3
- package/dist/src/node/archive-client.js +4 -1
- package/dist/src/node/archive-client.js.map +3 -3
- package/dist/src/node/hiro-client.js +4 -1
- package/dist/src/node/hiro-client.js.map +3 -3
- package/dist/src/queue/listener.js +2 -2
- package/dist/src/queue/listener.js.map +3 -3
- package/package.json +1 -1
package/dist/src/index.js
CHANGED
|
@@ -56,6 +56,9 @@ function getEnv() {
|
|
|
56
56
|
cachedEnv = { ...result.data, enabledNetworks };
|
|
57
57
|
return cachedEnv;
|
|
58
58
|
}
|
|
59
|
+
function isPox4DecoderEnabled() {
|
|
60
|
+
return process.env.POX4_DECODER_ENABLED !== "false";
|
|
61
|
+
}
|
|
59
62
|
// src/logger.ts
|
|
60
63
|
var LOG_LEVELS = {
|
|
61
64
|
debug: 0,
|
|
@@ -150,6 +153,232 @@ import { Kysely } from "kysely";
|
|
|
150
153
|
import { PostgresJSDialect } from "kysely-postgres-js";
|
|
151
154
|
import postgres from "postgres";
|
|
152
155
|
import { sql as sql2 } from "kysely";
|
|
156
|
+
|
|
157
|
+
// src/db/source-read-columns.ts
|
|
158
|
+
var SOURCE_READ_COLUMNS = {
|
|
159
|
+
blocks: [
|
|
160
|
+
"burn_block_hash",
|
|
161
|
+
"burn_block_height",
|
|
162
|
+
"canonical",
|
|
163
|
+
"hash",
|
|
164
|
+
"height",
|
|
165
|
+
"parent_hash",
|
|
166
|
+
"timestamp"
|
|
167
|
+
],
|
|
168
|
+
decoded_events: [
|
|
169
|
+
"amount",
|
|
170
|
+
"asset_identifier",
|
|
171
|
+
"block_height",
|
|
172
|
+
"canonical",
|
|
173
|
+
"contract_id",
|
|
174
|
+
"cursor",
|
|
175
|
+
"event_index",
|
|
176
|
+
"event_type",
|
|
177
|
+
"memo",
|
|
178
|
+
"payload",
|
|
179
|
+
"recipient",
|
|
180
|
+
"sender",
|
|
181
|
+
"tx_id",
|
|
182
|
+
"tx_index",
|
|
183
|
+
"value"
|
|
184
|
+
],
|
|
185
|
+
transactions: [
|
|
186
|
+
"block_height",
|
|
187
|
+
"contract_id",
|
|
188
|
+
"function_args",
|
|
189
|
+
"function_name",
|
|
190
|
+
"raw_result",
|
|
191
|
+
"raw_tx",
|
|
192
|
+
"sender",
|
|
193
|
+
"status",
|
|
194
|
+
"tx_id",
|
|
195
|
+
"tx_index",
|
|
196
|
+
"type"
|
|
197
|
+
],
|
|
198
|
+
mempool_transactions: [
|
|
199
|
+
"contract_id",
|
|
200
|
+
"function_args",
|
|
201
|
+
"function_name",
|
|
202
|
+
"raw_tx",
|
|
203
|
+
"received_at",
|
|
204
|
+
"sender",
|
|
205
|
+
"seq",
|
|
206
|
+
"tx_id",
|
|
207
|
+
"type"
|
|
208
|
+
],
|
|
209
|
+
pox4_calls: [
|
|
210
|
+
"aggregated_amount_ustx",
|
|
211
|
+
"aggregated_signer_index",
|
|
212
|
+
"amount_ustx",
|
|
213
|
+
"auth_allowed",
|
|
214
|
+
"auth_id",
|
|
215
|
+
"auth_period",
|
|
216
|
+
"auth_topic",
|
|
217
|
+
"block_height",
|
|
218
|
+
"block_time",
|
|
219
|
+
"burn_block_height",
|
|
220
|
+
"caller",
|
|
221
|
+
"canonical",
|
|
222
|
+
"cursor",
|
|
223
|
+
"delegate_to",
|
|
224
|
+
"end_cycle",
|
|
225
|
+
"function_name",
|
|
226
|
+
"lock_period",
|
|
227
|
+
"max_amount",
|
|
228
|
+
"pox_addr_btc",
|
|
229
|
+
"pox_addr_hashbytes",
|
|
230
|
+
"pox_addr_version",
|
|
231
|
+
"result_ok",
|
|
232
|
+
"reward_cycle",
|
|
233
|
+
"signer_key",
|
|
234
|
+
"signer_signature",
|
|
235
|
+
"source_cursor",
|
|
236
|
+
"stacker",
|
|
237
|
+
"start_cycle",
|
|
238
|
+
"tx_id",
|
|
239
|
+
"tx_index"
|
|
240
|
+
],
|
|
241
|
+
sbtc_events: [
|
|
242
|
+
"amount",
|
|
243
|
+
"bitcoin_txid",
|
|
244
|
+
"block_height",
|
|
245
|
+
"block_time",
|
|
246
|
+
"burn_hash",
|
|
247
|
+
"burn_height",
|
|
248
|
+
"canonical",
|
|
249
|
+
"cursor",
|
|
250
|
+
"event_index",
|
|
251
|
+
"fee",
|
|
252
|
+
"governance_contract_type",
|
|
253
|
+
"governance_new_contract",
|
|
254
|
+
"max_fee",
|
|
255
|
+
"output_index",
|
|
256
|
+
"recipient_btc_hashbytes",
|
|
257
|
+
"recipient_btc_version",
|
|
258
|
+
"request_id",
|
|
259
|
+
"sender",
|
|
260
|
+
"signer_address",
|
|
261
|
+
"signer_aggregate_pubkey",
|
|
262
|
+
"signer_bitmap",
|
|
263
|
+
"signer_keys_count",
|
|
264
|
+
"signer_threshold",
|
|
265
|
+
"sweep_txid",
|
|
266
|
+
"topic",
|
|
267
|
+
"tx_id",
|
|
268
|
+
"tx_index"
|
|
269
|
+
],
|
|
270
|
+
sbtc_token_events: [
|
|
271
|
+
"amount",
|
|
272
|
+
"block_height",
|
|
273
|
+
"block_time",
|
|
274
|
+
"canonical",
|
|
275
|
+
"cursor",
|
|
276
|
+
"event_index",
|
|
277
|
+
"event_type",
|
|
278
|
+
"memo",
|
|
279
|
+
"recipient",
|
|
280
|
+
"sender",
|
|
281
|
+
"tx_id",
|
|
282
|
+
"tx_index"
|
|
283
|
+
],
|
|
284
|
+
bns_name_events: [
|
|
285
|
+
"block_height",
|
|
286
|
+
"block_time",
|
|
287
|
+
"bns_id",
|
|
288
|
+
"canonical",
|
|
289
|
+
"cursor",
|
|
290
|
+
"event_index",
|
|
291
|
+
"fqn",
|
|
292
|
+
"hashed_salted_fqn_preorder",
|
|
293
|
+
"imported_at",
|
|
294
|
+
"name",
|
|
295
|
+
"namespace",
|
|
296
|
+
"owner",
|
|
297
|
+
"preordered_by",
|
|
298
|
+
"registered_at",
|
|
299
|
+
"renewal_height",
|
|
300
|
+
"stx_burn",
|
|
301
|
+
"topic",
|
|
302
|
+
"tx_id",
|
|
303
|
+
"tx_index"
|
|
304
|
+
],
|
|
305
|
+
bns_namespace_events: [
|
|
306
|
+
"block_height",
|
|
307
|
+
"block_time",
|
|
308
|
+
"canonical",
|
|
309
|
+
"cursor",
|
|
310
|
+
"event_index",
|
|
311
|
+
"launched_at",
|
|
312
|
+
"lifetime",
|
|
313
|
+
"manager",
|
|
314
|
+
"manager_frozen",
|
|
315
|
+
"manager_transfers_disabled",
|
|
316
|
+
"namespace",
|
|
317
|
+
"price_frozen",
|
|
318
|
+
"price_function",
|
|
319
|
+
"revealed_at",
|
|
320
|
+
"status",
|
|
321
|
+
"tx_id",
|
|
322
|
+
"tx_index"
|
|
323
|
+
],
|
|
324
|
+
bns_marketplace_events: [
|
|
325
|
+
"action",
|
|
326
|
+
"block_height",
|
|
327
|
+
"block_time",
|
|
328
|
+
"bns_id",
|
|
329
|
+
"canonical",
|
|
330
|
+
"commission",
|
|
331
|
+
"cursor",
|
|
332
|
+
"event_index",
|
|
333
|
+
"price_ustx",
|
|
334
|
+
"tx_id",
|
|
335
|
+
"tx_index"
|
|
336
|
+
],
|
|
337
|
+
bns_names: [
|
|
338
|
+
"bns_id",
|
|
339
|
+
"fqn",
|
|
340
|
+
"last_event_at",
|
|
341
|
+
"last_event_cursor",
|
|
342
|
+
"name",
|
|
343
|
+
"namespace",
|
|
344
|
+
"owner",
|
|
345
|
+
"registered_at",
|
|
346
|
+
"renewal_height"
|
|
347
|
+
],
|
|
348
|
+
bns_namespaces: [
|
|
349
|
+
"last_event_at",
|
|
350
|
+
"last_event_cursor",
|
|
351
|
+
"launched_at",
|
|
352
|
+
"lifetime",
|
|
353
|
+
"manager",
|
|
354
|
+
"manager_frozen",
|
|
355
|
+
"name_count",
|
|
356
|
+
"namespace",
|
|
357
|
+
"price_frozen"
|
|
358
|
+
],
|
|
359
|
+
burn_block_rewards: [
|
|
360
|
+
"amount_sats",
|
|
361
|
+
"burn_amount",
|
|
362
|
+
"burn_block_hash",
|
|
363
|
+
"burn_block_height",
|
|
364
|
+
"canonical",
|
|
365
|
+
"cursor",
|
|
366
|
+
"recipient_btc",
|
|
367
|
+
"reward_index"
|
|
368
|
+
],
|
|
369
|
+
burn_block_reward_slots: [
|
|
370
|
+
"burn_block_hash",
|
|
371
|
+
"burn_block_height",
|
|
372
|
+
"canonical",
|
|
373
|
+
"cursor",
|
|
374
|
+
"holder_btc",
|
|
375
|
+
"slot_index"
|
|
376
|
+
],
|
|
377
|
+
events: ["block_height", "data", "event_index", "tx_id", "type"],
|
|
378
|
+
chain_reorgs: ["detected_at"]
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
// src/db/index.ts
|
|
153
382
|
var DEFAULT_URL = "postgres://postgres:postgres@localhost:5432/secondlayer_dev";
|
|
154
383
|
var pools = new Map;
|
|
155
384
|
var poolSeq = 0;
|
|
@@ -182,6 +411,54 @@ function resolveSourceUrl() {
|
|
|
182
411
|
function resolveTargetUrl() {
|
|
183
412
|
return process.env.TARGET_DATABASE_URL || process.env.DATABASE_URL || DEFAULT_URL;
|
|
184
413
|
}
|
|
414
|
+
function describeDbUrl(url) {
|
|
415
|
+
try {
|
|
416
|
+
const u = new URL(url);
|
|
417
|
+
return `${u.hostname}${u.port ? `:${u.port}` : ""}${u.pathname}`;
|
|
418
|
+
} catch {
|
|
419
|
+
return "invalid-url";
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
function getDbSplitStatus() {
|
|
423
|
+
const source = resolveSourceUrl();
|
|
424
|
+
const target = resolveTargetUrl();
|
|
425
|
+
const active = source !== target;
|
|
426
|
+
return {
|
|
427
|
+
mode: active ? "split" : "single",
|
|
428
|
+
active,
|
|
429
|
+
sourceDb: describeDbUrl(source),
|
|
430
|
+
targetDb: describeDbUrl(target)
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function assertDbSplit() {
|
|
434
|
+
const isProd = false;
|
|
435
|
+
const wantsSplit = !!(process.env.SOURCE_DATABASE_URL || process.env.TARGET_DATABASE_URL);
|
|
436
|
+
const databaseUrlSet = !!process.env.DATABASE_URL;
|
|
437
|
+
const source = resolveSourceUrl();
|
|
438
|
+
const target = resolveTargetUrl();
|
|
439
|
+
if (wantsSplit && !databaseUrlSet && (source === DEFAULT_URL || target === DEFAULT_URL)) {
|
|
440
|
+
const which = source === DEFAULT_URL ? "SOURCE_DATABASE_URL" : "TARGET_DATABASE_URL";
|
|
441
|
+
const msg = `${which} unset and DATABASE_URL absent — resolving to built-in DEFAULT_URL; refusing to silently use the wrong database`;
|
|
442
|
+
if (isProd)
|
|
443
|
+
console.error(`❌ ${msg}`);
|
|
444
|
+
else
|
|
445
|
+
console.warn(`⚠️ ${msg}`);
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
if (!wantsSplit) {
|
|
449
|
+
if (isProd) {
|
|
450
|
+
console.warn("⚠️ DB split dormant — all services share one Postgres failure domain (SOURCE_/TARGET_DATABASE_URL unset)");
|
|
451
|
+
}
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
if (source === target) {
|
|
455
|
+
const msg = "DB split requested but SOURCE_DATABASE_URL === TARGET_DATABASE_URL (check for a typo or a stray DATABASE_URL fallback)";
|
|
456
|
+
if (isProd)
|
|
457
|
+
console.error(`❌ ${msg}`);
|
|
458
|
+
else
|
|
459
|
+
console.warn(`⚠️ ${msg}`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
185
462
|
function getOrCreatePool(url) {
|
|
186
463
|
const existing = pools.get(url);
|
|
187
464
|
if (existing) {
|
|
@@ -1212,6 +1489,48 @@ var DECODED_EVENT_TYPES = [
|
|
|
1212
1489
|
"print"
|
|
1213
1490
|
];
|
|
1214
1491
|
var STREAMS_EVENT_TYPES = DECODED_EVENT_TYPES;
|
|
1492
|
+
// src/db-event-types.ts
|
|
1493
|
+
var STREAMS_DB_EVENT_TYPES = [
|
|
1494
|
+
"stx_transfer_event",
|
|
1495
|
+
"stx_mint_event",
|
|
1496
|
+
"stx_burn_event",
|
|
1497
|
+
"stx_lock_event",
|
|
1498
|
+
"ft_transfer_event",
|
|
1499
|
+
"ft_mint_event",
|
|
1500
|
+
"ft_burn_event",
|
|
1501
|
+
"nft_transfer_event",
|
|
1502
|
+
"nft_mint_event",
|
|
1503
|
+
"nft_burn_event",
|
|
1504
|
+
"smart_contract_event",
|
|
1505
|
+
"contract_event"
|
|
1506
|
+
];
|
|
1507
|
+
var DB_TO_STREAMS_EVENT_TYPE = {
|
|
1508
|
+
stx_transfer_event: "stx_transfer",
|
|
1509
|
+
stx_mint_event: "stx_mint",
|
|
1510
|
+
stx_burn_event: "stx_burn",
|
|
1511
|
+
stx_lock_event: "stx_lock",
|
|
1512
|
+
ft_transfer_event: "ft_transfer",
|
|
1513
|
+
ft_mint_event: "ft_mint",
|
|
1514
|
+
ft_burn_event: "ft_burn",
|
|
1515
|
+
nft_transfer_event: "nft_transfer",
|
|
1516
|
+
nft_mint_event: "nft_mint",
|
|
1517
|
+
nft_burn_event: "nft_burn",
|
|
1518
|
+
smart_contract_event: "print",
|
|
1519
|
+
contract_event: "print"
|
|
1520
|
+
};
|
|
1521
|
+
var STREAMS_TO_DB_EVENT_TYPES = {
|
|
1522
|
+
stx_transfer: ["stx_transfer_event"],
|
|
1523
|
+
stx_mint: ["stx_mint_event"],
|
|
1524
|
+
stx_burn: ["stx_burn_event"],
|
|
1525
|
+
stx_lock: ["stx_lock_event"],
|
|
1526
|
+
ft_transfer: ["ft_transfer_event"],
|
|
1527
|
+
ft_mint: ["ft_mint_event"],
|
|
1528
|
+
ft_burn: ["ft_burn_event"],
|
|
1529
|
+
nft_transfer: ["nft_transfer_event"],
|
|
1530
|
+
nft_mint: ["nft_mint_event"],
|
|
1531
|
+
nft_burn: ["nft_burn_event"],
|
|
1532
|
+
print: ["smart_contract_event", "contract_event"]
|
|
1533
|
+
};
|
|
1215
1534
|
// src/finality.ts
|
|
1216
1535
|
var DEFAULT_BTC_CONFIRMATIONS = 6;
|
|
1217
1536
|
function finalizedBurnHeight(burnTipHeight, confirmations = DEFAULT_BTC_CONFIRMATIONS) {
|
|
@@ -1300,12 +1619,14 @@ export {
|
|
|
1300
1619
|
parseJsonb,
|
|
1301
1620
|
logger,
|
|
1302
1621
|
jsonb,
|
|
1622
|
+
isPox4DecoderEnabled,
|
|
1303
1623
|
getTargetDb,
|
|
1304
1624
|
getSourceDb,
|
|
1305
1625
|
getRawClientFor,
|
|
1306
1626
|
getRawClient,
|
|
1307
1627
|
getErrorMessage,
|
|
1308
1628
|
getEnv,
|
|
1629
|
+
getDbSplitStatus,
|
|
1309
1630
|
getDb,
|
|
1310
1631
|
generateSubgraphSpec,
|
|
1311
1632
|
generateSubgraphOpenApi,
|
|
@@ -1318,6 +1639,7 @@ export {
|
|
|
1318
1639
|
decodeStreamsCursor,
|
|
1319
1640
|
exports_hmac as crypto,
|
|
1320
1641
|
closeDb,
|
|
1642
|
+
assertDbSplit,
|
|
1321
1643
|
VersionConflictError,
|
|
1322
1644
|
ValidationError,
|
|
1323
1645
|
UpdateSubscriptionRequestSchema,
|
|
@@ -1338,7 +1660,10 @@ export {
|
|
|
1338
1660
|
SUBSCRIPTION_RUNTIMES,
|
|
1339
1661
|
SUBSCRIPTION_FORMATS,
|
|
1340
1662
|
SUBSCRIPTION_FILTER_OPERATORS,
|
|
1663
|
+
STREAMS_TO_DB_EVENT_TYPES,
|
|
1341
1664
|
STREAMS_EVENT_TYPES,
|
|
1665
|
+
STREAMS_DB_EVENT_TYPES,
|
|
1666
|
+
SOURCE_READ_COLUMNS,
|
|
1342
1667
|
ReplaySubscriptionRequestSchema,
|
|
1343
1668
|
RateLimitError,
|
|
1344
1669
|
PrintEventFilterSchema,
|
|
@@ -1358,6 +1683,7 @@ export {
|
|
|
1358
1683
|
DatabaseError,
|
|
1359
1684
|
DEFAULT_BTC_CONFIRMATIONS,
|
|
1360
1685
|
DECODED_EVENT_TYPES,
|
|
1686
|
+
DB_TO_STREAMS_EVENT_TYPE,
|
|
1361
1687
|
CreateSubscriptionRequestSchema,
|
|
1362
1688
|
ContractDeployFilterSchema,
|
|
1363
1689
|
ContractCallFilterSchema,
|
|
@@ -1367,5 +1693,5 @@ export {
|
|
|
1367
1693
|
AuthenticationError
|
|
1368
1694
|
};
|
|
1369
1695
|
|
|
1370
|
-
//# debugId=
|
|
1696
|
+
//# debugId=80DED0C0E8D3237364756E2164756E21
|
|
1371
1697
|
//# sourceMappingURL=index.js.map
|