@secondlayer/shared 6.1.0 → 6.3.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 +216 -1
- package/dist/src/db/queries/account-spend-caps.d.ts +215 -0
- package/dist/src/db/queries/account-usage.d.ts +215 -0
- package/dist/src/db/queries/accounts.d.ts +215 -0
- package/dist/src/db/queries/chain-reorgs.d.ts +215 -0
- package/dist/src/db/queries/integrity.d.ts +215 -0
- package/dist/src/db/queries/projects.d.ts +215 -0
- package/dist/src/db/queries/provisioning-audit.d.ts +215 -0
- package/dist/src/db/queries/subgraph-gaps.d.ts +215 -0
- package/dist/src/db/queries/subgraph-operations.d.ts +215 -0
- package/dist/src/db/queries/subgraphs.d.ts +215 -0
- package/dist/src/db/queries/subscriptions.d.ts +215 -0
- package/dist/src/db/queries/tenant-compute-addons.d.ts +215 -0
- package/dist/src/db/queries/tenants.d.ts +215 -0
- package/dist/src/db/queries/usage.d.ts +224 -1
- package/dist/src/db/queries/usage.js +18 -2
- package/dist/src/db/queries/usage.js.map +3 -3
- package/dist/src/db/schema.d.ts +216 -1
- package/dist/src/index.d.ts +216 -1
- package/dist/src/node/local-client.d.ts +215 -0
- package/migrations/0069_api_keys_product_tier.ts +43 -0
- package/migrations/0070_pox4_dataset.ts +128 -0
- package/migrations/0071_sbtc_dataset.ts +126 -0
- package/migrations/0072_bns_dataset.ts +177 -0
- package/package.json +2 -2
|
@@ -104,6 +104,8 @@ interface ApiKeysTable {
|
|
|
104
104
|
rate_limit: Generated<number>;
|
|
105
105
|
ip_address: string;
|
|
106
106
|
account_id: string;
|
|
107
|
+
product: Generated<"account" | "streams" | "index">;
|
|
108
|
+
tier: "free" | "build" | "scale" | "enterprise" | null;
|
|
107
109
|
last_used_at: Date | null;
|
|
108
110
|
revoked_at: Date | null;
|
|
109
111
|
created_at: Generated<Date>;
|
|
@@ -314,6 +316,208 @@ interface ChainReorgsTable {
|
|
|
314
316
|
new_canonical_event_index: number;
|
|
315
317
|
created_at: Generated<Date>;
|
|
316
318
|
}
|
|
319
|
+
type Pox4FunctionName = "stack-stx" | "delegate-stx" | "stack-extend" | "stack-increase" | "revoke-delegate-stx" | "delegate-stack-stx" | "delegate-stack-extend" | "delegate-stack-increase" | "stack-aggregation-commit" | "stack-aggregation-commit-indexed" | "stack-aggregation-increase" | "set-signer-key-authorization";
|
|
320
|
+
interface Pox4CallsTable {
|
|
321
|
+
cursor: string;
|
|
322
|
+
block_height: number;
|
|
323
|
+
block_time: Date;
|
|
324
|
+
burn_block_height: number;
|
|
325
|
+
tx_id: string;
|
|
326
|
+
tx_index: number;
|
|
327
|
+
function_name: Pox4FunctionName;
|
|
328
|
+
caller: string;
|
|
329
|
+
stacker: string | null;
|
|
330
|
+
delegate_to: string | null;
|
|
331
|
+
amount_ustx: string | null;
|
|
332
|
+
lock_period: number | null;
|
|
333
|
+
pox_addr_version: number | null;
|
|
334
|
+
pox_addr_hashbytes: string | null;
|
|
335
|
+
pox_addr_btc: string | null;
|
|
336
|
+
start_cycle: number | null;
|
|
337
|
+
end_cycle: number | null;
|
|
338
|
+
signer_key: string | null;
|
|
339
|
+
signer_signature: string | null;
|
|
340
|
+
auth_id: string | null;
|
|
341
|
+
max_amount: string | null;
|
|
342
|
+
reward_cycle: number | null;
|
|
343
|
+
aggregated_amount_ustx: string | null;
|
|
344
|
+
aggregated_signer_index: number | null;
|
|
345
|
+
auth_period: number | null;
|
|
346
|
+
auth_topic: string | null;
|
|
347
|
+
auth_allowed: boolean | null;
|
|
348
|
+
result_ok: boolean;
|
|
349
|
+
result_raw: string;
|
|
350
|
+
canonical: Generated<boolean>;
|
|
351
|
+
source_cursor: string;
|
|
352
|
+
created_at: Generated<Date>;
|
|
353
|
+
}
|
|
354
|
+
interface Pox4CyclesDailyTable {
|
|
355
|
+
date: string;
|
|
356
|
+
reward_cycle: number;
|
|
357
|
+
total_stacked_ustx: Generated<string>;
|
|
358
|
+
solo_stackers: Generated<number>;
|
|
359
|
+
delegated_principals: Generated<number>;
|
|
360
|
+
unique_pools: Generated<number>;
|
|
361
|
+
unique_signers: Generated<number>;
|
|
362
|
+
calls_today: Generated<number>;
|
|
363
|
+
updated_at: Generated<Date>;
|
|
364
|
+
}
|
|
365
|
+
interface Pox4SignersDailyTable {
|
|
366
|
+
date: string;
|
|
367
|
+
reward_cycle: number;
|
|
368
|
+
signer_key: string;
|
|
369
|
+
weight_ustx: Generated<string>;
|
|
370
|
+
stacker_count: Generated<number>;
|
|
371
|
+
aggregation_calls: Generated<number>;
|
|
372
|
+
updated_at: Generated<Date>;
|
|
373
|
+
}
|
|
374
|
+
type SbtcEventTopic = "completed-deposit" | "withdrawal-create" | "withdrawal-accept" | "withdrawal-reject" | "key-rotation" | "update-protocol-contract";
|
|
375
|
+
interface SbtcEventsTable {
|
|
376
|
+
cursor: string;
|
|
377
|
+
block_height: number;
|
|
378
|
+
block_time: Date;
|
|
379
|
+
tx_id: string;
|
|
380
|
+
tx_index: number;
|
|
381
|
+
event_index: number;
|
|
382
|
+
topic: SbtcEventTopic;
|
|
383
|
+
request_id: number | null;
|
|
384
|
+
amount: string | null;
|
|
385
|
+
sender: string | null;
|
|
386
|
+
recipient_btc_version: number | null;
|
|
387
|
+
recipient_btc_hashbytes: string | null;
|
|
388
|
+
bitcoin_txid: string | null;
|
|
389
|
+
output_index: number | null;
|
|
390
|
+
sweep_txid: string | null;
|
|
391
|
+
burn_hash: string | null;
|
|
392
|
+
burn_height: number | null;
|
|
393
|
+
signer_bitmap: string | null;
|
|
394
|
+
max_fee: string | null;
|
|
395
|
+
fee: string | null;
|
|
396
|
+
block_height_at_request: number | null;
|
|
397
|
+
governance_contract_type: number | null;
|
|
398
|
+
governance_new_contract: string | null;
|
|
399
|
+
signer_aggregate_pubkey: string | null;
|
|
400
|
+
signer_threshold: number | null;
|
|
401
|
+
signer_address: string | null;
|
|
402
|
+
signer_keys_count: number | null;
|
|
403
|
+
canonical: Generated<boolean>;
|
|
404
|
+
source_cursor: string;
|
|
405
|
+
created_at: Generated<Date>;
|
|
406
|
+
}
|
|
407
|
+
type SbtcTokenEventType = "transfer" | "mint" | "burn";
|
|
408
|
+
interface SbtcTokenEventsTable {
|
|
409
|
+
cursor: string;
|
|
410
|
+
block_height: number;
|
|
411
|
+
block_time: Date;
|
|
412
|
+
tx_id: string;
|
|
413
|
+
tx_index: number;
|
|
414
|
+
event_index: number;
|
|
415
|
+
event_type: SbtcTokenEventType;
|
|
416
|
+
sender: string | null;
|
|
417
|
+
recipient: string | null;
|
|
418
|
+
amount: string;
|
|
419
|
+
memo: string | null;
|
|
420
|
+
canonical: Generated<boolean>;
|
|
421
|
+
source_cursor: string;
|
|
422
|
+
created_at: Generated<Date>;
|
|
423
|
+
}
|
|
424
|
+
interface SbtcSupplySnapshotsTable {
|
|
425
|
+
date: string;
|
|
426
|
+
total_supply: Generated<string>;
|
|
427
|
+
mints_today: Generated<string>;
|
|
428
|
+
burns_today: Generated<string>;
|
|
429
|
+
deposit_count: Generated<number>;
|
|
430
|
+
withdrawal_create_count: Generated<number>;
|
|
431
|
+
withdrawal_accept_count: Generated<number>;
|
|
432
|
+
withdrawal_reject_count: Generated<number>;
|
|
433
|
+
updated_at: Generated<Date>;
|
|
434
|
+
}
|
|
435
|
+
type BnsNameEventTopic = "new-name" | "transfer-name" | "renew-name" | "burn-name" | "new-airdrop";
|
|
436
|
+
interface BnsNameEventsTable {
|
|
437
|
+
cursor: string;
|
|
438
|
+
block_height: number;
|
|
439
|
+
block_time: Date;
|
|
440
|
+
tx_id: string;
|
|
441
|
+
tx_index: number;
|
|
442
|
+
event_index: number;
|
|
443
|
+
topic: BnsNameEventTopic;
|
|
444
|
+
namespace: string;
|
|
445
|
+
name: string;
|
|
446
|
+
fqn: string;
|
|
447
|
+
owner: string | null;
|
|
448
|
+
bns_id: string;
|
|
449
|
+
registered_at: number | null;
|
|
450
|
+
imported_at: number | null;
|
|
451
|
+
renewal_height: number | null;
|
|
452
|
+
stx_burn: string | null;
|
|
453
|
+
preordered_by: string | null;
|
|
454
|
+
hashed_salted_fqn_preorder: string | null;
|
|
455
|
+
canonical: Generated<boolean>;
|
|
456
|
+
source_cursor: string;
|
|
457
|
+
created_at: Generated<Date>;
|
|
458
|
+
}
|
|
459
|
+
type BnsNamespaceEventStatus = "launch" | "transfer-manager" | "freeze-manager" | "update-price-manager" | "freeze-price-manager" | "turn-off-manager-transfers";
|
|
460
|
+
interface BnsNamespaceEventsTable {
|
|
461
|
+
cursor: string;
|
|
462
|
+
block_height: number;
|
|
463
|
+
block_time: Date;
|
|
464
|
+
tx_id: string;
|
|
465
|
+
tx_index: number;
|
|
466
|
+
event_index: number;
|
|
467
|
+
status: BnsNamespaceEventStatus;
|
|
468
|
+
namespace: string;
|
|
469
|
+
manager: string | null;
|
|
470
|
+
manager_frozen: boolean | null;
|
|
471
|
+
manager_transfers_disabled: boolean | null;
|
|
472
|
+
price_function: string | null;
|
|
473
|
+
price_frozen: boolean | null;
|
|
474
|
+
lifetime: number | null;
|
|
475
|
+
revealed_at: number | null;
|
|
476
|
+
launched_at: number | null;
|
|
477
|
+
canonical: Generated<boolean>;
|
|
478
|
+
source_cursor: string;
|
|
479
|
+
created_at: Generated<Date>;
|
|
480
|
+
}
|
|
481
|
+
type BnsMarketplaceAction = "list-in-ustx" | "unlist-in-ustx" | "buy-in-ustx";
|
|
482
|
+
interface BnsMarketplaceEventsTable {
|
|
483
|
+
cursor: string;
|
|
484
|
+
block_height: number;
|
|
485
|
+
block_time: Date;
|
|
486
|
+
tx_id: string;
|
|
487
|
+
tx_index: number;
|
|
488
|
+
event_index: number;
|
|
489
|
+
action: BnsMarketplaceAction;
|
|
490
|
+
bns_id: string;
|
|
491
|
+
price_ustx: string | null;
|
|
492
|
+
commission: string | null;
|
|
493
|
+
canonical: Generated<boolean>;
|
|
494
|
+
source_cursor: string;
|
|
495
|
+
created_at: Generated<Date>;
|
|
496
|
+
}
|
|
497
|
+
interface BnsNamesTable {
|
|
498
|
+
fqn: string;
|
|
499
|
+
namespace: string;
|
|
500
|
+
name: string;
|
|
501
|
+
owner: string;
|
|
502
|
+
bns_id: string;
|
|
503
|
+
registered_at: number | null;
|
|
504
|
+
renewal_height: number | null;
|
|
505
|
+
last_event_cursor: string;
|
|
506
|
+
last_event_at: Date;
|
|
507
|
+
updated_at: Generated<Date>;
|
|
508
|
+
}
|
|
509
|
+
interface BnsNamespacesTable {
|
|
510
|
+
namespace: string;
|
|
511
|
+
manager: string | null;
|
|
512
|
+
manager_frozen: Generated<boolean>;
|
|
513
|
+
price_frozen: Generated<boolean>;
|
|
514
|
+
lifetime: number | null;
|
|
515
|
+
launched_at: number | null;
|
|
516
|
+
last_event_cursor: string;
|
|
517
|
+
last_event_at: Date;
|
|
518
|
+
name_count: Generated<number>;
|
|
519
|
+
updated_at: Generated<Date>;
|
|
520
|
+
}
|
|
317
521
|
interface Database {
|
|
318
522
|
blocks: BlocksTable;
|
|
319
523
|
transactions: TransactionsTable;
|
|
@@ -352,6 +556,17 @@ interface Database {
|
|
|
352
556
|
decoded_events: DecodedEventsTable;
|
|
353
557
|
l2_decoder_checkpoints: L2DecoderCheckpointsTable;
|
|
354
558
|
chain_reorgs: ChainReorgsTable;
|
|
559
|
+
pox4_calls: Pox4CallsTable;
|
|
560
|
+
pox4_cycles_daily: Pox4CyclesDailyTable;
|
|
561
|
+
pox4_signers_daily: Pox4SignersDailyTable;
|
|
562
|
+
sbtc_events: SbtcEventsTable;
|
|
563
|
+
sbtc_token_events: SbtcTokenEventsTable;
|
|
564
|
+
sbtc_supply_snapshots: SbtcSupplySnapshotsTable;
|
|
565
|
+
bns_name_events: BnsNameEventsTable;
|
|
566
|
+
bns_namespace_events: BnsNamespaceEventsTable;
|
|
567
|
+
bns_marketplace_events: BnsMarketplaceEventsTable;
|
|
568
|
+
bns_names: BnsNamesTable;
|
|
569
|
+
bns_namespaces: BnsNamespacesTable;
|
|
355
570
|
}
|
|
356
571
|
type TenantStatus = "provisioning" | "active" | "limit_warning" | "paused_limit" | "suspended" | "error" | "deleted";
|
|
357
572
|
interface TenantsTable {
|
|
@@ -501,9 +716,17 @@ interface UsageSummary {
|
|
|
501
716
|
}
|
|
502
717
|
/** Get current usage for an account. */
|
|
503
718
|
declare function getUsage(db: Kysely<Database>, accountId: string): Promise<UsageSummary>;
|
|
719
|
+
interface ProductUsageBreakdown {
|
|
720
|
+
streamsEventsToday: number;
|
|
721
|
+
streamsEventsThisMonth: number;
|
|
722
|
+
indexDecodedEventsToday: number;
|
|
723
|
+
indexDecodedEventsThisMonth: number;
|
|
724
|
+
}
|
|
725
|
+
/** Get per-product event counts (today + this month) for an account. */
|
|
726
|
+
declare function getProductUsage(db: Kysely<Database>, accountId: string): Promise<ProductUsageBreakdown>;
|
|
504
727
|
/**
|
|
505
728
|
* Measure storage for all accounts by querying pg_total_relation_size
|
|
506
729
|
* for each tenant's subgraph schemas.
|
|
507
730
|
*/
|
|
508
731
|
declare function measureStorage(db: Kysely<Database>): Promise<void>;
|
|
509
|
-
export { measureStorage, incrementStreamsEventsReturned, incrementIndexDecodedEventsReturned, incrementApiRequests, getUsage, UsageSummary };
|
|
732
|
+
export { measureStorage, incrementStreamsEventsReturned, incrementIndexDecodedEventsReturned, incrementApiRequests, getUsage, getProductUsage, UsageSummary, ProductUsageBreakdown };
|
|
@@ -54,6 +54,21 @@ async function getUsage(db, accountId) {
|
|
|
54
54
|
storageBytes: Number(storageRow?.storage_bytes ?? 0)
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
|
+
async function getProductUsage(db, accountId) {
|
|
58
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
59
|
+
const monthStart = `${today.slice(0, 7)}-01`;
|
|
60
|
+
const dailyRow = await db.selectFrom("usage_daily").select(["streams_events_returned", "index_decoded_events_returned"]).where("account_id", "=", accountId).where("date", "=", today).executeTakeFirst();
|
|
61
|
+
const monthlyRow = await db.selectFrom("usage_daily").select([
|
|
62
|
+
sql`COALESCE(SUM(streams_events_returned), 0)`.as("streams_total"),
|
|
63
|
+
sql`COALESCE(SUM(index_decoded_events_returned), 0)`.as("index_total")
|
|
64
|
+
]).where("account_id", "=", accountId).where("date", ">=", monthStart).executeTakeFirst();
|
|
65
|
+
return {
|
|
66
|
+
streamsEventsToday: Number(dailyRow?.streams_events_returned ?? 0),
|
|
67
|
+
streamsEventsThisMonth: Number(monthlyRow?.streams_total ?? 0),
|
|
68
|
+
indexDecodedEventsToday: Number(dailyRow?.index_decoded_events_returned ?? 0),
|
|
69
|
+
indexDecodedEventsThisMonth: Number(monthlyRow?.index_total ?? 0)
|
|
70
|
+
};
|
|
71
|
+
}
|
|
57
72
|
async function measureStorage(db) {
|
|
58
73
|
const accountSubgraphs = await db.selectFrom("subgraphs").select(["account_id", "schema_name"]).where("schema_name", "is not", null).execute();
|
|
59
74
|
const byAccount = new Map;
|
|
@@ -86,8 +101,9 @@ export {
|
|
|
86
101
|
incrementStreamsEventsReturned,
|
|
87
102
|
incrementIndexDecodedEventsReturned,
|
|
88
103
|
incrementApiRequests,
|
|
89
|
-
getUsage
|
|
104
|
+
getUsage,
|
|
105
|
+
getProductUsage
|
|
90
106
|
};
|
|
91
107
|
|
|
92
|
-
//# debugId=
|
|
108
|
+
//# debugId=4876492CE8C84D6164756E2164756E21
|
|
93
109
|
//# sourceMappingURL=usage.js.map
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/db/queries/usage.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { type Kysely, sql } from \"kysely\";\nimport type { Database } from \"../types.ts\";\n\n/** Increment API request counter for today. Fire-and-forget safe. */\nexport async function incrementApiRequests(\n\tdb: Kysely<Database>,\n\taccountId: string,\n): Promise<void> {\n\tconst today = new Date().toISOString().slice(0, 10);\n\tawait sql`\n\t\tINSERT INTO usage_daily (account_id, tenant_id, date, api_requests, deliveries)\n\t\tVALUES (${accountId}, NULL, ${today}, 1, 0)\n\t\tON CONFLICT (account_id, date) WHERE tenant_id IS NULL\n\t\tDO UPDATE SET api_requests = usage_daily.api_requests + 1\n\t`.execute(db);\n}\n\nasync function incrementAccountDailyCounter(\n\tdb: Kysely<Database>,\n\taccountId: string,\n\tcolumn: \"streams_events_returned\" | \"index_decoded_events_returned\",\n\tquantity: number,\n): Promise<void> {\n\tif (quantity <= 0) return;\n\tconst today = new Date().toISOString().slice(0, 10);\n\tawait sql`\n\t\tINSERT INTO usage_daily (account_id, tenant_id, date, api_requests, deliveries, ${sql.raw(column)})\n\t\tVALUES (${accountId}, NULL, ${today}, 0, 0, ${quantity})\n\t\tON CONFLICT (account_id, date) WHERE tenant_id IS NULL\n\t\tDO UPDATE SET ${sql.raw(column)} = usage_daily.${sql.raw(column)} + ${quantity}\n\t`.execute(db);\n}\n\nexport async function incrementStreamsEventsReturned(\n\tdb: Kysely<Database>,\n\taccountId: string,\n\tquantity: number,\n): Promise<void> {\n\tawait incrementAccountDailyCounter(\n\t\tdb,\n\t\taccountId,\n\t\t\"streams_events_returned\",\n\t\tquantity,\n\t);\n}\n\nexport async function incrementIndexDecodedEventsReturned(\n\tdb: Kysely<Database>,\n\taccountId: string,\n\tquantity: number,\n): Promise<void> {\n\tawait incrementAccountDailyCounter(\n\t\tdb,\n\t\taccountId,\n\t\t\"index_decoded_events_returned\",\n\t\tquantity,\n\t);\n}\n\nexport interface UsageSummary {\n\tapiRequestsToday: number;\n\tdeliveriesThisMonth: number;\n\tstorageBytes: number;\n}\n\n/** Get current usage for an account. */\nexport async function getUsage(\n\tdb: Kysely<Database>,\n\taccountId: string,\n): Promise<UsageSummary> {\n\tconst today = new Date().toISOString().slice(0, 10);\n\tconst monthStart = `${today.slice(0, 7)}-01`; // YYYY-MM-01\n\n\t// Today's API requests\n\tconst dailyRow = await db\n\t\t.selectFrom(\"usage_daily\")\n\t\t.select(\"api_requests\")\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.where(\"date\", \"=\", today)\n\t\t.executeTakeFirst();\n\n\t// This month's deliveries\n\tconst monthlyRow = await db\n\t\t.selectFrom(\"usage_daily\")\n\t\t.select(sql<number>`COALESCE(SUM(deliveries), 0)`.as(\"total\"))\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.where(\"date\", \">=\", monthStart)\n\t\t.executeTakeFirst();\n\n\t// Latest storage snapshot\n\tconst storageRow = await db\n\t\t.selectFrom(\"usage_snapshots\")\n\t\t.select(\"storage_bytes\")\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.orderBy(\"measured_at\", \"desc\")\n\t\t.limit(1)\n\t\t.executeTakeFirst();\n\n\treturn {\n\t\tapiRequestsToday: dailyRow?.api_requests ?? 0,\n\t\tdeliveriesThisMonth: Number(monthlyRow?.total ?? 0),\n\t\tstorageBytes: Number(storageRow?.storage_bytes ?? 0),\n\t};\n}\n\n/**\n * Measure storage for all accounts by querying pg_total_relation_size\n * for each tenant's subgraph schemas.\n */\nexport async function measureStorage(db: Kysely<Database>): Promise<void> {\n\t// Get all accounts with subgraphs\n\tconst accountSubgraphs = await db\n\t\t.selectFrom(\"subgraphs\")\n\t\t.select([\"account_id\", \"schema_name\"])\n\t\t.where(\"schema_name\", \"is not\", null)\n\t\t.execute();\n\n\t// Group schemas by account\n\tconst byAccount = new Map<string, string[]>();\n\tfor (const row of accountSubgraphs) {\n\t\tconst schemas = byAccount.get(row.account_id) ?? [];\n\t\tif (row.schema_name) schemas.push(row.schema_name);\n\t\tbyAccount.set(row.account_id, schemas);\n\t}\n\n\tfor (const [accountId, schemas] of byAccount) {\n\t\tlet totalBytes = 0;\n\t\tfor (const schema of schemas) {\n\t\t\ttry {\n\t\t\t\tconst result = await sql<{ size: string }>`\n SELECT COALESCE(SUM(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))), 0)::text as size\n FROM pg_tables WHERE schemaname = ${schema}\n `.execute(db);\n\t\t\t\tconst row = result.rows[0] as { size?: string } | undefined;\n\t\t\t\ttotalBytes += Number(row?.size ?? 0);\n\t\t\t} catch {\n\t\t\t\t// Schema may not exist\n\t\t\t}\n\t\t}\n\n\t\tawait db\n\t\t\t.insertInto(\"usage_snapshots\")\n\t\t\t.values({\n\t\t\t\taccount_id: accountId,\n\t\t\t\tstorage_bytes: totalBytes,\n\t\t\t})\n\t\t\t.execute();\n\t}\n}\n"
|
|
5
|
+
"import { type Kysely, sql } from \"kysely\";\nimport type { Database } from \"../types.ts\";\n\n/** Increment API request counter for today. Fire-and-forget safe. */\nexport async function incrementApiRequests(\n\tdb: Kysely<Database>,\n\taccountId: string,\n): Promise<void> {\n\tconst today = new Date().toISOString().slice(0, 10);\n\tawait sql`\n\t\tINSERT INTO usage_daily (account_id, tenant_id, date, api_requests, deliveries)\n\t\tVALUES (${accountId}, NULL, ${today}, 1, 0)\n\t\tON CONFLICT (account_id, date) WHERE tenant_id IS NULL\n\t\tDO UPDATE SET api_requests = usage_daily.api_requests + 1\n\t`.execute(db);\n}\n\nasync function incrementAccountDailyCounter(\n\tdb: Kysely<Database>,\n\taccountId: string,\n\tcolumn: \"streams_events_returned\" | \"index_decoded_events_returned\",\n\tquantity: number,\n): Promise<void> {\n\tif (quantity <= 0) return;\n\tconst today = new Date().toISOString().slice(0, 10);\n\tawait sql`\n\t\tINSERT INTO usage_daily (account_id, tenant_id, date, api_requests, deliveries, ${sql.raw(column)})\n\t\tVALUES (${accountId}, NULL, ${today}, 0, 0, ${quantity})\n\t\tON CONFLICT (account_id, date) WHERE tenant_id IS NULL\n\t\tDO UPDATE SET ${sql.raw(column)} = usage_daily.${sql.raw(column)} + ${quantity}\n\t`.execute(db);\n}\n\nexport async function incrementStreamsEventsReturned(\n\tdb: Kysely<Database>,\n\taccountId: string,\n\tquantity: number,\n): Promise<void> {\n\tawait incrementAccountDailyCounter(\n\t\tdb,\n\t\taccountId,\n\t\t\"streams_events_returned\",\n\t\tquantity,\n\t);\n}\n\nexport async function incrementIndexDecodedEventsReturned(\n\tdb: Kysely<Database>,\n\taccountId: string,\n\tquantity: number,\n): Promise<void> {\n\tawait incrementAccountDailyCounter(\n\t\tdb,\n\t\taccountId,\n\t\t\"index_decoded_events_returned\",\n\t\tquantity,\n\t);\n}\n\nexport interface UsageSummary {\n\tapiRequestsToday: number;\n\tdeliveriesThisMonth: number;\n\tstorageBytes: number;\n}\n\n/** Get current usage for an account. */\nexport async function getUsage(\n\tdb: Kysely<Database>,\n\taccountId: string,\n): Promise<UsageSummary> {\n\tconst today = new Date().toISOString().slice(0, 10);\n\tconst monthStart = `${today.slice(0, 7)}-01`; // YYYY-MM-01\n\n\t// Today's API requests\n\tconst dailyRow = await db\n\t\t.selectFrom(\"usage_daily\")\n\t\t.select(\"api_requests\")\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.where(\"date\", \"=\", today)\n\t\t.executeTakeFirst();\n\n\t// This month's deliveries\n\tconst monthlyRow = await db\n\t\t.selectFrom(\"usage_daily\")\n\t\t.select(sql<number>`COALESCE(SUM(deliveries), 0)`.as(\"total\"))\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.where(\"date\", \">=\", monthStart)\n\t\t.executeTakeFirst();\n\n\t// Latest storage snapshot\n\tconst storageRow = await db\n\t\t.selectFrom(\"usage_snapshots\")\n\t\t.select(\"storage_bytes\")\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.orderBy(\"measured_at\", \"desc\")\n\t\t.limit(1)\n\t\t.executeTakeFirst();\n\n\treturn {\n\t\tapiRequestsToday: dailyRow?.api_requests ?? 0,\n\t\tdeliveriesThisMonth: Number(monthlyRow?.total ?? 0),\n\t\tstorageBytes: Number(storageRow?.storage_bytes ?? 0),\n\t};\n}\n\nexport interface ProductUsageBreakdown {\n\tstreamsEventsToday: number;\n\tstreamsEventsThisMonth: number;\n\tindexDecodedEventsToday: number;\n\tindexDecodedEventsThisMonth: number;\n}\n\n/** Get per-product event counts (today + this month) for an account. */\nexport async function getProductUsage(\n\tdb: Kysely<Database>,\n\taccountId: string,\n): Promise<ProductUsageBreakdown> {\n\tconst today = new Date().toISOString().slice(0, 10);\n\tconst monthStart = `${today.slice(0, 7)}-01`;\n\n\tconst dailyRow = await db\n\t\t.selectFrom(\"usage_daily\")\n\t\t.select([\"streams_events_returned\", \"index_decoded_events_returned\"])\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.where(\"date\", \"=\", today)\n\t\t.executeTakeFirst();\n\n\tconst monthlyRow = await db\n\t\t.selectFrom(\"usage_daily\")\n\t\t.select([\n\t\t\tsql<number>`COALESCE(SUM(streams_events_returned), 0)`.as(\n\t\t\t\t\"streams_total\",\n\t\t\t),\n\t\t\tsql<number>`COALESCE(SUM(index_decoded_events_returned), 0)`.as(\n\t\t\t\t\"index_total\",\n\t\t\t),\n\t\t])\n\t\t.where(\"account_id\", \"=\", accountId)\n\t\t.where(\"date\", \">=\", monthStart)\n\t\t.executeTakeFirst();\n\n\treturn {\n\t\tstreamsEventsToday: Number(dailyRow?.streams_events_returned ?? 0),\n\t\tstreamsEventsThisMonth: Number(monthlyRow?.streams_total ?? 0),\n\t\tindexDecodedEventsToday: Number(\n\t\t\tdailyRow?.index_decoded_events_returned ?? 0,\n\t\t),\n\t\tindexDecodedEventsThisMonth: Number(monthlyRow?.index_total ?? 0),\n\t};\n}\n\n/**\n * Measure storage for all accounts by querying pg_total_relation_size\n * for each tenant's subgraph schemas.\n */\nexport async function measureStorage(db: Kysely<Database>): Promise<void> {\n\t// Get all accounts with subgraphs\n\tconst accountSubgraphs = await db\n\t\t.selectFrom(\"subgraphs\")\n\t\t.select([\"account_id\", \"schema_name\"])\n\t\t.where(\"schema_name\", \"is not\", null)\n\t\t.execute();\n\n\t// Group schemas by account\n\tconst byAccount = new Map<string, string[]>();\n\tfor (const row of accountSubgraphs) {\n\t\tconst schemas = byAccount.get(row.account_id) ?? [];\n\t\tif (row.schema_name) schemas.push(row.schema_name);\n\t\tbyAccount.set(row.account_id, schemas);\n\t}\n\n\tfor (const [accountId, schemas] of byAccount) {\n\t\tlet totalBytes = 0;\n\t\tfor (const schema of schemas) {\n\t\t\ttry {\n\t\t\t\tconst result = await sql<{ size: string }>`\n SELECT COALESCE(SUM(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))), 0)::text as size\n FROM pg_tables WHERE schemaname = ${schema}\n `.execute(db);\n\t\t\t\tconst row = result.rows[0] as { size?: string } | undefined;\n\t\t\t\ttotalBytes += Number(row?.size ?? 0);\n\t\t\t} catch {\n\t\t\t\t// Schema may not exist\n\t\t\t}\n\t\t}\n\n\t\tawait db\n\t\t\t.insertInto(\"usage_snapshots\")\n\t\t\t.values({\n\t\t\t\taccount_id: accountId,\n\t\t\t\tstorage_bytes: totalBytes,\n\t\t\t})\n\t\t\t.execute();\n\t}\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "4876492CE8C84D6164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/src/db/schema.d.ts
CHANGED
|
@@ -103,6 +103,8 @@ interface ApiKeysTable {
|
|
|
103
103
|
rate_limit: Generated<number>;
|
|
104
104
|
ip_address: string;
|
|
105
105
|
account_id: string;
|
|
106
|
+
product: Generated<"account" | "streams" | "index">;
|
|
107
|
+
tier: "free" | "build" | "scale" | "enterprise" | null;
|
|
106
108
|
last_used_at: Date | null;
|
|
107
109
|
revoked_at: Date | null;
|
|
108
110
|
created_at: Generated<Date>;
|
|
@@ -313,6 +315,208 @@ interface ChainReorgsTable {
|
|
|
313
315
|
new_canonical_event_index: number;
|
|
314
316
|
created_at: Generated<Date>;
|
|
315
317
|
}
|
|
318
|
+
type Pox4FunctionName = "stack-stx" | "delegate-stx" | "stack-extend" | "stack-increase" | "revoke-delegate-stx" | "delegate-stack-stx" | "delegate-stack-extend" | "delegate-stack-increase" | "stack-aggregation-commit" | "stack-aggregation-commit-indexed" | "stack-aggregation-increase" | "set-signer-key-authorization";
|
|
319
|
+
interface Pox4CallsTable {
|
|
320
|
+
cursor: string;
|
|
321
|
+
block_height: number;
|
|
322
|
+
block_time: Date;
|
|
323
|
+
burn_block_height: number;
|
|
324
|
+
tx_id: string;
|
|
325
|
+
tx_index: number;
|
|
326
|
+
function_name: Pox4FunctionName;
|
|
327
|
+
caller: string;
|
|
328
|
+
stacker: string | null;
|
|
329
|
+
delegate_to: string | null;
|
|
330
|
+
amount_ustx: string | null;
|
|
331
|
+
lock_period: number | null;
|
|
332
|
+
pox_addr_version: number | null;
|
|
333
|
+
pox_addr_hashbytes: string | null;
|
|
334
|
+
pox_addr_btc: string | null;
|
|
335
|
+
start_cycle: number | null;
|
|
336
|
+
end_cycle: number | null;
|
|
337
|
+
signer_key: string | null;
|
|
338
|
+
signer_signature: string | null;
|
|
339
|
+
auth_id: string | null;
|
|
340
|
+
max_amount: string | null;
|
|
341
|
+
reward_cycle: number | null;
|
|
342
|
+
aggregated_amount_ustx: string | null;
|
|
343
|
+
aggregated_signer_index: number | null;
|
|
344
|
+
auth_period: number | null;
|
|
345
|
+
auth_topic: string | null;
|
|
346
|
+
auth_allowed: boolean | null;
|
|
347
|
+
result_ok: boolean;
|
|
348
|
+
result_raw: string;
|
|
349
|
+
canonical: Generated<boolean>;
|
|
350
|
+
source_cursor: string;
|
|
351
|
+
created_at: Generated<Date>;
|
|
352
|
+
}
|
|
353
|
+
interface Pox4CyclesDailyTable {
|
|
354
|
+
date: string;
|
|
355
|
+
reward_cycle: number;
|
|
356
|
+
total_stacked_ustx: Generated<string>;
|
|
357
|
+
solo_stackers: Generated<number>;
|
|
358
|
+
delegated_principals: Generated<number>;
|
|
359
|
+
unique_pools: Generated<number>;
|
|
360
|
+
unique_signers: Generated<number>;
|
|
361
|
+
calls_today: Generated<number>;
|
|
362
|
+
updated_at: Generated<Date>;
|
|
363
|
+
}
|
|
364
|
+
interface Pox4SignersDailyTable {
|
|
365
|
+
date: string;
|
|
366
|
+
reward_cycle: number;
|
|
367
|
+
signer_key: string;
|
|
368
|
+
weight_ustx: Generated<string>;
|
|
369
|
+
stacker_count: Generated<number>;
|
|
370
|
+
aggregation_calls: Generated<number>;
|
|
371
|
+
updated_at: Generated<Date>;
|
|
372
|
+
}
|
|
373
|
+
type SbtcEventTopic = "completed-deposit" | "withdrawal-create" | "withdrawal-accept" | "withdrawal-reject" | "key-rotation" | "update-protocol-contract";
|
|
374
|
+
interface SbtcEventsTable {
|
|
375
|
+
cursor: string;
|
|
376
|
+
block_height: number;
|
|
377
|
+
block_time: Date;
|
|
378
|
+
tx_id: string;
|
|
379
|
+
tx_index: number;
|
|
380
|
+
event_index: number;
|
|
381
|
+
topic: SbtcEventTopic;
|
|
382
|
+
request_id: number | null;
|
|
383
|
+
amount: string | null;
|
|
384
|
+
sender: string | null;
|
|
385
|
+
recipient_btc_version: number | null;
|
|
386
|
+
recipient_btc_hashbytes: string | null;
|
|
387
|
+
bitcoin_txid: string | null;
|
|
388
|
+
output_index: number | null;
|
|
389
|
+
sweep_txid: string | null;
|
|
390
|
+
burn_hash: string | null;
|
|
391
|
+
burn_height: number | null;
|
|
392
|
+
signer_bitmap: string | null;
|
|
393
|
+
max_fee: string | null;
|
|
394
|
+
fee: string | null;
|
|
395
|
+
block_height_at_request: number | null;
|
|
396
|
+
governance_contract_type: number | null;
|
|
397
|
+
governance_new_contract: string | null;
|
|
398
|
+
signer_aggregate_pubkey: string | null;
|
|
399
|
+
signer_threshold: number | null;
|
|
400
|
+
signer_address: string | null;
|
|
401
|
+
signer_keys_count: number | null;
|
|
402
|
+
canonical: Generated<boolean>;
|
|
403
|
+
source_cursor: string;
|
|
404
|
+
created_at: Generated<Date>;
|
|
405
|
+
}
|
|
406
|
+
type SbtcTokenEventType = "transfer" | "mint" | "burn";
|
|
407
|
+
interface SbtcTokenEventsTable {
|
|
408
|
+
cursor: string;
|
|
409
|
+
block_height: number;
|
|
410
|
+
block_time: Date;
|
|
411
|
+
tx_id: string;
|
|
412
|
+
tx_index: number;
|
|
413
|
+
event_index: number;
|
|
414
|
+
event_type: SbtcTokenEventType;
|
|
415
|
+
sender: string | null;
|
|
416
|
+
recipient: string | null;
|
|
417
|
+
amount: string;
|
|
418
|
+
memo: string | null;
|
|
419
|
+
canonical: Generated<boolean>;
|
|
420
|
+
source_cursor: string;
|
|
421
|
+
created_at: Generated<Date>;
|
|
422
|
+
}
|
|
423
|
+
interface SbtcSupplySnapshotsTable {
|
|
424
|
+
date: string;
|
|
425
|
+
total_supply: Generated<string>;
|
|
426
|
+
mints_today: Generated<string>;
|
|
427
|
+
burns_today: Generated<string>;
|
|
428
|
+
deposit_count: Generated<number>;
|
|
429
|
+
withdrawal_create_count: Generated<number>;
|
|
430
|
+
withdrawal_accept_count: Generated<number>;
|
|
431
|
+
withdrawal_reject_count: Generated<number>;
|
|
432
|
+
updated_at: Generated<Date>;
|
|
433
|
+
}
|
|
434
|
+
type BnsNameEventTopic = "new-name" | "transfer-name" | "renew-name" | "burn-name" | "new-airdrop";
|
|
435
|
+
interface BnsNameEventsTable {
|
|
436
|
+
cursor: string;
|
|
437
|
+
block_height: number;
|
|
438
|
+
block_time: Date;
|
|
439
|
+
tx_id: string;
|
|
440
|
+
tx_index: number;
|
|
441
|
+
event_index: number;
|
|
442
|
+
topic: BnsNameEventTopic;
|
|
443
|
+
namespace: string;
|
|
444
|
+
name: string;
|
|
445
|
+
fqn: string;
|
|
446
|
+
owner: string | null;
|
|
447
|
+
bns_id: string;
|
|
448
|
+
registered_at: number | null;
|
|
449
|
+
imported_at: number | null;
|
|
450
|
+
renewal_height: number | null;
|
|
451
|
+
stx_burn: string | null;
|
|
452
|
+
preordered_by: string | null;
|
|
453
|
+
hashed_salted_fqn_preorder: string | null;
|
|
454
|
+
canonical: Generated<boolean>;
|
|
455
|
+
source_cursor: string;
|
|
456
|
+
created_at: Generated<Date>;
|
|
457
|
+
}
|
|
458
|
+
type BnsNamespaceEventStatus = "launch" | "transfer-manager" | "freeze-manager" | "update-price-manager" | "freeze-price-manager" | "turn-off-manager-transfers";
|
|
459
|
+
interface BnsNamespaceEventsTable {
|
|
460
|
+
cursor: string;
|
|
461
|
+
block_height: number;
|
|
462
|
+
block_time: Date;
|
|
463
|
+
tx_id: string;
|
|
464
|
+
tx_index: number;
|
|
465
|
+
event_index: number;
|
|
466
|
+
status: BnsNamespaceEventStatus;
|
|
467
|
+
namespace: string;
|
|
468
|
+
manager: string | null;
|
|
469
|
+
manager_frozen: boolean | null;
|
|
470
|
+
manager_transfers_disabled: boolean | null;
|
|
471
|
+
price_function: string | null;
|
|
472
|
+
price_frozen: boolean | null;
|
|
473
|
+
lifetime: number | null;
|
|
474
|
+
revealed_at: number | null;
|
|
475
|
+
launched_at: number | null;
|
|
476
|
+
canonical: Generated<boolean>;
|
|
477
|
+
source_cursor: string;
|
|
478
|
+
created_at: Generated<Date>;
|
|
479
|
+
}
|
|
480
|
+
type BnsMarketplaceAction = "list-in-ustx" | "unlist-in-ustx" | "buy-in-ustx";
|
|
481
|
+
interface BnsMarketplaceEventsTable {
|
|
482
|
+
cursor: string;
|
|
483
|
+
block_height: number;
|
|
484
|
+
block_time: Date;
|
|
485
|
+
tx_id: string;
|
|
486
|
+
tx_index: number;
|
|
487
|
+
event_index: number;
|
|
488
|
+
action: BnsMarketplaceAction;
|
|
489
|
+
bns_id: string;
|
|
490
|
+
price_ustx: string | null;
|
|
491
|
+
commission: string | null;
|
|
492
|
+
canonical: Generated<boolean>;
|
|
493
|
+
source_cursor: string;
|
|
494
|
+
created_at: Generated<Date>;
|
|
495
|
+
}
|
|
496
|
+
interface BnsNamesTable {
|
|
497
|
+
fqn: string;
|
|
498
|
+
namespace: string;
|
|
499
|
+
name: string;
|
|
500
|
+
owner: string;
|
|
501
|
+
bns_id: string;
|
|
502
|
+
registered_at: number | null;
|
|
503
|
+
renewal_height: number | null;
|
|
504
|
+
last_event_cursor: string;
|
|
505
|
+
last_event_at: Date;
|
|
506
|
+
updated_at: Generated<Date>;
|
|
507
|
+
}
|
|
508
|
+
interface BnsNamespacesTable {
|
|
509
|
+
namespace: string;
|
|
510
|
+
manager: string | null;
|
|
511
|
+
manager_frozen: Generated<boolean>;
|
|
512
|
+
price_frozen: Generated<boolean>;
|
|
513
|
+
lifetime: number | null;
|
|
514
|
+
launched_at: number | null;
|
|
515
|
+
last_event_cursor: string;
|
|
516
|
+
last_event_at: Date;
|
|
517
|
+
name_count: Generated<number>;
|
|
518
|
+
updated_at: Generated<Date>;
|
|
519
|
+
}
|
|
316
520
|
interface Database {
|
|
317
521
|
blocks: BlocksTable;
|
|
318
522
|
transactions: TransactionsTable;
|
|
@@ -351,6 +555,17 @@ interface Database {
|
|
|
351
555
|
decoded_events: DecodedEventsTable;
|
|
352
556
|
l2_decoder_checkpoints: L2DecoderCheckpointsTable;
|
|
353
557
|
chain_reorgs: ChainReorgsTable;
|
|
558
|
+
pox4_calls: Pox4CallsTable;
|
|
559
|
+
pox4_cycles_daily: Pox4CyclesDailyTable;
|
|
560
|
+
pox4_signers_daily: Pox4SignersDailyTable;
|
|
561
|
+
sbtc_events: SbtcEventsTable;
|
|
562
|
+
sbtc_token_events: SbtcTokenEventsTable;
|
|
563
|
+
sbtc_supply_snapshots: SbtcSupplySnapshotsTable;
|
|
564
|
+
bns_name_events: BnsNameEventsTable;
|
|
565
|
+
bns_namespace_events: BnsNamespaceEventsTable;
|
|
566
|
+
bns_marketplace_events: BnsMarketplaceEventsTable;
|
|
567
|
+
bns_names: BnsNamesTable;
|
|
568
|
+
bns_namespaces: BnsNamespacesTable;
|
|
354
569
|
}
|
|
355
570
|
type TenantStatus = "provisioning" | "active" | "limit_warning" | "paused_limit" | "suspended" | "error" | "deleted";
|
|
356
571
|
interface TenantsTable {
|
|
@@ -562,4 +777,4 @@ interface SubscriptionDeliveriesTable {
|
|
|
562
777
|
}
|
|
563
778
|
type SubscriptionDelivery = Selectable<SubscriptionDeliveriesTable>;
|
|
564
779
|
type InsertSubscriptionDelivery = Insertable<SubscriptionDeliveriesTable>;
|
|
565
|
-
export { WaitlistTable, UsageSnapshotsTable, UsageSnapshot, UsageDailyTable, UsageDaily, UpdateTransaction, UpdateTenantUsageMonthly, UpdateTenantComputeAddon, UpdateTenant, UpdateSubscriptionOutbox, UpdateSubscription, UpdateSubgraphOperation, UpdateSubgraph, UpdateProject, UpdateIndexProgress, UpdateEvent, UpdateChatSession, UpdateBlock, UpdateApiKey, UpdateAccountSpendCap, TransactionsTable, Transaction, TenantsTable, TenantUsageMonthlyTable, TenantUsageMonthly, TenantStatus, TenantComputeAddonsTable, TenantComputeAddon, Tenant, TeamMembersTable, TeamMember, TeamInvitationsTable, TeamInvitation, SubscriptionsTable, SubscriptionStatus, SubscriptionRuntime, SubscriptionOutboxTable, SubscriptionOutbox, SubscriptionFormat, SubscriptionDelivery, SubscriptionDeliveriesTable, Subscription, SubgraphsTable, SubgraphUsageDailyTable, SubgraphUsageDaily, SubgraphTableSnapshotsTable, SubgraphProcessingStatsTable, SubgraphOperationsTable, SubgraphOperationStatus, SubgraphOperationKind, SubgraphOperation, SubgraphHealthSnapshotsTable, SubgraphHealthSnapshot, SubgraphGapsTable, SubgraphGap, Subgraph, SessionsTable, Session, ProvisioningAuditStatus, ProvisioningAuditLogTable, ProvisioningAuditLog, ProvisioningAuditEvent, ProjectsTable, Project, ProcessedStripeEventsTable, OutboxStatus, MagicLinksTable, MagicLink, L2DecoderCheckpointsTable, InsertTransaction, InsertTenantUsageMonthly, InsertTenantComputeAddon, InsertTenant, InsertTeamMember, InsertTeamInvitation, InsertSubscriptionOutbox, InsertSubscriptionDelivery, InsertSubscription, InsertSubgraphUsageDaily, InsertSubgraphOperation, InsertSubgraphHealthSnapshot, InsertSubgraphGap, InsertSubgraph, InsertSession, InsertProvisioningAuditLog, InsertProject, InsertMagicLink, InsertIndexProgress, InsertEvent, InsertChatSession, InsertChatMessage, InsertBlock, InsertApiKey, InsertAccountSpendCap, InsertAccountInsight, InsertAccountAgentRun, InsertAccount, IndexProgressTable, IndexProgress, EventsTable, Event, DecodedEventsTable, Database, ChatSessionsTable, ChatSession, ChatMessagesTable, ChatMessage, ChainReorgsTable, BlocksTable, Block, ApiKeysTable, ApiKey, AccountsTable, AccountSpendCapsTable, AccountSpendCap, AccountInsightsTable, AccountInsight, AccountAgentRunsTable, AccountAgentRun, Account };
|
|
780
|
+
export { WaitlistTable, UsageSnapshotsTable, UsageSnapshot, UsageDailyTable, UsageDaily, UpdateTransaction, UpdateTenantUsageMonthly, UpdateTenantComputeAddon, UpdateTenant, UpdateSubscriptionOutbox, UpdateSubscription, UpdateSubgraphOperation, UpdateSubgraph, UpdateProject, UpdateIndexProgress, UpdateEvent, UpdateChatSession, UpdateBlock, UpdateApiKey, UpdateAccountSpendCap, TransactionsTable, Transaction, TenantsTable, TenantUsageMonthlyTable, TenantUsageMonthly, TenantStatus, TenantComputeAddonsTable, TenantComputeAddon, Tenant, TeamMembersTable, TeamMember, TeamInvitationsTable, TeamInvitation, SubscriptionsTable, SubscriptionStatus, SubscriptionRuntime, SubscriptionOutboxTable, SubscriptionOutbox, SubscriptionFormat, SubscriptionDelivery, SubscriptionDeliveriesTable, Subscription, SubgraphsTable, SubgraphUsageDailyTable, SubgraphUsageDaily, SubgraphTableSnapshotsTable, SubgraphProcessingStatsTable, SubgraphOperationsTable, SubgraphOperationStatus, SubgraphOperationKind, SubgraphOperation, SubgraphHealthSnapshotsTable, SubgraphHealthSnapshot, SubgraphGapsTable, SubgraphGap, Subgraph, SessionsTable, Session, SbtcTokenEventsTable, SbtcTokenEventType, SbtcSupplySnapshotsTable, SbtcEventsTable, SbtcEventTopic, ProvisioningAuditStatus, ProvisioningAuditLogTable, ProvisioningAuditLog, ProvisioningAuditEvent, ProjectsTable, Project, ProcessedStripeEventsTable, Pox4SignersDailyTable, Pox4FunctionName, Pox4CyclesDailyTable, Pox4CallsTable, OutboxStatus, MagicLinksTable, MagicLink, L2DecoderCheckpointsTable, InsertTransaction, InsertTenantUsageMonthly, InsertTenantComputeAddon, InsertTenant, InsertTeamMember, InsertTeamInvitation, InsertSubscriptionOutbox, InsertSubscriptionDelivery, InsertSubscription, InsertSubgraphUsageDaily, InsertSubgraphOperation, InsertSubgraphHealthSnapshot, InsertSubgraphGap, InsertSubgraph, InsertSession, InsertProvisioningAuditLog, InsertProject, InsertMagicLink, InsertIndexProgress, InsertEvent, InsertChatSession, InsertChatMessage, InsertBlock, InsertApiKey, InsertAccountSpendCap, InsertAccountInsight, InsertAccountAgentRun, InsertAccount, IndexProgressTable, IndexProgress, EventsTable, Event, DecodedEventsTable, Database, ChatSessionsTable, ChatSession, ChatMessagesTable, ChatMessage, ChainReorgsTable, BnsNamespacesTable, BnsNamespaceEventsTable, BnsNamespaceEventStatus, BnsNamesTable, BnsNameEventsTable, BnsNameEventTopic, BnsMarketplaceEventsTable, BnsMarketplaceAction, BlocksTable, Block, ApiKeysTable, ApiKey, AccountsTable, AccountSpendCapsTable, AccountSpendCap, AccountInsightsTable, AccountInsight, AccountAgentRunsTable, AccountAgentRun, Account };
|