@sixb/pg 0.1.2 → 0.1.3
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/agents/agent-storage.d.ts +5 -3
- package/dist/agents/agent-storage.d.ts.map +1 -1
- package/dist/agents/checkpoints.d.ts +12 -0
- package/dist/agents/checkpoints.d.ts.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/messages.d.ts +2 -1
- package/dist/agents/messages.d.ts.map +1 -1
- package/dist/agents/rows.d.ts +18 -1
- package/dist/agents/rows.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +847 -30
- package/dist/index.js.map +12 -10
- package/dist/migrations.d.ts.map +1 -1
- package/dist/ontology-storage/materialization-state.d.ts.map +1 -1
- package/dist/ontology-storage/materialization-writer.d.ts.map +1 -1
- package/dist/pg-ai-cost-storage.d.ts +12 -0
- package/dist/pg-ai-cost-storage.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/agents/agent-storage.ts +6 -3
- package/src/agents/checkpoints.ts +175 -0
- package/src/agents/index.ts +1 -0
- package/src/agents/messages.ts +71 -13
- package/src/agents/rows.ts +45 -0
- package/src/index.ts +7 -1
- package/src/migrations/026-ai-cost-accounting.sql +53 -0
- package/src/migrations/027-agent-context-checkpoints.sql +34 -0
- package/src/migrations/028-object-override-edit-times.sql +3 -0
- package/src/migrations.ts +10 -0
- package/src/ontology-storage/materialization-state.ts +2 -0
- package/src/ontology-storage/materialization-writer.ts +5 -3
- package/src/pg-ai-cost-storage.ts +707 -0
package/dist/index.js.map
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/agents/
|
|
3
|
+
"sources": ["../src/index.ts", "../src/agents/checkpoints.ts", "../src/storage-errors.ts", "../src/transactions.ts", "../src/agents/rows.ts", "../src/agents/messages.ts", "../src/agents/runs.ts", "../src/run-list-query.ts", "../src/agents/threads.ts", "../src/agents/agent-storage.ts", "../src/auth-storage/auth-storage.ts", "../src/auth-storage/access-tokens.ts", "../src/auth-storage/rows.ts", "../src/auth-storage/shared.ts", "../src/auth-storage/group-memberships.ts", "../src/auth-storage/identities.ts", "../src/auth-storage/invitations.ts", "../src/auth-storage/magic-links.ts", "../src/auth-storage/oidc-attempts.ts", "../src/auth-storage/service-account-group-memberships.ts", "../src/auth-storage/service-accounts.ts", "../src/auth-storage/sessions.ts", "../src/auth-storage/users.ts", "../src/connector-connection-storage.ts", "../src/migrations.ts", "../src/ontology-storage/shared.ts", "../src/ontology-storage/commits.ts", "../src/ontology-storage/materializations.ts", "../src/ontology-storage/materialization-session.ts", "../src/ontology-storage/materialization-state.ts", "../src/ontology-storage/materialization-writer.ts", "../src/ontology-storage/outbox.ts", "../src/ontology-storage/sources.ts", "../src/ontology-storage/index.ts", "../src/pg-action-run-storage.ts", "../src/pg-ai-cost-storage.ts", "../src/pg-ai-usage-storage.ts", "../src/pg-client.ts", "../src/pg-execution-storage.ts", "../src/pg-object-query-compiler.ts", "../src/pg-object-storage.ts", "../src/pg-pipeline-run-storage.ts", "../src/latest-run-query.ts", "../src/pg-projection-run-storage.ts", "../src/pg-rules-storage.ts", "../src/pg-sync-run-storage.ts", "../src/pg-timeseries-storage.ts", "../src/pg-webhook-run-storage.ts", "../src/pg-workflow-intervention-storage.ts", "../src/pg-workflow-run-storage.ts", "../src/testing.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\n/// <reference path=\"./sql.d.ts\" />\n\nimport { AsyncLocalStorage } from \"node:async_hooks\"\nimport type {\n MigrationCapableStorage,\n Storage,\n StorageMigrator,\n StorageTransactionOptions,\n} from \"@sixb/core\"\nimport { ProviderMaterializationTransactionLifecycle } from \"@sixb/core/internal/ontology-storage-provider\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiUsageStorage,\n createTransactionStorageProxy,\n type ObjectStorage,\n StorageTransactionError,\n throwNestedStorageTransaction,\n} from \"@sixb/core/storage\"\nimport { PgAgentStorage } from \"./agents\"\nimport { PgAuthStorage } from \"./auth-storage\"\nimport { PgConnectorConnectionStorage } from \"./connector-connection-storage\"\nimport { createPostgresStorageMigrators, dropSchema } from \"./migrations\"\nimport { PgOntologyStorage, type PgOntologyTransactionContext } from \"./ontology-storage\"\nimport { PgActionRunStorage } from \"./pg-action-run-storage\"\nimport { PgAiUsageStorage } from \"./pg-ai-usage-storage\"\nimport { createPgClient, type SQL, type SQLClient } from \"./pg-client\"\nimport { PgExecutionStorage } from \"./pg-execution-storage\"\nimport { PgObjectStorage } from \"./pg-object-storage\"\nimport { PgPipelineRunStorage } from \"./pg-pipeline-run-storage\"\nimport { PgProjectionRunStorage } from \"./pg-projection-run-storage\"\nimport { PgRulesStorage } from \"./pg-rules-storage\"\nimport { PgSyncRunStorage } from \"./pg-sync-run-storage\"\nimport { PgTimeseriesStorage } from \"./pg-timeseries-storage\"\nimport { PgWebhookRunStorage } from \"./pg-webhook-run-storage\"\nimport { PgWorkflowInterventionStorage } from \"./pg-workflow-intervention-storage\"\nimport { PgWorkflowRunStorage } from \"./pg-workflow-run-storage\"\nimport { isRetryableTransactionConflict } from \"./storage-errors\"\nimport { registerPostgresStorageTestingAdapter } from \"./testing\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport interface PostgresStorageOptions {\n /** Full connection string (e.g. DATABASE_URL). Takes precedence over individual fields. */\n connectionString?: string\n\n /** PostgreSQL host. Defaults to 'localhost'. */\n host?: string\n /** PostgreSQL port. Defaults to 5432. */\n port?: number\n /** Database name. */\n database?: string\n /** Database user. */\n user?: string\n /** Database password. */\n password?: string\n\n /** Maximum number of connections in the pool. Defaults to 10. */\n max?: number\n /** Idle connection timeout in milliseconds. Defaults to 30000. */\n idleTimeoutMillis?: number\n\n /**\n * Server-side `statement_timeout` (ms) applied to every connection in the pool. A query\n * exceeding it is cancelled by PostgreSQL, which frees its pooled connection instead of\n * pinning it indefinitely. Without this, a single stalled query can starve a small pool\n * until the process is restarted. Unset by default (no timeout). Set per role — keep it\n * generous or unset for workers that run long migrations/bulk writes.\n */\n statementTimeoutMillis?: number\n /**\n * Server-side `idle_in_transaction_session_timeout` (ms) applied to every connection. A\n * transaction left open and idle beyond it is aborted by PostgreSQL, releasing the\n * connection. Unset by default (no timeout).\n */\n idleInTransactionSessionTimeoutMillis?: number\n\n /**\n * Grace period (ms) for {@link PostgresStorage.close}. On shutdown the pool stops\n * accepting new queries and waits up to this long for in-flight queries to finish before\n * destroying the connections, so a restart drains cleanly instead of severing live work.\n * Defaults to 5000.\n */\n shutdownTimeoutMillis?: number\n\n /** Seconds to wait when establishing a connection. Defaults to 10000. */\n connectTimeoutMillis?: number\n /**\n * Whether to use server-side prepared statements (porsager's default, faster against a\n * direct Postgres connection). Behind PgBouncer transaction mode they require PgBouncer\n * >= 1.21 with `max_prepared_statements > 0`; set `false` for an older PgBouncer or when\n * that setting is 0. Defaults to `true`.\n */\n prepare?: boolean\n\n /** PostgreSQL schema name for all Sixb tables. Defaults to 'sixb'. */\n schemaName?: string\n\n /** SSL configuration. */\n ssl?: boolean | \"require\" | \"prefer\"\n}\n\n/**\n * PostgreSQL storage provider for Sixb.\n *\n * Bundles Sixb storage adapters, including the AI usage ledger, behind a shared PostgreSQL\n * connection pool (porsager `postgres`), which reliably reclaims connections under load.\n *\n * The storage exposes a core `StorageMigrator`. Sixb CLI startup and\n * `sixb db migrate` run it automatically through `migrateStorage(storage)`.\n *\n * Usage:\n * ```ts\n * const pg = new PostgresStorage({\n * connectionString: process.env.DATABASE_URL!,\n * })\n *\n * export const sixb = createSixb({\n * broker: myBroker,\n * storage: pg,\n * })\n * ```\n */\nexport class PostgresStorage implements MigrationCapableStorage {\n readonly objects: ObjectStorage\n readonly ontology: PgOntologyStorage\n readonly auth: PgAuthStorage\n readonly executions: PgExecutionStorage\n readonly agents: PgAgentStorage\n readonly aiUsage: AiUsageStorage\n readonly actionRuns: PgActionRunStorage\n readonly pipelineRuns: PgPipelineRunStorage\n readonly workflowRuns: PgWorkflowRunStorage\n readonly workflowInterventions: PgWorkflowInterventionStorage\n readonly syncRuns: PgSyncRunStorage\n readonly projectionRuns: PgProjectionRunStorage\n readonly timeseries: Storage[\"timeseries\"]\n readonly webhookRuns: PgWebhookRunStorage\n readonly rules: PgRulesStorage\n readonly connectorConnections: PgConnectorConnectionStorage\n readonly migrators: readonly StorageMigrator[]\n\n private readonly sql: SQL\n private readonly schemaName: string\n private readonly shutdownTimeoutSeconds: number\n private readonly transactionScope = new AsyncLocalStorage<boolean>()\n\n constructor(options: PostgresStorageOptions) {\n this.schemaName = options.schemaName ?? \"sixb\"\n this.shutdownTimeoutSeconds = Math.max(\n 1,\n Math.round((options.shutdownTimeoutMillis ?? 5000) / 1000)\n )\n\n this.sql = createPgClient({\n ...(options.connectionString !== undefined\n ? { connectionString: options.connectionString }\n : {}),\n ...(options.host !== undefined ? { host: options.host } : {}),\n ...(options.port !== undefined ? { port: options.port } : {}),\n ...(options.database !== undefined ? { database: options.database } : {}),\n ...(options.user !== undefined ? { user: options.user } : {}),\n ...(options.password !== undefined ? { password: options.password } : {}),\n max: options.max ?? 10,\n schemaName: this.schemaName,\n ...(options.idleTimeoutMillis !== undefined\n ? { idleTimeoutMillis: options.idleTimeoutMillis }\n : {}),\n ...(resolveTimeoutMillis(options.statementTimeoutMillis, \"statementTimeoutMillis\") !==\n undefined\n ? { statementTimeoutMillis: options.statementTimeoutMillis }\n : {}),\n ...(resolveTimeoutMillis(\n options.idleInTransactionSessionTimeoutMillis,\n \"idleInTransactionSessionTimeoutMillis\"\n ) !== undefined\n ? { idleInTransactionSessionTimeoutMillis: options.idleInTransactionSessionTimeoutMillis }\n : {}),\n ...(resolveTimeoutMillis(options.connectTimeoutMillis, \"connectTimeoutMillis\") !== undefined\n ? { connectTimeoutMillis: options.connectTimeoutMillis }\n : {}),\n ...(options.prepare !== undefined ? { prepare: options.prepare } : {}),\n ...(options.ssl !== undefined ? { ssl: options.ssl } : {}),\n })\n\n this.migrators = createPostgresStorageMigrators(this.sql, this.schemaName)\n const stores = createPostgresStores(this.sql, {\n runOntologyOperation: (run) => runPgTransaction(this.sql, run),\n transactionContext: null,\n })\n const scope = createStorageOperationScope(\n async (run) => {\n this.assertRootOperationAvailable()\n return run()\n },\n () => this.assertRootOperationAvailable()\n )\n this.objects = createOperationScopedFacade(stores.objects, scope)\n this.ontology = createOntologyOperationScope(stores.ontology, scope)\n this.auth = createAuthOperationScope(stores.auth, scope)\n this.executions = createOperationScopedFacade(stores.executions, scope)\n this.agents = createAgentOperationScope(stores.agents, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.actionRuns = createOperationScopedFacade(stores.actionRuns, scope)\n this.pipelineRuns = createOperationScopedFacade(stores.pipelineRuns, scope)\n this.workflowRuns = createWorkflowRunOperationScope(stores.workflowRuns, scope)\n this.workflowInterventions = createOperationScopedFacade(stores.workflowInterventions, scope)\n this.syncRuns = createOperationScopedFacade(stores.syncRuns, scope)\n this.projectionRuns = createOperationScopedFacade(stores.projectionRuns, scope)\n this.timeseries = createOperationScopedFacade(stores.timeseries, scope)\n this.webhookRuns = createOperationScopedFacade(stores.webhookRuns, scope)\n this.rules = createOperationScopedFacade(stores.rules, scope)\n this.connectorConnections = createOperationScopedFacade(stores.connectorConnections, scope)\n registerPostgresStorageTestingAdapter(this, (durationMs) =>\n stores.connectorConnections.advanceTimeForTesting(durationMs)\n )\n }\n\n async ping(): Promise<void> {\n this.assertRootOperationAvailable()\n await this.sql`SELECT 1`\n }\n\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n options: StorageTransactionOptions = {}\n ): Promise<T> {\n if (this.transactionScope.getStore()) {\n throwNestedStorageTransaction()\n }\n\n try {\n return await runPgTransaction(\n this.sql,\n async (client) => {\n let active = true\n const transactionContext: PgOntologyTransactionContext = {\n id: {},\n materializations: new ProviderMaterializationTransactionLifecycle(),\n active: true,\n }\n const txStorage = this.createTransactionStorage(client, transactionContext)\n const tx = createTransactionStorageProxy(txStorage, () => active)\n\n try {\n const result = await this.transactionScope.run(true, () => run(tx))\n transactionContext.materializations.assertCommittable()\n return result\n } finally {\n transactionContext.active = false\n txStorage.ontology.deactivateSessions()\n transactionContext.materializations.deactivate()\n active = false\n }\n },\n { isolation: options.isolation === \"serializable\" ? \"serializable\" : undefined }\n )\n } catch (error) {\n if (isRetryableTransactionConflict(error)) {\n throw new StorageTransactionError(\n \"[SixbPg] Storage transaction failed due to a serialization conflict or deadlock and may be retried.\",\n { cause: error, code: \"serialization_failure\" }\n )\n }\n throw error\n }\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.transactionScope.getStore()) return\n throw new StorageTransactionError(\n \"[SixbPg] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n /**\n * Close the connection pool. Should be called on shutdown.\n *\n * Stops accepting new queries and waits up to `shutdownTimeoutMillis` for in-flight\n * queries to finish before destroying connections.\n */\n async close(): Promise<void> {\n await this.sql.end({ timeout: this.shutdownTimeoutSeconds })\n }\n\n /**\n * Drop all Sixb tables and schema. Useful for test cleanup.\n * WARNING: This permanently deletes all data.\n */\n async dropSchema(): Promise<void> {\n await dropSchema(this.sql, this.schemaName)\n }\n\n private createTransactionStorage(\n client: PgStoreClient,\n transactionContext: PgOntologyTransactionContext\n ): Storage & { readonly ontology: PgOntologyStorage } {\n return {\n ...createPostgresStores(client, {\n runOntologyOperation: async (run) => run(client),\n transactionContext,\n }),\n ping: async () => {\n await client`SELECT 1`\n },\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n}\n\nfunction createPostgresStores(\n sql: PgStoreClient,\n options: {\n readonly runOntologyOperation: <T>(run: (sql: SQLClient) => Promise<T>) => Promise<T>\n readonly transactionContext: PgOntologyTransactionContext | null\n }\n): PostgresStoreSet {\n const auth = new PgAuthStorage({ sql })\n const executions = new PgExecutionStorage(sql, auth)\n return {\n objects: new PgObjectStorage(sql),\n ontology: new PgOntologyStorage({\n sql,\n runRootOperation: options.runOntologyOperation,\n transactionContext: options.transactionContext,\n }),\n auth,\n executions,\n agents: new PgAgentStorage({ sql, executions }),\n aiUsage: new PgAiUsageStorage(sql),\n actionRuns: new PgActionRunStorage(sql, executions),\n pipelineRuns: new PgPipelineRunStorage(sql, executions),\n workflowRuns: new PgWorkflowRunStorage(sql, executions),\n workflowInterventions: new PgWorkflowInterventionStorage(sql),\n syncRuns: new PgSyncRunStorage(sql, executions),\n projectionRuns: new PgProjectionRunStorage(sql, executions),\n timeseries: new PgTimeseriesStorage(sql),\n webhookRuns: new PgWebhookRunStorage(sql, executions),\n rules: new PgRulesStorage(sql),\n connectorConnections: new PgConnectorConnectionStorage(sql),\n }\n}\n\ninterface PostgresStoreSet {\n readonly objects: PgObjectStorage\n readonly ontology: PgOntologyStorage\n readonly auth: PgAuthStorage\n readonly executions: PgExecutionStorage\n readonly agents: PgAgentStorage\n readonly aiUsage: PgAiUsageStorage\n readonly actionRuns: PgActionRunStorage\n readonly pipelineRuns: PgPipelineRunStorage\n readonly workflowRuns: PgWorkflowRunStorage\n readonly workflowInterventions: PgWorkflowInterventionStorage\n readonly syncRuns: PgSyncRunStorage\n readonly projectionRuns: PgProjectionRunStorage\n readonly timeseries: PgTimeseriesStorage\n readonly webhookRuns: PgWebhookRunStorage\n readonly rules: PgRulesStorage\n readonly connectorConnections: PgConnectorConnectionStorage\n}\n\nfunction resolveTimeoutMillis(value: number | undefined, label: string): number | undefined {\n if (value === undefined) {\n return undefined\n }\n\n if (!Number.isFinite(value) || value < 0) {\n throw new Error(`[Sixb] PostgresStorage ${label} must be a non-negative finite number.`)\n }\n\n return Math.trunc(value)\n}\n\nexport { migratePostgresStorage } from \"./migrations\"\n",
|
|
6
|
-
"import {
|
|
5
|
+
"// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\n/// <reference path=\"./sql.d.ts\" />\n\nimport { AsyncLocalStorage } from \"node:async_hooks\"\nimport type {\n MigrationCapableStorage,\n Storage,\n StorageMigrator,\n StorageTransactionOptions,\n} from \"@sixb/core\"\nimport { ProviderMaterializationTransactionLifecycle } from \"@sixb/core/internal/ontology-storage-provider\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiUsageStorage,\n createTransactionStorageProxy,\n type ObjectStorage,\n StorageTransactionError,\n throwNestedStorageTransaction,\n} from \"@sixb/core/storage\"\nimport { PgAgentStorage } from \"./agents\"\nimport { PgAuthStorage } from \"./auth-storage\"\nimport { PgConnectorConnectionStorage } from \"./connector-connection-storage\"\nimport { createPostgresStorageMigrators, dropSchema } from \"./migrations\"\nimport { PgOntologyStorage, type PgOntologyTransactionContext } from \"./ontology-storage\"\nimport { PgActionRunStorage } from \"./pg-action-run-storage\"\nimport { PgAiCostStorage } from \"./pg-ai-cost-storage\"\nimport { PgAiUsageStorage } from \"./pg-ai-usage-storage\"\nimport { createPgClient, type SQL, type SQLClient } from \"./pg-client\"\nimport { PgExecutionStorage } from \"./pg-execution-storage\"\nimport { PgObjectStorage } from \"./pg-object-storage\"\nimport { PgPipelineRunStorage } from \"./pg-pipeline-run-storage\"\nimport { PgProjectionRunStorage } from \"./pg-projection-run-storage\"\nimport { PgRulesStorage } from \"./pg-rules-storage\"\nimport { PgSyncRunStorage } from \"./pg-sync-run-storage\"\nimport { PgTimeseriesStorage } from \"./pg-timeseries-storage\"\nimport { PgWebhookRunStorage } from \"./pg-webhook-run-storage\"\nimport { PgWorkflowInterventionStorage } from \"./pg-workflow-intervention-storage\"\nimport { PgWorkflowRunStorage } from \"./pg-workflow-run-storage\"\nimport { isRetryableTransactionConflict } from \"./storage-errors\"\nimport { registerPostgresStorageTestingAdapter } from \"./testing\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport interface PostgresStorageOptions {\n /** Full connection string (e.g. DATABASE_URL). Takes precedence over individual fields. */\n connectionString?: string\n\n /** PostgreSQL host. Defaults to 'localhost'. */\n host?: string\n /** PostgreSQL port. Defaults to 5432. */\n port?: number\n /** Database name. */\n database?: string\n /** Database user. */\n user?: string\n /** Database password. */\n password?: string\n\n /** Maximum number of connections in the pool. Defaults to 10. */\n max?: number\n /** Idle connection timeout in milliseconds. Defaults to 30000. */\n idleTimeoutMillis?: number\n\n /**\n * Server-side `statement_timeout` (ms) applied to every connection in the pool. A query\n * exceeding it is cancelled by PostgreSQL, which frees its pooled connection instead of\n * pinning it indefinitely. Without this, a single stalled query can starve a small pool\n * until the process is restarted. Unset by default (no timeout). Set per role — keep it\n * generous or unset for workers that run long migrations/bulk writes.\n */\n statementTimeoutMillis?: number\n /**\n * Server-side `idle_in_transaction_session_timeout` (ms) applied to every connection. A\n * transaction left open and idle beyond it is aborted by PostgreSQL, releasing the\n * connection. Unset by default (no timeout).\n */\n idleInTransactionSessionTimeoutMillis?: number\n\n /**\n * Grace period (ms) for {@link PostgresStorage.close}. On shutdown the pool stops\n * accepting new queries and waits up to this long for in-flight queries to finish before\n * destroying the connections, so a restart drains cleanly instead of severing live work.\n * Defaults to 5000.\n */\n shutdownTimeoutMillis?: number\n\n /** Seconds to wait when establishing a connection. Defaults to 10000. */\n connectTimeoutMillis?: number\n /**\n * Whether to use server-side prepared statements (porsager's default, faster against a\n * direct Postgres connection). Behind PgBouncer transaction mode they require PgBouncer\n * >= 1.21 with `max_prepared_statements > 0`; set `false` for an older PgBouncer or when\n * that setting is 0. Defaults to `true`.\n */\n prepare?: boolean\n\n /** PostgreSQL schema name for all Sixb tables. Defaults to 'sixb'. */\n schemaName?: string\n\n /** SSL configuration. */\n ssl?: boolean | \"require\" | \"prefer\"\n}\n\n/**\n * PostgreSQL storage provider for Sixb.\n *\n * Bundles Sixb storage adapters, including the AI accounting ledger, behind a shared PostgreSQL\n * connection pool (porsager `postgres`), which reliably reclaims connections under load.\n *\n * The storage exposes a core `StorageMigrator`. Sixb CLI startup and\n * `sixb db migrate` run it automatically through `migrateStorage(storage)`.\n *\n * Usage:\n * ```ts\n * const pg = new PostgresStorage({\n * connectionString: process.env.DATABASE_URL!,\n * })\n *\n * export const sixb = createSixb({\n * broker: myBroker,\n * storage: pg,\n * })\n * ```\n */\nexport class PostgresStorage implements MigrationCapableStorage {\n readonly objects: ObjectStorage\n readonly ontology: PgOntologyStorage\n readonly auth: PgAuthStorage\n readonly executions: PgExecutionStorage\n readonly agents: PgAgentStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly actionRuns: PgActionRunStorage\n readonly pipelineRuns: PgPipelineRunStorage\n readonly workflowRuns: PgWorkflowRunStorage\n readonly workflowInterventions: PgWorkflowInterventionStorage\n readonly syncRuns: PgSyncRunStorage\n readonly projectionRuns: PgProjectionRunStorage\n readonly timeseries: Storage[\"timeseries\"]\n readonly webhookRuns: PgWebhookRunStorage\n readonly rules: PgRulesStorage\n readonly connectorConnections: PgConnectorConnectionStorage\n readonly migrators: readonly StorageMigrator[]\n\n private readonly sql: SQL\n private readonly schemaName: string\n private readonly shutdownTimeoutSeconds: number\n private readonly transactionScope = new AsyncLocalStorage<boolean>()\n\n constructor(options: PostgresStorageOptions) {\n this.schemaName = options.schemaName ?? \"sixb\"\n this.shutdownTimeoutSeconds = Math.max(\n 1,\n Math.round((options.shutdownTimeoutMillis ?? 5000) / 1000)\n )\n\n this.sql = createPgClient({\n ...(options.connectionString !== undefined\n ? { connectionString: options.connectionString }\n : {}),\n ...(options.host !== undefined ? { host: options.host } : {}),\n ...(options.port !== undefined ? { port: options.port } : {}),\n ...(options.database !== undefined ? { database: options.database } : {}),\n ...(options.user !== undefined ? { user: options.user } : {}),\n ...(options.password !== undefined ? { password: options.password } : {}),\n max: options.max ?? 10,\n schemaName: this.schemaName,\n ...(options.idleTimeoutMillis !== undefined\n ? { idleTimeoutMillis: options.idleTimeoutMillis }\n : {}),\n ...(resolveTimeoutMillis(options.statementTimeoutMillis, \"statementTimeoutMillis\") !==\n undefined\n ? { statementTimeoutMillis: options.statementTimeoutMillis }\n : {}),\n ...(resolveTimeoutMillis(\n options.idleInTransactionSessionTimeoutMillis,\n \"idleInTransactionSessionTimeoutMillis\"\n ) !== undefined\n ? { idleInTransactionSessionTimeoutMillis: options.idleInTransactionSessionTimeoutMillis }\n : {}),\n ...(resolveTimeoutMillis(options.connectTimeoutMillis, \"connectTimeoutMillis\") !== undefined\n ? { connectTimeoutMillis: options.connectTimeoutMillis }\n : {}),\n ...(options.prepare !== undefined ? { prepare: options.prepare } : {}),\n ...(options.ssl !== undefined ? { ssl: options.ssl } : {}),\n })\n\n this.migrators = createPostgresStorageMigrators(this.sql, this.schemaName)\n const stores = createPostgresStores(this.sql, {\n runOntologyOperation: (run) => runPgTransaction(this.sql, run),\n transactionContext: null,\n })\n const scope = createStorageOperationScope(\n async (run) => {\n this.assertRootOperationAvailable()\n return run()\n },\n () => this.assertRootOperationAvailable()\n )\n this.objects = createOperationScopedFacade(stores.objects, scope)\n this.ontology = createOntologyOperationScope(stores.ontology, scope)\n this.auth = createAuthOperationScope(stores.auth, scope)\n this.executions = createOperationScopedFacade(stores.executions, scope)\n this.agents = createAgentOperationScope(stores.agents, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.aiCosts = createOperationScopedFacade(stores.aiCosts, scope)\n this.actionRuns = createOperationScopedFacade(stores.actionRuns, scope)\n this.pipelineRuns = createOperationScopedFacade(stores.pipelineRuns, scope)\n this.workflowRuns = createWorkflowRunOperationScope(stores.workflowRuns, scope)\n this.workflowInterventions = createOperationScopedFacade(stores.workflowInterventions, scope)\n this.syncRuns = createOperationScopedFacade(stores.syncRuns, scope)\n this.projectionRuns = createOperationScopedFacade(stores.projectionRuns, scope)\n this.timeseries = createOperationScopedFacade(stores.timeseries, scope)\n this.webhookRuns = createOperationScopedFacade(stores.webhookRuns, scope)\n this.rules = createOperationScopedFacade(stores.rules, scope)\n this.connectorConnections = createOperationScopedFacade(stores.connectorConnections, scope)\n registerPostgresStorageTestingAdapter(this, (durationMs) =>\n stores.connectorConnections.advanceTimeForTesting(durationMs)\n )\n }\n\n async ping(): Promise<void> {\n this.assertRootOperationAvailable()\n await this.sql`SELECT 1`\n }\n\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n options: StorageTransactionOptions = {}\n ): Promise<T> {\n if (this.transactionScope.getStore()) {\n throwNestedStorageTransaction()\n }\n\n try {\n return await runPgTransaction(\n this.sql,\n async (client) => {\n let active = true\n const transactionContext: PgOntologyTransactionContext = {\n id: {},\n materializations: new ProviderMaterializationTransactionLifecycle(),\n active: true,\n }\n const txStorage = this.createTransactionStorage(client, transactionContext)\n const tx = createTransactionStorageProxy(txStorage, () => active)\n\n try {\n const result = await this.transactionScope.run(true, () => run(tx))\n transactionContext.materializations.assertCommittable()\n return result\n } finally {\n transactionContext.active = false\n txStorage.ontology.deactivateSessions()\n transactionContext.materializations.deactivate()\n active = false\n }\n },\n { isolation: options.isolation === \"serializable\" ? \"serializable\" : undefined }\n )\n } catch (error) {\n if (isRetryableTransactionConflict(error)) {\n throw new StorageTransactionError(\n \"[SixbPg] Storage transaction failed due to a serialization conflict or deadlock and may be retried.\",\n { cause: error, code: \"serialization_failure\" }\n )\n }\n throw error\n }\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.transactionScope.getStore()) return\n throw new StorageTransactionError(\n \"[SixbPg] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n /**\n * Close the connection pool. Should be called on shutdown.\n *\n * Stops accepting new queries and waits up to `shutdownTimeoutMillis` for in-flight\n * queries to finish before destroying connections.\n */\n async close(): Promise<void> {\n await this.sql.end({ timeout: this.shutdownTimeoutSeconds })\n }\n\n /**\n * Drop all Sixb tables and schema. Useful for test cleanup.\n * WARNING: This permanently deletes all data.\n */\n async dropSchema(): Promise<void> {\n await dropSchema(this.sql, this.schemaName)\n }\n\n private createTransactionStorage(\n client: PgStoreClient,\n transactionContext: PgOntologyTransactionContext\n ): Storage & { readonly ontology: PgOntologyStorage } {\n return {\n ...createPostgresStores(client, {\n runOntologyOperation: async (run) => run(client),\n transactionContext,\n }),\n ping: async () => {\n await client`SELECT 1`\n },\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n}\n\nfunction createPostgresStores(\n sql: PgStoreClient,\n options: {\n readonly runOntologyOperation: <T>(run: (sql: SQLClient) => Promise<T>) => Promise<T>\n readonly transactionContext: PgOntologyTransactionContext | null\n }\n): PostgresStoreSet {\n const auth = new PgAuthStorage({ sql })\n const executions = new PgExecutionStorage(sql, auth)\n return {\n objects: new PgObjectStorage(sql),\n ontology: new PgOntologyStorage({\n sql,\n runRootOperation: options.runOntologyOperation,\n transactionContext: options.transactionContext,\n }),\n auth,\n executions,\n agents: new PgAgentStorage({ sql, executions }),\n aiUsage: new PgAiUsageStorage(sql),\n aiCosts: new PgAiCostStorage(sql),\n actionRuns: new PgActionRunStorage(sql, executions),\n pipelineRuns: new PgPipelineRunStorage(sql, executions),\n workflowRuns: new PgWorkflowRunStorage(sql, executions),\n workflowInterventions: new PgWorkflowInterventionStorage(sql),\n syncRuns: new PgSyncRunStorage(sql, executions),\n projectionRuns: new PgProjectionRunStorage(sql, executions),\n timeseries: new PgTimeseriesStorage(sql),\n webhookRuns: new PgWebhookRunStorage(sql, executions),\n rules: new PgRulesStorage(sql),\n connectorConnections: new PgConnectorConnectionStorage(sql),\n }\n}\n\ninterface PostgresStoreSet {\n readonly objects: PgObjectStorage\n readonly ontology: PgOntologyStorage\n readonly auth: PgAuthStorage\n readonly executions: PgExecutionStorage\n readonly agents: PgAgentStorage\n readonly aiUsage: PgAiUsageStorage\n readonly aiCosts: PgAiCostStorage\n readonly actionRuns: PgActionRunStorage\n readonly pipelineRuns: PgPipelineRunStorage\n readonly workflowRuns: PgWorkflowRunStorage\n readonly workflowInterventions: PgWorkflowInterventionStorage\n readonly syncRuns: PgSyncRunStorage\n readonly projectionRuns: PgProjectionRunStorage\n readonly timeseries: PgTimeseriesStorage\n readonly webhookRuns: PgWebhookRunStorage\n readonly rules: PgRulesStorage\n readonly connectorConnections: PgConnectorConnectionStorage\n}\n\nfunction resolveTimeoutMillis(value: number | undefined, label: string): number | undefined {\n if (value === undefined) {\n return undefined\n }\n\n if (!Number.isFinite(value) || value < 0) {\n throw new Error(`[Sixb] PostgresStorage ${label} must be a non-negative finite number.`)\n }\n\n return Math.trunc(value)\n}\n\nexport { migratePostgresStorage } from \"./migrations\"\n",
|
|
6
|
+
"import {\n agentContextCheckpointMatchesCreateInput,\n assertAgentContextCheckpointAnchors,\n assertAgentContextCheckpointAuthority,\n assertAgentContextCheckpointReplayState,\n assertCreateAgentContextCheckpointInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AgentContextCheckpointRecord,\n type AgentContextCheckpointStore,\n AgentStorageError,\n type CreateAgentContextCheckpointInput,\n} from \"@sixb/core/storage\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"../transactions\"\nimport {\n type AgentContextCheckpointRow,\n type AgentMessageRow,\n type AgentRunRow,\n type AgentThreadRow,\n rowToContextCheckpointRecord,\n rowToMessageRecord,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nexport class PgAgentContextCheckpointStore implements AgentContextCheckpointStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord> {\n assertCreateAgentContextCheckpointInput(input, \"SixbPg\")\n\n try {\n return await runPgTransaction(this.sql, async (tx) => {\n // Match run finalization's lock order (run, then thread) to avoid a cross-operation deadlock.\n const [runRow] = await tx<AgentRunRow[]>`\n SELECT * FROM agent_runs\n WHERE project_id = ${input.projectId} AND id = ${input.createdByRunId}\n FOR UPDATE\n `\n const [threadRow] = await tx<AgentThreadRow[]>`\n SELECT * FROM agent_threads\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n FOR UPDATE\n `\n assertAgentContextCheckpointAuthority({\n create: input,\n run: runRow ? rowToRunRecord(runRow) : null,\n thread: threadRow ? rowToThreadRecord(threadRow) : null,\n prefix: \"SixbPg\",\n })\n\n const [latestRow] = await tx<AgentContextCheckpointRow[]>`\n SELECT * FROM agent_context_checkpoints\n WHERE project_id = ${input.projectId} AND thread_id = ${input.threadId}\n ORDER BY summarized_through_seq DESC, created_at DESC, id DESC\n LIMIT 1\n `\n const latest = latestRow ? rowToContextCheckpointRecord(latestRow) : null\n const [headRow] = await tx<{ seq: number | string }[]>`\n SELECT COALESCE(MAX(seq), 0) AS seq FROM agent_messages\n WHERE project_id = ${input.projectId} AND thread_id = ${input.threadId}\n `\n const headSeq = Number(headRow?.seq ?? 0)\n\n const [existingForRunRow] = await tx<AgentContextCheckpointRow[]>`\n SELECT * FROM agent_context_checkpoints\n WHERE project_id = ${input.projectId} AND created_by_run_id = ${input.createdByRunId}\n `\n if (existingForRunRow) {\n const record = rowToContextCheckpointRecord(existingForRunRow)\n if (agentContextCheckpointMatchesCreateInput(record, input)) {\n assertAgentContextCheckpointReplayState({\n create: input,\n existing: record,\n latest,\n headSeq,\n prefix: \"SixbPg\",\n })\n return record\n }\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbPg] Agent run '${input.createdByRunId}' already created a different context checkpoint.`\n )\n }\n\n const [duplicateId] = await tx<{ present: number }[]>`\n SELECT 1 AS present FROM agent_context_checkpoints\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n `\n if (duplicateId) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Agent context checkpoint '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n const [firstRetainedRow] = await tx<AgentMessageRow[]>`\n SELECT * FROM agent_messages\n WHERE\n project_id = ${input.projectId}\n AND thread_id = ${input.threadId}\n AND seq > ${input.summarizedThroughSeq}\n ORDER BY seq ASC\n LIMIT 1\n `\n assertAgentContextCheckpointAnchors({\n create: input,\n latest,\n headSeq,\n firstRetained: firstRetainedRow ? rowToMessageRecord(firstRetainedRow) : null,\n prefix: \"SixbPg\",\n })\n\n const [row] = await tx<AgentContextCheckpointRow[]>`\n INSERT INTO agent_context_checkpoints (\n project_id,\n id,\n thread_id,\n created_by_run_id,\n previous_checkpoint_id,\n reason,\n summary,\n summary_format_version,\n summarized_through_seq,\n observed_head_seq,\n estimated_input_tokens_before,\n estimated_input_tokens_after,\n summary_model_id,\n created_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.threadId},\n ${input.createdByRunId},\n ${input.expectedPreviousCheckpointId},\n ${input.reason},\n ${input.summary},\n ${input.summaryFormatVersion},\n ${input.summarizedThroughSeq},\n ${input.observedHeadSeq},\n ${input.estimatedInputTokensBefore},\n ${input.estimatedInputTokensAfter},\n ${input.summaryModelId},\n ${input.createdAt ?? new Date()}\n )\n RETURNING *\n `\n return rowToContextCheckpointRecord(row)\n })\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Agent context checkpoint '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n throw error\n }\n }\n\n async getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null> {\n const [row] = await this.sql<AgentContextCheckpointRow[]>`\n SELECT * FROM agent_context_checkpoints\n WHERE project_id = ${input.projectId} AND thread_id = ${input.threadId}\n ORDER BY summarized_through_seq DESC, created_at DESC, id DESC\n LIMIT 1\n `\n return row ? rowToContextCheckpointRecord(row) : null\n }\n}\n",
|
|
7
7
|
"// Map thrown errors to their PostgreSQL/porsager meaning by code rather than by matching\n// message text. Database errors arrive in the native Postgres format with a SQLSTATE on\n// `.code`; connection-layer failures arrive with porsager's own codes or, for Node socket\n// errors, as an `AggregateError` of `ECONNREFUSED`/`ETIMEDOUT`/… entries.\n\n/** PostgreSQL SQLSTATE for a unique-constraint violation. */\nconst UNIQUE_VIOLATION = \"23505\"\n\n/**\n * PostgreSQL SQLSTATEs in class 40 (transaction rollback) that are transient and safe to retry by\n * replaying the whole transaction: `40001` (serialization_failure) and `40P01` (deadlock_detected).\n * Under `SERIALIZABLE` the server raises *either* — a serialization anomaly surfaces as `40001`,\n * while two transactions taking row locks in crossing order surface as `40P01` — and both clear on\n * a fresh attempt. The other class-40 codes (`40002` integrity-constraint violation, `40003`\n * statement-completion unknown) are deliberately excluded: they are not safe to blindly replay.\n */\nconst RETRYABLE_TRANSACTION_CONFLICT_CODES = new Set([\"40001\", \"40P01\"])\n\nconst CONNECTION_ERROR_CODES = new Set([\n // porsager-specific\n \"CONNECT_TIMEOUT\",\n \"CONNECTION_CLOSED\",\n \"CONNECTION_DESTROYED\",\n \"CONNECTION_ENDED\",\n // Node socket errors\n \"ECONNREFUSED\",\n \"ECONNRESET\",\n \"ETIMEDOUT\",\n \"ENOTFOUND\",\n \"EAI_AGAIN\",\n])\n\n/** The SQLSTATE / system error code carried by a thrown database or connection error. */\nexport function pgErrorCode(error: unknown): string | undefined {\n if (error instanceof Error) {\n const code = (error as { readonly code?: unknown }).code\n if (typeof code === \"string\") {\n return code\n }\n }\n return undefined\n}\n\n/** True when the error is a PostgreSQL unique-constraint violation (SQLSTATE 23505). */\nexport function isUniqueViolation(error: unknown): boolean {\n return pgErrorCode(error) === UNIQUE_VIOLATION\n}\n\n/**\n * True when the error is a transient transaction-rollback conflict that is safe to retry by\n * replaying the transaction — a serialization failure (SQLSTATE 40001) or a deadlock (40P01).\n * See {@link RETRYABLE_TRANSACTION_CONFLICT_CODES}.\n */\nexport function isRetryableTransactionConflict(error: unknown): boolean {\n const code = pgErrorCode(error)\n return code !== undefined && RETRYABLE_TRANSACTION_CONFLICT_CODES.has(code)\n}\n\n/**\n * True when the error originates from the connection layer (porsager connection codes, or a\n * Node socket failure surfaced as an `AggregateError`) rather than from a SQL statement.\n */\nexport function isConnectionError(error: unknown): boolean {\n const code = pgErrorCode(error)\n if (code !== undefined && CONNECTION_ERROR_CODES.has(code)) {\n return true\n }\n if (error instanceof AggregateError) {\n return error.errors.some(isConnectionError)\n }\n return false\n}\n",
|
|
8
8
|
"import { createHash } from \"node:crypto\"\nimport type { SQL, SQLClient } from \"./pg-client\"\n\nexport type PgStoreClient = SQL | SQLClient\n\nexport interface RunPgTransactionOptions {\n /** Open the transaction at `SERIALIZABLE`; omit for the server default (`READ COMMITTED`). */\n readonly isolation?: \"serializable\"\n}\n\nexport async function runPgTransaction<T>(\n sql: PgStoreClient,\n run: (tx: SQLClient) => Promise<T>,\n options: RunPgTransactionOptions = {}\n): Promise<T> {\n if (!canStartPgTransaction(sql)) {\n return run(sql)\n }\n\n // porsager passes the callback a transaction-scoped client (a TransactionSql, which is an\n // ISql == SQLClient). The `as Promise<T>` only unwraps porsager's UnwrapPromiseArray return\n // type (our callbacks never return the pipelined-array form), not a structural cast.\n //\n // The isolation level is folded into `BEGIN` (`BEGIN ISOLATION LEVEL SERIALIZABLE`) rather than\n // a separate `SET TRANSACTION` statement: one round-trip instead of two, and the level is\n // guaranteed to take effect before any data statement of the transaction runs.\n if (options.isolation === \"serializable\") {\n return sql.begin(\"isolation level serializable\", run) as Promise<T>\n }\n return sql.begin(run) as Promise<T>\n}\n\nexport function authLockKey(kind: string, ...parts: readonly string[]): string {\n return [\"auth\", kind, ...parts].join(\":\")\n}\n\nexport async function lockAdvisoryKeys(sql: SQLClient, keys: readonly string[]): Promise<void> {\n const locks = [...new Set(keys)].sort().map(advisoryLockParts)\n if (locks.length === 0) return\n\n await sql`\n SELECT pg_advisory_xact_lock(locks.first_key, locks.second_key)\n FROM unnest(\n ${sql.array(locks.map(([first]) => first))}::integer[],\n ${sql.array(locks.map(([, second]) => second))}::integer[]\n ) WITH ORDINALITY AS locks(first_key, second_key, lock_order)\n ORDER BY locks.lock_order\n `\n}\n\nfunction advisoryLockParts(key: string): readonly [number, number] {\n const hash = createHash(\"sha256\").update(key).digest()\n return [hash.readInt32BE(0), hash.readInt32BE(4)]\n}\n\nfunction canStartPgTransaction(sql: PgStoreClient): sql is SQL {\n return typeof (sql as { readonly begin?: unknown }).begin === \"function\"\n}\n",
|
|
9
|
-
"import type { AgentMessagePart, JsonValue, Principal } from \"@sixb/core\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentMessageRecord,\n type AgentRunDiagnostic,\n type AgentRunRecord,\n type AgentThreadRecord,\n coerceAgentRunFinishReason,\n} from \"@sixb/core/storage\"\nimport type { SQLClient, SqlParameter } from \"../pg-client\"\n\n// ── row shapes (porsager returns timestamptz as Date, jsonb parsed, int as number — typed loosely\n// to tolerate the string forms some drivers/poolers surface) ──────────────────────────────────\n\nexport interface AgentThreadRow {\n project_id: string\n id: string\n agent_id: string\n owner_principal_type: Principal[\"type\"]\n owner_principal_id: string\n title: string | null\n status: AgentThreadRecord[\"status\"]\n active_run_id: string | null\n last_message_at: Date | string | null\n message_count: number | string\n created_at: Date | string\n updated_at: Date | string\n}\n\nexport interface AgentRunRow {\n project_id: string\n id: string\n execution_id: string\n thread_id: string\n agent_id: string\n trigger_message_id: string\n requester_group_ids: string[] | string\n status: AgentRunRecord[\"status\"]\n model_id: string | null\n finish_reason: string | null\n error: JsonValue | null\n diagnostics: AgentRunDiagnostic[] | string | null\n attempt: number | string\n execution_token: string | null\n execution_queue_lease_expires_at: Date | string | null\n created_at: Date | string\n started_at: Date | string | null\n completed_at: Date | string | null\n}\n\nexport interface AgentMessageRow {\n project_id: string\n id: string\n thread_id: string\n run_id: string | null\n role: AgentMessageRecord[\"role\"]\n author_principal_type: Principal[\"type\"] | null\n author_principal_id: string | null\n seq: number | string\n parts: AgentMessagePart[] | string\n metadata: unknown\n content_version: number | string\n created_at: Date | string\n completed_at: Date | string | null\n}\n\n// ── row → record mappers ────────────────────────────────────────────────────────────────────────\n\nexport function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n agentId: row.agent_id,\n ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },\n title: row.title ?? undefined,\n status: row.status,\n activeRunId: row.active_run_id,\n lastMessageAt: row.last_message_at ? new Date(row.last_message_at) : undefined,\n messageCount: Number(row.message_count),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToRunRecord(row: AgentRunRow): AgentRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n threadId: row.thread_id,\n agentId: row.agent_id,\n triggerMessageId: row.trigger_message_id,\n requesterGroupIds:\n typeof row.requester_group_ids === \"string\"\n ? (JSON.parse(row.requester_group_ids) as string[])\n : row.requester_group_ids,\n status: row.status,\n modelId: row.model_id ?? undefined,\n finishReason: coerceAgentRunFinishReason(row.finish_reason),\n error: row.error === null ? undefined : parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES),\n diagnostics: normalizeDiagnostics(row.diagnostics),\n attempt: Number(row.attempt),\n execution:\n row.execution_token && row.execution_queue_lease_expires_at\n ? {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n }\n : undefined,\n createdAt: new Date(row.created_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nexport function rowToMessageRecord(row: AgentMessageRow): AgentMessageRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n runId: row.run_id,\n role: row.role,\n authorPrincipal: principalFromColumns(row.author_principal_type, row.author_principal_id),\n seq: Number(row.seq),\n parts:\n typeof row.parts === \"string\" ? (JSON.parse(row.parts) as AgentMessagePart[]) : row.parts,\n // A null/absent column and an explicit JSON `null` both mean \"no metadata\" — jsonb cannot tell\n // SQL NULL from a json null on read, so both backends normalise to `undefined` for parity.\n metadata: normalizeMetadata(row.metadata),\n contentVersion: Number(row.content_version),\n createdAt: new Date(row.created_at),\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nfunction principalFromColumns(\n type: Principal[\"type\"] | null | undefined,\n id: string | null | undefined\n): Principal | undefined {\n return type && id ? { type, id } : undefined\n}\n\nfunction normalizeMetadata(value: unknown): AgentMessageRecord[\"metadata\"] {\n if (value === null || value === undefined) {\n return undefined\n }\n const parsed = typeof value === \"string\" ? JSON.parse(value) : value\n return parsed === null ? undefined : (parsed as AgentMessageRecord[\"metadata\"])\n}\n\nfunction normalizeDiagnostics(\n value: AgentRunRow[\"diagnostics\"]\n): readonly AgentRunDiagnostic[] | undefined {\n if (value === null) {\n return undefined\n }\n return typeof value === \"string\" ? (JSON.parse(value) as AgentRunDiagnostic[]) : value\n}\n\n// ── offset pagination (threads / messages order by their own column, not started_at) ─────────────\n\nexport async function queryAgentList<TRow>(input: {\n readonly sql: SQLClient\n readonly table: \"agent_threads\" | \"agent_messages\"\n readonly whereClauses: readonly string[]\n readonly params: readonly SqlParameter[]\n readonly nextIndex: number\n readonly orderBy: string\n readonly limit?: number\n readonly offset?: number\n}): Promise<{ readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean }> {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const offset = input.offset ?? 0\n\n const [totalRow] = await input.sql.unsafe<{ count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM ${input.table} ${where}`,\n [...input.params] as SqlParameter[]\n )\n\n const queryParams = [...input.params] as SqlParameter[]\n let query = `SELECT * FROM ${input.table} ${where} ORDER BY ${input.orderBy}`\n let nextIndex = input.nextIndex\n\n if (input.limit !== undefined) {\n query += ` LIMIT $${nextIndex++} OFFSET $${nextIndex++}`\n queryParams.push(input.limit, offset)\n } else if (offset > 0) {\n query += ` OFFSET $${nextIndex++}`\n queryParams.push(offset)\n }\n\n const rows = await input.sql.unsafe<TRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n return { rows, total, hasMore: offset + rows.length < total }\n}\n",
|
|
9
|
+
"import type { AgentMessagePart, JsonValue, Principal } from \"@sixb/core\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentContextCheckpointRecord,\n type AgentMessageRecord,\n type AgentRunDiagnostic,\n type AgentRunRecord,\n type AgentThreadRecord,\n coerceAgentRunFinishReason,\n} from \"@sixb/core/storage\"\nimport type { SQLClient, SqlParameter } from \"../pg-client\"\n\n// ── row shapes (porsager returns timestamptz as Date, jsonb parsed, int as number — typed loosely\n// to tolerate the string forms some drivers/poolers surface) ──────────────────────────────────\n\nexport interface AgentThreadRow {\n project_id: string\n id: string\n agent_id: string\n owner_principal_type: Principal[\"type\"]\n owner_principal_id: string\n title: string | null\n status: AgentThreadRecord[\"status\"]\n active_run_id: string | null\n last_message_at: Date | string | null\n message_count: number | string\n created_at: Date | string\n updated_at: Date | string\n}\n\nexport interface AgentRunRow {\n project_id: string\n id: string\n execution_id: string\n thread_id: string\n agent_id: string\n trigger_message_id: string\n requester_group_ids: string[] | string\n status: AgentRunRecord[\"status\"]\n model_id: string | null\n finish_reason: string | null\n error: JsonValue | null\n diagnostics: AgentRunDiagnostic[] | string | null\n attempt: number | string\n execution_token: string | null\n execution_queue_lease_expires_at: Date | string | null\n created_at: Date | string\n started_at: Date | string | null\n completed_at: Date | string | null\n}\n\nexport interface AgentMessageRow {\n project_id: string\n id: string\n thread_id: string\n run_id: string | null\n role: AgentMessageRecord[\"role\"]\n author_principal_type: Principal[\"type\"] | null\n author_principal_id: string | null\n seq: number | string\n parts: AgentMessagePart[] | string\n metadata: unknown\n content_version: number | string\n created_at: Date | string\n completed_at: Date | string | null\n}\n\nexport interface AgentContextCheckpointRow {\n project_id: string\n id: string\n thread_id: string\n created_by_run_id: string\n previous_checkpoint_id: string | null\n reason: AgentContextCheckpointRecord[\"reason\"]\n summary: string\n summary_format_version: number | string\n summarized_through_seq: number | string\n observed_head_seq: number | string\n estimated_input_tokens_before: number | string\n estimated_input_tokens_after: number | string\n summary_model_id: string\n created_at: Date | string\n}\n\n// ── row → record mappers ────────────────────────────────────────────────────────────────────────\n\nexport function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n agentId: row.agent_id,\n ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },\n title: row.title ?? undefined,\n status: row.status,\n activeRunId: row.active_run_id,\n lastMessageAt: row.last_message_at ? new Date(row.last_message_at) : undefined,\n messageCount: Number(row.message_count),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToRunRecord(row: AgentRunRow): AgentRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n threadId: row.thread_id,\n agentId: row.agent_id,\n triggerMessageId: row.trigger_message_id,\n requesterGroupIds:\n typeof row.requester_group_ids === \"string\"\n ? (JSON.parse(row.requester_group_ids) as string[])\n : row.requester_group_ids,\n status: row.status,\n modelId: row.model_id ?? undefined,\n finishReason: coerceAgentRunFinishReason(row.finish_reason),\n error: row.error === null ? undefined : parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES),\n diagnostics: normalizeDiagnostics(row.diagnostics),\n attempt: Number(row.attempt),\n execution:\n row.execution_token && row.execution_queue_lease_expires_at\n ? {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n }\n : undefined,\n createdAt: new Date(row.created_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nexport function rowToMessageRecord(row: AgentMessageRow): AgentMessageRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n runId: row.run_id,\n role: row.role,\n authorPrincipal: principalFromColumns(row.author_principal_type, row.author_principal_id),\n seq: Number(row.seq),\n parts:\n typeof row.parts === \"string\" ? (JSON.parse(row.parts) as AgentMessagePart[]) : row.parts,\n // A null/absent column and an explicit JSON `null` both mean \"no metadata\" — jsonb cannot tell\n // SQL NULL from a json null on read, so both backends normalise to `undefined` for parity.\n metadata: normalizeMetadata(row.metadata),\n contentVersion: Number(row.content_version),\n createdAt: new Date(row.created_at),\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nexport function rowToContextCheckpointRecord(\n row: AgentContextCheckpointRow\n): AgentContextCheckpointRecord {\n const summaryFormatVersion = Number(row.summary_format_version)\n if (summaryFormatVersion !== 1) {\n throw new Error(\n `[SixbPg] Unsupported agent context checkpoint summary format version '${summaryFormatVersion}'.`\n )\n }\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n createdByRunId: row.created_by_run_id,\n previousCheckpointId: row.previous_checkpoint_id ?? undefined,\n reason: row.reason,\n summary: row.summary,\n summaryFormatVersion: 1,\n summarizedThroughSeq: Number(row.summarized_through_seq),\n observedHeadSeq: Number(row.observed_head_seq),\n estimatedInputTokensBefore: Number(row.estimated_input_tokens_before),\n estimatedInputTokensAfter: Number(row.estimated_input_tokens_after),\n summaryModelId: row.summary_model_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction principalFromColumns(\n type: Principal[\"type\"] | null | undefined,\n id: string | null | undefined\n): Principal | undefined {\n return type && id ? { type, id } : undefined\n}\n\nfunction normalizeMetadata(value: unknown): AgentMessageRecord[\"metadata\"] {\n if (value === null || value === undefined) {\n return undefined\n }\n const parsed = typeof value === \"string\" ? JSON.parse(value) : value\n return parsed === null ? undefined : (parsed as AgentMessageRecord[\"metadata\"])\n}\n\nfunction normalizeDiagnostics(\n value: AgentRunRow[\"diagnostics\"]\n): readonly AgentRunDiagnostic[] | undefined {\n if (value === null) {\n return undefined\n }\n return typeof value === \"string\" ? (JSON.parse(value) as AgentRunDiagnostic[]) : value\n}\n\n// ── offset pagination (threads / messages order by their own column, not started_at) ─────────────\n\nexport async function queryAgentList<TRow>(input: {\n readonly sql: SQLClient\n readonly table: \"agent_threads\" | \"agent_messages\"\n readonly whereClauses: readonly string[]\n readonly params: readonly SqlParameter[]\n readonly nextIndex: number\n readonly orderBy: string\n readonly limit?: number\n readonly offset?: number\n}): Promise<{ readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean }> {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const offset = input.offset ?? 0\n\n const [totalRow] = await input.sql.unsafe<{ count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM ${input.table} ${where}`,\n [...input.params] as SqlParameter[]\n )\n\n const queryParams = [...input.params] as SqlParameter[]\n let query = `SELECT * FROM ${input.table} ${where} ORDER BY ${input.orderBy}`\n let nextIndex = input.nextIndex\n\n if (input.limit !== undefined) {\n query += ` LIMIT $${nextIndex++} OFFSET $${nextIndex++}`\n queryParams.push(input.limit, offset)\n } else if (offset > 0) {\n query += ` OFFSET $${nextIndex++}`\n queryParams.push(offset)\n }\n\n const rows = await input.sql.unsafe<TRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n return { rows, total, hasMore: offset + rows.length < total }\n}\n",
|
|
10
|
+
"import { AGENT_MESSAGE_CONTENT_VERSION } from \"@sixb/core/internal/agents\"\nimport {\n type AgentMessageRecord,\n type AgentMessageStore,\n AgentStorageError,\n type AppendAgentMessageInput,\n type DeleteAgentMessagesByRunInput,\n type ListAgentMessagesInput,\n type ListAgentMessagesResult,\n} from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"../transactions\"\nimport { type AgentMessageRow, queryAgentList, rowToMessageRecord } from \"./rows\"\n\nexport class PgAgentMessageStore implements AgentMessageStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async append(input: AppendAgentMessageInput): Promise<AgentMessageRecord> {\n const createdAt = input.createdAt ?? new Date()\n\n try {\n return await runPgTransaction(this.sql, async (tx) => {\n // Assistant finalization appends and finishes in one outer transaction. Lock its run first\n // so every operation that needs both rows follows the same run -> thread order.\n if (input.runId !== null) {\n const [run] = await tx<{ id: string }[]>`\n SELECT id FROM agent_runs\n WHERE project_id = ${input.projectId} AND id = ${input.runId}\n FOR UPDATE\n `\n\n if (!run) {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbPg] Agent run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n }\n\n const [thread] = await tx<{ id: string }[]>`\n SELECT id FROM agent_threads\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n FOR UPDATE\n `\n\n if (!thread) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbPg] Agent thread '${input.threadId}' not found for project '${input.projectId}'.`\n )\n }\n\n const [seqRow] = await tx<{ next: number | string }[]>`\n SELECT COALESCE(MAX(seq), 0) + 1 AS next FROM agent_messages\n WHERE project_id = ${input.projectId} AND thread_id = ${input.threadId}\n `\n\n const [row] = await tx<AgentMessageRow[]>`\n INSERT INTO agent_messages (\n project_id,\n id,\n thread_id,\n run_id,\n role,\n author_principal_type,\n author_principal_id,\n seq,\n parts,\n metadata,\n content_version,\n created_at,\n completed_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.threadId},\n ${input.runId},\n ${input.role},\n ${input.authorPrincipal?.type ?? null},\n ${input.authorPrincipal?.id ?? null},\n ${Number(seqRow.next)},\n ${JSON.stringify(input.parts)}::text::jsonb,\n ${input.metadata === undefined ? null : JSON.stringify(input.metadata)}::text::jsonb,\n ${AGENT_MESSAGE_CONTENT_VERSION},\n ${createdAt},\n ${input.completedAt ?? null}\n )\n RETURNING *\n `\n\n await tx`\n UPDATE agent_threads\n SET message_count = message_count + 1, last_message_at = ${createdAt}, updated_at = ${createdAt}\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n `\n\n return rowToMessageRecord(row)\n })\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Agent message '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n async deleteByRunId(input: DeleteAgentMessagesByRunInput): Promise<number> {\n return runPgTransaction(this.sql, async (tx) => {\n const [thread] = await tx<{ id: string }[]>`\n SELECT id FROM agent_threads\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n FOR UPDATE\n `\n\n if (!thread) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbPg] Agent thread '${input.threadId}' not found for project '${input.projectId}'.`\n )\n }\n\n const deleted = await tx<{ id: string }[]>`\n DELETE FROM agent_messages\n WHERE project_id = ${input.projectId}\n AND thread_id = ${input.threadId}\n AND run_id = ${input.runId}\n RETURNING id\n `\n if (deleted.length === 0) {\n return 0\n }\n\n const updatedAt = new Date()\n await tx`\n UPDATE agent_threads\n SET\n message_count = (\n SELECT COUNT(*) FROM agent_messages\n WHERE project_id = ${input.projectId} AND thread_id = ${input.threadId}\n ),\n last_message_at = (\n SELECT created_at FROM agent_messages\n WHERE project_id = ${input.projectId} AND thread_id = ${input.threadId}\n ORDER BY seq DESC\n LIMIT 1\n ),\n updated_at = ${updatedAt}\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n `\n\n return deleted.length\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentMessageRecord | null> {\n const [row] = await this.sql<AgentMessageRow[]>`\n SELECT * FROM agent_messages WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToMessageRecord(row) : null\n }\n\n async list(input: ListAgentMessagesInput): Promise<ListAgentMessagesResult> {\n if (input.roles !== undefined && input.roles.length === 0) {\n return { messages: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = $1\", \"thread_id = $2\"]\n const params: SqlParameter[] = [input.projectId, input.threadId]\n let index = 3\n\n if (input.afterSeq !== undefined) {\n whereClauses.push(`seq > $${index++}`)\n params.push(input.afterSeq)\n }\n\n if (input.roles) {\n const placeholders = input.roles.map(() => `$${index++}`)\n whereClauses.push(`role IN (${placeholders.join(\", \")})`)\n params.push(...input.roles)\n }\n\n const dir = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const { rows, total, hasMore } = await queryAgentList<AgentMessageRow>({\n sql: this.sql,\n table: \"agent_messages\",\n whereClauses,\n params,\n nextIndex: index,\n orderBy: `seq ${dir}`,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { messages: rows.map(rowToMessageRecord), hasMore, total }\n }\n}\n",
|
|
10
11
|
"import { assertAgentRunExecution } from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { normalizeRequesterGroupIds } from \"@sixb/core/internal/auth\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentRunRecord,\n type AgentRunStore,\n AgentStorageError,\n type ConfirmAgentRunExecutionOwnershipInput,\n type CreateAgentRunInput,\n type ExecutionStorage,\n type FinishAgentRunInput,\n type FinishQueuedAgentRunInput,\n type ListAgentRunsInput,\n type ListAgentRunsResult,\n type ReclaimAgentRunInput,\n type StartAgentRunInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient, SqlParameter } from \"../pg-client\"\nimport { appendRunListFilters, hasEmptyStatuses, queryRunList } from \"../run-list-query\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"../transactions\"\nimport { type AgentRunRow, rowToRunRecord } from \"./rows\"\n\nconst PG_RUN_ID_BATCH_SIZE = 10_000\n\nexport class PgAgentRunStore implements AgentRunStore {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateAgentRunInput): Promise<AgentRunRecord> {\n const createdAt = input.createdAt ?? new Date()\n await assertAgentRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n agentId: input.agentId,\n })\n\n try {\n return await runPgTransaction(this.sql, async (tx) => {\n const [thread] = await tx<{ active_run_id: string | null }[]>`\n SELECT active_run_id FROM agent_threads\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n FOR UPDATE\n `\n\n if (!thread) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbPg] Agent thread '${input.threadId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (thread.active_run_id !== null) {\n throw new AgentStorageError(\n \"active_run_exists\",\n `[SixbPg] Agent thread '${input.threadId}' already has an active run '${thread.active_run_id}'.`\n )\n }\n\n const [row] = await tx<AgentRunRow[]>`\n INSERT INTO agent_runs (\n project_id,\n id,\n execution_id,\n thread_id,\n agent_id,\n trigger_message_id,\n requester_group_ids,\n status,\n attempt,\n created_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.executionId},\n ${input.threadId},\n ${input.agentId},\n ${input.triggerMessageId},\n ${JSON.stringify(normalizeRequesterGroupIds(input.requesterGroupIds))}::text::jsonb,\n ${\"queued\"},\n ${0},\n ${createdAt}\n )\n RETURNING *\n `\n\n await tx`\n UPDATE agent_threads SET active_run_id = ${input.id}, updated_at = ${createdAt}\n WHERE project_id = ${input.projectId} AND id = ${input.threadId}\n `\n\n return rowToRunRecord(row)\n })\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Agent run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n async start(input: StartAgentRunInput): Promise<AgentRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n return runPgTransaction(this.sql, async (tx) => {\n await this.lockStatus(tx, input.projectId, input.id, \"queued\")\n const [row] = await tx<AgentRunRow[]>`\n UPDATE agent_runs\n SET\n status = ${\"running\"},\n model_id = ${input.modelId ?? null},\n attempt = ${1},\n execution_token = ${input.execution.token},\n execution_queue_lease_expires_at = ${input.execution.queueLeaseExpiresAt},\n started_at = ${startedAt}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n return rowToRunRecord(row)\n })\n }\n\n async finishQueued(input: FinishQueuedAgentRunInput): Promise<AgentRunRecord> {\n const completedAt = input.completedAt ?? new Date()\n return runPgTransaction(this.sql, async (tx) => {\n const run = await this.lockStatus(tx, input.projectId, input.id, \"queued\")\n const [row] = await tx<AgentRunRow[]>`\n UPDATE agent_runs\n SET\n status = ${input.status},\n error = ${input.error === undefined ? null : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES)}::text::jsonb,\n completed_at = ${completedAt}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n await this.releaseThread(tx, run, completedAt)\n return rowToRunRecord(row)\n })\n }\n\n async reclaim(input: ReclaimAgentRunInput): Promise<AgentRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await this.lockRunning(tx, input.projectId, input.id)\n const [row] = await tx<AgentRunRow[]>`\n UPDATE agent_runs\n SET\n attempt = attempt + 1,\n execution_token = ${input.execution.token},\n execution_queue_lease_expires_at = ${input.execution.queueLeaseExpiresAt}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToRunRecord(row)\n })\n }\n\n async confirmExecutionOwnership(\n input: ConfirmAgentRunExecutionOwnershipInput\n ): Promise<AgentRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const run = await this.lockRunning(tx, input.projectId, input.id)\n if (run.execution_token !== input.executionToken) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbPg] Execution token is no longer current on agent run '${input.id}'.`\n )\n }\n\n const [row] = await tx<AgentRunRow[]>`\n UPDATE agent_runs\n SET execution_queue_lease_expires_at = GREATEST(\n execution_queue_lease_expires_at,\n ${input.queueLeaseExpiresAt}\n )\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n return rowToRunRecord(row)\n })\n }\n\n async finish(input: FinishAgentRunInput): Promise<AgentRunRecord> {\n const completedAt = input.completedAt ?? new Date()\n const errorValue =\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES)\n\n return runPgTransaction(this.sql, async (tx) => {\n const run = await this.lockRunning(tx, input.projectId, input.id)\n\n if (run.execution_token !== input.executionToken) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbPg] Execution token is no longer current on agent run '${input.id}'.`\n )\n }\n\n const [row] = await tx<AgentRunRow[]>`\n UPDATE agent_runs\n SET\n status = ${input.status},\n model_id = COALESCE(${input.modelId ?? null}, model_id),\n finish_reason = ${input.finishReason ?? null},\n error = ${errorValue}::text::jsonb,\n diagnostics = ${input.diagnostics === undefined ? null : JSON.stringify(input.diagnostics)}::text::jsonb,\n execution_token = ${null},\n execution_queue_lease_expires_at = ${null},\n completed_at = ${completedAt}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n await this.releaseThread(tx, run, completedAt)\n\n return rowToRunRecord(row)\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentRunRecord | null> {\n const [row] = await this.sql<AgentRunRow[]>`\n SELECT * FROM agent_runs WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToRunRecord(row) : null\n }\n\n async getByIds(params: {\n projectId: string\n ids: readonly string[]\n }): Promise<readonly AgentRunRecord[]> {\n const ids = [...new Set(params.ids)]\n if (ids.length === 0) {\n return []\n }\n\n const rows: AgentRunRow[] = []\n for (let offset = 0; offset < ids.length; offset += PG_RUN_ID_BATCH_SIZE) {\n const batch = ids.slice(offset, offset + PG_RUN_ID_BATCH_SIZE)\n const placeholders = batch.map((_, index) => `$${index + 2}`).join(\", \")\n rows.push(\n ...(await this.sql.unsafe<AgentRunRow[]>(\n `SELECT * FROM agent_runs WHERE project_id = $1 AND id IN (${placeholders})`,\n [params.projectId, ...batch] as SqlParameter[]\n ))\n )\n }\n const byId = new Map(rows.map((row) => [row.id, rowToRunRecord(row)]))\n return ids.flatMap((id) => {\n const run = byId.get(id)\n return run ? [run] : []\n })\n }\n\n async list(input: ListAgentRunsInput): Promise<ListAgentRunsResult> {\n if (hasEmptyStatuses(input)) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n\n if (input.threadId) {\n whereClauses.push(`thread_id = $${index++}`)\n params.push(input.threadId)\n }\n\n if (input.agentId) {\n whereClauses.push(`agent_id = $${index++}`)\n params.push(input.agentId)\n }\n\n index = appendRunListFilters(\n whereClauses,\n params,\n index,\n input,\n \"COALESCE(started_at, created_at)\"\n )\n\n const { rows, total, hasMore } = await queryRunList<AgentRunRow>({\n sql: this.sql,\n tableName: \"agent_runs\",\n whereClauses,\n params,\n nextIndex: index,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { runs: rows.map(rowToRunRecord), hasMore, total }\n }\n\n private lockRunning(sql: SQLClient, projectId: string, id: string): Promise<AgentRunRow> {\n return this.lockStatus(sql, projectId, id, \"running\")\n }\n\n private async lockStatus(\n sql: SQLClient,\n projectId: string,\n id: string,\n status: AgentRunRecord[\"status\"]\n ): Promise<AgentRunRow> {\n const [row] = await sql<AgentRunRow[]>`\n SELECT * FROM agent_runs\n WHERE project_id = ${projectId} AND id = ${id}\n FOR UPDATE\n `\n\n if (!row) {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbPg] Agent run '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.status !== status) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbPg] Agent run '${id}' is not ${status} (status '${row.status}').`\n )\n }\n\n return row\n }\n\n private async releaseThread(sql: SQLClient, run: AgentRunRow, completedAt: Date): Promise<void> {\n await sql`\n UPDATE agent_threads SET active_run_id = ${null}, updated_at = ${completedAt}\n WHERE project_id = ${run.project_id} AND id = ${run.thread_id} AND active_run_id = ${run.id}\n `\n }\n}\n",
|
|
11
12
|
"import type { SQLClient, SqlParameter } from \"./pg-client\"\n\ntype PgRunListTable =\n | \"agent_runs\"\n | \"pipeline_runs\"\n | \"pipeline_step_runs\"\n | \"sync_runs\"\n | \"webhook_runs\"\n | \"workflow_runs\"\n | \"workflow_node_runs\"\n | \"workflow_agent_node_runs\"\n\n/** Column projection — `sync_runs` needs the derived `checkpoint_present` flag. */\ntype PgRunListSelectList = \"*\" | \"*, checkpoint IS NOT NULL AS checkpoint_present\"\ntype StartedAtExpression =\n | \"started_at\"\n | \"COALESCE(started_at, created_at)\"\n | \"COALESCE(started_at, queued_at)\"\n\nexport function hasEmptyStatuses(input: { readonly statuses?: readonly unknown[] }): boolean {\n return input.statuses !== undefined && input.statuses.length === 0\n}\n\nexport function appendRunListFilters(\n whereClauses: string[],\n params: unknown[],\n index: number,\n input: {\n readonly statuses?: readonly string[]\n readonly startedAfter?: Date\n readonly startedBefore?: Date\n },\n startedAtExpression: StartedAtExpression = \"started_at\"\n): number {\n let nextIndex = index\n\n if (input.statuses) {\n if (input.statuses.length === 0) {\n whereClauses.push(\"1 = 0\")\n } else {\n const placeholders = input.statuses.map(() => `$${nextIndex++}`)\n whereClauses.push(`status IN (${placeholders.join(\", \")})`)\n params.push(...input.statuses)\n }\n }\n\n if (input.startedAfter) {\n whereClauses.push(`${startedAtExpression} >= $${nextIndex++}`)\n params.push(input.startedAfter)\n }\n\n if (input.startedBefore) {\n whereClauses.push(`${startedAtExpression} <= $${nextIndex++}`)\n params.push(input.startedBefore)\n }\n\n return nextIndex\n}\n\nexport async function queryRunList<TRow>(input: {\n readonly sql: SQLClient\n readonly tableName: PgRunListTable\n readonly whereClauses: readonly string[]\n readonly params: readonly unknown[]\n readonly nextIndex: number\n readonly order?: \"asc\" | \"desc\"\n readonly limit?: number\n readonly offset?: number\n readonly selectList?: PgRunListSelectList\n}): Promise<{ readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean }> {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n\n const [totalRow] = await input.sql.unsafe<{ count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM ${input.tableName} ${where}`,\n [...input.params] as SqlParameter[]\n )\n\n const queryParams = [...input.params] as SqlParameter[]\n const orderColumn =\n input.tableName === \"agent_runs\"\n ? \"COALESCE(started_at, created_at)\"\n : input.tableName === \"sync_runs\" || input.tableName === \"pipeline_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : input.tableName === \"workflow_agent_node_runs\"\n ? \"created_at\"\n : \"started_at\"\n const idColumn = input.tableName === \"workflow_agent_node_runs\" ? \"node_run_id\" : \"id\"\n let query = `\n SELECT ${input.selectList ?? \"*\"} FROM ${input.tableName}\n ${where}\n ORDER BY ${orderColumn} ${order}, ${idColumn} ${order}\n `\n let nextIndex = input.nextIndex\n\n if (input.limit !== undefined) {\n query += ` LIMIT $${nextIndex++} OFFSET $${nextIndex++}`\n queryParams.push(input.limit, offset)\n } else if (offset > 0) {\n query += ` OFFSET $${nextIndex++}`\n queryParams.push(offset)\n }\n\n const rows = await input.sql.unsafe<TRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n\n return {\n rows,\n total,\n hasMore: offset + rows.length < total,\n }\n}\n",
|
|
12
13
|
"import {\n AgentStorageError,\n type AgentThreadRecord,\n type AgentThreadStore,\n type CreateAgentThreadInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n} from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport type { PgStoreClient } from \"../transactions\"\nimport { type AgentThreadRow, queryAgentList, rowToThreadRecord } from \"./rows\"\n\nexport class PgAgentThreadStore implements AgentThreadStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateAgentThreadInput): Promise<AgentThreadRecord> {\n const createdAt = input.createdAt ?? new Date()\n const updatedAt = input.updatedAt ?? createdAt\n\n try {\n const [row] = await this.sql<AgentThreadRow[]>`\n INSERT INTO agent_threads (\n project_id,\n id,\n agent_id,\n owner_principal_type,\n owner_principal_id,\n title,\n status,\n created_at,\n updated_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.agentId},\n ${input.ownerPrincipal.type},\n ${input.ownerPrincipal.id},\n ${input.title ?? null},\n ${input.status ?? \"active\"},\n ${createdAt},\n ${updatedAt}\n )\n RETURNING *\n `\n\n return rowToThreadRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Agent thread '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentThreadRecord | null> {\n const [row] = await this.sql<AgentThreadRow[]>`\n SELECT * FROM agent_threads WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToThreadRecord(row) : null\n }\n\n async list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult> {\n if (\n (input.statuses !== undefined && input.statuses.length === 0) ||\n (input.agentIds !== undefined && input.agentIds.length === 0)\n ) {\n return { threads: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n\n if (input.agentId) {\n whereClauses.push(`agent_id = $${index++}`)\n params.push(input.agentId)\n }\n\n if (input.agentIds) {\n const placeholders = input.agentIds.map(() => `$${index++}`)\n whereClauses.push(`agent_id IN (${placeholders.join(\", \")})`)\n params.push(...input.agentIds)\n }\n\n if (input.statuses) {\n const placeholders = input.statuses.map(() => `$${index++}`)\n whereClauses.push(`status IN (${placeholders.join(\", \")})`)\n params.push(...input.statuses)\n }\n\n if (input.ownerPrincipal) {\n whereClauses.push(`owner_principal_type = $${index++} AND owner_principal_id = $${index++}`)\n params.push(input.ownerPrincipal.type, input.ownerPrincipal.id)\n }\n\n const dir = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const { rows, total, hasMore } = await queryAgentList<AgentThreadRow>({\n sql: this.sql,\n table: \"agent_threads\",\n whereClauses,\n params,\n nextIndex: index,\n orderBy: `COALESCE(last_message_at, created_at) ${dir}, id ${dir}`,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { threads: rows.map(rowToThreadRecord), hasMore, total }\n }\n}\n",
|
|
13
|
-
"import type { AgentStorage, ExecutionStorage } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"../transactions\"\nimport { PgAgentMessageStore } from \"./messages\"\nimport { PgAgentRunStore } from \"./runs\"\nimport { PgAgentThreadStore } from \"./threads\"\n\nexport interface PgAgentStorageOptions {\n readonly sql: PgStoreClient\n readonly executions: ExecutionStorage\n}\n\n/**\n * PostgreSQL-backed agent persistence: thread
|
|
14
|
+
"import type { AgentStorage, ExecutionStorage } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"../transactions\"\nimport { PgAgentContextCheckpointStore } from \"./checkpoints\"\nimport { PgAgentMessageStore } from \"./messages\"\nimport { PgAgentRunStore } from \"./runs\"\nimport { PgAgentThreadStore } from \"./threads\"\n\nexport interface PgAgentStorageOptions {\n readonly sql: PgStoreClient\n readonly executions: ExecutionStorage\n}\n\n/**\n * PostgreSQL-backed agent persistence: thread, run, message, and context-checkpoint sub-stores\n * sharing one connection. Cross-table writes run inside `runPgTransaction` with `SELECT ... FOR\n * UPDATE` row locks for single-flight and checkpoint compare-and-swap safety.\n */\nexport class PgAgentStorage implements AgentStorage {\n readonly threads: PgAgentThreadStore\n readonly runs: PgAgentRunStore\n readonly messages: PgAgentMessageStore\n readonly checkpoints: PgAgentContextCheckpointStore\n\n constructor(options: PgAgentStorageOptions) {\n this.threads = new PgAgentThreadStore(options.sql)\n this.runs = new PgAgentRunStore(options.sql, options.executions)\n this.messages = new PgAgentMessageStore(options.sql)\n this.checkpoints = new PgAgentContextCheckpointStore(options.sql)\n }\n}\n",
|
|
14
15
|
"import type {\n AuthStorage,\n CompleteMagicLinkSignInInput,\n CompleteOidcSignInInput,\n CompleteSignInResult,\n GroupMembershipRecord,\n InvitationRecord,\n SessionRecord,\n SuspendUserAndRevokeSessionsInput,\n UserIdentityRecord,\n UserRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport {\n authLockKey,\n lockAdvisoryKeys,\n type PgStoreClient,\n runPgTransaction,\n} from \"../transactions\"\nimport { PgAuthAccessTokenStore } from \"./access-tokens\"\nimport { PgAuthGroupMembershipStore } from \"./group-memberships\"\nimport { PgAuthUserIdentityStore } from \"./identities\"\nimport { PgAuthInvitationStore } from \"./invitations\"\nimport { PgAuthMagicLinkStore } from \"./magic-links\"\nimport { PgAuthOidcAuthorizationAttemptStore } from \"./oidc-attempts\"\nimport type {\n PgAuthMagicLinkRow,\n PgAuthOidcAttemptRow,\n PgAuthUserIdentityRow,\n PgAuthUserRow,\n} from \"./rows\"\nimport { rowToIdentityRecord, rowToUserRecord, serializeOptionalRecord } from \"./rows\"\nimport { PgAuthServiceAccountGroupMembershipStore } from \"./service-account-group-memberships\"\nimport { PgAuthServiceAccountStore } from \"./service-accounts\"\nimport { PgAuthSessionStore } from \"./sessions\"\nimport {\n assertMagicLinkUsable,\n assertNonEmpty,\n assertOidcAttemptUsable,\n consumeMagicLink,\n consumeOidcAttempt,\n createSession,\n getActiveInvitationByEmail,\n getIdentityRowBySubject,\n getMagicLinkRowById,\n getOidcAttemptRowById,\n getUserRowByEmail,\n getUserRowById,\n mapUniqueConstraintError,\n normalizeEmail,\n normalizeGroupIds,\n revokeActiveSessionsForUser,\n upsertGroupMembership,\n validateCompleteSessionInput,\n} from \"./shared\"\nimport { PgAuthUserStore } from \"./users\"\n\ninterface AuthTransactionError {\n readonly error: AuthStorageError\n}\n\nexport interface PgAuthStorageOptions {\n readonly sql: PgStoreClient\n}\n\nexport class PgAuthStorage implements AuthStorage {\n private readonly sql: PgStoreClient\n\n readonly users: PgAuthUserStore\n readonly identities: PgAuthUserIdentityStore\n readonly serviceAccounts: PgAuthServiceAccountStore\n readonly serviceAccountGroupMemberships: PgAuthServiceAccountGroupMembershipStore\n readonly sessions: PgAuthSessionStore\n readonly accessTokens: PgAuthAccessTokenStore\n readonly invitations: PgAuthInvitationStore\n readonly groupMemberships: PgAuthGroupMembershipStore\n readonly magicLinks: PgAuthMagicLinkStore\n readonly oidcAuthorizationAttempts: PgAuthOidcAuthorizationAttemptStore\n\n constructor(options: PgAuthStorageOptions) {\n this.sql = options.sql\n this.users = new PgAuthUserStore(this.sql)\n this.identities = new PgAuthUserIdentityStore(this.sql)\n this.serviceAccounts = new PgAuthServiceAccountStore(this.sql)\n this.serviceAccountGroupMemberships = new PgAuthServiceAccountGroupMembershipStore(this.sql)\n this.sessions = new PgAuthSessionStore(this.sql)\n this.accessTokens = new PgAuthAccessTokenStore(this.sql)\n this.invitations = new PgAuthInvitationStore(this.sql)\n this.groupMemberships = new PgAuthGroupMembershipStore(this.sql)\n this.magicLinks = new PgAuthMagicLinkStore(this.sql)\n this.oidcAuthorizationAttempts = new PgAuthOidcAuthorizationAttemptStore(this.sql)\n }\n\n async completeMagicLinkSignIn(\n input: CompleteMagicLinkSignInInput\n ): Promise<CompleteSignInResult> {\n const result = await runPgTransaction(\n this.sql,\n async (tx): Promise<CompleteSignInResult | AuthTransactionError> => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const initialMagicLink = await getMagicLinkRowById(tx, {\n projectId,\n id: input.magicLinkId,\n })\n\n if (!initialMagicLink) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${input.magicLinkId}' not found for project '${projectId}'.`\n )\n }\n\n const email = normalizeEmail(initialMagicLink.email)\n await lockAdvisoryKeys(tx, [\n authLockKey(\"bootstrap\", projectId),\n authLockKey(\"invitations\", projectId, email),\n authLockKey(\"magic-links\", projectId, email),\n authLockKey(\"users\", projectId, email),\n ])\n\n const magicLink = await getMagicLinkRowById(\n tx,\n {\n projectId,\n id: input.magicLinkId,\n },\n { forUpdate: true }\n )\n\n this.assertMagicLinkUsable(\n projectId,\n input.magicLinkId,\n input.tokenHash,\n completedAt,\n magicLink\n )\n\n const existingUserRow = await getUserRowByEmail(\n tx,\n {\n projectId,\n email,\n },\n { forUpdate: true }\n )\n const activeInvitation = await getActiveInvitationByEmail(\n tx,\n {\n projectId,\n email,\n now: completedAt,\n },\n { forUpdate: true }\n )\n const shouldCreateUser = !existingUserRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (existingUserRow?.status === \"suspended\") {\n await consumeMagicLink(tx, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${existingUserRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n await consumeMagicLink(tx, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n if (\n shouldCreateUser &&\n !activeInvitation &&\n input.allowUserCreationWithoutInvitation &&\n input.requireNoActiveUsersForUserCreation &&\n (await hasActiveUsers(tx, projectId))\n ) {\n await consumeMagicLink(tx, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n await validateCompleteSessionInput(tx, projectId, input.session)\n assertSignInSessionAudience(projectId, input.session.audience, magicLink.audience)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (await getUserRowById(tx, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n const sessionUserId = existingUserRow?.id ?? newUserId ?? input.newUserId\n await lockAdvisoryKeys(tx, [authLockKey(\"sessions\", projectId, sessionUserId)])\n\n await consumeMagicLink(tx, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n\n const user = existingUserRow\n ? rowToUserRecord(existingUserRow)\n : await this.insertUser(tx, {\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email,\n displayName: input.newUserDisplayName,\n avatarUrl: input.newUserAvatarUrl,\n createdAt: completedAt,\n })\n\n const invitation = await this.acceptInvitationAndApplyGroups(tx, {\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = await this.applyManualGroups(tx, {\n completedAt,\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n })\n const session = await this.createSignInSession(tx, {\n projectId,\n strategyId: magicLink.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult> {\n const result = await runPgTransaction(\n this.sql,\n async (tx): Promise<CompleteSignInResult | AuthTransactionError> => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const attempt = await getOidcAttemptRowById(\n tx,\n {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n },\n { forUpdate: true }\n )\n\n this.assertOidcAttemptUsable(\n projectId,\n input.oidcAuthorizationAttemptId,\n input.stateHash,\n completedAt,\n attempt\n )\n\n const subject = assertNonEmpty(input.subject, \"Subject\")\n const email = normalizeEmail(input.email)\n await lockAdvisoryKeys(tx, [\n authLockKey(\"bootstrap\", projectId),\n authLockKey(\"invitations\", projectId, email),\n authLockKey(\"identities\", projectId, attempt.strategy_id, subject),\n authLockKey(\"users\", projectId, email),\n ])\n\n const identity = await getIdentityRowBySubject(\n tx,\n {\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n },\n { forUpdate: true }\n )\n const activeInvitation = identity\n ? null\n : await getActiveInvitationByEmail(\n tx,\n {\n projectId,\n email,\n now: completedAt,\n },\n { forUpdate: true }\n )\n let userRow = identity\n ? await getUserRowById(tx, { projectId, id: identity.user_id }, { forUpdate: true })\n : await getUserRowByEmail(tx, { projectId, email }, { forUpdate: true })\n const shouldCreateUser = !identity && !userRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (identity && !userRow) {\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n return {\n error: new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${identity.user_id}' not found for linked OIDC identity.`\n ),\n }\n }\n\n if (!identity && userRow && (!input.autoLinkByVerifiedEmail || !input.emailVerified)) {\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n return {\n error: new AuthStorageError(\n \"email_link_not_allowed\",\n `[Sixb] OIDC identity cannot auto-link to user '${userRow.id}' for project '${projectId}'.`\n ),\n }\n }\n\n if (userRow?.status === \"suspended\") {\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${userRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !input.emailVerified) {\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n if (\n shouldCreateUser &&\n !activeInvitation &&\n input.allowUserCreationWithoutInvitation &&\n input.requireNoActiveUsersForUserCreation &&\n (await hasActiveUsers(tx, projectId))\n ) {\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n await validateCompleteSessionInput(tx, projectId, input.session)\n assertSignInSessionAudience(projectId, input.session.audience, attempt.audience)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (await getUserRowById(tx, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n await lockAdvisoryKeys(tx, [\n authLockKey(\"sessions\", projectId, userRow?.id ?? newUserId ?? input.newUserId),\n ])\n await this.consumeOidcAttempt(input, completedAt, projectId, tx)\n\n let user: UserRecord\n if (!userRow) {\n user = await this.insertUser(tx, {\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n createdAt: completedAt,\n })\n userRow = {\n project_id: user.projectId,\n id: user.id,\n email: user.email,\n display_name: user.displayName ?? null,\n avatar_url: user.avatarUrl ?? null,\n status: user.status,\n created_at: user.createdAt,\n updated_at: user.updatedAt,\n }\n } else {\n user = rowToUserRecord(userRow)\n }\n\n const invitation = await this.acceptInvitationAndApplyGroups(tx, {\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = await this.applyManualGroups(tx, {\n completedAt,\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n })\n const nextIdentity = await this.upsertIdentity(tx, {\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n userId: user.id,\n claims: input.claims,\n createdAt: identity ? new Date(identity.created_at) : completedAt,\n updatedAt: completedAt,\n })\n const session = await this.createSignInSession(tx, {\n projectId,\n strategyId: attempt.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n identity: nextIdentity,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async suspendUserAndRevokeSessions(\n input: SuspendUserAndRevokeSessionsInput\n ): Promise<UserRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await lockAdvisoryKeys(tx, [authLockKey(\"sessions\", input.projectId, input.userId)])\n const existing = await getUserRowById(\n tx,\n {\n projectId: input.projectId,\n id: input.userId,\n },\n { forUpdate: true }\n )\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.userId}' not found for project '${input.projectId}'.`\n )\n }\n\n const [updated] = await tx<PgAuthUserRow[]>`\n UPDATE auth_users\n SET status = 'suspended',\n updated_at = ${input.suspendedAt}\n WHERE project_id = ${input.projectId}\n AND id = ${input.userId}\n RETURNING *\n `\n\n await revokeActiveSessionsForUser(tx, {\n projectId: input.projectId,\n userId: input.userId,\n revokedAt: input.suspendedAt,\n })\n\n return rowToUserRecord(updated)\n })\n }\n\n private assertMagicLinkUsable(\n projectId: string,\n id: string,\n tokenHash: string,\n completedAt: Date,\n row: PgAuthMagicLinkRow | null\n ): asserts row is PgAuthMagicLinkRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${id}' not found for project '${projectId}'.`\n )\n }\n\n assertMagicLinkUsable(projectId, id, tokenHash, completedAt, row)\n }\n\n private assertOidcAttemptUsable(\n projectId: string,\n id: string,\n stateHash: string,\n completedAt: Date,\n row: PgAuthOidcAttemptRow | null\n ): asserts row is PgAuthOidcAttemptRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' not found for project '${projectId}'.`\n )\n }\n\n assertOidcAttemptUsable(projectId, id, stateHash, completedAt, row)\n }\n\n private async insertUser(\n sql: SQLClient,\n input: {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly createdAt: Date\n }\n ): Promise<UserRecord> {\n try {\n const [row] = await sql<PgAuthUserRow[]>`\n INSERT INTO auth_users (\n project_id,\n id,\n email,\n display_name,\n avatar_url,\n status,\n created_at,\n updated_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.email},\n ${input.displayName ?? null},\n ${input.avatarUrl ?? null},\n ${\"active\"},\n ${input.createdAt},\n ${input.createdAt}\n )\n RETURNING *\n `\n\n return rowToUserRecord(row)\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_user\",\n `[Sixb] User '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n }\n\n private async acceptInvitationAndApplyGroups(\n sql: SQLClient,\n input: {\n readonly activeInvitation: InvitationRecord | null\n readonly completedAt: Date\n readonly projectId: string\n readonly user: UserRecord\n }\n ): Promise<{\n readonly invitation?: InvitationRecord\n readonly groupMemberships: readonly GroupMembershipRecord[]\n }> {\n if (!input.activeInvitation) {\n return { groupMemberships: [] }\n }\n\n await sql`\n UPDATE auth_invitations\n SET status = 'accepted',\n accepted_at = ${input.completedAt},\n updated_at = ${input.completedAt}\n WHERE project_id = ${input.projectId}\n AND id = ${input.activeInvitation.id}\n `\n\n const invitation: InvitationRecord = {\n ...input.activeInvitation,\n status: \"accepted\",\n acceptedAt: new Date(input.completedAt),\n updatedAt: new Date(input.completedAt),\n }\n const groupMemberships: GroupMembershipRecord[] = []\n for (const groupId of input.activeInvitation.groupIds) {\n groupMemberships.push(\n await upsertGroupMembership(sql, {\n projectId: input.projectId,\n userId: input.user.id,\n groupId,\n source: \"invitation\",\n createdAt: input.completedAt,\n })\n )\n }\n\n return { invitation, groupMemberships }\n }\n\n private async applyManualGroups(\n sql: SQLClient,\n input: {\n readonly completedAt: Date\n readonly existing: readonly GroupMembershipRecord[]\n readonly groupIds: readonly string[]\n readonly projectId: string\n readonly userId: string\n }\n ): Promise<readonly GroupMembershipRecord[]> {\n const groupMemberships = [...input.existing]\n\n for (const groupId of input.groupIds) {\n groupMemberships.push(\n await upsertGroupMembership(sql, {\n projectId: input.projectId,\n userId: input.userId,\n groupId,\n source: \"manual\",\n createdAt: input.completedAt,\n })\n )\n }\n\n return groupMemberships\n }\n\n private async createSignInSession(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly strategyId: string\n readonly session: CompleteMagicLinkSignInInput[\"session\"]\n readonly userId: string\n }\n ): Promise<SessionRecord> {\n await lockAdvisoryKeys(sql, [\n authLockKey(\"sessions\", input.projectId, input.userId),\n authLockKey(\"sessions\", input.projectId, input.userId, input.session.audience),\n ])\n\n return createSession(sql, {\n id: input.session.id,\n projectId: input.projectId,\n userId: input.userId,\n strategyId: input.strategyId,\n audience: input.session.audience,\n tokenHash: input.session.tokenHash,\n createdAt: input.session.createdAt,\n expiresAt: input.session.expiresAt,\n absoluteExpiresAt: input.session.absoluteExpiresAt,\n userAgent: input.session.userAgent,\n ipAddress: input.session.ipAddress,\n })\n }\n\n private async consumeOidcAttempt(\n input: CompleteOidcSignInInput,\n completedAt: Date,\n projectId: string,\n sql: SQLClient\n ): Promise<void> {\n await consumeOidcAttempt(sql, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n stateHash: input.stateHash,\n consumedAt: completedAt,\n })\n }\n\n private async upsertIdentity(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt: Date\n readonly updatedAt: Date\n }\n ): Promise<UserIdentityRecord> {\n const [row] = await sql<PgAuthUserIdentityRow[]>`\n INSERT INTO auth_user_identities (\n project_id,\n strategy_id,\n subject,\n user_id,\n claims,\n created_at,\n updated_at\n ) VALUES (\n ${input.projectId},\n ${input.strategyId},\n ${input.subject},\n ${input.userId},\n ${serializeOptionalRecord(input.claims)}::text::jsonb,\n ${input.createdAt},\n ${input.updatedAt}\n )\n ON CONFLICT (project_id, strategy_id, subject)\n DO UPDATE SET\n user_id = excluded.user_id,\n claims = excluded.claims,\n updated_at = excluded.updated_at\n RETURNING *\n `\n\n return rowToIdentityRecord(row)\n }\n}\n\nasync function hasActiveUsers(sql: SQLClient, projectId: string): Promise<boolean> {\n const rows = (await sql`\n SELECT 1 AS active\n FROM auth_users\n WHERE project_id = ${projectId}\n AND status = 'active'\n LIMIT 1\n `) as Array<{ readonly active: number }>\n\n return rows.length > 0\n}\n\nfunction assertSignInSessionAudience(\n projectId: string,\n sessionAudience: string,\n storedAudience: string\n): void {\n if (sessionAudience === storedAudience) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Sign-in session audience '${sessionAudience}' does not match stored auth audience '${storedAudience}' for project '${projectId}'.`\n )\n}\n",
|
|
15
16
|
"import type {\n AccessTokenRecord,\n AuthAccessTokenStore,\n CreateAuthAccessTokenInput,\n ListAuthAccessTokensInput,\n ListAuthAccessTokensResult,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"../transactions\"\nimport type { PgAuthAccessTokenRow, PgAuthServiceAccountRow, PgAuthUserRow } from \"./rows\"\nimport { rowToAccessTokenRecord, serializeOptionalStringArray } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n mapUniqueConstraintError,\n normalizeGroupIds,\n type PgValue,\n} from \"./shared\"\n\nexport class PgAuthAccessTokenStore implements AuthAccessTokenStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateAuthAccessTokenInput): Promise<AccessTokenRecord> {\n const id = assertNonEmpty(input.id, \"Access token id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Access token name\")\n const subjectId = assertNonEmpty(input.subjectId, \"Access token subject id\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Access token hash\")\n assertKindMatchesSubject(input)\n await this.assertSubjectExists(projectId, input.subjectType, subjectId)\n const groupIds = input.groupIds === undefined ? undefined : normalizeGroupIds(input.groupIds)\n\n try {\n const [row] = await this.sql<PgAuthAccessTokenRow[]>`\n INSERT INTO auth_access_tokens (\n project_id,\n id,\n name,\n kind,\n subject_type,\n subject_id,\n token_hash,\n group_ids,\n created_by_user_id,\n created_by_service_account_id,\n created_by_system_id,\n created_by_session_id,\n created_at,\n expires_at\n ) VALUES (\n ${projectId},\n ${id},\n ${name},\n ${input.kind},\n ${input.subjectType},\n ${subjectId},\n ${tokenHash},\n ${serializeOptionalStringArray(groupIds)},\n ${input.createdByPrincipal?.type === \"user\" ? input.createdByPrincipal.id : null},\n ${\n input.createdByPrincipal?.type === \"serviceAccount\" ? input.createdByPrincipal.id : null\n },\n ${input.createdByPrincipal?.type === \"system\" ? input.createdByPrincipal.id : null},\n ${input.createdBySessionId ?? null},\n ${input.createdAt},\n ${input.expiresAt}\n )\n RETURNING *\n `\n\n return rowToAccessTokenRecord(row)\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_access_token\",\n `[Sixb] Access token '${id}' already exists for project '${projectId}'.`\n )\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AccessTokenRecord | null> {\n const [row] = await this.sql<PgAuthAccessTokenRow[]>`\n SELECT *\n FROM auth_access_tokens\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n `\n return row ? rowToAccessTokenRecord(row) : null\n }\n\n async list(input: ListAuthAccessTokensInput): Promise<ListAuthAccessTokensResult> {\n const whereClauses = [\"project_id = $1\"]\n const params: PgValue[] = [input.projectId]\n let nextIndex = 2\n if (input.kind) {\n whereClauses.push(`kind = $${nextIndex++}`)\n params.push(input.kind)\n }\n if (input.subjectType) {\n whereClauses.push(`subject_type = $${nextIndex++}`)\n params.push(input.subjectType)\n }\n if (input.subjectId) {\n whereClauses.push(`subject_id = $${nextIndex++}`)\n params.push(input.subjectId)\n }\n if (!input.includeRevoked) {\n whereClauses.push(\"revoked_at IS NULL\")\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const [totalRow] = await this.sql.unsafe<{ readonly count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM auth_access_tokens ${where}`,\n [...params]\n )\n const queryParams = [...params]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_access_tokens\n ${where}\n ORDER BY created_at ${order}, id ${order}\n `,\n queryParams,\n nextIndex,\n input\n )\n const rows = await this.sql.unsafe<PgAuthAccessTokenRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n\n return {\n accessTokens: rows.map(rowToAccessTokenRecord),\n hasMore: input.limit === undefined ? false : (input.offset ?? 0) + input.limit < total,\n total,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly tokenHash: string\n readonly now: Date\n }): Promise<AccessTokenRecord | null> {\n const [row] = await this.sql<PgAuthAccessTokenRow[]>`\n SELECT *\n FROM auth_access_tokens\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n AND kind = ${params.kind}\n AND token_hash = ${params.tokenHash}\n AND revoked_at IS NULL\n AND expires_at > ${params.now}\n `\n\n return row ? rowToAccessTokenRecord(row) : null\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<AccessTokenRecord> {\n const [row] = await this.sql<PgAuthAccessTokenRow[]>`\n UPDATE auth_access_tokens\n SET revoked_at = ${params.revokedAt}\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n RETURNING *\n `\n if (!row) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n return rowToAccessTokenRecord(row)\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastUsedAt: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n }): Promise<AccessTokenRecord> {\n const [row] = await this.sql<PgAuthAccessTokenRow[]>`\n UPDATE auth_access_tokens\n SET last_used_at = ${params.lastUsedAt},\n last_used_user_agent = COALESCE(${params.userAgent ?? null}, last_used_user_agent),\n last_used_ip_address = COALESCE(${params.ipAddress ?? null}, last_used_ip_address)\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n RETURNING *\n `\n if (!row) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n return rowToAccessTokenRecord(row)\n }\n\n private async assertSubjectExists(\n projectId: string,\n subjectType: CreateAuthAccessTokenInput[\"subjectType\"],\n subjectId: string\n ): Promise<void> {\n if (subjectType === \"user\") {\n const [row] = await this.sql<PgAuthUserRow[]>`\n SELECT *\n FROM auth_users\n WHERE project_id = ${projectId}\n AND id = ${subjectId}\n `\n if (row) return\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${subjectId}' not found for project '${projectId}'.`\n )\n }\n\n const [row] = await this.sql<PgAuthServiceAccountRow[]>`\n SELECT *\n FROM auth_service_accounts\n WHERE project_id = ${projectId}\n AND id = ${subjectId}\n `\n if (row) return\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${subjectId}' not found for project '${projectId}'.`\n )\n }\n}\n\nfunction assertKindMatchesSubject(input: CreateAuthAccessTokenInput): void {\n if (\n (input.kind === \"personal\" && input.subjectType === \"user\") ||\n (input.kind === \"serviceAccount\" && input.subjectType === \"serviceAccount\")\n ) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Access token kind '${input.kind}' cannot target subject type '${input.subjectType}'.`\n )\n}\n",
|
|
16
17
|
"import type { Principal } from \"@sixb/core\"\nimport type {\n AccessTokenRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n InvitationStatus,\n MagicLinkRecord,\n OidcAuthorizationAttemptRecord,\n ServiceAccountGroupMembershipRecord,\n ServiceAccountRecord,\n ServiceAccountStatus,\n SessionRecord,\n UserIdentityRecord,\n UserRecord,\n UserStatus,\n} from \"@sixb/core/storage\"\n\ntype PgDate = Date | string\n\nexport interface PgAuthUserRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly display_name: string | null\n readonly avatar_url: string | null\n readonly status: UserStatus\n readonly created_at: PgDate\n readonly updated_at: PgDate\n}\n\nexport interface PgAuthUserIdentityRow {\n readonly project_id: string\n readonly strategy_id: string\n readonly subject: string\n readonly user_id: string\n readonly claims: Readonly<Record<string, unknown>> | string | null\n readonly created_at: PgDate\n readonly updated_at: PgDate\n}\n\nexport interface PgAuthServiceAccountRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly description: string | null\n readonly status: ServiceAccountStatus\n readonly created_by_user_id: string | null\n readonly created_by_service_account_id: string | null\n readonly created_by_system_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: PgDate\n readonly updated_at: PgDate\n}\n\nexport interface PgAuthServiceAccountGroupMembershipRow {\n readonly project_id: string\n readonly service_account_id: string\n readonly group_id: string\n readonly source: GroupMembershipSource\n readonly created_at: PgDate\n}\n\nexport interface PgAuthSessionRow {\n readonly project_id: string\n readonly id: string\n readonly user_id: string\n readonly strategy_id: string\n readonly audience: SessionRecord[\"audience\"]\n readonly token_hash: string\n readonly created_at: PgDate\n readonly expires_at: PgDate\n readonly absolute_expires_at: PgDate | null\n readonly revoked_at: PgDate | null\n readonly last_seen_at: PgDate | null\n readonly user_agent: string | null\n readonly ip_address: string | null\n}\n\nexport interface PgAuthAccessTokenRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly subject_type: AccessTokenRecord[\"subjectType\"]\n readonly subject_id: string\n readonly token_hash: string\n readonly group_ids: readonly string[] | string | null\n readonly created_by_user_id: string | null\n readonly created_by_service_account_id: string | null\n readonly created_by_system_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: PgDate\n readonly expires_at: PgDate\n readonly revoked_at: PgDate | null\n readonly last_used_at: PgDate | null\n readonly last_used_user_agent: string | null\n readonly last_used_ip_address: string | null\n}\n\nexport interface PgAuthInvitationRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly status: InvitationStatus\n readonly created_by_user_id: string | null\n readonly created_by_service_account_id: string | null\n readonly created_by_system_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: PgDate\n readonly updated_at: PgDate\n readonly expires_at: PgDate\n readonly accepted_at: PgDate | null\n readonly revoked_at: PgDate | null\n}\n\nexport interface PgAuthGroupMembershipRow {\n readonly project_id: string\n readonly user_id: string\n readonly group_id: string\n readonly source: GroupMembershipSource\n readonly created_at: PgDate\n}\n\nexport interface PgAuthMagicLinkRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly audience: MagicLinkRecord[\"audience\"]\n readonly email: string\n readonly token_hash: string\n readonly return_to: string | null\n readonly created_at: PgDate\n readonly expires_at: PgDate\n readonly consumed_at: PgDate | null\n readonly revoked_at: PgDate | null\n}\n\nexport interface PgAuthOidcAttemptRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly audience: OidcAuthorizationAttemptRecord[\"audience\"]\n readonly state_hash: string\n readonly nonce_hash: string\n readonly code_verifier: string\n readonly return_to: string | null\n readonly created_at: PgDate\n readonly expires_at: PgDate\n readonly consumed_at: PgDate | null\n}\n\nexport function rowToUserRecord(row: PgAuthUserRow): UserRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n displayName: row.display_name ?? undefined,\n avatarUrl: row.avatar_url ?? undefined,\n status: row.status,\n createdAt: toDate(row.created_at),\n updatedAt: toDate(row.updated_at),\n }\n}\n\nexport function rowToIdentityRecord(row: PgAuthUserIdentityRow): UserIdentityRecord {\n return {\n projectId: row.project_id,\n strategyId: row.strategy_id,\n subject: row.subject,\n userId: row.user_id,\n claims: parseOptionalRecord(row.claims),\n createdAt: toDate(row.created_at),\n updatedAt: toDate(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountRecord(row: PgAuthServiceAccountRow): ServiceAccountRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n description: row.description ?? undefined,\n status: row.status,\n createdByPrincipal: principalFromColumns(row),\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: toDate(row.created_at),\n updatedAt: toDate(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountGroupMembershipRecord(\n row: PgAuthServiceAccountGroupMembershipRow\n): ServiceAccountGroupMembershipRecord {\n return {\n projectId: row.project_id,\n serviceAccountId: row.service_account_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: toDate(row.created_at),\n }\n}\n\nexport function rowToSessionRecord(row: PgAuthSessionRow): SessionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n userId: row.user_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n tokenHash: row.token_hash,\n createdAt: toDate(row.created_at),\n expiresAt: toDate(row.expires_at),\n absoluteExpiresAt: row.absolute_expires_at ? toDate(row.absolute_expires_at) : undefined,\n revokedAt: row.revoked_at ? toDate(row.revoked_at) : undefined,\n lastSeenAt: row.last_seen_at ? toDate(row.last_seen_at) : undefined,\n userAgent: row.user_agent ?? undefined,\n ipAddress: row.ip_address ?? undefined,\n }\n}\n\nexport function rowToAccessTokenRecord(row: PgAuthAccessTokenRow): AccessTokenRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n kind: row.kind,\n subjectType: row.subject_type,\n subjectId: row.subject_id,\n tokenHash: row.token_hash,\n groupIds: parseOptionalStringArray(row.group_ids),\n createdByPrincipal: principalFromColumns(row),\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: toDate(row.created_at),\n expiresAt: toDate(row.expires_at),\n revokedAt: row.revoked_at ? toDate(row.revoked_at) : undefined,\n lastUsedAt: row.last_used_at ? toDate(row.last_used_at) : undefined,\n lastUsedUserAgent: row.last_used_user_agent ?? undefined,\n lastUsedIpAddress: row.last_used_ip_address ?? undefined,\n }\n}\n\nexport function rowToInvitationRecord(\n row: PgAuthInvitationRow,\n groupIds: readonly string[]\n): InvitationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n groupIds,\n status: row.status,\n createdByPrincipal: invitationCreatorFromRow(row),\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: toDate(row.created_at),\n updatedAt: toDate(row.updated_at),\n expiresAt: toDate(row.expires_at),\n acceptedAt: row.accepted_at ? toDate(row.accepted_at) : undefined,\n revokedAt: row.revoked_at ? toDate(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToGroupMembershipRecord(row: PgAuthGroupMembershipRow): GroupMembershipRecord {\n return {\n projectId: row.project_id,\n userId: row.user_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: toDate(row.created_at),\n }\n}\n\nexport function rowToMagicLinkRecord(row: PgAuthMagicLinkRow): MagicLinkRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n email: row.email,\n tokenHash: row.token_hash,\n returnTo: row.return_to ?? undefined,\n createdAt: toDate(row.created_at),\n expiresAt: toDate(row.expires_at),\n consumedAt: row.consumed_at ? toDate(row.consumed_at) : undefined,\n revokedAt: row.revoked_at ? toDate(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToOidcAuthorizationAttemptRecord(\n row: PgAuthOidcAttemptRow\n): OidcAuthorizationAttemptRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n stateHash: row.state_hash,\n nonceHash: row.nonce_hash,\n codeVerifier: row.code_verifier,\n returnTo: row.return_to ?? undefined,\n createdAt: toDate(row.created_at),\n expiresAt: toDate(row.expires_at),\n consumedAt: row.consumed_at ? toDate(row.consumed_at) : undefined,\n }\n}\n\nexport function serializeOptionalRecord(\n value: Readonly<Record<string, unknown>> | undefined\n): string | null {\n return value ? JSON.stringify(value) : null\n}\n\nexport function serializeOptionalStringArray(value: readonly string[] | undefined): string | null {\n return value === undefined ? null : JSON.stringify(value)\n}\n\nfunction principalFromColumns(row: {\n readonly created_by_user_id: string | null\n readonly created_by_service_account_id: string | null\n readonly created_by_system_id: string | null\n}): Principal | undefined {\n if (row.created_by_user_id) return { type: \"user\", id: row.created_by_user_id }\n if (row.created_by_service_account_id) {\n return { type: \"serviceAccount\", id: row.created_by_service_account_id }\n }\n if (row.created_by_system_id) return { type: \"system\", id: row.created_by_system_id }\n return undefined\n}\n\nfunction invitationCreatorFromRow(row: PgAuthInvitationRow): Principal | undefined {\n return principalFromColumns(row)\n}\n\nfunction parseOptionalRecord(\n value: Readonly<Record<string, unknown>> | string | null\n): Readonly<Record<string, unknown>> | undefined {\n if (!value) return undefined\n if (typeof value === \"string\") return JSON.parse(value) as Readonly<Record<string, unknown>>\n return structuredClone(value)\n}\n\nfunction parseOptionalStringArray(\n value: readonly string[] | string | null\n): readonly string[] | undefined {\n if (value === null) return undefined\n if (typeof value === \"string\") return JSON.parse(value) as readonly string[]\n return [...value]\n}\n\nfunction toDate(value: PgDate): Date {\n return value instanceof Date ? new Date(value) : new Date(value)\n}\n",
|
|
@@ -25,17 +26,18 @@
|
|
|
25
26
|
"import type { AuthSessionAudience } from \"@sixb/core\"\nimport type { AuthSessionStore, CreateAuthSessionInput, SessionRecord } from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport {\n authLockKey,\n lockAdvisoryKeys,\n type PgStoreClient,\n runPgTransaction,\n} from \"../transactions\"\nimport type { PgAuthSessionRow } from \"./rows\"\nimport { rowToSessionRecord } from \"./rows\"\nimport {\n createSession,\n getSessionById,\n getSessionRowById,\n requireSessionById,\n revokeActiveSessionsForUser,\n} from \"./shared\"\n\nexport class PgAuthSessionStore implements AuthSessionStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateAuthSessionInput): Promise<SessionRecord> {\n // Session ids are random UUIDs and the table has a primary-key guard, so\n // concurrent inserts cannot collide; no advisory lock is needed here.\n return runPgTransaction(this.sql, (tx) => createSession(tx, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null> {\n return getSessionById(this.sql, params)\n }\n\n async getActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly audience: AuthSessionAudience\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const [row] = await this.sql<PgAuthSessionRow[]>`\n SELECT *\n FROM auth_sessions\n WHERE project_id = ${params.projectId}\n AND user_id = ${params.userId}\n AND audience = ${params.audience}\n AND revoked_at IS NULL\n AND expires_at > ${params.now}\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ${params.now})\n ORDER BY created_at DESC, id DESC\n LIMIT 1\n `\n\n return row ? rowToSessionRecord(row) : null\n }\n\n async listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]> {\n const rows = (await this.sql`\n SELECT *\n FROM auth_sessions\n WHERE project_id = ${params.projectId}\n AND user_id = ${params.userId}\n AND revoked_at IS NULL\n AND expires_at > ${params.now}\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ${params.now})\n ORDER BY COALESCE(last_seen_at, created_at) DESC, created_at DESC, id DESC\n `) as PgAuthSessionRow[]\n\n return rows.map(rowToSessionRecord)\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly audience: AuthSessionAudience\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = await getSessionRowById(this.sql, params)\n\n if (\n !row ||\n row.audience !== params.audience ||\n row.token_hash !== params.tokenHash ||\n row.revoked_at ||\n new Date(row.expires_at) <= params.now ||\n (row.absolute_expires_at !== null && new Date(row.absolute_expires_at) <= params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly audience: AuthSessionAudience\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null> {\n const [row] = await this.sql<PgAuthSessionRow[]>`\n UPDATE auth_sessions\n SET expires_at = GREATEST(\n expires_at,\n LEAST(\n ${params.expiresAt},\n COALESCE(absolute_expires_at, ${params.expiresAt})\n )\n ),\n last_seen_at = ${params.now}\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n AND audience = ${params.audience}\n AND token_hash = ${params.tokenHash}\n AND revoked_at IS NULL\n AND expires_at > ${params.now}\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ${params.now})\n RETURNING *\n `\n\n return row ? rowToSessionRecord(row) : null\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const existing = await getSessionRowById(tx, params, { forUpdate: true })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const [row] = await tx<PgAuthSessionRow[]>`\n UPDATE auth_sessions\n SET revoked_at = ${params.revokedAt}\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n RETURNING *\n `\n\n return rowToSessionRecord(row)\n })\n }\n\n async revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly audience?: AuthSessionAudience\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return runPgTransaction(this.sql, async (tx) => {\n const locks = [authLockKey(\"sessions\", params.projectId, params.userId)]\n if (params.audience) {\n locks.push(authLockKey(\"sessions\", params.projectId, params.userId, params.audience))\n }\n await lockAdvisoryKeys(tx, locks)\n return revokeActiveSessionsForUser(tx, params)\n })\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await requireSessionById(tx, params)\n\n const [row] = await tx<PgAuthSessionRow[]>`\n UPDATE auth_sessions\n SET last_seen_at = ${params.lastSeenAt}\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n RETURNING *\n `\n\n return rowToSessionRecord(row)\n })\n }\n}\n",
|
|
26
27
|
"import type {\n AuthUserStore,\n CreateAuthUserInput,\n ListAuthUsersInput,\n ListAuthUsersResult,\n UpdateAuthUserProfileInput,\n UpdateAuthUserStatusInput,\n UserRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"../transactions\"\nimport type { PgAuthUserRow } from \"./rows\"\nimport { rowToUserRecord } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n dateOrNow,\n getUserRowByEmail,\n getUserRowById,\n hasEmptyFilter,\n mapUniqueConstraintError,\n normalizeEmail,\n type PgValue,\n} from \"./shared\"\n\nexport class PgAuthUserStore implements AuthUserStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateAuthUserInput): Promise<UserRecord> {\n const id = assertNonEmpty(input.id, \"User id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const email = normalizeEmail(input.email)\n\n if (await getUserRowById(this.sql, { projectId, id })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${id}' already exists for project '${projectId}'.`\n )\n }\n\n if (await getUserRowByEmail(this.sql, { projectId, email })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User email '${email}' already exists for project '${projectId}'.`\n )\n }\n\n const createdAt = dateOrNow(input.createdAt)\n const updatedAt = input.updatedAt ? new Date(input.updatedAt) : createdAt\n\n try {\n const [row] = await this.sql<PgAuthUserRow[]>`\n INSERT INTO auth_users (\n project_id,\n id,\n email,\n display_name,\n avatar_url,\n status,\n created_at,\n updated_at\n ) VALUES (\n ${projectId},\n ${id},\n ${email},\n ${input.displayName ?? null},\n ${input.avatarUrl ?? null},\n ${input.status ?? \"active\"},\n ${createdAt},\n ${updatedAt}\n )\n RETURNING *\n `\n\n return rowToUserRecord(row)\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_user\",\n `[Sixb] User '${id}' already exists for project '${projectId}'.`\n )\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<UserRecord | null> {\n const row = await getUserRowById(this.sql, params)\n return row ? rowToUserRecord(row) : null\n }\n\n async getByEmail(params: {\n readonly projectId: string\n readonly email: string\n }): Promise<UserRecord | null> {\n const row = await getUserRowByEmail(this.sql, params)\n return row ? rowToUserRecord(row) : null\n }\n\n async updateProfile(input: UpdateAuthUserProfileInput): Promise<UserRecord> {\n const existing = await getUserRowById(this.sql, {\n projectId: input.projectId,\n id: input.id,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const updatedAt = dateOrNow(input.updatedAt)\n const [row] = await this.sql<PgAuthUserRow[]>`\n UPDATE auth_users\n SET display_name = ${input.displayName ?? null},\n avatar_url = ${input.avatarUrl ?? null},\n updated_at = ${updatedAt}\n WHERE project_id = ${input.projectId}\n AND id = ${input.id}\n RETURNING *\n `\n\n return rowToUserRecord(row)\n }\n\n async updateStatus(input: UpdateAuthUserStatusInput): Promise<UserRecord> {\n const existing = await getUserRowById(this.sql, {\n projectId: input.projectId,\n id: input.id,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const updatedAt = dateOrNow(input.updatedAt)\n const [row] = await this.sql<PgAuthUserRow[]>`\n UPDATE auth_users\n SET status = ${input.status},\n updated_at = ${updatedAt}\n WHERE project_id = ${input.projectId}\n AND id = ${input.id}\n RETURNING *\n `\n\n return rowToUserRecord(row)\n }\n\n async list(input: ListAuthUsersInput): Promise<ListAuthUsersResult> {\n if (hasEmptyFilter(input.statuses)) {\n return { users: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: PgValue[] = [input.projectId]\n let nextIndex = 2\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => `$${nextIndex++}`).join(\", \")})`)\n params.push(...input.statuses)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const [totalRow] = await this.sql.unsafe<{ readonly count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM auth_users ${where}`,\n [...params]\n )\n\n const queryParams = [...params]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_users\n ${where}\n ORDER BY created_at ${order}, id ${order}\n `,\n queryParams,\n nextIndex,\n input\n )\n const rows = await this.sql.unsafe<PgAuthUserRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n\n return {\n users: rows.map(rowToUserRecord),\n hasMore: (input.offset ?? 0) + rows.length < total,\n total,\n }\n }\n}\n",
|
|
27
28
|
"import {\n type ConnectorConnectionPersistence,\n type ConnectorConnectionPersistenceBackend,\n type ConnectorConnectionPersistenceScope,\n DurableConnectorConnectionStorage,\n} from \"@sixb/core/internal/connector-connection-storage-provider\"\nimport type {\n ConnectorAuthorizationAttemptRecord,\n ConnectorAuthorizationRecord,\n ConnectorConnectionRecord,\n ConnectorConnectionRunRecord,\n ConnectorCredentialMutation,\n ConnectorStagedCredentials,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"./pg-client\"\nimport { isUniqueViolation } from \"./storage-errors\"\nimport { lockAdvisoryKeys, type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport class PgConnectorConnectionStorage extends DurableConnectorConnectionStorage {\n private readonly clock: ConnectorConnectionTestClock\n\n constructor(sql: PgStoreClient) {\n const clock = { offsetMs: 0 }\n super(new PgConnectorConnectionPersistenceBackend(sql, clock))\n this.clock = clock\n }\n\n /** Internal deterministic clock control used only by the provider contract suite. */\n advanceTimeForTesting(durationMs: number): void {\n this.clock.offsetMs += durationMs\n }\n}\n\nclass PgConnectorConnectionPersistenceBackend implements ConnectorConnectionPersistenceBackend {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly clock: ConnectorConnectionTestClock\n ) {}\n\n read<T>(\n scope: ConnectorConnectionPersistenceScope,\n run: (persistence: ConnectorConnectionPersistence) => Promise<T>\n ): Promise<T> {\n return run(new PgConnectorConnectionPersistence(this.sql, scope, false, this.clock))\n }\n\n transaction<T>(\n scope: ConnectorConnectionPersistenceScope,\n run: (persistence: ConnectorConnectionPersistence) => Promise<T>\n ): Promise<T> {\n return runPgTransaction(this.sql, async (tx) => {\n if (scope.connectorId) {\n await lockAdvisoryKeys(tx, [\n [\"connector-connections\", scope.projectId, scope.connectorId].join(\":\"),\n ])\n }\n return run(new PgConnectorConnectionPersistence(tx, scope, true, this.clock))\n })\n }\n}\n\nclass PgConnectorConnectionPersistence implements ConnectorConnectionPersistence {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly scope: ConnectorConnectionPersistenceScope,\n private readonly locking: boolean,\n private readonly clock: ConnectorConnectionTestClock\n ) {}\n\n async now(): Promise<Date> {\n const [row] = await this.sql<{ readonly now: Date | string }[]>`\n SELECT clock_timestamp() AS now\n `\n if (!row) throw new Error(\"[SixbPg] Database clock returned no row.\")\n return new Date(new Date(row.now).getTime() + this.clock.offsetMs)\n }\n\n async insertAuthorizationAttempt(record: ConnectorAuthorizationAttemptRecord): Promise<boolean> {\n try {\n await this.sql`\n INSERT INTO connector_authorization_attempts (\n project_id, connector_id, id, slot, initiated_by_execution_id,\n state_hash, code_verifier, redirect_uri, connection_run_id, return_to,\n callback_binding_hash, reauthorization_id, reauthorization_revision,\n reauthorization_connection_ids, created_at, expires_at\n ) VALUES (\n ${record.projectId}, ${record.connectorId}, ${record.id}, ${record.slot},\n ${record.initiatedByExecutionId}, ${record.stateHash},\n ${jsonParameter(this.sql, record.codeVerifier)}, ${record.redirectUri},\n ${record.connectionRunId ?? null}, ${record.returnTo ?? null},\n ${record.callbackBindingHash ?? null}, ${record.reauthorizationId ?? null},\n ${record.reauthorizationRevision ?? null},\n ${\n record.reauthorizationConnectionIds\n ? jsonParameter(this.sql, record.reauthorizationConnectionIds)\n : null\n },\n ${record.createdAt}, ${record.expiresAt}\n )\n `\n return true\n } catch (error) {\n if (isUniqueViolation(error)) return false\n throw error\n }\n }\n\n async getAuthorizationAttempt(id: string): Promise<ConnectorAuthorizationAttemptRecord | null> {\n const rows = this.scope.connectorId\n ? await this.sql<PgAuthorizationAttemptRow[]>`\n SELECT * FROM connector_authorization_attempts\n WHERE project_id = ${this.scope.projectId}\n AND connector_id = ${this.scope.connectorId}\n AND id = ${id}\n ${this.lockClause()}\n `\n : await this.sql<PgAuthorizationAttemptRow[]>`\n SELECT * FROM connector_authorization_attempts\n WHERE project_id = ${this.scope.projectId} AND id = ${id}\n ${this.lockClause()}\n `\n return rows[0] ? authorizationAttemptFromRow(rows[0]) : null\n }\n\n async getAuthorizationAttemptByConnectionRunId(\n connectionRunId: string\n ): Promise<ConnectorAuthorizationAttemptRecord | null> {\n if (!this.scope.connectorId) return null\n const rows = await this.sql<PgAuthorizationAttemptRow[]>`\n SELECT * FROM connector_authorization_attempts\n WHERE project_id = ${this.scope.projectId}\n AND connector_id = ${this.scope.connectorId}\n AND connection_run_id = ${connectionRunId}\n ${this.lockClause()}\n `\n return rows[0] ? authorizationAttemptFromRow(rows[0]) : null\n }\n\n async deleteAuthorizationAttempt(id: string): Promise<boolean> {\n const rows = this.scope.connectorId\n ? await this.sql<{ readonly id: string }[]>`\n DELETE FROM connector_authorization_attempts\n WHERE project_id = ${this.scope.projectId}\n AND connector_id = ${this.scope.connectorId}\n AND id = ${id}\n RETURNING id\n `\n : await this.sql<{ readonly id: string }[]>`\n DELETE FROM connector_authorization_attempts\n WHERE project_id = ${this.scope.projectId} AND id = ${id}\n RETURNING id\n `\n return rows.length === 1\n }\n\n async insertConnectionRun(record: ConnectorConnectionRunRecord): Promise<boolean> {\n try {\n const values = runValues(record)\n await this.sql`\n INSERT INTO connector_connection_runs (\n project_id, connector_id, id, kind, slot, initiated_by_execution_id,\n status, waiting_for, processing_id, callback_started_at,\n expires_at, authorization_id, cleanup_authorization_id, connections, error,\n created_at, updated_at, finished_at\n ) VALUES (\n ${record.projectId}, ${record.connectorId}, ${record.id}, ${values.kind},\n ${values.slot}, ${values.initiatedByExecutionId}, ${values.status},\n ${values.waitingFor}, ${values.processingId},\n ${values.callbackStartedAt}, ${values.expiresAt}, ${values.authorizationId},\n ${values.cleanupAuthorizationId},\n ${values.connections ? jsonParameter(this.sql, values.connections) : null},\n ${values.error ? jsonParameter(this.sql, values.error) : null},\n ${record.createdAt}, ${record.updatedAt}, ${values.finishedAt}\n )\n `\n return true\n } catch (error) {\n if (isUniqueViolation(error)) return false\n throw error\n }\n }\n\n async getConnectionRun(id: string): Promise<ConnectorConnectionRunRecord | null> {\n const rows = await this.runById(id)\n return rows[0] ? connectionRunFromRow(rows[0]) : null\n }\n\n async updateConnectionRun(record: ConnectorConnectionRunRecord): Promise<void> {\n const values = runValues(record)\n const rows = await this.sql<{ readonly id: string }[]>`\n UPDATE connector_connection_runs\n SET kind = ${values.kind}, slot = ${values.slot},\n initiated_by_execution_id = ${values.initiatedByExecutionId}, status = ${values.status},\n waiting_for = ${values.waitingFor},\n processing_id = ${values.processingId}, callback_started_at = ${values.callbackStartedAt},\n expires_at = ${values.expiresAt}, authorization_id = ${values.authorizationId},\n cleanup_authorization_id = ${values.cleanupAuthorizationId},\n connections = ${values.connections ? jsonParameter(this.sql, values.connections) : null},\n error = ${values.error ? jsonParameter(this.sql, values.error) : null},\n updated_at = ${record.updatedAt}, finished_at = ${values.finishedAt}\n WHERE project_id = ${record.projectId} AND connector_id = ${record.connectorId}\n AND id = ${record.id}\n RETURNING id\n `\n assertChanged(rows, \"connector connection run\", record.id)\n }\n\n async insertAuthorization(record: ConnectorAuthorizationRecord): Promise<boolean> {\n try {\n const values = authorizationValues(record)\n await this.sql`\n INSERT INTO connector_authorizations (\n project_id, connector_id, id, authorized_by, credentials, credential_expires_at,\n scopes, accounts, status, selection_expires_at, revision, mutation_id, mutation_kind,\n mutation_phase, mutation_holder_id, mutation_expires_at, mutation_deadline_at,\n mutation_expected_connection_ids, staged_credentials, staged_credential_expires_at,\n staged_scopes, created_at, updated_at\n ) VALUES (\n ${record.projectId}, ${record.connectorId}, ${record.id},\n ${jsonParameter(this.sql, record.authorizedBy)},\n ${record.credentials ? jsonParameter(this.sql, record.credentials) : null},\n ${record.credentialExpiresAt ?? null}, ${jsonParameter(this.sql, record.scopes)},\n ${jsonParameter(this.sql, record.accounts)}, ${record.status},\n ${record.selectionExpiresAt ?? null}, ${record.revision}, ${values.mutationId},\n ${values.mutationKind}, ${values.mutationPhase}, ${values.mutationHolderId},\n ${values.mutationExpiresAt}, ${values.mutationDeadlineAt},\n ${\n values.mutationExpectedConnectionIds\n ? jsonParameter(this.sql, values.mutationExpectedConnectionIds)\n : null\n },\n ${values.stagedCredentials ? jsonParameter(this.sql, values.stagedCredentials) : null},\n ${values.stagedCredentialExpiresAt},\n ${values.stagedScopes ? jsonParameter(this.sql, values.stagedScopes) : null},\n ${record.createdAt}, ${record.updatedAt}\n )\n `\n return true\n } catch (error) {\n if (isUniqueViolation(error)) return false\n throw error\n }\n }\n\n async getAuthorization(id: string): Promise<ConnectorAuthorizationRecord | null> {\n const rows = await this.authorizationById(id)\n return rows[0] ? authorizationFromRow(rows[0]) : null\n }\n\n async updateAuthorization(record: ConnectorAuthorizationRecord): Promise<void> {\n const values = authorizationValues(record)\n const rows = await this.sql<{ readonly id: string }[]>`\n UPDATE connector_authorizations\n SET authorized_by = ${jsonParameter(this.sql, record.authorizedBy)},\n credentials = ${record.credentials ? jsonParameter(this.sql, record.credentials) : null},\n credential_expires_at = ${record.credentialExpiresAt ?? null},\n scopes = ${jsonParameter(this.sql, record.scopes)},\n accounts = ${jsonParameter(this.sql, record.accounts)}, status = ${record.status},\n selection_expires_at = ${record.selectionExpiresAt ?? null}, revision = ${record.revision},\n mutation_id = ${values.mutationId}, mutation_kind = ${values.mutationKind},\n mutation_phase = ${values.mutationPhase}, mutation_holder_id = ${values.mutationHolderId},\n mutation_expires_at = ${values.mutationExpiresAt},\n mutation_deadline_at = ${values.mutationDeadlineAt},\n mutation_expected_connection_ids = ${\n values.mutationExpectedConnectionIds\n ? jsonParameter(this.sql, values.mutationExpectedConnectionIds)\n : null\n },\n staged_credentials = ${\n values.stagedCredentials ? jsonParameter(this.sql, values.stagedCredentials) : null\n },\n staged_credential_expires_at = ${values.stagedCredentialExpiresAt},\n staged_scopes = ${\n values.stagedScopes ? jsonParameter(this.sql, values.stagedScopes) : null\n },\n updated_at = ${record.updatedAt}\n WHERE project_id = ${record.projectId} AND connector_id = ${record.connectorId}\n AND id = ${record.id}\n RETURNING id\n `\n assertChanged(rows, \"connector authorization\", record.id)\n }\n\n async insertConnection(record: ConnectorConnectionRecord): Promise<boolean> {\n try {\n await this.sql`\n INSERT INTO connector_connections (\n project_id, connector_id, id, authorization_id, slot, account,\n account_id, status, disconnected_at, created_at, updated_at\n ) VALUES (\n ${record.projectId}, ${record.connectorId}, ${record.id}, ${record.authorizationId},\n ${record.slot}, ${jsonParameter(this.sql, record.account)},\n ${record.account.id}, ${record.status}, ${record.disconnectedAt ?? null},\n ${record.createdAt}, ${record.updatedAt}\n )\n `\n return true\n } catch (error) {\n if (isUniqueViolation(error)) return false\n throw error\n }\n }\n\n async getConnectionById(id: string): Promise<ConnectorConnectionRecord | null> {\n const rows = await this.connectionById(id)\n return rows[0] ? connectionFromRow(rows[0]) : null\n }\n\n async getConnectionBySelector(input: {\n readonly owner: { readonly type: \"project\" }\n readonly slot: string\n }): Promise<ConnectorConnectionRecord | null> {\n if (!this.scope.connectorId) return null\n const rows = await this.sql<PgConnectionRow[]>`\n SELECT * FROM connector_connections\n WHERE project_id = ${this.scope.projectId} AND connector_id = ${this.scope.connectorId}\n AND slot = ${input.slot}\n ${this.lockClause()}\n `\n return rows[0] ? connectionFromRow(rows[0]) : null\n }\n\n async listConnections(): Promise<readonly ConnectorConnectionRecord[]> {\n if (!this.scope.connectorId) return []\n const rows = await this.sql<PgConnectionRow[]>`\n SELECT * FROM connector_connections\n WHERE project_id = ${this.scope.projectId} AND connector_id = ${this.scope.connectorId}\n ORDER BY id\n ${this.lockClause()}\n `\n return rows.map(connectionFromRow)\n }\n\n async listConnectionsByAuthorization(\n authorizationId: string,\n options: { readonly connectedOnly?: boolean } = {}\n ): Promise<readonly ConnectorConnectionRecord[]> {\n if (!this.scope.connectorId) return []\n const rows = options.connectedOnly\n ? await this.sql<PgConnectionRow[]>`\n SELECT * FROM connector_connections\n WHERE project_id = ${this.scope.projectId} AND connector_id = ${this.scope.connectorId}\n AND authorization_id = ${authorizationId} AND status = 'connected'\n ORDER BY id\n ${this.lockClause()}\n `\n : await this.sql<PgConnectionRow[]>`\n SELECT * FROM connector_connections\n WHERE project_id = ${this.scope.projectId} AND connector_id = ${this.scope.connectorId}\n AND authorization_id = ${authorizationId}\n ORDER BY id\n ${this.lockClause()}\n `\n return rows.map(connectionFromRow)\n }\n\n async updateConnection(record: ConnectorConnectionRecord): Promise<void> {\n const rows = await this.sql<{ readonly id: string }[]>`\n UPDATE connector_connections\n SET authorization_id = ${record.authorizationId}, slot = ${record.slot},\n account = ${jsonParameter(this.sql, record.account)},\n account_id = ${record.account.id}, status = ${record.status},\n disconnected_at = ${record.disconnectedAt ?? null}, updated_at = ${record.updatedAt}\n WHERE project_id = ${record.projectId} AND connector_id = ${record.connectorId}\n AND id = ${record.id}\n RETURNING id\n `\n assertChanged(rows, \"connector connection\", record.id)\n }\n\n private runById(id: string): Promise<PgConnectionRunRow[]> {\n return this.scope.connectorId\n ? this.sql<PgConnectionRunRow[]>`\n SELECT * FROM connector_connection_runs\n WHERE project_id = ${this.scope.projectId}\n AND connector_id = ${this.scope.connectorId} AND id = ${id}\n ${this.lockClause()}\n `\n : this.sql<PgConnectionRunRow[]>`\n SELECT * FROM connector_connection_runs\n WHERE project_id = ${this.scope.projectId} AND id = ${id}\n ${this.lockClause()}\n `\n }\n\n private authorizationById(id: string): Promise<PgAuthorizationRow[]> {\n return this.scope.connectorId\n ? this.sql<PgAuthorizationRow[]>`\n SELECT * FROM connector_authorizations\n WHERE project_id = ${this.scope.projectId}\n AND connector_id = ${this.scope.connectorId} AND id = ${id}\n ${this.lockClause()}\n `\n : this.sql<PgAuthorizationRow[]>`\n SELECT * FROM connector_authorizations\n WHERE project_id = ${this.scope.projectId} AND id = ${id}\n ${this.lockClause()}\n `\n }\n\n private connectionById(id: string): Promise<PgConnectionRow[]> {\n return this.scope.connectorId\n ? this.sql<PgConnectionRow[]>`\n SELECT * FROM connector_connections\n WHERE project_id = ${this.scope.projectId}\n AND connector_id = ${this.scope.connectorId} AND id = ${id}\n ${this.lockClause()}\n `\n : this.sql<PgConnectionRow[]>`\n SELECT * FROM connector_connections\n WHERE project_id = ${this.scope.projectId} AND id = ${id}\n ${this.lockClause()}\n `\n }\n\n private lockClause() {\n return this.locking ? this.sql`FOR UPDATE` : this.sql``\n }\n}\n\nfunction authorizationAttemptFromRow(\n row: PgAuthorizationAttemptRow\n): ConnectorAuthorizationAttemptRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n owner: { type: \"project\" },\n slot: row.slot,\n initiatedByExecutionId: row.initiated_by_execution_id,\n stateHash: row.state_hash,\n codeVerifier: row.code_verifier,\n redirectUri: row.redirect_uri,\n ...(row.connection_run_id === null ? {} : { connectionRunId: row.connection_run_id }),\n ...(row.return_to === null ? {} : { returnTo: row.return_to }),\n ...(row.callback_binding_hash === null\n ? {}\n : { callbackBindingHash: row.callback_binding_hash }),\n ...(row.reauthorization_id === null ? {} : { reauthorizationId: row.reauthorization_id }),\n ...(row.reauthorization_revision === null\n ? {}\n : { reauthorizationRevision: row.reauthorization_revision }),\n ...(row.reauthorization_connection_ids === null\n ? {}\n : { reauthorizationConnectionIds: row.reauthorization_connection_ids }),\n createdAt: date(row.created_at),\n expiresAt: date(row.expires_at),\n }\n}\n\nfunction runValues(record: ConnectorConnectionRunRecord) {\n return {\n kind: record.kind,\n slot: record.slot,\n initiatedByExecutionId: record.initiatedByExecutionId,\n status: record.status,\n waitingFor: record.status === \"waiting\" ? record.waitingFor : null,\n processingId: record.status === \"running\" ? record.processingId : null,\n callbackStartedAt: record.status === \"running\" ? record.callbackStartedAt : null,\n expiresAt: record.status === \"waiting\" || record.status === \"running\" ? record.expiresAt : null,\n authorizationId: \"authorizationId\" in record ? (record.authorizationId ?? null) : null,\n cleanupAuthorizationId:\n record.status === \"succeeded\" ? (record.cleanupAuthorizationId ?? null) : null,\n connections: record.status === \"succeeded\" ? record.connections : null,\n error: record.status === \"failed\" ? record.error : null,\n finishedAt:\n record.status === \"succeeded\" ||\n record.status === \"failed\" ||\n record.status === \"cancelled\" ||\n record.status === \"expired\"\n ? record.finishedAt\n : null,\n }\n}\n\nfunction connectionRunFromRow(row: PgConnectionRunRow): ConnectorConnectionRunRecord {\n const base = {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n kind: row.kind,\n owner: { type: \"project\" as const },\n slot: row.slot,\n initiatedByExecutionId: row.initiated_by_execution_id,\n createdAt: date(row.created_at),\n updatedAt: date(row.updated_at),\n }\n if (row.status === \"waiting\" && row.waiting_for === \"provider_authorization\") {\n return {\n ...base,\n status: \"waiting\",\n waitingFor: \"provider_authorization\",\n expiresAt: date(required(row.expires_at, \"run expiry\")),\n }\n }\n if (row.status === \"waiting\" && row.waiting_for === \"account_selection\") {\n return {\n ...base,\n status: \"waiting\",\n waitingFor: \"account_selection\",\n authorizationId: required(row.authorization_id, \"authorization id\"),\n expiresAt: date(required(row.expires_at, \"run expiry\")),\n }\n }\n if (row.status === \"running\") {\n return {\n ...base,\n status: \"running\",\n processingId: required(row.processing_id, \"processing id\"),\n callbackStartedAt: date(required(row.callback_started_at, \"callback start\")),\n expiresAt: date(required(row.expires_at, \"run expiry\")),\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n }\n }\n const finishedAt = date(required(row.finished_at, \"run finish\"))\n if (row.status === \"succeeded\") {\n return {\n ...base,\n status: \"succeeded\",\n authorizationId: required(row.authorization_id, \"authorization id\"),\n ...(row.cleanup_authorization_id === null\n ? {}\n : { cleanupAuthorizationId: row.cleanup_authorization_id }),\n connections: required(row.connections, \"connections\").map(connectionFromSerialized),\n finishedAt,\n }\n }\n if (row.status === \"failed\") {\n return {\n ...base,\n status: \"failed\",\n error: required(row.error, \"run error\"),\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n finishedAt,\n }\n }\n if (row.status === \"cancelled\") {\n return {\n ...base,\n status: \"cancelled\",\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n finishedAt,\n }\n }\n if (row.status === \"expired\") {\n return {\n ...base,\n status: \"expired\",\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n finishedAt,\n }\n }\n throw new Error(`[SixbPg] Stored connector connection run status '${row.status}' is invalid.`)\n}\n\nfunction authorizationValues(record: ConnectorAuthorizationRecord) {\n const mutation = record.credentialMutation\n return {\n mutationId: mutation?.id ?? null,\n mutationKind: mutation?.kind ?? null,\n mutationPhase: mutation?.phase ?? null,\n mutationHolderId: mutation?.holderId ?? null,\n mutationExpiresAt: mutation?.expiresAt ?? null,\n mutationDeadlineAt: mutation?.deadlineAt ?? null,\n mutationExpectedConnectionIds: mutation?.expectedConnectionIds ?? null,\n stagedCredentials: mutation?.stagedCredentials?.credentials ?? null,\n stagedCredentialExpiresAt: mutation?.stagedCredentials?.credentialExpiresAt ?? null,\n stagedScopes: mutation?.stagedCredentials?.scopes ?? null,\n }\n}\n\nfunction authorizationFromRow(row: PgAuthorizationRow): ConnectorAuthorizationRecord {\n const mutation = mutationFromRow(row)\n return {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n authorizedBy: row.authorized_by,\n ...(row.credentials === null ? {} : { credentials: row.credentials }),\n ...(row.credential_expires_at === null\n ? {}\n : { credentialExpiresAt: date(row.credential_expires_at) }),\n scopes: row.scopes,\n accounts: row.accounts,\n status: row.status,\n ...(row.selection_expires_at === null\n ? {}\n : { selectionExpiresAt: date(row.selection_expires_at) }),\n revision: row.revision,\n ...(mutation === undefined ? {} : { credentialMutation: mutation }),\n createdAt: date(row.created_at),\n updatedAt: date(row.updated_at),\n }\n}\n\nfunction mutationFromRow(row: PgAuthorizationRow): ConnectorCredentialMutation | undefined {\n if (row.mutation_id === null) return undefined\n const stagedCredentials: ConnectorStagedCredentials | undefined =\n row.staged_credentials === null\n ? undefined\n : {\n credentials: row.staged_credentials,\n ...(row.staged_credential_expires_at === null\n ? {}\n : { credentialExpiresAt: date(row.staged_credential_expires_at) }),\n scopes: required(row.staged_scopes, \"staged credential scopes\"),\n }\n return {\n id: row.mutation_id,\n kind: required(row.mutation_kind, \"credential mutation kind\"),\n phase: required(row.mutation_phase, \"credential mutation phase\"),\n holderId: required(row.mutation_holder_id, \"credential mutation holder\"),\n expiresAt: date(required(row.mutation_expires_at, \"credential mutation expiry\")),\n deadlineAt: date(required(row.mutation_deadline_at, \"credential mutation deadline\")),\n ...(row.mutation_expected_connection_ids === null\n ? {}\n : { expectedConnectionIds: row.mutation_expected_connection_ids }),\n ...(stagedCredentials === undefined ? {} : { stagedCredentials }),\n }\n}\n\nfunction connectionFromRow(row: PgConnectionRow): ConnectorConnectionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n authorizationId: row.authorization_id,\n owner: { type: \"project\" },\n slot: row.slot,\n account: row.account,\n status: row.status,\n ...(row.disconnected_at === null ? {} : { disconnectedAt: date(row.disconnected_at) }),\n createdAt: date(row.created_at),\n updatedAt: date(row.updated_at),\n }\n}\n\ntype SerializedConnectorConnection = Omit<\n ConnectorConnectionRecord,\n \"createdAt\" | \"updatedAt\" | \"disconnectedAt\"\n> & {\n readonly createdAt: string\n readonly updatedAt: string\n readonly disconnectedAt?: string\n}\n\nfunction connectionFromSerialized(\n record: SerializedConnectorConnection\n): ConnectorConnectionRecord {\n const { createdAt, updatedAt, disconnectedAt, ...connection } = record\n return {\n ...connection,\n createdAt: new Date(createdAt),\n updatedAt: new Date(updatedAt),\n ...(disconnectedAt === undefined ? {} : { disconnectedAt: new Date(disconnectedAt) }),\n }\n}\n\ntype PgJsonValue = Parameters<SQLClient[\"json\"]>[0]\n\nfunction jsonParameter(sql: PgStoreClient, value: unknown): ReturnType<PgStoreClient[\"json\"]> {\n return sql.json(value as PgJsonValue)\n}\n\nfunction date(value: Date | string): Date {\n return new Date(value)\n}\n\nfunction required<T>(value: T | null, label: string): T {\n if (value !== null) return value\n throw new Error(`[SixbPg] Stored ${label} is missing.`)\n}\n\nfunction assertChanged(rows: readonly unknown[], label: string, id: string): void {\n if (rows.length === 1) return\n throw new Error(`[SixbPg] Stored ${label} '${id}' is unavailable.`)\n}\n\ninterface ConnectorConnectionTestClock {\n offsetMs: number\n}\n\ninterface PgAuthorizationAttemptRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly slot: string\n readonly initiated_by_execution_id: string\n readonly state_hash: string\n readonly code_verifier: ConnectorAuthorizationAttemptRecord[\"codeVerifier\"]\n readonly redirect_uri: string\n readonly connection_run_id: string | null\n readonly return_to: string | null\n readonly callback_binding_hash: string | null\n readonly reauthorization_id: string | null\n readonly reauthorization_revision: number | null\n readonly reauthorization_connection_ids: readonly string[] | null\n readonly created_at: Date | string\n readonly expires_at: Date | string\n}\n\ninterface PgConnectionRunRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly kind: ConnectorConnectionRunRecord[\"kind\"]\n readonly slot: string\n readonly initiated_by_execution_id: string\n readonly status: ConnectorConnectionRunRecord[\"status\"]\n readonly waiting_for: \"provider_authorization\" | \"account_selection\" | null\n readonly processing_id: string | null\n readonly callback_started_at: Date | string | null\n readonly expires_at: Date | string | null\n readonly authorization_id: string | null\n readonly cleanup_authorization_id: string | null\n readonly connections: readonly SerializedConnectorConnection[] | null\n readonly error: Extract<ConnectorConnectionRunRecord, { status: \"failed\" }>[\"error\"] | null\n readonly created_at: Date | string\n readonly updated_at: Date | string\n readonly finished_at: Date | string | null\n}\n\ninterface PgAuthorizationRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly authorized_by: ConnectorAuthorizationRecord[\"authorizedBy\"]\n readonly credentials: ConnectorAuthorizationRecord[\"credentials\"] | null\n readonly credential_expires_at: Date | string | null\n readonly scopes: readonly string[]\n readonly accounts: ConnectorAuthorizationRecord[\"accounts\"]\n readonly status: ConnectorAuthorizationRecord[\"status\"]\n readonly selection_expires_at: Date | string | null\n readonly revision: number\n readonly mutation_id: string | null\n readonly mutation_kind: ConnectorCredentialMutation[\"kind\"] | null\n readonly mutation_phase: ConnectorCredentialMutation[\"phase\"] | null\n readonly mutation_holder_id: string | null\n readonly mutation_expires_at: Date | string | null\n readonly mutation_deadline_at: Date | string | null\n readonly mutation_expected_connection_ids: readonly string[] | null\n readonly staged_credentials: ConnectorStagedCredentials[\"credentials\"] | null\n readonly staged_credential_expires_at: Date | string | null\n readonly staged_scopes: readonly string[] | null\n readonly created_at: Date | string\n readonly updated_at: Date | string\n}\n\ninterface PgConnectionRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly authorization_id: string\n readonly slot: string\n readonly account: ConnectorConnectionRecord[\"account\"]\n readonly status: ConnectorConnectionRecord[\"status\"]\n readonly disconnected_at: Date | string | null\n readonly created_at: Date | string\n readonly updated_at: Date | string\n}\n",
|
|
28
|
-
"import { createHash } from \"node:crypto\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport type { SQL, SQLClient } from \"./pg-client\"\n\nexport interface PostgresMigrationContext {\n exec(sqlText: string): Promise<void>\n}\n\nexport const POSTGRES_STORAGE_ADAPTER_ID = \"SixbPostgresStorage\"\n\nexport function pgSql(id: string, sqlText: string): MigrationStep<PostgresMigrationContext> {\n return pgStep(id, (context) => context.exec(sqlText), { checksum: checksum(sqlText) })\n}\n\nexport function pgStep(\n id: string,\n up: (context: PostgresMigrationContext) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<PostgresMigrationContext> {\n return step<PostgresMigrationContext>(id, up, options)\n}\n\nexport function createPostgresStorageMigrators(\n sql: SQL,\n schemaName: string\n): readonly StorageMigrator[] {\n return [\n createPostgresMigrator({\n sql,\n schemaName,\n migrations: postgresStorageMigrations,\n }),\n ]\n}\n\nexport function createPostgresMigrator(params: {\n readonly sql: SQL\n readonly schemaName: string\n readonly migrations: MigrationSet<PostgresMigrationContext>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readPostgresHistory(params.sql, params.schemaName, params.migrations.adapterId),\n })\n },\n migrate() {\n return withPostgresMigrationLock(params, async (sql) => {\n const session = postgresMigrationSession(sql, params.schemaName)\n return runMigrationSet({\n context: session.context,\n migrations: params.migrations,\n state: session.state,\n })\n })\n },\n }\n}\n\nexport async function migratePostgresStorage(sql: SQL, schemaName: string): Promise<void> {\n await createPostgresMigrator({\n sql,\n schemaName,\n migrations: postgresStorageMigrations,\n }).migrate()\n}\n\nexport async function dropSchema(sql: SQL, schemaName: string): Promise<void> {\n await sql.unsafe(`DROP SCHEMA IF EXISTS ${quoteIdent(schemaName)} CASCADE`)\n}\n\nexport function quoteIdent(identifier: string): string {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(identifier)) {\n throw new Error(`[SixbPg] Invalid identifier: ${identifier}`)\n }\n return `\"${identifier}\"`\n}\n\nfunction postgresMigrationSession(\n sql: SQL,\n schemaName: string\n): { context: PostgresMigrationContext; state: MigrationHistoryStore } {\n const schema = quoteIdent(schemaName)\n const migrationsTable = `${schema}.sixb_migrations`\n // Migration steps receive a stable context; route exec() through the active transaction.\n let active: SQLClient | null = null\n const connection = (): SQLClient => active ?? sql\n\n return {\n context: {\n async exec(sqlText) {\n await connection().unsafe(sqlText)\n },\n },\n state: {\n async ensure() {\n await sql.unsafe(`\n CREATE SCHEMA IF NOT EXISTS ${schema};\n\n CREATE TABLE IF NOT EXISTS ${migrationsTable} (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL CHECK (status IN ('started', 'applied')),\n started_at TIMESTAMPTZ NOT NULL,\n finished_at TIMESTAMPTZ,\n PRIMARY KEY (adapter_id, version)\n );\n `)\n },\n async readHistory(adapterId) {\n const rows = await sql.unsafe<PostgresMigrationRow[]>(\n `SELECT * FROM ${migrationsTable} WHERE adapter_id = $1 ORDER BY version`,\n [adapterId]\n )\n return rows.map(rowToMigrationRecord)\n },\n async markStarted(adapterId, migration, at) {\n await connection().unsafe(\n `\n INSERT INTO ${migrationsTable} (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES ($1, $2, $3, $4, 'started', $5, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `,\n [adapterId, migration.version, migration.id, migration.checksum ?? null, at]\n )\n },\n async markApplied(adapterId, migration, at) {\n await connection().unsafe(\n `\n UPDATE ${migrationsTable}\n SET status = 'applied', finished_at = $1\n WHERE adapter_id = $2 AND version = $3\n `,\n [at, adapterId, migration.version]\n )\n },\n async transaction(run) {\n // `sql` is the reserved connection holding the migration advisory lock. porsager's\n // reserved connection has no `.begin`, so drive the transaction manually on it and\n // route exec()/markStarted()/markApplied() through the same connection via `active`.\n const previous = active\n active = sql\n await sql.unsafe(\"BEGIN\")\n try {\n await sql.unsafe(`SET LOCAL search_path TO ${schema}`)\n const result = await run()\n await sql.unsafe(\"COMMIT\")\n return result\n } catch (error) {\n await sql.unsafe(\"ROLLBACK\")\n throw error\n } finally {\n active = previous\n }\n },\n },\n }\n}\n\n/**\n * Reads migration history without DDL and without the advisory lock. `null` means the\n * history table does not exist, which is a state and not a failure.\n *\n * `migrate()` cannot be used for this: it calls `ensure()` first, so it runs\n * `CREATE SCHEMA`/`CREATE TABLE` and reserves a connection to hold\n * `pg_advisory_lock`. A probe must need no DDL grant — `/ready` is public and\n * unauthenticated — and must not serialize N replicas behind one lock.\n *\n * `to_regclass` returns NULL for a missing relation (including a missing schema)\n * instead of raising, and needs no catalog privileges.\n */\nasync function readPostgresHistory(\n sql: SQL,\n schemaName: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n const schema = quoteIdent(schemaName)\n const probe = await sql.unsafe<{ oid: string | null }[]>(`SELECT to_regclass($1) AS oid`, [\n `${schema}.sixb_migrations`,\n ])\n if (!probe[0]?.oid) {\n return null\n }\n\n const rows = await sql.unsafe<PostgresMigrationRow[]>(\n `SELECT * FROM ${schema}.sixb_migrations WHERE adapter_id = $1 ORDER BY version`,\n [adapterId]\n )\n return rows.map(rowToMigrationRecord)\n}\n\nasync function withPostgresMigrationLock<T>(\n params: {\n readonly sql: SQL\n readonly schemaName: string\n readonly migrations: MigrationSet<PostgresMigrationContext>\n },\n run: (sql: SQL) => Promise<T>\n): Promise<T> {\n const sql = await params.sql.reserve()\n const [first, second] = advisoryLockParts(\n `storage:migration:${params.schemaName}:${params.migrations.adapterId}`\n )\n\n try {\n await sql`SELECT pg_advisory_lock(${first}, ${second})`\n try {\n return await run(sql)\n } finally {\n await sql`SELECT pg_advisory_unlock(${first}, ${second})`\n }\n } finally {\n sql.release()\n }\n}\n\nfunction advisoryLockParts(key: string): readonly [number, number] {\n const hash = createHash(\"sha256\").update(key).digest()\n return [hash.readInt32BE(0), hash.readInt32BE(4)]\n}\n\nfunction rowToMigrationRecord(row: PostgresMigrationRow): MigrationRecord {\n return {\n adapterId: row.adapter_id,\n version: row.version,\n id: row.id,\n checksum: row.checksum ?? undefined,\n status: row.status,\n startedAt: toIsoString(row.started_at),\n finishedAt: row.finished_at ? toIsoString(row.finished_at) : undefined,\n }\n}\n\nfunction toIsoString(value: Date | string): string {\n return value instanceof Date ? value.toISOString() : new Date(value).toISOString()\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\nexport const postgresStorageMigrations = defineMigrations<PostgresMigrationContext>({\n adapterId: POSTGRES_STORAGE_ADAPTER_ID,\n steps: [\n pgSql(\"001-initial-schema\", initialSchemaSql),\n pgSql(\"002-workflow-run-output\", workflowRunOutputSql),\n pgSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n pgSql(\"004-executions\", executionsSql),\n pgSql(\"005-workflow-executions\", workflowExecutionsSql),\n pgSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n pgSql(\"007-split-overrides\", splitOverridesSql),\n pgSql(\"008-action-executions\", actionExecutionsSql),\n pgSql(\"009-agent-executions\", agentExecutionsSql),\n pgSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n pgSql(\"011-sync-failure-record\", syncFailureRecordSql),\n pgSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n pgSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n pgSql(\"014-agent-failure-record\", agentFailureRecordSql),\n pgSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n pgSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n pgSql(\"017-action-failure-record\", actionFailureRecordSql),\n pgSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n pgSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n pgSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n pgSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n pgSql(\"022-projection-executions\", projectionExecutionsSql),\n pgSql(\"023-webhook-executions\", webhookExecutionsSql),\n pgSql(\"024-ontology-commit-executions\", ontologyCommitExecutionsSql),\n pgSql(\"025-connector-connections\", connectorConnectionsSql),\n ],\n})\n\ninterface PostgresMigrationRow {\n readonly adapter_id: string\n readonly version: number\n readonly id: string\n readonly checksum: string | null\n readonly status: MigrationRecord[\"status\"]\n readonly started_at: Date | string\n readonly finished_at: Date | string | null\n}\n",
|
|
29
|
+
"import { createHash } from \"node:crypto\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport type { SQL, SQLClient } from \"./pg-client\"\n\nexport interface PostgresMigrationContext {\n exec(sqlText: string): Promise<void>\n}\n\nexport const POSTGRES_STORAGE_ADAPTER_ID = \"SixbPostgresStorage\"\n\nexport function pgSql(id: string, sqlText: string): MigrationStep<PostgresMigrationContext> {\n return pgStep(id, (context) => context.exec(sqlText), { checksum: checksum(sqlText) })\n}\n\nexport function pgStep(\n id: string,\n up: (context: PostgresMigrationContext) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<PostgresMigrationContext> {\n return step<PostgresMigrationContext>(id, up, options)\n}\n\nexport function createPostgresStorageMigrators(\n sql: SQL,\n schemaName: string\n): readonly StorageMigrator[] {\n return [\n createPostgresMigrator({\n sql,\n schemaName,\n migrations: postgresStorageMigrations,\n }),\n ]\n}\n\nexport function createPostgresMigrator(params: {\n readonly sql: SQL\n readonly schemaName: string\n readonly migrations: MigrationSet<PostgresMigrationContext>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readPostgresHistory(params.sql, params.schemaName, params.migrations.adapterId),\n })\n },\n migrate() {\n return withPostgresMigrationLock(params, async (sql) => {\n const session = postgresMigrationSession(sql, params.schemaName)\n return runMigrationSet({\n context: session.context,\n migrations: params.migrations,\n state: session.state,\n })\n })\n },\n }\n}\n\nexport async function migratePostgresStorage(sql: SQL, schemaName: string): Promise<void> {\n await createPostgresMigrator({\n sql,\n schemaName,\n migrations: postgresStorageMigrations,\n }).migrate()\n}\n\nexport async function dropSchema(sql: SQL, schemaName: string): Promise<void> {\n await sql.unsafe(`DROP SCHEMA IF EXISTS ${quoteIdent(schemaName)} CASCADE`)\n}\n\nexport function quoteIdent(identifier: string): string {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(identifier)) {\n throw new Error(`[SixbPg] Invalid identifier: ${identifier}`)\n }\n return `\"${identifier}\"`\n}\n\nfunction postgresMigrationSession(\n sql: SQL,\n schemaName: string\n): { context: PostgresMigrationContext; state: MigrationHistoryStore } {\n const schema = quoteIdent(schemaName)\n const migrationsTable = `${schema}.sixb_migrations`\n // Migration steps receive a stable context; route exec() through the active transaction.\n let active: SQLClient | null = null\n const connection = (): SQLClient => active ?? sql\n\n return {\n context: {\n async exec(sqlText) {\n await connection().unsafe(sqlText)\n },\n },\n state: {\n async ensure() {\n await sql.unsafe(`\n CREATE SCHEMA IF NOT EXISTS ${schema};\n\n CREATE TABLE IF NOT EXISTS ${migrationsTable} (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL CHECK (status IN ('started', 'applied')),\n started_at TIMESTAMPTZ NOT NULL,\n finished_at TIMESTAMPTZ,\n PRIMARY KEY (adapter_id, version)\n );\n `)\n },\n async readHistory(adapterId) {\n const rows = await sql.unsafe<PostgresMigrationRow[]>(\n `SELECT * FROM ${migrationsTable} WHERE adapter_id = $1 ORDER BY version`,\n [adapterId]\n )\n return rows.map(rowToMigrationRecord)\n },\n async markStarted(adapterId, migration, at) {\n await connection().unsafe(\n `\n INSERT INTO ${migrationsTable} (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES ($1, $2, $3, $4, 'started', $5, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `,\n [adapterId, migration.version, migration.id, migration.checksum ?? null, at]\n )\n },\n async markApplied(adapterId, migration, at) {\n await connection().unsafe(\n `\n UPDATE ${migrationsTable}\n SET status = 'applied', finished_at = $1\n WHERE adapter_id = $2 AND version = $3\n `,\n [at, adapterId, migration.version]\n )\n },\n async transaction(run) {\n // `sql` is the reserved connection holding the migration advisory lock. porsager's\n // reserved connection has no `.begin`, so drive the transaction manually on it and\n // route exec()/markStarted()/markApplied() through the same connection via `active`.\n const previous = active\n active = sql\n await sql.unsafe(\"BEGIN\")\n try {\n await sql.unsafe(`SET LOCAL search_path TO ${schema}`)\n const result = await run()\n await sql.unsafe(\"COMMIT\")\n return result\n } catch (error) {\n await sql.unsafe(\"ROLLBACK\")\n throw error\n } finally {\n active = previous\n }\n },\n },\n }\n}\n\n/**\n * Reads migration history without DDL and without the advisory lock. `null` means the\n * history table does not exist, which is a state and not a failure.\n *\n * `migrate()` cannot be used for this: it calls `ensure()` first, so it runs\n * `CREATE SCHEMA`/`CREATE TABLE` and reserves a connection to hold\n * `pg_advisory_lock`. A probe must need no DDL grant — `/ready` is public and\n * unauthenticated — and must not serialize N replicas behind one lock.\n *\n * `to_regclass` returns NULL for a missing relation (including a missing schema)\n * instead of raising, and needs no catalog privileges.\n */\nasync function readPostgresHistory(\n sql: SQL,\n schemaName: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n const schema = quoteIdent(schemaName)\n const probe = await sql.unsafe<{ oid: string | null }[]>(`SELECT to_regclass($1) AS oid`, [\n `${schema}.sixb_migrations`,\n ])\n if (!probe[0]?.oid) {\n return null\n }\n\n const rows = await sql.unsafe<PostgresMigrationRow[]>(\n `SELECT * FROM ${schema}.sixb_migrations WHERE adapter_id = $1 ORDER BY version`,\n [adapterId]\n )\n return rows.map(rowToMigrationRecord)\n}\n\nasync function withPostgresMigrationLock<T>(\n params: {\n readonly sql: SQL\n readonly schemaName: string\n readonly migrations: MigrationSet<PostgresMigrationContext>\n },\n run: (sql: SQL) => Promise<T>\n): Promise<T> {\n const sql = await params.sql.reserve()\n const [first, second] = advisoryLockParts(\n `storage:migration:${params.schemaName}:${params.migrations.adapterId}`\n )\n\n try {\n await sql`SELECT pg_advisory_lock(${first}, ${second})`\n try {\n return await run(sql)\n } finally {\n await sql`SELECT pg_advisory_unlock(${first}, ${second})`\n }\n } finally {\n sql.release()\n }\n}\n\nfunction advisoryLockParts(key: string): readonly [number, number] {\n const hash = createHash(\"sha256\").update(key).digest()\n return [hash.readInt32BE(0), hash.readInt32BE(4)]\n}\n\nfunction rowToMigrationRecord(row: PostgresMigrationRow): MigrationRecord {\n return {\n adapterId: row.adapter_id,\n version: row.version,\n id: row.id,\n checksum: row.checksum ?? undefined,\n status: row.status,\n startedAt: toIsoString(row.started_at),\n finishedAt: row.finished_at ? toIsoString(row.finished_at) : undefined,\n }\n}\n\nfunction toIsoString(value: Date | string): string {\n return value instanceof Date ? value.toISOString() : new Date(value).toISOString()\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\nexport const postgresStorageMigrations = defineMigrations<PostgresMigrationContext>({\n adapterId: POSTGRES_STORAGE_ADAPTER_ID,\n steps: [\n pgSql(\"001-initial-schema\", initialSchemaSql),\n pgSql(\"002-workflow-run-output\", workflowRunOutputSql),\n pgSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n pgSql(\"004-executions\", executionsSql),\n pgSql(\"005-workflow-executions\", workflowExecutionsSql),\n pgSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n pgSql(\"007-split-overrides\", splitOverridesSql),\n pgSql(\"008-action-executions\", actionExecutionsSql),\n pgSql(\"009-agent-executions\", agentExecutionsSql),\n pgSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n pgSql(\"011-sync-failure-record\", syncFailureRecordSql),\n pgSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n pgSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n pgSql(\"014-agent-failure-record\", agentFailureRecordSql),\n pgSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n pgSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n pgSql(\"017-action-failure-record\", actionFailureRecordSql),\n pgSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n pgSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n pgSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n pgSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n pgSql(\"022-projection-executions\", projectionExecutionsSql),\n pgSql(\"023-webhook-executions\", webhookExecutionsSql),\n pgSql(\"024-ontology-commit-executions\", ontologyCommitExecutionsSql),\n pgSql(\"025-connector-connections\", connectorConnectionsSql),\n pgSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n pgSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n pgSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n ],\n})\n\ninterface PostgresMigrationRow {\n readonly adapter_id: string\n readonly version: number\n readonly id: string\n readonly checksum: string | null\n readonly status: MigrationRecord[\"status\"]\n readonly started_at: Date | string\n readonly finished_at: Date | string | null\n}\n",
|
|
29
30
|
"import { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologyOutboxRecord,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\n\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n originColumns,\n originWhere,\n sourceEntityKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\n\nexport type PgRootOperation = <T>(run: (sql: SQLClient) => Promise<T>) => Promise<T>\n\ntype PgJsonValue = Parameters<SQLClient[\"json\"]>[0]\n\nexport interface PgOntologyCommitRow {\n readonly project_id: string\n readonly id: string\n readonly idempotency_key: string\n readonly request_hash: string\n readonly execution_id: string\n readonly origin_kind: string\n readonly origin_run_id: string | null\n readonly origin_batch_ordinal: number | string | null\n readonly origin: unknown\n readonly actor: unknown | null\n readonly ontology_revision: string\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n readonly intent: unknown\n readonly result: unknown\n readonly committed_at: Date | string\n}\n\nexport interface PgOntologySourceRow {\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly projection_run_id: string\n readonly projection_kind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly status: OntologySourceRecord[\"status\"]\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: Date | string\n readonly projection_revision: string\n readonly ownership_hash: string\n readonly ontology_revision: string\n readonly root_count: number | string | null\n readonly assertion_count: number | string | null\n readonly created_at: Date | string\n readonly ready_at: Date | string | null\n readonly activated_at: Date | string | null\n readonly terminal_at: Date | string | null\n readonly last_commit_id: string | null\n readonly updated_at: Date | string\n}\n\nexport interface PgOntologySourceAssertionRow {\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly entity_kind: \"object\" | \"link\"\n readonly entity_key: unknown\n readonly entity_sort_key: string\n readonly root_kind: \"object\" | \"link\"\n readonly root_key: unknown\n readonly root_sort_key: string\n readonly staging_ordinal: number | string\n readonly root: unknown\n readonly assertion: unknown\n}\n\nexport interface PgStoredOverrideRow {\n readonly value: unknown\n readonly last_commit_id: string\n readonly updated_at: Date | string\n}\n\nexport interface PgOntologyOutboxRow {\n readonly envelope: unknown\n readonly available_at: Date | string\n readonly attempts: number | string\n readonly lease_id: string | null\n readonly lease_expires_at: Date | string | null\n readonly published_at: Date | string | null\n readonly last_failure: unknown | null\n readonly created_at: Date | string\n}\n\nexport function jsonParameter(sql: SQLClient, value: unknown): ReturnType<SQLClient[\"json\"]> {\n return sql.json(value as PgJsonValue)\n}\n\nexport function toIsoString(value: Date | string): string {\n return value instanceof Date ? value.toISOString() : new Date(value).toISOString()\n}\n\nexport function optionalIsoString(value: Date | string | null): string | null {\n return value === null ? null : toIsoString(value)\n}\n\nexport function databaseSafeInteger(value: number | string, label: string): number {\n const result = Number(value)\n if (!Number.isSafeInteger(result) || result < 0) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `${label} is outside the nonnegative safe-integer range.`\n )\n }\n return result\n}\n\nexport function sourceRecord(row: PgOntologySourceRow): OntologySourceRecord {\n return {\n projectId: row.project_id,\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n projectionRunId: row.projection_run_id,\n projectionKind: row.projection_kind,\n protocol: row.protocol,\n status: row.status,\n executionToken: row.execution_token,\n datasetVersion: {\n datasetId: row.dataset_id,\n versionId: row.dataset_version_id,\n createdAt: toIsoString(row.dataset_version_created_at),\n },\n projectionRevision: row.projection_revision,\n ownershipHash: row.ownership_hash,\n ontologyRevision: row.ontology_revision,\n rootCount:\n row.root_count === null ? null : databaseSafeInteger(row.root_count, \"Source root count\"),\n assertionCount:\n row.assertion_count === null\n ? null\n : databaseSafeInteger(row.assertion_count, \"Source assertion count\"),\n createdAt: toIsoString(row.created_at),\n readyAt: optionalIsoString(row.ready_at),\n activatedAt: optionalIsoString(row.activated_at),\n terminalAt: optionalIsoString(row.terminal_at),\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nexport function sourceAssertion(row: PgOntologySourceAssertionRow): StageSourceAssertion {\n return {\n root: structuredClone(row.root) as ProjectionEntityRef,\n assertion: structuredClone(row.assertion) as StageSourceAssertion[\"assertion\"],\n stagingOrdinal: databaseSafeInteger(row.staging_ordinal, \"Source staging ordinal\"),\n }\n}\n\nexport function commitRecord(row: PgOntologyCommitRow): OntologyCommitRecord {\n const base = {\n projectId: row.project_id,\n id: row.id,\n idempotencyKey: row.idempotency_key,\n requestHash: row.request_hash,\n executionId: row.execution_id,\n origin: structuredClone(row.origin) as OntologyCommitWrite[\"origin\"],\n ...(row.actor === null\n ? {}\n : {\n actor: structuredClone(row.actor) as NonNullable<OntologyCommitWrite[\"actor\"]>,\n }),\n ontologyRevision: row.ontology_revision,\n ...(row.projection_revision === null ? {} : { projectionRevision: row.projection_revision }),\n ...(row.ownership_hash === null ? {} : { ownershipHash: row.ownership_hash }),\n committedAt: toIsoString(row.committed_at),\n }\n const intent = structuredClone(row.intent) as OntologyCommitWrite[\"intent\"]\n const result = structuredClone(row.result) as OntologyCommitRecord[\"result\"]\n return { ...base, intent, result } as OntologyCommitRecord\n}\n\nexport function outboxRecord(row: PgOntologyOutboxRow): OntologyOutboxRecord {\n return {\n envelope: structuredClone(row.envelope) as OntologyOutboxRecord[\"envelope\"],\n availableAt: toIsoString(row.available_at),\n attempts: databaseSafeInteger(row.attempts, \"Ontology outbox attempts\"),\n leaseId: row.lease_id,\n leaseExpiresAt: optionalIsoString(row.lease_expires_at),\n publishedAt: optionalIsoString(row.published_at),\n lastFailure:\n row.last_failure === null\n ? null\n : parseSixbFailure(row.last_failure, ONTOLOGY_OUTBOX_FAILURE_CODES),\n createdAt: toIsoString(row.created_at),\n }\n}\n\nexport async function assertProjectionExecution(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n }\n): Promise<void> {\n const [run] = await sql<\n {\n readonly projection_id: string\n readonly projection_kind: string\n readonly status: string\n readonly materialization_protocol: string | null\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: Date | string | null\n readonly ontology_revision: string | null\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n }[]\n >`\n SELECT projection_id, projection_kind, status, materialization_protocol, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n ontology_revision, projection_revision, ownership_hash\n FROM projection_runs\n WHERE project_id = ${input.projectId} AND id = ${input.projectionRunId}\n FOR UPDATE\n `\n if (!run || run.status !== \"running\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' is missing or is not running.`\n )\n }\n if (run.projection_id !== input.sourceId || run.materialization_protocol !== \"replacement\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' does not own replacement source '${input.sourceId}'.`\n )\n }\n if (run.execution_token !== input.executionToken) {\n throw new MaterializationConflictError(\n \"execution-lost\",\n `Projection run '${input.projectionRunId}' execution token is stale.`\n )\n }\n const identity = input.identity\n if (\n identity &&\n (run.projection_kind !== identity.projectionKind ||\n run.materialization_protocol !== identity.protocol ||\n run.dataset_id !== identity.datasetVersion.datasetId ||\n run.dataset_version_id !== identity.datasetVersion.versionId ||\n run.dataset_version_created_at === null ||\n toIsoString(run.dataset_version_created_at) !== identity.datasetVersion.createdAt ||\n run.ontology_revision !== identity.ontologyRevision ||\n run.projection_revision !== identity.projectionRevision ||\n run.ownership_hash !== identity.ownershipHash)\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' immutable source identity does not match.`\n )\n }\n}\n\nexport function ontologyLockKey(kind: string, ...parts: readonly string[]): string {\n return `ontology:${kind}:${JSON.stringify(parts)}`\n}\n",
|
|
30
31
|
"import type {\n GetOntologyCommitByIdempotencyKeyInput,\n GetOntologyCommitByIdInput,\n GetOntologyCommitByOriginInput,\n ListOntologyCommitsInput,\n ListOntologyCommitsResult,\n OntologyCommitRecord,\n OntologyCommitStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n commitRecord,\n originWhere,\n type PgOntologyCommitRow,\n type PgRootOperation,\n} from \"./shared\"\n\nexport class PgOntologyCommitStorage implements OntologyCommitStorage {\n constructor(private readonly runRootOperation: PgRootOperation) {}\n\n async getByIdempotencyKey(\n input: GetOntologyCommitByIdempotencyKeyInput\n ): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.idempotencyKey, \"Ontology commit idempotency key\")\n const [row] = await sql<PgOntologyCommitRow[]>`\n SELECT * FROM ontology_commits\n WHERE project_id = ${input.projectId} AND idempotency_key = ${input.idempotencyKey}\n `\n return row ? commitRecord(row) : null\n })\n }\n\n async getById(input: GetOntologyCommitByIdInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.id, \"Ontology commit id\")\n const [row] = await sql<PgOntologyCommitRow[]>`\n SELECT * FROM ontology_commits\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n `\n return row ? commitRecord(row) : null\n })\n }\n\n async getByOrigin(input: GetOntologyCommitByOriginInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n const origin = originWhere(input.origin)\n assertNonblank(origin.runId, \"Ontology commit origin run id\")\n if (origin.batchOrdinal !== null) {\n assertNonnegativeInteger(origin.batchOrdinal, \"Ontology telemetry commit batch ordinal\")\n }\n const [row] =\n origin.batchOrdinal === null\n ? await sql<PgOntologyCommitRow[]>`\n SELECT * FROM ontology_commits\n WHERE project_id = ${input.projectId}\n AND origin_kind = ${origin.kind}\n AND origin_run_id = ${origin.runId}\n AND origin_batch_ordinal IS NULL\n `\n : await sql<PgOntologyCommitRow[]>`\n SELECT * FROM ontology_commits\n WHERE project_id = ${input.projectId}\n AND origin_kind = ${origin.kind}\n AND origin_run_id = ${origin.runId}\n AND origin_batch_ordinal = ${origin.batchOrdinal}\n `\n return row ? commitRecord(row) : null\n })\n }\n\n async list(input: ListOntologyCommitsInput): Promise<ListOntologyCommitsResult> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n if (input.run) assertNonblank(input.run.id, \"Ontology commit run id\")\n const offset = input.offset ?? 0\n const limit = input.limit\n assertNonnegativeInteger(offset, \"Ontology commit list offset\")\n if (limit !== undefined) assertNonnegativeInteger(limit, \"Ontology commit list limit\")\n\n const runFilter =\n input.run?.kind === \"action\"\n ? sql`AND origin_kind = 'action' AND origin_run_id = ${input.run.id}`\n : input.run?.kind === \"projection\"\n ? sql`AND origin_run_id = ${input.run.id}\n AND origin_kind IN ('projection', 'telemetry')`\n : sql``\n const [{ total }] = await sql<{ readonly total: number | string }[]>`\n SELECT COUNT(*) AS total\n FROM ontology_commits\n WHERE project_id = ${input.projectId} ${runFilter}\n `\n const direction = input.order === \"desc\" ? sql`DESC` : sql`ASC`\n const order =\n input.run?.kind === \"projection\"\n ? sql`CASE WHEN origin_kind = 'telemetry' THEN origin_batch_ordinal ELSE -1 END\n ${direction}, committed_at ${direction}, id ${direction}`\n : sql`committed_at ${direction}, id ${direction}`\n const limitFragment = limit === undefined ? sql`` : sql`LIMIT ${limit}`\n const rows = await sql<PgOntologyCommitRow[]>`\n SELECT * FROM ontology_commits\n WHERE project_id = ${input.projectId} ${runFilter}\n ORDER BY ${order}\n ${limitFragment} OFFSET ${offset}\n `\n const count = Number(total)\n const commits = rows.map(commitRecord)\n return { commits, total: count, hasMore: offset + commits.length < count }\n })\n }\n}\n",
|
|
31
32
|
"import type {\n EffectiveChangeCounts,\n ExpectedLinkRevision,\n ExpectedObjectRevision,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertPinnedDatasetWatermark,\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n objectRefSortKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertMaterializationFinalizationCorrelation,\n assertMaterializationHeader,\n assertMaterializationLaneCompletion,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertSourceActivationCorrelation,\n invalidCorrelation,\n sameNonnegativeCounts as sameCounts,\n uniqueSorted,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n FinalizeMaterializationInput,\n MaterializationObjectExistence,\n MaterializationPlanHeader,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n OntologyCommitRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceActivationWrite,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { lockAdvisoryKeys } from \"../transactions\"\nimport {\n type PgMaterializationSessionState,\n PgMaterializationSessions,\n type PgOntologyTransactionContext,\n} from \"./materialization-session\"\nimport {\n linkSortExpression,\n PG_MATERIALIZATION_WORK_TABLE,\n PgMaterializationStateReader,\n} from \"./materialization-state\"\nimport { PgMaterializationWriter } from \"./materialization-writer\"\nimport {\n assertProjectionExecution,\n commitRecord,\n jsonParameter,\n ontologyLockKey,\n originColumns,\n type PgOntologyCommitRow,\n type PgOntologySourceRow,\n toIsoString,\n} from \"./shared\"\n\ninterface ProjectionCountsRow {\n readonly object_classifications: number | string\n readonly link_classifications: number | string\n readonly objects_created: number | string\n readonly objects_updated: number | string\n readonly objects_deleted: number | string\n readonly links_created: number | string\n readonly links_updated: number | string\n readonly links_deleted: number | string\n}\n\ninterface TelemetrySummaryRow {\n readonly classified_points: number | string\n readonly points_created: number | string\n readonly points_updated: number | string\n readonly latest_objects_changed: number | string\n}\n\nexport class PgOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions: PgMaterializationSessions\n private readonly writer: PgMaterializationWriter\n\n constructor(\n private readonly sql: SQLClient,\n context: PgOntologyTransactionContext | null\n ) {\n this.sessions = new PgMaterializationSessions(sql, context)\n this.writer = new PgMaterializationWriter(sql)\n }\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n assertMaterializationHeader(input)\n const session = await this.sessions.create(input)\n try {\n await lockAdvisoryKeys(this.sql, materializationLockKeys(input))\n await this.assertCommitAbsent(input)\n const reader = new PgMaterializationStateReader(this.sql, input.commit.projectId)\n await this.assertSources(input.expected.sources, input.commit.projectId)\n const objectRevisions = await reader.effectiveObjectRevisions(\n input.expected.objects.map((expected) => expected.ref),\n true\n )\n for (const expected of input.expected.objects) {\n this.assertObject(objectRevisions.get(objectRefKey(expected.ref)) ?? null, expected)\n }\n const linkRevisions = await reader.effectiveLinkLastCommits(\n input.expected.links.map((expected) => expected.ref),\n true\n )\n for (const expected of input.expected.links) {\n this.assertLink(linkRevisions.get(linkRefKey(expected.ref)), expected)\n }\n const linkScopes = await reader.linkScopes(input.expected.linkScopes)\n for (const [index, expected] of input.expected.linkScopes.entries()) {\n if (linkScopes[index]?.fingerprint !== expected.fingerprint) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`\n )\n }\n }\n const points = await reader.exactPoints(input.expected.points, true)\n const pointRevisions = new Map(\n points.map(\n (point) => [telemetryPointKey(point.series, point.at), point.lastCommitId] as const\n )\n )\n for (const expected of input.expected.points) {\n if (\n (pointRevisions.get(telemetryPointKey(expected.series, expected.at)) ?? null) !==\n expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n return session.publicSession()\n } catch (error) {\n await this.sessions.release(session)\n throw error\n }\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const reader = new PgMaterializationStateReader(this.sql, session.header.commit.projectId)\n for await (const request of input.requests) {\n this.sessions.require(input.session)\n const objects = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objects.length; offset += input.pageRows) {\n const states = await reader.objectStates(objects.slice(offset, offset + input.pageRows))\n yield { objects: states, links: [], linkScopes: [], points: [] }\n }\n const links = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < links.length; offset += input.pageRows) {\n const states = await reader.linkStates(links.slice(offset, offset + input.pageRows))\n yield { objects: [], links: states, linkScopes: [], points: [] }\n }\n for await (const refs of reader.incidentLinks(request.incidentObjects, input.pageRows)) {\n this.sessions.require(input.session)\n yield {\n objects: [],\n links: await reader.linkStates(refs),\n linkScopes: [],\n points: [],\n }\n }\n const scopes = uniqueSorted(\n request.linkScopes,\n (scope) =>\n JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId]),\n (scope) => linkScopeSortKey(scope.source, scope.linkId)\n )\n for (let offset = 0; offset < scopes.length; offset += input.pageRows) {\n yield {\n objects: [],\n links: [],\n linkScopes: await reader.linkScopes(scopes.slice(offset, offset + input.pageRows)),\n points: [],\n }\n }\n const points = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < points.length; offset += input.pageRows) {\n const stored = await reader.exactPoints(points.slice(offset, offset + input.pageRows))\n if (stored.length > 0) {\n yield { objects: [], links: [], linkScopes: [], points: stored }\n }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const replacement = await this.requireReplacement(session, input)\n const reader = new PgMaterializationStateReader(this.sql, session.header.commit.projectId)\n if (input.entityKind === \"object\") {\n if (replacement.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n }\n replacement.objectStreamStarted = true\n for await (const identities of reader.replacementIdentities({\n sessionId: session.id,\n sourceId: replacement.sourceId,\n candidateMaterializationId: replacement.candidateMaterializationId,\n previousMaterializationId: replacement.previousMaterializationId,\n kind: \"object\",\n pageRows: input.pageRows,\n })) {\n this.sessions.require(input.session)\n const refs = identities.map((identity) => {\n if (identity.kind !== \"object\") {\n invalidCorrelation(\"Object replacement returned a link identity.\")\n }\n return identity.ref\n })\n const objects = await reader.replacementObjectStates(\n replacement.sourceId,\n replacement.candidateMaterializationId,\n refs\n )\n yield { objects, links: [] }\n }\n this.sessions.require(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n }\n replacement.linkStreamStarted = true\n const materializationIds = [\n replacement.candidateMaterializationId,\n ...(replacement.previousMaterializationId ? [replacement.previousMaterializationId] : []),\n ]\n for await (const identities of reader.replacementIdentities({\n sessionId: session.id,\n sourceId: replacement.sourceId,\n candidateMaterializationId: replacement.candidateMaterializationId,\n previousMaterializationId: replacement.previousMaterializationId,\n kind: \"link\",\n pageRows: input.pageRows,\n })) {\n this.sessions.require(input.session)\n const linkIdentities = identities.map((identity) => {\n if (identity.kind !== \"link\") {\n invalidCorrelation(\"Link replacement returned an object identity.\")\n }\n return identity\n })\n const links = await reader.replacementLinkStates(\n replacement.sourceId,\n replacement.candidateMaterializationId,\n materializationIds,\n linkIdentities\n )\n yield { objects: [], links }\n }\n this.sessions.require(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n await this.sessions.stage(input)\n }\n\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n assertPageRows(input.pageRows)\n return this.sessions.stream(input)\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.sessions.require(input.session)\n return this.sessions.readObjectExistence(session, input.refs)\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.sessions.require(input.session)\n const { commit } = session.header\n assertPlanChunkCorrelations(input.chunk, commit)\n const progress = await this.sessions.prepareChunkSequence(session, input.chunk)\n await this.writer.apply(commit.projectId, commit.id, input.chunk)\n this.sessions.commitChunkSequence(session, progress)\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.sessions.require(input.session)\n await this.assertCommitAbsent(session.header)\n await this.assertFinalization(session, input)\n for (const activation of input.finalization.sourceActivations) {\n await this.activateSource(session, activation)\n }\n const record = await this.insertCommit(session.header, input)\n await this.sessions.release(session)\n return { commit: record }\n }\n\n deactivateSessions(): void {\n this.sessions.deactivateAll()\n }\n\n private async requireReplacement(\n session: PgMaterializationSessionState,\n input: StreamSourceReplacementStateInput\n ): Promise<NonNullable<PgMaterializationSessionState[\"replacement\"]>> {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const candidate = await this.getSource(\n projectId,\n input.source.projectionId,\n input.candidateMaterializationId,\n true\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n await assertProjectionExecution(this.sql, {\n projectId,\n sourceId: input.source.projectionId,\n projectionRunId: candidate.projection_run_id,\n executionToken: candidate.execution_token,\n })\n const previous = await this.getActiveSource(projectId, input.source.projectionId, true)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projection_kind !== candidate.projection_kind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n session.replacement = {\n sourceId: input.source.projectionId,\n candidateMaterializationId: input.candidateMaterializationId,\n previousMaterializationId: previous?.materialization_id ?? null,\n projectionKind: candidate.projection_kind,\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n }\n return session.replacement\n }\n\n private async assertCommitAbsent(header: MaterializationPlanHeader): Promise<void> {\n const [duplicateIdentity] = await this.sql<\n { readonly id: string; readonly idempotency_key: string }[]\n >`\n SELECT id, idempotency_key\n FROM ontology_commits\n WHERE project_id = ${header.commit.projectId}\n AND (id = ${header.commit.id} OR idempotency_key = ${header.commit.idempotencyKey})\n ORDER BY CASE WHEN id = ${header.commit.id} THEN 0 ELSE 1 END\n LIMIT 1\n FOR UPDATE\n `\n if (duplicateIdentity) {\n throw new MaterializationConflictError(\n \"idempotency\",\n duplicateIdentity.id === header.commit.id\n ? `Ontology commit '${header.commit.id}' already exists.`\n : \"Ontology idempotency key already exists.\"\n )\n }\n\n const origin = originColumns(header.commit.origin)\n if (origin.runId === null) return\n const [duplicateOrigin] =\n origin.batchOrdinal === null\n ? await this.sql<{ readonly id: string }[]>`\n SELECT id FROM ontology_commits\n WHERE project_id = ${header.commit.projectId}\n AND origin_kind = ${origin.kind}\n AND origin_run_id = ${origin.runId}\n AND origin_batch_ordinal IS NULL\n LIMIT 1\n FOR UPDATE\n `\n : await this.sql<{ readonly id: string }[]>`\n SELECT id FROM ontology_commits\n WHERE project_id = ${header.commit.projectId}\n AND origin_kind = ${origin.kind}\n AND origin_run_id = ${origin.runId}\n AND origin_batch_ordinal = ${origin.batchOrdinal}\n LIMIT 1\n FOR UPDATE\n `\n if (duplicateOrigin) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n }\n\n private async assertSources(\n expectedSources: MaterializationPlanHeader[\"expected\"][\"sources\"],\n projectId: string\n ): Promise<void> {\n if (expectedSources.length === 0) return\n const rows = await this.sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${projectId}\n AND source_id = ANY(\n ${this.sql.array(expectedSources.map((expected) => expected.source.projectionId))}::text[]\n )\n AND status = 'active'\n FOR UPDATE\n `\n const active = new Map(rows.map((row) => [row.source_id, row] as const))\n for (const expected of expectedSources) {\n this.assertSourceRow(expected, active.get(expected.source.projectionId) ?? null)\n }\n }\n\n private assertSourceRow(\n expected: MaterializationPlanHeader[\"expected\"][\"sources\"][number],\n active: PgOntologySourceRow | null\n ): void {\n if (\n (active?.materialization_id ?? null) !== expected.activeMaterializationId ||\n (active?.last_commit_id ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private assertObject(\n row: { readonly version: number; readonly lastCommitId: string | null } | null,\n expected: ExpectedObjectRevision\n ): void {\n if (!expected.exists) {\n if (row) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} to be absent.`\n )\n }\n return\n }\n if (!row || row.version !== expected.version || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private assertLink(\n lastCommitId: string | null | undefined,\n expected: ExpectedLinkRevision\n ): void {\n if (!expected.exists) {\n if (lastCommitId !== undefined) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} to be absent.`\n )\n }\n return\n }\n if (lastCommitId === undefined || lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private async assertFinalization(\n session: PgMaterializationSessionState,\n input: FinalizeMaterializationInput\n ): Promise<void> {\n const { commit } = session.header\n const { result } = input.finalization\n assertMaterializationFinalizationCorrelation(session, input)\n const laneCounts = await this.sessions.laneCounts(session)\n assertMaterializationLaneCompletion(session, laneCounts)\n await this.assertFinalCardinality(session)\n const eventCount = laneCounts.event\n const [outbox] = await this.sql<\n {\n readonly count: number | string\n readonly minimum: number | string | null\n readonly maximum: number | string | null\n }[]\n >`\n SELECT COUNT(*) AS count, MIN(commit_ordinal) AS minimum,\n MAX(commit_ordinal) AS maximum\n FROM ontology_outbox\n WHERE project_id = ${commit.projectId} AND commit_id = ${commit.id}\n `\n const outboxCount = Number(outbox?.count ?? 0)\n const minimum = outbox?.minimum === null ? null : Number(outbox?.minimum)\n const maximum = outbox?.maximum === null ? null : Number(outbox?.maximum)\n if (\n outboxCount !== eventCount ||\n (eventCount > 0 && (minimum !== 0 || maximum !== eventCount - 1))\n ) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n\n if (commit.intent.kind === \"telemetry\") {\n const summary = await this.telemetrySummary(session, commit.intent.pointCount)\n if (summary.classifiedPoints !== commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n if (result.kind !== \"telemetry\" || !sameCounts(result, summary.counts)) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n }\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\") return\n await this.sessions.assertClassificationCoverage(session)\n if (!sameCounts(result.counts, await this.projectionCounts(session))) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n }\n }\n\n private async assertFinalCardinality(session: PgMaterializationSessionState): Promise<void> {\n const [violation] = await this.sql<{ readonly reason: \"duplicate\" | \"mismatch\" }[]>`\n WITH work AS (\n SELECT payload->>'scopeSortKey' AS scope_sort_key,\n payload->>'linkSortKey' AS link_sort_key,\n (payload->>'occupied')::boolean AS occupied,\n payload->'ref'->'source'->>'objectTypeId' AS source_type_id,\n payload->'ref'->'source'->>'primaryId' AS source_id,\n payload->'ref'->>'linkId' AS link_id\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id} AND kind = 'cardinality'\n AND payload->>'view' = 'effective'\n ), duplicate AS (\n SELECT scope_sort_key FROM work WHERE occupied\n GROUP BY scope_sort_key HAVING COUNT(*) > 1\n ), scopes AS (\n SELECT DISTINCT scope_sort_key, source_type_id, source_id, link_id FROM work\n ), expected AS (\n SELECT scope_sort_key, link_sort_key FROM work WHERE occupied\n ), actual AS (\n SELECT scopes.scope_sort_key,\n ${this.sql.unsafe(linkSortExpression(\"links\"))} AS link_sort_key\n FROM scopes\n JOIN links USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ${session.header.commit.projectId}\n ), differences AS (\n (SELECT * FROM expected EXCEPT SELECT * FROM actual)\n UNION ALL\n (SELECT * FROM actual EXCEPT SELECT * FROM expected)\n )\n SELECT 'duplicate'::text AS reason FROM duplicate\n UNION ALL\n SELECT 'mismatch'::text AS reason FROM differences\n LIMIT 1\n `\n if (violation?.reason === \"duplicate\") {\n invalidCorrelation(\"Materialization cardinality work violates cardinality-one.\")\n }\n if (violation) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n\n private async projectionCounts(\n session: PgMaterializationSessionState\n ): Promise<EffectiveChangeCounts> {\n const [row] = await this.sql<ProjectionCountsRow[]>`\n SELECT\n COUNT(*) FILTER (\n WHERE kind = 'classification' AND payload->>'entityKind' = 'object'\n ) AS object_classifications,\n COUNT(*) FILTER (\n WHERE kind = 'classification' AND payload->>'entityKind' = 'link'\n ) AS link_classifications,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'object-upsert'\n AND NOT (payload->'item'->'value'->'expected'->>'exists')::boolean\n ) AS objects_created,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'object-upsert'\n AND (payload->'item'->'value'->'expected'->>'exists')::boolean\n ) AS objects_updated,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'object-delete'\n ) AS objects_deleted,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'link-upsert'\n AND NOT (payload->'item'->'value'->'expected'->>'exists')::boolean\n ) AS links_created,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'link-upsert'\n AND (payload->'item'->'value'->'expected'->>'exists')::boolean\n ) AS links_updated,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'link-delete'\n ) AS links_deleted\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id}\n `\n const objectsCreated = databaseCount(row?.objects_created)\n const objectsUpdated = databaseCount(row?.objects_updated)\n const objectsDeleted = databaseCount(row?.objects_deleted)\n const linksCreated = databaseCount(row?.links_created)\n const linksUpdated = databaseCount(row?.links_updated)\n const linksDeleted = databaseCount(row?.links_deleted)\n return {\n objectsCreated,\n objectsUpdated,\n objectsDeleted,\n objectsUnchanged:\n databaseCount(row?.object_classifications) -\n objectsCreated -\n objectsUpdated -\n objectsDeleted,\n linksCreated,\n linksUpdated,\n linksDeleted,\n linksUnchanged:\n databaseCount(row?.link_classifications) - linksCreated - linksUpdated - linksDeleted,\n }\n }\n\n private async telemetrySummary(session: PgMaterializationSessionState, pointCount: number) {\n const [row] = await this.sql<TelemetrySummaryRow[]>`\n SELECT\n COUNT(*) FILTER (\n WHERE kind = 'classification' AND payload->>'entityKind' = 'point'\n ) AS classified_points,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'point-upsert'\n AND payload->'item'->'value'->'expected'->>'lastCommitId' IS NULL\n ) AS points_created,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'point-upsert'\n AND payload->'item'->'value'->'expected'->>'lastCommitId' IS NOT NULL\n ) AS points_updated,\n COUNT(*) FILTER (\n WHERE kind = 'plan' AND payload->'item'->>'kind' = 'object-upsert'\n ) AS latest_objects_changed\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id}\n `\n const pointsCreated = databaseCount(row?.points_created)\n const pointsUpdated = databaseCount(row?.points_updated)\n return {\n classifiedPoints: databaseCount(row?.classified_points),\n counts: {\n pointsCreated,\n pointsUpdated,\n pointsUnchanged: pointCount - pointsCreated - pointsUpdated,\n latestObjectsChanged: databaseCount(row?.latest_objects_changed),\n },\n }\n }\n\n private async activateSource(\n session: PgMaterializationSessionState,\n activation: SourceActivationWrite\n ): Promise<void> {\n const { commit } = session.header\n assertSourceActivationCorrelation(session, activation)\n const candidate = await this.getSource(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId,\n true\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n await assertProjectionExecution(this.sql, {\n projectId: commit.projectId,\n sourceId: activation.source.projectionId,\n projectionRunId: activation.execution.projectionRunId,\n executionToken: activation.execution.executionToken,\n })\n if (\n candidate.projection_run_id !== activation.execution.projectionRunId ||\n candidate.execution_token !== activation.execution.executionToken ||\n candidate.projection_kind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n candidate.dataset_id !== activation.datasetVersion.datasetId ||\n candidate.dataset_version_id !== activation.datasetVersion.versionId ||\n toIsoString(candidate.dataset_version_created_at) !== activation.datasetVersion.createdAt ||\n candidate.projection_revision !== activation.projectionRevision ||\n candidate.ownership_hash !== activation.ownershipHash ||\n candidate.ontology_revision !== activation.ontologyRevision ||\n candidate.ready_at === null ||\n activation.updatedAt < toIsoString(candidate.ready_at)\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n const previous = await this.getActiveSource(\n commit.projectId,\n activation.source.projectionId,\n true\n )\n this.assertSourceRow(activation.expected, previous)\n if (previous) {\n assertPinnedDatasetWatermark(\n {\n datasetId: previous.dataset_id,\n versionId: previous.dataset_version_id,\n createdAt: toIsoString(previous.dataset_version_created_at),\n },\n activation.datasetVersion,\n \"Source activation\"\n )\n if (activation.updatedAt < toIsoString(previous.updated_at)) {\n invalidCorrelation(\"Source activation cannot precede the active materialization update.\")\n }\n const superseded = await this.sql<{ readonly materialization_id: string }[]>`\n UPDATE ontology_sources\n SET status = 'superseded', execution_token = NULL,\n terminal_at = ${activation.updatedAt}, updated_at = ${activation.updatedAt}\n WHERE project_id = ${commit.projectId}\n AND source_id = ${activation.source.projectionId}\n AND materialization_id = ${previous.materialization_id}\n AND status = 'active'\n AND last_commit_id IS NOT DISTINCT FROM ${activation.expected.lastCommitId}\n RETURNING materialization_id\n `\n if (superseded.length !== 1) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${activation.source.projectionId}' changed.`\n )\n }\n }\n let activated: readonly { readonly materialization_id: string }[]\n try {\n activated = await this.sql<{ readonly materialization_id: string }[]>`\n UPDATE ontology_sources\n SET status = 'active', execution_token = NULL,\n activated_at = ${activation.updatedAt}, last_commit_id = ${activation.lastCommitId},\n updated_at = ${activation.updatedAt}\n WHERE project_id = ${commit.projectId}\n AND source_id = ${activation.source.projectionId}\n AND materialization_id = ${activation.materializationId}\n AND status = 'ready'\n AND execution_token = ${activation.execution.executionToken}\n RETURNING materialization_id\n `\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${activation.source.projectionId}' changed.`\n )\n }\n throw error\n }\n if (activated.length !== 1) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate changed.\"\n )\n }\n }\n\n private async insertCommit(\n header: MaterializationPlanHeader,\n input: FinalizeMaterializationInput\n ): Promise<OntologyCommitRecord> {\n const { commit } = header\n const origin = originColumns(commit.origin)\n const actor = commit.actor === undefined ? null : jsonParameter(this.sql, commit.actor)\n const rows = await this.sql<PgOntologyCommitRow[]>`\n INSERT INTO ontology_commits (\n project_id, id, idempotency_key, request_hash, execution_id,\n origin_kind, origin_run_id, origin_batch_ordinal, origin, actor,\n ontology_revision, projection_revision, ownership_hash,\n intent, result, committed_at\n ) VALUES (\n ${commit.projectId}, ${commit.id}, ${commit.idempotencyKey}, ${commit.requestHash},\n ${commit.executionId},\n ${origin.kind}, ${origin.runId}, ${origin.batchOrdinal},\n ${jsonParameter(this.sql, commit.origin)}, ${actor}, ${commit.ontologyRevision},\n ${commit.projectionRevision ?? null}, ${commit.ownershipHash ?? null},\n ${jsonParameter(this.sql, commit.intent)},\n ${jsonParameter(this.sql, input.finalization.result)}, ${commit.committedAt}\n )\n ON CONFLICT DO NOTHING\n RETURNING *\n `\n if (!rows[0]) {\n await this.assertCommitAbsent(header)\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology commit identity already exists.\"\n )\n }\n return commitRecord(rows[0])\n }\n\n private async getActiveSource(\n projectId: string,\n sourceId: string,\n lock = false\n ): Promise<PgOntologySourceRow | null> {\n const lockFragment = lock ? this.sql`FOR UPDATE` : this.sql``\n const [row] = await this.sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${projectId} AND source_id = ${sourceId} AND status = 'active'\n ${lockFragment}\n `\n return row ?? null\n }\n\n private async getSource(\n projectId: string,\n sourceId: string,\n materializationId: string,\n lock = false\n ): Promise<PgOntologySourceRow | null> {\n const lockFragment = lock ? this.sql`FOR UPDATE` : this.sql``\n const [row] = await this.sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${projectId}\n AND source_id = ${sourceId}\n AND materialization_id = ${materializationId}\n ${lockFragment}\n `\n return row ?? null\n }\n}\n\nfunction materializationLockKeys(header: MaterializationPlanHeader): string[] {\n const { commit, expected } = header\n const origin = originColumns(commit.origin)\n return [\n ontologyLockKey(\"commit-id\", commit.projectId, commit.id),\n ontologyLockKey(\"commit-idempotency\", commit.projectId, commit.idempotencyKey),\n ...(origin.runId === null\n ? []\n : [\n ontologyLockKey(\n \"commit-origin\",\n commit.projectId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal === null ? \"\" : String(origin.batchOrdinal)\n ),\n ]),\n ...expected.sources.map((value) =>\n ontologyLockKey(\"source\", commit.projectId, value.source.projectionId)\n ),\n ...expected.objects.map((value) =>\n ontologyLockKey(\"object\", commit.projectId, objectRefKey(value.ref))\n ),\n ...expected.links.map((value) =>\n ontologyLockKey(\"link\", commit.projectId, linkRefKey(value.ref))\n ),\n ...expected.linkScopes.map((value) =>\n ontologyLockKey(\n \"link-scope\",\n commit.projectId,\n value.source.objectTypeId,\n value.source.primaryId,\n value.linkId\n )\n ),\n ...expected.points.map((value) =>\n ontologyLockKey(\"point\", commit.projectId, telemetryPointKey(value.series, value.at))\n ),\n ]\n}\n\nfunction databaseCount(value: number | string | undefined): number {\n return Number(value ?? 0)\n}\n",
|
|
32
33
|
"import { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport {\n correlateMaterializationChunk,\n duplicateMaterializationWork as duplicateWork,\n invalidCorrelation,\n materializationPlanItems,\n ProviderMaterializationSessionState,\n type ProviderMaterializationTransactionLifecycle,\n prepareMaterializationWork,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationEventWorkRecord,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationSession,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n StageMaterializationWorkInput,\n StreamMaterializationWorkInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { PG_MATERIALIZATION_WORK_TABLE, PG_REPLACEMENT_WORK_TABLE } from \"./materialization-state\"\nimport { jsonParameter } from \"./shared\"\n\nexport interface PgOntologyTransactionContext {\n readonly id: object\n readonly materializations: ProviderMaterializationTransactionLifecycle\n active: boolean\n}\n\ninterface WorkCursor {\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n readonly recordKey: string\n}\n\nexport interface PgChunkSequenceProgress {\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n readonly appliedPlanCursor: WorkCursor | null\n readonly appliedEventCursor: WorkCursor | null\n}\n\nexport class PgMaterializationSessionState extends ProviderMaterializationSessionState {\n appliedPlanCursor: WorkCursor | null = null\n appliedEventCursor: WorkCursor | null = null\n}\n\ninterface WorkDatabaseRow {\n readonly record_key: string\n readonly major_order: number\n readonly minor_order: number\n readonly sort_one: string\n readonly sort_two: string\n readonly payload: unknown\n}\n\nexport class PgMaterializationSessions {\n private readonly sessions = new WeakMap<object, PgMaterializationSessionState>()\n private readonly live = new Set<PgMaterializationSessionState>()\n private tablesReady = false\n\n constructor(\n private readonly sql: SQLClient,\n private readonly context: PgOntologyTransactionContext | null\n ) {}\n\n async create(header: MaterializationPlanHeader): Promise<PgMaterializationSessionState> {\n if (!this.context?.active) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n await this.ensureTables()\n const session = new PgMaterializationSessionState(structuredClone(header), this.context.id)\n this.sessions.set(session.providerToken, session)\n this.live.add(session)\n this.context.materializations.register(session.providerToken)\n return session\n }\n\n require(session: MaterializationSession): PgMaterializationSessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.context?.active ||\n value.transactionId !== this.context.id\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n async release(session: PgMaterializationSessionState): Promise<void> {\n if (!session.active) return\n await this.deleteWork(session.id)\n session.active = false\n session.replacement = null\n this.live.delete(session)\n this.context?.materializations.complete(session.providerToken)\n }\n\n deactivateAll(): void {\n for (const session of this.live) {\n session.active = false\n session.replacement = null\n }\n this.live.clear()\n }\n\n async stage(input: StageMaterializationWorkInput): Promise<void> {\n const session = this.require(input.session)\n const records = prepareMaterializationWork(session, input)\n if (records.length === 0) return\n const payload = records.map(({ record, uniqueKey, columns }) => {\n return {\n recordKey: record.recordKey,\n uniqueKey,\n kind: record.kind,\n lane: columns.lane,\n majorOrder: columns.majorOrder,\n minorOrder: columns.minorOrder,\n sortOne: columns.sortOne,\n sortTwo: columns.sortTwo,\n record,\n }\n })\n // This session is the only writer to its transaction-local temp rows. Let the two unique\n // constraints arbitrate cross-chunk duplicates instead of issuing a duplicate probe before\n // every insert; a violation aborts the enclosing materialization transaction and is mapped\n // back to the provider contract below.\n try {\n await this.sql`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, payload)}::jsonb)\n )\n INSERT INTO ${this.sql(PG_MATERIALIZATION_WORK_TABLE)} (\n session_id, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two, payload\n )\n SELECT ${session.id}, value->>'recordKey', value->>'uniqueKey', value->>'kind',\n value->>'lane', (value->>'majorOrder')::integer, (value->>'minorOrder')::integer,\n value->>'sortOne', value->>'sortTwo', value->'record'\n FROM staged\n `\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw duplicateWork()\n }\n throw error\n }\n }\n\n async *stream(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.require(input.session)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n session.workSealed = true\n let cursor: WorkCursor | null = null\n while (true) {\n this.require(input.session)\n const rows = await this.readLane(input.order, session.id, cursor, input.pageRows)\n if (rows.length === 0) break\n const records = rows.map((row) =>\n structuredClone(row.payload)\n ) as MaterializationWorkPage[\"records\"]\n cursor = workCursor(rows[rows.length - 1]!)\n stream.emittedCount += records.length\n yield { records }\n }\n this.require(input.session)\n stream.completed = true\n }\n\n async readObjectExistence(\n session: PgMaterializationSessionState,\n refs: readonly { readonly objectTypeId: string; readonly primaryId: string }[]\n ): Promise<\n readonly {\n readonly ref: { readonly objectTypeId: string; readonly primaryId: string }\n readonly exists: boolean\n }[]\n > {\n if (refs.length === 0) return []\n const keys = refs.map(\n (ref) => `object-existence:${JSON.stringify([ref.objectTypeId, ref.primaryId])}`\n )\n const rows = await this.sql<{ readonly unique_key: string; readonly payload: unknown }[]>`\n SELECT unique_key, payload FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id}\n AND unique_key = ANY(${this.sql.array(keys)}::text[])\n AND kind = 'object-existence'\n `\n const found = new Map(rows.map((row) => [row.unique_key, row.payload] as const))\n return keys.flatMap((key) => {\n const payload = found.get(key)\n if (!payload) return []\n const record = structuredClone(payload) as Extract<\n MaterializationWorkRecord,\n { readonly kind: \"object-existence\" }\n >\n return [{ ref: record.ref, exists: record.exists }]\n })\n }\n\n async prepareChunkSequence(\n session: PgMaterializationSessionState,\n chunk: MaterializationPlanChunk\n ): Promise<PgChunkSequenceProgress> {\n const items = materializationPlanItems(chunk)\n const planRows = await this.readLane(\n \"apply\",\n session.id,\n session.appliedPlanCursor,\n items.length\n )\n const expectedItems = planRows.map(\n (row) =>\n (\n structuredClone(row.payload) as Extract<\n MaterializationWorkRecord,\n { readonly kind: \"plan\" }\n >\n ).item\n )\n const eventRows = await this.readLane(\n \"event\",\n session.id,\n session.appliedEventCursor,\n chunk.outbox.length\n )\n const expectedEvents = eventRows.map(\n (row) => structuredClone(row.payload) as MaterializationEventWorkRecord\n )\n const progress = correlateMaterializationChunk(\n session,\n chunk,\n items,\n expectedItems,\n expectedEvents\n )\n\n return {\n ...progress,\n appliedPlanCursor:\n planRows.length === 0\n ? session.appliedPlanCursor\n : workCursor(planRows[planRows.length - 1]!),\n appliedEventCursor:\n eventRows.length === 0\n ? session.appliedEventCursor\n : workCursor(eventRows[eventRows.length - 1]!),\n }\n }\n\n commitChunkSequence(\n session: PgMaterializationSessionState,\n progress: PgChunkSequenceProgress\n ): void {\n session.appliedPlanCount = progress.appliedPlanCount\n session.appliedOutboxCount = progress.appliedOutboxCount\n session.appliedPlanCursor = progress.appliedPlanCursor\n session.appliedEventCursor = progress.appliedEventCursor\n }\n\n async count(session: PgMaterializationSessionState, kind: string): Promise<number> {\n const [row] = await this.sql<{ readonly count: number | string }[]>`\n SELECT COUNT(*) AS count FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id} AND kind = ${kind}\n `\n return Number(row?.count ?? 0)\n }\n\n async laneCounts(session: PgMaterializationSessionState): Promise<{\n readonly apply: number\n readonly cardinality: number\n readonly event: number\n }> {\n const rows = await this.sql<\n { readonly lane: \"apply\" | \"cardinality\" | \"event\"; readonly count: number | string }[]\n >`\n SELECT lane, COUNT(*) AS count FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id} AND lane <> 'none'\n GROUP BY lane\n `\n const counts = { apply: 0, cardinality: 0, event: 0 }\n for (const row of rows) counts[row.lane] = Number(row.count)\n return counts\n }\n\n async assertClassificationCoverage(session: PgMaterializationSessionState): Promise<void> {\n if (!session.replacement) return\n const includeObjects = session.replacement.projectionKind === \"object\"\n const [mismatch] = await this.sql<{ readonly marker: number }[]>`\n WITH expected AS (\n SELECT entity_kind, identity_key\n FROM ${this.sql(PG_REPLACEMENT_WORK_TABLE)}\n WHERE session_id = ${session.id} AND diff_required\n AND (entity_kind = 'link' OR ${includeObjects})\n ), actual AS (\n SELECT payload->>'entityKind' AS entity_kind,\n payload->>'identityKey' AS identity_key\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id} AND kind = 'classification'\n AND payload->>'entityKind' IN ('object', 'link')\n ), differences AS (\n (SELECT * FROM expected EXCEPT SELECT * FROM actual)\n UNION ALL\n (SELECT * FROM actual EXCEPT SELECT * FROM expected)\n ), invalid AS (\n SELECT 1 AS marker FROM differences\n UNION ALL\n SELECT 1 AS marker FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${session.id} AND kind = 'classification'\n AND payload->>'entityKind' = 'point'\n )\n SELECT marker FROM invalid LIMIT 1\n `\n if (mismatch) {\n invalidCorrelation(\n \"Projection replacement classification coverage does not match its streamed state.\"\n )\n }\n }\n\n private async readLane(\n lane: StreamMaterializationWorkInput[\"order\"],\n sessionId: string,\n cursor: WorkCursor | null,\n limit: number\n ): Promise<WorkDatabaseRow[]> {\n if (limit === 0) return []\n const after = cursor\n ? this.sql`AND (major_order, minor_order, sort_one, sort_two, record_key) >\n (${cursor.majorOrder}, ${cursor.minorOrder}, ${cursor.sortOne}, ${cursor.sortTwo},\n ${cursor.recordKey})`\n : this.sql``\n return this.sql<WorkDatabaseRow[]>`\n SELECT record_key, major_order, minor_order, sort_one, sort_two, payload\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${sessionId} AND lane = ${lane} ${after}\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ${limit}\n `\n }\n\n private async ensureTables(): Promise<void> {\n if (this.tablesReady) return\n await this.sql`\n CREATE TEMP TABLE ${this.sql(PG_MATERIALIZATION_WORK_TABLE)} (\n session_id TEXT NOT NULL,\n record_key TEXT COLLATE \"C\" NOT NULL,\n unique_key TEXT NOT NULL,\n kind TEXT NOT NULL,\n lane TEXT NOT NULL,\n major_order INTEGER NOT NULL,\n minor_order INTEGER NOT NULL,\n sort_one TEXT COLLATE \"C\" NOT NULL,\n sort_two TEXT COLLATE \"C\" NOT NULL,\n payload JSONB NOT NULL,\n PRIMARY KEY (session_id, record_key),\n UNIQUE (session_id, unique_key)\n ) ON COMMIT DROP\n `\n await this.sql`\n CREATE INDEX ontology_materialization_work_lane\n ON ${this.sql(PG_MATERIALIZATION_WORK_TABLE)} (\n session_id, lane, major_order, minor_order, sort_one, sort_two, record_key\n )\n `\n await this.sql`\n CREATE TEMP TABLE ${this.sql(PG_REPLACEMENT_WORK_TABLE)} (\n session_id TEXT NOT NULL,\n entity_kind TEXT NOT NULL,\n identity_key TEXT COLLATE \"C\" NOT NULL,\n sort_key TEXT COLLATE \"C\" NOT NULL,\n diff_required BOOLEAN NOT NULL,\n PRIMARY KEY (session_id, entity_kind, identity_key)\n ) ON COMMIT DROP\n `\n await this.sql`\n CREATE INDEX ontology_replacement_work_order\n ON ${this.sql(PG_REPLACEMENT_WORK_TABLE)} (\n session_id, entity_kind, sort_key, identity_key\n )\n `\n this.tablesReady = true\n }\n\n private async deleteWork(sessionId: string): Promise<void> {\n if (!this.tablesReady) return\n await this.sql`\n DELETE FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)} WHERE session_id = ${sessionId}\n `\n await this.sql`\n DELETE FROM ${this.sql(PG_REPLACEMENT_WORK_TABLE)} WHERE session_id = ${sessionId}\n `\n }\n}\n\nfunction workCursor(row: WorkDatabaseRow): WorkCursor {\n return {\n majorOrder: row.major_order,\n minorOrder: row.minor_order,\n sortOne: row.sort_one,\n sortTwo: row.sort_two,\n recordKey: row.record_key,\n }\n}\n",
|
|
33
|
-
"import type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport {\n databaseSafeInteger,\n jsonParameter,\n linkRefFromColumns,\n objectRefFromColumns,\n type PgOntologySourceAssertionRow,\n type PgStoredOverrideRow,\n toIsoString,\n} from \"./shared\"\n\nexport const PG_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\nexport const PG_REPLACEMENT_WORK_TABLE = \"ontology_replacement_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: unknown\n readonly created_at: Date | string\n readonly updated_at: Date | string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: unknown | null\n readonly created_at: Date | string\n readonly updated_at: Date | string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: unknown\n readonly unit: string | null\n readonly at: Date | string\n readonly last_commit_id: string | null\n}\n\ninterface LinkIdentityRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly sort_key: string\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n readonly link_sort_key: string\n}\n\ninterface ObjectOverrideRow extends PgStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n}\n\ninterface LinkOverrideRow extends PgStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: unknown\n readonly last_commit_id: string\n readonly updated_at: Date | string\n}\n\nexport type ReplacementIdentity =\n | {\n readonly kind: \"object\"\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n readonly diffRequired: true\n }\n | {\n readonly kind: \"link\"\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n }\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\ninterface ReplacementIdentityInput {\n readonly sessionId: string\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly kind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\ninterface ReplacementWorkRow {\n readonly entity_kind: \"object\" | \"link\"\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: boolean\n}\n\nexport class PgMaterializationStateReader {\n constructor(\n private readonly sql: SQLClient,\n readonly projectId: string\n ) {}\n\n async objectState(ref: OntologyObjectRef): Promise<MaterializationObjectState> {\n const [state] = await this.objectStates([ref])\n return state!\n }\n\n async objectStates(\n refs: readonly OntologyObjectRef[]\n ): Promise<readonly MaterializationObjectState[]> {\n if (refs.length === 0) return []\n const requested = refs.map((ref) => ({\n object_type_id: ref.objectTypeId,\n primary_id: ref.primaryId,\n }))\n const requestedParameter = jsonParameter(this.sql, requested)\n const [effectiveRows, sourceRows, overrideRows, telemetryRows] = await Promise.all([\n this.sql<EffectiveObjectRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT objects.* FROM objects\n JOIN requested USING (object_type_id, primary_id)\n WHERE objects.project_id = ${this.projectId}\n `,\n this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT rows.*\n FROM ontology_source_rows AS rows\n JOIN requested USING (object_type_id, primary_id)\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'object'\n AND sources.status = 'active'\n `,\n this.sql<ObjectOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT overrides.* FROM ontology_object_overrides AS overrides\n JOIN requested USING (object_type_id, primary_id)\n WHERE overrides.project_id = ${this.projectId}\n `,\n this.sql<TelemetryRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT latest.*\n FROM timeseries_latest AS latest\n JOIN requested\n ON requested.object_type_id = latest.object_type_id\n AND requested.primary_id = latest.object_id\n WHERE latest.project_id = ${this.projectId}\n `,\n ])\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n async linkState(ref: OntologyLinkRef): Promise<MaterializationLinkState> {\n const [state] = await this.linkStates([ref])\n return state!\n }\n\n async linkStates(refs: readonly OntologyLinkRef[]): Promise<readonly MaterializationLinkState[]> {\n if (refs.length === 0) return []\n const requested = refs.map((ref) => ({\n source_type_id: ref.source.objectTypeId,\n source_id: ref.source.primaryId,\n source_primary_id: ref.source.primaryId,\n link_id: ref.linkId,\n target_type_id: ref.target.objectTypeId,\n target_id: ref.target.primaryId,\n target_primary_id: ref.target.primaryId,\n }))\n const requestedParameter = jsonParameter(this.sql, requested)\n const [effectiveRows, sourceRows, overrideRows, slotOverrideRows] = await Promise.all([\n this.sql<EffectiveLinkRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_id TEXT, link_id TEXT,\n target_type_id TEXT, target_id TEXT\n )\n )\n SELECT links.* FROM links\n JOIN requested USING (source_type_id, source_id, link_id, target_type_id, target_id)\n WHERE links.project_id = ${this.projectId}\n `,\n this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT,\n target_type_id TEXT, target_primary_id TEXT\n )\n )\n SELECT rows.*\n FROM ontology_source_rows AS rows\n JOIN requested USING (\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n )\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n `,\n this.sql<LinkOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT,\n target_type_id TEXT, target_primary_id TEXT\n )\n )\n SELECT overrides.* FROM ontology_link_overrides AS overrides\n JOIN requested USING (\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n )\n WHERE overrides.project_id = ${this.projectId}\n AND overrides.identity_kind = 'edge'\n `,\n this.sql<LinkSlotOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT\n )\n )\n SELECT overrides.* FROM ontology_link_overrides AS overrides\n JOIN requested USING (source_type_id, source_primary_id, link_id)\n WHERE overrides.project_id = ${this.projectId}\n AND overrides.identity_kind = 'slot'\n `,\n ])\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n async exactPoint(\n series: TelemetrySeriesRef,\n at: string,\n lock = false\n ): Promise<StoredTelemetryPoint | null> {\n return (await this.exactPoints([{ series, at }], lock))[0] ?? null\n }\n\n async exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[],\n lock = false\n ): Promise<readonly StoredTelemetryPoint[]> {\n if (points.length === 0) return []\n const requested = points.map(({ series, at }) => ({\n object_type_id: series.object.objectTypeId,\n object_id: series.object.primaryId,\n property_id: series.propertyId,\n at,\n }))\n const lockFragment = lock ? this.sql`FOR UPDATE OF timeseries` : this.sql``\n const rows = await this.sql<TelemetryRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)}) AS requested_values(\n object_type_id TEXT, object_id TEXT, property_id TEXT, at TIMESTAMPTZ\n )\n )\n SELECT timeseries.* FROM timeseries\n JOIN requested USING (object_type_id, object_id, property_id, at)\n WHERE timeseries.project_id = ${this.projectId}\n ${lockFragment}\n `\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n async linkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): Promise<readonly MaterializationLinkScopeState[]> {\n if (scopes.length === 0) return []\n const requested = scopes.map(({ source, linkId }) => ({\n scope_sort_key: linkScopeSortKey(source, linkId),\n source_type_id: source.objectTypeId,\n source_id: source.primaryId,\n link_id: linkId,\n }))\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const requestedParameter = jsonParameter(this.sql, requested)\n const [sourceRows, slotOverrideRows] = await Promise.all([\n this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(\n scope_sort_key TEXT, source_type_id TEXT, source_id TEXT, link_id TEXT\n )\n )\n SELECT rows.*\n FROM ontology_source_rows AS rows\n JOIN requested\n ON requested.source_type_id = rows.source_type_id\n AND requested.source_id = rows.source_primary_id\n AND requested.link_id = rows.link_id\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n `,\n this.sql<LinkSlotOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(\n scope_sort_key TEXT, source_type_id TEXT, source_id TEXT, link_id TEXT\n )\n )\n SELECT overrides.*\n FROM ontology_link_overrides AS overrides\n JOIN requested\n ON requested.source_type_id = overrides.source_type_id\n AND requested.source_id = overrides.source_primary_id\n AND requested.link_id = overrides.link_id\n WHERE overrides.project_id = ${this.projectId}\n AND overrides.identity_kind = 'slot'\n `,\n ])\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n let scopeCursor: string | null = null\n let linkCursor: string | null = null\n while (true) {\n const rows: LinkScopeRow[] = await this.sql`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(\n scope_sort_key TEXT, source_type_id TEXT, source_id TEXT, link_id TEXT\n )\n ), selected AS (\n SELECT requested.scope_sort_key, links.*,\n ${this.sql.unsafe(linkSortExpression(\"links\"))} AS link_sort_key\n FROM links\n JOIN requested USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ${this.projectId}\n )\n SELECT * FROM selected\n WHERE (${scopeCursor}::text IS NULL OR (scope_sort_key, link_sort_key) >\n (${scopeCursor}, ${linkCursor}))\n ORDER BY scope_sort_key, link_sort_key\n LIMIT 500\n `\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n if (rows.length < 500) break\n const last: LinkScopeRow = rows[rows.length - 1]!\n scopeCursor = last.scope_sort_key\n linkCursor = last.link_sort_key\n }\n return scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...finishScopeAccumulator(accumulators.get(key)!),\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n async linkScope(\n source: OntologyObjectRef,\n linkId: string\n ): Promise<MaterializationLinkScopeState> {\n const [scope] = await this.linkScopes([{ source, linkId }])\n if (!scope) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Link scope lookup returned no row.\"\n )\n }\n return scope\n }\n\n async *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): AsyncIterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const requested = objects.map((ref) => ({\n object_type_id: ref.objectTypeId,\n primary_id: ref.primaryId,\n }))\n let cursor: string | null = null\n while (true) {\n const rows: LinkIdentityRow[] = await this.sql`\n WITH requested AS (\n SELECT DISTINCT *\n FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n ), authority_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN requested\n ON requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN requested\n ON requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN requested\n ON requested.object_type_id = overrides.source_type_id\n AND requested.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN requested\n ON requested.object_type_id = overrides.target_type_id\n AND requested.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN requested\n ON requested.object_type_id = rows.source_type_id\n AND requested.primary_id = rows.source_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN requested\n ON requested.object_type_id = rows.target_type_id\n AND requested.primary_id = rows.target_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n ), selected AS (\n SELECT DISTINCT links.*,\n ${this.sql.unsafe(linkSortExpression(\"links\"))} AS sort_key\n FROM authority_links AS links\n )\n SELECT * FROM selected\n WHERE (${cursor}::text IS NULL OR sort_key > ${cursor})\n ORDER BY sort_key\n LIMIT ${pageRows}\n `\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n async *replacementIdentities(\n input: ReplacementIdentityInput\n ): AsyncIterable<ReplacementIdentity[]> {\n await this.prepareReplacementIdentities(input)\n let cursor: string | null = null\n while (true) {\n const rows: ReplacementWorkRow[] = await this.sql<ReplacementWorkRow[]>`\n SELECT entity_kind, identity_key, sort_key, diff_required\n FROM ${this.sql(PG_REPLACEMENT_WORK_TABLE)}\n WHERE session_id = ${input.sessionId} AND entity_kind = ${input.kind}\n AND (${cursor}::text IS NULL OR sort_key > ${cursor})\n ORDER BY sort_key\n LIMIT ${input.pageRows}\n `\n if (rows.length === 0) break\n yield rows.map(replacementIdentity)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n async replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): Promise<readonly SourceReplacementObjectState[]> {\n const base = await this.objectStates(refs)\n const candidates = await this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n async replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly Extract<ReplacementIdentity, { readonly kind: \"link\" }>[]\n ): Promise<readonly SourceReplacementLinkState[]> {\n const refs = identities.map((identity) => identity.ref)\n const base = await this.linkStates(refs)\n const replacements = await this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref }))\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n async effectiveObjectRevision(\n ref: OntologyObjectRef,\n lock = false\n ): Promise<{ readonly version: number; readonly lastCommitId: string | null } | null> {\n return (await this.effectiveObjectRevisions([ref], lock)).get(objectRefKey(ref)) ?? null\n }\n\n async effectiveObjectRevisions(\n refs: readonly OntologyObjectRef[],\n lock = false\n ): Promise<\n ReadonlyMap<string, { readonly version: number; readonly lastCommitId: string | null }>\n > {\n if (refs.length === 0) return new Map()\n const requested = refs.map((ref) => ({\n object_type_id: ref.objectTypeId,\n primary_id: ref.primaryId,\n }))\n const lockFragment = lock ? this.sql`FOR UPDATE OF objects` : this.sql``\n const rows = await this.sql<\n {\n readonly object_type_id: string\n readonly primary_id: string\n readonly version: number\n readonly last_commit_id: string | null\n }[]\n >`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT objects.object_type_id, objects.primary_id, objects.version,\n objects.last_commit_id\n FROM objects JOIN requested USING (object_type_id, primary_id)\n WHERE objects.project_id = ${this.projectId}\n ${lockFragment}\n `\n return new Map(\n rows.map(\n (row) =>\n [\n objectRefKey(objectRefFromColumns(row)),\n { version: row.version, lastCommitId: row.last_commit_id },\n ] as const\n )\n )\n }\n\n async effectiveLinkLastCommit(\n ref: OntologyLinkRef,\n lock = false\n ): Promise<string | null | undefined> {\n return (await this.effectiveLinkLastCommits([ref], lock)).get(linkRefKey(ref))\n }\n\n async effectiveLinkLastCommits(\n refs: readonly OntologyLinkRef[],\n lock = false\n ): Promise<ReadonlyMap<string, string | null>> {\n if (refs.length === 0) return new Map()\n const requested = refs.map((ref) => ({\n source_type_id: ref.source.objectTypeId,\n source_id: ref.source.primaryId,\n link_id: ref.linkId,\n target_type_id: ref.target.objectTypeId,\n target_id: ref.target.primaryId,\n }))\n const lockFragment = lock ? this.sql`FOR UPDATE OF links` : this.sql``\n const rows = await this.sql<EffectiveLinkRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)})\n AS requested_values(\n source_type_id TEXT, source_id TEXT, link_id TEXT,\n target_type_id TEXT, target_id TEXT\n )\n )\n SELECT links.* FROM links\n JOIN requested USING (source_type_id, source_id, link_id, target_type_id, target_id)\n WHERE links.project_id = ${this.projectId}\n ${lockFragment}\n `\n return new Map(\n rows.map((row) => [linkRefKey(linkRefFromColumns(row)), row.last_commit_id] as const)\n )\n }\n\n private async replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[]\n ): Promise<ReplacementSources> {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const keys = refs.map((ref) => ({\n entity_kind: ref.kind,\n entity_key: JSON.parse(projectionEntityKey(ref)) as unknown,\n }))\n const rows = await this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT *\n FROM jsonb_to_recordset(${jsonParameter(this.sql, keys)})\n AS requested_values(entity_kind TEXT, entity_key JSONB)\n )\n SELECT rows.* FROM ontology_source_rows AS rows\n JOIN requested USING (entity_kind, entity_key)\n WHERE rows.project_id = ${this.projectId}\n AND rows.source_id = ${sourceId}\n AND rows.materialization_id = ANY(\n ${this.sql.array([...new Set(materializationIds)])}::text[]\n )\n `\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n\n private async prepareReplacementIdentities(input: ReplacementIdentityInput): Promise<void> {\n if (input.kind === \"object\") {\n await this.prepareReplacementObjects(input)\n return\n }\n await this.prepareReplacementLinks(input)\n }\n\n private async prepareReplacementObjects(input: ReplacementIdentityInput): Promise<void> {\n const materializationIds = [\n input.candidateMaterializationId,\n ...(input.previousMaterializationId ? [input.previousMaterializationId] : []),\n ]\n await this.sql`\n WITH selected AS (\n SELECT DISTINCT object_type_id, primary_id,\n ${this.sql.unsafe(objectKeyExpression(\"rows\"))} AS identity_key,\n ${this.sql.unsafe(objectSortExpression(\"rows\"))} AS sort_key\n FROM ontology_source_rows AS rows\n WHERE project_id = ${this.projectId}\n AND source_id = ${input.sourceId}\n AND entity_kind = 'object'\n AND materialization_id = ANY(${this.sql.array(materializationIds)}::text[])\n )\n INSERT INTO ${this.sql(PG_REPLACEMENT_WORK_TABLE)} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ${input.sessionId}, 'object', identity_key, sort_key, TRUE\n FROM selected\n ON CONFLICT (session_id, entity_kind, identity_key) DO UPDATE SET\n diff_required = ${this.sql(PG_REPLACEMENT_WORK_TABLE)}.diff_required\n OR EXCLUDED.diff_required\n `\n }\n\n private async prepareReplacementLinks(input: ReplacementIdentityInput): Promise<void> {\n const materializationIds = [\n input.candidateMaterializationId,\n ...(input.previousMaterializationId ? [input.previousMaterializationId] : []),\n ]\n await this.sql`\n WITH incident_objects AS (\n SELECT DISTINCT payload->'ref'->>'objectTypeId' AS object_type_id,\n payload->'ref'->>'primaryId' AS primary_id\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${input.sessionId} AND kind = 'incident-object'\n ), replacement_links AS (\n SELECT source_type_id, source_primary_id AS source_id, link_id,\n target_type_id, target_primary_id AS target_id\n FROM ontology_source_rows\n WHERE project_id = ${this.projectId}\n AND source_id = ${input.sourceId}\n AND entity_kind = 'link'\n AND materialization_id = ANY(${this.sql.array(materializationIds)}::text[])\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.source_type_id\n AND incident_objects.primary_id = links.source_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.target_type_id\n AND incident_objects.primary_id = links.target_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.source_type_id\n AND incident_objects.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.target_type_id\n AND incident_objects.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.source_type_id\n AND incident_objects.primary_id = rows.source_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.target_type_id\n AND incident_objects.primary_id = rows.target_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n ), diff_links AS (\n SELECT * FROM replacement_links\n UNION SELECT * FROM incident_links\n ), affected_scopes AS (\n SELECT DISTINCT source_type_id, source_id, link_id FROM diff_links\n ), all_links AS (\n SELECT diff_links.*, TRUE AS diff_required FROM diff_links\n UNION ALL\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id, FALSE AS diff_required\n FROM links\n JOIN affected_scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ${this.projectId}\n UNION ALL\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id, FALSE AS diff_required\n FROM ontology_link_overrides AS overrides\n JOIN affected_scopes\n ON affected_scopes.source_type_id = overrides.source_type_id\n AND affected_scopes.source_id = overrides.source_primary_id\n AND affected_scopes.link_id = overrides.link_id\n WHERE overrides.project_id = ${this.projectId} AND overrides.identity_kind = 'slot'\n ), selected AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id,\n ${this.sql.unsafe(linkKeyExpression(\"all_links\"))} AS identity_key,\n ${this.sql.unsafe(linkSortExpression(\"all_links\"))} AS sort_key,\n BOOL_OR(diff_required) AS diff_required\n FROM all_links\n GROUP BY source_type_id, source_id, link_id, target_type_id, target_id\n )\n INSERT INTO ${this.sql(PG_REPLACEMENT_WORK_TABLE)} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ${input.sessionId}, 'link', identity_key, sort_key, diff_required\n FROM selected\n ON CONFLICT (session_id, entity_kind, identity_key) DO UPDATE SET\n diff_required = ${this.sql(PG_REPLACEMENT_WORK_TABLE)}.diff_required\n OR EXCLUDED.diff_required\n `\n }\n}\n\nfunction replacementIdentity(row: ReplacementWorkRow): ReplacementIdentity {\n const parts = JSON.parse(row.identity_key) as string[]\n if (row.entity_kind === \"object\") {\n return {\n kind: \"object\",\n ref: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n sortKey: row.sort_key,\n diffRequired: true,\n }\n }\n return {\n kind: \"link\",\n ref: {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n },\n sortKey: row.sort_key,\n diffRequired: row.diff_required,\n }\n}\n\nfunction activeSourceMap(\n rows: readonly PgOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly PgOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: structuredClone(row.value) as StoredObjectOverride[\"value\"],\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: structuredClone(row.value) as StoredLinkOverride[\"value\"],\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(row.value, linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: PgOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n root: structuredClone(row.root) as StoredSourceAssertion[\"root\"],\n assertion: structuredClone(row.assertion) as StoredSourceAssertion[\"assertion\"],\n stagingOrdinal: databaseSafeInteger(row.staging_ordinal, \"Source staging ordinal\"),\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: structuredClone(row.properties) as EffectiveObjectSnapshot[\"properties\"],\n version: row.version,\n createdAt: toIsoString(row.created_at),\n updatedAt: toIsoString(row.updated_at),\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: structuredClone(row.properties) as NonNullable<\n EffectiveLinkSnapshot[\"properties\"]\n >,\n }),\n createdAt: toIsoString(row.created_at),\n updatedAt: toIsoString(row.updated_at),\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n const at = toIsoString(row.at)\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: structuredClone(row.value) as StoredTelemetryPoint[\"value\"],\n ...(row.unit === null ? {} : { unit: row.unit }),\n at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nexport function objectSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return utf8SortExpression([\n `to_jsonb(${prefix}object_type_id)::text`,\n `to_jsonb(${prefix}primary_id)::text`,\n ])\n}\n\nfunction objectKeyExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return jsonTupleExpression([\n `to_jsonb(${prefix}object_type_id)::text`,\n `to_jsonb(${prefix}primary_id)::text`,\n ])\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return utf8SortExpression([\n `to_jsonb(${prefix}source_type_id)::text`,\n `to_jsonb(${prefix}source_id)::text`,\n `to_jsonb(${prefix}link_id)::text`,\n `to_jsonb(${prefix}target_type_id)::text`,\n `to_jsonb(${prefix}target_id)::text`,\n ])\n}\n\nfunction linkKeyExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return jsonTupleExpression([\n `to_jsonb(${prefix}source_type_id)::text`,\n `to_jsonb(${prefix}source_id)::text`,\n `to_jsonb(${prefix}link_id)::text`,\n `to_jsonb(${prefix}target_type_id)::text`,\n `to_jsonb(${prefix}target_id)::text`,\n ])\n}\n\nfunction utf8SortExpression(parts: readonly string[]): string {\n return `encode(convert_to(${jsonTupleExpression(parts)}, 'UTF8'), 'hex')`\n}\n\nfunction jsonTupleExpression(parts: readonly string[]): string {\n return `concat('[', ${parts.join(\", ',', \")}, ']')`\n}\n",
|
|
34
|
-
"import {\n linkRefKey,\n MaterializationConflictError,\n objectRefKey,\n telemetryPointKey,\n} from \"@sixb/core/internal/materialization\"\nimport { effectiveConflict } from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { MaterializationPlanChunk } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { assertTimestamp, jsonParameter } from \"./shared\"\n\n/** Applies one already-validated exact plan chunk in bounded PostgreSQL batches. */\nexport class PgMaterializationWriter {\n constructor(private readonly sql: SQLClient) {}\n\n async apply(projectId: string, commitId: string, chunk: MaterializationPlanChunk): Promise<void> {\n await this.applyOverrides(projectId, chunk)\n await this.applyEffective(projectId, chunk)\n await this.applyTimeseries(projectId, chunk)\n await this.applyOutbox(projectId, commitId, chunk)\n }\n\n private async applyOverrides(projectId: string, chunk: MaterializationPlanChunk): Promise<void> {\n const objectUpserts = chunk.overrides.objects.upserts.map((item) => ({\n objectTypeId: item.ref.objectTypeId,\n primaryId: item.ref.primaryId,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n expectedLastCommitId: item.expectedLastCommitId,\n }))\n const objectInserts = objectUpserts.filter((item) => item.expectedLastCommitId === null)\n if (objectInserts.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectInserts)}::jsonb)\n )\n INSERT INTO ontology_object_overrides (\n project_id, object_type_id, primary_id, value, last_commit_id, updated_at\n )\n SELECT ${projectId}, value->>'objectTypeId', value->>'primaryId', value->'value',\n value->>'lastCommitId',\n (value->>'updatedAt')::timestamptz\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING object_type_id\n `\n if (rows.length !== objectInserts.length) throw objectOverrideConflict()\n }\n\n const objectUpdates = objectUpserts.filter((item) => item.expectedLastCommitId !== null)\n if (objectUpdates.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectUpdates)}::jsonb)\n )\n UPDATE ontology_object_overrides AS overrides\n SET value = staged.value->'value', last_commit_id = staged.value->>'lastCommitId',\n updated_at = (staged.value->>'updatedAt')::timestamptz\n FROM staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.object_type_id = staged.value->>'objectTypeId'\n AND overrides.primary_id = staged.value->>'primaryId'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.object_type_id\n `\n if (rows.length !== objectUpdates.length) throw objectOverrideConflict()\n }\n\n const objectDeletes = chunk.overrides.objects.deletes.map((item) => ({\n objectTypeId: item.ref.objectTypeId,\n primaryId: item.ref.primaryId,\n expectedLastCommitId: item.expectedLastCommitId,\n }))\n if (objectDeletes.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectDeletes)}::jsonb)\n )\n DELETE FROM ontology_object_overrides AS overrides USING staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.object_type_id = staged.value->>'objectTypeId'\n AND overrides.primary_id = staged.value->>'primaryId'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.object_type_id\n `\n if (rows.length !== objectDeletes.length) throw objectOverrideConflict()\n }\n\n const linkUpserts = [\n ...chunk.overrides.links.edges.upserts.map((item) => ({\n identityKind: \"edge\" as const,\n identityKey: JSON.parse(linkRefKey(item.ref)) as unknown,\n sourceTypeId: item.ref.source.objectTypeId,\n sourcePrimaryId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetPrimaryId: item.ref.target.primaryId,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ...chunk.overrides.links.slots.upserts.map((item) => ({\n identityKind: \"slot\" as const,\n identityKey: [item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId],\n sourceTypeId: item.ref.source.objectTypeId,\n sourcePrimaryId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.value.target.objectTypeId,\n targetPrimaryId: item.value.target.primaryId,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ]\n const linkInserts = linkUpserts.filter((item) => item.expectedLastCommitId === null)\n if (linkInserts.length > 0) {\n const rows = await this.sql<{ readonly identity_kind: \"edge\" | \"slot\" }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkInserts)}::jsonb)\n )\n INSERT INTO ontology_link_overrides (\n project_id, identity_kind, identity_key, source_type_id, source_primary_id, link_id,\n target_type_id, target_primary_id, value, last_commit_id, updated_at\n )\n SELECT ${projectId}, value->>'identityKind', value->'identityKey',\n value->>'sourceTypeId', value->>'sourcePrimaryId', value->>'linkId',\n value->>'targetTypeId', value->>'targetPrimaryId', value->'value',\n value->>'lastCommitId', (value->>'updatedAt')::timestamptz\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING identity_kind\n `\n if (rows.length !== linkInserts.length)\n throw linkOverrideConflict(linkInserts[0]!.identityKind)\n }\n\n const linkUpdates = linkUpserts.filter((item) => item.expectedLastCommitId !== null)\n if (linkUpdates.length > 0) {\n const rows = await this.sql<{ readonly identity_kind: \"edge\" | \"slot\" }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkUpdates)}::jsonb)\n )\n UPDATE ontology_link_overrides AS overrides\n SET target_type_id = staged.value->>'targetTypeId',\n target_primary_id = staged.value->>'targetPrimaryId',\n value = staged.value->'value',\n last_commit_id = staged.value->>'lastCommitId',\n updated_at = (staged.value->>'updatedAt')::timestamptz\n FROM staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.identity_kind = staged.value->>'identityKind'\n AND overrides.identity_key = staged.value->'identityKey'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.identity_kind\n `\n if (rows.length !== linkUpdates.length)\n throw linkOverrideConflict(linkUpdates[0]!.identityKind)\n }\n\n const linkDeletes = [\n ...chunk.overrides.links.edges.deletes.map((item) => ({\n identityKind: \"edge\" as const,\n identityKey: JSON.parse(linkRefKey(item.ref)) as unknown,\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ...chunk.overrides.links.slots.deletes.map((item) => ({\n identityKind: \"slot\" as const,\n identityKey: [item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId],\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ]\n if (linkDeletes.length > 0) {\n const rows = await this.sql<{ readonly identity_kind: \"edge\" | \"slot\" }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkDeletes)}::jsonb)\n )\n DELETE FROM ontology_link_overrides AS overrides USING staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.identity_kind = staged.value->>'identityKind'\n AND overrides.identity_key = staged.value->'identityKey'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.identity_kind\n `\n if (rows.length !== linkDeletes.length)\n throw linkOverrideConflict(linkDeletes[0]!.identityKind)\n }\n }\n\n private async applyEffective(projectId: string, chunk: MaterializationPlanChunk): Promise<void> {\n const linkDeletes = chunk.effective.linkDeletes.map((item) => ({\n sourceTypeId: item.ref.source.objectTypeId,\n sourceId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetId: item.ref.target.primaryId,\n expectedLastCommitId: item.expected.lastCommitId,\n }))\n if (linkDeletes.length > 0) {\n const rows = await this.sql<{ readonly source_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkDeletes)}::jsonb)\n )\n DELETE FROM links AS effective USING staged\n WHERE effective.project_id = ${projectId}\n AND effective.source_type_id = staged.value->>'sourceTypeId'\n AND effective.source_id = staged.value->>'sourceId'\n AND effective.link_id = staged.value->>'linkId'\n AND effective.target_type_id = staged.value->>'targetTypeId'\n AND effective.target_id = staged.value->>'targetId'\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.source_type_id\n `\n if (rows.length !== linkDeletes.length) throw effectiveLinkConflict(linkDeletes[0]!)\n }\n\n const objectDeletes = chunk.effective.objectDeletes.map((item) => ({\n objectTypeId: item.ref.objectTypeId,\n primaryId: item.ref.primaryId,\n expectedVersion: item.expected.version,\n expectedLastCommitId: item.expected.lastCommitId,\n }))\n if (objectDeletes.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectDeletes)}::jsonb)\n )\n DELETE FROM objects AS effective USING staged\n WHERE effective.project_id = ${projectId}\n AND effective.object_type_id = staged.value->>'objectTypeId'\n AND effective.primary_id = staged.value->>'primaryId'\n AND effective.version = (staged.value->>'expectedVersion')::integer\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.object_type_id\n `\n if (rows.length !== objectDeletes.length) throw effectiveObjectConflict(objectDeletes[0]!)\n }\n\n await this.applyObjects(projectId, chunk.effective.objectUpserts)\n await this.applyLinks(projectId, chunk.effective.linkUpserts)\n }\n\n private async applyObjects(\n projectId: string,\n items: MaterializationPlanChunk[\"effective\"][\"objectUpserts\"]\n ): Promise<void> {\n const payload = items.map(({ row, expected }) => ({\n objectTypeId: row.ref.objectTypeId,\n primaryId: row.ref.primaryId,\n properties: row.properties,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n version: row.version,\n lastCommitId: row.lastCommitId,\n expectedExists: expected.exists,\n expectedVersion: expected.exists ? expected.version : null,\n expectedLastCommitId: expected.exists ? expected.lastCommitId : null,\n }))\n const inserts = payload.filter((item) => !item.expectedExists)\n if (inserts.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, inserts)}::jsonb)\n )\n INSERT INTO objects (\n project_id, object_type_id, primary_id, properties, created_at,\n updated_at, version, last_commit_id\n )\n SELECT ${projectId}, value->>'objectTypeId', value->>'primaryId',\n value->'properties', (value->>'createdAt')::timestamptz,\n (value->>'updatedAt')::timestamptz, (value->>'version')::integer,\n value->>'lastCommitId'\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING object_type_id\n `\n if (rows.length !== inserts.length) {\n throw effectiveConflict(`Expected object ${objectIdentityKey(inserts[0]!)} to be absent.`)\n }\n }\n\n const updates = payload.filter((item) => item.expectedExists)\n if (updates.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, updates)}::jsonb)\n )\n UPDATE objects AS effective\n SET properties = staged.value->'properties',\n created_at = (staged.value->>'createdAt')::timestamptz,\n updated_at = (staged.value->>'updatedAt')::timestamptz,\n version = (staged.value->>'version')::integer,\n last_commit_id = staged.value->>'lastCommitId'\n FROM staged\n WHERE effective.project_id = ${projectId}\n AND effective.object_type_id = staged.value->>'objectTypeId'\n AND effective.primary_id = staged.value->>'primaryId'\n AND effective.version = (staged.value->>'expectedVersion')::integer\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.object_type_id\n `\n if (rows.length !== updates.length) throw effectiveObjectConflict(updates[0]!)\n }\n }\n\n private async applyLinks(\n projectId: string,\n items: MaterializationPlanChunk[\"effective\"][\"linkUpserts\"]\n ): Promise<void> {\n const payload = items.map(({ row, expected }) => ({\n sourceTypeId: row.ref.source.objectTypeId,\n sourceId: row.ref.source.primaryId,\n linkId: row.ref.linkId,\n targetTypeId: row.ref.target.objectTypeId,\n targetId: row.ref.target.primaryId,\n ...(row.properties === undefined ? {} : { properties: row.properties }),\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n lastCommitId: row.lastCommitId,\n expectedExists: expected.exists,\n expectedLastCommitId: expected.exists ? expected.lastCommitId : null,\n }))\n const inserts = payload.filter((item) => !item.expectedExists)\n if (inserts.length > 0) {\n const rows = await this.sql<{ readonly source_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, inserts)}::jsonb)\n )\n INSERT INTO links (\n project_id, source_type_id, source_id, link_id, target_type_id, target_id,\n properties, created_at, updated_at, last_commit_id\n )\n SELECT ${projectId}, value->>'sourceTypeId', value->>'sourceId', value->>'linkId',\n value->>'targetTypeId', value->>'targetId',\n CASE WHEN value ? 'properties' THEN value->'properties' ELSE NULL END,\n (value->>'createdAt')::timestamptz, (value->>'updatedAt')::timestamptz,\n value->>'lastCommitId'\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING source_type_id\n `\n if (rows.length !== inserts.length) {\n throw effectiveConflict(`Expected link ${linkIdentityKey(inserts[0]!)} to be absent.`)\n }\n }\n\n const updates = payload.filter((item) => item.expectedExists)\n if (updates.length > 0) {\n const rows = await this.sql<{ readonly source_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, updates)}::jsonb)\n )\n UPDATE links AS effective\n SET properties = CASE\n WHEN staged.value ? 'properties' THEN staged.value->'properties'\n ELSE NULL\n END,\n created_at = (staged.value->>'createdAt')::timestamptz,\n updated_at = (staged.value->>'updatedAt')::timestamptz,\n last_commit_id = staged.value->>'lastCommitId'\n FROM staged\n WHERE effective.project_id = ${projectId}\n AND effective.source_type_id = staged.value->>'sourceTypeId'\n AND effective.source_id = staged.value->>'sourceId'\n AND effective.link_id = staged.value->>'linkId'\n AND effective.target_type_id = staged.value->>'targetTypeId'\n AND effective.target_id = staged.value->>'targetId'\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.source_type_id\n `\n if (rows.length !== updates.length) throw effectiveLinkConflict(updates[0]!)\n }\n }\n\n private async applyTimeseries(projectId: string, chunk: MaterializationPlanChunk): Promise<void> {\n const payload = chunk.timeseries.pointUpserts.map(({ point, expected }) => ({\n objectTypeId: point.series.object.objectTypeId,\n objectId: point.series.object.primaryId,\n propertyId: point.series.propertyId,\n value: point.value,\n unit: point.unit ?? null,\n at: point.at,\n lastCommitId: point.lastCommitId,\n expectedLastCommitId: expected.lastCommitId,\n }))\n const inserts = payload.filter((item) => item.expectedLastCommitId === null)\n if (inserts.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, inserts)}::jsonb)\n ), written AS (\n INSERT INTO timeseries (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n )\n SELECT ${projectId}, value->>'objectTypeId', value->>'objectId',\n value->>'propertyId', value->'value', value->>'unit',\n (value->>'at')::timestamptz, value->>'lastCommitId'\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING *\n ), latest_candidates AS (\n SELECT DISTINCT ON (project_id, object_type_id, object_id, property_id)\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM written\n ORDER BY project_id, object_type_id, object_id, property_id, at DESC\n ), latest AS (\n INSERT INTO timeseries_latest (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n )\n SELECT project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM latest_candidates\n ON CONFLICT (project_id, object_type_id, object_id, property_id)\n DO UPDATE SET value = EXCLUDED.value, unit = EXCLUDED.unit, at = EXCLUDED.at,\n last_commit_id = EXCLUDED.last_commit_id\n WHERE EXCLUDED.at >= timeseries_latest.at\n RETURNING object_type_id\n )\n SELECT object_type_id, (SELECT COUNT(*) FROM latest) AS latest_count FROM written\n `\n if (rows.length !== inserts.length) throw pointConflict(inserts[0]!)\n }\n\n const updates = payload.filter((item) => item.expectedLastCommitId !== null)\n if (updates.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, updates)}::jsonb)\n ), written AS (\n UPDATE timeseries AS points\n SET value = staged.value->'value', unit = staged.value->>'unit',\n last_commit_id = staged.value->>'lastCommitId'\n FROM staged\n WHERE points.project_id = ${projectId}\n AND points.object_type_id = staged.value->>'objectTypeId'\n AND points.object_id = staged.value->>'objectId'\n AND points.property_id = staged.value->>'propertyId'\n AND points.at = (staged.value->>'at')::timestamptz\n AND points.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING points.*\n ), latest_candidates AS (\n SELECT DISTINCT ON (project_id, object_type_id, object_id, property_id)\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM written\n ORDER BY project_id, object_type_id, object_id, property_id, at DESC\n ), latest AS (\n INSERT INTO timeseries_latest (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n )\n SELECT project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM latest_candidates\n ON CONFLICT (project_id, object_type_id, object_id, property_id)\n DO UPDATE SET value = EXCLUDED.value, unit = EXCLUDED.unit, at = EXCLUDED.at,\n last_commit_id = EXCLUDED.last_commit_id\n WHERE EXCLUDED.at >= timeseries_latest.at\n RETURNING object_type_id\n )\n SELECT object_type_id, (SELECT COUNT(*) FROM latest) AS latest_count FROM written\n `\n if (rows.length !== updates.length) throw pointConflict(updates[0]!)\n }\n }\n\n private async applyOutbox(\n projectId: string,\n commitId: string,\n chunk: MaterializationPlanChunk\n ): Promise<void> {\n if (chunk.outbox.length === 0) return\n const payload = chunk.outbox.map((item) => {\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n return {\n id: item.envelope.id,\n commitOrdinal: item.envelope.commitOrdinal,\n envelope: item.envelope,\n availableAt: item.availableAt,\n createdAt: item.createdAt,\n }\n })\n const rows = await this.sql<{ readonly id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, payload)}::jsonb)\n )\n INSERT INTO ontology_outbox (\n project_id, id, commit_id, commit_ordinal, envelope,\n available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n )\n SELECT ${projectId}, value->>'id', ${commitId},\n (value->>'commitOrdinal')::bigint, value->'envelope',\n (value->>'availableAt')::timestamptz, 0, NULL, NULL, NULL, NULL,\n (value->>'createdAt')::timestamptz\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING id\n `\n if (rows.length !== payload.length) {\n const inserted = new Set(rows.map((row) => row.id))\n const duplicate = payload.find((item) => !inserted.has(item.id)) ?? payload[0]!\n throw effectiveConflict(`Duplicate outbox event '${duplicate.id}'.`)\n }\n }\n}\n\nfunction objectOverrideConflict(): MaterializationConflictError {\n return effectiveConflict(\"Expected object override changed.\")\n}\n\nfunction linkOverrideConflict(identityKind: \"edge\" | \"slot\"): MaterializationConflictError {\n return effectiveConflict(\n identityKind === \"edge\"\n ? \"Expected link edge override changed.\"\n : \"Expected link slot override changed.\"\n )\n}\n\nfunction objectIdentityKey(item: {\n readonly objectTypeId: string\n readonly primaryId: string\n}): string {\n return objectRefKey({ objectTypeId: item.objectTypeId, primaryId: item.primaryId })\n}\n\nfunction linkIdentityKey(item: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n}): string {\n return linkRefKey({\n source: { objectTypeId: item.sourceTypeId, primaryId: item.sourceId },\n linkId: item.linkId,\n target: { objectTypeId: item.targetTypeId, primaryId: item.targetId },\n })\n}\n\nfunction effectiveObjectConflict(item: {\n readonly objectTypeId: string\n readonly primaryId: string\n}): MaterializationConflictError {\n return effectiveConflict(`Expected object ${objectIdentityKey(item)} changed.`)\n}\n\nfunction effectiveLinkConflict(item: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n}): MaterializationConflictError {\n return effectiveConflict(`Expected link ${linkIdentityKey(item)} changed.`)\n}\n\nfunction pointConflict(item: {\n readonly objectTypeId: string\n readonly objectId: string\n readonly propertyId: string\n readonly at: string\n}): MaterializationConflictError {\n return new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(\n {\n object: { objectTypeId: item.objectTypeId, primaryId: item.objectId },\n propertyId: item.propertyId,\n },\n item.at\n )} changed.`\n )\n}\n",
|
|
34
|
+
"import type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport {\n databaseSafeInteger,\n jsonParameter,\n linkRefFromColumns,\n objectRefFromColumns,\n type PgOntologySourceAssertionRow,\n type PgStoredOverrideRow,\n toIsoString,\n} from \"./shared\"\n\nexport const PG_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\nexport const PG_REPLACEMENT_WORK_TABLE = \"ontology_replacement_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: unknown\n readonly created_at: Date | string\n readonly updated_at: Date | string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: unknown | null\n readonly created_at: Date | string\n readonly updated_at: Date | string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: unknown\n readonly unit: string | null\n readonly at: Date | string\n readonly last_commit_id: string | null\n}\n\ninterface LinkIdentityRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly sort_key: string\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n readonly link_sort_key: string\n}\n\ninterface ObjectOverrideRow extends PgStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly edited_at: unknown\n}\n\ninterface LinkOverrideRow extends PgStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: unknown\n readonly last_commit_id: string\n readonly updated_at: Date | string\n}\n\nexport type ReplacementIdentity =\n | {\n readonly kind: \"object\"\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n readonly diffRequired: true\n }\n | {\n readonly kind: \"link\"\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n }\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\ninterface ReplacementIdentityInput {\n readonly sessionId: string\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly kind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\ninterface ReplacementWorkRow {\n readonly entity_kind: \"object\" | \"link\"\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: boolean\n}\n\nexport class PgMaterializationStateReader {\n constructor(\n private readonly sql: SQLClient,\n readonly projectId: string\n ) {}\n\n async objectState(ref: OntologyObjectRef): Promise<MaterializationObjectState> {\n const [state] = await this.objectStates([ref])\n return state!\n }\n\n async objectStates(\n refs: readonly OntologyObjectRef[]\n ): Promise<readonly MaterializationObjectState[]> {\n if (refs.length === 0) return []\n const requested = refs.map((ref) => ({\n object_type_id: ref.objectTypeId,\n primary_id: ref.primaryId,\n }))\n const requestedParameter = jsonParameter(this.sql, requested)\n const [effectiveRows, sourceRows, overrideRows, telemetryRows] = await Promise.all([\n this.sql<EffectiveObjectRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT objects.* FROM objects\n JOIN requested USING (object_type_id, primary_id)\n WHERE objects.project_id = ${this.projectId}\n `,\n this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT rows.*\n FROM ontology_source_rows AS rows\n JOIN requested USING (object_type_id, primary_id)\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'object'\n AND sources.status = 'active'\n `,\n this.sql<ObjectOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT overrides.* FROM ontology_object_overrides AS overrides\n JOIN requested USING (object_type_id, primary_id)\n WHERE overrides.project_id = ${this.projectId}\n `,\n this.sql<TelemetryRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT latest.*\n FROM timeseries_latest AS latest\n JOIN requested\n ON requested.object_type_id = latest.object_type_id\n AND requested.primary_id = latest.object_id\n WHERE latest.project_id = ${this.projectId}\n `,\n ])\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n async linkState(ref: OntologyLinkRef): Promise<MaterializationLinkState> {\n const [state] = await this.linkStates([ref])\n return state!\n }\n\n async linkStates(refs: readonly OntologyLinkRef[]): Promise<readonly MaterializationLinkState[]> {\n if (refs.length === 0) return []\n const requested = refs.map((ref) => ({\n source_type_id: ref.source.objectTypeId,\n source_id: ref.source.primaryId,\n source_primary_id: ref.source.primaryId,\n link_id: ref.linkId,\n target_type_id: ref.target.objectTypeId,\n target_id: ref.target.primaryId,\n target_primary_id: ref.target.primaryId,\n }))\n const requestedParameter = jsonParameter(this.sql, requested)\n const [effectiveRows, sourceRows, overrideRows, slotOverrideRows] = await Promise.all([\n this.sql<EffectiveLinkRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_id TEXT, link_id TEXT,\n target_type_id TEXT, target_id TEXT\n )\n )\n SELECT links.* FROM links\n JOIN requested USING (source_type_id, source_id, link_id, target_type_id, target_id)\n WHERE links.project_id = ${this.projectId}\n `,\n this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT,\n target_type_id TEXT, target_primary_id TEXT\n )\n )\n SELECT rows.*\n FROM ontology_source_rows AS rows\n JOIN requested USING (\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n )\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n `,\n this.sql<LinkOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT,\n target_type_id TEXT, target_primary_id TEXT\n )\n )\n SELECT overrides.* FROM ontology_link_overrides AS overrides\n JOIN requested USING (\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n )\n WHERE overrides.project_id = ${this.projectId}\n AND overrides.identity_kind = 'edge'\n `,\n this.sql<LinkSlotOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter}) AS requested_values(\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT\n )\n )\n SELECT overrides.* FROM ontology_link_overrides AS overrides\n JOIN requested USING (source_type_id, source_primary_id, link_id)\n WHERE overrides.project_id = ${this.projectId}\n AND overrides.identity_kind = 'slot'\n `,\n ])\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n async exactPoint(\n series: TelemetrySeriesRef,\n at: string,\n lock = false\n ): Promise<StoredTelemetryPoint | null> {\n return (await this.exactPoints([{ series, at }], lock))[0] ?? null\n }\n\n async exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[],\n lock = false\n ): Promise<readonly StoredTelemetryPoint[]> {\n if (points.length === 0) return []\n const requested = points.map(({ series, at }) => ({\n object_type_id: series.object.objectTypeId,\n object_id: series.object.primaryId,\n property_id: series.propertyId,\n at,\n }))\n const lockFragment = lock ? this.sql`FOR UPDATE OF timeseries` : this.sql``\n const rows = await this.sql<TelemetryRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)}) AS requested_values(\n object_type_id TEXT, object_id TEXT, property_id TEXT, at TIMESTAMPTZ\n )\n )\n SELECT timeseries.* FROM timeseries\n JOIN requested USING (object_type_id, object_id, property_id, at)\n WHERE timeseries.project_id = ${this.projectId}\n ${lockFragment}\n `\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n async linkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): Promise<readonly MaterializationLinkScopeState[]> {\n if (scopes.length === 0) return []\n const requested = scopes.map(({ source, linkId }) => ({\n scope_sort_key: linkScopeSortKey(source, linkId),\n source_type_id: source.objectTypeId,\n source_id: source.primaryId,\n link_id: linkId,\n }))\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const requestedParameter = jsonParameter(this.sql, requested)\n const [sourceRows, slotOverrideRows] = await Promise.all([\n this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(\n scope_sort_key TEXT, source_type_id TEXT, source_id TEXT, link_id TEXT\n )\n )\n SELECT rows.*\n FROM ontology_source_rows AS rows\n JOIN requested\n ON requested.source_type_id = rows.source_type_id\n AND requested.source_id = rows.source_primary_id\n AND requested.link_id = rows.link_id\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n `,\n this.sql<LinkSlotOverrideRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(\n scope_sort_key TEXT, source_type_id TEXT, source_id TEXT, link_id TEXT\n )\n )\n SELECT overrides.*\n FROM ontology_link_overrides AS overrides\n JOIN requested\n ON requested.source_type_id = overrides.source_type_id\n AND requested.source_id = overrides.source_primary_id\n AND requested.link_id = overrides.link_id\n WHERE overrides.project_id = ${this.projectId}\n AND overrides.identity_kind = 'slot'\n `,\n ])\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n let scopeCursor: string | null = null\n let linkCursor: string | null = null\n while (true) {\n const rows: LinkScopeRow[] = await this.sql`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${requestedParameter})\n AS requested_values(\n scope_sort_key TEXT, source_type_id TEXT, source_id TEXT, link_id TEXT\n )\n ), selected AS (\n SELECT requested.scope_sort_key, links.*,\n ${this.sql.unsafe(linkSortExpression(\"links\"))} AS link_sort_key\n FROM links\n JOIN requested USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ${this.projectId}\n )\n SELECT * FROM selected\n WHERE (${scopeCursor}::text IS NULL OR (scope_sort_key, link_sort_key) >\n (${scopeCursor}, ${linkCursor}))\n ORDER BY scope_sort_key, link_sort_key\n LIMIT 500\n `\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n if (rows.length < 500) break\n const last: LinkScopeRow = rows[rows.length - 1]!\n scopeCursor = last.scope_sort_key\n linkCursor = last.link_sort_key\n }\n return scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...finishScopeAccumulator(accumulators.get(key)!),\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n async linkScope(\n source: OntologyObjectRef,\n linkId: string\n ): Promise<MaterializationLinkScopeState> {\n const [scope] = await this.linkScopes([{ source, linkId }])\n if (!scope) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Link scope lookup returned no row.\"\n )\n }\n return scope\n }\n\n async *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): AsyncIterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const requested = objects.map((ref) => ({\n object_type_id: ref.objectTypeId,\n primary_id: ref.primaryId,\n }))\n let cursor: string | null = null\n while (true) {\n const rows: LinkIdentityRow[] = await this.sql`\n WITH requested AS (\n SELECT DISTINCT *\n FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n ), authority_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN requested\n ON requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN requested\n ON requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN requested\n ON requested.object_type_id = overrides.source_type_id\n AND requested.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN requested\n ON requested.object_type_id = overrides.target_type_id\n AND requested.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN requested\n ON requested.object_type_id = rows.source_type_id\n AND requested.primary_id = rows.source_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN requested\n ON requested.object_type_id = rows.target_type_id\n AND requested.primary_id = rows.target_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n ), selected AS (\n SELECT DISTINCT links.*,\n ${this.sql.unsafe(linkSortExpression(\"links\"))} AS sort_key\n FROM authority_links AS links\n )\n SELECT * FROM selected\n WHERE (${cursor}::text IS NULL OR sort_key > ${cursor})\n ORDER BY sort_key\n LIMIT ${pageRows}\n `\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n async *replacementIdentities(\n input: ReplacementIdentityInput\n ): AsyncIterable<ReplacementIdentity[]> {\n await this.prepareReplacementIdentities(input)\n let cursor: string | null = null\n while (true) {\n const rows: ReplacementWorkRow[] = await this.sql<ReplacementWorkRow[]>`\n SELECT entity_kind, identity_key, sort_key, diff_required\n FROM ${this.sql(PG_REPLACEMENT_WORK_TABLE)}\n WHERE session_id = ${input.sessionId} AND entity_kind = ${input.kind}\n AND (${cursor}::text IS NULL OR sort_key > ${cursor})\n ORDER BY sort_key\n LIMIT ${input.pageRows}\n `\n if (rows.length === 0) break\n yield rows.map(replacementIdentity)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n async replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): Promise<readonly SourceReplacementObjectState[]> {\n const base = await this.objectStates(refs)\n const candidates = await this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n async replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly Extract<ReplacementIdentity, { readonly kind: \"link\" }>[]\n ): Promise<readonly SourceReplacementLinkState[]> {\n const refs = identities.map((identity) => identity.ref)\n const base = await this.linkStates(refs)\n const replacements = await this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref }))\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n async effectiveObjectRevision(\n ref: OntologyObjectRef,\n lock = false\n ): Promise<{ readonly version: number; readonly lastCommitId: string | null } | null> {\n return (await this.effectiveObjectRevisions([ref], lock)).get(objectRefKey(ref)) ?? null\n }\n\n async effectiveObjectRevisions(\n refs: readonly OntologyObjectRef[],\n lock = false\n ): Promise<\n ReadonlyMap<string, { readonly version: number; readonly lastCommitId: string | null }>\n > {\n if (refs.length === 0) return new Map()\n const requested = refs.map((ref) => ({\n object_type_id: ref.objectTypeId,\n primary_id: ref.primaryId,\n }))\n const lockFragment = lock ? this.sql`FOR UPDATE OF objects` : this.sql``\n const rows = await this.sql<\n {\n readonly object_type_id: string\n readonly primary_id: string\n readonly version: number\n readonly last_commit_id: string | null\n }[]\n >`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)})\n AS requested_values(object_type_id TEXT, primary_id TEXT)\n )\n SELECT objects.object_type_id, objects.primary_id, objects.version,\n objects.last_commit_id\n FROM objects JOIN requested USING (object_type_id, primary_id)\n WHERE objects.project_id = ${this.projectId}\n ${lockFragment}\n `\n return new Map(\n rows.map(\n (row) =>\n [\n objectRefKey(objectRefFromColumns(row)),\n { version: row.version, lastCommitId: row.last_commit_id },\n ] as const\n )\n )\n }\n\n async effectiveLinkLastCommit(\n ref: OntologyLinkRef,\n lock = false\n ): Promise<string | null | undefined> {\n return (await this.effectiveLinkLastCommits([ref], lock)).get(linkRefKey(ref))\n }\n\n async effectiveLinkLastCommits(\n refs: readonly OntologyLinkRef[],\n lock = false\n ): Promise<ReadonlyMap<string, string | null>> {\n if (refs.length === 0) return new Map()\n const requested = refs.map((ref) => ({\n source_type_id: ref.source.objectTypeId,\n source_id: ref.source.primaryId,\n link_id: ref.linkId,\n target_type_id: ref.target.objectTypeId,\n target_id: ref.target.primaryId,\n }))\n const lockFragment = lock ? this.sql`FOR UPDATE OF links` : this.sql``\n const rows = await this.sql<EffectiveLinkRow[]>`\n WITH requested AS (\n SELECT DISTINCT * FROM jsonb_to_recordset(${jsonParameter(this.sql, requested)})\n AS requested_values(\n source_type_id TEXT, source_id TEXT, link_id TEXT,\n target_type_id TEXT, target_id TEXT\n )\n )\n SELECT links.* FROM links\n JOIN requested USING (source_type_id, source_id, link_id, target_type_id, target_id)\n WHERE links.project_id = ${this.projectId}\n ${lockFragment}\n `\n return new Map(\n rows.map((row) => [linkRefKey(linkRefFromColumns(row)), row.last_commit_id] as const)\n )\n }\n\n private async replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[]\n ): Promise<ReplacementSources> {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const keys = refs.map((ref) => ({\n entity_kind: ref.kind,\n entity_key: JSON.parse(projectionEntityKey(ref)) as unknown,\n }))\n const rows = await this.sql<PgOntologySourceAssertionRow[]>`\n WITH requested AS (\n SELECT *\n FROM jsonb_to_recordset(${jsonParameter(this.sql, keys)})\n AS requested_values(entity_kind TEXT, entity_key JSONB)\n )\n SELECT rows.* FROM ontology_source_rows AS rows\n JOIN requested USING (entity_kind, entity_key)\n WHERE rows.project_id = ${this.projectId}\n AND rows.source_id = ${sourceId}\n AND rows.materialization_id = ANY(\n ${this.sql.array([...new Set(materializationIds)])}::text[]\n )\n `\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n\n private async prepareReplacementIdentities(input: ReplacementIdentityInput): Promise<void> {\n if (input.kind === \"object\") {\n await this.prepareReplacementObjects(input)\n return\n }\n await this.prepareReplacementLinks(input)\n }\n\n private async prepareReplacementObjects(input: ReplacementIdentityInput): Promise<void> {\n const materializationIds = [\n input.candidateMaterializationId,\n ...(input.previousMaterializationId ? [input.previousMaterializationId] : []),\n ]\n await this.sql`\n WITH selected AS (\n SELECT DISTINCT object_type_id, primary_id,\n ${this.sql.unsafe(objectKeyExpression(\"rows\"))} AS identity_key,\n ${this.sql.unsafe(objectSortExpression(\"rows\"))} AS sort_key\n FROM ontology_source_rows AS rows\n WHERE project_id = ${this.projectId}\n AND source_id = ${input.sourceId}\n AND entity_kind = 'object'\n AND materialization_id = ANY(${this.sql.array(materializationIds)}::text[])\n )\n INSERT INTO ${this.sql(PG_REPLACEMENT_WORK_TABLE)} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ${input.sessionId}, 'object', identity_key, sort_key, TRUE\n FROM selected\n ON CONFLICT (session_id, entity_kind, identity_key) DO UPDATE SET\n diff_required = ${this.sql(PG_REPLACEMENT_WORK_TABLE)}.diff_required\n OR EXCLUDED.diff_required\n `\n }\n\n private async prepareReplacementLinks(input: ReplacementIdentityInput): Promise<void> {\n const materializationIds = [\n input.candidateMaterializationId,\n ...(input.previousMaterializationId ? [input.previousMaterializationId] : []),\n ]\n await this.sql`\n WITH incident_objects AS (\n SELECT DISTINCT payload->'ref'->>'objectTypeId' AS object_type_id,\n payload->'ref'->>'primaryId' AS primary_id\n FROM ${this.sql(PG_MATERIALIZATION_WORK_TABLE)}\n WHERE session_id = ${input.sessionId} AND kind = 'incident-object'\n ), replacement_links AS (\n SELECT source_type_id, source_primary_id AS source_id, link_id,\n target_type_id, target_primary_id AS target_id\n FROM ontology_source_rows\n WHERE project_id = ${this.projectId}\n AND source_id = ${input.sourceId}\n AND entity_kind = 'link'\n AND materialization_id = ANY(${this.sql.array(materializationIds)}::text[])\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.source_type_id\n AND incident_objects.primary_id = links.source_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.target_type_id\n AND incident_objects.primary_id = links.target_id\n WHERE links.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.source_type_id\n AND incident_objects.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.target_type_id\n AND incident_objects.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ${this.projectId}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.source_type_id\n AND incident_objects.primary_id = rows.source_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_sources AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.target_type_id\n AND incident_objects.primary_id = rows.target_primary_id\n WHERE rows.project_id = ${this.projectId}\n AND rows.entity_kind = 'link'\n AND sources.status = 'active'\n ), diff_links AS (\n SELECT * FROM replacement_links\n UNION SELECT * FROM incident_links\n ), affected_scopes AS (\n SELECT DISTINCT source_type_id, source_id, link_id FROM diff_links\n ), all_links AS (\n SELECT diff_links.*, TRUE AS diff_required FROM diff_links\n UNION ALL\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id, FALSE AS diff_required\n FROM links\n JOIN affected_scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ${this.projectId}\n UNION ALL\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id, FALSE AS diff_required\n FROM ontology_link_overrides AS overrides\n JOIN affected_scopes\n ON affected_scopes.source_type_id = overrides.source_type_id\n AND affected_scopes.source_id = overrides.source_primary_id\n AND affected_scopes.link_id = overrides.link_id\n WHERE overrides.project_id = ${this.projectId} AND overrides.identity_kind = 'slot'\n ), selected AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id,\n ${this.sql.unsafe(linkKeyExpression(\"all_links\"))} AS identity_key,\n ${this.sql.unsafe(linkSortExpression(\"all_links\"))} AS sort_key,\n BOOL_OR(diff_required) AS diff_required\n FROM all_links\n GROUP BY source_type_id, source_id, link_id, target_type_id, target_id\n )\n INSERT INTO ${this.sql(PG_REPLACEMENT_WORK_TABLE)} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ${input.sessionId}, 'link', identity_key, sort_key, diff_required\n FROM selected\n ON CONFLICT (session_id, entity_kind, identity_key) DO UPDATE SET\n diff_required = ${this.sql(PG_REPLACEMENT_WORK_TABLE)}.diff_required\n OR EXCLUDED.diff_required\n `\n }\n}\n\nfunction replacementIdentity(row: ReplacementWorkRow): ReplacementIdentity {\n const parts = JSON.parse(row.identity_key) as string[]\n if (row.entity_kind === \"object\") {\n return {\n kind: \"object\",\n ref: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n sortKey: row.sort_key,\n diffRequired: true,\n }\n }\n return {\n kind: \"link\",\n ref: {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n },\n sortKey: row.sort_key,\n diffRequired: row.diff_required,\n }\n}\n\nfunction activeSourceMap(\n rows: readonly PgOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly PgOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: structuredClone(row.value) as StoredObjectOverride[\"value\"],\n editedAt: structuredClone(row.edited_at) as Readonly<Record<string, string>>,\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: structuredClone(row.value) as StoredLinkOverride[\"value\"],\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(row.value, linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: toIsoString(row.updated_at),\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: PgOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n root: structuredClone(row.root) as StoredSourceAssertion[\"root\"],\n assertion: structuredClone(row.assertion) as StoredSourceAssertion[\"assertion\"],\n stagingOrdinal: databaseSafeInteger(row.staging_ordinal, \"Source staging ordinal\"),\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: structuredClone(row.properties) as EffectiveObjectSnapshot[\"properties\"],\n version: row.version,\n createdAt: toIsoString(row.created_at),\n updatedAt: toIsoString(row.updated_at),\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: structuredClone(row.properties) as NonNullable<\n EffectiveLinkSnapshot[\"properties\"]\n >,\n }),\n createdAt: toIsoString(row.created_at),\n updatedAt: toIsoString(row.updated_at),\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n const at = toIsoString(row.at)\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: structuredClone(row.value) as StoredTelemetryPoint[\"value\"],\n ...(row.unit === null ? {} : { unit: row.unit }),\n at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nexport function objectSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return utf8SortExpression([\n `to_jsonb(${prefix}object_type_id)::text`,\n `to_jsonb(${prefix}primary_id)::text`,\n ])\n}\n\nfunction objectKeyExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return jsonTupleExpression([\n `to_jsonb(${prefix}object_type_id)::text`,\n `to_jsonb(${prefix}primary_id)::text`,\n ])\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return utf8SortExpression([\n `to_jsonb(${prefix}source_type_id)::text`,\n `to_jsonb(${prefix}source_id)::text`,\n `to_jsonb(${prefix}link_id)::text`,\n `to_jsonb(${prefix}target_type_id)::text`,\n `to_jsonb(${prefix}target_id)::text`,\n ])\n}\n\nfunction linkKeyExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return jsonTupleExpression([\n `to_jsonb(${prefix}source_type_id)::text`,\n `to_jsonb(${prefix}source_id)::text`,\n `to_jsonb(${prefix}link_id)::text`,\n `to_jsonb(${prefix}target_type_id)::text`,\n `to_jsonb(${prefix}target_id)::text`,\n ])\n}\n\nfunction utf8SortExpression(parts: readonly string[]): string {\n return `encode(convert_to(${jsonTupleExpression(parts)}, 'UTF8'), 'hex')`\n}\n\nfunction jsonTupleExpression(parts: readonly string[]): string {\n return `concat('[', ${parts.join(\", ',', \")}, ']')`\n}\n",
|
|
35
|
+
"import {\n linkRefKey,\n MaterializationConflictError,\n objectRefKey,\n telemetryPointKey,\n} from \"@sixb/core/internal/materialization\"\nimport { effectiveConflict } from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { MaterializationPlanChunk } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { assertTimestamp, jsonParameter } from \"./shared\"\n\n/** Applies one already-validated exact plan chunk in bounded PostgreSQL batches. */\nexport class PgMaterializationWriter {\n constructor(private readonly sql: SQLClient) {}\n\n async apply(projectId: string, commitId: string, chunk: MaterializationPlanChunk): Promise<void> {\n await this.applyOverrides(projectId, chunk)\n await this.applyEffective(projectId, chunk)\n await this.applyTimeseries(projectId, chunk)\n await this.applyOutbox(projectId, commitId, chunk)\n }\n\n private async applyOverrides(projectId: string, chunk: MaterializationPlanChunk): Promise<void> {\n const objectUpserts = chunk.overrides.objects.upserts.map((item) => ({\n objectTypeId: item.ref.objectTypeId,\n primaryId: item.ref.primaryId,\n value: item.value,\n editedAt: item.editedAt,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n expectedLastCommitId: item.expectedLastCommitId,\n }))\n const objectInserts = objectUpserts.filter((item) => item.expectedLastCommitId === null)\n if (objectInserts.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectInserts)}::jsonb)\n )\n INSERT INTO ontology_object_overrides (\n project_id, object_type_id, primary_id, value, edited_at, last_commit_id, updated_at\n )\n SELECT ${projectId}, value->>'objectTypeId', value->>'primaryId', value->'value',\n value->'editedAt', value->>'lastCommitId',\n (value->>'updatedAt')::timestamptz\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING object_type_id\n `\n if (rows.length !== objectInserts.length) throw objectOverrideConflict()\n }\n\n const objectUpdates = objectUpserts.filter((item) => item.expectedLastCommitId !== null)\n if (objectUpdates.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectUpdates)}::jsonb)\n )\n UPDATE ontology_object_overrides AS overrides\n SET value = staged.value->'value', edited_at = staged.value->'editedAt',\n last_commit_id = staged.value->>'lastCommitId',\n updated_at = (staged.value->>'updatedAt')::timestamptz\n FROM staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.object_type_id = staged.value->>'objectTypeId'\n AND overrides.primary_id = staged.value->>'primaryId'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.object_type_id\n `\n if (rows.length !== objectUpdates.length) throw objectOverrideConflict()\n }\n\n const objectDeletes = chunk.overrides.objects.deletes.map((item) => ({\n objectTypeId: item.ref.objectTypeId,\n primaryId: item.ref.primaryId,\n expectedLastCommitId: item.expectedLastCommitId,\n }))\n if (objectDeletes.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectDeletes)}::jsonb)\n )\n DELETE FROM ontology_object_overrides AS overrides USING staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.object_type_id = staged.value->>'objectTypeId'\n AND overrides.primary_id = staged.value->>'primaryId'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.object_type_id\n `\n if (rows.length !== objectDeletes.length) throw objectOverrideConflict()\n }\n\n const linkUpserts = [\n ...chunk.overrides.links.edges.upserts.map((item) => ({\n identityKind: \"edge\" as const,\n identityKey: JSON.parse(linkRefKey(item.ref)) as unknown,\n sourceTypeId: item.ref.source.objectTypeId,\n sourcePrimaryId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetPrimaryId: item.ref.target.primaryId,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ...chunk.overrides.links.slots.upserts.map((item) => ({\n identityKind: \"slot\" as const,\n identityKey: [item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId],\n sourceTypeId: item.ref.source.objectTypeId,\n sourcePrimaryId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.value.target.objectTypeId,\n targetPrimaryId: item.value.target.primaryId,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ]\n const linkInserts = linkUpserts.filter((item) => item.expectedLastCommitId === null)\n if (linkInserts.length > 0) {\n const rows = await this.sql<{ readonly identity_kind: \"edge\" | \"slot\" }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkInserts)}::jsonb)\n )\n INSERT INTO ontology_link_overrides (\n project_id, identity_kind, identity_key, source_type_id, source_primary_id, link_id,\n target_type_id, target_primary_id, value, last_commit_id, updated_at\n )\n SELECT ${projectId}, value->>'identityKind', value->'identityKey',\n value->>'sourceTypeId', value->>'sourcePrimaryId', value->>'linkId',\n value->>'targetTypeId', value->>'targetPrimaryId', value->'value',\n value->>'lastCommitId', (value->>'updatedAt')::timestamptz\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING identity_kind\n `\n if (rows.length !== linkInserts.length)\n throw linkOverrideConflict(linkInserts[0]!.identityKind)\n }\n\n const linkUpdates = linkUpserts.filter((item) => item.expectedLastCommitId !== null)\n if (linkUpdates.length > 0) {\n const rows = await this.sql<{ readonly identity_kind: \"edge\" | \"slot\" }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkUpdates)}::jsonb)\n )\n UPDATE ontology_link_overrides AS overrides\n SET target_type_id = staged.value->>'targetTypeId',\n target_primary_id = staged.value->>'targetPrimaryId',\n value = staged.value->'value',\n last_commit_id = staged.value->>'lastCommitId',\n updated_at = (staged.value->>'updatedAt')::timestamptz\n FROM staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.identity_kind = staged.value->>'identityKind'\n AND overrides.identity_key = staged.value->'identityKey'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.identity_kind\n `\n if (rows.length !== linkUpdates.length)\n throw linkOverrideConflict(linkUpdates[0]!.identityKind)\n }\n\n const linkDeletes = [\n ...chunk.overrides.links.edges.deletes.map((item) => ({\n identityKind: \"edge\" as const,\n identityKey: JSON.parse(linkRefKey(item.ref)) as unknown,\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ...chunk.overrides.links.slots.deletes.map((item) => ({\n identityKind: \"slot\" as const,\n identityKey: [item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId],\n expectedLastCommitId: item.expectedLastCommitId,\n })),\n ]\n if (linkDeletes.length > 0) {\n const rows = await this.sql<{ readonly identity_kind: \"edge\" | \"slot\" }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkDeletes)}::jsonb)\n )\n DELETE FROM ontology_link_overrides AS overrides USING staged\n WHERE overrides.project_id = ${projectId}\n AND overrides.identity_kind = staged.value->>'identityKind'\n AND overrides.identity_key = staged.value->'identityKey'\n AND overrides.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING overrides.identity_kind\n `\n if (rows.length !== linkDeletes.length)\n throw linkOverrideConflict(linkDeletes[0]!.identityKind)\n }\n }\n\n private async applyEffective(projectId: string, chunk: MaterializationPlanChunk): Promise<void> {\n const linkDeletes = chunk.effective.linkDeletes.map((item) => ({\n sourceTypeId: item.ref.source.objectTypeId,\n sourceId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetId: item.ref.target.primaryId,\n expectedLastCommitId: item.expected.lastCommitId,\n }))\n if (linkDeletes.length > 0) {\n const rows = await this.sql<{ readonly source_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, linkDeletes)}::jsonb)\n )\n DELETE FROM links AS effective USING staged\n WHERE effective.project_id = ${projectId}\n AND effective.source_type_id = staged.value->>'sourceTypeId'\n AND effective.source_id = staged.value->>'sourceId'\n AND effective.link_id = staged.value->>'linkId'\n AND effective.target_type_id = staged.value->>'targetTypeId'\n AND effective.target_id = staged.value->>'targetId'\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.source_type_id\n `\n if (rows.length !== linkDeletes.length) throw effectiveLinkConflict(linkDeletes[0]!)\n }\n\n const objectDeletes = chunk.effective.objectDeletes.map((item) => ({\n objectTypeId: item.ref.objectTypeId,\n primaryId: item.ref.primaryId,\n expectedVersion: item.expected.version,\n expectedLastCommitId: item.expected.lastCommitId,\n }))\n if (objectDeletes.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, objectDeletes)}::jsonb)\n )\n DELETE FROM objects AS effective USING staged\n WHERE effective.project_id = ${projectId}\n AND effective.object_type_id = staged.value->>'objectTypeId'\n AND effective.primary_id = staged.value->>'primaryId'\n AND effective.version = (staged.value->>'expectedVersion')::integer\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.object_type_id\n `\n if (rows.length !== objectDeletes.length) throw effectiveObjectConflict(objectDeletes[0]!)\n }\n\n await this.applyObjects(projectId, chunk.effective.objectUpserts)\n await this.applyLinks(projectId, chunk.effective.linkUpserts)\n }\n\n private async applyObjects(\n projectId: string,\n items: MaterializationPlanChunk[\"effective\"][\"objectUpserts\"]\n ): Promise<void> {\n const payload = items.map(({ row, expected }) => ({\n objectTypeId: row.ref.objectTypeId,\n primaryId: row.ref.primaryId,\n properties: row.properties,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n version: row.version,\n lastCommitId: row.lastCommitId,\n expectedExists: expected.exists,\n expectedVersion: expected.exists ? expected.version : null,\n expectedLastCommitId: expected.exists ? expected.lastCommitId : null,\n }))\n const inserts = payload.filter((item) => !item.expectedExists)\n if (inserts.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, inserts)}::jsonb)\n )\n INSERT INTO objects (\n project_id, object_type_id, primary_id, properties, created_at,\n updated_at, version, last_commit_id\n )\n SELECT ${projectId}, value->>'objectTypeId', value->>'primaryId',\n value->'properties', (value->>'createdAt')::timestamptz,\n (value->>'updatedAt')::timestamptz, (value->>'version')::integer,\n value->>'lastCommitId'\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING object_type_id\n `\n if (rows.length !== inserts.length) {\n throw effectiveConflict(`Expected object ${objectIdentityKey(inserts[0]!)} to be absent.`)\n }\n }\n\n const updates = payload.filter((item) => item.expectedExists)\n if (updates.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, updates)}::jsonb)\n )\n UPDATE objects AS effective\n SET properties = staged.value->'properties',\n created_at = (staged.value->>'createdAt')::timestamptz,\n updated_at = (staged.value->>'updatedAt')::timestamptz,\n version = (staged.value->>'version')::integer,\n last_commit_id = staged.value->>'lastCommitId'\n FROM staged\n WHERE effective.project_id = ${projectId}\n AND effective.object_type_id = staged.value->>'objectTypeId'\n AND effective.primary_id = staged.value->>'primaryId'\n AND effective.version = (staged.value->>'expectedVersion')::integer\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.object_type_id\n `\n if (rows.length !== updates.length) throw effectiveObjectConflict(updates[0]!)\n }\n }\n\n private async applyLinks(\n projectId: string,\n items: MaterializationPlanChunk[\"effective\"][\"linkUpserts\"]\n ): Promise<void> {\n const payload = items.map(({ row, expected }) => ({\n sourceTypeId: row.ref.source.objectTypeId,\n sourceId: row.ref.source.primaryId,\n linkId: row.ref.linkId,\n targetTypeId: row.ref.target.objectTypeId,\n targetId: row.ref.target.primaryId,\n ...(row.properties === undefined ? {} : { properties: row.properties }),\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n lastCommitId: row.lastCommitId,\n expectedExists: expected.exists,\n expectedLastCommitId: expected.exists ? expected.lastCommitId : null,\n }))\n const inserts = payload.filter((item) => !item.expectedExists)\n if (inserts.length > 0) {\n const rows = await this.sql<{ readonly source_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, inserts)}::jsonb)\n )\n INSERT INTO links (\n project_id, source_type_id, source_id, link_id, target_type_id, target_id,\n properties, created_at, updated_at, last_commit_id\n )\n SELECT ${projectId}, value->>'sourceTypeId', value->>'sourceId', value->>'linkId',\n value->>'targetTypeId', value->>'targetId',\n CASE WHEN value ? 'properties' THEN value->'properties' ELSE NULL END,\n (value->>'createdAt')::timestamptz, (value->>'updatedAt')::timestamptz,\n value->>'lastCommitId'\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING source_type_id\n `\n if (rows.length !== inserts.length) {\n throw effectiveConflict(`Expected link ${linkIdentityKey(inserts[0]!)} to be absent.`)\n }\n }\n\n const updates = payload.filter((item) => item.expectedExists)\n if (updates.length > 0) {\n const rows = await this.sql<{ readonly source_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, updates)}::jsonb)\n )\n UPDATE links AS effective\n SET properties = CASE\n WHEN staged.value ? 'properties' THEN staged.value->'properties'\n ELSE NULL\n END,\n created_at = (staged.value->>'createdAt')::timestamptz,\n updated_at = (staged.value->>'updatedAt')::timestamptz,\n last_commit_id = staged.value->>'lastCommitId'\n FROM staged\n WHERE effective.project_id = ${projectId}\n AND effective.source_type_id = staged.value->>'sourceTypeId'\n AND effective.source_id = staged.value->>'sourceId'\n AND effective.link_id = staged.value->>'linkId'\n AND effective.target_type_id = staged.value->>'targetTypeId'\n AND effective.target_id = staged.value->>'targetId'\n AND effective.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING effective.source_type_id\n `\n if (rows.length !== updates.length) throw effectiveLinkConflict(updates[0]!)\n }\n }\n\n private async applyTimeseries(projectId: string, chunk: MaterializationPlanChunk): Promise<void> {\n const payload = chunk.timeseries.pointUpserts.map(({ point, expected }) => ({\n objectTypeId: point.series.object.objectTypeId,\n objectId: point.series.object.primaryId,\n propertyId: point.series.propertyId,\n value: point.value,\n unit: point.unit ?? null,\n at: point.at,\n lastCommitId: point.lastCommitId,\n expectedLastCommitId: expected.lastCommitId,\n }))\n const inserts = payload.filter((item) => item.expectedLastCommitId === null)\n if (inserts.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, inserts)}::jsonb)\n ), written AS (\n INSERT INTO timeseries (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n )\n SELECT ${projectId}, value->>'objectTypeId', value->>'objectId',\n value->>'propertyId', value->'value', value->>'unit',\n (value->>'at')::timestamptz, value->>'lastCommitId'\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING *\n ), latest_candidates AS (\n SELECT DISTINCT ON (project_id, object_type_id, object_id, property_id)\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM written\n ORDER BY project_id, object_type_id, object_id, property_id, at DESC\n ), latest AS (\n INSERT INTO timeseries_latest (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n )\n SELECT project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM latest_candidates\n ON CONFLICT (project_id, object_type_id, object_id, property_id)\n DO UPDATE SET value = EXCLUDED.value, unit = EXCLUDED.unit, at = EXCLUDED.at,\n last_commit_id = EXCLUDED.last_commit_id\n WHERE EXCLUDED.at >= timeseries_latest.at\n RETURNING object_type_id\n )\n SELECT object_type_id, (SELECT COUNT(*) FROM latest) AS latest_count FROM written\n `\n if (rows.length !== inserts.length) throw pointConflict(inserts[0]!)\n }\n\n const updates = payload.filter((item) => item.expectedLastCommitId !== null)\n if (updates.length > 0) {\n const rows = await this.sql<{ readonly object_type_id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, updates)}::jsonb)\n ), written AS (\n UPDATE timeseries AS points\n SET value = staged.value->'value', unit = staged.value->>'unit',\n last_commit_id = staged.value->>'lastCommitId'\n FROM staged\n WHERE points.project_id = ${projectId}\n AND points.object_type_id = staged.value->>'objectTypeId'\n AND points.object_id = staged.value->>'objectId'\n AND points.property_id = staged.value->>'propertyId'\n AND points.at = (staged.value->>'at')::timestamptz\n AND points.last_commit_id = staged.value->>'expectedLastCommitId'\n RETURNING points.*\n ), latest_candidates AS (\n SELECT DISTINCT ON (project_id, object_type_id, object_id, property_id)\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM written\n ORDER BY project_id, object_type_id, object_id, property_id, at DESC\n ), latest AS (\n INSERT INTO timeseries_latest (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n )\n SELECT project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n FROM latest_candidates\n ON CONFLICT (project_id, object_type_id, object_id, property_id)\n DO UPDATE SET value = EXCLUDED.value, unit = EXCLUDED.unit, at = EXCLUDED.at,\n last_commit_id = EXCLUDED.last_commit_id\n WHERE EXCLUDED.at >= timeseries_latest.at\n RETURNING object_type_id\n )\n SELECT object_type_id, (SELECT COUNT(*) FROM latest) AS latest_count FROM written\n `\n if (rows.length !== updates.length) throw pointConflict(updates[0]!)\n }\n }\n\n private async applyOutbox(\n projectId: string,\n commitId: string,\n chunk: MaterializationPlanChunk\n ): Promise<void> {\n if (chunk.outbox.length === 0) return\n const payload = chunk.outbox.map((item) => {\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n return {\n id: item.envelope.id,\n commitOrdinal: item.envelope.commitOrdinal,\n envelope: item.envelope,\n availableAt: item.availableAt,\n createdAt: item.createdAt,\n }\n })\n const rows = await this.sql<{ readonly id: string }[]>`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(this.sql, payload)}::jsonb)\n )\n INSERT INTO ontology_outbox (\n project_id, id, commit_id, commit_ordinal, envelope,\n available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n )\n SELECT ${projectId}, value->>'id', ${commitId},\n (value->>'commitOrdinal')::bigint, value->'envelope',\n (value->>'availableAt')::timestamptz, 0, NULL, NULL, NULL, NULL,\n (value->>'createdAt')::timestamptz\n FROM staged\n ON CONFLICT DO NOTHING\n RETURNING id\n `\n if (rows.length !== payload.length) {\n const inserted = new Set(rows.map((row) => row.id))\n const duplicate = payload.find((item) => !inserted.has(item.id)) ?? payload[0]!\n throw effectiveConflict(`Duplicate outbox event '${duplicate.id}'.`)\n }\n }\n}\n\nfunction objectOverrideConflict(): MaterializationConflictError {\n return effectiveConflict(\"Expected object override changed.\")\n}\n\nfunction linkOverrideConflict(identityKind: \"edge\" | \"slot\"): MaterializationConflictError {\n return effectiveConflict(\n identityKind === \"edge\"\n ? \"Expected link edge override changed.\"\n : \"Expected link slot override changed.\"\n )\n}\n\nfunction objectIdentityKey(item: {\n readonly objectTypeId: string\n readonly primaryId: string\n}): string {\n return objectRefKey({ objectTypeId: item.objectTypeId, primaryId: item.primaryId })\n}\n\nfunction linkIdentityKey(item: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n}): string {\n return linkRefKey({\n source: { objectTypeId: item.sourceTypeId, primaryId: item.sourceId },\n linkId: item.linkId,\n target: { objectTypeId: item.targetTypeId, primaryId: item.targetId },\n })\n}\n\nfunction effectiveObjectConflict(item: {\n readonly objectTypeId: string\n readonly primaryId: string\n}): MaterializationConflictError {\n return effectiveConflict(`Expected object ${objectIdentityKey(item)} changed.`)\n}\n\nfunction effectiveLinkConflict(item: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n}): MaterializationConflictError {\n return effectiveConflict(`Expected link ${linkIdentityKey(item)} changed.`)\n}\n\nfunction pointConflict(item: {\n readonly objectTypeId: string\n readonly objectId: string\n readonly propertyId: string\n readonly at: string\n}): MaterializationConflictError {\n return new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(\n {\n object: { objectTypeId: item.objectTypeId, primaryId: item.objectId },\n propertyId: item.propertyId,\n },\n item.at\n )} changed.`\n )\n}\n",
|
|
35
36
|
"import { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"@sixb/core/internal/materialization\"\nimport type {\n ClaimedOntologyOutboxRow,\n ClaimOntologyOutboxInput,\n CompleteOntologyOutboxLeaseInput,\n OntologyOutboxStorage,\n OntologyOutboxSummary,\n PurgePublishedOntologyOutboxInput,\n RescheduleOntologyOutboxLeaseInput,\n SummarizeOntologyOutboxInput,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertPositiveInteger,\n assertTimestamp,\n outboxRecord,\n type PgOntologyOutboxRow,\n type PgRootOperation,\n} from \"./shared\"\n\nexport class PgOntologyOutboxStorage implements OntologyOutboxStorage {\n constructor(private readonly runRootOperation: PgRootOperation) {}\n\n async claim(input: ClaimOntologyOutboxInput): Promise<readonly ClaimedOntologyOutboxRow[]> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n const now = assertTimestamp(input.now, \"Ontology outbox claim time\")\n const leaseExpiry = assertTimestamp(input.leaseExpiresAt, \"Ontology outbox lease expiry\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n if (leaseExpiry <= now) {\n throw new MaterializationValidationError(\n \"Ontology outbox lease expiry must be later than the claim time.\"\n )\n }\n\n const rows = await sql<PgOntologyOutboxRow[]>`\n WITH candidates AS (\n SELECT project_id, id\n FROM ontology_outbox\n WHERE project_id = ${input.projectId}\n AND published_at IS NULL\n AND available_at <= ${input.now}\n AND (lease_expires_at IS NULL OR lease_expires_at <= ${input.now})\n ORDER BY created_at, commit_id, commit_ordinal\n LIMIT ${input.limit}\n FOR UPDATE SKIP LOCKED\n ), claimed AS (\n UPDATE ontology_outbox AS outbox\n SET attempts = outbox.attempts + 1,\n lease_id = ${input.leaseId},\n lease_expires_at = ${input.leaseExpiresAt}\n FROM candidates\n WHERE outbox.project_id = candidates.project_id AND outbox.id = candidates.id\n RETURNING outbox.id AS row_id, outbox.envelope, outbox.available_at,\n outbox.attempts, outbox.lease_id, outbox.lease_expires_at,\n outbox.published_at, outbox.last_failure, outbox.created_at,\n outbox.commit_id, outbox.commit_ordinal\n )\n SELECT * FROM claimed ORDER BY created_at, commit_id, commit_ordinal\n `\n return rows.map((row) => {\n const record = outboxRecord(row)\n if (record.leaseId === null || record.leaseExpiresAt === null) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox claim returned an unpaired lease.\"\n )\n }\n return { ...record, leaseId: record.leaseId, leaseExpiresAt: record.leaseExpiresAt }\n })\n })\n }\n\n async markPublished(input: CompleteOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(async (sql) => {\n assertLeaseInput(input)\n assertTimestamp(input.publishedAt, \"Ontology outbox publishedAt\")\n const ids = validateLeaseIds(input.ids)\n if (ids.length === 0) return\n const rows = await sql<{ readonly id: string }[]>`\n WITH leased AS MATERIALIZED (\n SELECT id FROM ontology_outbox\n WHERE project_id = ${input.projectId}\n AND id = ANY(${sql.array(ids)}::text[])\n AND lease_id = ${input.leaseId}\n AND lease_expires_at IS NOT NULL\n FOR UPDATE\n ), eligible AS (\n SELECT id FROM leased\n WHERE (SELECT COUNT(*) FROM leased) = ${ids.length}\n )\n UPDATE ontology_outbox AS outbox\n SET published_at = ${input.publishedAt}, lease_id = NULL, lease_expires_at = NULL\n FROM eligible\n WHERE outbox.project_id = ${input.projectId} AND outbox.id = eligible.id\n RETURNING outbox.id\n `\n if (rows.length !== ids.length) throw leaseConflict()\n })\n }\n\n async reschedule(input: RescheduleOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(async (sql) => {\n assertLeaseInput(input)\n assertTimestamp(input.availableAt, \"Ontology outbox availableAt\")\n const ids = validateLeaseIds(input.ids)\n if (ids.length === 0) return\n const failure =\n input.failure === undefined\n ? null\n : serializeSixbFailure(input.failure, ONTOLOGY_OUTBOX_FAILURE_CODES)\n const rows = await sql<{ readonly id: string }[]>`\n WITH leased AS MATERIALIZED (\n SELECT id FROM ontology_outbox\n WHERE project_id = ${input.projectId}\n AND id = ANY(${sql.array(ids)}::text[])\n AND lease_id = ${input.leaseId}\n AND lease_expires_at IS NOT NULL\n FOR UPDATE\n ), eligible AS (\n SELECT id FROM leased\n WHERE (SELECT COUNT(*) FROM leased) = ${ids.length}\n )\n UPDATE ontology_outbox AS outbox\n SET available_at = ${input.availableAt},\n last_failure = COALESCE(${failure}::text::jsonb, outbox.last_failure),\n lease_id = NULL, lease_expires_at = NULL\n FROM eligible\n WHERE outbox.project_id = ${input.projectId} AND outbox.id = eligible.id\n RETURNING outbox.id\n `\n if (rows.length !== ids.length) throw leaseConflict()\n })\n }\n\n async purgePublished(input: PurgePublishedOntologyOutboxInput): Promise<number> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n assertTimestamp(input.publishedBefore, \"Ontology outbox purge cutoff\")\n const rows = await sql<{ readonly id: string }[]>`\n WITH selected AS (\n SELECT project_id, id\n FROM ontology_outbox\n WHERE project_id = ${input.projectId}\n AND published_at IS NOT NULL\n AND published_at < ${input.publishedBefore}\n ORDER BY published_at, id\n LIMIT ${input.limit}\n FOR UPDATE SKIP LOCKED\n )\n DELETE FROM ontology_outbox AS outbox\n USING selected\n WHERE outbox.project_id = selected.project_id AND outbox.id = selected.id\n RETURNING outbox.id\n `\n return rows.length\n })\n }\n\n async summarize(input: SummarizeOntologyOutboxInput): Promise<OntologyOutboxSummary> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n const [summary] = await sql<\n {\n readonly pending_count: number\n readonly oldest_pending_at: Date | string | null\n readonly retrying_count: number\n readonly max_attempts: number\n }[]\n >`\n SELECT COUNT(*)::int AS pending_count,\n MIN(created_at) AS oldest_pending_at,\n COUNT(*) FILTER (WHERE attempts > 0)::int AS retrying_count,\n COALESCE(MAX(attempts), 0)::int AS max_attempts\n FROM ontology_outbox\n WHERE project_id = ${input.projectId} AND published_at IS NULL\n `\n return {\n pendingCount: summary?.pending_count ?? 0,\n oldestPendingAt: toOptionalIsoString(summary?.oldest_pending_at),\n retryingCount: summary?.retrying_count ?? 0,\n maxAttempts: summary?.max_attempts ?? 0,\n }\n })\n }\n}\n\nfunction toOptionalIsoString(value: Date | string | null | undefined): string | null {\n if (value === null || value === undefined) return null\n return value instanceof Date ? value.toISOString() : new Date(value).toISOString()\n}\n\nfunction validateLeaseIds(ids: readonly string[]): string[] {\n const seen = new Set<string>()\n for (const id of ids) {\n assertNonblank(id, \"Ontology outbox event id\")\n if (seen.has(id)) {\n throw new MaterializationValidationError(`Ontology outbox lease batch repeats event '${id}'.`)\n }\n seen.add(id)\n }\n return [...seen]\n}\n\nfunction assertLeaseInput(input: {\n readonly projectId: string\n readonly ids: readonly string[]\n readonly leaseId: string\n}): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n}\n\nfunction leaseConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\"outbox-lease\", \"Ontology outbox lease does not match.\")\n}\n",
|
|
36
37
|
"import { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n utf8SortKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n ReclaimSourceMaterializationInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { lockAdvisoryKeys } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n jsonParameter,\n ontologyLockKey,\n type PgOntologySourceAssertionRow,\n type PgOntologySourceRow,\n type PgRootOperation,\n sourceAssertion,\n sourceRecord,\n toIsoString,\n} from \"./shared\"\n\nexport class PgOntologySourceStorage implements OntologySourceStorage {\n constructor(private readonly runRootOperation: PgRootOperation) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(async (sql) => {\n assertBeginInput(input)\n await this.assertExecution(sql, input, sourceMaterializationIdentity(input))\n await lockAdvisoryKeys(sql, [\n ontologyLockKey(\"source-candidate\", input.projectId, input.execution.projectionRunId),\n ontologyLockKey(\n \"source-materialization\",\n input.projectId,\n input.source.projectionId,\n input.materializationId\n ),\n ])\n\n const existing = await this.getManifest(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n true\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = await this.getRunCandidate(sql, input)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n\n const rows = await sql<PgOntologySourceRow[]>`\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at\n ) VALUES (\n ${input.projectId}, ${input.source.projectionId}, ${input.materializationId},\n ${input.execution.projectionRunId}, ${input.projectionKind}, 'replacement',\n 'staging', ${input.execution.executionToken}, ${input.datasetVersion.datasetId},\n ${input.datasetVersion.versionId}, ${input.datasetVersion.createdAt},\n ${input.projectionRevision}, ${input.ownershipHash}, ${input.ontologyRevision},\n NULL, NULL, ${input.createdAt}, NULL, NULL, NULL, NULL, ${input.createdAt}\n )\n ON CONFLICT DO NOTHING\n RETURNING *\n `\n if (rows[0]) return sourceRecord(rows[0])\n\n const racedManifest = await this.getManifest(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n true\n )\n if (racedManifest && isExactStagingManifest(sourceRecord(racedManifest), input)) {\n return sourceRecord(racedManifest)\n }\n if (await this.getRunCandidate(sql, input)) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n return this.runRootOperation(async (sql) => {\n assertWriteIdentity(input)\n await this.assertExecution(sql, input)\n const manifest = await this.requireManifest(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n true\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = await this.findStageRows(sql, input, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n await this.insertStageRows(sql, input, pending)\n return { inserted: pending.length, unchanged }\n })\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(async (sql) => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n await this.assertExecution(sql, input)\n const manifest = await this.requireManifest(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n true\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n numberOrNull(manifest.root_count) === input.rootCount &&\n numberOrNull(manifest.assertion_count) === input.assertionCount &&\n toIsoString(manifest.ready_at!) === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < toIsoString(manifest.created_at)) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n await this.assertReadyState(sql, manifest, input.rootCount, input.assertionCount)\n const rows = await sql<PgOntologySourceRow[]>`\n UPDATE ontology_sources\n SET status = 'ready', root_count = ${input.rootCount},\n assertion_count = ${input.assertionCount}, ready_at = ${input.readyAt},\n updated_at = ${input.readyAt}\n WHERE project_id = ${input.projectId}\n AND source_id = ${input.source.projectionId}\n AND materialization_id = ${input.materializationId}\n AND status = 'staging'\n AND execution_token = ${input.execution.executionToken}\n RETURNING *\n `\n if (!rows[0]) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(rows[0])\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(async (sql) => {\n assertProjectAndSource(input)\n const [row] = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${input.projectId}\n AND source_id = ${input.source.projectionId}\n AND status = 'active'\n `\n return row ? sourceRecord(row) : null\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: ReclaimSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(async (sql) => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n await this.assertExecution(sql, input)\n return input.kind === \"candidate\"\n ? this.abandonCandidate(sql, input)\n : this.abandonForReclaim(sql, input)\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n const manifests = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${input.projectId}\n AND status IN ('superseded', 'abandoned')\n AND terminal_at < ${input.terminalBefore}\n ORDER BY terminal_at, source_id, materialization_id\n LIMIT ${input.limit}\n FOR UPDATE SKIP LOCKED\n `\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n for (const manifest of manifests) {\n if (remaining === 0) break\n const deletedRows = await sql<{ readonly entity_sort_key: string }[]>`\n WITH selected AS (\n SELECT rows.ctid\n FROM ontology_source_rows AS rows\n WHERE rows.project_id = ${manifest.project_id}\n AND rows.source_id = ${manifest.source_id}\n AND rows.materialization_id = ${manifest.materialization_id}\n ORDER BY rows.entity_sort_key\n LIMIT ${remaining}\n FOR UPDATE SKIP LOCKED\n )\n DELETE FROM ontology_source_rows AS rows\n USING selected\n WHERE rows.ctid = selected.ctid\n RETURNING rows.entity_sort_key\n `\n rowsDeleted += deletedRows.length\n remaining -= deletedRows.length\n if (remaining === 0) break\n const removed = await sql<{ readonly materialization_id: string }[]>`\n DELETE FROM ontology_sources AS sources\n WHERE sources.project_id = ${manifest.project_id}\n AND sources.source_id = ${manifest.source_id}\n AND sources.materialization_id = ${manifest.materialization_id}\n AND sources.status IN ('superseded', 'abandoned')\n AND sources.terminal_at = ${manifest.terminal_at}\n AND sources.terminal_at < ${input.terminalBefore}\n AND NOT EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = sources.project_id\n AND rows.source_id = sources.source_id\n AND rows.materialization_id = sources.materialization_id\n )\n RETURNING sources.materialization_id\n `\n materializationsDeleted += removed.length\n remaining -= removed.length\n }\n return { rowsDeleted, materializationsDeleted }\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n const [summary] = await sql<\n {\n readonly terminal_count: number\n readonly oldest_terminal_at: Date | string | null\n }[]\n >`\n SELECT COUNT(*)::int AS terminal_count, MIN(terminal_at) AS oldest_terminal_at\n FROM ontology_sources\n WHERE project_id = ${input.projectId}\n AND status IN ('superseded', 'abandoned')\n `\n return {\n count: summary?.terminal_count ?? 0,\n oldestTerminalAt: toOptionalIsoString(summary?.oldest_terminal_at),\n }\n })\n }\n\n private async abandonCandidate(\n sql: SQLClient,\n input: AbandonSourceMaterializationCandidateInput\n ): Promise<OntologySourceRecord> {\n const manifest = await this.requireManifest(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n true\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at !== null &&\n toIsoString(manifest.terminal_at) === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(sql, manifest, input.abandonedAt)\n }\n\n private async abandonForReclaim(\n sql: SQLClient,\n input: ReclaimSourceMaterializationInput\n ): Promise<OntologySourceRecord | null> {\n const candidates = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${input.projectId}\n AND source_id = ${input.source.projectionId}\n AND projection_run_id = ${input.execution.projectionRunId}\n AND status IN ('staging', 'ready')\n FOR UPDATE\n `\n if (\n candidates.some((candidate) => candidate.execution_token === input.execution.executionToken)\n ) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a source materialization owned by the current execution.`\n )\n }\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ? this.transitionToAbandoned(sql, candidates[0], input.abandonedAt) : null\n }\n\n private async transitionToAbandoned(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n abandonedAt: string\n ): Promise<OntologySourceRecord> {\n if (\n abandonedAt < toIsoString(manifest.created_at) ||\n (manifest.ready_at !== null && abandonedAt < toIsoString(manifest.ready_at))\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const rows = await sql<PgOntologySourceRow[]>`\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL,\n terminal_at = ${abandonedAt}, updated_at = ${abandonedAt}\n WHERE project_id = ${manifest.project_id}\n AND source_id = ${manifest.source_id}\n AND materialization_id = ${manifest.materialization_id}\n AND status IN ('staging', 'ready')\n RETURNING *\n `\n if (!rows[0]) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n return sourceRecord(rows[0])\n }\n\n private async assertReadyState(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): Promise<void> {\n const [counts] = await sql<\n {\n readonly assertions: number | string\n readonly roots: number | string\n readonly ordinals: number | string\n readonly min_ordinal: number | string | null\n readonly max_ordinal: number | string | null\n }[]\n >`\n SELECT COUNT(*) AS assertions, COUNT(DISTINCT root_key) AS roots,\n COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_rows\n WHERE project_id = ${manifest.project_id}\n AND source_id = ${manifest.source_id}\n AND materialization_id = ${manifest.materialization_id}\n `\n const assertions = Number(counts?.assertions ?? 0)\n const roots = Number(counts?.roots ?? 0)\n const ordinals = Number(counts?.ordinals ?? 0)\n const minimum = counts?.min_ordinal === null ? null : Number(counts?.min_ordinal)\n const maximum = counts?.max_ordinal === null ? null : Number(counts?.max_ordinal)\n if (\n assertions !== assertionCount ||\n roots !== rootCount ||\n ordinals !== rootCount ||\n (rootCount > 0 && (minimum !== 0 || maximum !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n\n const [invalid] =\n manifest.projection_kind === \"link\"\n ? await sql<{ readonly root_key: unknown }[]>`\n SELECT root_key\n FROM ontology_source_rows\n WHERE project_id = ${manifest.project_id}\n AND source_id = ${manifest.source_id}\n AND materialization_id = ${manifest.materialization_id}\n GROUP BY root_key\n HAVING COUNT(*) <> 1\n OR BOOL_OR(root_kind <> 'link')\n OR BOOL_OR(entity_kind <> 'link')\n OR BOOL_OR(root_key <> entity_key)\n LIMIT 1\n `\n : await sql<{ readonly root_key: unknown }[]>`\n SELECT root_key\n FROM ontology_source_rows\n WHERE project_id = ${manifest.project_id}\n AND source_id = ${manifest.source_id}\n AND materialization_id = ${manifest.materialization_id}\n GROUP BY root_key\n HAVING BOOL_OR(root_kind <> 'object')\n OR COUNT(*) FILTER (\n WHERE entity_kind = 'object' AND entity_key = root_key\n ) <> 1\n OR COUNT(*) FILTER (\n WHERE (entity_kind = 'object' AND entity_key <> root_key)\n OR (entity_kind = 'link' AND (\n source_type_id <> root_object_type_id\n OR source_primary_id <> root_primary_id\n ))\n ) <> 0\n LIMIT 1\n `\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n private async findStageRows(\n sql: SQLClient,\n input: StageSourceRowsInput,\n rows: readonly SourceStageRow[]\n ): Promise<readonly SourceStageRow[]> {\n if (rows.length === 0) return []\n const rootSortKeys = [...new Set(rows.map((row) => utf8SortKey(row.rootKey)))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n const entitySortKeys = [...new Set(rows.map((row) => utf8SortKey(row.entityKey)))]\n const existing = await sql<PgOntologySourceAssertionRow[]>`\n SELECT * FROM ontology_source_rows\n WHERE project_id = ${input.projectId}\n AND source_id = ${input.source.projectionId}\n AND materialization_id = ${input.materializationId}\n AND (\n root_sort_key = ANY(${sql.array(rootSortKeys)}::text[])\n OR staging_ordinal = ANY(${sql.array(ordinals)}::bigint[])\n OR entity_sort_key = ANY(${sql.array(entitySortKeys)}::text[])\n )\n `\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private async insertStageRows(\n sql: SQLClient,\n input: StageSourceRowsInput,\n rows: readonly SourceStageRow[]\n ): Promise<void> {\n if (rows.length === 0) return\n const payload = rows.map(({ entityKey, rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n const root = entityColumns(row.root)\n return {\n entityKind: row.assertion.kind,\n entityKey: JSON.parse(entityKey) as unknown,\n entitySortKey: utf8SortKey(entityKey),\n rootKind: row.root.kind,\n rootKey: JSON.parse(rootKey) as unknown,\n rootSortKey: utf8SortKey(rootKey),\n stagingOrdinal: row.stagingOrdinal,\n root: row.root,\n assertion: row.assertion,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n rootObjectTypeId: root.objectTypeId,\n rootPrimaryId: root.primaryId,\n rootSourceTypeId: root.sourceTypeId,\n rootSourcePrimaryId: root.sourcePrimaryId,\n rootLinkId: root.linkId,\n rootTargetTypeId: root.targetTypeId,\n rootTargetPrimaryId: root.targetPrimaryId,\n }\n })\n await sql`\n WITH staged AS (\n SELECT value\n FROM jsonb_array_elements(${jsonParameter(sql, payload)}::jsonb)\n )\n INSERT INTO ontology_source_rows (\n project_id, source_id, materialization_id,\n entity_kind, entity_key, entity_sort_key,\n root_kind, root_key, root_sort_key, staging_ordinal,\n root, assertion,\n object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id,\n root_object_type_id, root_primary_id,\n root_source_type_id, root_source_primary_id, root_link_id,\n root_target_type_id, root_target_primary_id\n )\n SELECT\n ${input.projectId}, ${input.source.projectionId}, ${input.materializationId},\n value->>'entityKind', value->'entityKey', value->>'entitySortKey',\n value->>'rootKind', value->'rootKey', value->>'rootSortKey',\n (value->>'stagingOrdinal')::bigint,\n value->'root', value->'assertion',\n value->>'objectTypeId', value->>'primaryId',\n value->>'sourceTypeId', value->>'sourcePrimaryId', value->>'linkId',\n value->>'targetTypeId', value->>'targetPrimaryId',\n value->>'rootObjectTypeId', value->>'rootPrimaryId',\n value->>'rootSourceTypeId', value->>'rootSourcePrimaryId', value->>'rootLinkId',\n value->>'rootTargetTypeId', value->>'rootTargetPrimaryId'\n FROM staged\n `\n }\n\n private assertExecution(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): Promise<void> {\n return assertProjectionExecution(sql, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private async getRunCandidate(\n sql: SQLClient,\n input: BeginSourceMaterializationInput\n ): Promise<PgOntologySourceRow | null> {\n const [row] = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${input.projectId}\n AND projection_run_id = ${input.execution.projectionRunId}\n AND status IN ('staging', 'ready')\n LIMIT 1\n FOR UPDATE\n `\n return row ?? null\n }\n\n private async getManifest(\n sql: SQLClient,\n projectId: string,\n sourceId: string,\n materializationId: string,\n lock = false\n ): Promise<PgOntologySourceRow | null> {\n const lockFragment = lock ? sql`FOR UPDATE` : sql``\n const [row] = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${projectId}\n AND source_id = ${sourceId}\n AND materialization_id = ${materializationId}\n ${lockFragment}\n `\n return row ?? null\n }\n\n private async requireManifest(\n sql: SQLClient,\n projectId: string,\n sourceId: string,\n materializationId: string,\n lock = false\n ): Promise<PgOntologySourceRow> {\n const row = await this.getManifest(sql, projectId, sourceId, materializationId, lock)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n\nfunction toOptionalIsoString(value: Date | string | null | undefined): string | null {\n if (value === null || value === undefined) return null\n return value instanceof Date ? value.toISOString() : new Date(value).toISOString()\n}\n\nfunction numberOrNull(value: number | string | null): number | null {\n return value === null ? null : Number(value)\n}\n",
|
|
37
38
|
"import type { OntologyStorage } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { PgOntologyCommitStorage } from \"./commits\"\nimport type { PgOntologyTransactionContext } from \"./materialization-session\"\nimport { PgOntologyMaterializationStorage } from \"./materializations\"\nimport { PgOntologyOutboxStorage } from \"./outbox\"\nimport type { PgRootOperation } from \"./shared\"\nimport { PgOntologySourceStorage } from \"./sources\"\n\nexport class PgOntologyStorage implements OntologyStorage {\n readonly commits: PgOntologyCommitStorage\n readonly sources: PgOntologySourceStorage\n readonly materializations: PgOntologyMaterializationStorage\n readonly outbox: PgOntologyOutboxStorage\n\n constructor(input: {\n readonly sql: SQLClient\n readonly runRootOperation: PgRootOperation\n readonly transactionContext: PgOntologyTransactionContext | null\n }) {\n this.commits = new PgOntologyCommitStorage(input.runRootOperation)\n this.sources = new PgOntologySourceStorage(input.runRootOperation)\n this.materializations = new PgOntologyMaterializationStorage(\n input.sql,\n input.transactionContext\n )\n this.outbox = new PgOntologyOutboxStorage(input.runRootOperation)\n }\n\n deactivateSessions(): void {\n this.materializations.deactivateSessions()\n }\n}\n\nexport type { PgOntologyTransactionContext } from \"./materialization-session\"\n",
|
|
38
39
|
"import type { ActionSubject, JsonValue } from \"@sixb/core\"\nimport {\n parseActionRunFailure,\n serializeActionRunFailure,\n} from \"@sixb/core/internal/action-run-storage\"\nimport { assertActionRunExecution } from \"@sixb/core/internal/action-run-storage-provider\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunFailure,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStorage,\n ActionRunWritebackRecord,\n EnterActionRunPhaseInput,\n ExecutionStorage,\n FinishActionRunInput,\n ListActionRunsInput,\n ListActionRunsResult,\n LockActionMaterializationRunInput,\n QueueActionRunInput,\n RecordActionEffectsInput,\n RecordActionWritebackInput,\n StartActionRunInput,\n} from \"@sixb/core/storage\"\nimport {\n ActionRunError,\n actionRunPhaseRecordsEqual,\n canRequeueActionRunAfterEnqueueFailure,\n finishActionRunPhase,\n isTerminalActionRun,\n} from \"@sixb/core/storage\"\nimport type { SQLClient, SqlParameter } from \"./pg-client\"\nimport { isUniqueViolation } from \"./storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport class PgActionRunStorage implements ActionRunStorage {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly executions: ExecutionStorage\n ) {}\n\n async lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord> {\n const [row] = await this.sql<DatabaseRow[]>`\n SELECT *\n FROM action_runs\n WHERE project_id = ${input.projectId} AND id = ${input.runId}\n FOR UPDATE\n `\n if (!row) {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n if (row.action_id !== input.actionId) {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.runId}' does not belong to action '${input.actionId}'.`\n )\n }\n if (row.status !== \"running\") {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.runId}' cannot materialize from status '${row.status}'.`\n )\n }\n return rowToActionRunRecord(row)\n }\n\n async queue(input: QueueActionRunInput): Promise<ActionRunRecord> {\n await assertActionRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n actionId: input.actionId,\n })\n\n try {\n const [row] = await this.sql<DatabaseRow[]>`\n INSERT INTO action_runs (\n project_id,\n id,\n execution_id,\n action_id,\n subject_kind,\n object_type_id,\n primary_id,\n status,\n phase,\n queued_at,\n started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n effects_status,\n effects_completed_at,\n effects_error,\n error\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.executionId},\n ${input.actionId},\n ${input.subject.kind},\n ${input.subject.kind === \"object\" ? input.subject.objectTypeId : null},\n ${input.subject.kind === \"object\" ? input.subject.primaryId : null},\n ${\"queued\"},\n ${\"request\"},\n ${input.queuedAt ?? new Date()},\n ${null},\n ${null},\n ${JSON.stringify(input.params)}::text::jsonb,\n ${input.idempotencyKey},\n ${null},\n ${null},\n ${null},\n ${null},\n ${null},\n ${null},\n ${null},\n ${null}\n )\n RETURNING *\n `\n\n return rowToActionRunRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n return this.requeueAfterEnqueueFailure(input)\n }\n\n throw error\n }\n }\n\n private async requeueAfterEnqueueFailure(input: QueueActionRunInput): Promise<ActionRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<DatabaseRow[]>`\n SELECT * FROM action_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (\n !existing ||\n !canRequeueActionRunAfterEnqueueFailure(rowToActionRunRecord(existing), input)\n ) {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET\n status = ${\"queued\"},\n phase = ${\"request\"},\n queued_at = ${input.queuedAt ?? new Date()},\n started_at = ${null},\n finished_at = ${null},\n writeback_status = ${null},\n writeback_completed_at = ${null},\n writeback_result = ${null},\n writeback_error = ${null},\n effects_status = ${null},\n effects_completed_at = ${null},\n effects_error = ${null},\n error = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToActionRunRecord(updated)\n })\n }\n\n async start(input: StartActionRunInput): Promise<ActionRunRecord> {\n const [updated] = await this.sql<DatabaseRow[]>`\n UPDATE action_runs\n SET\n status = ${\"running\"},\n phase = ${input.phase ?? \"validation\"},\n started_at = ${input.startedAt ?? new Date()},\n error = ${null}\n WHERE project_id = ${input.projectId}\n AND id = ${input.id}\n AND status = ${\"queued\"}\n RETURNING *\n `\n\n if (updated) {\n return rowToActionRunRecord(updated)\n }\n\n const existing = await this.getById({ projectId: input.projectId, id: input.id })\n if (!existing) {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n async enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await this.requireRunningRun(tx, input.projectId, input.id, \"transition phase\")\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET phase = ${input.phase}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToActionRunRecord(updated)\n })\n }\n\n async recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const existing = await this.requireRunningRun(\n tx,\n input.projectId,\n input.id,\n \"record writeback\"\n )\n const nextWriteback = toWritebackRecord(input, new Date(input.completedAt ?? new Date()))\n const currentWriteback = toActionRunWritebackRecord(existing)\n\n if (currentWriteback) {\n if (actionRunPhaseRecordsEqual(currentWriteback, nextWriteback)) {\n return rowToActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' already has a different writeback record.`\n )\n }\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET\n phase = ${\"writeback\"},\n writeback_status = ${input.status},\n writeback_completed_at = ${nextWriteback.completedAt},\n writeback_result = ${input.status === \"succeeded\" ? JSON.stringify(input.result) : null}::text::jsonb,\n writeback_error = ${input.status === \"failed\" ? serializeActionRunFailure(input.error, \"writeback\") : null}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToActionRunRecord(updated)\n })\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const existing = await this.requireRunningRun(tx, input.projectId, input.id, \"record effects\")\n const nextEffects = toEffectsRecord(input, new Date(input.completedAt ?? new Date()))\n const currentEffects = toActionRunEffectsRecord(existing)\n\n if (currentEffects) {\n if (actionRunPhaseRecordsEqual(currentEffects, nextEffects)) {\n return rowToActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' already has a different effects record.`\n )\n }\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET\n phase = ${\"effects\"},\n effects_status = ${input.status},\n effects_completed_at = ${nextEffects.completedAt},\n effects_error = ${input.status === \"failed\" ? serializeActionRunFailure(input.error, \"effects\") : null}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToActionRunRecord(updated)\n })\n }\n\n async finish(input: FinishActionRunInput): Promise<ActionRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<DatabaseRow[]>`\n SELECT * FROM action_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (isTerminalActionRun({ status: existing.status })) {\n throw new ActionRunError(\n `[SixbPg] Action run '${input.id}' cannot finish from terminal status '${existing.status}'.`\n )\n }\n\n const phase = finishActionRunPhase(input, existing.phase)\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET\n status = ${input.status},\n phase = ${phase},\n finished_at = ${input.finishedAt ?? new Date()},\n error = ${input.status === \"succeeded\" ? null : serializeActionRunFailure(input.error)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToActionRunRecord(updated)\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n const [row] = await this.sql<DatabaseRow[]>`\n SELECT * FROM action_runs\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToActionRunRecord(row) : null\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.actionIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n\n if (input.actionId) {\n whereClauses.push(`action_id = $${index++}`)\n params.push(input.actionId)\n }\n\n if (input.actionIds) {\n const placeholders = input.actionIds.map(() => `$${index++}`)\n whereClauses.push(`action_id IN (${placeholders.join(\", \")})`)\n params.push(...input.actionIds)\n }\n\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n whereClauses.push(`subject_kind <> $${index++}`)\n params.push(\"object\")\n } else {\n const subjectKindIndex = index++\n const placeholders = input.objectTypeIds.map(() => `$${index++}`)\n whereClauses.push(\n `(subject_kind <> $${subjectKindIndex} OR object_type_id IN (${placeholders.join(\", \")}))`\n )\n params.push(\"object\", ...input.objectTypeIds)\n }\n }\n\n if (input.objectTypeId) {\n whereClauses.push(`subject_kind = $${index++}`)\n params.push(\"object\")\n whereClauses.push(`object_type_id = $${index++}`)\n params.push(input.objectTypeId)\n }\n\n if (input.primaryId) {\n whereClauses.push(`subject_kind = $${index++}`)\n params.push(\"object\")\n whereClauses.push(`primary_id = $${index++}`)\n params.push(input.primaryId)\n }\n\n if (input.subject) {\n whereClauses.push(`subject_kind = $${index++}`)\n params.push(input.subject.kind)\n if (input.subject.kind === \"object\") {\n whereClauses.push(`object_type_id = $${index++}`)\n params.push(input.subject.objectTypeId)\n whereClauses.push(`primary_id = $${index++}`)\n params.push(input.subject.primaryId)\n }\n }\n\n if (input.statuses) {\n const placeholders = input.statuses.map(() => `$${index++}`)\n whereClauses.push(`status IN (${placeholders.join(\", \")})`)\n params.push(...input.statuses)\n }\n\n if (input.startedAfter) {\n whereClauses.push(`COALESCE(started_at, queued_at) >= $${index++}`)\n params.push(input.startedAfter)\n }\n\n if (input.startedBefore) {\n whereClauses.push(`COALESCE(started_at, queued_at) <= $${index++}`)\n params.push(input.startedBefore)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n\n const [totalRow] = await this.sql.unsafe<{ count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM action_runs ${where}`,\n params\n )\n\n const queryParams = [...params]\n let query = `\n SELECT * FROM action_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n\n if (input.limit !== undefined) {\n query += ` LIMIT $${index++} OFFSET $${index++}`\n queryParams.push(input.limit, offset)\n } else if (offset > 0) {\n query += ` OFFSET $${index++}`\n queryParams.push(offset)\n }\n\n const rows = await this.sql.unsafe<DatabaseRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n const runs = rows.map((row) => rowToActionRunRecord(row))\n\n return {\n runs,\n hasMore: offset + runs.length < total,\n total,\n }\n }\n\n private async requireRunningRun(\n runner: SQLClient,\n projectId: string,\n id: string,\n operation: string\n ): Promise<DatabaseRow> {\n const [existing] = await runner<DatabaseRow[]>`\n SELECT * FROM action_runs\n WHERE project_id = ${projectId} AND id = ${id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new ActionRunError(`[SixbPg] Action run '${id}' not found for project '${projectId}'.`)\n }\n\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[SixbPg] Action run '${id}' cannot ${operation} from status '${existing.status}'.`\n )\n }\n\n return existing\n }\n}\n\nfunction toActionRunFailure(row: DatabaseRow): ActionRunFailure | undefined {\n return row.error === null ? undefined : parseActionRunFailure(row.error)\n}\n\nfunction parsePhaseFailure<TPhase extends Extract<ActionRunPhase, \"writeback\" | \"effects\">>(\n value: unknown,\n expectedPhase: TPhase\n): ActionRunFailure<TPhase> {\n return parseActionRunFailure(value, expectedPhase)\n}\n\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = row.writeback_completed_at\n ? new Date(row.writeback_completed_at)\n : new Date(row.queued_at)\n\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: (row.writeback_result ?? null) as JsonValue,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parsePhaseFailure(row.writeback_error, \"writeback\"),\n }\n}\n\nfunction toActionRunEffectsRecord(row: DatabaseRow): ActionRunEffectsRecord | undefined {\n if (!row.effects_status) {\n return undefined\n }\n\n const completedAt = row.effects_completed_at\n ? new Date(row.effects_completed_at)\n : new Date(row.queued_at)\n\n if (row.effects_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parsePhaseFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction toWritebackRecord(\n input: RecordActionWritebackInput,\n completedAt: Date\n): ActionRunWritebackRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: input.result,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: input.error,\n }\n}\n\nfunction toEffectsRecord(\n input: RecordActionEffectsInput,\n completedAt: Date\n): ActionRunEffectsRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: input.error,\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n status: row.status,\n phase: row.phase ?? undefined,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n params: row.params,\n idempotencyKey: row.idempotency_key,\n writeback: toActionRunWritebackRecord(row),\n effects: toActionRunEffectsRecord(row),\n error: toActionRunFailure(row),\n }\n}\n\nfunction rowToActionSubject(row: DatabaseRow): ActionSubject {\n if (row.subject_kind === \"none\") {\n return { kind: \"none\" }\n }\n\n if (!row.object_type_id || !row.primary_id) {\n throw new ActionRunError(`[SixbPg] Action run '${row.id}' has an invalid object subject.`)\n }\n\n return {\n kind: \"object\",\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n }\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n action_id: string\n subject_kind: ActionSubject[\"kind\"]\n object_type_id: string | null\n primary_id: string | null\n status: ActionRunRecord[\"status\"]\n phase: ActionRunPhase | null\n queued_at: Date | string\n started_at: Date | string | null\n finished_at: Date | string | null\n params: ActionRunParams\n idempotency_key: string\n writeback_status: ActionRunWritebackRecord[\"status\"] | null\n writeback_completed_at: Date | string | null\n writeback_result: JsonValue | null\n writeback_error: unknown | null\n effects_status: ActionRunEffectsRecord[\"status\"] | null\n effects_completed_at: Date | string | null\n effects_error: unknown | null\n error: unknown | null\n}\n",
|
|
40
|
+
"import {\n type AiAccountingAggregateFragment,\n type AiAccountingRecordSetItem,\n aiModelCallCostDetails,\n aiModelCallCostMatchesUsage,\n buildAiAccountingOverviewFromFragments,\n normalizeAiAccountingQuery,\n normalizeAiModelCallAccountingQuery,\n normalizeAiModelCallCostRecord,\n parseAiModelCallCostDetails,\n toAccountingItem,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiAccountingOverview,\n type AiCostStorage,\n AiCostStorageError,\n type AiCostSummary,\n type AiModelCallCostRecord,\n type AiModelCallUsageRecord,\n type ListAiModelCallAccountingInput,\n type ListAiModelCallAccountingResult,\n type QueryAiAccountingOverviewInput,\n type SummarizeAiCostExecutionsInput,\n} from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"./transactions\"\nimport { runPgTransaction } from \"./transactions\"\n\n/** PostgreSQL-backed immutable valuations stored in one append-only table. */\nexport class PgAiCostStorage implements AiCostStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async recordModelCallCost(input: AiModelCallCostRecord): Promise<void> {\n const record = normalizeAiModelCallCostRecord(input)\n await runPgTransaction(this.sql, async (tx) => {\n const usage = await findUsage(tx, record.projectId, record.usageRecordId)\n if (!usage) throw missingUsage(record)\n assertCostMatchesUsage(record, usage)\n if (await findCost(tx, record.projectId, record.usageRecordId)) return\n const rated = record.status === \"rated\" ? record : undefined\n const inserted = await tx<{ usage_record_id: string }[]>`\n INSERT INTO ai_model_call_valuations (\n project_id, usage_record_id, status, provider_id, model_id,\n currency, amount_nanos, reason, details, rated_at\n ) VALUES (\n ${record.projectId}, ${record.usageRecordId}, ${record.status},\n ${record.billingIdentity?.providerId ?? null},\n ${record.billingIdentity?.modelId ?? null}, ${rated?.money.currency ?? null},\n ${rated?.money.amountNanos ?? null},\n ${record.status === \"unpriceable\" ? record.reason : null},\n ${JSON.stringify(aiModelCallCostDetails(record))}::text::jsonb, ${record.ratedAt}\n )\n ON CONFLICT DO NOTHING\n RETURNING usage_record_id\n `\n if (inserted.length === 0 && !(await findCost(tx, record.projectId, record.usageRecordId))) {\n throw new Error(\"[SixbPg] AI valuation insert conflicted without a visible row.\")\n }\n })\n }\n\n async summarizeExecutions(\n input: SummarizeAiCostExecutionsInput\n ): Promise<readonly AiCostSummary[]> {\n assertNonBlank(input.projectId, \"cost summary projectId\")\n for (const id of input.executionIds) assertNonBlank(id, \"cost summary executionId\")\n if (input.executionIds.length === 0) return []\n const ids = [...new Set(input.executionIds)]\n const rows = await this.sql<SummaryRow[]>`\n WITH requested(execution_id) AS (\n SELECT DISTINCT * FROM unnest(${this.sql.array(ids)}::text[])\n )\n SELECT usage.execution_id,\n cost.status,\n cost.currency,\n cost.amount_nanos\n FROM requested\n JOIN ai_model_call_usage AS usage\n ON usage.project_id = ${input.projectId} AND usage.execution_id = requested.execution_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n `\n return aggregateSummaryRows(input.executionIds, rows)\n }\n\n async queryProjectOverview(input: QueryAiAccountingOverviewInput): Promise<AiAccountingOverview> {\n const query = normalizeAiAccountingQuery(input)\n const providerId = query.providerId ?? null\n const modelId = query.modelId ?? null\n const rows = await this.sql<AggregateRow[]>`\n WITH filtered AS (\n SELECT usage.provider_id,\n usage.requested_model_id,\n usage.occurred_at,\n usage.input_tokens,\n usage.output_tokens,\n usage.uncached_input_tokens,\n usage.cache_read_input_tokens,\n usage.cache_write_input_tokens,\n usage.text_output_tokens,\n usage.reasoning_output_tokens,\n usage.reporting_status,\n COALESCE(direct_agent.agent_id, workflow_agent.agent_id) AS attribution_agent_id,\n workflow_node.workflow_id AS attribution_workflow_id,\n cost.status AS cost_status,\n cost.currency AS cost_currency,\n cost.amount_nanos AS cost_amount_nanos\n FROM ai_model_call_usage AS usage\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id\n AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id\n AND workflow_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_node_runs AS workflow_node\n ON workflow_node.project_id = workflow_agent.project_id\n AND workflow_node.id = workflow_agent.node_run_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE usage.project_id = ${query.projectId}\n AND usage.occurred_at >= ${query.from} AND usage.occurred_at < ${query.to}\n AND (${providerId}::text IS NULL OR usage.provider_id = ${providerId})\n AND (${modelId}::text IS NULL OR usage.requested_model_id = ${modelId})\n ), classified AS (\n SELECT filtered.*,\n CASE\n WHEN cost_status = 'rated' THEN 'rated'\n WHEN cost_status = 'unpriceable' THEN 'unpriceable'\n ELSE 'unvalued'\n END AS valuation_status,\n CASE WHEN cost_status = 'rated' THEN cost_currency ELSE NULL END AS amount_currency,\n CASE WHEN cost_status = 'rated' THEN cost_amount_nanos ELSE NULL END AS amount_nanos\n FROM filtered\n ), expanded AS (\n SELECT 'totals'::text AS dimension,\n NULL::text AS key_1,\n NULL::text AS key_2,\n NULL::timestamptz AS bucket_start,\n classified.*\n FROM classified\n UNION ALL\n SELECT 'series', NULL, NULL,\n CASE ${input.bucket}::text\n WHEN 'hour' THEN\n date_trunc('hour', occurred_at AT TIME ZONE 'UTC') AT TIME ZONE 'UTC'\n WHEN 'day' THEN\n date_trunc('day', occurred_at AT TIME ZONE 'UTC') AT TIME ZONE 'UTC'\n ELSE date_trunc('week', occurred_at AT TIME ZONE 'UTC') AT TIME ZONE 'UTC'\n END,\n classified.*\n FROM classified\n UNION ALL\n SELECT 'model', provider_id, requested_model_id, NULL, classified.* FROM classified\n UNION ALL\n SELECT 'agent', attribution_agent_id, NULL, NULL, classified.*\n FROM classified WHERE attribution_agent_id IS NOT NULL\n UNION ALL\n SELECT 'workflow', attribution_workflow_id, NULL, NULL, classified.*\n FROM classified WHERE attribution_workflow_id IS NOT NULL\n )\n SELECT dimension,\n key_1,\n key_2,\n bucket_start,\n amount_currency,\n COUNT(*)::text AS model_call_count,\n COUNT(*) FILTER (WHERE reporting_status <> 'unavailable')::text\n AS reported_usage_call_count,\n COUNT(input_tokens)::text AS input_tokens_count,\n SUM(input_tokens)::text AS input_tokens_sum,\n COUNT(output_tokens)::text AS output_tokens_count,\n SUM(output_tokens)::text AS output_tokens_sum,\n COUNT(uncached_input_tokens)::text AS uncached_input_tokens_count,\n SUM(uncached_input_tokens)::text AS uncached_input_tokens_sum,\n COUNT(cache_read_input_tokens)::text AS cache_read_input_tokens_count,\n SUM(cache_read_input_tokens)::text AS cache_read_input_tokens_sum,\n COUNT(cache_write_input_tokens)::text AS cache_write_input_tokens_count,\n SUM(cache_write_input_tokens)::text AS cache_write_input_tokens_sum,\n COUNT(text_output_tokens)::text AS text_output_tokens_count,\n SUM(text_output_tokens)::text AS text_output_tokens_sum,\n COUNT(reasoning_output_tokens)::text AS reasoning_output_tokens_count,\n SUM(reasoning_output_tokens)::text AS reasoning_output_tokens_sum,\n COUNT(*) FILTER (WHERE valuation_status = 'rated')::text AS rated_call_count,\n COUNT(*) FILTER (WHERE valuation_status = 'unpriceable')::text\n AS unpriceable_call_count,\n COUNT(*) FILTER (WHERE valuation_status = 'unvalued')::text\n AS unvalued_call_count,\n SUM(amount_nanos)::text AS amount_nanos\n FROM expanded\n GROUP BY dimension, key_1, key_2, bucket_start, amount_currency\n `\n return buildAiAccountingOverviewFromFragments(input, rows.map(aggregateFragmentFromRow))\n }\n\n async listModelCalls(\n input: ListAiModelCallAccountingInput\n ): Promise<ListAiModelCallAccountingResult> {\n const query = normalizeAiModelCallAccountingQuery(input)\n const providerId = query.providerId ?? null\n const modelId = query.modelId ?? null\n const executionId = query.executionId ?? null\n const valuationStatus = query.valuationStatus ?? null\n const [count] = await this.sql<CountRow[]>`\n SELECT COUNT(*)::text AS total\n FROM ai_model_call_usage AS usage\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE usage.project_id = ${query.projectId}\n AND usage.occurred_at >= ${query.from} AND usage.occurred_at < ${query.to}\n AND (${providerId}::text IS NULL OR usage.provider_id = ${providerId})\n AND (${modelId}::text IS NULL OR usage.requested_model_id = ${modelId})\n AND (${executionId}::text IS NULL OR usage.execution_id = ${executionId})\n AND (\n ${valuationStatus}::text IS NULL OR ${valuationStatus} = CASE\n WHEN cost.status = 'rated' THEN 'rated'\n WHEN cost.status = 'unpriceable' THEN 'unpriceable'\n ELSE 'unvalued'\n END\n )\n `\n const rows = await this.sql<JoinedRow[]>`\n SELECT usage.*,\n CASE\n WHEN direct_agent.id IS NOT NULL THEN 'agent'\n WHEN workflow_agent.node_run_id IS NOT NULL THEN 'workflowAgent'\n ELSE NULL\n END AS attribution_kind,\n COALESCE(direct_agent.agent_id, workflow_agent.agent_id) AS attribution_agent_id,\n direct_agent.id AS attribution_agent_run_id,\n direct_agent.thread_id AS attribution_thread_id,\n workflow_agent.node_run_id AS attribution_node_run_id,\n workflow_node.workflow_id AS attribution_workflow_id,\n workflow_node.workflow_run_id AS attribution_workflow_run_id,\n COALESCE((\n SELECT jsonb_agg(groups.group_id ORDER BY groups.group_id)\n FROM ai_model_call_usage_groups AS groups\n WHERE groups.project_id = usage.project_id AND groups.usage_record_id = usage.id\n ), '[]'::jsonb) AS requester_group_ids,\n cost.status AS cost_status,\n cost.provider_id AS cost_provider_id,\n cost.model_id AS cost_model_id,\n cost.currency AS cost_currency,\n cost.amount_nanos AS cost_amount_nanos,\n cost.reason AS cost_reason,\n cost.details AS cost_details,\n cost.rated_at AS cost_rated_at\n FROM ai_model_call_usage AS usage\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id\n AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id\n AND workflow_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_node_runs AS workflow_node\n ON workflow_node.project_id = workflow_agent.project_id\n AND workflow_node.id = workflow_agent.node_run_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE usage.project_id = ${query.projectId}\n AND usage.occurred_at >= ${query.from} AND usage.occurred_at < ${query.to}\n AND (${providerId}::text IS NULL OR usage.provider_id = ${providerId})\n AND (${modelId}::text IS NULL OR usage.requested_model_id = ${modelId})\n AND (${executionId}::text IS NULL OR usage.execution_id = ${executionId})\n AND (\n ${valuationStatus}::text IS NULL OR ${valuationStatus} = CASE\n WHEN cost.status = 'rated' THEN 'rated'\n WHEN cost.status = 'unpriceable' THEN 'unpriceable'\n ELSE 'unvalued'\n END\n )\n ORDER BY usage.occurred_at DESC, usage.id ASC\n LIMIT ${query.limit} OFFSET ${query.offset}\n `\n const items = rows.map((row) => toAccountingItem(accountingItemFromRow(row)))\n if (!count) throw new Error(\"[SixbPg] AI accounting count query returned no row.\")\n const total = safeSqlCount(count.total, \"model-call list total\")\n return structuredClone({\n items,\n total,\n hasMore: query.offset + items.length < total,\n })\n }\n}\n\ninterface ValuationRow {\n readonly project_id: string\n readonly usage_record_id: string\n readonly status: \"rated\" | \"unpriceable\"\n readonly provider_id: string | null\n readonly model_id: string | null\n readonly currency: string | null\n readonly amount_nanos: string | null\n readonly reason: string | null\n readonly details: unknown\n readonly rated_at: Date | string\n}\n\ninterface UsageRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly attempt: number | string\n readonly call_id: string\n readonly provider_id: string\n readonly requested_model_id: string\n readonly response_model_id: string | null\n readonly response_id: string\n readonly input_tokens: number | string | null\n readonly output_tokens: number | string | null\n readonly total_tokens: number | string | null\n readonly uncached_input_tokens: number | string | null\n readonly cache_read_input_tokens: number | string | null\n readonly cache_write_input_tokens: number | string | null\n readonly text_output_tokens: number | string | null\n readonly reasoning_output_tokens: number | string | null\n readonly reporting_status: AiModelCallUsageRecord[\"usage\"][\"reportingStatus\"]\n readonly raw_usage: ReadonlyJsonObject | string | null\n readonly occurred_at: Date | string\n readonly recorded_at: Date | string\n}\n\ninterface JoinedRow extends UsageRow {\n readonly attribution_kind: \"agent\" | \"workflowAgent\" | null\n readonly attribution_agent_id: string | null\n readonly attribution_agent_run_id: string | null\n readonly attribution_thread_id: string | null\n readonly attribution_node_run_id: string | null\n readonly attribution_workflow_id: string | null\n readonly attribution_workflow_run_id: string | null\n readonly requester_group_ids: unknown\n readonly cost_status: ValuationRow[\"status\"] | null\n readonly cost_provider_id: string | null\n readonly cost_model_id: string | null\n readonly cost_currency: string | null\n readonly cost_amount_nanos: string | null\n readonly cost_reason: string | null\n readonly cost_details: unknown\n readonly cost_rated_at: Date | string | null\n}\n\ninterface AggregateRow {\n readonly dimension: AiAccountingAggregateFragment[\"dimension\"]\n readonly key_1: string | null\n readonly key_2: string | null\n readonly bucket_start: Date | string | null\n readonly amount_currency: string | null\n readonly model_call_count: string\n readonly reported_usage_call_count: string\n readonly input_tokens_count: string\n readonly input_tokens_sum: string | null\n readonly output_tokens_count: string\n readonly output_tokens_sum: string | null\n readonly uncached_input_tokens_count: string\n readonly uncached_input_tokens_sum: string | null\n readonly cache_read_input_tokens_count: string\n readonly cache_read_input_tokens_sum: string | null\n readonly cache_write_input_tokens_count: string\n readonly cache_write_input_tokens_sum: string | null\n readonly text_output_tokens_count: string\n readonly text_output_tokens_sum: string | null\n readonly reasoning_output_tokens_count: string\n readonly reasoning_output_tokens_sum: string | null\n readonly rated_call_count: string\n readonly unpriceable_call_count: string\n readonly unvalued_call_count: string\n readonly amount_nanos: string | null\n}\n\ninterface CountRow {\n readonly total: string\n}\n\ninterface SummaryRow {\n readonly execution_id: string\n readonly status: ValuationRow[\"status\"] | null\n readonly currency: string | null\n readonly amount_nanos: string | null\n}\n\nasync function findCost(\n sql: PgStoreClient,\n projectId: string,\n usageId: string\n): Promise<AiModelCallCostRecord | null> {\n const [row] = await sql<ValuationRow[]>`\n SELECT * FROM ai_model_call_valuations\n WHERE project_id = ${projectId} AND usage_record_id = ${usageId}\n `\n return row ? rowToCost(row) : null\n}\n\nasync function findUsage(\n sql: PgStoreClient,\n projectId: string,\n id: string\n): Promise<AiModelCallUsageRecord | null> {\n const [row] = await sql<UsageRow[]>`\n SELECT * FROM ai_model_call_usage WHERE project_id = ${projectId} AND id = ${id}\n `\n return row ? usageFromRow(row, []) : null\n}\n\nfunction aggregateFragmentFromRow(row: AggregateRow): AiAccountingAggregateFragment {\n const dimensionKeys =\n row.dimension === \"model\"\n ? { providerId: required(row.key_1), modelId: required(row.key_2) }\n : row.dimension === \"agent\"\n ? { agentId: required(row.key_1) }\n : row.dimension === \"workflow\"\n ? { workflowId: required(row.key_1) }\n : row.dimension === \"series\"\n ? { start: new Date(required(row.bucket_start)) }\n : {}\n return {\n dimension: row.dimension,\n ...dimensionKeys,\n modelCallCount: row.model_call_count,\n usage: {\n reportedCallCount: row.reported_usage_call_count,\n inputTokens: meterFragment(row.input_tokens_count, row.input_tokens_sum),\n outputTokens: meterFragment(row.output_tokens_count, row.output_tokens_sum),\n uncachedInputTokens: meterFragment(\n row.uncached_input_tokens_count,\n row.uncached_input_tokens_sum\n ),\n cacheReadInputTokens: meterFragment(\n row.cache_read_input_tokens_count,\n row.cache_read_input_tokens_sum\n ),\n cacheWriteInputTokens: meterFragment(\n row.cache_write_input_tokens_count,\n row.cache_write_input_tokens_sum\n ),\n textOutputTokens: meterFragment(row.text_output_tokens_count, row.text_output_tokens_sum),\n reasoningOutputTokens: meterFragment(\n row.reasoning_output_tokens_count,\n row.reasoning_output_tokens_sum\n ),\n },\n costs: {\n ...(row.amount_currency === null || row.amount_nanos === null\n ? {}\n : {\n amount: {\n currency: row.amount_currency,\n amountNanos: row.amount_nanos,\n },\n }),\n ratedCallCount: row.rated_call_count,\n unpriceableCallCount: row.unpriceable_call_count,\n unvaluedCallCount: row.unvalued_call_count,\n },\n }\n}\n\nfunction meterFragment(presentCallCount: string, total: string | null) {\n return { presentCallCount, total }\n}\n\nfunction accountingItemFromRow(row: JoinedRow): AiAccountingRecordSetItem {\n const usage = usageFromRow(row, parseStringArray(row.requester_group_ids))\n const cost = row.cost_status === null ? undefined : costFromJoinedRow(row)\n const attribution =\n row.attribution_kind === null\n ? undefined\n : row.attribution_kind === \"agent\"\n ? {\n kind: \"agent\" as const,\n agentId: required(row.attribution_agent_id),\n agentRunId: required(row.attribution_agent_run_id),\n threadId: required(row.attribution_thread_id),\n }\n : {\n kind: \"workflowAgent\" as const,\n agentId: required(row.attribution_agent_id),\n nodeRunId: required(row.attribution_node_run_id),\n workflowId: required(row.attribution_workflow_id),\n workflowRunId: required(row.attribution_workflow_run_id),\n }\n return {\n usage,\n ...(attribution ? { attribution } : {}),\n ...(cost ? { cost } : {}),\n }\n}\n\nfunction usageFromRow(row: UsageRow, requesterGroupIds: readonly string[]): AiModelCallUsageRecord {\n const number = (value: number | string | null) => (value === null ? undefined : Number(value))\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: Number(row.attempt),\n callId: row.call_id,\n requesterGroupIds,\n providerId: row.provider_id,\n requestedModelId: row.requested_model_id,\n ...(row.response_model_id === null ? {} : { responseModelId: row.response_model_id }),\n responseId: row.response_id,\n usage: {\n ...(number(row.input_tokens) === undefined ? {} : { inputTokens: number(row.input_tokens) }),\n ...(number(row.output_tokens) === undefined\n ? {}\n : { outputTokens: number(row.output_tokens) }),\n ...(number(row.total_tokens) === undefined ? {} : { totalTokens: number(row.total_tokens) }),\n ...(number(row.uncached_input_tokens) === undefined\n ? {}\n : { uncachedInputTokens: number(row.uncached_input_tokens) }),\n ...(number(row.cache_read_input_tokens) === undefined\n ? {}\n : { cacheReadInputTokens: number(row.cache_read_input_tokens) }),\n ...(number(row.cache_write_input_tokens) === undefined\n ? {}\n : { cacheWriteInputTokens: number(row.cache_write_input_tokens) }),\n ...(number(row.text_output_tokens) === undefined\n ? {}\n : { textOutputTokens: number(row.text_output_tokens) }),\n ...(number(row.reasoning_output_tokens) === undefined\n ? {}\n : { reasoningOutputTokens: number(row.reasoning_output_tokens) }),\n reportingStatus: row.reporting_status,\n },\n ...(row.raw_usage === null ? {} : { rawUsage: parseJsonObject(row.raw_usage) }),\n occurredAt: new Date(row.occurred_at),\n recordedAt: new Date(row.recorded_at),\n }\n}\n\nfunction rowToCost(row: ValuationRow): AiModelCallCostRecord {\n return costRecord({\n projectId: row.project_id,\n usageId: row.usage_record_id,\n status: row.status,\n providerId: row.provider_id,\n modelId: row.model_id,\n currency: row.currency,\n amountNanos: row.amount_nanos,\n reason: row.reason,\n details: row.details,\n ratedAt: row.rated_at,\n })\n}\n\nfunction costFromJoinedRow(row: JoinedRow): AiModelCallCostRecord {\n return costRecord({\n projectId: row.project_id,\n usageId: row.id,\n status: required(row.cost_status),\n providerId: row.cost_provider_id,\n modelId: row.cost_model_id,\n currency: row.cost_currency,\n amountNanos: row.cost_amount_nanos,\n reason: row.cost_reason,\n details: row.cost_details,\n ratedAt: required(row.cost_rated_at),\n })\n}\n\nfunction costRecord(input: {\n projectId: string\n usageId: string\n status: ValuationRow[\"status\"]\n providerId: string | null\n modelId: string | null\n currency: string | null\n amountNanos: string | null\n reason: string | null\n details: unknown\n ratedAt: Date | string\n}): AiModelCallCostRecord {\n const details = parseAiModelCallCostDetails(input.details)\n const base = {\n projectId: input.projectId,\n usageRecordId: input.usageId,\n pricingContext: details.pricingContext,\n priceSource: {\n ...details.priceSource,\n observedAt: new Date(details.priceSource.observedAt),\n },\n ratedAt: new Date(input.ratedAt),\n }\n if (input.status === \"rated\") {\n return normalizeAiModelCallCostRecord({\n ...base,\n status: \"rated\",\n billingIdentity: { providerId: required(input.providerId), modelId: required(input.modelId) },\n money: { currency: required(input.currency), amountNanos: required(input.amountNanos) },\n components: required(details.components),\n })\n }\n return normalizeAiModelCallCostRecord({\n ...base,\n status: \"unpriceable\",\n ...(input.providerId && input.modelId\n ? { billingIdentity: { providerId: input.providerId, modelId: input.modelId } }\n : {}),\n reason: required(input.reason) as Extract<\n AiModelCallCostRecord,\n { status: \"unpriceable\" }\n >[\"reason\"],\n ...(details.missingMeters ? { missingMeters: details.missingMeters } : {}),\n })\n}\n\nfunction aggregateSummaryRows(\n ids: readonly string[],\n rows: readonly SummaryRow[]\n): AiCostSummary[] {\n const map = new Map(ids.map((id) => [id, accumulator()]))\n for (const row of rows) {\n const value = map.get(row.execution_id)\n if (!value) continue\n if (row.status === null) value.unvaluedCallCount += 1\n else if (row.status === \"unpriceable\") value.unpriceableCallCount += 1\n else {\n value.ratedCallCount += 1\n add(value.amounts, required(row.currency), required(row.amount_nanos))\n }\n }\n return ids.map((id) => finish(map.get(id)!))\n}\n\ninterface Accumulator {\n amounts: Map<string, bigint>\n ratedCallCount: number\n unpriceableCallCount: number\n unvaluedCallCount: number\n}\n\nfunction accumulator(): Accumulator {\n return {\n amounts: new Map(),\n ratedCallCount: 0,\n unpriceableCallCount: 0,\n unvaluedCallCount: 0,\n }\n}\n\nfunction finish(value: Accumulator): AiCostSummary {\n return {\n amounts: [...value.amounts]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),\n ratedCallCount: value.ratedCallCount,\n unpriceableCallCount: value.unpriceableCallCount,\n unvaluedCallCount: value.unvaluedCallCount,\n }\n}\n\nfunction add(amounts: Map<string, bigint>, currency: string, amount: string): void {\n amounts.set(currency, (amounts.get(currency) ?? 0n) + BigInt(amount))\n}\n\nfunction parseStringArray(value: unknown): string[] {\n const parsed: unknown = typeof value === \"string\" ? JSON.parse(value) : value\n if (!Array.isArray(parsed) || parsed.some((item) => typeof item !== \"string\")) {\n throw new Error(\"[SixbPg] AI requester group ids are invalid.\")\n }\n return parsed\n}\n\nfunction parseJsonObject(value: unknown): ReadonlyJsonObject {\n return (typeof value === \"string\" ? JSON.parse(value) : value) as ReadonlyJsonObject\n}\n\nfunction assertCostMatchesUsage(\n record: AiModelCallCostRecord,\n usage: AiModelCallUsageRecord\n): void {\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new AiCostStorageError(\n \"cost_mismatch\",\n `[SixbPg] AI valuation for usage '${record.usageRecordId}' does not match its usage record.`\n )\n }\n}\n\nfunction missingUsage(record: { projectId: string; usageRecordId: string }) {\n return new AiCostStorageError(\n \"missing_usage\",\n `[SixbPg] AI usage '${record.usageRecordId}' does not exist.`\n )\n}\n\nfunction assertNonBlank(value: string, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI ${field} must be nonblank.`)\n }\n}\n\nfunction safeSqlCount(value: string, field: string): number {\n if (!/^(0|[1-9]\\d*)$/.test(value)) {\n throw new Error(`[SixbPg] AI accounting ${field} is invalid.`)\n }\n const count = Number(value)\n if (!Number.isSafeInteger(count)) {\n throw new TypeError(`[Sixb] AI accounting ${field} exceeds the safe integer range.`)\n }\n return count\n}\n\nfunction required<T>(value: T | null | undefined): T {\n if (value === null || value === undefined) {\n throw new Error(\"[SixbPg] AI valuation column is unexpectedly null.\")\n }\n return value\n}\n",
|
|
39
41
|
"import type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiModelCallUsageInput,\n type AiModelCallUsageRecord,\n type AiUsageExecutionSummary,\n type AiUsageStorage,\n AiUsageStorageError,\n aggregateAiModelCallUsage,\n assertAiUsageExecutionId,\n normalizeAiModelCallRecord,\n type RecordAiModelCallInput,\n type RecordAiModelCallResult,\n type SummarizeAiUsageExecutionInput,\n type SummarizeAiUsageExecutionsInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"./pg-client\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\n/** PostgreSQL-backed append-only model-call usage ledger. */\nexport class PgAiUsageStorage implements AiUsageStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async recordModelCall(input: RecordAiModelCallInput): Promise<RecordAiModelCallResult> {\n const record = normalizeAiModelCallRecord(input)\n return runPgTransaction(this.sql, async (tx) => {\n const existing = await this.findByIdempotencyKey(tx, record)\n if (existing) return { record: existing, created: false }\n await this.assertExecutionExists(tx, record.projectId, record.executionId)\n\n const inserted = await tx<{ id: string }[]>`\n INSERT INTO ai_model_call_usage (\n project_id,\n id,\n execution_id,\n attempt,\n call_id,\n provider_id,\n requested_model_id,\n response_model_id,\n response_id,\n input_tokens,\n output_tokens,\n total_tokens,\n uncached_input_tokens,\n cache_read_input_tokens,\n cache_write_input_tokens,\n text_output_tokens,\n reasoning_output_tokens,\n reporting_status,\n raw_usage,\n occurred_at,\n recorded_at\n ) VALUES (\n ${record.projectId},\n ${record.id},\n ${record.executionId},\n ${record.attempt},\n ${record.callId},\n ${record.providerId},\n ${record.requestedModelId},\n ${record.responseModelId ?? null},\n ${record.responseId},\n ${record.usage.inputTokens ?? null},\n ${record.usage.outputTokens ?? null},\n ${record.usage.totalTokens ?? null},\n ${record.usage.uncachedInputTokens ?? null},\n ${record.usage.cacheReadInputTokens ?? null},\n ${record.usage.cacheWriteInputTokens ?? null},\n ${record.usage.textOutputTokens ?? null},\n ${record.usage.reasoningOutputTokens ?? null},\n ${record.usage.reportingStatus},\n ${record.rawUsage === undefined ? null : JSON.stringify(record.rawUsage)}::text::jsonb,\n ${record.occurredAt},\n ${record.recordedAt}\n )\n ON CONFLICT DO NOTHING\n RETURNING id\n `\n\n if (inserted.length === 0) {\n const concurrent = await this.findByIdempotencyKey(tx, record)\n if (concurrent) return { record: concurrent, created: false }\n throw new AiUsageStorageError(\n \"duplicate_id\",\n `[SixbPg] AI usage record '${record.id}' already exists for project '${record.projectId}'.`\n )\n }\n\n for (const groupId of record.requesterGroupIds) {\n await tx`\n INSERT INTO ai_model_call_usage_groups (\n project_id, usage_record_id, group_id, occurred_at\n ) VALUES (\n ${record.projectId}, ${record.id}, ${groupId}, ${record.occurredAt}\n )\n `\n }\n\n return { record: await this.requireById(tx, record.projectId, record.id), created: true }\n })\n }\n\n async summarizeExecution(\n input: SummarizeAiUsageExecutionInput\n ): Promise<AiUsageExecutionSummary> {\n const [summary] = await this.summarizeExecutions({\n projectId: input.projectId,\n executionIds: [input.executionId],\n })\n return summary!\n }\n\n async summarizeExecutions(\n input: SummarizeAiUsageExecutionsInput\n ): Promise<readonly AiUsageExecutionSummary[]> {\n assertNonBlankProjectId(input.projectId)\n for (const executionId of input.executionIds) assertAiUsageExecutionId(executionId)\n if (input.executionIds.length === 0) return []\n\n const rows = await this.executionRows(this.sql, input)\n return aggregateExecutionRows(input.executionIds, rows)\n }\n\n private async findByIdempotencyKey(\n sql: PgStoreClient,\n record: Pick<\n AiModelCallUsageRecord,\n \"projectId\" | \"executionId\" | \"attempt\" | \"callId\" | \"responseId\"\n >\n ): Promise<AiModelCallUsageRecord | null> {\n const rows = await sql<AiUsageRow[]>`\n SELECT * FROM ai_model_call_usage\n WHERE project_id = ${record.projectId}\n AND execution_id = ${record.executionId}\n AND attempt = ${record.attempt}\n AND call_id = ${record.callId}\n AND response_id = ${record.responseId}\n `\n return rows[0] ? this.rowToRecord(sql, rows[0]) : null\n }\n\n private async requireById(\n sql: SQLClient,\n projectId: string,\n id: string\n ): Promise<AiModelCallUsageRecord> {\n const [row] = await sql<AiUsageRow[]>`\n SELECT * FROM ai_model_call_usage WHERE project_id = ${projectId} AND id = ${id}\n `\n if (!row) throw new Error(`[SixbPg] AI usage record '${id}' disappeared after insert.`)\n return this.rowToRecord(sql, row)\n }\n\n private async rowToRecord(sql: PgStoreClient, row: AiUsageRow): Promise<AiModelCallUsageRecord> {\n const groupRows = await sql<Array<{ group_id: string }>>`\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = ${row.project_id} AND usage_record_id = ${row.id}\n ORDER BY group_id\n `\n\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: Number(row.attempt),\n callId: row.call_id,\n requesterGroupIds: groupRows.map((group) => group.group_id),\n providerId: row.provider_id,\n requestedModelId: row.requested_model_id,\n ...(row.response_model_id === null ? {} : { responseModelId: row.response_model_id }),\n responseId: row.response_id,\n usage: {\n ...usageFromRow(row),\n ...(row.total_tokens === null ? {} : { totalTokens: Number(row.total_tokens) }),\n reportingStatus: row.reporting_status,\n },\n ...(row.raw_usage === null ? {} : { rawUsage: rawUsageFromRow(row.raw_usage) }),\n occurredAt: new Date(row.occurred_at),\n recordedAt: new Date(row.recorded_at),\n }\n }\n\n private executionRows(\n sql: PgStoreClient,\n input: SummarizeAiUsageExecutionsInput\n ): Promise<AiUsageRow[]> {\n const executionIds = [...new Set(input.executionIds)]\n\n return sql<AiUsageRow[]>`\n WITH requested(execution_id) AS (\n SELECT * FROM unnest(${sql.array(executionIds)}::text[])\n )\n SELECT usage.* FROM requested\n JOIN ai_model_call_usage AS usage\n ON usage.project_id = ${input.projectId}\n AND usage.execution_id = requested.execution_id\n `\n }\n\n private async assertExecutionExists(\n sql: PgStoreClient,\n projectId: string,\n executionId: string\n ): Promise<void> {\n const [execution] = await sql<{ exists: boolean }[]>`\n SELECT EXISTS (\n SELECT 1 FROM executions WHERE project_id = ${projectId} AND id = ${executionId}\n ) AS exists\n `\n if (execution?.exists) return\n throw new AiUsageStorageError(\n \"missing_execution\",\n `[SixbPg] AI usage execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\ninterface AiUsageRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly attempt: number | string\n readonly call_id: string\n readonly provider_id: string\n readonly requested_model_id: string\n readonly response_model_id: string | null\n readonly response_id: string\n readonly input_tokens: number | string | null\n readonly output_tokens: number | string | null\n readonly total_tokens: number | string | null\n readonly uncached_input_tokens: number | string | null\n readonly cache_read_input_tokens: number | string | null\n readonly cache_write_input_tokens: number | string | null\n readonly text_output_tokens: number | string | null\n readonly reasoning_output_tokens: number | string | null\n readonly reporting_status: AiModelCallUsageRecord[\"usage\"][\"reportingStatus\"]\n readonly raw_usage: ReadonlyJsonObject | string | null\n readonly occurred_at: Date | string\n readonly recorded_at: Date | string\n}\n\nfunction aggregateExecutionRows(\n executionIds: readonly string[],\n rows: readonly AiUsageRow[]\n): readonly AiUsageExecutionSummary[] {\n const usageByExecutionId = new Map<string, AiModelCallUsageInput[]>()\n for (const executionId of executionIds) usageByExecutionId.set(executionId, [])\n for (const row of rows) {\n usageByExecutionId.get(row.execution_id)?.push(usageFromRow(row))\n }\n return executionIds.map((executionId) => {\n const usages = usageByExecutionId.get(executionId) ?? []\n return {\n modelCallCount: usages.length,\n usage: aggregateAiModelCallUsage(usages),\n }\n })\n}\n\nfunction usageFromRow(row: AiUsageRow): AiModelCallUsageInput {\n return {\n ...(row.input_tokens === null ? {} : { inputTokens: Number(row.input_tokens) }),\n ...(row.output_tokens === null ? {} : { outputTokens: Number(row.output_tokens) }),\n ...(row.uncached_input_tokens === null\n ? {}\n : { uncachedInputTokens: Number(row.uncached_input_tokens) }),\n ...(row.cache_read_input_tokens === null\n ? {}\n : { cacheReadInputTokens: Number(row.cache_read_input_tokens) }),\n ...(row.cache_write_input_tokens === null\n ? {}\n : { cacheWriteInputTokens: Number(row.cache_write_input_tokens) }),\n ...(row.text_output_tokens === null\n ? {}\n : { textOutputTokens: Number(row.text_output_tokens) }),\n ...(row.reasoning_output_tokens === null\n ? {}\n : { reasoningOutputTokens: Number(row.reasoning_output_tokens) }),\n }\n}\n\nfunction rawUsageFromRow(value: Exclude<AiUsageRow[\"raw_usage\"], null>): ReadonlyJsonObject {\n return typeof value === \"string\" ? (JSON.parse(value) as ReadonlyJsonObject) : value\n}\n\nfunction assertNonBlankProjectId(projectId: string): void {\n if (typeof projectId !== \"string\" || projectId.trim().length === 0) {\n throw new TypeError(\"[Sixb] AI usage projectId must be nonblank.\")\n }\n}\n",
|
|
40
42
|
"import postgres from \"postgres\"\n\n// Data-type policy (porsager defaults, deliberately not overridden):\n// - `timestamptz` -> JS `Date`. Row mappers normalize via `toIsoString(Date | string)`.\n// - `bigint` -> string (porsager avoids `Number` precision loss). The only bigint values\n// read here are `COUNT(*)` results, which fit safely in `Number`, so callers use\n// `Number(...)`. We do NOT register `postgres.BigInt` — it would break those `Number()`\n// conversions and JSON serialization.\n// - `numeric`/`decimal` -> string. The schema has no such columns; revisit if one is added.\n// - `jsonb` -> parsed JS value (objects/arrays/scalars), same as before.\n\n/**\n * Connection handle backing every Postgres storage adapter.\n *\n * This is the porsager `postgres` pool — not Bun's built-in SQL. bun:sql's pool orphaned\n * connections under request bursts (a query whose client disconnected mid-flight left its\n * connection checked out but never returned), so the pool drained to zero usable slots and\n * the whole API hung until a restart. porsager's pool reclaims connections reliably, which\n * is the actual fix for that wedge.\n *\n * Queries declare their row type per call (`` sql<RowType[]>`...` ``) rather than via an open\n * generic, so results are typed without `as` casts.\n */\nexport type SQL = postgres.Sql<Record<string, never>>\n\n/**\n * A query runner that may be the pool or an open transaction. Adapters that run the same\n * statement on either should accept this rather than {@link SQL} (only the pool exposes\n * `begin`/`reserve`/`end`).\n */\nexport type SQLClient = postgres.ISql<Record<string, never>>\n\n/**\n * A value accepted as a positional parameter by {@link SQLClient.unsafe}. Dynamically built\n * parameter arrays (from the query-IR compiler / run-list helpers) are cast to this since\n * their element types can't be inferred statically.\n */\nexport type SqlParameter = postgres.ParameterOrJSON<never>\n\nexport interface CreatePgClientOptions {\n readonly connectionString?: string\n readonly host?: string\n readonly port?: number\n readonly database?: string\n readonly user?: string\n readonly password?: string\n /** Maximum pooled connections. */\n readonly max: number\n /** Schema pinned via `search_path` on every connection. */\n readonly schemaName: string\n /** Close idle connections after this many ms (frees slots back to the server). Default 30s. */\n readonly idleTimeoutMillis?: number\n /** Per-connection `statement_timeout` (ms). Unset = no timeout. */\n readonly statementTimeoutMillis?: number\n /** Per-connection `idle_in_transaction_session_timeout` (ms). Unset = no timeout. */\n readonly idleInTransactionSessionTimeoutMillis?: number\n /** Seconds to wait when establishing a connection. Default 10. */\n readonly connectTimeoutMillis?: number\n /**\n * Whether porsager creates server-side prepared statements (its default; faster against a\n * direct Postgres connection). Keep `true` for a direct connection. Behind a transaction-mode\n * pooler, prepared statements are supported by PgBouncer >= 1.21 (Oct 2023) when\n * `max_prepared_statements > 0`; set `false` only for an older PgBouncer or when that setting\n * is 0. (The blanket incompatibility in porsager#93 predates PgBouncer 1.21.)\n */\n readonly prepare?: boolean\n readonly ssl?: boolean | \"require\" | \"prefer\"\n}\n\nconst DEFAULT_IDLE_TIMEOUT_SECONDS = 30\nconst DEFAULT_CONNECT_TIMEOUT_SECONDS = 10\n\n/** Build a configured porsager `postgres` pool. */\nexport function createPgClient(options: CreatePgClientOptions): SQL {\n // GUCs applied to every connection at startup.\n const connection: Record<string, string | number | boolean> = {\n search_path: options.schemaName,\n }\n if (options.statementTimeoutMillis !== undefined) {\n connection.statement_timeout = options.statementTimeoutMillis\n }\n if (options.idleInTransactionSessionTimeoutMillis !== undefined) {\n connection.idle_in_transaction_session_timeout = options.idleInTransactionSessionTimeoutMillis\n }\n\n const idleTimeout =\n options.idleTimeoutMillis !== undefined\n ? Math.max(1, Math.round(options.idleTimeoutMillis / 1000))\n : DEFAULT_IDLE_TIMEOUT_SECONDS\n\n const connectTimeout =\n options.connectTimeoutMillis !== undefined\n ? Math.max(1, Math.round(options.connectTimeoutMillis / 1000))\n : DEFAULT_CONNECT_TIMEOUT_SECONDS\n\n const base = {\n max: options.max,\n // `idle_timeout` is important on managed Postgres (e.g. DigitalOcean), which closes idle\n // server-side connections — without it porsager can hand out a dead socket (porsager#179).\n idle_timeout: idleTimeout,\n connect_timeout: connectTimeout,\n // `max_lifetime` is intentionally left at porsager's default (a random 45–90 min): it\n // cycles connections to avoid server-side memory bloat from long-lived prepared\n // statements and plays nicely with managed databases. Disabling it is discouraged.\n connection,\n // Match the previous (bun:sql) behavior of not surfacing routine PostgreSQL NOTICEs.\n onnotice: () => {},\n ...(options.prepare !== undefined ? { prepare: options.prepare } : {}),\n ...(options.ssl ? { ssl: options.ssl } : {}),\n }\n\n if (options.connectionString) {\n return postgres(options.connectionString, base)\n }\n\n return postgres({\n ...base,\n host: options.host ?? \"localhost\",\n port: options.port ?? 5432,\n ...(options.database !== undefined ? { database: options.database } : {}),\n ...(options.user !== undefined ? { username: options.user } : {}),\n ...(options.password !== undefined ? { password: options.password } : {}),\n })\n}\n",
|
|
41
43
|
"import {\n type ExecutionStorageRow,\n executionRecordFromStorageRow,\n executionRecordToStorageRow,\n normalizeExecutionRecord,\n validateExecutionRecordReferences,\n} from \"@sixb/core/internal/execution-storage\"\nimport type { CreateExecutionInput, ExecutionRecord, ExecutionStorage } from \"@sixb/core/storage\"\nimport { ExecutionStorageError } from \"@sixb/core/storage\"\nimport type { PgAuthStorage } from \"./auth-storage\"\nimport { isUniqueViolation } from \"./storage-errors\"\nimport type { PgStoreClient } from \"./transactions\"\n\nexport class PgExecutionStorage implements ExecutionStorage {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly auth: PgAuthStorage\n ) {}\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n const record = normalizeExecutionRecord(input)\n await validateExecutionRecordReferences(record, {\n auth: this.auth,\n getExecution: (params) => this.getById(params),\n })\n const row = executionRecordToStorageRow(record)\n\n try {\n const [created] = await this.sql<PgExecutionRow[]>`\n INSERT INTO executions (\n project_id,\n id,\n executor_kind,\n executor_id,\n source_kind,\n source_id,\n requested_by_user_id,\n requested_by_service_account_id,\n correlation_id,\n parent_execution_id,\n authority_kind,\n authority_user_id,\n authority_service_account_id,\n authority_session_id,\n authority_access_token_id,\n authority_primitive_kind,\n authority_primitive_id,\n authority_kernel_operation,\n created_at\n ) VALUES (\n ${row.projectId},\n ${row.id},\n ${row.executorKind},\n ${row.executorId},\n ${row.sourceKind},\n ${row.sourceId},\n ${row.requestedByUserId},\n ${row.requestedByServiceAccountId},\n ${row.correlationId},\n ${row.parentExecutionId},\n ${row.authorityKind},\n ${row.authorityUserId},\n ${row.authorityServiceAccountId},\n ${row.authoritySessionId},\n ${row.authorityAccessTokenId},\n ${row.authorityPrimitiveKind},\n ${row.authorityPrimitiveId},\n ${row.authorityKernelOperation},\n ${row.createdAt}\n )\n RETURNING *\n `\n\n if (!created) {\n throw new Error(\"[SixbPg] Execution insert returned no row.\")\n }\n return executionRecordFromStorageRow(toStorageRow(created))\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new ExecutionStorageError(\n \"duplicate_execution\",\n `[SixbPg] Execution '${record.id}' already exists in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ExecutionRecord | null> {\n const [row] = await this.sql<PgExecutionRow[]>`\n SELECT *\n FROM executions\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n return row ? executionRecordFromStorageRow(toStorageRow(row)) : null\n }\n}\n\nfunction toStorageRow(row: PgExecutionRow): ExecutionStorageRow {\n return {\n projectId: row.project_id,\n id: row.id,\n executorKind: row.executor_kind,\n executorId: row.executor_id,\n sourceKind: row.source_kind,\n sourceId: row.source_id,\n requestedByUserId: row.requested_by_user_id,\n requestedByServiceAccountId: row.requested_by_service_account_id,\n correlationId: row.correlation_id,\n parentExecutionId: row.parent_execution_id,\n authorityKind: row.authority_kind,\n authorityUserId: row.authority_user_id,\n authorityServiceAccountId: row.authority_service_account_id,\n authoritySessionId: row.authority_session_id,\n authorityAccessTokenId: row.authority_access_token_id,\n authorityPrimitiveKind: row.authority_primitive_kind,\n authorityPrimitiveId: row.authority_primitive_id,\n authorityKernelOperation: row.authority_kernel_operation,\n createdAt: new Date(row.created_at),\n }\n}\n\ninterface PgExecutionRow {\n readonly project_id: string\n readonly id: string\n readonly executor_kind: ExecutionStorageRow[\"executorKind\"]\n readonly executor_id: string\n readonly source_kind: ExecutionStorageRow[\"sourceKind\"]\n readonly source_id: string\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly correlation_id: string\n readonly parent_execution_id: string | null\n readonly authority_kind: ExecutionStorageRow[\"authorityKind\"]\n readonly authority_user_id: string | null\n readonly authority_service_account_id: string | null\n readonly authority_session_id: string | null\n readonly authority_access_token_id: string | null\n readonly authority_primitive_kind: ExecutionStorageRow[\"authorityPrimitiveKind\"]\n readonly authority_primitive_id: string | null\n readonly authority_kernel_operation: ExecutionStorageRow[\"authorityKernelOperation\"]\n readonly created_at: Date | string\n}\n",
|
|
@@ -52,7 +54,7 @@
|
|
|
52
54
|
"import type { JsonValue } from \"@sixb/core\"\nimport { normalizeRequesterGroupIds } from \"@sixb/core/internal/auth\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n assertWorkflowAgentNodeRunExecution,\n assertWorkflowRunExecution,\n} from \"@sixb/core/internal/workflow-run-storage-provider\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowAgentNodeRunInput,\n ConfirmWorkflowAgentNodeRunExecutionOwnershipInput,\n ConfirmWorkflowRunExecutionOwnershipInput,\n CreateWorkflowAgentNodeRunInput,\n ExecutionStorage,\n FinishWorkflowAgentNodeRunInput,\n FinishWorkflowNodeRunInput,\n FinishWorkflowRunInput,\n ListLatestWorkflowRunsInput,\n ListLatestWorkflowRunsResult,\n ListWorkflowAgentNodeRunsInput,\n ListWorkflowAgentNodeRunsResult,\n ListWorkflowNodeRunsInput,\n ListWorkflowNodeRunsResult,\n ListWorkflowRunsInput,\n ListWorkflowRunsResult,\n QueueWorkflowRunInput,\n ReclaimWorkflowAgentNodeRunInput,\n ReclaimWorkflowRunInput,\n ResumeWorkflowRunInput,\n StartWorkflowAgentNodeRunInput,\n StartWorkflowNodeRunInput,\n StartWorkflowRunInput,\n WaitWorkflowNodeRunInput,\n WaitWorkflowRunInput,\n WorkflowAgentNodeRunRecord,\n WorkflowAgentNodeRunStorage,\n WorkflowNodeRunRecord,\n WorkflowNodeRunStorage,\n WorkflowRunRecord,\n WorkflowRunStorage,\n} from \"@sixb/core/storage\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n WORKFLOW_RUN_FAILURE_CODES,\n WorkflowRunError,\n} from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport type { SqlParameter } from \"./pg-client\"\nimport { appendRunListFilters, hasEmptyStatuses, queryRunList } from \"./run-list-query\"\nimport { isUniqueViolation } from \"./storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport class PgWorkflowRunStorage implements WorkflowRunStorage {\n readonly nodes: PgWorkflowNodeRunStorage\n readonly agentNodes: PgWorkflowAgentNodeRunStorage\n\n constructor(\n private readonly sql: PgStoreClient,\n private readonly executions: ExecutionStorage\n ) {\n this.nodes = new PgWorkflowNodeRunStorage(sql)\n this.agentNodes = new PgWorkflowAgentNodeRunStorage(sql, executions)\n }\n\n async queue(input: QueueWorkflowRunInput): Promise<WorkflowRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertWorkflowRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n workflowId: input.workflowId,\n })\n\n try {\n const [row] = await this.sql<WorkflowRunDatabaseRow[]>`\n INSERT INTO workflow_runs (\n project_id,\n id,\n execution_id,\n workflow_id,\n status,\n input,\n queued_at,\n started_at,\n requester_group_ids,\n attempt\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.executionId},\n ${input.workflowId},\n ${\"queued\"},\n ${serializeRecord(input.input)}::text::jsonb,\n ${queuedAt},\n ${queuedAt},\n ${JSON.stringify(normalizeRequesterGroupIds(input.requesterGroupIds))}::text::jsonb,\n ${0}\n )\n RETURNING *\n `\n\n return rowToWorkflowRunRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' or execution '${input.executionId}' is already linked for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n async start(input: StartWorkflowRunInput): Promise<WorkflowRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const startedAt = input.startedAt ?? new Date()\n const [existing] = await tx<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing || existing.status !== \"queued\") {\n throw new WorkflowRunError(\n existing\n ? `[SixbPg] Workflow run '${input.id}' cannot start from status '${existing.status}'.`\n : `[SixbPg] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const [updated] = await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs\n SET\n status = ${\"running\"},\n started_at = ${startedAt},\n finished_at = ${null},\n error = ${null},\n attempt = attempt + 1,\n execution_token = ${input.execution?.token ?? null},\n execution_queue_lease_expires_at = ${input.execution?.queueLeaseExpiresAt ?? null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowRunRecord(updated)\n })\n }\n\n async reclaim(input: ReclaimWorkflowRunInput): Promise<WorkflowRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const existing = await lockWorkflowRun(tx, input.projectId, input.id, \"running\")\n const [updated] = await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs SET\n attempt = ${Number(existing.attempt) + 1},\n execution_token = ${input.execution.token},\n execution_queue_lease_expires_at = ${input.execution.queueLeaseExpiresAt}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n return rowToWorkflowRunRecord(updated)\n })\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowRunExecutionOwnershipInput\n ): Promise<WorkflowRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const existing = await lockWorkflowRun(tx, input.projectId, input.id, \"running\")\n assertWorkflowRunExecutionOwnership(existing, input.executionToken)\n const current = existing.execution_queue_lease_expires_at\n ? new Date(existing.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n const [updated] = await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs SET execution_queue_lease_expires_at = ${new Date(\n Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())\n )}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n return rowToWorkflowRunRecord(updated)\n })\n }\n\n async finish(input: FinishWorkflowRunInput): Promise<WorkflowRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (!canFinishWorkflowRun(existing.status, input.status)) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' for project '${input.projectId}' cannot be finished from status '${existing.status}'.`\n )\n }\n assertWorkflowRunExecutionOwnership(existing, input.executionToken)\n\n const [updated] =\n input.status === \"succeeded\"\n ? await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs\n SET\n status = ${input.status},\n finished_at = ${input.finishedAt ?? new Date()},\n output = ${serializeRecord(input.output)}::text::jsonb,\n error = ${null},\n execution_token = ${null},\n execution_queue_lease_expires_at = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n : await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs\n SET\n status = ${input.status},\n finished_at = ${input.finishedAt ?? new Date()},\n output = ${null},\n error = ${input.error === undefined ? null : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES)}::text::jsonb,\n execution_token = ${null},\n execution_queue_lease_expires_at = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowRunRecord(updated)\n })\n }\n\n async wait(input: WaitWorkflowRunInput): Promise<WorkflowRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n assertWorkflowRunExecutionOwnership(existing, input.executionToken)\n\n const [updated] = await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs\n SET\n status = ${\"waiting\"},\n finished_at = ${null},\n error = ${null},\n execution_token = ${null},\n execution_queue_lease_expires_at = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowRunRecord(updated)\n })\n }\n\n async resume(input: ResumeWorkflowRunInput): Promise<WorkflowRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.id}' for project '${input.projectId}' must be waiting.`\n )\n }\n\n const [updated] = await tx<WorkflowRunDatabaseRow[]>`\n UPDATE workflow_runs\n SET\n status = ${\"running\"},\n finished_at = ${null},\n error = ${null},\n attempt = attempt + 1,\n execution_token = ${input.execution?.token ?? null},\n execution_queue_lease_expires_at = ${input.execution?.queueLeaseExpiresAt ?? null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowRunRecord(updated)\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowRunRecord | null> {\n const [row] = await this.sql<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToWorkflowRunRecord(row) : null\n }\n\n async list(input: ListWorkflowRunsInput): Promise<ListWorkflowRunsResult> {\n if (hasEmptyStatuses(input) || input.workflowIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n\n if (input.workflowId) {\n whereClauses.push(`workflow_id = $${index++}`)\n params.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n const placeholders = input.workflowIds.map(() => `$${index++}`)\n whereClauses.push(`workflow_id IN (${placeholders.join(\", \")})`)\n params.push(...input.workflowIds)\n }\n\n index = appendRunListFilters(whereClauses, params, index, input)\n\n const { rows, total, hasMore } = await queryRunList<WorkflowRunDatabaseRow>({\n sql: this.sql,\n tableName: \"workflow_runs\",\n whereClauses,\n params,\n nextIndex: index,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n const runs = rows.map(rowToWorkflowRunRecord)\n\n return {\n runs,\n hasMore,\n total,\n }\n }\n\n async listLatestByWorkflowIds(\n input: ListLatestWorkflowRunsInput\n ): Promise<ListLatestWorkflowRunsResult> {\n const rows = await queryLatestRunsByOwnerId<WorkflowRunDatabaseRow>({\n sql: this.sql,\n tableName: \"workflow_runs\",\n ownerColumn: \"workflow_id\",\n ownerIds: input.workflowIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.workflow_id,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n }\n }\n}\n\nexport class PgWorkflowAgentNodeRunStorage implements WorkflowAgentNodeRunStorage {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n const [parent] = await this.sql<{ execution_id: string }[]>`\n SELECT workflow_runs.execution_id\n FROM workflow_node_runs\n JOIN workflow_runs\n ON workflow_runs.project_id = workflow_node_runs.project_id\n AND workflow_runs.id = workflow_node_runs.workflow_run_id\n WHERE workflow_node_runs.project_id = ${input.projectId}\n AND workflow_node_runs.id = ${input.nodeRunId}\n AND workflow_node_runs.node_type = ${\"agent\"}\n `\n if (!parent) {\n throw new WorkflowRunError(\n `[SixbPg] Agent workflow node run '${input.nodeRunId}' was not found.`\n )\n }\n await assertWorkflowAgentNodeRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n nodeRunId: input.nodeRunId,\n agentId: input.agentId,\n workflowExecutionId: parent.execution_id,\n })\n\n try {\n const [row] = await this.sql<WorkflowAgentNodeRunDatabaseRow[]>`\n INSERT INTO workflow_agent_node_runs (\n project_id, node_run_id, execution_id, agent_id, status, prompt, attempt, created_at\n ) VALUES (\n ${input.projectId}, ${input.nodeRunId}, ${input.executionId}, ${input.agentId},\n ${\"queued\"}, ${input.prompt}, ${0}, ${input.createdAt ?? new Date()}\n ) RETURNING *\n `\n return rowToWorkflowAgentNodeRunRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new WorkflowRunError(\n `[SixbPg] Agent execution already exists for workflow node run '${input.nodeRunId}'.`\n )\n }\n throw error\n }\n }\n\n async start(input: StartWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const row = await lockWorkflowAgentNodeRun(tx, input.projectId, input.nodeRunId, \"queued\")\n const [updated] = await tx<WorkflowAgentNodeRunDatabaseRow[]>`\n UPDATE workflow_agent_node_runs SET\n status = ${\"running\"},\n model_id = ${input.modelId ?? null},\n attempt = ${1},\n execution_token = ${input.execution.token},\n execution_queue_lease_expires_at = ${input.execution.queueLeaseExpiresAt},\n started_at = ${input.startedAt ?? new Date()}\n WHERE project_id = ${row.project_id} AND node_run_id = ${row.node_run_id}\n RETURNING *\n `\n return rowToWorkflowAgentNodeRunRecord(updated)\n })\n }\n\n async reclaim(input: ReclaimWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const row = await lockWorkflowAgentNodeRun(tx, input.projectId, input.nodeRunId, \"running\")\n const [updated] = await tx<WorkflowAgentNodeRunDatabaseRow[]>`\n UPDATE workflow_agent_node_runs SET\n attempt = ${Number(row.attempt) + 1},\n execution_token = ${input.execution.token},\n execution_queue_lease_expires_at = ${input.execution.queueLeaseExpiresAt}\n WHERE project_id = ${input.projectId} AND node_run_id = ${input.nodeRunId}\n RETURNING *\n `\n return rowToWorkflowAgentNodeRunRecord(updated)\n })\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowAgentNodeRunExecutionOwnershipInput\n ): Promise<WorkflowAgentNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const row = await lockWorkflowAgentNodeRun(tx, input.projectId, input.nodeRunId, \"running\")\n assertWorkflowAgentNodeOwnership(row, input.executionToken)\n const currentLease = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n const [updated] = await tx<WorkflowAgentNodeRunDatabaseRow[]>`\n UPDATE workflow_agent_node_runs SET\n execution_queue_lease_expires_at = ${new Date(\n Math.max(currentLease.getTime(), input.queueLeaseExpiresAt.getTime())\n )}\n WHERE project_id = ${input.projectId} AND node_run_id = ${input.nodeRunId}\n RETURNING *\n `\n return rowToWorkflowAgentNodeRunRecord(updated)\n })\n }\n\n async finish(input: FinishWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const row = await lockWorkflowAgentNodeRun(tx, input.projectId, input.nodeRunId, \"running\")\n assertWorkflowAgentNodeOwnership(row, input.executionToken)\n const [updated] = await tx<WorkflowAgentNodeRunDatabaseRow[]>`\n UPDATE workflow_agent_node_runs SET\n status = ${input.status},\n model_id = COALESCE(${input.modelId ?? null}, model_id),\n finish_reason = ${input.finishReason ?? null},\n trace = ${input.trace ? JSON.stringify(input.trace) : null}::text::jsonb,\n diagnostics = ${input.diagnostics ? JSON.stringify(input.diagnostics) : null}::text::jsonb,\n error = ${input.status === \"succeeded\" || input.error === undefined ? null : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES)}::text::jsonb,\n execution_token = ${null},\n execution_queue_lease_expires_at = ${null},\n completed_at = ${input.completedAt ?? new Date()}\n WHERE project_id = ${input.projectId} AND node_run_id = ${input.nodeRunId}\n RETURNING *\n `\n return rowToWorkflowAgentNodeRunRecord(updated)\n })\n }\n\n async cancel(input: CancelWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [row] = await tx<WorkflowAgentNodeRunDatabaseRow[]>`\n SELECT * FROM workflow_agent_node_runs\n WHERE project_id = ${input.projectId} AND node_run_id = ${input.nodeRunId}\n FOR UPDATE\n `\n if (!row) {\n throw new WorkflowRunError(\n `[SixbPg] Agent workflow node run '${input.nodeRunId}' not found.`\n )\n }\n if (row.status !== \"queued\" && row.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbPg] Agent workflow node run '${input.nodeRunId}' cannot be cancelled from status '${row.status}'.`\n )\n }\n const [updated] = await tx<WorkflowAgentNodeRunDatabaseRow[]>`\n UPDATE workflow_agent_node_runs SET\n status = ${\"cancelled\"},\n error = ${input.error === undefined ? null : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES)}::text::jsonb,\n execution_token = ${null},\n execution_queue_lease_expires_at = ${null},\n completed_at = ${input.completedAt ?? new Date()}\n WHERE project_id = ${input.projectId} AND node_run_id = ${input.nodeRunId}\n RETURNING *\n `\n return rowToWorkflowAgentNodeRunRecord(updated)\n })\n }\n\n async getByNodeRunId(params: {\n projectId: string\n nodeRunId: string\n }): Promise<WorkflowAgentNodeRunRecord | null> {\n const [row] = await this.sql<WorkflowAgentNodeRunDatabaseRow[]>`\n SELECT * FROM workflow_agent_node_runs\n WHERE project_id = ${params.projectId} AND node_run_id = ${params.nodeRunId}\n `\n return row ? rowToWorkflowAgentNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowAgentNodeRunsInput): Promise<ListWorkflowAgentNodeRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], total: 0, hasMore: false }\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n if (input.agentId) {\n whereClauses.push(`agent_id = $${index++}`)\n params.push(input.agentId)\n }\n index = appendRunListFilters(whereClauses, params, index, input)\n const result = await queryRunList<WorkflowAgentNodeRunDatabaseRow>({\n sql: this.sql,\n tableName: \"workflow_agent_node_runs\",\n whereClauses,\n params,\n nextIndex: index,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { ...result, runs: result.rows.map(rowToWorkflowAgentNodeRunRecord) }\n }\n}\n\nexport class PgWorkflowNodeRunStorage implements WorkflowNodeRunStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async start(input: StartWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n return runPgTransaction(this.sql, async (tx) => {\n const [workflowRun] = await tx<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${input.projectId} AND id = ${input.workflowRunId}\n FOR UPDATE\n `\n\n if (!workflowRun) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.workflowRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (workflowRun.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${input.workflowRunId}' for project '${input.projectId}' must be running.`\n )\n }\n assertWorkflowRunExecutionOwnership(workflowRun, input.executionToken)\n\n if (workflowRun.workflow_id !== input.workflowId) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow node run '${input.id}' workflow '${input.workflowId}' does not match workflow run '${input.workflowRunId}' workflow '${workflowRun.workflow_id}'.`\n )\n }\n\n try {\n const [row] = await tx<WorkflowNodeRunDatabaseRow[]>`\n INSERT INTO workflow_node_runs (\n project_id,\n id,\n workflow_run_id,\n workflow_id,\n node_index,\n node_type,\n node_id,\n node_key,\n status,\n input,\n started_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.workflowRunId},\n ${input.workflowId},\n ${input.nodeIndex},\n ${input.nodeType},\n ${input.nodeId},\n ${input.nodeKey},\n ${\"running\"},\n ${serializeRecord(input.input)}::text::jsonb,\n ${input.startedAt ?? new Date()}\n )\n RETURNING *\n `\n\n return rowToWorkflowNodeRunRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow node run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n })\n }\n\n async finish(input: FinishWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WorkflowNodeRunDatabaseRow[]>`\n SELECT * FROM workflow_node_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n await assertWorkflowNodeParentExecutionOwnership(tx, existing, input.executionToken)\n\n if (existing.status !== \"running\" && existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbPg] Workflow node run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n const [updated] =\n input.status === \"succeeded\"\n ? await tx<WorkflowNodeRunDatabaseRow[]>`\n UPDATE workflow_node_runs\n SET\n status = ${input.status},\n finished_at = ${input.finishedAt ?? new Date()},\n output = ${input.output ? serializeRecord(input.output) : null}::text::jsonb,\n error = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n : await tx<WorkflowNodeRunDatabaseRow[]>`\n UPDATE workflow_node_runs\n SET\n status = ${input.status},\n finished_at = ${input.finishedAt ?? new Date()},\n output = ${null},\n error = ${input.error === undefined ? null : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowNodeRunRecord(updated)\n })\n }\n\n async wait(input: WaitWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WorkflowNodeRunDatabaseRow[]>`\n SELECT * FROM workflow_node_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n await assertWorkflowNodeParentExecutionOwnership(tx, existing, input.executionToken)\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbPg] Workflow node run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n\n const [updated] = await tx<WorkflowNodeRunDatabaseRow[]>`\n UPDATE workflow_node_runs\n SET\n status = ${\"waiting\"},\n finished_at = ${null},\n output = ${null},\n error = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowNodeRunRecord(updated)\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowNodeRunRecord | null> {\n const [row] = await this.sql<WorkflowNodeRunDatabaseRow[]>`\n SELECT * FROM workflow_node_runs\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToWorkflowNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowNodeRunsInput): Promise<ListWorkflowNodeRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n nodes: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n\n if (input.workflowRunId) {\n whereClauses.push(`workflow_run_id = $${index++}`)\n params.push(input.workflowRunId)\n }\n\n if (input.workflowId) {\n whereClauses.push(`workflow_id = $${index++}`)\n params.push(input.workflowId)\n }\n\n if (input.nodeType) {\n whereClauses.push(`node_type = $${index++}`)\n params.push(input.nodeType)\n }\n\n if (input.nodeId) {\n whereClauses.push(`node_id = $${index++}`)\n params.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(`node_key = $${index++}`)\n params.push(input.nodeKey)\n }\n\n index = appendRunListFilters(whereClauses, params, index, input)\n\n const { rows, total, hasMore } = await queryRunList<WorkflowNodeRunDatabaseRow>({\n sql: this.sql,\n tableName: \"workflow_node_runs\",\n whereClauses,\n params,\n nextIndex: index,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n const nodes = rows.map(rowToWorkflowNodeRunRecord)\n\n return {\n nodes,\n hasMore,\n total,\n }\n }\n}\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: WorkflowIOSnapshot | string): WorkflowIOSnapshot {\n return typeof value === \"string\" ? (JSON.parse(value) as WorkflowIOSnapshot) : value\n}\n\nfunction rowToWorkflowRunRecord(row: WorkflowRunDatabaseRow): WorkflowRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n workflowId: row.workflow_id,\n status: row.status,\n input: parseRecord(row.input),\n output: row.output ? parseRecord(row.output) : undefined,\n queuedAt: row.queued_at ? new Date(row.queued_at) : undefined,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n requesterGroupIds: parseJson(row.requester_group_ids),\n attempt: Number(row.attempt),\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n }\n}\n\nfunction rowToWorkflowNodeRunRecord(row: WorkflowNodeRunDatabaseRow): WorkflowNodeRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowRunId: row.workflow_run_id,\n workflowId: row.workflow_id,\n nodeIndex: Number(row.node_index),\n nodeType: row.node_type,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n status: row.status,\n input: parseRecord(row.input),\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output: row.output ? parseRecord(row.output) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowRunError(`[SixbPg] Workflow run ${fieldName} must be a non-negative integer.`)\n }\n}\n\nfunction canFinishWorkflowRun(\n current: WorkflowRunRecord[\"status\"],\n next: FinishWorkflowRunInput[\"status\"]\n): boolean {\n return (\n current === \"running\" ||\n (current === \"waiting\" && next !== \"succeeded\") ||\n (current === \"queued\" && next !== \"succeeded\")\n )\n}\n\ninterface WorkflowRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n workflow_id: string\n status: WorkflowRunRecord[\"status\"]\n input: WorkflowIOSnapshot | string\n output: WorkflowIOSnapshot | string | null\n queued_at: Date | string | null\n started_at: Date | string\n finished_at: Date | string | null\n error: JsonValue | null\n requester_group_ids: string[] | string\n attempt: number | string\n execution_token: string | null\n execution_queue_lease_expires_at: Date | string | null\n}\n\ninterface WorkflowNodeRunDatabaseRow {\n project_id: string\n id: string\n workflow_run_id: string\n workflow_id: string\n node_index: number | string\n node_type: WorkflowNodeRunRecord[\"nodeType\"]\n node_id: string\n node_key: string\n status: WorkflowNodeRunRecord[\"status\"]\n input: WorkflowIOSnapshot | string\n started_at: Date | string\n finished_at: Date | string | null\n output: WorkflowIOSnapshot | string | null\n error: JsonValue | null\n}\n\ninterface WorkflowAgentNodeRunDatabaseRow {\n project_id: string\n node_run_id: string\n execution_id: string\n agent_id: string\n status: WorkflowAgentNodeRunRecord[\"status\"]\n prompt: string\n model_id: string | null\n finish_reason: WorkflowAgentNodeRunRecord[\"finishReason\"] | null\n trace: WorkflowAgentNodeRunRecord[\"trace\"] | string | null\n diagnostics: WorkflowAgentNodeRunRecord[\"diagnostics\"] | string | null\n error: JsonValue | null\n attempt: number | string\n execution_token: string | null\n execution_queue_lease_expires_at: Date | string | null\n created_at: Date | string\n started_at: Date | string | null\n completed_at: Date | string | null\n}\n\nasync function lockWorkflowAgentNodeRun(\n sql: PgStoreClient,\n projectId: string,\n nodeRunId: string,\n status: WorkflowAgentNodeRunRecord[\"status\"]\n): Promise<WorkflowAgentNodeRunDatabaseRow> {\n const [row] = await sql<WorkflowAgentNodeRunDatabaseRow[]>`\n SELECT * FROM workflow_agent_node_runs\n WHERE project_id = ${projectId} AND node_run_id = ${nodeRunId}\n FOR UPDATE\n `\n if (!row) {\n throw new WorkflowRunError(\n `[SixbPg] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbPg] Agent workflow node run '${nodeRunId}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n}\n\nfunction assertWorkflowAgentNodeOwnership(\n row: WorkflowAgentNodeRunDatabaseRow,\n token: string\n): void {\n if (row.execution_token !== token) {\n throw new WorkflowRunError(\n `[SixbPg] Execution token is no longer current on agent workflow node run '${row.node_run_id}'.`\n )\n }\n}\n\nfunction rowToWorkflowAgentNodeRunRecord(\n row: WorkflowAgentNodeRunDatabaseRow\n): WorkflowAgentNodeRunRecord {\n return {\n projectId: row.project_id,\n nodeRunId: row.node_run_id,\n executionId: row.execution_id,\n agentId: row.agent_id,\n status: row.status,\n prompt: row.prompt,\n ...(row.model_id ? { modelId: row.model_id } : {}),\n ...(row.finish_reason ? { finishReason: row.finish_reason } : {}),\n ...(row.trace ? { trace: parseJson(row.trace) } : {}),\n ...(row.diagnostics ? { diagnostics: parseJson(row.diagnostics) } : {}),\n ...(row.error ? { error: parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES) } : {}),\n attempt: Number(row.attempt),\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n createdAt: new Date(row.created_at),\n ...(row.started_at ? { startedAt: new Date(row.started_at) } : {}),\n ...(row.completed_at ? { completedAt: new Date(row.completed_at) } : {}),\n }\n}\n\nfunction parseJson<T>(value: T | string): T {\n return typeof value === \"string\" ? (JSON.parse(value) as T) : value\n}\n\nasync function lockWorkflowRun(\n sql: PgStoreClient,\n projectId: string,\n id: string,\n status: WorkflowRunRecord[\"status\"]\n): Promise<WorkflowRunDatabaseRow> {\n const [row] = await sql<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs WHERE project_id = ${projectId} AND id = ${id} FOR UPDATE\n `\n if (!row) throw new WorkflowRunError(`[SixbPg] Workflow run '${id}' not found.`)\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbPg] Workflow run '${id}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n}\n\nfunction assertWorkflowRunExecutionOwnership(row: WorkflowRunDatabaseRow, token?: string): void {\n if (row.execution_token !== (token ?? null)) {\n throw new WorkflowRunError(\n `[SixbPg] Execution token is no longer current on workflow run '${row.id}'.`\n )\n }\n}\n\nasync function assertWorkflowNodeParentExecutionOwnership(\n sql: PgStoreClient,\n node: WorkflowNodeRunDatabaseRow,\n token?: string\n): Promise<void> {\n const [run] = await sql<WorkflowRunDatabaseRow[]>`\n SELECT * FROM workflow_runs\n WHERE project_id = ${node.project_id} AND id = ${node.workflow_run_id}\n FOR UPDATE\n `\n if (!run) throw new WorkflowRunError(`[SixbPg] Parent workflow run was not found.`)\n assertWorkflowRunExecutionOwnership(run, token)\n}\n",
|
|
53
55
|
"export interface PostgresStorageTestingAdapter {\n advanceConnectorConnectionTime(durationMs: number): void\n}\n\nconst adapters = new WeakMap<object, PostgresStorageTestingAdapter>()\n\nexport function registerPostgresStorageTestingAdapter(\n storage: object,\n advanceConnectorConnectionTime: (durationMs: number) => void\n): void {\n adapters.set(storage, { advanceConnectorConnectionTime })\n}\n\nexport function getPostgresStorageTestingAdapter(storage: object): PostgresStorageTestingAdapter {\n const adapter = adapters.get(storage)\n if (!adapter) throw new Error(\"[SixbPg] Storage testing adapter is unavailable.\")\n return adapter\n}\n"
|
|
54
56
|
],
|
|
55
|
-
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
|
|
56
|
-
"debugId": "
|
|
57
|
+
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
|
|
58
|
+
"debugId": "687ACDC68EF0C51B64756E2164756E21",
|
|
57
59
|
"names": []
|
|
58
60
|
}
|