@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.
Files changed (74) hide show
  1. package/dist/src/crypto/hmac.d.ts +1 -1
  2. package/dist/src/crypto/hmac.js +6 -2
  3. package/dist/src/crypto/hmac.js.map +3 -3
  4. package/dist/src/db/index.d.ts +85 -8
  5. package/dist/src/db/index.js +6 -2
  6. package/dist/src/db/index.js.map +2 -2
  7. package/dist/src/db/jsonb.js +6 -2
  8. package/dist/src/db/jsonb.js.map +2 -2
  9. package/dist/src/db/queries/accounts.d.ts +77 -5
  10. package/dist/src/db/queries/accounts.js +17 -2
  11. package/dist/src/db/queries/accounts.js.map +3 -3
  12. package/dist/src/db/queries/integrity.d.ts +75 -4
  13. package/dist/src/db/queries/integrity.js +6 -2
  14. package/dist/src/db/queries/integrity.js.map +2 -2
  15. package/dist/src/db/queries/metrics.d.ts +75 -4
  16. package/dist/src/db/queries/metrics.js +6 -2
  17. package/dist/src/db/queries/metrics.js.map +2 -2
  18. package/dist/src/db/queries/{views.d.ts → subgraphs.d.ts} +89 -18
  19. package/dist/src/db/queries/{views.js → subgraphs.js} +37 -33
  20. package/dist/src/db/queries/subgraphs.js.map +11 -0
  21. package/dist/src/db/queries/usage.d.ts +78 -7
  22. package/dist/src/db/queries/usage.js +13 -9
  23. package/dist/src/db/queries/usage.js.map +4 -4
  24. package/dist/src/db/schema.d.ts +85 -8
  25. package/dist/src/env.d.ts +1 -1
  26. package/dist/src/env.js +8 -4
  27. package/dist/src/env.js.map +3 -3
  28. package/dist/src/errors.d.ts +3 -3
  29. package/dist/src/errors.js +9 -5
  30. package/dist/src/errors.js.map +3 -3
  31. package/dist/src/index.d.ts +104 -27
  32. package/dist/src/index.js +24 -20
  33. package/dist/src/index.js.map +9 -9
  34. package/dist/src/lib/plans.d.ts +1 -1
  35. package/dist/src/lib/plans.js +7 -3
  36. package/dist/src/lib/plans.js.map +3 -3
  37. package/dist/src/logger.js +8 -4
  38. package/dist/src/logger.js.map +3 -3
  39. package/dist/src/node/client.js +6 -2
  40. package/dist/src/node/client.js.map +2 -2
  41. package/dist/src/node/hiro-client.js +8 -4
  42. package/dist/src/node/hiro-client.js.map +3 -3
  43. package/dist/src/node/local-client.d.ts +75 -4
  44. package/dist/src/node/local-client.js +6 -2
  45. package/dist/src/node/local-client.js.map +3 -3
  46. package/dist/src/queue/index.js +6 -2
  47. package/dist/src/queue/index.js.map +2 -2
  48. package/dist/src/queue/listener.js +6 -2
  49. package/dist/src/queue/listener.js.map +2 -2
  50. package/dist/src/queue/recovery.js +6 -2
  51. package/dist/src/queue/recovery.js.map +2 -2
  52. package/dist/src/schemas/filters.d.ts +1 -1
  53. package/dist/src/schemas/filters.js +7 -3
  54. package/dist/src/schemas/filters.js.map +3 -3
  55. package/dist/src/schemas/index.d.ts +17 -17
  56. package/dist/src/schemas/index.js +19 -15
  57. package/dist/src/schemas/index.js.map +6 -6
  58. package/dist/src/schemas/{views.d.ts → subgraphs.d.ts} +9 -9
  59. package/dist/src/schemas/{views.js → subgraphs.js} +12 -8
  60. package/dist/src/schemas/subgraphs.js.map +10 -0
  61. package/dist/src/types.d.ts +2 -2
  62. package/dist/src/types.js +1 -12
  63. package/dist/src/types.js.map +1 -1
  64. package/migrations/0009_waitlist.ts +19 -0
  65. package/migrations/0010_waitlist_status.ts +12 -0
  66. package/migrations/0011_account_insights.ts +63 -0
  67. package/migrations/0012_view_health_snapshots.ts +29 -0
  68. package/migrations/0013_view_processing_stats.ts +42 -0
  69. package/migrations/0014_view_table_snapshots.ts +33 -0
  70. package/migrations/0015_rename_views_to_subgraphs.ts +136 -0
  71. package/migrations/0016_rename_webhook_to_endpoint.ts +12 -0
  72. package/package.json +8 -8
  73. package/dist/src/db/queries/views.js.map +0 -11
  74. 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 views: number;\n apiRequestsPerDay: number;\n deliveriesPerMonth: number;\n storageBytes: number;\n}\n\nexport const FREE_PLAN: PlanLimits = {\n streams: 3,\n views: 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; views: 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 viewCount = await db\n .selectFrom(\"views\")\n .innerJoin(\"api_keys\", \"views.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 views: Number(viewCount?.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.views >= limits.views) {\n return { allowed: false, limits, current, exceeded: \"views\" };\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 view schemas.\n */\nexport async function measureStorage(db: Kysely<Database>): Promise<void> {\n // Get all accounts with views\n const accountViews = await db\n .selectFrom(\"views\")\n .innerJoin(\"api_keys\", \"views.api_key_id\", \"api_keys.id\")\n .select([\"api_keys.account_id\", \"views.schema_name\"])\n .where(\"views.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 accountViews) {\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"
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": "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",
9
- "debugId": "51CB827BBF658C6C64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "31E68DFE6E6CCA6264756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -35,8 +35,8 @@ interface StreamsTable {
35
35
  status: Generated<string>;
36
36
  filters: unknown;
37
37
  options: Generated<unknown>;
38
- webhook_url: string;
39
- webhook_secret: string | null;
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 ViewsTable {
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
- views: ViewsTable;
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 View = Selectable<ViewsTable>;
195
- type InsertView = Insertable<ViewsTable>;
196
- type UpdateView = Updateable<ViewsTable>;
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
- export { ViewsTable, View, UsageSnapshotsTable, UsageSnapshot, UsageDailyTable, UsageDaily, UpdateView, UpdateTransaction, UpdateStreamRow, UpdateStreamMetrics, UpdateJob, UpdateIndexProgress, UpdateEvent, UpdateDelivery, UpdateBlock, UpdateApiKey, TransactionsTable, Transaction, StreamsTable, StreamMetricsTable, StreamMetrics, Stream, SessionsTable, Session, MagicLinksTable, MagicLink, JobsTable, Job, InsertView, InsertTransaction, InsertStreamMetrics, InsertStream, InsertSession, InsertMagicLink, InsertJob, InsertIndexProgress, InsertEvent, InsertDelivery, InsertBlock, InsertApiKey, InsertAccount, IndexProgressTable, IndexProgress, EventsTable, Event, Delivery, DeliveriesTable, Database, BlocksTable, Block, ApiKeysTable, ApiKey, AccountsTable, Account };
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
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v4";
2
2
  interface EnvSchemaOutput {
3
3
  DATABASE_URL?: string;
4
4
  NETWORK?: "mainnet" | "testnet";
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: (newValue) => all[name] = () => newValue
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.format());
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=36753D595F72E07A64756E2164756E21
63
+ //# debugId=F91178E691D405D264756E2164756E21
60
64
  //# sourceMappingURL=env.js.map
@@ -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.format());\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"
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": ";;;;;;;;;;;;;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,OAAO,MAAM,OAAO,CAAC;AAAA,IACnC,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": "36753D595F72E07A64756E2164756E21",
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
  }
@@ -32,9 +32,9 @@ declare class DatabaseError extends StreamsError {
32
32
  constructor(message: string, cause?: unknown);
33
33
  }
34
34
  /**
35
- * Webhook delivery error
35
+ * Delivery error
36
36
  */
37
- declare class WebhookDeliveryError extends StreamsError {
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, WebhookDeliveryError, ValidationError, StreamsError, StreamNotFoundError, RateLimitError, ForbiddenError, FilterEvaluationError, DatabaseError, AuthorizationError, AuthenticationError };
71
+ export { getErrorMessage, ValidationError, StreamsError, StreamNotFoundError, RateLimitError, ForbiddenError, FilterEvaluationError, DeliveryError, DatabaseError, AuthorizationError, AuthenticationError };
@@ -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: (newValue) => all[name] = () => newValue
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 WebhookDeliveryError extends StreamsError {
57
+ class DeliveryError extends StreamsError {
54
58
  statusCode;
55
59
  constructor(message, statusCode, cause) {
56
- super("WEBHOOK_DELIVERY_ERROR", message, cause);
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=56850B7EEE76CAD464756E2164756E21
122
+ //# debugId=42FBAE7EC051820B64756E2164756E21
119
123
  //# sourceMappingURL=errors.js.map
@@ -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 * Webhook delivery error\n */\nexport class WebhookDeliveryError extends StreamsError {\n constructor(\n message: string,\n public statusCode?: number,\n cause?: unknown\n ) {\n super(\"WEBHOOK_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"
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": ";;;;;;;;;;;;;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,6BAA6B,aAAa;AAAA,EAG5C;AAAA,EAFT,WAAW,CACT,SACO,YACP,OACA;AAAA,IACA,MAAM,0BAA0B,SAAS,KAAK;AAAA,IAHvC;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": "56850B7EEE76CAD464756E2164756E21",
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
  }
@@ -35,8 +35,8 @@ interface StreamsTable {
35
35
  status: Generated<string>;
36
36
  filters: unknown;
37
37
  options: Generated<unknown>;
38
- webhook_url: string;
39
- webhook_secret: string | null;
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 ViewsTable {
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
- views: ViewsTable;
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 View = Selectable<ViewsTable>;
195
- type InsertView = Insertable<ViewsTable>;
196
- type UpdateView = Updateable<ViewsTable>;
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
- * Webhook delivery error
358
+ * Delivery error
282
359
  */
283
- declare class WebhookDeliveryError extends StreamsError {
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 DeployViewRequest {
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 DeployViewRequestSchema: z3.ZodType<DeployViewRequest>;
473
- interface DeployViewResponse {
549
+ declare const DeploySubgraphRequestSchema: z3.ZodType<DeploySubgraphRequest>;
550
+ interface DeploySubgraphResponse {
474
551
  action: "created" | "unchanged" | "updated" | "reindexed";
475
- viewId: string;
552
+ subgraphId: string;
476
553
  message: string;
477
554
  }
478
- interface ViewSummary {
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 ViewDetail {
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 ViewQueryParams {
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
- webhookUrl: string;
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
- webhookUrl?: string;
619
+ endpointUrl?: string;
543
620
  filters?: StreamFilter[];
544
621
  options?: Partial<StreamOptions>;
545
622
  }
546
- interface WebhookPayload {
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
- webhookUrl: string;
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 WebhookPayloadSchema: z4.ZodType<WebhookPayload>;
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
- webhookSecret: string;
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 webhook signing
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, WebhookPayloadSchema, WebhookPayload, WebhookDeliveryError, ViewsTable, ViewSummary, ViewQueryParams, ViewDetail, View, ValidationError, UsageSnapshotsTable, UsageSnapshot, UsageDailyTable, UsageDaily, UpdateView, UpdateTransaction, UpdateStreamSchema, UpdateStreamRow, UpdateStreamMetrics, UpdateStream, UpdateJob, UpdateIndexProgress, UpdateEvent, UpdateDelivery, UpdateBlock, UpdateApiKey, TransactionsTable, Transaction, 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, InsertView, InsertTransaction, InsertStreamMetrics, InsertStream, InsertSession, InsertMagicLink, InsertJob, InsertIndexProgress, InsertEvent, InsertDelivery, InsertBlock, InsertApiKey, InsertAccount, IndexProgressTable, IndexProgress, FtTransferFilterSchema, FtTransferFilter, FtMintFilterSchema, FtMintFilter, FtBurnFilterSchema, FtBurnFilter, ForbiddenError, FilterEvaluationError, EventsTable, Event, Env, DeployViewResponse, DeployViewRequestSchema, DeployViewRequest, Delivery, DeliveriesTable, DatabaseError, Database, CreateStreamSchema, CreateStreamResponse, CreateStream, ContractDeployFilterSchema, ContractDeployFilter, ContractCallFilterSchema, ContractCallFilter, BulkResumeResponse, BulkPauseResponse, BlocksTable, Block, AuthorizationError, AuthenticationError, ApiKeysTable, ApiKey, AccountsTable, Account };
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 };