@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/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=A2EF93E9235ADDCA64756E2164756E21
1696
+ //# debugId=80DED0C0E8D3237364756E2164756E21
1371
1697
  //# sourceMappingURL=index.js.map