@secondlayer/shared 0.10.1 → 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 +181 -2
- package/dist/src/db/queries/accounts.d.ts +158 -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 +151 -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 +151 -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 +151 -1
- package/dist/src/db/queries/subgraphs.d.ts +158 -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 +151 -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 +181 -2
- package/dist/src/index.d.ts +251 -10
- package/dist/src/index.js +91 -72
- package/dist/src/index.js.map +4 -3
- package/dist/src/node/hiro-pg-client.js +5 -3
- package/dist/src/node/hiro-pg-client.js.map +3 -3
- package/dist/src/node/local-client.d.ts +155 -1
- package/dist/src/node/local-client.js +19 -9
- package/dist/src/node/local-client.js.map +3 -3
- 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 +3 -0
- package/migrations/0021_tx_function_args_result.ts +27 -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
|
@@ -18,6 +18,8 @@ interface TransactionsTable {
|
|
|
18
18
|
status: string;
|
|
19
19
|
contract_id: string | null;
|
|
20
20
|
function_name: string | null;
|
|
21
|
+
function_args: Generated<unknown | null>;
|
|
22
|
+
raw_result: Generated<string | null>;
|
|
21
23
|
raw_tx: string;
|
|
22
24
|
created_at: Generated<Date>;
|
|
23
25
|
}
|
|
@@ -39,6 +41,7 @@ interface StreamsTable {
|
|
|
39
41
|
endpoint_url: string;
|
|
40
42
|
signing_secret: string | null;
|
|
41
43
|
api_key_id: string;
|
|
44
|
+
project_id: string | null;
|
|
42
45
|
created_at: Generated<Date>;
|
|
43
46
|
updated_at: Generated<Date>;
|
|
44
47
|
}
|
|
@@ -100,7 +103,13 @@ interface SubgraphsTable {
|
|
|
100
103
|
last_error_at: Date | null;
|
|
101
104
|
total_processed: Generated<number>;
|
|
102
105
|
total_errors: Generated<number>;
|
|
103
|
-
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;
|
|
104
113
|
created_at: Generated<Date>;
|
|
105
114
|
updated_at: Generated<Date>;
|
|
106
115
|
}
|
|
@@ -131,6 +140,10 @@ interface AccountsTable {
|
|
|
131
140
|
id: Generated<string>;
|
|
132
141
|
email: string;
|
|
133
142
|
plan: Generated<string>;
|
|
143
|
+
display_name: string | null;
|
|
144
|
+
bio: string | null;
|
|
145
|
+
avatar_url: string | null;
|
|
146
|
+
slug: string | null;
|
|
134
147
|
created_at: Generated<Date>;
|
|
135
148
|
}
|
|
136
149
|
interface SessionsTable {
|
|
@@ -231,6 +244,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
231
244
|
last_processed_block: number | null;
|
|
232
245
|
captured_at: Generated<Date>;
|
|
233
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
|
+
}
|
|
234
372
|
interface Database {
|
|
235
373
|
blocks: BlocksTable;
|
|
236
374
|
transactions: TransactionsTable;
|
|
@@ -254,14 +392,26 @@ interface Database {
|
|
|
254
392
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
255
393
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
256
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;
|
|
257
407
|
}
|
|
258
408
|
type Subgraph = Selectable<SubgraphsTable>;
|
|
259
409
|
/**
|
|
260
410
|
* Convert a subgraph name to its PostgreSQL schema name.
|
|
261
|
-
* With
|
|
262
|
-
* Without
|
|
411
|
+
* With accountPrefix (first 8 chars of account_id): "subgraph_{prefix}_{name}"
|
|
412
|
+
* Without prefix: "subgraph_{name}" (backward compat / local dev)
|
|
263
413
|
*/
|
|
264
|
-
declare function pgSchemaName(subgraphName: string,
|
|
414
|
+
declare function pgSchemaName(subgraphName: string, accountPrefix?: string): string;
|
|
265
415
|
declare function registerSubgraph(db: Kysely<Database>, data: {
|
|
266
416
|
name: string
|
|
267
417
|
version: string
|
|
@@ -269,11 +419,13 @@ declare function registerSubgraph(db: Kysely<Database>, data: {
|
|
|
269
419
|
schemaHash: string
|
|
270
420
|
handlerPath: string
|
|
271
421
|
apiKeyId?: string
|
|
422
|
+
accountId?: string
|
|
272
423
|
schemaName?: string
|
|
273
424
|
startBlock?: number
|
|
425
|
+
forkedFromId?: string
|
|
274
426
|
}): Promise<Subgraph>;
|
|
275
|
-
declare function getSubgraph(db: Kysely<Database>, name: string,
|
|
276
|
-
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[]>;
|
|
277
429
|
declare function updateSubgraphStatus(db: Kysely<Database>, name: string, status: string, lastProcessedBlock?: number): Promise<void>;
|
|
278
430
|
declare function recordSubgraphProcessed(db: Kysely<Database>, name: string, processed: number, errors: number, lastError?: string): Promise<void>;
|
|
279
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
|
}
|
|
@@ -26,6 +26,8 @@ interface TransactionsTable {
|
|
|
26
26
|
status: string;
|
|
27
27
|
contract_id: string | null;
|
|
28
28
|
function_name: string | null;
|
|
29
|
+
function_args: Generated<unknown | null>;
|
|
30
|
+
raw_result: Generated<string | null>;
|
|
29
31
|
raw_tx: string;
|
|
30
32
|
created_at: Generated<Date>;
|
|
31
33
|
}
|
|
@@ -47,6 +49,7 @@ interface StreamsTable {
|
|
|
47
49
|
endpoint_url: string;
|
|
48
50
|
signing_secret: string | null;
|
|
49
51
|
api_key_id: string;
|
|
52
|
+
project_id: string | null;
|
|
50
53
|
created_at: Generated<Date>;
|
|
51
54
|
updated_at: Generated<Date>;
|
|
52
55
|
}
|
|
@@ -108,7 +111,13 @@ interface SubgraphsTable {
|
|
|
108
111
|
last_error_at: Date | null;
|
|
109
112
|
total_processed: Generated<number>;
|
|
110
113
|
total_errors: Generated<number>;
|
|
111
|
-
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;
|
|
112
121
|
created_at: Generated<Date>;
|
|
113
122
|
updated_at: Generated<Date>;
|
|
114
123
|
}
|
|
@@ -139,6 +148,10 @@ interface AccountsTable {
|
|
|
139
148
|
id: Generated<string>;
|
|
140
149
|
email: string;
|
|
141
150
|
plan: Generated<string>;
|
|
151
|
+
display_name: string | null;
|
|
152
|
+
bio: string | null;
|
|
153
|
+
avatar_url: string | null;
|
|
154
|
+
slug: string | null;
|
|
142
155
|
created_at: Generated<Date>;
|
|
143
156
|
}
|
|
144
157
|
interface SessionsTable {
|
|
@@ -239,6 +252,131 @@ interface SubgraphHealthSnapshotsTable {
|
|
|
239
252
|
last_processed_block: number | null;
|
|
240
253
|
captured_at: Generated<Date>;
|
|
241
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
|
+
}
|
|
242
380
|
interface Database {
|
|
243
381
|
blocks: BlocksTable;
|
|
244
382
|
transactions: TransactionsTable;
|
|
@@ -262,6 +400,18 @@ interface Database {
|
|
|
262
400
|
subgraph_processing_stats: SubgraphProcessingStatsTable;
|
|
263
401
|
subgraph_table_snapshots: SubgraphTableSnapshotsTable;
|
|
264
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;
|
|
265
415
|
}
|
|
266
416
|
/** Increment API request counter for today. Fire-and-forget safe. */
|
|
267
417
|
declare function incrementApiRequests(db: Kysely<Database>, accountId: string): Promise<void>;
|