@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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { type Kysely, sql } from "kysely";
|
|
2
|
+
|
|
3
|
+
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
+
await sql`SET lock_timeout = '30s'`.execute(db);
|
|
5
|
+
|
|
6
|
+
// Protocol-state events from sbtc-registry: completed-deposit,
|
|
7
|
+
// withdrawal-create, withdrawal-accept, withdrawal-reject, key-rotation,
|
|
8
|
+
// update-protocol-contract.
|
|
9
|
+
await sql`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS sbtc_events (
|
|
11
|
+
cursor TEXT PRIMARY KEY,
|
|
12
|
+
block_height BIGINT NOT NULL,
|
|
13
|
+
block_time TIMESTAMPTZ NOT NULL,
|
|
14
|
+
tx_id TEXT NOT NULL,
|
|
15
|
+
tx_index INTEGER NOT NULL,
|
|
16
|
+
event_index INTEGER NOT NULL,
|
|
17
|
+
topic TEXT NOT NULL,
|
|
18
|
+
request_id BIGINT,
|
|
19
|
+
amount TEXT,
|
|
20
|
+
sender TEXT,
|
|
21
|
+
recipient_btc_version INTEGER,
|
|
22
|
+
recipient_btc_hashbytes TEXT,
|
|
23
|
+
bitcoin_txid TEXT,
|
|
24
|
+
output_index INTEGER,
|
|
25
|
+
sweep_txid TEXT,
|
|
26
|
+
burn_hash TEXT,
|
|
27
|
+
burn_height BIGINT,
|
|
28
|
+
signer_bitmap TEXT,
|
|
29
|
+
max_fee TEXT,
|
|
30
|
+
fee TEXT,
|
|
31
|
+
block_height_at_request BIGINT,
|
|
32
|
+
governance_contract_type INTEGER,
|
|
33
|
+
governance_new_contract TEXT,
|
|
34
|
+
signer_aggregate_pubkey TEXT,
|
|
35
|
+
signer_threshold INTEGER,
|
|
36
|
+
signer_address TEXT,
|
|
37
|
+
signer_keys_count INTEGER,
|
|
38
|
+
canonical BOOLEAN NOT NULL DEFAULT true,
|
|
39
|
+
source_cursor TEXT NOT NULL,
|
|
40
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
41
|
+
CONSTRAINT sbtc_events_topic_check CHECK (topic IN (
|
|
42
|
+
'completed-deposit',
|
|
43
|
+
'withdrawal-create',
|
|
44
|
+
'withdrawal-accept',
|
|
45
|
+
'withdrawal-reject',
|
|
46
|
+
'key-rotation',
|
|
47
|
+
'update-protocol-contract'
|
|
48
|
+
))
|
|
49
|
+
)
|
|
50
|
+
`.execute(db);
|
|
51
|
+
|
|
52
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_events_canonical_height_idx ON sbtc_events (canonical, block_height)`.execute(
|
|
53
|
+
db,
|
|
54
|
+
);
|
|
55
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_events_topic_height_idx ON sbtc_events (topic, block_height)`.execute(
|
|
56
|
+
db,
|
|
57
|
+
);
|
|
58
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_events_request_id_idx ON sbtc_events (request_id) WHERE request_id IS NOT NULL`.execute(
|
|
59
|
+
db,
|
|
60
|
+
);
|
|
61
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_events_bitcoin_txid_idx ON sbtc_events (bitcoin_txid) WHERE bitcoin_txid IS NOT NULL`.execute(
|
|
62
|
+
db,
|
|
63
|
+
);
|
|
64
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_events_sender_height_idx ON sbtc_events (sender, block_height) WHERE sender IS NOT NULL`.execute(
|
|
65
|
+
db,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// SIP-010 events on sbtc-token: transfer / mint / burn.
|
|
69
|
+
await sql`
|
|
70
|
+
CREATE TABLE IF NOT EXISTS sbtc_token_events (
|
|
71
|
+
cursor TEXT PRIMARY KEY,
|
|
72
|
+
block_height BIGINT NOT NULL,
|
|
73
|
+
block_time TIMESTAMPTZ NOT NULL,
|
|
74
|
+
tx_id TEXT NOT NULL,
|
|
75
|
+
tx_index INTEGER NOT NULL,
|
|
76
|
+
event_index INTEGER NOT NULL,
|
|
77
|
+
event_type TEXT NOT NULL,
|
|
78
|
+
sender TEXT,
|
|
79
|
+
recipient TEXT,
|
|
80
|
+
amount TEXT NOT NULL,
|
|
81
|
+
memo TEXT,
|
|
82
|
+
canonical BOOLEAN NOT NULL DEFAULT true,
|
|
83
|
+
source_cursor TEXT NOT NULL,
|
|
84
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
85
|
+
CONSTRAINT sbtc_token_events_type_check CHECK (event_type IN (
|
|
86
|
+
'transfer',
|
|
87
|
+
'mint',
|
|
88
|
+
'burn'
|
|
89
|
+
))
|
|
90
|
+
)
|
|
91
|
+
`.execute(db);
|
|
92
|
+
|
|
93
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_token_events_canonical_height_idx ON sbtc_token_events (canonical, block_height)`.execute(
|
|
94
|
+
db,
|
|
95
|
+
);
|
|
96
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_token_events_type_height_idx ON sbtc_token_events (event_type, block_height)`.execute(
|
|
97
|
+
db,
|
|
98
|
+
);
|
|
99
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_token_events_sender_height_idx ON sbtc_token_events (sender, block_height) WHERE sender IS NOT NULL`.execute(
|
|
100
|
+
db,
|
|
101
|
+
);
|
|
102
|
+
await sql`CREATE INDEX IF NOT EXISTS sbtc_token_events_recipient_height_idx ON sbtc_token_events (recipient, block_height) WHERE recipient IS NOT NULL`.execute(
|
|
103
|
+
db,
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
// Daily supply rollup. Computed by the aggregator job.
|
|
107
|
+
await sql`
|
|
108
|
+
CREATE TABLE IF NOT EXISTS sbtc_supply_snapshots (
|
|
109
|
+
date TEXT PRIMARY KEY,
|
|
110
|
+
total_supply TEXT NOT NULL DEFAULT '0',
|
|
111
|
+
mints_today TEXT NOT NULL DEFAULT '0',
|
|
112
|
+
burns_today TEXT NOT NULL DEFAULT '0',
|
|
113
|
+
deposit_count INTEGER NOT NULL DEFAULT 0,
|
|
114
|
+
withdrawal_create_count INTEGER NOT NULL DEFAULT 0,
|
|
115
|
+
withdrawal_accept_count INTEGER NOT NULL DEFAULT 0,
|
|
116
|
+
withdrawal_reject_count INTEGER NOT NULL DEFAULT 0,
|
|
117
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
118
|
+
)
|
|
119
|
+
`.execute(db);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
123
|
+
await sql`DROP TABLE IF EXISTS sbtc_supply_snapshots`.execute(db);
|
|
124
|
+
await sql`DROP TABLE IF EXISTS sbtc_token_events`.execute(db);
|
|
125
|
+
await sql`DROP TABLE IF EXISTS sbtc_events`.execute(db);
|
|
126
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { type Kysely, sql } from "kysely";
|
|
2
|
+
|
|
3
|
+
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
+
await sql`SET lock_timeout = '30s'`.execute(db);
|
|
5
|
+
|
|
6
|
+
// Name-lifecycle events from BNS-V2 (the `topic`-discriminated payloads):
|
|
7
|
+
// new-name, transfer-name, renew-name, burn-name, new-airdrop.
|
|
8
|
+
await sql`
|
|
9
|
+
CREATE TABLE IF NOT EXISTS bns_name_events (
|
|
10
|
+
cursor TEXT PRIMARY KEY,
|
|
11
|
+
block_height BIGINT NOT NULL,
|
|
12
|
+
block_time TIMESTAMPTZ NOT NULL,
|
|
13
|
+
tx_id TEXT NOT NULL,
|
|
14
|
+
tx_index INTEGER NOT NULL,
|
|
15
|
+
event_index INTEGER NOT NULL,
|
|
16
|
+
topic TEXT NOT NULL,
|
|
17
|
+
namespace TEXT NOT NULL,
|
|
18
|
+
name TEXT NOT NULL,
|
|
19
|
+
fqn TEXT NOT NULL,
|
|
20
|
+
owner TEXT,
|
|
21
|
+
bns_id TEXT NOT NULL,
|
|
22
|
+
registered_at BIGINT,
|
|
23
|
+
imported_at BIGINT,
|
|
24
|
+
renewal_height BIGINT,
|
|
25
|
+
stx_burn TEXT,
|
|
26
|
+
preordered_by TEXT,
|
|
27
|
+
hashed_salted_fqn_preorder TEXT,
|
|
28
|
+
canonical BOOLEAN NOT NULL DEFAULT true,
|
|
29
|
+
source_cursor TEXT NOT NULL,
|
|
30
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
31
|
+
CONSTRAINT bns_name_events_topic_check CHECK (topic IN (
|
|
32
|
+
'new-name',
|
|
33
|
+
'transfer-name',
|
|
34
|
+
'renew-name',
|
|
35
|
+
'burn-name',
|
|
36
|
+
'new-airdrop'
|
|
37
|
+
))
|
|
38
|
+
)
|
|
39
|
+
`.execute(db);
|
|
40
|
+
|
|
41
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_name_events_canonical_height_idx ON bns_name_events (canonical, block_height)`.execute(
|
|
42
|
+
db,
|
|
43
|
+
);
|
|
44
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_name_events_namespace_name_idx ON bns_name_events (namespace, name)`.execute(
|
|
45
|
+
db,
|
|
46
|
+
);
|
|
47
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_name_events_owner_height_idx ON bns_name_events (owner, block_height) WHERE owner IS NOT NULL`.execute(
|
|
48
|
+
db,
|
|
49
|
+
);
|
|
50
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_name_events_topic_height_idx ON bns_name_events (topic, block_height)`.execute(
|
|
51
|
+
db,
|
|
52
|
+
);
|
|
53
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_name_events_bns_id_idx ON bns_name_events (bns_id)`.execute(
|
|
54
|
+
db,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
// Namespace-lifecycle events (the `status`-discriminated payloads).
|
|
58
|
+
await sql`
|
|
59
|
+
CREATE TABLE IF NOT EXISTS bns_namespace_events (
|
|
60
|
+
cursor TEXT PRIMARY KEY,
|
|
61
|
+
block_height BIGINT NOT NULL,
|
|
62
|
+
block_time TIMESTAMPTZ NOT NULL,
|
|
63
|
+
tx_id TEXT NOT NULL,
|
|
64
|
+
tx_index INTEGER NOT NULL,
|
|
65
|
+
event_index INTEGER NOT NULL,
|
|
66
|
+
status TEXT NOT NULL,
|
|
67
|
+
namespace TEXT NOT NULL,
|
|
68
|
+
manager TEXT,
|
|
69
|
+
manager_frozen BOOLEAN,
|
|
70
|
+
manager_transfers_disabled BOOLEAN,
|
|
71
|
+
price_function TEXT,
|
|
72
|
+
price_frozen BOOLEAN,
|
|
73
|
+
lifetime BIGINT,
|
|
74
|
+
revealed_at BIGINT,
|
|
75
|
+
launched_at BIGINT,
|
|
76
|
+
canonical BOOLEAN NOT NULL DEFAULT true,
|
|
77
|
+
source_cursor TEXT NOT NULL,
|
|
78
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
79
|
+
CONSTRAINT bns_namespace_events_status_check CHECK (status IN (
|
|
80
|
+
'launch',
|
|
81
|
+
'transfer-manager',
|
|
82
|
+
'freeze-manager',
|
|
83
|
+
'update-price-manager',
|
|
84
|
+
'freeze-price-manager',
|
|
85
|
+
'turn-off-manager-transfers'
|
|
86
|
+
))
|
|
87
|
+
)
|
|
88
|
+
`.execute(db);
|
|
89
|
+
|
|
90
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_namespace_events_canonical_height_idx ON bns_namespace_events (canonical, block_height)`.execute(
|
|
91
|
+
db,
|
|
92
|
+
);
|
|
93
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_namespace_events_namespace_status_idx ON bns_namespace_events (namespace, status)`.execute(
|
|
94
|
+
db,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
// Marketplace events (the `a`-discriminated payloads on the BNS-V2 NFT).
|
|
98
|
+
await sql`
|
|
99
|
+
CREATE TABLE IF NOT EXISTS bns_marketplace_events (
|
|
100
|
+
cursor TEXT PRIMARY KEY,
|
|
101
|
+
block_height BIGINT NOT NULL,
|
|
102
|
+
block_time TIMESTAMPTZ NOT NULL,
|
|
103
|
+
tx_id TEXT NOT NULL,
|
|
104
|
+
tx_index INTEGER NOT NULL,
|
|
105
|
+
event_index INTEGER NOT NULL,
|
|
106
|
+
action TEXT NOT NULL,
|
|
107
|
+
bns_id TEXT NOT NULL,
|
|
108
|
+
price_ustx TEXT,
|
|
109
|
+
commission TEXT,
|
|
110
|
+
canonical BOOLEAN NOT NULL DEFAULT true,
|
|
111
|
+
source_cursor TEXT NOT NULL,
|
|
112
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
113
|
+
CONSTRAINT bns_marketplace_events_action_check CHECK (action IN (
|
|
114
|
+
'list-in-ustx',
|
|
115
|
+
'unlist-in-ustx',
|
|
116
|
+
'buy-in-ustx'
|
|
117
|
+
))
|
|
118
|
+
)
|
|
119
|
+
`.execute(db);
|
|
120
|
+
|
|
121
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_marketplace_events_canonical_height_idx ON bns_marketplace_events (canonical, block_height)`.execute(
|
|
122
|
+
db,
|
|
123
|
+
);
|
|
124
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_marketplace_events_bns_id_idx ON bns_marketplace_events (bns_id)`.execute(
|
|
125
|
+
db,
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
// Current-state projection of names (decoder maintains via upsert).
|
|
129
|
+
await sql`
|
|
130
|
+
CREATE TABLE IF NOT EXISTS bns_names (
|
|
131
|
+
fqn TEXT PRIMARY KEY,
|
|
132
|
+
namespace TEXT NOT NULL,
|
|
133
|
+
name TEXT NOT NULL,
|
|
134
|
+
owner TEXT NOT NULL,
|
|
135
|
+
bns_id TEXT NOT NULL,
|
|
136
|
+
registered_at BIGINT,
|
|
137
|
+
renewal_height BIGINT,
|
|
138
|
+
last_event_cursor TEXT NOT NULL,
|
|
139
|
+
last_event_at TIMESTAMPTZ NOT NULL,
|
|
140
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
141
|
+
)
|
|
142
|
+
`.execute(db);
|
|
143
|
+
|
|
144
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_names_owner_idx ON bns_names (owner)`.execute(
|
|
145
|
+
db,
|
|
146
|
+
);
|
|
147
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_names_namespace_registered_idx ON bns_names (namespace, registered_at)`.execute(
|
|
148
|
+
db,
|
|
149
|
+
);
|
|
150
|
+
await sql`CREATE INDEX IF NOT EXISTS bns_names_renewal_height_idx ON bns_names (renewal_height) WHERE renewal_height IS NOT NULL`.execute(
|
|
151
|
+
db,
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
// Current-state projection of namespaces.
|
|
155
|
+
await sql`
|
|
156
|
+
CREATE TABLE IF NOT EXISTS bns_namespaces (
|
|
157
|
+
namespace TEXT PRIMARY KEY,
|
|
158
|
+
manager TEXT,
|
|
159
|
+
manager_frozen BOOLEAN NOT NULL DEFAULT false,
|
|
160
|
+
price_frozen BOOLEAN NOT NULL DEFAULT false,
|
|
161
|
+
lifetime BIGINT,
|
|
162
|
+
launched_at BIGINT,
|
|
163
|
+
last_event_cursor TEXT NOT NULL,
|
|
164
|
+
last_event_at TIMESTAMPTZ NOT NULL,
|
|
165
|
+
name_count INTEGER NOT NULL DEFAULT 0,
|
|
166
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
167
|
+
)
|
|
168
|
+
`.execute(db);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
172
|
+
await sql`DROP TABLE IF EXISTS bns_namespaces`.execute(db);
|
|
173
|
+
await sql`DROP TABLE IF EXISTS bns_names`.execute(db);
|
|
174
|
+
await sql`DROP TABLE IF EXISTS bns_marketplace_events`.execute(db);
|
|
175
|
+
await sql`DROP TABLE IF EXISTS bns_namespace_events`.execute(db);
|
|
176
|
+
await sql`DROP TABLE IF EXISTS bns_name_events`.execute(db);
|
|
177
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secondlayer/shared",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
"prepublishOnly": "bun run build"
|
|
189
189
|
},
|
|
190
190
|
"dependencies": {
|
|
191
|
-
"@secondlayer/stacks": "^2.0
|
|
191
|
+
"@secondlayer/stacks": "^2.1.0",
|
|
192
192
|
"kysely": "0.28.15",
|
|
193
193
|
"kysely-postgres-js": "3.0.0",
|
|
194
194
|
"postgres": "^3.4.6",
|