@secondlayer/shared 0.10.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/db/index.d.ts +179 -2
- package/dist/src/db/queries/accounts.d.ts +156 -2
- package/dist/src/db/queries/accounts.js +17 -1
- package/dist/src/db/queries/accounts.js.map +3 -3
- package/dist/src/db/queries/integrity.d.ts +149 -1
- package/dist/src/db/queries/marketplace.d.ts +463 -0
- package/dist/src/db/queries/marketplace.js +142 -0
- package/dist/src/db/queries/marketplace.js.map +10 -0
- package/dist/src/db/queries/metrics.d.ts +149 -1
- package/dist/src/db/queries/projects.d.ts +423 -0
- package/dist/src/db/queries/projects.js +47 -0
- package/dist/src/db/queries/projects.js.map +10 -0
- package/dist/src/db/queries/subgraph-gaps.d.ts +149 -1
- package/dist/src/db/queries/subgraphs.d.ts +156 -6
- package/dist/src/db/queries/subgraphs.js +16 -13
- package/dist/src/db/queries/subgraphs.js.map +3 -3
- package/dist/src/db/queries/usage.d.ts +149 -1
- package/dist/src/db/queries/workflows.d.ts +439 -0
- package/dist/src/db/queries/workflows.js +115 -0
- package/dist/src/db/queries/workflows.js.map +11 -0
- package/dist/src/db/schema.d.ts +179 -2
- package/dist/src/index.d.ts +249 -10
- package/dist/src/index.js +91 -72
- package/dist/src/index.js.map +4 -3
- package/dist/src/node/local-client.d.ts +149 -1
- package/dist/src/schemas/index.d.ts +71 -9
- package/dist/src/schemas/index.js +93 -74
- package/dist/src/schemas/index.js.map +4 -3
- package/dist/src/schemas/marketplace.d.ts +63 -0
- package/dist/src/schemas/marketplace.js +39 -0
- package/dist/src/schemas/marketplace.js.map +10 -0
- package/dist/src/schemas/workflows.d.ts +66 -0
- package/dist/src/schemas/workflows.js +39 -0
- package/dist/src/schemas/workflows.js.map +10 -0
- package/dist/src/types.d.ts +1 -0
- package/migrations/0022_marketplace.ts +88 -0
- package/migrations/0023_projects.ts +149 -0
- package/migrations/0024_chat_sessions.ts +51 -0
- package/migrations/0025_chat_session_summary.ts +15 -0
- package/migrations/0026_workflows.ts +204 -0
- package/migrations/0027_workflow_cursors.ts +16 -0
- package/migrations/0028_subgraph_account_scoping.ts +116 -0
- package/package.json +22 -2
|
@@ -41,6 +41,7 @@ interface StreamsTable {
|
|
|
41
41
|
endpoint_url: string;
|
|
42
42
|
signing_secret: string | null;
|
|
43
43
|
api_key_id: string;
|
|
44
|
+
project_id: string | null;
|
|
44
45
|
created_at: Generated<Date>;
|
|
45
46
|
updated_at: Generated<Date>;
|
|
46
47
|
}
|
|
@@ -102,7 +103,13 @@ interface SubgraphsTable {
|
|
|
102
103
|
last_error_at: Date | null;
|
|
103
104
|
total_processed: Generated<number>;
|
|
104
105
|
total_errors: Generated<number>;
|
|
105
|
-
api_key_id: string;
|
|
106
|
+
api_key_id: string | null;
|
|
107
|
+
account_id: string;
|
|
108
|
+
project_id: string | null;
|
|
109
|
+
is_public: Generated<boolean>;
|
|
110
|
+
tags: Generated<string[]>;
|
|
111
|
+
description: string | null;
|
|
112
|
+
forked_from_id: string | null;
|
|
106
113
|
created_at: Generated<Date>;
|
|
107
114
|
updated_at: Generated<Date>;
|
|
108
115
|
}
|
|
@@ -133,6 +140,10 @@ interface AccountsTable {
|
|
|
133
140
|
id: Generated<string>;
|
|
134
141
|
email: string;
|
|
135
142
|
plan: Generated<string>;
|
|
143
|
+
display_name: string | null;
|
|
144
|
+
bio: string | null;
|
|
145
|
+
avatar_url: string | null;
|
|
146
|
+
slug: string | null;
|
|
136
147
|
created_at: Generated<Date>;
|
|
137
148
|
}
|
|
138
149
|
interface SessionsTable {
|
|
@@ -233,6 +244,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
233
244
|
last_processed_block: number | null;
|
|
234
245
|
captured_at: Generated<Date>;
|
|
235
246
|
}
|
|
247
|
+
interface SubgraphUsageDailyTable {
|
|
248
|
+
subgraph_id: string;
|
|
249
|
+
date: string;
|
|
250
|
+
query_count: Generated<number>;
|
|
251
|
+
}
|
|
252
|
+
interface ProjectsTable {
|
|
253
|
+
id: Generated<string>;
|
|
254
|
+
name: string;
|
|
255
|
+
slug: string;
|
|
256
|
+
account_id: string;
|
|
257
|
+
settings: Generated<Record<string, unknown>>;
|
|
258
|
+
network: Generated<string>;
|
|
259
|
+
node_rpc: string | null;
|
|
260
|
+
created_at: Generated<Date>;
|
|
261
|
+
updated_at: Generated<Date>;
|
|
262
|
+
}
|
|
263
|
+
interface TeamMembersTable {
|
|
264
|
+
id: Generated<string>;
|
|
265
|
+
project_id: string;
|
|
266
|
+
account_id: string;
|
|
267
|
+
role: Generated<string>;
|
|
268
|
+
invited_by: string | null;
|
|
269
|
+
created_at: Generated<Date>;
|
|
270
|
+
}
|
|
271
|
+
interface TeamInvitationsTable {
|
|
272
|
+
id: Generated<string>;
|
|
273
|
+
project_id: string;
|
|
274
|
+
email: string;
|
|
275
|
+
role: Generated<string>;
|
|
276
|
+
token: string;
|
|
277
|
+
invited_by: string | null;
|
|
278
|
+
expires_at: Date;
|
|
279
|
+
accepted_at: Date | null;
|
|
280
|
+
created_at: Generated<Date>;
|
|
281
|
+
}
|
|
282
|
+
interface ChatSessionsTable {
|
|
283
|
+
id: Generated<string>;
|
|
284
|
+
account_id: string;
|
|
285
|
+
title: string | null;
|
|
286
|
+
summary: unknown | null;
|
|
287
|
+
created_at: Generated<Date>;
|
|
288
|
+
updated_at: Generated<Date>;
|
|
289
|
+
}
|
|
290
|
+
interface ChatMessagesTable {
|
|
291
|
+
id: Generated<string>;
|
|
292
|
+
chat_session_id: string;
|
|
293
|
+
role: string;
|
|
294
|
+
parts: unknown;
|
|
295
|
+
metadata: unknown | null;
|
|
296
|
+
created_at: Generated<Date>;
|
|
297
|
+
}
|
|
298
|
+
interface WorkflowDefinitionsTable {
|
|
299
|
+
id: Generated<string>;
|
|
300
|
+
name: string;
|
|
301
|
+
version: Generated<string>;
|
|
302
|
+
status: Generated<string>;
|
|
303
|
+
trigger_type: string;
|
|
304
|
+
trigger_config: unknown;
|
|
305
|
+
handler_path: string;
|
|
306
|
+
retries_config: unknown | null;
|
|
307
|
+
timeout_ms: number | null;
|
|
308
|
+
api_key_id: string;
|
|
309
|
+
project_id: string | null;
|
|
310
|
+
created_at: Generated<Date>;
|
|
311
|
+
updated_at: Generated<Date>;
|
|
312
|
+
}
|
|
313
|
+
interface WorkflowRunsTable {
|
|
314
|
+
id: Generated<string>;
|
|
315
|
+
definition_id: string;
|
|
316
|
+
status: Generated<string>;
|
|
317
|
+
trigger_type: string;
|
|
318
|
+
trigger_data: unknown | null;
|
|
319
|
+
dedup_key: string | null;
|
|
320
|
+
error: string | null;
|
|
321
|
+
started_at: Date | null;
|
|
322
|
+
completed_at: Date | null;
|
|
323
|
+
duration_ms: number | null;
|
|
324
|
+
total_ai_tokens: Generated<number>;
|
|
325
|
+
created_at: Generated<Date>;
|
|
326
|
+
}
|
|
327
|
+
interface WorkflowStepsTable {
|
|
328
|
+
id: Generated<string>;
|
|
329
|
+
run_id: string;
|
|
330
|
+
step_index: number;
|
|
331
|
+
step_id: string;
|
|
332
|
+
step_type: string;
|
|
333
|
+
status: Generated<string>;
|
|
334
|
+
input: unknown | null;
|
|
335
|
+
output: unknown | null;
|
|
336
|
+
error: string | null;
|
|
337
|
+
retry_count: Generated<number>;
|
|
338
|
+
ai_tokens_used: Generated<number>;
|
|
339
|
+
started_at: Date | null;
|
|
340
|
+
completed_at: Date | null;
|
|
341
|
+
duration_ms: number | null;
|
|
342
|
+
created_at: Generated<Date>;
|
|
343
|
+
}
|
|
344
|
+
interface WorkflowQueueTable {
|
|
345
|
+
id: Generated<string>;
|
|
346
|
+
run_id: string;
|
|
347
|
+
status: Generated<string>;
|
|
348
|
+
attempts: Generated<number>;
|
|
349
|
+
max_attempts: Generated<number>;
|
|
350
|
+
scheduled_for: Generated<Date>;
|
|
351
|
+
locked_at: Date | null;
|
|
352
|
+
locked_by: string | null;
|
|
353
|
+
error: string | null;
|
|
354
|
+
created_at: Generated<Date>;
|
|
355
|
+
completed_at: Date | null;
|
|
356
|
+
}
|
|
357
|
+
interface WorkflowSchedulesTable {
|
|
358
|
+
id: Generated<string>;
|
|
359
|
+
definition_id: string;
|
|
360
|
+
cron_expr: string;
|
|
361
|
+
timezone: Generated<string>;
|
|
362
|
+
next_run_at: Date;
|
|
363
|
+
last_run_at: Date | null;
|
|
364
|
+
enabled: Generated<boolean>;
|
|
365
|
+
created_at: Generated<Date>;
|
|
366
|
+
}
|
|
367
|
+
interface WorkflowCursorsTable {
|
|
368
|
+
name: string;
|
|
369
|
+
block_height: Generated<number>;
|
|
370
|
+
updated_at: Generated<Date>;
|
|
371
|
+
}
|
|
236
372
|
interface Database {
|
|
237
373
|
blocks: BlocksTable;
|
|
238
374
|
transactions: TransactionsTable;
|
|
@@ -256,6 +392,18 @@ interface Database {
|
|
|
256
392
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
257
393
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
258
394
|
subgraph_gaps: SubgraphGapsTable;
|
|
395
|
+
subgraph_usage_daily: SubgraphUsageDailyTable;
|
|
396
|
+
projects: ProjectsTable;
|
|
397
|
+
team_members: TeamMembersTable;
|
|
398
|
+
team_invitations: TeamInvitationsTable;
|
|
399
|
+
chat_sessions: ChatSessionsTable;
|
|
400
|
+
chat_messages: ChatMessagesTable;
|
|
401
|
+
workflow_definitions: WorkflowDefinitionsTable;
|
|
402
|
+
workflow_runs: WorkflowRunsTable;
|
|
403
|
+
workflow_steps: WorkflowStepsTable;
|
|
404
|
+
workflow_queue: WorkflowQueueTable;
|
|
405
|
+
workflow_schedules: WorkflowSchedulesTable;
|
|
406
|
+
workflow_cursors: WorkflowCursorsTable;
|
|
259
407
|
}
|
|
260
408
|
interface GapRange {
|
|
261
409
|
start: number;
|
|
@@ -41,6 +41,7 @@ interface StreamsTable {
|
|
|
41
41
|
endpoint_url: string;
|
|
42
42
|
signing_secret: string | null;
|
|
43
43
|
api_key_id: string;
|
|
44
|
+
project_id: string | null;
|
|
44
45
|
created_at: Generated<Date>;
|
|
45
46
|
updated_at: Generated<Date>;
|
|
46
47
|
}
|
|
@@ -102,7 +103,13 @@ interface SubgraphsTable {
|
|
|
102
103
|
last_error_at: Date | null;
|
|
103
104
|
total_processed: Generated<number>;
|
|
104
105
|
total_errors: Generated<number>;
|
|
105
|
-
api_key_id: string;
|
|
106
|
+
api_key_id: string | null;
|
|
107
|
+
account_id: string;
|
|
108
|
+
project_id: string | null;
|
|
109
|
+
is_public: Generated<boolean>;
|
|
110
|
+
tags: Generated<string[]>;
|
|
111
|
+
description: string | null;
|
|
112
|
+
forked_from_id: string | null;
|
|
106
113
|
created_at: Generated<Date>;
|
|
107
114
|
updated_at: Generated<Date>;
|
|
108
115
|
}
|
|
@@ -133,6 +140,10 @@ interface AccountsTable {
|
|
|
133
140
|
id: Generated<string>;
|
|
134
141
|
email: string;
|
|
135
142
|
plan: Generated<string>;
|
|
143
|
+
display_name: string | null;
|
|
144
|
+
bio: string | null;
|
|
145
|
+
avatar_url: string | null;
|
|
146
|
+
slug: string | null;
|
|
136
147
|
created_at: Generated<Date>;
|
|
137
148
|
}
|
|
138
149
|
interface SessionsTable {
|
|
@@ -233,6 +244,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
233
244
|
last_processed_block: number | null;
|
|
234
245
|
captured_at: Generated<Date>;
|
|
235
246
|
}
|
|
247
|
+
interface SubgraphUsageDailyTable {
|
|
248
|
+
subgraph_id: string;
|
|
249
|
+
date: string;
|
|
250
|
+
query_count: Generated<number>;
|
|
251
|
+
}
|
|
252
|
+
interface ProjectsTable {
|
|
253
|
+
id: Generated<string>;
|
|
254
|
+
name: string;
|
|
255
|
+
slug: string;
|
|
256
|
+
account_id: string;
|
|
257
|
+
settings: Generated<Record<string, unknown>>;
|
|
258
|
+
network: Generated<string>;
|
|
259
|
+
node_rpc: string | null;
|
|
260
|
+
created_at: Generated<Date>;
|
|
261
|
+
updated_at: Generated<Date>;
|
|
262
|
+
}
|
|
263
|
+
interface TeamMembersTable {
|
|
264
|
+
id: Generated<string>;
|
|
265
|
+
project_id: string;
|
|
266
|
+
account_id: string;
|
|
267
|
+
role: Generated<string>;
|
|
268
|
+
invited_by: string | null;
|
|
269
|
+
created_at: Generated<Date>;
|
|
270
|
+
}
|
|
271
|
+
interface TeamInvitationsTable {
|
|
272
|
+
id: Generated<string>;
|
|
273
|
+
project_id: string;
|
|
274
|
+
email: string;
|
|
275
|
+
role: Generated<string>;
|
|
276
|
+
token: string;
|
|
277
|
+
invited_by: string | null;
|
|
278
|
+
expires_at: Date;
|
|
279
|
+
accepted_at: Date | null;
|
|
280
|
+
created_at: Generated<Date>;
|
|
281
|
+
}
|
|
282
|
+
interface ChatSessionsTable {
|
|
283
|
+
id: Generated<string>;
|
|
284
|
+
account_id: string;
|
|
285
|
+
title: string | null;
|
|
286
|
+
summary: unknown | null;
|
|
287
|
+
created_at: Generated<Date>;
|
|
288
|
+
updated_at: Generated<Date>;
|
|
289
|
+
}
|
|
290
|
+
interface ChatMessagesTable {
|
|
291
|
+
id: Generated<string>;
|
|
292
|
+
chat_session_id: string;
|
|
293
|
+
role: string;
|
|
294
|
+
parts: unknown;
|
|
295
|
+
metadata: unknown | null;
|
|
296
|
+
created_at: Generated<Date>;
|
|
297
|
+
}
|
|
298
|
+
interface WorkflowDefinitionsTable {
|
|
299
|
+
id: Generated<string>;
|
|
300
|
+
name: string;
|
|
301
|
+
version: Generated<string>;
|
|
302
|
+
status: Generated<string>;
|
|
303
|
+
trigger_type: string;
|
|
304
|
+
trigger_config: unknown;
|
|
305
|
+
handler_path: string;
|
|
306
|
+
retries_config: unknown | null;
|
|
307
|
+
timeout_ms: number | null;
|
|
308
|
+
api_key_id: string;
|
|
309
|
+
project_id: string | null;
|
|
310
|
+
created_at: Generated<Date>;
|
|
311
|
+
updated_at: Generated<Date>;
|
|
312
|
+
}
|
|
313
|
+
interface WorkflowRunsTable {
|
|
314
|
+
id: Generated<string>;
|
|
315
|
+
definition_id: string;
|
|
316
|
+
status: Generated<string>;
|
|
317
|
+
trigger_type: string;
|
|
318
|
+
trigger_data: unknown | null;
|
|
319
|
+
dedup_key: string | null;
|
|
320
|
+
error: string | null;
|
|
321
|
+
started_at: Date | null;
|
|
322
|
+
completed_at: Date | null;
|
|
323
|
+
duration_ms: number | null;
|
|
324
|
+
total_ai_tokens: Generated<number>;
|
|
325
|
+
created_at: Generated<Date>;
|
|
326
|
+
}
|
|
327
|
+
interface WorkflowStepsTable {
|
|
328
|
+
id: Generated<string>;
|
|
329
|
+
run_id: string;
|
|
330
|
+
step_index: number;
|
|
331
|
+
step_id: string;
|
|
332
|
+
step_type: string;
|
|
333
|
+
status: Generated<string>;
|
|
334
|
+
input: unknown | null;
|
|
335
|
+
output: unknown | null;
|
|
336
|
+
error: string | null;
|
|
337
|
+
retry_count: Generated<number>;
|
|
338
|
+
ai_tokens_used: Generated<number>;
|
|
339
|
+
started_at: Date | null;
|
|
340
|
+
completed_at: Date | null;
|
|
341
|
+
duration_ms: number | null;
|
|
342
|
+
created_at: Generated<Date>;
|
|
343
|
+
}
|
|
344
|
+
interface WorkflowQueueTable {
|
|
345
|
+
id: Generated<string>;
|
|
346
|
+
run_id: string;
|
|
347
|
+
status: Generated<string>;
|
|
348
|
+
attempts: Generated<number>;
|
|
349
|
+
max_attempts: Generated<number>;
|
|
350
|
+
scheduled_for: Generated<Date>;
|
|
351
|
+
locked_at: Date | null;
|
|
352
|
+
locked_by: string | null;
|
|
353
|
+
error: string | null;
|
|
354
|
+
created_at: Generated<Date>;
|
|
355
|
+
completed_at: Date | null;
|
|
356
|
+
}
|
|
357
|
+
interface WorkflowSchedulesTable {
|
|
358
|
+
id: Generated<string>;
|
|
359
|
+
definition_id: string;
|
|
360
|
+
cron_expr: string;
|
|
361
|
+
timezone: Generated<string>;
|
|
362
|
+
next_run_at: Date;
|
|
363
|
+
last_run_at: Date | null;
|
|
364
|
+
enabled: Generated<boolean>;
|
|
365
|
+
created_at: Generated<Date>;
|
|
366
|
+
}
|
|
367
|
+
interface WorkflowCursorsTable {
|
|
368
|
+
name: string;
|
|
369
|
+
block_height: Generated<number>;
|
|
370
|
+
updated_at: Generated<Date>;
|
|
371
|
+
}
|
|
236
372
|
interface Database {
|
|
237
373
|
blocks: BlocksTable;
|
|
238
374
|
transactions: TransactionsTable;
|
|
@@ -256,14 +392,26 @@ interface Database {
|
|
|
256
392
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
257
393
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
258
394
|
subgraph_gaps: SubgraphGapsTable;
|
|
395
|
+
subgraph_usage_daily: SubgraphUsageDailyTable;
|
|
396
|
+
projects: ProjectsTable;
|
|
397
|
+
team_members: TeamMembersTable;
|
|
398
|
+
team_invitations: TeamInvitationsTable;
|
|
399
|
+
chat_sessions: ChatSessionsTable;
|
|
400
|
+
chat_messages: ChatMessagesTable;
|
|
401
|
+
workflow_definitions: WorkflowDefinitionsTable;
|
|
402
|
+
workflow_runs: WorkflowRunsTable;
|
|
403
|
+
workflow_steps: WorkflowStepsTable;
|
|
404
|
+
workflow_queue: WorkflowQueueTable;
|
|
405
|
+
workflow_schedules: WorkflowSchedulesTable;
|
|
406
|
+
workflow_cursors: WorkflowCursorsTable;
|
|
259
407
|
}
|
|
260
408
|
type Subgraph = Selectable<SubgraphsTable>;
|
|
261
409
|
/**
|
|
262
410
|
* Convert a subgraph name to its PostgreSQL schema name.
|
|
263
|
-
* With
|
|
264
|
-
* Without
|
|
411
|
+
* With accountPrefix (first 8 chars of account_id): "subgraph_{prefix}_{name}"
|
|
412
|
+
* Without prefix: "subgraph_{name}" (backward compat / local dev)
|
|
265
413
|
*/
|
|
266
|
-
declare function pgSchemaName(subgraphName: string,
|
|
414
|
+
declare function pgSchemaName(subgraphName: string, accountPrefix?: string): string;
|
|
267
415
|
declare function registerSubgraph(db: Kysely<Database>, data: {
|
|
268
416
|
name: string
|
|
269
417
|
version: string
|
|
@@ -271,11 +419,13 @@ declare function registerSubgraph(db: Kysely<Database>, data: {
|
|
|
271
419
|
schemaHash: string
|
|
272
420
|
handlerPath: string
|
|
273
421
|
apiKeyId?: string
|
|
422
|
+
accountId?: string
|
|
274
423
|
schemaName?: string
|
|
275
424
|
startBlock?: number
|
|
425
|
+
forkedFromId?: string
|
|
276
426
|
}): Promise<Subgraph>;
|
|
277
|
-
declare function getSubgraph(db: Kysely<Database>, name: string,
|
|
278
|
-
declare function listSubgraphs(db: Kysely<Database>,
|
|
427
|
+
declare function getSubgraph(db: Kysely<Database>, name: string, accountId?: string): Promise<Subgraph | null>;
|
|
428
|
+
declare function listSubgraphs(db: Kysely<Database>, accountId?: string): Promise<Subgraph[]>;
|
|
279
429
|
declare function updateSubgraphStatus(db: Kysely<Database>, name: string, status: string, lastProcessedBlock?: number): Promise<void>;
|
|
280
430
|
declare function recordSubgraphProcessed(db: Kysely<Database>, name: string, processed: number, errors: number, lastError?: string): Promise<void>;
|
|
281
431
|
declare function updateSubgraphHandlerPath(db: Kysely<Database>, name: string, handlerPath: string): Promise<void>;
|
|
@@ -33,12 +33,12 @@ function parseJsonb(value) {
|
|
|
33
33
|
|
|
34
34
|
// src/db/queries/subgraphs.ts
|
|
35
35
|
import { sql as sql2 } from "kysely";
|
|
36
|
-
function pgSchemaName(subgraphName,
|
|
36
|
+
function pgSchemaName(subgraphName, accountPrefix) {
|
|
37
37
|
const safeName = subgraphName.replace(/-/g, "_");
|
|
38
|
-
if (!
|
|
38
|
+
if (!accountPrefix) {
|
|
39
39
|
return `subgraph_${safeName}`;
|
|
40
40
|
}
|
|
41
|
-
const safePrefix =
|
|
41
|
+
const safePrefix = accountPrefix.replace(/-/g, "_");
|
|
42
42
|
return `subgraph_${safePrefix}_${safeName}`;
|
|
43
43
|
}
|
|
44
44
|
async function registerSubgraph(db, data) {
|
|
@@ -48,30 +48,33 @@ async function registerSubgraph(db, data) {
|
|
|
48
48
|
definition: jsonb(data.definition),
|
|
49
49
|
schema_hash: data.schemaHash,
|
|
50
50
|
handler_path: data.handlerPath,
|
|
51
|
-
api_key_id: data.apiKeyId,
|
|
51
|
+
api_key_id: data.apiKeyId ?? null,
|
|
52
|
+
account_id: data.accountId ?? "",
|
|
52
53
|
schema_name: data.schemaName ?? null,
|
|
53
|
-
start_block: data.startBlock ?? 0
|
|
54
|
-
|
|
54
|
+
start_block: data.startBlock ?? 0,
|
|
55
|
+
forked_from_id: data.forkedFromId ?? null
|
|
56
|
+
}).onConflict((oc) => oc.columns(["name", "account_id"]).doUpdateSet({
|
|
55
57
|
version: data.version,
|
|
56
58
|
definition: jsonb(data.definition),
|
|
57
59
|
schema_hash: data.schemaHash,
|
|
58
60
|
handler_path: data.handlerPath,
|
|
61
|
+
api_key_id: data.apiKeyId ?? null,
|
|
59
62
|
schema_name: data.schemaName ?? null,
|
|
60
63
|
start_block: data.startBlock ?? 0,
|
|
61
64
|
updated_at: new Date
|
|
62
65
|
})).returningAll().executeTakeFirstOrThrow();
|
|
63
66
|
}
|
|
64
|
-
async function getSubgraph(db, name,
|
|
67
|
+
async function getSubgraph(db, name, accountId) {
|
|
65
68
|
let query = db.selectFrom("subgraphs").selectAll().where("name", "=", name);
|
|
66
|
-
if (
|
|
67
|
-
query = query.where("
|
|
69
|
+
if (accountId) {
|
|
70
|
+
query = query.where("account_id", "=", accountId);
|
|
68
71
|
}
|
|
69
72
|
return await query.executeTakeFirst() ?? null;
|
|
70
73
|
}
|
|
71
|
-
async function listSubgraphs(db,
|
|
74
|
+
async function listSubgraphs(db, accountId) {
|
|
72
75
|
let query = db.selectFrom("subgraphs").selectAll();
|
|
73
|
-
if (
|
|
74
|
-
query = query.where("
|
|
76
|
+
if (accountId) {
|
|
77
|
+
query = query.where("account_id", "=", accountId);
|
|
75
78
|
}
|
|
76
79
|
return query.execute();
|
|
77
80
|
}
|
|
@@ -113,5 +116,5 @@ export {
|
|
|
113
116
|
deleteSubgraph
|
|
114
117
|
};
|
|
115
118
|
|
|
116
|
-
//# debugId=
|
|
119
|
+
//# debugId=DA77B4CD1C7149CE64756E2164756E21
|
|
117
120
|
//# sourceMappingURL=subgraphs.js.map
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../src/db/jsonb.ts", "../src/db/queries/subgraphs.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { type RawBuilder, sql } 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\tconst escaped = JSON.stringify(value).replace(/'/g, \"''\");\n\treturn 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\tif (typeof value === \"string\") {\n\t\ttry {\n\t\t\treturn JSON.parse(value) as T;\n\t\t} catch {\n\t\t\treturn value as T;\n\t\t}\n\t}\n\treturn (value ?? {}) as T;\n}\n",
|
|
6
|
-
"import { type Kysely, sql } 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
|
|
6
|
+
"import { type Kysely, sql } 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 accountPrefix (first 8 chars of account_id): \"subgraph_{prefix}_{name}\"\n * Without prefix: \"subgraph_{name}\" (backward compat / local dev)\n */\nexport function pgSchemaName(\n\tsubgraphName: string,\n\taccountPrefix?: string,\n): string {\n\tconst safeName = subgraphName.replace(/-/g, \"_\");\n\tif (!accountPrefix) {\n\t\treturn `subgraph_${safeName}`;\n\t}\n\tconst safePrefix = accountPrefix.replace(/-/g, \"_\");\n\treturn `subgraph_${safePrefix}_${safeName}`;\n}\n\nexport async function registerSubgraph(\n\tdb: Kysely<Database>,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tdefinition: Record<string, unknown>;\n\t\tschemaHash: string;\n\t\thandlerPath: string;\n\t\tapiKeyId?: string;\n\t\taccountId?: string;\n\t\tschemaName?: string;\n\t\tstartBlock?: number;\n\t\tforkedFromId?: string;\n\t},\n): Promise<Subgraph> {\n\treturn await db\n\t\t.insertInto(\"subgraphs\")\n\t\t.values({\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tdefinition: jsonb(data.definition) as any,\n\t\t\tschema_hash: data.schemaHash,\n\t\t\thandler_path: data.handlerPath,\n\t\t\tapi_key_id: data.apiKeyId ?? null,\n\t\t\taccount_id: data.accountId ?? \"\",\n\t\t\tschema_name: data.schemaName ?? null,\n\t\t\tstart_block: data.startBlock ?? 0,\n\t\t\tforked_from_id: data.forkedFromId ?? null,\n\t\t})\n\t\t.onConflict((oc) =>\n\t\t\toc.columns([\"name\", \"account_id\"]).doUpdateSet({\n\t\t\t\tversion: data.version,\n\t\t\t\tdefinition: jsonb(data.definition) as any,\n\t\t\t\tschema_hash: data.schemaHash,\n\t\t\t\thandler_path: data.handlerPath,\n\t\t\t\tapi_key_id: data.apiKeyId ?? null,\n\t\t\t\tschema_name: data.schemaName ?? null,\n\t\t\t\tstart_block: data.startBlock ?? 0,\n\t\t\t\tupdated_at: new Date(),\n\t\t\t}),\n\t\t)\n\t\t.returningAll()\n\t\t.executeTakeFirstOrThrow();\n}\n\nexport async function getSubgraph(\n\tdb: Kysely<Database>,\n\tname: string,\n\taccountId?: string,\n): Promise<Subgraph | null> {\n\tlet query = db.selectFrom(\"subgraphs\").selectAll().where(\"name\", \"=\", name);\n\n\tif (accountId) {\n\t\tquery = query.where(\"account_id\", \"=\", accountId);\n\t}\n\n\treturn (await query.executeTakeFirst()) ?? null;\n}\n\nexport async function listSubgraphs(\n\tdb: Kysely<Database>,\n\taccountId?: string,\n): Promise<Subgraph[]> {\n\tlet query = db.selectFrom(\"subgraphs\").selectAll();\n\tif (accountId) {\n\t\tquery = query.where(\"account_id\", \"=\", accountId);\n\t}\n\treturn query.execute();\n}\n\nexport async function updateSubgraphStatus(\n\tdb: Kysely<Database>,\n\tname: string,\n\tstatus: string,\n\tlastProcessedBlock?: number,\n): Promise<void> {\n\tawait db\n\t\t.updateTable(\"subgraphs\")\n\t\t.set({\n\t\t\tstatus,\n\t\t\t...(lastProcessedBlock !== undefined\n\t\t\t\t? { last_processed_block: lastProcessedBlock }\n\t\t\t\t: {}),\n\t\t\tupdated_at: new Date(),\n\t\t})\n\t\t.where(\"name\", \"=\", name)\n\t\t.execute();\n}\n\nexport async function recordSubgraphProcessed(\n\tdb: Kysely<Database>,\n\tname: string,\n\tprocessed: number,\n\terrors: number,\n\tlastError?: string,\n): Promise<void> {\n\tawait db\n\t\t.updateTable(\"subgraphs\")\n\t\t.set({\n\t\t\ttotal_processed: sql`total_processed + ${processed}`,\n\t\t\ttotal_errors: sql`total_errors + ${errors}`,\n\t\t\t...(lastError\n\t\t\t\t? { last_error: lastError, last_error_at: new Date() }\n\t\t\t\t: {}),\n\t\t\tupdated_at: new Date(),\n\t\t})\n\t\t.where(\"name\", \"=\", name)\n\t\t.execute();\n}\n\nexport async function updateSubgraphHandlerPath(\n\tdb: Kysely<Database>,\n\tname: string,\n\thandlerPath: string,\n): Promise<void> {\n\tawait db\n\t\t.updateTable(\"subgraphs\")\n\t\t.set({ handler_path: handlerPath, updated_at: new Date() })\n\t\t.where(\"name\", \"=\", name)\n\t\t.execute();\n}\n\nexport async function deleteSubgraph(\n\tdb: Kysely<Database>,\n\tname: string,\n\tapiKeyId?: string,\n): Promise<Subgraph | null> {\n\tconst subgraph = await getSubgraph(db, name, apiKeyId);\n\tif (!subgraph) return null;\n\n\t// Use stored schema_name if available, otherwise compute\n\tconst schemaName = subgraph.schema_name ?? pgSchemaName(name);\n\n\t// Drop the subgraph's schema (CASCADE drops all tables within)\n\tawait sql`DROP SCHEMA IF EXISTS ${sql.raw(`\"${schemaName}\"`)} CASCADE`.execute(\n\t\tdb,\n\t);\n\n\t// Remove from registry\n\tawait db.deleteFrom(\"subgraphs\").where(\"id\", \"=\", subgraph.id).execute();\n\n\treturn subgraph;\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAOO,SAAS,KAAK,CAAC,OAAqC;AAAA,EAC1D,MAAM,UAAU,KAAK,UAAU,KAAK,EAAE,QAAQ,MAAM,IAAI;AAAA,EACxD,OAAO,MAAM,IAAI,IAAI,IAAI,iBAAiB;AAAA;AAQpC,SAAS,UAAuB,CAAC,OAAmB;AAAA,EAC1D,IAAI,OAAO,UAAU,UAAU;AAAA,IAC9B,IAAI;AAAA,MACH,OAAO,KAAK,MAAM,KAAK;AAAA,MACtB,MAAM;AAAA,MACP,OAAO;AAAA;AAAA,EAET;AAAA,EACA,OAAQ,SAAS,CAAC;AAAA;;;ACzBnB,gBAAsB;AASf,SAAS,YAAY,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "DA77B4CD1C7149CE64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -49,6 +49,7 @@ interface StreamsTable {
|
|
|
49
49
|
endpoint_url: string;
|
|
50
50
|
signing_secret: string | null;
|
|
51
51
|
api_key_id: string;
|
|
52
|
+
project_id: string | null;
|
|
52
53
|
created_at: Generated<Date>;
|
|
53
54
|
updated_at: Generated<Date>;
|
|
54
55
|
}
|
|
@@ -110,7 +111,13 @@ interface SubgraphsTable {
|
|
|
110
111
|
last_error_at: Date | null;
|
|
111
112
|
total_processed: Generated<number>;
|
|
112
113
|
total_errors: Generated<number>;
|
|
113
|
-
api_key_id: string;
|
|
114
|
+
api_key_id: string | null;
|
|
115
|
+
account_id: string;
|
|
116
|
+
project_id: string | null;
|
|
117
|
+
is_public: Generated<boolean>;
|
|
118
|
+
tags: Generated<string[]>;
|
|
119
|
+
description: string | null;
|
|
120
|
+
forked_from_id: string | null;
|
|
114
121
|
created_at: Generated<Date>;
|
|
115
122
|
updated_at: Generated<Date>;
|
|
116
123
|
}
|
|
@@ -141,6 +148,10 @@ interface AccountsTable {
|
|
|
141
148
|
id: Generated<string>;
|
|
142
149
|
email: string;
|
|
143
150
|
plan: Generated<string>;
|
|
151
|
+
display_name: string | null;
|
|
152
|
+
bio: string | null;
|
|
153
|
+
avatar_url: string | null;
|
|
154
|
+
slug: string | null;
|
|
144
155
|
created_at: Generated<Date>;
|
|
145
156
|
}
|
|
146
157
|
interface SessionsTable {
|
|
@@ -241,6 +252,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
241
252
|
last_processed_block: number | null;
|
|
242
253
|
captured_at: Generated<Date>;
|
|
243
254
|
}
|
|
255
|
+
interface SubgraphUsageDailyTable {
|
|
256
|
+
subgraph_id: string;
|
|
257
|
+
date: string;
|
|
258
|
+
query_count: Generated<number>;
|
|
259
|
+
}
|
|
260
|
+
interface ProjectsTable {
|
|
261
|
+
id: Generated<string>;
|
|
262
|
+
name: string;
|
|
263
|
+
slug: string;
|
|
264
|
+
account_id: string;
|
|
265
|
+
settings: Generated<Record<string, unknown>>;
|
|
266
|
+
network: Generated<string>;
|
|
267
|
+
node_rpc: string | null;
|
|
268
|
+
created_at: Generated<Date>;
|
|
269
|
+
updated_at: Generated<Date>;
|
|
270
|
+
}
|
|
271
|
+
interface TeamMembersTable {
|
|
272
|
+
id: Generated<string>;
|
|
273
|
+
project_id: string;
|
|
274
|
+
account_id: string;
|
|
275
|
+
role: Generated<string>;
|
|
276
|
+
invited_by: string | null;
|
|
277
|
+
created_at: Generated<Date>;
|
|
278
|
+
}
|
|
279
|
+
interface TeamInvitationsTable {
|
|
280
|
+
id: Generated<string>;
|
|
281
|
+
project_id: string;
|
|
282
|
+
email: string;
|
|
283
|
+
role: Generated<string>;
|
|
284
|
+
token: string;
|
|
285
|
+
invited_by: string | null;
|
|
286
|
+
expires_at: Date;
|
|
287
|
+
accepted_at: Date | null;
|
|
288
|
+
created_at: Generated<Date>;
|
|
289
|
+
}
|
|
290
|
+
interface ChatSessionsTable {
|
|
291
|
+
id: Generated<string>;
|
|
292
|
+
account_id: string;
|
|
293
|
+
title: string | null;
|
|
294
|
+
summary: unknown | null;
|
|
295
|
+
created_at: Generated<Date>;
|
|
296
|
+
updated_at: Generated<Date>;
|
|
297
|
+
}
|
|
298
|
+
interface ChatMessagesTable {
|
|
299
|
+
id: Generated<string>;
|
|
300
|
+
chat_session_id: string;
|
|
301
|
+
role: string;
|
|
302
|
+
parts: unknown;
|
|
303
|
+
metadata: unknown | null;
|
|
304
|
+
created_at: Generated<Date>;
|
|
305
|
+
}
|
|
306
|
+
interface WorkflowDefinitionsTable {
|
|
307
|
+
id: Generated<string>;
|
|
308
|
+
name: string;
|
|
309
|
+
version: Generated<string>;
|
|
310
|
+
status: Generated<string>;
|
|
311
|
+
trigger_type: string;
|
|
312
|
+
trigger_config: unknown;
|
|
313
|
+
handler_path: string;
|
|
314
|
+
retries_config: unknown | null;
|
|
315
|
+
timeout_ms: number | null;
|
|
316
|
+
api_key_id: string;
|
|
317
|
+
project_id: string | null;
|
|
318
|
+
created_at: Generated<Date>;
|
|
319
|
+
updated_at: Generated<Date>;
|
|
320
|
+
}
|
|
321
|
+
interface WorkflowRunsTable {
|
|
322
|
+
id: Generated<string>;
|
|
323
|
+
definition_id: string;
|
|
324
|
+
status: Generated<string>;
|
|
325
|
+
trigger_type: string;
|
|
326
|
+
trigger_data: unknown | null;
|
|
327
|
+
dedup_key: string | null;
|
|
328
|
+
error: string | null;
|
|
329
|
+
started_at: Date | null;
|
|
330
|
+
completed_at: Date | null;
|
|
331
|
+
duration_ms: number | null;
|
|
332
|
+
total_ai_tokens: Generated<number>;
|
|
333
|
+
created_at: Generated<Date>;
|
|
334
|
+
}
|
|
335
|
+
interface WorkflowStepsTable {
|
|
336
|
+
id: Generated<string>;
|
|
337
|
+
run_id: string;
|
|
338
|
+
step_index: number;
|
|
339
|
+
step_id: string;
|
|
340
|
+
step_type: string;
|
|
341
|
+
status: Generated<string>;
|
|
342
|
+
input: unknown | null;
|
|
343
|
+
output: unknown | null;
|
|
344
|
+
error: string | null;
|
|
345
|
+
retry_count: Generated<number>;
|
|
346
|
+
ai_tokens_used: Generated<number>;
|
|
347
|
+
started_at: Date | null;
|
|
348
|
+
completed_at: Date | null;
|
|
349
|
+
duration_ms: number | null;
|
|
350
|
+
created_at: Generated<Date>;
|
|
351
|
+
}
|
|
352
|
+
interface WorkflowQueueTable {
|
|
353
|
+
id: Generated<string>;
|
|
354
|
+
run_id: string;
|
|
355
|
+
status: Generated<string>;
|
|
356
|
+
attempts: Generated<number>;
|
|
357
|
+
max_attempts: Generated<number>;
|
|
358
|
+
scheduled_for: Generated<Date>;
|
|
359
|
+
locked_at: Date | null;
|
|
360
|
+
locked_by: string | null;
|
|
361
|
+
error: string | null;
|
|
362
|
+
created_at: Generated<Date>;
|
|
363
|
+
completed_at: Date | null;
|
|
364
|
+
}
|
|
365
|
+
interface WorkflowSchedulesTable {
|
|
366
|
+
id: Generated<string>;
|
|
367
|
+
definition_id: string;
|
|
368
|
+
cron_expr: string;
|
|
369
|
+
timezone: Generated<string>;
|
|
370
|
+
next_run_at: Date;
|
|
371
|
+
last_run_at: Date | null;
|
|
372
|
+
enabled: Generated<boolean>;
|
|
373
|
+
created_at: Generated<Date>;
|
|
374
|
+
}
|
|
375
|
+
interface WorkflowCursorsTable {
|
|
376
|
+
name: string;
|
|
377
|
+
block_height: Generated<number>;
|
|
378
|
+
updated_at: Generated<Date>;
|
|
379
|
+
}
|
|
244
380
|
interface Database {
|
|
245
381
|
blocks: BlocksTable;
|
|
246
382
|
transactions: TransactionsTable;
|
|
@@ -264,6 +400,18 @@ interface Database {
|
|
|
264
400
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
265
401
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
266
402
|
subgraph_gaps: SubgraphGapsTable;
|
|
403
|
+
subgraph_usage_daily: SubgraphUsageDailyTable;
|
|
404
|
+
projects: ProjectsTable;
|
|
405
|
+
team_members: TeamMembersTable;
|
|
406
|
+
team_invitations: TeamInvitationsTable;
|
|
407
|
+
chat_sessions: ChatSessionsTable;
|
|
408
|
+
chat_messages: ChatMessagesTable;
|
|
409
|
+
workflow_definitions: WorkflowDefinitionsTable;
|
|
410
|
+
workflow_runs: WorkflowRunsTable;
|
|
411
|
+
workflow_steps: WorkflowStepsTable;
|
|
412
|
+
workflow_queue: WorkflowQueueTable;
|
|
413
|
+
workflow_schedules: WorkflowSchedulesTable;
|
|
414
|
+
workflow_cursors: WorkflowCursorsTable;
|
|
267
415
|
}
|
|
268
416
|
/** Increment API request counter for today. Fire-and-forget safe. */
|
|
269
417
|
declare function incrementApiRequests(db: Kysely<Database>, accountId: string): Promise<void>;
|