@secondlayer/shared 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/src/crypto/hmac.js +6 -2
  2. package/dist/src/crypto/hmac.js.map +2 -2
  3. package/dist/src/db/index.d.ts +83 -6
  4. package/dist/src/db/index.js +6 -2
  5. package/dist/src/db/index.js.map +2 -2
  6. package/dist/src/db/jsonb.js +6 -2
  7. package/dist/src/db/jsonb.js.map +2 -2
  8. package/dist/src/db/queries/accounts.d.ts +75 -3
  9. package/dist/src/db/queries/accounts.js +17 -2
  10. package/dist/src/db/queries/accounts.js.map +3 -3
  11. package/dist/src/db/queries/integrity.d.ts +73 -2
  12. package/dist/src/db/queries/integrity.js +6 -2
  13. package/dist/src/db/queries/integrity.js.map +2 -2
  14. package/dist/src/db/queries/metrics.d.ts +73 -2
  15. package/dist/src/db/queries/metrics.js +6 -2
  16. package/dist/src/db/queries/metrics.js.map +2 -2
  17. package/dist/src/db/queries/{views.d.ts → subgraphs.d.ts} +87 -16
  18. package/dist/src/db/queries/{views.js → subgraphs.js} +37 -33
  19. package/dist/src/db/queries/subgraphs.js.map +11 -0
  20. package/dist/src/db/queries/usage.d.ts +76 -5
  21. package/dist/src/db/queries/usage.js +13 -9
  22. package/dist/src/db/queries/usage.js.map +4 -4
  23. package/dist/src/db/schema.d.ts +83 -6
  24. package/dist/src/env.js +6 -2
  25. package/dist/src/env.js.map +2 -2
  26. package/dist/src/errors.js +6 -2
  27. package/dist/src/errors.js.map +2 -2
  28. package/dist/src/index.d.ts +90 -13
  29. package/dist/src/index.js +9 -5
  30. package/dist/src/index.js.map +4 -4
  31. package/dist/src/lib/plans.d.ts +1 -1
  32. package/dist/src/lib/plans.js +7 -3
  33. package/dist/src/lib/plans.js.map +3 -3
  34. package/dist/src/logger.js +6 -2
  35. package/dist/src/logger.js.map +2 -2
  36. package/dist/src/node/client.js +6 -2
  37. package/dist/src/node/client.js.map +2 -2
  38. package/dist/src/node/hiro-client.js +6 -2
  39. package/dist/src/node/hiro-client.js.map +2 -2
  40. package/dist/src/node/local-client.d.ts +73 -2
  41. package/dist/src/node/local-client.js +6 -2
  42. package/dist/src/node/local-client.js.map +2 -2
  43. package/dist/src/queue/index.js +6 -2
  44. package/dist/src/queue/index.js.map +2 -2
  45. package/dist/src/queue/listener.js +6 -2
  46. package/dist/src/queue/listener.js.map +2 -2
  47. package/dist/src/queue/recovery.js +6 -2
  48. package/dist/src/queue/recovery.js.map +2 -2
  49. package/dist/src/schemas/filters.js +6 -2
  50. package/dist/src/schemas/filters.js.map +2 -2
  51. package/dist/src/schemas/index.d.ts +8 -8
  52. package/dist/src/schemas/index.js +9 -5
  53. package/dist/src/schemas/index.js.map +4 -4
  54. package/dist/src/schemas/{views.d.ts → subgraphs.d.ts} +8 -8
  55. package/dist/src/schemas/{views.js → subgraphs.js} +10 -6
  56. package/dist/src/schemas/subgraphs.js.map +10 -0
  57. package/dist/src/types.js +1 -12
  58. package/dist/src/types.js.map +1 -1
  59. package/migrations/0009_waitlist.ts +19 -0
  60. package/migrations/0010_waitlist_status.ts +12 -0
  61. package/migrations/0011_account_insights.ts +63 -0
  62. package/migrations/0012_view_health_snapshots.ts +29 -0
  63. package/migrations/0013_view_processing_stats.ts +42 -0
  64. package/migrations/0014_view_table_snapshots.ts +33 -0
  65. package/migrations/0015_rename_views_to_subgraphs.ts +136 -0
  66. package/package.json +7 -7
  67. package/dist/src/db/queries/views.js.map +0 -11
  68. package/dist/src/schemas/views.js.map +0 -10
@@ -83,7 +83,7 @@ interface DeliveriesTable {
83
83
  payload: unknown;
84
84
  created_at: Generated<Date>;
85
85
  }
86
- interface ViewsTable {
86
+ interface SubgraphsTable {
87
87
  id: Generated<string>;
88
88
  name: string;
89
89
  version: Generated<string>;
@@ -151,6 +151,71 @@ interface UsageSnapshotsTable {
151
151
  measured_at: Generated<Date>;
152
152
  storage_bytes: Generated<number>;
153
153
  }
154
+ interface WaitlistTable {
155
+ id: Generated<string>;
156
+ email: string;
157
+ source: Generated<string>;
158
+ status: Generated<string>;
159
+ created_at: Generated<Date>;
160
+ }
161
+ interface AccountInsightsTable {
162
+ id: Generated<string>;
163
+ account_id: string;
164
+ category: string;
165
+ insight_type: string;
166
+ resource_id: string | null;
167
+ severity: string;
168
+ title: string;
169
+ body: string;
170
+ data: unknown;
171
+ dismissed_at: Date | null;
172
+ expires_at: Date | null;
173
+ created_at: Generated<Date>;
174
+ }
175
+ interface AccountAgentRunsTable {
176
+ id: Generated<string>;
177
+ account_id: string;
178
+ started_at: Generated<Date>;
179
+ completed_at: Date | null;
180
+ status: Generated<string>;
181
+ input_tokens: Generated<number>;
182
+ output_tokens: Generated<number>;
183
+ cost_usd: Generated<number>;
184
+ insights_created: Generated<number>;
185
+ error: string | null;
186
+ }
187
+ interface SubgraphProcessingStatsTable {
188
+ id: Generated<string>;
189
+ subgraph_name: string;
190
+ api_key_id: string | null;
191
+ bucket_start: Date | null;
192
+ bucket_end: Date | null;
193
+ blocks_processed: number | null;
194
+ total_time_ms: number | null;
195
+ handler_time_ms: number | null;
196
+ flush_time_ms: number | null;
197
+ max_block_time_ms: number | null;
198
+ max_handler_time_ms: number | null;
199
+ avg_ops_per_block: number | null;
200
+ is_catchup: Generated<boolean>;
201
+ created_at: Generated<Date>;
202
+ }
203
+ interface SubgraphTableSnapshotsTable {
204
+ id: Generated<string>;
205
+ subgraph_name: string;
206
+ api_key_id: string | null;
207
+ table_name: string;
208
+ row_count: number | null;
209
+ created_at: Generated<Date>;
210
+ }
211
+ interface SubgraphHealthSnapshotsTable {
212
+ id: Generated<string>;
213
+ subgraph_id: string;
214
+ total_processed: number;
215
+ total_errors: number;
216
+ last_processed_block: number | null;
217
+ captured_at: Generated<Date>;
218
+ }
154
219
  interface Database {
155
220
  blocks: BlocksTable;
156
221
  transactions: TransactionsTable;
@@ -160,13 +225,19 @@ interface Database {
160
225
  jobs: JobsTable;
161
226
  index_progress: IndexProgressTable;
162
227
  deliveries: DeliveriesTable;
163
- views: ViewsTable;
228
+ subgraphs: SubgraphsTable;
164
229
  api_keys: ApiKeysTable;
165
230
  accounts: AccountsTable;
166
231
  sessions: SessionsTable;
167
232
  magic_links: MagicLinksTable;
168
233
  usage_daily: UsageDailyTable;
169
234
  usage_snapshots: UsageSnapshotsTable;
235
+ waitlist: WaitlistTable;
236
+ account_insights: AccountInsightsTable;
237
+ account_agent_runs: AccountAgentRunsTable;
238
+ subgraph_health_snapshots: SubgraphHealthSnapshotsTable;
239
+ subgraph_processing_stats: SubgraphProcessingStatsTable;
240
+ subgraph_table_snapshots: SubgraphTableSnapshotsTable;
170
241
  }
171
242
  type StreamMetrics = Selectable<StreamMetricsTable>;
172
243
  declare function getStreamMetrics(db: Kysely<Database>, streamId: string): Promise<StreamMetrics | null>;
@@ -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
 
@@ -47,5 +51,5 @@ export {
47
51
  getStreamMetrics
48
52
  };
49
53
 
50
- //# debugId=A4E370524682609864756E2164756E21
54
+ //# debugId=B4106C2E1F1C5A3F64756E2164756E21
51
55
  //# sourceMappingURL=metrics.js.map
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { sql, type Kysely } from \"kysely\";\nimport type { Database, StreamMetrics } from \"../types.ts\";\n\nexport async function getStreamMetrics(db: Kysely<Database>, streamId: string): Promise<StreamMetrics | null> {\n return (\n await db\n .selectFrom(\"stream_metrics\")\n .selectAll()\n .where(\"stream_id\", \"=\", streamId)\n .executeTakeFirst()\n ) ?? null;\n}\n\nexport async function updateStreamMetrics(\n db: Kysely<Database>,\n streamId: string,\n updates: Partial<{\n lastTriggeredAt: Date;\n lastTriggeredBlock: number;\n totalDeliveries: number;\n failedDeliveries: number;\n errorMessage: string | null;\n }>,\n): Promise<void> {\n await db\n .insertInto(\"stream_metrics\")\n .values({\n stream_id: streamId,\n last_triggered_at: updates.lastTriggeredAt ?? null,\n last_triggered_block: updates.lastTriggeredBlock ?? null,\n total_deliveries: updates.totalDeliveries ?? 0,\n failed_deliveries: updates.failedDeliveries ?? 0,\n error_message: updates.errorMessage ?? null,\n })\n .onConflict((oc) =>\n oc.column(\"stream_id\").doUpdateSet({\n ...(updates.lastTriggeredAt !== undefined ? { last_triggered_at: updates.lastTriggeredAt } : {}),\n ...(updates.lastTriggeredBlock !== undefined ? { last_triggered_block: updates.lastTriggeredBlock } : {}),\n ...(updates.totalDeliveries !== undefined ? { total_deliveries: updates.totalDeliveries } : {}),\n ...(updates.failedDeliveries !== undefined ? { failed_deliveries: updates.failedDeliveries } : {}),\n ...(updates.errorMessage !== undefined ? { error_message: updates.errorMessage } : {}),\n }),\n )\n .execute();\n}\n\nexport async function incrementDeliveryCount(\n db: Kysely<Database>,\n streamId: string,\n failed: boolean,\n): Promise<void> {\n await db\n .insertInto(\"stream_metrics\")\n .values({\n stream_id: streamId,\n total_deliveries: 1,\n failed_deliveries: failed ? 1 : 0,\n })\n .onConflict((oc) =>\n oc.column(\"stream_id\").doUpdateSet({\n total_deliveries: sql`stream_metrics.total_deliveries + 1`,\n ...(failed ? { failed_deliveries: sql`stream_metrics.failed_deliveries + 1` } : {}),\n }),\n )\n .execute();\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;AAAA;AAGA,eAAsB,gBAAgB,CAAC,IAAsB,UAAiD;AAAA,EAC5G,OACE,MAAM,GACH,WAAW,gBAAgB,EAC3B,UAAU,EACV,MAAM,aAAa,KAAK,QAAQ,EAChC,iBAAiB,KACjB;AAAA;AAGP,eAAsB,mBAAmB,CACvC,IACA,UACA,SAOe;AAAA,EACf,MAAM,GACH,WAAW,gBAAgB,EAC3B,OAAO;AAAA,IACN,WAAW;AAAA,IACX,mBAAmB,QAAQ,mBAAmB;AAAA,IAC9C,sBAAsB,QAAQ,sBAAsB;AAAA,IACpD,kBAAkB,QAAQ,mBAAmB;AAAA,IAC7C,mBAAmB,QAAQ,oBAAoB;AAAA,IAC/C,eAAe,QAAQ,gBAAgB;AAAA,EACzC,CAAC,EACA,WAAW,CAAC,OACX,GAAG,OAAO,WAAW,EAAE,YAAY;AAAA,OAC7B,QAAQ,oBAAoB,YAAY,EAAE,mBAAmB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,OAC1F,QAAQ,uBAAuB,YAAY,EAAE,sBAAsB,QAAQ,mBAAmB,IAAI,CAAC;AAAA,OACnG,QAAQ,oBAAoB,YAAY,EAAE,kBAAkB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,OACzF,QAAQ,qBAAqB,YAAY,EAAE,mBAAmB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,OAC5F,QAAQ,iBAAiB,YAAY,EAAE,eAAe,QAAQ,aAAa,IAAI,CAAC;AAAA,EACtF,CAAC,CACH,EACC,QAAQ;AAAA;AAGb,eAAsB,sBAAsB,CAC1C,IACA,UACA,QACe;AAAA,EACf,MAAM,GACH,WAAW,gBAAgB,EAC3B,OAAO;AAAA,IACN,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB,SAAS,IAAI;AAAA,EAClC,CAAC,EACA,WAAW,CAAC,OACX,GAAG,OAAO,WAAW,EAAE,YAAY;AAAA,IACjC,kBAAkB;AAAA,OACd,SAAS,EAAE,mBAAmB,0CAA0C,IAAI,CAAC;AAAA,EACnF,CAAC,CACH,EACC,QAAQ;AAAA;",
8
- "debugId": "A4E370524682609864756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAGA,eAAsB,gBAAgB,CAAC,IAAsB,UAAiD;AAAA,EAC5G,OACE,MAAM,GACH,WAAW,gBAAgB,EAC3B,UAAU,EACV,MAAM,aAAa,KAAK,QAAQ,EAChC,iBAAiB,KACjB;AAAA;AAGP,eAAsB,mBAAmB,CACvC,IACA,UACA,SAOe;AAAA,EACf,MAAM,GACH,WAAW,gBAAgB,EAC3B,OAAO;AAAA,IACN,WAAW;AAAA,IACX,mBAAmB,QAAQ,mBAAmB;AAAA,IAC9C,sBAAsB,QAAQ,sBAAsB;AAAA,IACpD,kBAAkB,QAAQ,mBAAmB;AAAA,IAC7C,mBAAmB,QAAQ,oBAAoB;AAAA,IAC/C,eAAe,QAAQ,gBAAgB;AAAA,EACzC,CAAC,EACA,WAAW,CAAC,OACX,GAAG,OAAO,WAAW,EAAE,YAAY;AAAA,OAC7B,QAAQ,oBAAoB,YAAY,EAAE,mBAAmB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,OAC1F,QAAQ,uBAAuB,YAAY,EAAE,sBAAsB,QAAQ,mBAAmB,IAAI,CAAC;AAAA,OACnG,QAAQ,oBAAoB,YAAY,EAAE,kBAAkB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,OACzF,QAAQ,qBAAqB,YAAY,EAAE,mBAAmB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,OAC5F,QAAQ,iBAAiB,YAAY,EAAE,eAAe,QAAQ,aAAa,IAAI,CAAC;AAAA,EACtF,CAAC,CACH,EACC,QAAQ;AAAA;AAGb,eAAsB,sBAAsB,CAC1C,IACA,UACA,QACe;AAAA,EACf,MAAM,GACH,WAAW,gBAAgB,EAC3B,OAAO;AAAA,IACN,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB,SAAS,IAAI;AAAA,EAClC,CAAC,EACA,WAAW,CAAC,OACX,GAAG,OAAO,WAAW,EAAE,YAAY;AAAA,IACjC,kBAAkB;AAAA,OACd,SAAS,EAAE,mBAAmB,0CAA0C,IAAI,CAAC;AAAA,EACnF,CAAC,CACH,EACC,QAAQ;AAAA;",
8
+ "debugId": "B4106C2E1F1C5A3F64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -83,7 +83,7 @@ interface DeliveriesTable {
83
83
  payload: unknown;
84
84
  created_at: Generated<Date>;
85
85
  }
86
- interface ViewsTable {
86
+ interface SubgraphsTable {
87
87
  id: Generated<string>;
88
88
  name: string;
89
89
  version: Generated<string>;
@@ -151,6 +151,71 @@ interface UsageSnapshotsTable {
151
151
  measured_at: Generated<Date>;
152
152
  storage_bytes: Generated<number>;
153
153
  }
154
+ interface WaitlistTable {
155
+ id: Generated<string>;
156
+ email: string;
157
+ source: Generated<string>;
158
+ status: Generated<string>;
159
+ created_at: Generated<Date>;
160
+ }
161
+ interface AccountInsightsTable {
162
+ id: Generated<string>;
163
+ account_id: string;
164
+ category: string;
165
+ insight_type: string;
166
+ resource_id: string | null;
167
+ severity: string;
168
+ title: string;
169
+ body: string;
170
+ data: unknown;
171
+ dismissed_at: Date | null;
172
+ expires_at: Date | null;
173
+ created_at: Generated<Date>;
174
+ }
175
+ interface AccountAgentRunsTable {
176
+ id: Generated<string>;
177
+ account_id: string;
178
+ started_at: Generated<Date>;
179
+ completed_at: Date | null;
180
+ status: Generated<string>;
181
+ input_tokens: Generated<number>;
182
+ output_tokens: Generated<number>;
183
+ cost_usd: Generated<number>;
184
+ insights_created: Generated<number>;
185
+ error: string | null;
186
+ }
187
+ interface SubgraphProcessingStatsTable {
188
+ id: Generated<string>;
189
+ subgraph_name: string;
190
+ api_key_id: string | null;
191
+ bucket_start: Date | null;
192
+ bucket_end: Date | null;
193
+ blocks_processed: number | null;
194
+ total_time_ms: number | null;
195
+ handler_time_ms: number | null;
196
+ flush_time_ms: number | null;
197
+ max_block_time_ms: number | null;
198
+ max_handler_time_ms: number | null;
199
+ avg_ops_per_block: number | null;
200
+ is_catchup: Generated<boolean>;
201
+ created_at: Generated<Date>;
202
+ }
203
+ interface SubgraphTableSnapshotsTable {
204
+ id: Generated<string>;
205
+ subgraph_name: string;
206
+ api_key_id: string | null;
207
+ table_name: string;
208
+ row_count: number | null;
209
+ created_at: Generated<Date>;
210
+ }
211
+ interface SubgraphHealthSnapshotsTable {
212
+ id: Generated<string>;
213
+ subgraph_id: string;
214
+ total_processed: number;
215
+ total_errors: number;
216
+ last_processed_block: number | null;
217
+ captured_at: Generated<Date>;
218
+ }
154
219
  interface Database {
155
220
  blocks: BlocksTable;
156
221
  transactions: TransactionsTable;
@@ -160,22 +225,28 @@ interface Database {
160
225
  jobs: JobsTable;
161
226
  index_progress: IndexProgressTable;
162
227
  deliveries: DeliveriesTable;
163
- views: ViewsTable;
228
+ subgraphs: SubgraphsTable;
164
229
  api_keys: ApiKeysTable;
165
230
  accounts: AccountsTable;
166
231
  sessions: SessionsTable;
167
232
  magic_links: MagicLinksTable;
168
233
  usage_daily: UsageDailyTable;
169
234
  usage_snapshots: UsageSnapshotsTable;
235
+ waitlist: WaitlistTable;
236
+ account_insights: AccountInsightsTable;
237
+ account_agent_runs: AccountAgentRunsTable;
238
+ subgraph_health_snapshots: SubgraphHealthSnapshotsTable;
239
+ subgraph_processing_stats: SubgraphProcessingStatsTable;
240
+ subgraph_table_snapshots: SubgraphTableSnapshotsTable;
170
241
  }
171
- type View = Selectable<ViewsTable>;
242
+ type Subgraph = Selectable<SubgraphsTable>;
172
243
  /**
173
- * Convert a view name to its PostgreSQL schema name.
174
- * With keyPrefix: "view_{prefix}_{name}" (tenant-isolated)
175
- * Without keyPrefix: "view_{name}" (backward compat)
244
+ * Convert a subgraph name to its PostgreSQL schema name.
245
+ * With keyPrefix: "subgraph_{prefix}_{name}" (tenant-isolated)
246
+ * Without keyPrefix: "subgraph_{name}" (backward compat)
176
247
  */
177
- declare function pgSchemaName(viewName: string, keyPrefix?: string): string;
178
- declare function registerView(db: Kysely<Database>, data: {
248
+ declare function pgSchemaName(subgraphName: string, keyPrefix?: string): string;
249
+ declare function registerSubgraph(db: Kysely<Database>, data: {
179
250
  name: string
180
251
  version: string
181
252
  definition: Record<string, unknown>
@@ -183,11 +254,11 @@ declare function registerView(db: Kysely<Database>, data: {
183
254
  handlerPath: string
184
255
  apiKeyId?: string
185
256
  schemaName?: string
186
- }): Promise<View>;
187
- declare function getView(db: Kysely<Database>, name: string, apiKeyId?: string): Promise<View | null>;
188
- declare function listViews(db: Kysely<Database>, apiKeyId?: string): Promise<View[]>;
189
- declare function updateViewStatus(db: Kysely<Database>, name: string, status: string, lastProcessedBlock?: number): Promise<void>;
190
- declare function recordViewProcessed(db: Kysely<Database>, name: string, processed: number, errors: number, lastError?: string): Promise<void>;
191
- declare function updateViewHandlerPath(db: Kysely<Database>, name: string, handlerPath: string): Promise<void>;
192
- declare function deleteView(db: Kysely<Database>, name: string, apiKeyId?: string): Promise<View | null>;
193
- export { updateViewStatus, updateViewHandlerPath, registerView, recordViewProcessed, pgSchemaName, listViews, getView, deleteView };
257
+ }): Promise<Subgraph>;
258
+ declare function getSubgraph(db: Kysely<Database>, name: string, apiKeyId?: string): Promise<Subgraph | null>;
259
+ declare function listSubgraphs(db: Kysely<Database>, apiKeyId?: string): Promise<Subgraph[]>;
260
+ declare function updateSubgraphStatus(db: Kysely<Database>, name: string, status: string, lastProcessedBlock?: number): Promise<void>;
261
+ declare function recordSubgraphProcessed(db: Kysely<Database>, name: string, processed: number, errors: number, lastError?: string): Promise<void>;
262
+ declare function updateSubgraphHandlerPath(db: Kysely<Database>, name: string, handlerPath: string): Promise<void>;
263
+ declare function deleteSubgraph(db: Kysely<Database>, name: string, apiKeyId?: string): Promise<Subgraph | null>;
264
+ export { updateSubgraphStatus, updateSubgraphHandlerPath, registerSubgraph, recordSubgraphProcessed, pgSchemaName, listSubgraphs, getSubgraph, deleteSubgraph };
@@ -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
 
@@ -27,18 +31,18 @@ function parseJsonb(value) {
27
31
  return value ?? {};
28
32
  }
29
33
 
30
- // src/db/queries/views.ts
34
+ // src/db/queries/subgraphs.ts
31
35
  import { sql as sql2 } from "kysely";
32
- function pgSchemaName(viewName, keyPrefix) {
33
- const safeName = viewName.replace(/-/g, "_");
36
+ function pgSchemaName(subgraphName, keyPrefix) {
37
+ const safeName = subgraphName.replace(/-/g, "_");
34
38
  if (!keyPrefix) {
35
- return `view_${safeName}`;
39
+ return `subgraph_${safeName}`;
36
40
  }
37
41
  const safePrefix = keyPrefix.replace(/^sk-sl_/, "").replace(/-/g, "_");
38
- return `view_${safePrefix}_${safeName}`;
42
+ return `subgraph_${safePrefix}_${safeName}`;
39
43
  }
40
- async function registerView(db, data) {
41
- return await db.insertInto("views").values({
44
+ async function registerSubgraph(db, data) {
45
+ return await db.insertInto("subgraphs").values({
42
46
  name: data.name,
43
47
  version: data.version,
44
48
  definition: jsonb(data.definition),
@@ -55,57 +59,57 @@ async function registerView(db, data) {
55
59
  updated_at: new Date
56
60
  })).returningAll().executeTakeFirstOrThrow();
57
61
  }
58
- async function getView(db, name, apiKeyId) {
59
- let query = db.selectFrom("views").selectAll().where("name", "=", name);
62
+ async function getSubgraph(db, name, apiKeyId) {
63
+ let query = db.selectFrom("subgraphs").selectAll().where("name", "=", name);
60
64
  if (apiKeyId) {
61
65
  query = query.where("api_key_id", "=", apiKeyId);
62
66
  }
63
67
  return await query.executeTakeFirst() ?? null;
64
68
  }
65
- async function listViews(db, apiKeyId) {
66
- let query = db.selectFrom("views").selectAll();
69
+ async function listSubgraphs(db, apiKeyId) {
70
+ let query = db.selectFrom("subgraphs").selectAll();
67
71
  if (apiKeyId) {
68
72
  query = query.where("api_key_id", "=", apiKeyId);
69
73
  }
70
74
  return query.execute();
71
75
  }
72
- async function updateViewStatus(db, name, status, lastProcessedBlock) {
73
- await db.updateTable("views").set({
76
+ async function updateSubgraphStatus(db, name, status, lastProcessedBlock) {
77
+ await db.updateTable("subgraphs").set({
74
78
  status,
75
79
  ...lastProcessedBlock !== undefined ? { last_processed_block: lastProcessedBlock } : {},
76
80
  updated_at: new Date
77
81
  }).where("name", "=", name).execute();
78
82
  }
79
- async function recordViewProcessed(db, name, processed, errors, lastError) {
80
- await db.updateTable("views").set({
83
+ async function recordSubgraphProcessed(db, name, processed, errors, lastError) {
84
+ await db.updateTable("subgraphs").set({
81
85
  total_processed: sql2`total_processed + ${processed}`,
82
86
  total_errors: sql2`total_errors + ${errors}`,
83
87
  ...lastError ? { last_error: lastError, last_error_at: new Date } : {},
84
88
  updated_at: new Date
85
89
  }).where("name", "=", name).execute();
86
90
  }
87
- async function updateViewHandlerPath(db, name, handlerPath) {
88
- await db.updateTable("views").set({ handler_path: handlerPath, updated_at: new Date }).where("name", "=", name).execute();
91
+ async function updateSubgraphHandlerPath(db, name, handlerPath) {
92
+ await db.updateTable("subgraphs").set({ handler_path: handlerPath, updated_at: new Date }).where("name", "=", name).execute();
89
93
  }
90
- async function deleteView(db, name, apiKeyId) {
91
- const view = await getView(db, name, apiKeyId);
92
- if (!view)
94
+ async function deleteSubgraph(db, name, apiKeyId) {
95
+ const subgraph = await getSubgraph(db, name, apiKeyId);
96
+ if (!subgraph)
93
97
  return null;
94
- const schemaName = view.schema_name ?? pgSchemaName(name);
98
+ const schemaName = subgraph.schema_name ?? pgSchemaName(name);
95
99
  await sql2`DROP SCHEMA IF EXISTS ${sql2.raw(`"${schemaName}"`)} CASCADE`.execute(db);
96
- await db.deleteFrom("views").where("id", "=", view.id).execute();
97
- return view;
100
+ await db.deleteFrom("subgraphs").where("id", "=", subgraph.id).execute();
101
+ return subgraph;
98
102
  }
99
103
  export {
100
- updateViewStatus,
101
- updateViewHandlerPath,
102
- registerView,
103
- recordViewProcessed,
104
+ updateSubgraphStatus,
105
+ updateSubgraphHandlerPath,
106
+ registerSubgraph,
107
+ recordSubgraphProcessed,
104
108
  pgSchemaName,
105
- listViews,
106
- getView,
107
- deleteView
109
+ listSubgraphs,
110
+ getSubgraph,
111
+ deleteSubgraph
108
112
  };
109
113
 
110
- //# debugId=C19949368802BB4964756E2164756E21
111
- //# sourceMappingURL=views.js.map
114
+ //# debugId=A3A252C7C09E8C5564756E2164756E21
115
+ //# sourceMappingURL=subgraphs.js.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/db/jsonb.ts", "../src/db/queries/subgraphs.ts"],
4
+ "sourcesContent": [
5
+ "import { sql, type RawBuilder } from \"kysely\";\n\n/**\n * Safely encode a JS value as a JSONB literal for Kysely inserts/updates.\n * Kysely + postgres.js double-encodes JSON when using parameterized queries\n * with ::jsonb casts. This uses sql.raw to inline a properly escaped literal.\n */\nexport function jsonb(value: unknown): RawBuilder<unknown> {\n const escaped = JSON.stringify(value).replace(/'/g, \"''\");\n return sql`${sql.raw(`'${escaped}'::jsonb`)}`;\n}\n\n/**\n * Safely parse a JSONB value from the database.\n * Handles double-encoded strings where postgres.js returns a JSON string\n * instead of a parsed object.\n */\nexport function parseJsonb<T = unknown>(value: unknown): T {\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value) as T;\n } catch {\n return value as T;\n }\n }\n return (value ?? {}) as T;\n}\n",
6
+ "import { sql, type Kysely } from \"kysely\";\nimport { jsonb } from \"../jsonb.ts\";\nimport type { Database, Subgraph } from \"../types.ts\";\n\n/**\n * Convert a subgraph name to its PostgreSQL schema name.\n * With keyPrefix: \"subgraph_{prefix}_{name}\" (tenant-isolated)\n * Without keyPrefix: \"subgraph_{name}\" (backward compat)\n */\nexport function pgSchemaName(subgraphName: string, keyPrefix?: string): string {\n const safeName = subgraphName.replace(/-/g, \"_\");\n if (!keyPrefix) {\n return `subgraph_${safeName}`;\n }\n const safePrefix = keyPrefix.replace(/^sk-sl_/, \"\").replace(/-/g, \"_\");\n return `subgraph_${safePrefix}_${safeName}`;\n}\n\nexport async function registerSubgraph(\n db: Kysely<Database>,\n data: {\n name: string;\n version: string;\n definition: Record<string, unknown>;\n schemaHash: string;\n handlerPath: string;\n apiKeyId?: string;\n schemaName?: string;\n },\n): Promise<Subgraph> {\n return await db\n .insertInto(\"subgraphs\")\n .values({\n name: data.name,\n version: data.version,\n definition: jsonb(data.definition) as any,\n schema_hash: data.schemaHash,\n handler_path: data.handlerPath,\n api_key_id: data.apiKeyId ?? null,\n schema_name: data.schemaName ?? null,\n })\n .onConflict((oc) =>\n oc.columns([\"name\", \"api_key_id\"]).doUpdateSet({\n version: data.version,\n definition: jsonb(data.definition) as any,\n schema_hash: data.schemaHash,\n handler_path: data.handlerPath,\n schema_name: data.schemaName ?? null,\n updated_at: new Date(),\n }),\n )\n .returningAll()\n .executeTakeFirstOrThrow();\n}\n\nexport async function getSubgraph(db: Kysely<Database>, name: string, apiKeyId?: string): Promise<Subgraph | null> {\n let query = db\n .selectFrom(\"subgraphs\")\n .selectAll()\n .where(\"name\", \"=\", name);\n\n if (apiKeyId) {\n query = query.where(\"api_key_id\", \"=\", apiKeyId);\n }\n\n return (await query.executeTakeFirst()) ?? null;\n}\n\nexport async function listSubgraphs(db: Kysely<Database>, apiKeyId?: string): Promise<Subgraph[]> {\n let query = db.selectFrom(\"subgraphs\").selectAll();\n if (apiKeyId) {\n query = query.where(\"api_key_id\", \"=\", apiKeyId);\n }\n return query.execute();\n}\n\nexport async function updateSubgraphStatus(\n db: Kysely<Database>,\n name: string,\n status: string,\n lastProcessedBlock?: number,\n): Promise<void> {\n await db\n .updateTable(\"subgraphs\")\n .set({\n status,\n ...(lastProcessedBlock !== undefined ? { last_processed_block: lastProcessedBlock } : {}),\n updated_at: new Date(),\n })\n .where(\"name\", \"=\", name)\n .execute();\n}\n\nexport async function recordSubgraphProcessed(\n db: Kysely<Database>,\n name: string,\n processed: number,\n errors: number,\n lastError?: string,\n): Promise<void> {\n await db\n .updateTable(\"subgraphs\")\n .set({\n total_processed: sql`total_processed + ${processed}`,\n total_errors: sql`total_errors + ${errors}`,\n ...(lastError\n ? { last_error: lastError, last_error_at: new Date() }\n : {}),\n updated_at: new Date(),\n })\n .where(\"name\", \"=\", name)\n .execute();\n}\n\nexport async function updateSubgraphHandlerPath(\n db: Kysely<Database>,\n name: string,\n handlerPath: string,\n): Promise<void> {\n await db\n .updateTable(\"subgraphs\")\n .set({ handler_path: handlerPath, updated_at: new Date() })\n .where(\"name\", \"=\", name)\n .execute();\n}\n\nexport async function deleteSubgraph(db: Kysely<Database>, name: string, apiKeyId?: string): Promise<Subgraph | null> {\n const subgraph = await getSubgraph(db, name, apiKeyId);\n if (!subgraph) return null;\n\n // Use stored schema_name if available, otherwise compute\n const schemaName = subgraph.schema_name ?? pgSchemaName(name);\n\n // Drop the subgraph's schema (CASCADE drops all tables within)\n await sql`DROP SCHEMA IF EXISTS ${sql.raw(`\"${schemaName}\"`)} CASCADE`.execute(db);\n\n // Remove from registry\n await db.deleteFrom(\"subgraphs\").where(\"id\", \"=\", subgraph.id).execute();\n\n return subgraph;\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "A3A252C7C09E8C5564756E2164756E21",
10
+ "names": []
11
+ }
@@ -1,6 +1,6 @@
1
1
  interface PlanLimits {
2
2
  streams: number;
3
- views: number;
3
+ subgraphs: number;
4
4
  apiRequestsPerDay: number;
5
5
  deliveriesPerMonth: number;
6
6
  storageBytes: number;
@@ -91,7 +91,7 @@ interface DeliveriesTable {
91
91
  payload: unknown;
92
92
  created_at: Generated<Date>;
93
93
  }
94
- interface ViewsTable {
94
+ interface SubgraphsTable {
95
95
  id: Generated<string>;
96
96
  name: string;
97
97
  version: Generated<string>;
@@ -159,6 +159,71 @@ interface UsageSnapshotsTable {
159
159
  measured_at: Generated<Date>;
160
160
  storage_bytes: Generated<number>;
161
161
  }
162
+ interface WaitlistTable {
163
+ id: Generated<string>;
164
+ email: string;
165
+ source: Generated<string>;
166
+ status: Generated<string>;
167
+ created_at: Generated<Date>;
168
+ }
169
+ interface AccountInsightsTable {
170
+ id: Generated<string>;
171
+ account_id: string;
172
+ category: string;
173
+ insight_type: string;
174
+ resource_id: string | null;
175
+ severity: string;
176
+ title: string;
177
+ body: string;
178
+ data: unknown;
179
+ dismissed_at: Date | null;
180
+ expires_at: Date | null;
181
+ created_at: Generated<Date>;
182
+ }
183
+ interface AccountAgentRunsTable {
184
+ id: Generated<string>;
185
+ account_id: string;
186
+ started_at: Generated<Date>;
187
+ completed_at: Date | null;
188
+ status: Generated<string>;
189
+ input_tokens: Generated<number>;
190
+ output_tokens: Generated<number>;
191
+ cost_usd: Generated<number>;
192
+ insights_created: Generated<number>;
193
+ error: string | null;
194
+ }
195
+ interface SubgraphProcessingStatsTable {
196
+ id: Generated<string>;
197
+ subgraph_name: string;
198
+ api_key_id: string | null;
199
+ bucket_start: Date | null;
200
+ bucket_end: Date | null;
201
+ blocks_processed: number | null;
202
+ total_time_ms: number | null;
203
+ handler_time_ms: number | null;
204
+ flush_time_ms: number | null;
205
+ max_block_time_ms: number | null;
206
+ max_handler_time_ms: number | null;
207
+ avg_ops_per_block: number | null;
208
+ is_catchup: Generated<boolean>;
209
+ created_at: Generated<Date>;
210
+ }
211
+ interface SubgraphTableSnapshotsTable {
212
+ id: Generated<string>;
213
+ subgraph_name: string;
214
+ api_key_id: string | null;
215
+ table_name: string;
216
+ row_count: number | null;
217
+ created_at: Generated<Date>;
218
+ }
219
+ interface SubgraphHealthSnapshotsTable {
220
+ id: Generated<string>;
221
+ subgraph_id: string;
222
+ total_processed: number;
223
+ total_errors: number;
224
+ last_processed_block: number | null;
225
+ captured_at: Generated<Date>;
226
+ }
162
227
  interface Database {
163
228
  blocks: BlocksTable;
164
229
  transactions: TransactionsTable;
@@ -168,13 +233,19 @@ interface Database {
168
233
  jobs: JobsTable;
169
234
  index_progress: IndexProgressTable;
170
235
  deliveries: DeliveriesTable;
171
- views: ViewsTable;
236
+ subgraphs: SubgraphsTable;
172
237
  api_keys: ApiKeysTable;
173
238
  accounts: AccountsTable;
174
239
  sessions: SessionsTable;
175
240
  magic_links: MagicLinksTable;
176
241
  usage_daily: UsageDailyTable;
177
242
  usage_snapshots: UsageSnapshotsTable;
243
+ waitlist: WaitlistTable;
244
+ account_insights: AccountInsightsTable;
245
+ account_agent_runs: AccountAgentRunsTable;
246
+ subgraph_health_snapshots: SubgraphHealthSnapshotsTable;
247
+ subgraph_processing_stats: SubgraphProcessingStatsTable;
248
+ subgraph_table_snapshots: SubgraphTableSnapshotsTable;
178
249
  }
179
250
  /** Increment API request counter for today. Fire-and-forget safe. */
180
251
  declare function incrementApiRequests(db: Kysely<Database>, accountId: string): Promise<void>;
@@ -192,7 +263,7 @@ interface LimitCheck {
192
263
  limits: ReturnType<typeof getPlanLimits>;
193
264
  current: UsageSummary & {
194
265
  streams: number
195
- views: number
266
+ subgraphs: number
196
267
  };
197
268
  exceeded?: string;
198
269
  }
@@ -200,7 +271,7 @@ interface LimitCheck {
200
271
  declare function checkLimits(db: Kysely<Database>, accountId: string, plan: string): Promise<LimitCheck>;
201
272
  /**
202
273
  * Measure storage for all accounts by querying pg_total_relation_size
203
- * for each tenant's view schemas.
274
+ * for each tenant's subgraph schemas.
204
275
  */
205
276
  declare function measureStorage(db: Kysely<Database>): Promise<void>;
206
277
  export { measureStorage, incrementDeliveries, incrementApiRequests, getUsage, checkLimits, UsageSummary, LimitCheck };
@@ -1,19 +1,23 @@
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/lib/plans.ts
14
18
  var FREE_PLAN = {
15
19
  streams: 3,
16
- views: 2,
20
+ subgraphs: 2,
17
21
  apiRequestsPerDay: 1000,
18
22
  deliveriesPerMonth: 5000,
19
23
  storageBytes: 100 * 1024 * 1024
@@ -56,17 +60,17 @@ async function checkLimits(db, accountId, plan) {
56
60
  const limits = getPlanLimits(plan);
57
61
  const usage = await getUsage(db, accountId);
58
62
  const streamCount = await db.selectFrom("streams").innerJoin("api_keys", "streams.api_key_id", "api_keys.id").select(sql`count(*)`.as("count")).where("api_keys.account_id", "=", accountId).executeTakeFirst();
59
- const viewCount = await db.selectFrom("views").innerJoin("api_keys", "views.api_key_id", "api_keys.id").select(sql`count(*)`.as("count")).where("api_keys.account_id", "=", accountId).executeTakeFirst();
63
+ const subgraphCount = await db.selectFrom("subgraphs").innerJoin("api_keys", "subgraphs.api_key_id", "api_keys.id").select(sql`count(*)`.as("count")).where("api_keys.account_id", "=", accountId).executeTakeFirst();
60
64
  const current = {
61
65
  ...usage,
62
66
  streams: Number(streamCount?.count ?? 0),
63
- views: Number(viewCount?.count ?? 0)
67
+ subgraphs: Number(subgraphCount?.count ?? 0)
64
68
  };
65
69
  if (current.streams >= limits.streams) {
66
70
  return { allowed: false, limits, current, exceeded: "streams" };
67
71
  }
68
- if (current.views >= limits.views) {
69
- return { allowed: false, limits, current, exceeded: "views" };
72
+ if (current.subgraphs >= limits.subgraphs) {
73
+ return { allowed: false, limits, current, exceeded: "subgraphs" };
70
74
  }
71
75
  if (current.apiRequestsToday >= limits.apiRequestsPerDay) {
72
76
  return { allowed: false, limits, current, exceeded: "api_requests" };
@@ -80,9 +84,9 @@ async function checkLimits(db, accountId, plan) {
80
84
  return { allowed: true, limits, current };
81
85
  }
82
86
  async function measureStorage(db) {
83
- const accountViews = await db.selectFrom("views").innerJoin("api_keys", "views.api_key_id", "api_keys.id").select(["api_keys.account_id", "views.schema_name"]).where("views.schema_name", "is not", null).execute();
87
+ const accountSubgraphs = await db.selectFrom("subgraphs").innerJoin("api_keys", "subgraphs.api_key_id", "api_keys.id").select(["api_keys.account_id", "subgraphs.schema_name"]).where("subgraphs.schema_name", "is not", null).execute();
84
88
  const byAccount = new Map;
85
- for (const row of accountViews) {
89
+ for (const row of accountSubgraphs) {
86
90
  const schemas = byAccount.get(row.account_id) ?? [];
87
91
  if (row.schema_name)
88
92
  schemas.push(row.schema_name);
@@ -113,5 +117,5 @@ export {
113
117
  checkLimits
114
118
  };
115
119
 
116
- //# debugId=51CB827BBF658C6C64756E2164756E21
120
+ //# debugId=31E68DFE6E6CCA6264756E2164756E21
117
121
  //# sourceMappingURL=usage.js.map