@secondlayer/shared 0.4.0 → 0.5.1
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/crypto/hmac.d.ts +1 -1
- package/dist/src/crypto/hmac.js +6 -2
- package/dist/src/crypto/hmac.js.map +3 -3
- package/dist/src/db/index.d.ts +85 -8
- package/dist/src/db/index.js +6 -2
- package/dist/src/db/index.js.map +2 -2
- package/dist/src/db/jsonb.js +6 -2
- package/dist/src/db/jsonb.js.map +2 -2
- package/dist/src/db/queries/accounts.d.ts +77 -5
- package/dist/src/db/queries/accounts.js +17 -2
- package/dist/src/db/queries/accounts.js.map +3 -3
- package/dist/src/db/queries/integrity.d.ts +75 -4
- package/dist/src/db/queries/integrity.js +6 -2
- package/dist/src/db/queries/integrity.js.map +2 -2
- package/dist/src/db/queries/metrics.d.ts +75 -4
- package/dist/src/db/queries/metrics.js +6 -2
- package/dist/src/db/queries/metrics.js.map +2 -2
- package/dist/src/db/queries/{views.d.ts → subgraphs.d.ts} +89 -18
- package/dist/src/db/queries/{views.js → subgraphs.js} +37 -33
- package/dist/src/db/queries/subgraphs.js.map +11 -0
- package/dist/src/db/queries/usage.d.ts +78 -7
- package/dist/src/db/queries/usage.js +13 -9
- package/dist/src/db/queries/usage.js.map +4 -4
- package/dist/src/db/schema.d.ts +85 -8
- package/dist/src/env.d.ts +1 -1
- package/dist/src/env.js +8 -4
- package/dist/src/env.js.map +3 -3
- package/dist/src/errors.d.ts +3 -3
- package/dist/src/errors.js +9 -5
- package/dist/src/errors.js.map +3 -3
- package/dist/src/index.d.ts +104 -27
- package/dist/src/index.js +24 -20
- package/dist/src/index.js.map +9 -9
- package/dist/src/lib/plans.d.ts +1 -1
- package/dist/src/lib/plans.js +7 -3
- package/dist/src/lib/plans.js.map +3 -3
- package/dist/src/logger.js +8 -4
- package/dist/src/logger.js.map +3 -3
- package/dist/src/node/client.js +6 -2
- package/dist/src/node/client.js.map +2 -2
- package/dist/src/node/hiro-client.js +8 -4
- package/dist/src/node/hiro-client.js.map +3 -3
- package/dist/src/node/local-client.d.ts +75 -4
- package/dist/src/node/local-client.js +6 -2
- package/dist/src/node/local-client.js.map +3 -3
- package/dist/src/queue/index.js +6 -2
- package/dist/src/queue/index.js.map +2 -2
- package/dist/src/queue/listener.js +6 -2
- package/dist/src/queue/listener.js.map +2 -2
- package/dist/src/queue/recovery.js +6 -2
- package/dist/src/queue/recovery.js.map +2 -2
- package/dist/src/schemas/filters.d.ts +1 -1
- package/dist/src/schemas/filters.js +7 -3
- package/dist/src/schemas/filters.js.map +3 -3
- package/dist/src/schemas/index.d.ts +17 -17
- package/dist/src/schemas/index.js +19 -15
- package/dist/src/schemas/index.js.map +6 -6
- package/dist/src/schemas/{views.d.ts → subgraphs.d.ts} +9 -9
- package/dist/src/schemas/{views.js → subgraphs.js} +12 -8
- package/dist/src/schemas/subgraphs.js.map +10 -0
- package/dist/src/types.d.ts +2 -2
- package/dist/src/types.js +1 -12
- package/dist/src/types.js.map +1 -1
- package/migrations/0009_waitlist.ts +19 -0
- package/migrations/0010_waitlist_status.ts +12 -0
- package/migrations/0011_account_insights.ts +63 -0
- package/migrations/0012_view_health_snapshots.ts +29 -0
- package/migrations/0013_view_processing_stats.ts +42 -0
- package/migrations/0014_view_table_snapshots.ts +33 -0
- package/migrations/0015_rename_views_to_subgraphs.ts +136 -0
- package/migrations/0016_rename_webhook_to_endpoint.ts +12 -0
- package/package.json +8 -8
- package/dist/src/db/queries/views.js.map +0 -11
- package/dist/src/schemas/views.js.map +0 -10
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/lib/plans.ts", "../src/db/queries/usage.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"export interface PlanLimits {\n streams: number;\n
|
|
6
|
-
"import { sql, type Kysely } from \"kysely\";\nimport type { Database } from \"../types.ts\";\nimport { getPlanLimits } from \"../../lib/plans.ts\";\n\n/** Increment API request counter for today. Fire-and-forget safe. */\nexport async function incrementApiRequests(\n db: Kysely<Database>,\n accountId: string,\n): Promise<void> {\n const today = new Date().toISOString().slice(0, 10);\n await db\n .insertInto(\"usage_daily\")\n .values({ account_id: accountId, date: today, api_requests: 1, deliveries: 0 })\n .onConflict((oc) =>\n oc.columns([\"account_id\", \"date\"]).doUpdateSet({\n api_requests: sql`usage_daily.api_requests + 1`,\n }),\n )\n .execute();\n}\n\n/** Increment delivery counter for today. */\nexport async function incrementDeliveries(\n db: Kysely<Database>,\n accountId: string,\n count = 1,\n): Promise<void> {\n const today = new Date().toISOString().slice(0, 10);\n await db\n .insertInto(\"usage_daily\")\n .values({ account_id: accountId, date: today, api_requests: 0, deliveries: count })\n .onConflict((oc) =>\n oc.columns([\"account_id\", \"date\"]).doUpdateSet({\n deliveries: sql`usage_daily.deliveries + ${count}`,\n }),\n )\n .execute();\n}\n\nexport interface UsageSummary {\n apiRequestsToday: number;\n deliveriesThisMonth: number;\n storageBytes: number;\n}\n\n/** Get current usage for an account. */\nexport async function getUsage(\n db: Kysely<Database>,\n accountId: string,\n): Promise<UsageSummary> {\n const today = new Date().toISOString().slice(0, 10);\n const monthStart = today.slice(0, 7) + \"-01\"; // YYYY-MM-01\n\n // Today's API requests\n const dailyRow = await db\n .selectFrom(\"usage_daily\")\n .select(\"api_requests\")\n .where(\"account_id\", \"=\", accountId)\n .where(\"date\", \"=\", today)\n .executeTakeFirst();\n\n // This month's deliveries\n const monthlyRow = await db\n .selectFrom(\"usage_daily\")\n .select(sql<number>`COALESCE(SUM(deliveries), 0)`.as(\"total\"))\n .where(\"account_id\", \"=\", accountId)\n .where(\"date\", \">=\", monthStart)\n .executeTakeFirst();\n\n // Latest storage snapshot\n const storageRow = await db\n .selectFrom(\"usage_snapshots\")\n .select(\"storage_bytes\")\n .where(\"account_id\", \"=\", accountId)\n .orderBy(\"measured_at\", \"desc\")\n .limit(1)\n .executeTakeFirst();\n\n return {\n apiRequestsToday: dailyRow?.api_requests ?? 0,\n deliveriesThisMonth: Number(monthlyRow?.total ?? 0),\n storageBytes: Number(storageRow?.storage_bytes ?? 0),\n };\n}\n\nexport interface LimitCheck {\n allowed: boolean;\n limits: ReturnType<typeof getPlanLimits>;\n current: UsageSummary & { streams: number;
|
|
5
|
+
"export interface PlanLimits {\n streams: number;\n subgraphs: number;\n apiRequestsPerDay: number;\n deliveriesPerMonth: number;\n storageBytes: number;\n}\n\nexport const FREE_PLAN: PlanLimits = {\n streams: 3,\n subgraphs: 2,\n apiRequestsPerDay: 1_000,\n deliveriesPerMonth: 5_000,\n storageBytes: 100 * 1024 * 1024, // 100MB\n};\n\nexport function getPlanLimits(plan: string): PlanLimits {\n switch (plan) {\n case \"free\":\n default:\n return FREE_PLAN;\n }\n}\n",
|
|
6
|
+
"import { sql, type Kysely } from \"kysely\";\nimport type { Database } from \"../types.ts\";\nimport { getPlanLimits } from \"../../lib/plans.ts\";\n\n/** Increment API request counter for today. Fire-and-forget safe. */\nexport async function incrementApiRequests(\n db: Kysely<Database>,\n accountId: string,\n): Promise<void> {\n const today = new Date().toISOString().slice(0, 10);\n await db\n .insertInto(\"usage_daily\")\n .values({ account_id: accountId, date: today, api_requests: 1, deliveries: 0 })\n .onConflict((oc) =>\n oc.columns([\"account_id\", \"date\"]).doUpdateSet({\n api_requests: sql`usage_daily.api_requests + 1`,\n }),\n )\n .execute();\n}\n\n/** Increment delivery counter for today. */\nexport async function incrementDeliveries(\n db: Kysely<Database>,\n accountId: string,\n count = 1,\n): Promise<void> {\n const today = new Date().toISOString().slice(0, 10);\n await db\n .insertInto(\"usage_daily\")\n .values({ account_id: accountId, date: today, api_requests: 0, deliveries: count })\n .onConflict((oc) =>\n oc.columns([\"account_id\", \"date\"]).doUpdateSet({\n deliveries: sql`usage_daily.deliveries + ${count}`,\n }),\n )\n .execute();\n}\n\nexport interface UsageSummary {\n apiRequestsToday: number;\n deliveriesThisMonth: number;\n storageBytes: number;\n}\n\n/** Get current usage for an account. */\nexport async function getUsage(\n db: Kysely<Database>,\n accountId: string,\n): Promise<UsageSummary> {\n const today = new Date().toISOString().slice(0, 10);\n const monthStart = today.slice(0, 7) + \"-01\"; // YYYY-MM-01\n\n // Today's API requests\n const dailyRow = await db\n .selectFrom(\"usage_daily\")\n .select(\"api_requests\")\n .where(\"account_id\", \"=\", accountId)\n .where(\"date\", \"=\", today)\n .executeTakeFirst();\n\n // This month's deliveries\n const monthlyRow = await db\n .selectFrom(\"usage_daily\")\n .select(sql<number>`COALESCE(SUM(deliveries), 0)`.as(\"total\"))\n .where(\"account_id\", \"=\", accountId)\n .where(\"date\", \">=\", monthStart)\n .executeTakeFirst();\n\n // Latest storage snapshot\n const storageRow = await db\n .selectFrom(\"usage_snapshots\")\n .select(\"storage_bytes\")\n .where(\"account_id\", \"=\", accountId)\n .orderBy(\"measured_at\", \"desc\")\n .limit(1)\n .executeTakeFirst();\n\n return {\n apiRequestsToday: dailyRow?.api_requests ?? 0,\n deliveriesThisMonth: Number(monthlyRow?.total ?? 0),\n storageBytes: Number(storageRow?.storage_bytes ?? 0),\n };\n}\n\nexport interface LimitCheck {\n allowed: boolean;\n limits: ReturnType<typeof getPlanLimits>;\n current: UsageSummary & { streams: number; subgraphs: number };\n exceeded?: string;\n}\n\n/** Check if an account is within plan limits. */\nexport async function checkLimits(\n db: Kysely<Database>,\n accountId: string,\n plan: string,\n): Promise<LimitCheck> {\n const limits = getPlanLimits(plan);\n const usage = await getUsage(db, accountId);\n\n // Count streams owned by this account's keys\n const streamCount = await db\n .selectFrom(\"streams\")\n .innerJoin(\"api_keys\", \"streams.api_key_id\", \"api_keys.id\")\n .select(sql<number>`count(*)`.as(\"count\"))\n .where(\"api_keys.account_id\", \"=\", accountId)\n .executeTakeFirst();\n\n const subgraphCount = await db\n .selectFrom(\"subgraphs\")\n .innerJoin(\"api_keys\", \"subgraphs.api_key_id\", \"api_keys.id\")\n .select(sql<number>`count(*)`.as(\"count\"))\n .where(\"api_keys.account_id\", \"=\", accountId)\n .executeTakeFirst();\n\n const current = {\n ...usage,\n streams: Number(streamCount?.count ?? 0),\n subgraphs: Number(subgraphCount?.count ?? 0),\n };\n\n // Check each limit\n if (current.streams >= limits.streams) {\n return { allowed: false, limits, current, exceeded: \"streams\" };\n }\n if (current.subgraphs >= limits.subgraphs) {\n return { allowed: false, limits, current, exceeded: \"subgraphs\" };\n }\n if (current.apiRequestsToday >= limits.apiRequestsPerDay) {\n return { allowed: false, limits, current, exceeded: \"api_requests\" };\n }\n if (current.deliveriesThisMonth >= limits.deliveriesPerMonth) {\n return { allowed: false, limits, current, exceeded: \"deliveries\" };\n }\n if (current.storageBytes >= limits.storageBytes) {\n return { allowed: false, limits, current, exceeded: \"storage\" };\n }\n\n return { allowed: true, limits, current };\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 // Get all accounts with subgraphs\n const accountSubgraphs = await db\n .selectFrom(\"subgraphs\")\n .innerJoin(\"api_keys\", \"subgraphs.api_key_id\", \"api_keys.id\")\n .select([\"api_keys.account_id\", \"subgraphs.schema_name\"])\n .where(\"subgraphs.schema_name\", \"is not\", null)\n .execute();\n\n // Group schemas by account\n const byAccount = new Map<string, string[]>();\n for (const row of accountSubgraphs) {\n const schemas = byAccount.get(row.account_id) ?? [];\n if (row.schema_name) schemas.push(row.schema_name);\n byAccount.set(row.account_id, schemas);\n }\n\n for (const [accountId, schemas] of byAccount) {\n let totalBytes = 0;\n for (const schema of schemas) {\n try {\n const 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 totalBytes += Number((result.rows[0] as any)?.size ?? 0);\n } catch {\n // Schema may not exist\n }\n }\n\n await db\n .insertInto(\"usage_snapshots\")\n .values({\n account_id: accountId,\n storage_bytes: totalBytes,\n })\n .execute();\n }\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "31E68DFE6E6CCA6264756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/src/db/schema.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ interface StreamsTable {
|
|
|
35
35
|
status: Generated<string>;
|
|
36
36
|
filters: unknown;
|
|
37
37
|
options: Generated<unknown>;
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
endpoint_url: string;
|
|
39
|
+
signing_secret: string | null;
|
|
40
40
|
api_key_id: string | null;
|
|
41
41
|
created_at: Generated<Date>;
|
|
42
42
|
updated_at: Generated<Date>;
|
|
@@ -82,7 +82,7 @@ interface DeliveriesTable {
|
|
|
82
82
|
payload: unknown;
|
|
83
83
|
created_at: Generated<Date>;
|
|
84
84
|
}
|
|
85
|
-
interface
|
|
85
|
+
interface SubgraphsTable {
|
|
86
86
|
id: Generated<string>;
|
|
87
87
|
name: string;
|
|
88
88
|
version: Generated<string>;
|
|
@@ -150,6 +150,71 @@ interface UsageSnapshotsTable {
|
|
|
150
150
|
measured_at: Generated<Date>;
|
|
151
151
|
storage_bytes: Generated<number>;
|
|
152
152
|
}
|
|
153
|
+
interface WaitlistTable {
|
|
154
|
+
id: Generated<string>;
|
|
155
|
+
email: string;
|
|
156
|
+
source: Generated<string>;
|
|
157
|
+
status: Generated<string>;
|
|
158
|
+
created_at: Generated<Date>;
|
|
159
|
+
}
|
|
160
|
+
interface AccountInsightsTable {
|
|
161
|
+
id: Generated<string>;
|
|
162
|
+
account_id: string;
|
|
163
|
+
category: string;
|
|
164
|
+
insight_type: string;
|
|
165
|
+
resource_id: string | null;
|
|
166
|
+
severity: string;
|
|
167
|
+
title: string;
|
|
168
|
+
body: string;
|
|
169
|
+
data: unknown;
|
|
170
|
+
dismissed_at: Date | null;
|
|
171
|
+
expires_at: Date | null;
|
|
172
|
+
created_at: Generated<Date>;
|
|
173
|
+
}
|
|
174
|
+
interface AccountAgentRunsTable {
|
|
175
|
+
id: Generated<string>;
|
|
176
|
+
account_id: string;
|
|
177
|
+
started_at: Generated<Date>;
|
|
178
|
+
completed_at: Date | null;
|
|
179
|
+
status: Generated<string>;
|
|
180
|
+
input_tokens: Generated<number>;
|
|
181
|
+
output_tokens: Generated<number>;
|
|
182
|
+
cost_usd: Generated<number>;
|
|
183
|
+
insights_created: Generated<number>;
|
|
184
|
+
error: string | null;
|
|
185
|
+
}
|
|
186
|
+
interface SubgraphProcessingStatsTable {
|
|
187
|
+
id: Generated<string>;
|
|
188
|
+
subgraph_name: string;
|
|
189
|
+
api_key_id: string | null;
|
|
190
|
+
bucket_start: Date | null;
|
|
191
|
+
bucket_end: Date | null;
|
|
192
|
+
blocks_processed: number | null;
|
|
193
|
+
total_time_ms: number | null;
|
|
194
|
+
handler_time_ms: number | null;
|
|
195
|
+
flush_time_ms: number | null;
|
|
196
|
+
max_block_time_ms: number | null;
|
|
197
|
+
max_handler_time_ms: number | null;
|
|
198
|
+
avg_ops_per_block: number | null;
|
|
199
|
+
is_catchup: Generated<boolean>;
|
|
200
|
+
created_at: Generated<Date>;
|
|
201
|
+
}
|
|
202
|
+
interface SubgraphTableSnapshotsTable {
|
|
203
|
+
id: Generated<string>;
|
|
204
|
+
subgraph_name: string;
|
|
205
|
+
api_key_id: string | null;
|
|
206
|
+
table_name: string;
|
|
207
|
+
row_count: number | null;
|
|
208
|
+
created_at: Generated<Date>;
|
|
209
|
+
}
|
|
210
|
+
interface SubgraphHealthSnapshotsTable {
|
|
211
|
+
id: Generated<string>;
|
|
212
|
+
subgraph_id: string;
|
|
213
|
+
total_processed: number;
|
|
214
|
+
total_errors: number;
|
|
215
|
+
last_processed_block: number | null;
|
|
216
|
+
captured_at: Generated<Date>;
|
|
217
|
+
}
|
|
153
218
|
interface Database {
|
|
154
219
|
blocks: BlocksTable;
|
|
155
220
|
transactions: TransactionsTable;
|
|
@@ -159,13 +224,19 @@ interface Database {
|
|
|
159
224
|
jobs: JobsTable;
|
|
160
225
|
index_progress: IndexProgressTable;
|
|
161
226
|
deliveries: DeliveriesTable;
|
|
162
|
-
|
|
227
|
+
subgraphs: SubgraphsTable;
|
|
163
228
|
api_keys: ApiKeysTable;
|
|
164
229
|
accounts: AccountsTable;
|
|
165
230
|
sessions: SessionsTable;
|
|
166
231
|
magic_links: MagicLinksTable;
|
|
167
232
|
usage_daily: UsageDailyTable;
|
|
168
233
|
usage_snapshots: UsageSnapshotsTable;
|
|
234
|
+
waitlist: WaitlistTable;
|
|
235
|
+
account_insights: AccountInsightsTable;
|
|
236
|
+
account_agent_runs: AccountAgentRunsTable;
|
|
237
|
+
subgraph_health_snapshots: SubgraphHealthSnapshotsTable;
|
|
238
|
+
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
239
|
+
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
169
240
|
}
|
|
170
241
|
type Block = Selectable<BlocksTable>;
|
|
171
242
|
type InsertBlock = Insertable<BlocksTable>;
|
|
@@ -191,9 +262,9 @@ type UpdateIndexProgress = Updateable<IndexProgressTable>;
|
|
|
191
262
|
type Delivery = Selectable<DeliveriesTable>;
|
|
192
263
|
type InsertDelivery = Insertable<DeliveriesTable>;
|
|
193
264
|
type UpdateDelivery = Updateable<DeliveriesTable>;
|
|
194
|
-
type
|
|
195
|
-
type
|
|
196
|
-
type
|
|
265
|
+
type Subgraph = Selectable<SubgraphsTable>;
|
|
266
|
+
type InsertSubgraph = Insertable<SubgraphsTable>;
|
|
267
|
+
type UpdateSubgraph = Updateable<SubgraphsTable>;
|
|
197
268
|
type ApiKey = Selectable<ApiKeysTable>;
|
|
198
269
|
type InsertApiKey = Insertable<ApiKeysTable>;
|
|
199
270
|
type UpdateApiKey = Updateable<ApiKeysTable>;
|
|
@@ -205,4 +276,10 @@ type Session = Selectable<SessionsTable>;
|
|
|
205
276
|
type InsertSession = Insertable<SessionsTable>;
|
|
206
277
|
type UsageDaily = Selectable<UsageDailyTable>;
|
|
207
278
|
type UsageSnapshot = Selectable<UsageSnapshotsTable>;
|
|
208
|
-
|
|
279
|
+
type AccountInsight = Selectable<AccountInsightsTable>;
|
|
280
|
+
type InsertAccountInsight = Insertable<AccountInsightsTable>;
|
|
281
|
+
type AccountAgentRun = Selectable<AccountAgentRunsTable>;
|
|
282
|
+
type InsertAccountAgentRun = Insertable<AccountAgentRunsTable>;
|
|
283
|
+
type SubgraphHealthSnapshot = Selectable<SubgraphHealthSnapshotsTable>;
|
|
284
|
+
type InsertSubgraphHealthSnapshot = Insertable<SubgraphHealthSnapshotsTable>;
|
|
285
|
+
export { WaitlistTable, UsageSnapshotsTable, UsageSnapshot, UsageDailyTable, UsageDaily, UpdateTransaction, UpdateSubgraph, UpdateStreamRow, UpdateStreamMetrics, UpdateJob, UpdateIndexProgress, UpdateEvent, UpdateDelivery, UpdateBlock, UpdateApiKey, TransactionsTable, Transaction, SubgraphsTable, SubgraphTableSnapshotsTable, SubgraphProcessingStatsTable, SubgraphHealthSnapshotsTable, SubgraphHealthSnapshot, Subgraph, StreamsTable, StreamMetricsTable, StreamMetrics, Stream, SessionsTable, Session, MagicLinksTable, MagicLink, JobsTable, Job, InsertTransaction, InsertSubgraphHealthSnapshot, InsertSubgraph, InsertStreamMetrics, InsertStream, InsertSession, InsertMagicLink, InsertJob, InsertIndexProgress, InsertEvent, InsertDelivery, InsertBlock, InsertApiKey, InsertAccountInsight, InsertAccountAgentRun, InsertAccount, IndexProgressTable, IndexProgress, EventsTable, Event, Delivery, DeliveriesTable, Database, BlocksTable, Block, ApiKeysTable, ApiKey, AccountsTable, AccountInsightsTable, AccountInsight, AccountAgentRunsTable, AccountAgentRun, Account };
|
package/dist/src/env.d.ts
CHANGED
package/dist/src/env.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
|
+
var __returnValue = (v) => v;
|
|
4
|
+
function __exportSetter(name, newValue) {
|
|
5
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
+
}
|
|
3
7
|
var __export = (target, all) => {
|
|
4
8
|
for (var name in all)
|
|
5
9
|
__defProp(target, name, {
|
|
6
10
|
get: all[name],
|
|
7
11
|
enumerable: true,
|
|
8
12
|
configurable: true,
|
|
9
|
-
set: (
|
|
13
|
+
set: __exportSetter.bind(all, name)
|
|
10
14
|
});
|
|
11
15
|
};
|
|
12
16
|
|
|
13
17
|
// src/env.ts
|
|
14
|
-
import { z } from "zod";
|
|
18
|
+
import { z } from "zod/v4";
|
|
15
19
|
var networksSchema = z.string().transform((val) => {
|
|
16
20
|
const networks = val.split(",").map((n) => n.trim()).filter(Boolean);
|
|
17
21
|
const valid = ["mainnet", "testnet"];
|
|
@@ -37,7 +41,7 @@ function getEnv() {
|
|
|
37
41
|
const result = envSchema.safeParse(process.env);
|
|
38
42
|
if (!result.success) {
|
|
39
43
|
console.error("❌ Invalid environment configuration:");
|
|
40
|
-
console.error(result.error
|
|
44
|
+
console.error(z.treeifyError(result.error));
|
|
41
45
|
throw new Error("Invalid environment configuration");
|
|
42
46
|
}
|
|
43
47
|
let enabledNetworks;
|
|
@@ -56,5 +60,5 @@ export {
|
|
|
56
60
|
envSchema
|
|
57
61
|
};
|
|
58
62
|
|
|
59
|
-
//# debugId=
|
|
63
|
+
//# debugId=F91178E691D405D264756E2164756E21
|
|
60
64
|
//# sourceMappingURL=env.js.map
|
package/dist/src/env.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/env.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { z } from \"zod\";\n\n// Parse comma-separated networks\nconst networksSchema = z.string().transform((val) => {\n const networks = val.split(\",\").map((n) => n.trim()).filter(Boolean);\n const valid = [\"mainnet\", \"testnet\"];\n for (const n of networks) {\n if (!valid.includes(n)) {\n throw new Error(`Invalid network: ${n}. Must be one of: ${valid.join(\", \")}`);\n }\n }\n return networks as (\"mainnet\" | \"testnet\")[];\n});\n\ninterface EnvSchemaOutput {\n DATABASE_URL?: string;\n NETWORK?: \"mainnet\" | \"testnet\";\n NETWORKS?: (\"mainnet\" | \"testnet\")[];\n LOG_LEVEL: \"debug\" | \"info\" | \"warn\" | \"error\";\n NODE_ENV: \"development\" | \"production\" | \"test\";\n}\n\n// Cast needed: z.preprocess / z.default create different _input vs _output types\n// that z.ZodType<T> can't represent without explicit input type param\nconst envSchema: z.ZodType<EnvSchemaOutput> = z.object({\n DATABASE_URL: z.preprocess(\n (val) => (typeof val === \"string\" && val.length === 0) ? undefined : val,\n z.string().url().optional(),\n ),\n NETWORK: z.enum([\"mainnet\", \"testnet\"]).optional(),\n NETWORKS: networksSchema.optional(),\n LOG_LEVEL: z.enum([\"debug\", \"info\", \"warn\", \"error\"]).default(\"info\"),\n NODE_ENV: z.enum([\"development\", \"production\", \"test\"]).default(\"development\"),\n}) as unknown as z.ZodType<EnvSchemaOutput>;\n\nexport type Env = EnvSchemaOutput & {\n enabledNetworks: (\"mainnet\" | \"testnet\")[];\n};\n\nlet cachedEnv: Env | null = null;\n\nexport function getEnv(): Env {\n if (cachedEnv) {\n return cachedEnv;\n }\n\n const result = envSchema.safeParse(process.env);\n\n if (!result.success) {\n console.error(\"❌ Invalid environment configuration:\");\n console.error(result.error
|
|
5
|
+
"import { z } from \"zod/v4\";\n\n// Parse comma-separated networks\nconst networksSchema = z.string().transform((val) => {\n const networks = val.split(\",\").map((n) => n.trim()).filter(Boolean);\n const valid = [\"mainnet\", \"testnet\"];\n for (const n of networks) {\n if (!valid.includes(n)) {\n throw new Error(`Invalid network: ${n}. Must be one of: ${valid.join(\", \")}`);\n }\n }\n return networks as (\"mainnet\" | \"testnet\")[];\n});\n\ninterface EnvSchemaOutput {\n DATABASE_URL?: string;\n NETWORK?: \"mainnet\" | \"testnet\";\n NETWORKS?: (\"mainnet\" | \"testnet\")[];\n LOG_LEVEL: \"debug\" | \"info\" | \"warn\" | \"error\";\n NODE_ENV: \"development\" | \"production\" | \"test\";\n}\n\n// Cast needed: z.preprocess / z.default create different _input vs _output types\n// that z.ZodType<T> can't represent without explicit input type param\nconst envSchema: z.ZodType<EnvSchemaOutput> = z.object({\n DATABASE_URL: z.preprocess(\n (val) => (typeof val === \"string\" && val.length === 0) ? undefined : val,\n z.string().url().optional(),\n ),\n NETWORK: z.enum([\"mainnet\", \"testnet\"]).optional(),\n NETWORKS: networksSchema.optional(),\n LOG_LEVEL: z.enum([\"debug\", \"info\", \"warn\", \"error\"]).default(\"info\"),\n NODE_ENV: z.enum([\"development\", \"production\", \"test\"]).default(\"development\"),\n}) as unknown as z.ZodType<EnvSchemaOutput>;\n\nexport type Env = EnvSchemaOutput & {\n enabledNetworks: (\"mainnet\" | \"testnet\")[];\n};\n\nlet cachedEnv: Env | null = null;\n\nexport function getEnv(): Env {\n if (cachedEnv) {\n return cachedEnv;\n }\n\n const result = envSchema.safeParse(process.env);\n\n if (!result.success) {\n console.error(\"❌ Invalid environment configuration:\");\n console.error(z.treeifyError(result.error));\n throw new Error(\"Invalid environment configuration\");\n }\n\n // Compute enabled networks from NETWORKS or NETWORK\n let enabledNetworks: (\"mainnet\" | \"testnet\")[];\n if (result.data.NETWORKS && result.data.NETWORKS.length > 0) {\n enabledNetworks = result.data.NETWORKS;\n } else if (result.data.NETWORK) {\n enabledNetworks = [result.data.NETWORK];\n } else {\n enabledNetworks = [\"mainnet\"]; // Default\n }\n\n cachedEnv = { ...result.data, enabledNetworks };\n return cachedEnv;\n}\n\n// Export for testing\nexport { envSchema };\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAGA,IAAM,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ;AAAA,EACnD,MAAM,WAAW,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EACnE,MAAM,QAAQ,CAAC,WAAW,SAAS;AAAA,EACnC,WAAW,KAAK,UAAU;AAAA,IACxB,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG;AAAA,MACtB,MAAM,IAAI,MAAM,oBAAoB,sBAAsB,MAAM,KAAK,IAAI,GAAG;AAAA,IAC9E;AAAA,EACF;AAAA,EACA,OAAO;AAAA,CACR;AAYD,IAAM,YAAwC,EAAE,OAAO;AAAA,EACrD,cAAc,EAAE,WACd,CAAC,QAAS,OAAO,QAAQ,YAAY,IAAI,WAAW,IAAK,YAAY,KACrE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAC5B;AAAA,EACA,SAAS,EAAE,KAAK,CAAC,WAAW,SAAS,CAAC,EAAE,SAAS;AAAA,EACjD,UAAU,eAAe,SAAS;AAAA,EAClC,WAAW,EAAE,KAAK,CAAC,SAAS,QAAQ,QAAQ,OAAO,CAAC,EAAE,QAAQ,MAAM;AAAA,EACpE,UAAU,EAAE,KAAK,CAAC,eAAe,cAAc,MAAM,CAAC,EAAE,QAAQ,aAAa;AAC/E,CAAC;AAMD,IAAI,YAAwB;AAErB,SAAS,MAAM,GAAQ;AAAA,EAC5B,IAAI,WAAW;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,UAAU,UAAU,QAAQ,GAAG;AAAA,EAE9C,IAAI,CAAC,OAAO,SAAS;AAAA,IACnB,QAAQ,MAAM,sCAAqC;AAAA,IACnD,QAAQ,MAAM,EAAE,aAAa,OAAO,KAAK,CAAC;AAAA,IAC1C,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EAGA,IAAI;AAAA,EACJ,IAAI,OAAO,KAAK,YAAY,OAAO,KAAK,SAAS,SAAS,GAAG;AAAA,IAC3D,kBAAkB,OAAO,KAAK;AAAA,EAChC,EAAO,SAAI,OAAO,KAAK,SAAS;AAAA,IAC9B,kBAAkB,CAAC,OAAO,KAAK,OAAO;AAAA,EACxC,EAAO;AAAA,IACL,kBAAkB,CAAC,SAAS;AAAA;AAAA,EAG9B,YAAY,KAAK,OAAO,MAAM,gBAAgB;AAAA,EAC9C,OAAO;AAAA;",
|
|
8
|
+
"debugId": "F91178E691D405D264756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/src/errors.d.ts
CHANGED
|
@@ -32,9 +32,9 @@ declare class DatabaseError extends StreamsError {
|
|
|
32
32
|
constructor(message: string, cause?: unknown);
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* Delivery error
|
|
36
36
|
*/
|
|
37
|
-
declare class
|
|
37
|
+
declare class DeliveryError extends StreamsError {
|
|
38
38
|
statusCode?: number;
|
|
39
39
|
constructor(message: string, statusCode?: number, cause?: unknown);
|
|
40
40
|
toJSON(): {
|
|
@@ -68,4 +68,4 @@ declare class ForbiddenError extends StreamsError {
|
|
|
68
68
|
* Safely extract error message from unknown error value
|
|
69
69
|
*/
|
|
70
70
|
declare function getErrorMessage(err: unknown): string;
|
|
71
|
-
export { getErrorMessage,
|
|
71
|
+
export { getErrorMessage, ValidationError, StreamsError, StreamNotFoundError, RateLimitError, ForbiddenError, FilterEvaluationError, DeliveryError, DatabaseError, AuthorizationError, AuthenticationError };
|
package/dist/src/errors.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
|
+
var __returnValue = (v) => v;
|
|
4
|
+
function __exportSetter(name, newValue) {
|
|
5
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
+
}
|
|
3
7
|
var __export = (target, all) => {
|
|
4
8
|
for (var name in all)
|
|
5
9
|
__defProp(target, name, {
|
|
6
10
|
get: all[name],
|
|
7
11
|
enumerable: true,
|
|
8
12
|
configurable: true,
|
|
9
|
-
set: (
|
|
13
|
+
set: __exportSetter.bind(all, name)
|
|
10
14
|
});
|
|
11
15
|
};
|
|
12
16
|
|
|
@@ -50,10 +54,10 @@ class DatabaseError extends StreamsError {
|
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
56
|
|
|
53
|
-
class
|
|
57
|
+
class DeliveryError extends StreamsError {
|
|
54
58
|
statusCode;
|
|
55
59
|
constructor(message, statusCode, cause) {
|
|
56
|
-
super("
|
|
60
|
+
super("DELIVERY_ERROR", message, cause);
|
|
57
61
|
this.statusCode = statusCode;
|
|
58
62
|
}
|
|
59
63
|
toJSON() {
|
|
@@ -103,17 +107,17 @@ function getErrorMessage(err) {
|
|
|
103
107
|
}
|
|
104
108
|
export {
|
|
105
109
|
getErrorMessage,
|
|
106
|
-
WebhookDeliveryError,
|
|
107
110
|
ValidationError,
|
|
108
111
|
StreamsError,
|
|
109
112
|
StreamNotFoundError,
|
|
110
113
|
RateLimitError,
|
|
111
114
|
ForbiddenError,
|
|
112
115
|
FilterEvaluationError,
|
|
116
|
+
DeliveryError,
|
|
113
117
|
DatabaseError,
|
|
114
118
|
AuthorizationError,
|
|
115
119
|
AuthenticationError
|
|
116
120
|
};
|
|
117
121
|
|
|
118
|
-
//# debugId=
|
|
122
|
+
//# debugId=42FBAE7EC051820B64756E2164756E21
|
|
119
123
|
//# sourceMappingURL=errors.js.map
|
package/dist/src/errors.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/errors.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Base error class for all Stacks Streams errors\n */\nexport class StreamsError extends Error {\n public code: string;\n public override cause?: unknown;\n\n constructor(\n code: string,\n message: string,\n cause?: unknown\n ) {\n super(message);\n this.code = code;\n this.cause = cause;\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n\n toJSON(): { name: string; code: string; message: string; stack: string | undefined; cause: unknown } {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n stack: this.stack,\n cause: this.cause,\n };\n }\n}\n\n/**\n * Stream not found error\n */\nexport class StreamNotFoundError extends StreamsError {\n constructor(streamId: string) {\n super(\"STREAM_NOT_FOUND\", `Stream not found: ${streamId}`);\n }\n}\n\n/**\n * Validation error for invalid input\n */\nexport class ValidationError extends StreamsError {\n constructor(message: string, cause?: unknown) {\n super(\"VALIDATION_ERROR\", message, cause);\n }\n}\n\n/**\n * Database operation error\n */\nexport class DatabaseError extends StreamsError {\n constructor(message: string, cause?: unknown) {\n super(\"DATABASE_ERROR\", message, cause);\n }\n}\n\n/**\n *
|
|
5
|
+
"/**\n * Base error class for all Stacks Streams errors\n */\nexport class StreamsError extends Error {\n public code: string;\n public override cause?: unknown;\n\n constructor(\n code: string,\n message: string,\n cause?: unknown\n ) {\n super(message);\n this.code = code;\n this.cause = cause;\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n\n toJSON(): { name: string; code: string; message: string; stack: string | undefined; cause: unknown } {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n stack: this.stack,\n cause: this.cause,\n };\n }\n}\n\n/**\n * Stream not found error\n */\nexport class StreamNotFoundError extends StreamsError {\n constructor(streamId: string) {\n super(\"STREAM_NOT_FOUND\", `Stream not found: ${streamId}`);\n }\n}\n\n/**\n * Validation error for invalid input\n */\nexport class ValidationError extends StreamsError {\n constructor(message: string, cause?: unknown) {\n super(\"VALIDATION_ERROR\", message, cause);\n }\n}\n\n/**\n * Database operation error\n */\nexport class DatabaseError extends StreamsError {\n constructor(message: string, cause?: unknown) {\n super(\"DATABASE_ERROR\", message, cause);\n }\n}\n\n/**\n * Delivery error\n */\nexport class DeliveryError extends StreamsError {\n constructor(\n message: string,\n public statusCode?: number,\n cause?: unknown\n ) {\n super(\"DELIVERY_ERROR\", message, cause);\n }\n\n override toJSON(): { name: string; code: string; message: string; stack: string | undefined; cause: unknown; statusCode: number | undefined } {\n const base = super.toJSON();\n return {\n name: base.name,\n code: base.code,\n message: base.message,\n stack: base.stack,\n cause: base.cause,\n statusCode: this.statusCode,\n };\n }\n}\n\n/**\n * Filter evaluation error\n */\nexport class FilterEvaluationError extends StreamsError {\n constructor(message: string, cause?: unknown) {\n super(\"FILTER_EVALUATION_ERROR\", message, cause);\n }\n}\n\nexport class AuthenticationError extends StreamsError {\n constructor(message: string) {\n super(\"AUTHENTICATION_ERROR\", message);\n }\n}\n\nexport class AuthorizationError extends StreamsError {\n constructor(message: string) {\n super(\"AUTHORIZATION_ERROR\", message);\n }\n}\n\nexport class RateLimitError extends StreamsError {\n constructor(message: string) {\n super(\"RATE_LIMIT_ERROR\", message);\n }\n}\n\nexport class ForbiddenError extends StreamsError {\n constructor(message = \"Forbidden\") {\n super(\"FORBIDDEN\", message);\n }\n}\n\n/**\n * Safely extract error message from unknown error value\n */\nexport function getErrorMessage(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAGO,MAAM,qBAAqB,MAAM;AAAA,EAC/B;AAAA,EACS;AAAA,EAEhB,WAAW,CACT,MACA,SACA,OACA;AAAA,IACA,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,KAAK,QAAQ;AAAA,IACb,KAAK,OAAO,KAAK,YAAY;AAAA,IAC7B,MAAM,oBAAoB,MAAM,KAAK,WAAW;AAAA;AAAA,EAGlD,MAAM,GAA+F;AAAA,IACnG,OAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,IACd;AAAA;AAEJ;AAAA;AAKO,MAAM,4BAA4B,aAAa;AAAA,EACpD,WAAW,CAAC,UAAkB;AAAA,IAC5B,MAAM,oBAAoB,qBAAqB,UAAU;AAAA;AAE7D;AAAA;AAKO,MAAM,wBAAwB,aAAa;AAAA,EAChD,WAAW,CAAC,SAAiB,OAAiB;AAAA,IAC5C,MAAM,oBAAoB,SAAS,KAAK;AAAA;AAE5C;AAAA;AAKO,MAAM,sBAAsB,aAAa;AAAA,EAC9C,WAAW,CAAC,SAAiB,OAAiB;AAAA,IAC5C,MAAM,kBAAkB,SAAS,KAAK;AAAA;AAE1C;AAAA;AAKO,MAAM,sBAAsB,aAAa;AAAA,EAGrC;AAAA,EAFT,WAAW,CACT,SACO,YACP,OACA;AAAA,IACA,MAAM,kBAAkB,SAAS,KAAK;AAAA,IAH/B;AAAA;AAAA,EAMA,MAAM,GAA+H;AAAA,IAC5I,MAAM,OAAO,MAAM,OAAO;AAAA,IAC1B,OAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,IACnB;AAAA;AAEJ;AAAA;AAKO,MAAM,8BAA8B,aAAa;AAAA,EACtD,WAAW,CAAC,SAAiB,OAAiB;AAAA,IAC5C,MAAM,2BAA2B,SAAS,KAAK;AAAA;AAEnD;AAAA;AAEO,MAAM,4BAA4B,aAAa;AAAA,EACpD,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,wBAAwB,OAAO;AAAA;AAEzC;AAAA;AAEO,MAAM,2BAA2B,aAAa;AAAA,EACnD,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,uBAAuB,OAAO;AAAA;AAExC;AAAA;AAEO,MAAM,uBAAuB,aAAa;AAAA,EAC/C,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,oBAAoB,OAAO;AAAA;AAErC;AAAA;AAEO,MAAM,uBAAuB,aAAa;AAAA,EAC/C,WAAW,CAAC,UAAU,aAAa;AAAA,IACjC,MAAM,aAAa,OAAO;AAAA;AAE9B;AAKO,SAAS,eAAe,CAAC,KAAsB;AAAA,EACpD,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA;",
|
|
8
|
+
"debugId": "42FBAE7EC051820B64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ interface StreamsTable {
|
|
|
35
35
|
status: Generated<string>;
|
|
36
36
|
filters: unknown;
|
|
37
37
|
options: Generated<unknown>;
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
endpoint_url: string;
|
|
39
|
+
signing_secret: string | null;
|
|
40
40
|
api_key_id: string | null;
|
|
41
41
|
created_at: Generated<Date>;
|
|
42
42
|
updated_at: Generated<Date>;
|
|
@@ -82,7 +82,7 @@ interface DeliveriesTable {
|
|
|
82
82
|
payload: unknown;
|
|
83
83
|
created_at: Generated<Date>;
|
|
84
84
|
}
|
|
85
|
-
interface
|
|
85
|
+
interface SubgraphsTable {
|
|
86
86
|
id: Generated<string>;
|
|
87
87
|
name: string;
|
|
88
88
|
version: Generated<string>;
|
|
@@ -150,6 +150,71 @@ interface UsageSnapshotsTable {
|
|
|
150
150
|
measured_at: Generated<Date>;
|
|
151
151
|
storage_bytes: Generated<number>;
|
|
152
152
|
}
|
|
153
|
+
interface WaitlistTable {
|
|
154
|
+
id: Generated<string>;
|
|
155
|
+
email: string;
|
|
156
|
+
source: Generated<string>;
|
|
157
|
+
status: Generated<string>;
|
|
158
|
+
created_at: Generated<Date>;
|
|
159
|
+
}
|
|
160
|
+
interface AccountInsightsTable {
|
|
161
|
+
id: Generated<string>;
|
|
162
|
+
account_id: string;
|
|
163
|
+
category: string;
|
|
164
|
+
insight_type: string;
|
|
165
|
+
resource_id: string | null;
|
|
166
|
+
severity: string;
|
|
167
|
+
title: string;
|
|
168
|
+
body: string;
|
|
169
|
+
data: unknown;
|
|
170
|
+
dismissed_at: Date | null;
|
|
171
|
+
expires_at: Date | null;
|
|
172
|
+
created_at: Generated<Date>;
|
|
173
|
+
}
|
|
174
|
+
interface AccountAgentRunsTable {
|
|
175
|
+
id: Generated<string>;
|
|
176
|
+
account_id: string;
|
|
177
|
+
started_at: Generated<Date>;
|
|
178
|
+
completed_at: Date | null;
|
|
179
|
+
status: Generated<string>;
|
|
180
|
+
input_tokens: Generated<number>;
|
|
181
|
+
output_tokens: Generated<number>;
|
|
182
|
+
cost_usd: Generated<number>;
|
|
183
|
+
insights_created: Generated<number>;
|
|
184
|
+
error: string | null;
|
|
185
|
+
}
|
|
186
|
+
interface SubgraphProcessingStatsTable {
|
|
187
|
+
id: Generated<string>;
|
|
188
|
+
subgraph_name: string;
|
|
189
|
+
api_key_id: string | null;
|
|
190
|
+
bucket_start: Date | null;
|
|
191
|
+
bucket_end: Date | null;
|
|
192
|
+
blocks_processed: number | null;
|
|
193
|
+
total_time_ms: number | null;
|
|
194
|
+
handler_time_ms: number | null;
|
|
195
|
+
flush_time_ms: number | null;
|
|
196
|
+
max_block_time_ms: number | null;
|
|
197
|
+
max_handler_time_ms: number | null;
|
|
198
|
+
avg_ops_per_block: number | null;
|
|
199
|
+
is_catchup: Generated<boolean>;
|
|
200
|
+
created_at: Generated<Date>;
|
|
201
|
+
}
|
|
202
|
+
interface SubgraphTableSnapshotsTable {
|
|
203
|
+
id: Generated<string>;
|
|
204
|
+
subgraph_name: string;
|
|
205
|
+
api_key_id: string | null;
|
|
206
|
+
table_name: string;
|
|
207
|
+
row_count: number | null;
|
|
208
|
+
created_at: Generated<Date>;
|
|
209
|
+
}
|
|
210
|
+
interface SubgraphHealthSnapshotsTable {
|
|
211
|
+
id: Generated<string>;
|
|
212
|
+
subgraph_id: string;
|
|
213
|
+
total_processed: number;
|
|
214
|
+
total_errors: number;
|
|
215
|
+
last_processed_block: number | null;
|
|
216
|
+
captured_at: Generated<Date>;
|
|
217
|
+
}
|
|
153
218
|
interface Database {
|
|
154
219
|
blocks: BlocksTable;
|
|
155
220
|
transactions: TransactionsTable;
|
|
@@ -159,13 +224,19 @@ interface Database {
|
|
|
159
224
|
jobs: JobsTable;
|
|
160
225
|
index_progress: IndexProgressTable;
|
|
161
226
|
deliveries: DeliveriesTable;
|
|
162
|
-
|
|
227
|
+
subgraphs: SubgraphsTable;
|
|
163
228
|
api_keys: ApiKeysTable;
|
|
164
229
|
accounts: AccountsTable;
|
|
165
230
|
sessions: SessionsTable;
|
|
166
231
|
magic_links: MagicLinksTable;
|
|
167
232
|
usage_daily: UsageDailyTable;
|
|
168
233
|
usage_snapshots: UsageSnapshotsTable;
|
|
234
|
+
waitlist: WaitlistTable;
|
|
235
|
+
account_insights: AccountInsightsTable;
|
|
236
|
+
account_agent_runs: AccountAgentRunsTable;
|
|
237
|
+
subgraph_health_snapshots: SubgraphHealthSnapshotsTable;
|
|
238
|
+
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
239
|
+
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
169
240
|
}
|
|
170
241
|
type Block = Selectable<BlocksTable>;
|
|
171
242
|
type InsertBlock = Insertable<BlocksTable>;
|
|
@@ -191,9 +262,9 @@ type UpdateIndexProgress = Updateable<IndexProgressTable>;
|
|
|
191
262
|
type Delivery = Selectable<DeliveriesTable>;
|
|
192
263
|
type InsertDelivery = Insertable<DeliveriesTable>;
|
|
193
264
|
type UpdateDelivery = Updateable<DeliveriesTable>;
|
|
194
|
-
type
|
|
195
|
-
type
|
|
196
|
-
type
|
|
265
|
+
type Subgraph = Selectable<SubgraphsTable>;
|
|
266
|
+
type InsertSubgraph = Insertable<SubgraphsTable>;
|
|
267
|
+
type UpdateSubgraph = Updateable<SubgraphsTable>;
|
|
197
268
|
type ApiKey = Selectable<ApiKeysTable>;
|
|
198
269
|
type InsertApiKey = Insertable<ApiKeysTable>;
|
|
199
270
|
type UpdateApiKey = Updateable<ApiKeysTable>;
|
|
@@ -205,6 +276,12 @@ type Session = Selectable<SessionsTable>;
|
|
|
205
276
|
type InsertSession = Insertable<SessionsTable>;
|
|
206
277
|
type UsageDaily = Selectable<UsageDailyTable>;
|
|
207
278
|
type UsageSnapshot = Selectable<UsageSnapshotsTable>;
|
|
279
|
+
type AccountInsight = Selectable<AccountInsightsTable>;
|
|
280
|
+
type InsertAccountInsight = Insertable<AccountInsightsTable>;
|
|
281
|
+
type AccountAgentRun = Selectable<AccountAgentRunsTable>;
|
|
282
|
+
type InsertAccountAgentRun = Insertable<AccountAgentRunsTable>;
|
|
283
|
+
type SubgraphHealthSnapshot = Selectable<SubgraphHealthSnapshotsTable>;
|
|
284
|
+
type InsertSubgraphHealthSnapshot = Insertable<SubgraphHealthSnapshotsTable>;
|
|
208
285
|
interface EnvSchemaOutput {
|
|
209
286
|
DATABASE_URL?: string;
|
|
210
287
|
NETWORK?: "mainnet" | "testnet";
|
|
@@ -278,9 +355,9 @@ declare class DatabaseError extends StreamsError {
|
|
|
278
355
|
constructor(message: string, cause?: unknown);
|
|
279
356
|
}
|
|
280
357
|
/**
|
|
281
|
-
*
|
|
358
|
+
* Delivery error
|
|
282
359
|
*/
|
|
283
|
-
declare class
|
|
360
|
+
declare class DeliveryError extends StreamsError {
|
|
284
361
|
statusCode?: number;
|
|
285
362
|
constructor(message: string, statusCode?: number, cause?: unknown);
|
|
286
363
|
toJSON(): {
|
|
@@ -366,7 +443,7 @@ declare function stats(): Promise<QueueStats2>;
|
|
|
366
443
|
* Get worker ID for this process
|
|
367
444
|
*/
|
|
368
445
|
declare function getWorkerId(): string;
|
|
369
|
-
import { z as z2 } from "zod";
|
|
446
|
+
import { z as z2 } from "zod/v4";
|
|
370
447
|
interface StxTransferFilter {
|
|
371
448
|
type: "stx_transfer";
|
|
372
449
|
sender?: string;
|
|
@@ -459,8 +536,8 @@ declare const ContractCallFilterSchema: z2.ZodType<ContractCallFilter>;
|
|
|
459
536
|
declare const ContractDeployFilterSchema: z2.ZodType<ContractDeployFilter>;
|
|
460
537
|
declare const PrintEventFilterSchema: z2.ZodType<PrintEventFilter>;
|
|
461
538
|
declare const StreamFilterSchema: z2.ZodType<StreamFilter>;
|
|
462
|
-
import { z as z3 } from "zod";
|
|
463
|
-
interface
|
|
539
|
+
import { z as z3 } from "zod/v4";
|
|
540
|
+
interface DeploySubgraphRequest {
|
|
464
541
|
name: string;
|
|
465
542
|
version?: string;
|
|
466
543
|
description?: string;
|
|
@@ -469,13 +546,13 @@ interface DeployViewRequest {
|
|
|
469
546
|
handlerCode: string;
|
|
470
547
|
reindex?: boolean;
|
|
471
548
|
}
|
|
472
|
-
declare const
|
|
473
|
-
interface
|
|
549
|
+
declare const DeploySubgraphRequestSchema: z3.ZodType<DeploySubgraphRequest>;
|
|
550
|
+
interface DeploySubgraphResponse {
|
|
474
551
|
action: "created" | "unchanged" | "updated" | "reindexed";
|
|
475
|
-
|
|
552
|
+
subgraphId: string;
|
|
476
553
|
message: string;
|
|
477
554
|
}
|
|
478
|
-
interface
|
|
555
|
+
interface SubgraphSummary {
|
|
479
556
|
name: string;
|
|
480
557
|
version: string;
|
|
481
558
|
status: string;
|
|
@@ -483,7 +560,7 @@ interface ViewSummary {
|
|
|
483
560
|
tables: string[];
|
|
484
561
|
createdAt: string;
|
|
485
562
|
}
|
|
486
|
-
interface
|
|
563
|
+
interface SubgraphDetail {
|
|
487
564
|
name: string;
|
|
488
565
|
version: string;
|
|
489
566
|
status: string;
|
|
@@ -512,7 +589,7 @@ interface ReindexResponse {
|
|
|
512
589
|
fromBlock: number;
|
|
513
590
|
toBlock: number | string;
|
|
514
591
|
}
|
|
515
|
-
interface
|
|
592
|
+
interface SubgraphQueryParams {
|
|
516
593
|
sort?: string;
|
|
517
594
|
order?: string;
|
|
518
595
|
limit?: number;
|
|
@@ -520,7 +597,7 @@ interface ViewQueryParams {
|
|
|
520
597
|
fields?: string;
|
|
521
598
|
filters?: Record<string, string>;
|
|
522
599
|
}
|
|
523
|
-
import { z as z4 } from "zod";
|
|
600
|
+
import { z as z4 } from "zod/v4";
|
|
524
601
|
interface StreamOptions {
|
|
525
602
|
decodeClarityValues: boolean;
|
|
526
603
|
includeRawTx: boolean;
|
|
@@ -531,7 +608,7 @@ interface StreamOptions {
|
|
|
531
608
|
}
|
|
532
609
|
interface CreateStream {
|
|
533
610
|
name: string;
|
|
534
|
-
|
|
611
|
+
endpointUrl: string;
|
|
535
612
|
filters: StreamFilter[];
|
|
536
613
|
options?: StreamOptions;
|
|
537
614
|
startBlock?: number;
|
|
@@ -539,11 +616,11 @@ interface CreateStream {
|
|
|
539
616
|
}
|
|
540
617
|
interface UpdateStream {
|
|
541
618
|
name?: string;
|
|
542
|
-
|
|
619
|
+
endpointUrl?: string;
|
|
543
620
|
filters?: StreamFilter[];
|
|
544
621
|
options?: Partial<StreamOptions>;
|
|
545
622
|
}
|
|
546
|
-
interface
|
|
623
|
+
interface DeliveryPayload {
|
|
547
624
|
streamId: string;
|
|
548
625
|
streamName: string;
|
|
549
626
|
block: {
|
|
@@ -584,7 +661,7 @@ interface StreamResponse {
|
|
|
584
661
|
id: string;
|
|
585
662
|
name: string;
|
|
586
663
|
status: "inactive" | "active" | "paused" | "failed";
|
|
587
|
-
|
|
664
|
+
endpointUrl: string;
|
|
588
665
|
filters: StreamFilter[];
|
|
589
666
|
options: StreamOptions;
|
|
590
667
|
totalDeliveries: number;
|
|
@@ -598,12 +675,12 @@ interface StreamResponse {
|
|
|
598
675
|
declare const StreamOptionsSchema: z4.ZodType<StreamOptions>;
|
|
599
676
|
declare const CreateStreamSchema: z4.ZodType<CreateStream>;
|
|
600
677
|
declare const UpdateStreamSchema: z4.ZodType<UpdateStream>;
|
|
601
|
-
declare const
|
|
678
|
+
declare const DeliveryPayloadSchema: z4.ZodType<DeliveryPayload>;
|
|
602
679
|
declare const StreamMetricsSchema: z4.ZodType<StreamMetricsResponse>;
|
|
603
680
|
declare const StreamResponseSchema: z4.ZodType<StreamResponse>;
|
|
604
681
|
interface CreateStreamResponse {
|
|
605
682
|
stream: StreamResponse;
|
|
606
|
-
|
|
683
|
+
signingSecret: string;
|
|
607
684
|
}
|
|
608
685
|
interface ListStreamsResponse {
|
|
609
686
|
streams: StreamResponse[];
|
|
@@ -621,7 +698,7 @@ declare namespace exports_hmac {
|
|
|
621
698
|
export { verifySignatureHeader, verifySignature, signPayload, generateSecret, createSignatureHeader };
|
|
622
699
|
}
|
|
623
700
|
/**
|
|
624
|
-
* Generate a random secret for
|
|
701
|
+
* Generate a random secret for delivery signing
|
|
625
702
|
* Returns 32 bytes as a 64-character hex string
|
|
626
703
|
*/
|
|
627
704
|
declare function generateSecret(): string;
|
|
@@ -645,4 +722,4 @@ declare function createSignatureHeader(payload: string, secret: string, timestam
|
|
|
645
722
|
* Returns true if valid, false otherwise
|
|
646
723
|
*/
|
|
647
724
|
declare function verifySignatureHeader(payload: string, header: string, secret: string, toleranceSeconds?: number): boolean;
|
|
648
|
-
export { sql, exports_queue as queue, parseJsonb, logger, jsonb, getRawClient, getErrorMessage, getEnv, getDb, exports_hmac as crypto, closeDb,
|
|
725
|
+
export { sql, exports_queue as queue, parseJsonb, logger, jsonb, getRawClient, getErrorMessage, getEnv, getDb, exports_hmac as crypto, closeDb, WaitlistTable, ValidationError, UsageSnapshotsTable, UsageSnapshot, UsageDailyTable, UsageDaily, UpdateTransaction, UpdateSubgraph, UpdateStreamSchema, UpdateStreamRow, UpdateStreamMetrics, UpdateStream, UpdateJob, UpdateIndexProgress, UpdateEvent, UpdateDelivery, UpdateBlock, UpdateApiKey, TransactionsTable, Transaction, SubgraphsTable, SubgraphTableSnapshotsTable, SubgraphSummary, SubgraphQueryParams, SubgraphProcessingStatsTable, SubgraphHealthSnapshotsTable, SubgraphHealthSnapshot, SubgraphDetail, Subgraph, StxTransferFilterSchema, StxTransferFilter, StxMintFilterSchema, StxMintFilter, StxLockFilterSchema, StxLockFilter, StxBurnFilterSchema, StxBurnFilter, StreamsTable, StreamsError, StreamResponseSchema, StreamResponse, StreamOptionsSchema, StreamOptions, StreamNotFoundError, StreamMetricsTable, StreamMetricsSchema, StreamMetricsResponse, StreamMetrics, StreamFilterSchema, StreamFilter, Stream, SessionsTable, Session, ReindexResponse, RateLimitError, QueueStats, PrintEventFilterSchema, PrintEventFilter, NftTransferFilterSchema, NftTransferFilter, NftMintFilterSchema, NftMintFilter, NftBurnFilterSchema, NftBurnFilter, MagicLinksTable, MagicLink, ListStreamsResponse, JobsTable, Job, InsertTransaction, InsertSubgraphHealthSnapshot, InsertSubgraph, InsertStreamMetrics, InsertStream, InsertSession, InsertMagicLink, InsertJob, InsertIndexProgress, InsertEvent, InsertDelivery, InsertBlock, InsertApiKey, InsertAccountInsight, InsertAccountAgentRun, InsertAccount, IndexProgressTable, IndexProgress, FtTransferFilterSchema, FtTransferFilter, FtMintFilterSchema, FtMintFilter, FtBurnFilterSchema, FtBurnFilter, ForbiddenError, FilterEvaluationError, EventsTable, Event, Env, DeploySubgraphResponse, DeploySubgraphRequestSchema, DeploySubgraphRequest, DeliveryPayloadSchema, DeliveryPayload, DeliveryError, Delivery, DeliveriesTable, DatabaseError, Database, CreateStreamSchema, CreateStreamResponse, CreateStream, ContractDeployFilterSchema, ContractDeployFilter, ContractCallFilterSchema, ContractCallFilter, BulkResumeResponse, BulkPauseResponse, BlocksTable, Block, AuthorizationError, AuthenticationError, ApiKeysTable, ApiKey, AccountsTable, AccountInsightsTable, AccountInsight, AccountAgentRunsTable, AccountAgentRun, Account };
|