@secondlayer/shared 0.10.2 → 0.12.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 +180 -2
- package/dist/src/db/queries/accounts.d.ts +157 -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 +150 -1
- package/dist/src/db/queries/marketplace.d.ts +464 -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 +150 -1
- package/dist/src/db/queries/projects.d.ts +424 -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 +150 -1
- package/dist/src/db/queries/subgraphs.d.ts +158 -6
- package/dist/src/db/queries/subgraphs.js +18 -13
- package/dist/src/db/queries/subgraphs.js.map +3 -3
- package/dist/src/db/queries/usage.d.ts +150 -1
- package/dist/src/db/queries/workflows.d.ts +440 -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 +180 -2
- package/dist/src/index.d.ts +258 -10
- package/dist/src/index.js +91 -72
- package/dist/src/index.js.map +5 -4
- package/dist/src/node/local-client.d.ts +150 -1
- package/dist/src/schemas/index.d.ts +79 -9
- package/dist/src/schemas/index.js +93 -74
- package/dist/src/schemas/index.js.map +5 -4
- 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/subgraphs.d.ts +8 -0
- package/dist/src/schemas/subgraphs.js.map +2 -2
- 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/migrations/0029_subgraph_handler_code.ts +23 -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,14 @@ 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
|
+
handler_code: string | null;
|
|
109
|
+
project_id: string | null;
|
|
110
|
+
is_public: Generated<boolean>;
|
|
111
|
+
tags: Generated<string[]>;
|
|
112
|
+
description: string | null;
|
|
113
|
+
forked_from_id: string | null;
|
|
106
114
|
created_at: Generated<Date>;
|
|
107
115
|
updated_at: Generated<Date>;
|
|
108
116
|
}
|
|
@@ -133,6 +141,10 @@ interface AccountsTable {
|
|
|
133
141
|
id: Generated<string>;
|
|
134
142
|
email: string;
|
|
135
143
|
plan: Generated<string>;
|
|
144
|
+
display_name: string | null;
|
|
145
|
+
bio: string | null;
|
|
146
|
+
avatar_url: string | null;
|
|
147
|
+
slug: string | null;
|
|
136
148
|
created_at: Generated<Date>;
|
|
137
149
|
}
|
|
138
150
|
interface SessionsTable {
|
|
@@ -233,6 +245,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
233
245
|
last_processed_block: number | null;
|
|
234
246
|
captured_at: Generated<Date>;
|
|
235
247
|
}
|
|
248
|
+
interface SubgraphUsageDailyTable {
|
|
249
|
+
subgraph_id: string;
|
|
250
|
+
date: string;
|
|
251
|
+
query_count: Generated<number>;
|
|
252
|
+
}
|
|
253
|
+
interface ProjectsTable {
|
|
254
|
+
id: Generated<string>;
|
|
255
|
+
name: string;
|
|
256
|
+
slug: string;
|
|
257
|
+
account_id: string;
|
|
258
|
+
settings: Generated<Record<string, unknown>>;
|
|
259
|
+
network: Generated<string>;
|
|
260
|
+
node_rpc: string | null;
|
|
261
|
+
created_at: Generated<Date>;
|
|
262
|
+
updated_at: Generated<Date>;
|
|
263
|
+
}
|
|
264
|
+
interface TeamMembersTable {
|
|
265
|
+
id: Generated<string>;
|
|
266
|
+
project_id: string;
|
|
267
|
+
account_id: string;
|
|
268
|
+
role: Generated<string>;
|
|
269
|
+
invited_by: string | null;
|
|
270
|
+
created_at: Generated<Date>;
|
|
271
|
+
}
|
|
272
|
+
interface TeamInvitationsTable {
|
|
273
|
+
id: Generated<string>;
|
|
274
|
+
project_id: string;
|
|
275
|
+
email: string;
|
|
276
|
+
role: Generated<string>;
|
|
277
|
+
token: string;
|
|
278
|
+
invited_by: string | null;
|
|
279
|
+
expires_at: Date;
|
|
280
|
+
accepted_at: Date | null;
|
|
281
|
+
created_at: Generated<Date>;
|
|
282
|
+
}
|
|
283
|
+
interface ChatSessionsTable {
|
|
284
|
+
id: Generated<string>;
|
|
285
|
+
account_id: string;
|
|
286
|
+
title: string | null;
|
|
287
|
+
summary: unknown | null;
|
|
288
|
+
created_at: Generated<Date>;
|
|
289
|
+
updated_at: Generated<Date>;
|
|
290
|
+
}
|
|
291
|
+
interface ChatMessagesTable {
|
|
292
|
+
id: Generated<string>;
|
|
293
|
+
chat_session_id: string;
|
|
294
|
+
role: string;
|
|
295
|
+
parts: unknown;
|
|
296
|
+
metadata: unknown | null;
|
|
297
|
+
created_at: Generated<Date>;
|
|
298
|
+
}
|
|
299
|
+
interface WorkflowDefinitionsTable {
|
|
300
|
+
id: Generated<string>;
|
|
301
|
+
name: string;
|
|
302
|
+
version: Generated<string>;
|
|
303
|
+
status: Generated<string>;
|
|
304
|
+
trigger_type: string;
|
|
305
|
+
trigger_config: unknown;
|
|
306
|
+
handler_path: string;
|
|
307
|
+
retries_config: unknown | null;
|
|
308
|
+
timeout_ms: number | null;
|
|
309
|
+
api_key_id: string;
|
|
310
|
+
project_id: string | null;
|
|
311
|
+
created_at: Generated<Date>;
|
|
312
|
+
updated_at: Generated<Date>;
|
|
313
|
+
}
|
|
314
|
+
interface WorkflowRunsTable {
|
|
315
|
+
id: Generated<string>;
|
|
316
|
+
definition_id: string;
|
|
317
|
+
status: Generated<string>;
|
|
318
|
+
trigger_type: string;
|
|
319
|
+
trigger_data: unknown | null;
|
|
320
|
+
dedup_key: string | null;
|
|
321
|
+
error: string | null;
|
|
322
|
+
started_at: Date | null;
|
|
323
|
+
completed_at: Date | null;
|
|
324
|
+
duration_ms: number | null;
|
|
325
|
+
total_ai_tokens: Generated<number>;
|
|
326
|
+
created_at: Generated<Date>;
|
|
327
|
+
}
|
|
328
|
+
interface WorkflowStepsTable {
|
|
329
|
+
id: Generated<string>;
|
|
330
|
+
run_id: string;
|
|
331
|
+
step_index: number;
|
|
332
|
+
step_id: string;
|
|
333
|
+
step_type: string;
|
|
334
|
+
status: Generated<string>;
|
|
335
|
+
input: unknown | null;
|
|
336
|
+
output: unknown | null;
|
|
337
|
+
error: string | null;
|
|
338
|
+
retry_count: Generated<number>;
|
|
339
|
+
ai_tokens_used: Generated<number>;
|
|
340
|
+
started_at: Date | null;
|
|
341
|
+
completed_at: Date | null;
|
|
342
|
+
duration_ms: number | null;
|
|
343
|
+
created_at: Generated<Date>;
|
|
344
|
+
}
|
|
345
|
+
interface WorkflowQueueTable {
|
|
346
|
+
id: Generated<string>;
|
|
347
|
+
run_id: string;
|
|
348
|
+
status: Generated<string>;
|
|
349
|
+
attempts: Generated<number>;
|
|
350
|
+
max_attempts: Generated<number>;
|
|
351
|
+
scheduled_for: Generated<Date>;
|
|
352
|
+
locked_at: Date | null;
|
|
353
|
+
locked_by: string | null;
|
|
354
|
+
error: string | null;
|
|
355
|
+
created_at: Generated<Date>;
|
|
356
|
+
completed_at: Date | null;
|
|
357
|
+
}
|
|
358
|
+
interface WorkflowSchedulesTable {
|
|
359
|
+
id: Generated<string>;
|
|
360
|
+
definition_id: string;
|
|
361
|
+
cron_expr: string;
|
|
362
|
+
timezone: Generated<string>;
|
|
363
|
+
next_run_at: Date;
|
|
364
|
+
last_run_at: Date | null;
|
|
365
|
+
enabled: Generated<boolean>;
|
|
366
|
+
created_at: Generated<Date>;
|
|
367
|
+
}
|
|
368
|
+
interface WorkflowCursorsTable {
|
|
369
|
+
name: string;
|
|
370
|
+
block_height: Generated<number>;
|
|
371
|
+
updated_at: Generated<Date>;
|
|
372
|
+
}
|
|
236
373
|
interface Database {
|
|
237
374
|
blocks: BlocksTable;
|
|
238
375
|
transactions: TransactionsTable;
|
|
@@ -256,6 +393,18 @@ interface Database {
|
|
|
256
393
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
257
394
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
258
395
|
subgraph_gaps: SubgraphGapsTable;
|
|
396
|
+
subgraph_usage_daily: SubgraphUsageDailyTable;
|
|
397
|
+
projects: ProjectsTable;
|
|
398
|
+
team_members: TeamMembersTable;
|
|
399
|
+
team_invitations: TeamInvitationsTable;
|
|
400
|
+
chat_sessions: ChatSessionsTable;
|
|
401
|
+
chat_messages: ChatMessagesTable;
|
|
402
|
+
workflow_definitions: WorkflowDefinitionsTable;
|
|
403
|
+
workflow_runs: WorkflowRunsTable;
|
|
404
|
+
workflow_steps: WorkflowStepsTable;
|
|
405
|
+
workflow_queue: WorkflowQueueTable;
|
|
406
|
+
workflow_schedules: WorkflowSchedulesTable;
|
|
407
|
+
workflow_cursors: WorkflowCursorsTable;
|
|
259
408
|
}
|
|
260
409
|
interface GapRange {
|
|
261
410
|
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,14 @@ 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
|
+
handler_code: string | null;
|
|
109
|
+
project_id: string | null;
|
|
110
|
+
is_public: Generated<boolean>;
|
|
111
|
+
tags: Generated<string[]>;
|
|
112
|
+
description: string | null;
|
|
113
|
+
forked_from_id: string | null;
|
|
106
114
|
created_at: Generated<Date>;
|
|
107
115
|
updated_at: Generated<Date>;
|
|
108
116
|
}
|
|
@@ -133,6 +141,10 @@ interface AccountsTable {
|
|
|
133
141
|
id: Generated<string>;
|
|
134
142
|
email: string;
|
|
135
143
|
plan: Generated<string>;
|
|
144
|
+
display_name: string | null;
|
|
145
|
+
bio: string | null;
|
|
146
|
+
avatar_url: string | null;
|
|
147
|
+
slug: string | null;
|
|
136
148
|
created_at: Generated<Date>;
|
|
137
149
|
}
|
|
138
150
|
interface SessionsTable {
|
|
@@ -233,6 +245,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
233
245
|
last_processed_block: number | null;
|
|
234
246
|
captured_at: Generated<Date>;
|
|
235
247
|
}
|
|
248
|
+
interface SubgraphUsageDailyTable {
|
|
249
|
+
subgraph_id: string;
|
|
250
|
+
date: string;
|
|
251
|
+
query_count: Generated<number>;
|
|
252
|
+
}
|
|
253
|
+
interface ProjectsTable {
|
|
254
|
+
id: Generated<string>;
|
|
255
|
+
name: string;
|
|
256
|
+
slug: string;
|
|
257
|
+
account_id: string;
|
|
258
|
+
settings: Generated<Record<string, unknown>>;
|
|
259
|
+
network: Generated<string>;
|
|
260
|
+
node_rpc: string | null;
|
|
261
|
+
created_at: Generated<Date>;
|
|
262
|
+
updated_at: Generated<Date>;
|
|
263
|
+
}
|
|
264
|
+
interface TeamMembersTable {
|
|
265
|
+
id: Generated<string>;
|
|
266
|
+
project_id: string;
|
|
267
|
+
account_id: string;
|
|
268
|
+
role: Generated<string>;
|
|
269
|
+
invited_by: string | null;
|
|
270
|
+
created_at: Generated<Date>;
|
|
271
|
+
}
|
|
272
|
+
interface TeamInvitationsTable {
|
|
273
|
+
id: Generated<string>;
|
|
274
|
+
project_id: string;
|
|
275
|
+
email: string;
|
|
276
|
+
role: Generated<string>;
|
|
277
|
+
token: string;
|
|
278
|
+
invited_by: string | null;
|
|
279
|
+
expires_at: Date;
|
|
280
|
+
accepted_at: Date | null;
|
|
281
|
+
created_at: Generated<Date>;
|
|
282
|
+
}
|
|
283
|
+
interface ChatSessionsTable {
|
|
284
|
+
id: Generated<string>;
|
|
285
|
+
account_id: string;
|
|
286
|
+
title: string | null;
|
|
287
|
+
summary: unknown | null;
|
|
288
|
+
created_at: Generated<Date>;
|
|
289
|
+
updated_at: Generated<Date>;
|
|
290
|
+
}
|
|
291
|
+
interface ChatMessagesTable {
|
|
292
|
+
id: Generated<string>;
|
|
293
|
+
chat_session_id: string;
|
|
294
|
+
role: string;
|
|
295
|
+
parts: unknown;
|
|
296
|
+
metadata: unknown | null;
|
|
297
|
+
created_at: Generated<Date>;
|
|
298
|
+
}
|
|
299
|
+
interface WorkflowDefinitionsTable {
|
|
300
|
+
id: Generated<string>;
|
|
301
|
+
name: string;
|
|
302
|
+
version: Generated<string>;
|
|
303
|
+
status: Generated<string>;
|
|
304
|
+
trigger_type: string;
|
|
305
|
+
trigger_config: unknown;
|
|
306
|
+
handler_path: string;
|
|
307
|
+
retries_config: unknown | null;
|
|
308
|
+
timeout_ms: number | null;
|
|
309
|
+
api_key_id: string;
|
|
310
|
+
project_id: string | null;
|
|
311
|
+
created_at: Generated<Date>;
|
|
312
|
+
updated_at: Generated<Date>;
|
|
313
|
+
}
|
|
314
|
+
interface WorkflowRunsTable {
|
|
315
|
+
id: Generated<string>;
|
|
316
|
+
definition_id: string;
|
|
317
|
+
status: Generated<string>;
|
|
318
|
+
trigger_type: string;
|
|
319
|
+
trigger_data: unknown | null;
|
|
320
|
+
dedup_key: string | null;
|
|
321
|
+
error: string | null;
|
|
322
|
+
started_at: Date | null;
|
|
323
|
+
completed_at: Date | null;
|
|
324
|
+
duration_ms: number | null;
|
|
325
|
+
total_ai_tokens: Generated<number>;
|
|
326
|
+
created_at: Generated<Date>;
|
|
327
|
+
}
|
|
328
|
+
interface WorkflowStepsTable {
|
|
329
|
+
id: Generated<string>;
|
|
330
|
+
run_id: string;
|
|
331
|
+
step_index: number;
|
|
332
|
+
step_id: string;
|
|
333
|
+
step_type: string;
|
|
334
|
+
status: Generated<string>;
|
|
335
|
+
input: unknown | null;
|
|
336
|
+
output: unknown | null;
|
|
337
|
+
error: string | null;
|
|
338
|
+
retry_count: Generated<number>;
|
|
339
|
+
ai_tokens_used: Generated<number>;
|
|
340
|
+
started_at: Date | null;
|
|
341
|
+
completed_at: Date | null;
|
|
342
|
+
duration_ms: number | null;
|
|
343
|
+
created_at: Generated<Date>;
|
|
344
|
+
}
|
|
345
|
+
interface WorkflowQueueTable {
|
|
346
|
+
id: Generated<string>;
|
|
347
|
+
run_id: string;
|
|
348
|
+
status: Generated<string>;
|
|
349
|
+
attempts: Generated<number>;
|
|
350
|
+
max_attempts: Generated<number>;
|
|
351
|
+
scheduled_for: Generated<Date>;
|
|
352
|
+
locked_at: Date | null;
|
|
353
|
+
locked_by: string | null;
|
|
354
|
+
error: string | null;
|
|
355
|
+
created_at: Generated<Date>;
|
|
356
|
+
completed_at: Date | null;
|
|
357
|
+
}
|
|
358
|
+
interface WorkflowSchedulesTable {
|
|
359
|
+
id: Generated<string>;
|
|
360
|
+
definition_id: string;
|
|
361
|
+
cron_expr: string;
|
|
362
|
+
timezone: Generated<string>;
|
|
363
|
+
next_run_at: Date;
|
|
364
|
+
last_run_at: Date | null;
|
|
365
|
+
enabled: Generated<boolean>;
|
|
366
|
+
created_at: Generated<Date>;
|
|
367
|
+
}
|
|
368
|
+
interface WorkflowCursorsTable {
|
|
369
|
+
name: string;
|
|
370
|
+
block_height: Generated<number>;
|
|
371
|
+
updated_at: Generated<Date>;
|
|
372
|
+
}
|
|
236
373
|
interface Database {
|
|
237
374
|
blocks: BlocksTable;
|
|
238
375
|
transactions: TransactionsTable;
|
|
@@ -256,14 +393,26 @@ interface Database {
|
|
|
256
393
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
257
394
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
258
395
|
subgraph_gaps: SubgraphGapsTable;
|
|
396
|
+
subgraph_usage_daily: SubgraphUsageDailyTable;
|
|
397
|
+
projects: ProjectsTable;
|
|
398
|
+
team_members: TeamMembersTable;
|
|
399
|
+
team_invitations: TeamInvitationsTable;
|
|
400
|
+
chat_sessions: ChatSessionsTable;
|
|
401
|
+
chat_messages: ChatMessagesTable;
|
|
402
|
+
workflow_definitions: WorkflowDefinitionsTable;
|
|
403
|
+
workflow_runs: WorkflowRunsTable;
|
|
404
|
+
workflow_steps: WorkflowStepsTable;
|
|
405
|
+
workflow_queue: WorkflowQueueTable;
|
|
406
|
+
workflow_schedules: WorkflowSchedulesTable;
|
|
407
|
+
workflow_cursors: WorkflowCursorsTable;
|
|
259
408
|
}
|
|
260
409
|
type Subgraph = Selectable<SubgraphsTable>;
|
|
261
410
|
/**
|
|
262
411
|
* Convert a subgraph name to its PostgreSQL schema name.
|
|
263
|
-
* With
|
|
264
|
-
* Without
|
|
412
|
+
* With accountPrefix (first 8 chars of account_id): "subgraph_{prefix}_{name}"
|
|
413
|
+
* Without prefix: "subgraph_{name}" (backward compat / local dev)
|
|
265
414
|
*/
|
|
266
|
-
declare function pgSchemaName(subgraphName: string,
|
|
415
|
+
declare function pgSchemaName(subgraphName: string, accountPrefix?: string): string;
|
|
267
416
|
declare function registerSubgraph(db: Kysely<Database>, data: {
|
|
268
417
|
name: string
|
|
269
418
|
version: string
|
|
@@ -271,11 +420,14 @@ declare function registerSubgraph(db: Kysely<Database>, data: {
|
|
|
271
420
|
schemaHash: string
|
|
272
421
|
handlerPath: string
|
|
273
422
|
apiKeyId?: string
|
|
423
|
+
accountId?: string
|
|
274
424
|
schemaName?: string
|
|
275
425
|
startBlock?: number
|
|
426
|
+
forkedFromId?: string
|
|
427
|
+
handlerCode?: string
|
|
276
428
|
}): Promise<Subgraph>;
|
|
277
|
-
declare function getSubgraph(db: Kysely<Database>, name: string,
|
|
278
|
-
declare function listSubgraphs(db: Kysely<Database>,
|
|
429
|
+
declare function getSubgraph(db: Kysely<Database>, name: string, accountId?: string): Promise<Subgraph | null>;
|
|
430
|
+
declare function listSubgraphs(db: Kysely<Database>, accountId?: string): Promise<Subgraph[]>;
|
|
279
431
|
declare function updateSubgraphStatus(db: Kysely<Database>, name: string, status: string, lastProcessedBlock?: number): Promise<void>;
|
|
280
432
|
declare function recordSubgraphProcessed(db: Kysely<Database>, name: string, processed: number, errors: number, lastError?: string): Promise<void>;
|
|
281
433
|
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,35 @@ 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 ?? "",
|
|
53
|
+
handler_code: data.handlerCode ?? null,
|
|
52
54
|
schema_name: data.schemaName ?? null,
|
|
53
|
-
start_block: data.startBlock ?? 0
|
|
54
|
-
|
|
55
|
+
start_block: data.startBlock ?? 0,
|
|
56
|
+
forked_from_id: data.forkedFromId ?? null
|
|
57
|
+
}).onConflict((oc) => oc.columns(["name", "account_id"]).doUpdateSet({
|
|
55
58
|
version: data.version,
|
|
56
59
|
definition: jsonb(data.definition),
|
|
57
60
|
schema_hash: data.schemaHash,
|
|
58
61
|
handler_path: data.handlerPath,
|
|
62
|
+
handler_code: data.handlerCode ?? null,
|
|
63
|
+
api_key_id: data.apiKeyId ?? null,
|
|
59
64
|
schema_name: data.schemaName ?? null,
|
|
60
65
|
start_block: data.startBlock ?? 0,
|
|
61
66
|
updated_at: new Date
|
|
62
67
|
})).returningAll().executeTakeFirstOrThrow();
|
|
63
68
|
}
|
|
64
|
-
async function getSubgraph(db, name,
|
|
69
|
+
async function getSubgraph(db, name, accountId) {
|
|
65
70
|
let query = db.selectFrom("subgraphs").selectAll().where("name", "=", name);
|
|
66
|
-
if (
|
|
67
|
-
query = query.where("
|
|
71
|
+
if (accountId) {
|
|
72
|
+
query = query.where("account_id", "=", accountId);
|
|
68
73
|
}
|
|
69
74
|
return await query.executeTakeFirst() ?? null;
|
|
70
75
|
}
|
|
71
|
-
async function listSubgraphs(db,
|
|
76
|
+
async function listSubgraphs(db, accountId) {
|
|
72
77
|
let query = db.selectFrom("subgraphs").selectAll();
|
|
73
|
-
if (
|
|
74
|
-
query = query.where("
|
|
78
|
+
if (accountId) {
|
|
79
|
+
query = query.where("account_id", "=", accountId);
|
|
75
80
|
}
|
|
76
81
|
return query.execute();
|
|
77
82
|
}
|
|
@@ -113,5 +118,5 @@ export {
|
|
|
113
118
|
deleteSubgraph
|
|
114
119
|
};
|
|
115
120
|
|
|
116
|
-
//# debugId=
|
|
121
|
+
//# debugId=19BA785B5DA83C2564756E2164756E21
|
|
117
122
|
//# 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\thandlerCode?: 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\thandler_code: data.handlerCode ?? null,\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\thandler_code: data.handlerCode ?? null,\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": "19BA785B5DA83C2564756E2164756E21",
|
|
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,14 @@ 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
|
+
handler_code: string | null;
|
|
117
|
+
project_id: string | null;
|
|
118
|
+
is_public: Generated<boolean>;
|
|
119
|
+
tags: Generated<string[]>;
|
|
120
|
+
description: string | null;
|
|
121
|
+
forked_from_id: string | null;
|
|
114
122
|
created_at: Generated<Date>;
|
|
115
123
|
updated_at: Generated<Date>;
|
|
116
124
|
}
|
|
@@ -141,6 +149,10 @@ interface AccountsTable {
|
|
|
141
149
|
id: Generated<string>;
|
|
142
150
|
email: string;
|
|
143
151
|
plan: Generated<string>;
|
|
152
|
+
display_name: string | null;
|
|
153
|
+
bio: string | null;
|
|
154
|
+
avatar_url: string | null;
|
|
155
|
+
slug: string | null;
|
|
144
156
|
created_at: Generated<Date>;
|
|
145
157
|
}
|
|
146
158
|
interface SessionsTable {
|
|
@@ -241,6 +253,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
241
253
|
last_processed_block: number | null;
|
|
242
254
|
captured_at: Generated<Date>;
|
|
243
255
|
}
|
|
256
|
+
interface SubgraphUsageDailyTable {
|
|
257
|
+
subgraph_id: string;
|
|
258
|
+
date: string;
|
|
259
|
+
query_count: Generated<number>;
|
|
260
|
+
}
|
|
261
|
+
interface ProjectsTable {
|
|
262
|
+
id: Generated<string>;
|
|
263
|
+
name: string;
|
|
264
|
+
slug: string;
|
|
265
|
+
account_id: string;
|
|
266
|
+
settings: Generated<Record<string, unknown>>;
|
|
267
|
+
network: Generated<string>;
|
|
268
|
+
node_rpc: string | null;
|
|
269
|
+
created_at: Generated<Date>;
|
|
270
|
+
updated_at: Generated<Date>;
|
|
271
|
+
}
|
|
272
|
+
interface TeamMembersTable {
|
|
273
|
+
id: Generated<string>;
|
|
274
|
+
project_id: string;
|
|
275
|
+
account_id: string;
|
|
276
|
+
role: Generated<string>;
|
|
277
|
+
invited_by: string | null;
|
|
278
|
+
created_at: Generated<Date>;
|
|
279
|
+
}
|
|
280
|
+
interface TeamInvitationsTable {
|
|
281
|
+
id: Generated<string>;
|
|
282
|
+
project_id: string;
|
|
283
|
+
email: string;
|
|
284
|
+
role: Generated<string>;
|
|
285
|
+
token: string;
|
|
286
|
+
invited_by: string | null;
|
|
287
|
+
expires_at: Date;
|
|
288
|
+
accepted_at: Date | null;
|
|
289
|
+
created_at: Generated<Date>;
|
|
290
|
+
}
|
|
291
|
+
interface ChatSessionsTable {
|
|
292
|
+
id: Generated<string>;
|
|
293
|
+
account_id: string;
|
|
294
|
+
title: string | null;
|
|
295
|
+
summary: unknown | null;
|
|
296
|
+
created_at: Generated<Date>;
|
|
297
|
+
updated_at: Generated<Date>;
|
|
298
|
+
}
|
|
299
|
+
interface ChatMessagesTable {
|
|
300
|
+
id: Generated<string>;
|
|
301
|
+
chat_session_id: string;
|
|
302
|
+
role: string;
|
|
303
|
+
parts: unknown;
|
|
304
|
+
metadata: unknown | null;
|
|
305
|
+
created_at: Generated<Date>;
|
|
306
|
+
}
|
|
307
|
+
interface WorkflowDefinitionsTable {
|
|
308
|
+
id: Generated<string>;
|
|
309
|
+
name: string;
|
|
310
|
+
version: Generated<string>;
|
|
311
|
+
status: Generated<string>;
|
|
312
|
+
trigger_type: string;
|
|
313
|
+
trigger_config: unknown;
|
|
314
|
+
handler_path: string;
|
|
315
|
+
retries_config: unknown | null;
|
|
316
|
+
timeout_ms: number | null;
|
|
317
|
+
api_key_id: string;
|
|
318
|
+
project_id: string | null;
|
|
319
|
+
created_at: Generated<Date>;
|
|
320
|
+
updated_at: Generated<Date>;
|
|
321
|
+
}
|
|
322
|
+
interface WorkflowRunsTable {
|
|
323
|
+
id: Generated<string>;
|
|
324
|
+
definition_id: string;
|
|
325
|
+
status: Generated<string>;
|
|
326
|
+
trigger_type: string;
|
|
327
|
+
trigger_data: unknown | null;
|
|
328
|
+
dedup_key: string | null;
|
|
329
|
+
error: string | null;
|
|
330
|
+
started_at: Date | null;
|
|
331
|
+
completed_at: Date | null;
|
|
332
|
+
duration_ms: number | null;
|
|
333
|
+
total_ai_tokens: Generated<number>;
|
|
334
|
+
created_at: Generated<Date>;
|
|
335
|
+
}
|
|
336
|
+
interface WorkflowStepsTable {
|
|
337
|
+
id: Generated<string>;
|
|
338
|
+
run_id: string;
|
|
339
|
+
step_index: number;
|
|
340
|
+
step_id: string;
|
|
341
|
+
step_type: string;
|
|
342
|
+
status: Generated<string>;
|
|
343
|
+
input: unknown | null;
|
|
344
|
+
output: unknown | null;
|
|
345
|
+
error: string | null;
|
|
346
|
+
retry_count: Generated<number>;
|
|
347
|
+
ai_tokens_used: Generated<number>;
|
|
348
|
+
started_at: Date | null;
|
|
349
|
+
completed_at: Date | null;
|
|
350
|
+
duration_ms: number | null;
|
|
351
|
+
created_at: Generated<Date>;
|
|
352
|
+
}
|
|
353
|
+
interface WorkflowQueueTable {
|
|
354
|
+
id: Generated<string>;
|
|
355
|
+
run_id: string;
|
|
356
|
+
status: Generated<string>;
|
|
357
|
+
attempts: Generated<number>;
|
|
358
|
+
max_attempts: Generated<number>;
|
|
359
|
+
scheduled_for: Generated<Date>;
|
|
360
|
+
locked_at: Date | null;
|
|
361
|
+
locked_by: string | null;
|
|
362
|
+
error: string | null;
|
|
363
|
+
created_at: Generated<Date>;
|
|
364
|
+
completed_at: Date | null;
|
|
365
|
+
}
|
|
366
|
+
interface WorkflowSchedulesTable {
|
|
367
|
+
id: Generated<string>;
|
|
368
|
+
definition_id: string;
|
|
369
|
+
cron_expr: string;
|
|
370
|
+
timezone: Generated<string>;
|
|
371
|
+
next_run_at: Date;
|
|
372
|
+
last_run_at: Date | null;
|
|
373
|
+
enabled: Generated<boolean>;
|
|
374
|
+
created_at: Generated<Date>;
|
|
375
|
+
}
|
|
376
|
+
interface WorkflowCursorsTable {
|
|
377
|
+
name: string;
|
|
378
|
+
block_height: Generated<number>;
|
|
379
|
+
updated_at: Generated<Date>;
|
|
380
|
+
}
|
|
244
381
|
interface Database {
|
|
245
382
|
blocks: BlocksTable;
|
|
246
383
|
transactions: TransactionsTable;
|
|
@@ -264,6 +401,18 @@ interface Database {
|
|
|
264
401
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
265
402
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
266
403
|
subgraph_gaps: SubgraphGapsTable;
|
|
404
|
+
subgraph_usage_daily: SubgraphUsageDailyTable;
|
|
405
|
+
projects: ProjectsTable;
|
|
406
|
+
team_members: TeamMembersTable;
|
|
407
|
+
team_invitations: TeamInvitationsTable;
|
|
408
|
+
chat_sessions: ChatSessionsTable;
|
|
409
|
+
chat_messages: ChatMessagesTable;
|
|
410
|
+
workflow_definitions: WorkflowDefinitionsTable;
|
|
411
|
+
workflow_runs: WorkflowRunsTable;
|
|
412
|
+
workflow_steps: WorkflowStepsTable;
|
|
413
|
+
workflow_queue: WorkflowQueueTable;
|
|
414
|
+
workflow_schedules: WorkflowSchedulesTable;
|
|
415
|
+
workflow_cursors: WorkflowCursorsTable;
|
|
267
416
|
}
|
|
268
417
|
/** Increment API request counter for today. Fire-and-forget safe. */
|
|
269
418
|
declare function incrementApiRequests(db: Kysely<Database>, accountId: string): Promise<void>;
|