@sixb/pg 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/agents/threads.d.ts +4 -0
  2. package/dist/agents/threads.d.ts.map +1 -1
  3. package/dist/auth-storage/sessions.d.ts +2 -1
  4. package/dist/auth-storage/sessions.d.ts.map +1 -1
  5. package/dist/index.d.ts +4 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +959 -7
  8. package/dist/index.js.map +15 -13
  9. package/dist/migrations.d.ts.map +1 -1
  10. package/dist/ontology-storage/replacement-plans.d.ts.map +1 -1
  11. package/dist/ontology-storage/sources.d.ts +2 -1
  12. package/dist/ontology-storage/sources.d.ts.map +1 -1
  13. package/dist/pg-action-run-storage.d.ts +4 -0
  14. package/dist/pg-action-run-storage.d.ts.map +1 -1
  15. package/dist/pg-activity-storage.d.ts +22 -0
  16. package/dist/pg-activity-storage.d.ts.map +1 -0
  17. package/dist/pg-artifact-storage.d.ts +19 -0
  18. package/dist/pg-artifact-storage.d.ts.map +1 -0
  19. package/dist/pg-execution-storage.d.ts +2 -1
  20. package/dist/pg-execution-storage.d.ts.map +1 -1
  21. package/dist/pg-workflow-run-storage.d.ts +4 -0
  22. package/dist/pg-workflow-run-storage.d.ts.map +1 -1
  23. package/dist/share-grant-storage.d.ts +2 -1
  24. package/dist/share-grant-storage.d.ts.map +1 -1
  25. package/package.json +3 -3
  26. package/src/agents/threads.ts +23 -0
  27. package/src/auth-storage/sessions.ts +20 -0
  28. package/src/index.ts +10 -0
  29. package/src/migrations/063-artifacts.sql +67 -0
  30. package/src/migrations/064-drop-output-diagnostics.sql +14 -0
  31. package/src/migrations/065-plan-work-payload-statistics.sql +5 -0
  32. package/src/migrations/066-activity.sql +61 -0
  33. package/src/migrations/067-activity-timeline.sql +15 -0
  34. package/src/migrations/068-activity-interactions.sql +20 -0
  35. package/src/migrations.ts +18 -0
  36. package/src/ontology-storage/replacement-plans.ts +25 -7
  37. package/src/ontology-storage/sources.ts +37 -0
  38. package/src/pg-action-run-storage.ts +23 -0
  39. package/src/pg-activity-storage.ts +486 -0
  40. package/src/pg-artifact-storage.ts +325 -0
  41. package/src/pg-execution-storage.ts +52 -0
  42. package/src/pg-workflow-run-storage.ts +23 -0
  43. package/src/share-grant-storage.ts +21 -0
package/dist/index.js.map CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": 3,
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/device-authorizations.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/objects/storage.ts", "../src/objects/aggregate-admission.ts", "../src/objects/query-compiler.ts", "../src/objects/reader.ts", "../src/objects/query-indexes.ts", "../src/objects/preparation-lock.ts", "../src/objects/rows.ts", "../src/objects/text-count-index.ts", "../src/objects/selected-reader.ts", "../src/objects/read-scope.ts", "../src/objects/prepare-queries.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/source-roots.ts", "../src/ontology-storage/replacement-plans.ts", "../src/ontology-storage/materialization-writer.ts", "../src/ontology-storage/outbox.ts", "../src/pg-execution-storage.ts", "../src/ontology-storage/sources.ts", "../src/ontology-storage/source-cleanup.ts", "../src/ontology-storage/vector-indexing.ts", "../src/ontology-storage/vectors.ts", "../src/ontology-storage/index.ts", "../src/pg-action-run-storage.ts", "../src/pg-ai-cost-storage.ts", "../src/ai-cost-groups.ts", "../src/pg-ai-usage-storage.ts", "../src/pg-ai-limit-storage.ts", "../src/pg-client.ts", "../src/pg-file-download-grant-storage.ts", "../src/pg-file-upload-session-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/share-grant-storage.ts", "../src/share-session-storage.ts", "../src/testing.ts"],
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/device-authorizations.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/objects/storage.ts", "../src/objects/aggregate-admission.ts", "../src/objects/query-compiler.ts", "../src/objects/reader.ts", "../src/objects/query-indexes.ts", "../src/objects/preparation-lock.ts", "../src/objects/rows.ts", "../src/objects/text-count-index.ts", "../src/objects/selected-reader.ts", "../src/objects/read-scope.ts", "../src/objects/prepare-queries.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/source-roots.ts", "../src/ontology-storage/replacement-plans.ts", "../src/ontology-storage/materialization-writer.ts", "../src/ontology-storage/outbox.ts", "../src/pg-execution-storage.ts", "../src/ontology-storage/sources.ts", "../src/ontology-storage/source-cleanup.ts", "../src/ontology-storage/vector-indexing.ts", "../src/ontology-storage/vectors.ts", "../src/ontology-storage/index.ts", "../src/pg-action-run-storage.ts", "../src/pg-activity-storage.ts", "../src/pg-ai-cost-storage.ts", "../src/ai-cost-groups.ts", "../src/pg-ai-usage-storage.ts", "../src/pg-ai-limit-storage.ts", "../src/pg-artifact-storage.ts", "../src/pg-client.ts", "../src/pg-file-download-grant-storage.ts", "../src/pg-file-upload-session-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/share-grant-storage.ts", "../src/share-session-storage.ts", "../src/testing.ts"],
4
4
  "sourcesContent": [
5
- "/// <reference path=\"./sql.d.ts\" />\n// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\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 createTransactionStorageProxy,\n throwNestedStorageTransaction,\n} from \"@sixb/core/internal/storage\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiLimitStorage,\n type AiUsageStorage,\n type ObjectQueryPreparationPlan,\n type ObjectQueryPreparationResult,\n type ObjectStorage,\n type QueryPreparationCapableStorage,\n StorageTransactionError,\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 { PgObjectStorage } from \"./objects\"\nimport { preparePgObjectQueries } from \"./objects/prepare-queries\"\nimport { ensurePgObjectQueryIndexes, type PgObjectQueryIndex } from \"./objects/query-indexes\"\n\nexport type { PgObjectQueryIndex, PgObjectQueryIndexScope } from \"./objects/query-indexes\"\n\nimport { type PgObjectTextCountIndex, preparePgObjectTextCounts } from \"./objects/text-count-index\"\n\nexport type { PgObjectTextCountIndex } from \"./objects/text-count-index\"\n\nimport { PgOntologyStorage, type PgOntologyTransactionContext } from \"./ontology-storage\"\nimport { PgActionRunStorage } from \"./pg-action-run-storage\"\nimport { PgAiCostStorage } from \"./pg-ai-cost-storage\"\nimport { PgAiLimitStorage } from \"./pg-ai-limit-storage\"\nimport { PgAiUsageStorage } from \"./pg-ai-usage-storage\"\nimport { createPgClient, type SQL, type SQLClient } from \"./pg-client\"\nimport { PgExecutionStorage } from \"./pg-execution-storage\"\nimport { PgFileDownloadGrantStorage } from \"./pg-file-download-grant-storage\"\nimport { PgFileUploadSessionStorage } from \"./pg-file-upload-session-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 { PgShareGrantStorage } from \"./share-grant-storage\"\nimport { PgShareSessionStorage } from \"./share-session-storage\"\nimport { isRetryableTransactionConflict } from \"./storage-errors\"\nimport { registerPostgresStorageTestingAdapter } from \"./testing\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport interface PostgresStorageOptions {\n /**\n * Full connection string (e.g. DATABASE_URL). Takes precedence over individual fields.\n *\n * Add `sslnegotiation=direct` (with `sslmode=require`, `verify-ca` or `verify-full`) to open TLS\n * directly, as libpq does against PostgreSQL 17 or later. It saves a round trip per connection\n * and avoids a Bun 1.4.0–1.4.2 bug that keeps in memory every byte read over a TLS connection\n * negotiated the classic way.\n */\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 /** Concurrent root count/facet calculations per instance; defaults to 1. */\n maxConcurrentAggregates?: 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, QueryPreparationCapableStorage {\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 aiLimits: AiLimitStorage\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 shareGrants: PgShareGrantStorage\n readonly shareSessions: PgShareSessionStorage\n readonly fileUploadSessions: PgFileUploadSessionStorage\n readonly fileDownloadGrants: PgFileDownloadGrantStorage\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 if (\n options.maxConcurrentAggregates !== undefined &&\n (!Number.isSafeInteger(options.maxConcurrentAggregates) ||\n options.maxConcurrentAggregates < 1)\n )\n throw new Error(\"[SixbPg] maxConcurrentAggregates must be a positive integer\")\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 maxConcurrentAggregates: options.maxConcurrentAggregates,\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 = createObjectOperationScope(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.aiLimits = createOperationScopedFacade(stores.aiLimits, 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 this.shareGrants = createOperationScopedFacade(stores.shareGrants, scope)\n this.shareSessions = createOperationScopedFacade(stores.shareSessions, scope)\n this.fileUploadSessions = createOperationScopedFacade(stores.fileUploadSessions, scope)\n this.fileDownloadGrants = createOperationScopedFacade(stores.fileDownloadGrants, 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 await txStorage.aiLimits.settleOperations()\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 async prepareObjectQueries(\n plan: ObjectQueryPreparationPlan\n ): Promise<ObjectQueryPreparationResult> {\n this.assertRootOperationAvailable()\n return preparePgObjectQueries(this.sql, this.schemaName, plan)\n }\n\n /** Build workload-specific indexes concurrently, after migrations, outside transactions. */\n async ensureObjectQueryIndexes(\n indexes: readonly PgObjectQueryIndex[]\n ): Promise<readonly string[]> {\n this.assertRootOperationAvailable()\n return ensurePgObjectQueryIndexes(this.sql, this.schemaName, indexes)\n }\n\n /** Offline maintenance: STORED columns rewrite the objects table before concurrent index builds. */\n async prepareObjectTextCounts(\n indexes: readonly PgObjectTextCountIndex[]\n ): Promise<readonly string[]> {\n this.assertRootOperationAvailable()\n return preparePgObjectTextCounts(this.sql, this.schemaName, indexes)\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; readonly aiLimits: PgAiLimitStorage } {\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 readonly maxConcurrentAggregates?: number\n }\n): PostgresStoreSet {\n const auth = new PgAuthStorage({ sql })\n const shareGrants = new PgShareGrantStorage(sql)\n const shareSessions = new PgShareSessionStorage(sql)\n const executions = new PgExecutionStorage(sql, auth, shareSessions)\n return {\n objects: new PgObjectStorage(sql, options.maxConcurrentAggregates),\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 aiLimits: new PgAiLimitStorage(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 shareGrants,\n shareSessions,\n fileUploadSessions: new PgFileUploadSessionStorage(sql),\n fileDownloadGrants: new PgFileDownloadGrantStorage(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 aiLimits: PgAiLimitStorage\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 readonly shareGrants: PgShareGrantStorage\n readonly shareSessions: PgShareSessionStorage\n readonly fileUploadSessions: PgFileUploadSessionStorage\n readonly fileDownloadGrants: PgFileDownloadGrantStorage\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",
5
+ "/// <reference path=\"./sql.d.ts\" />\n// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\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 createTransactionStorageProxy,\n throwNestedStorageTransaction,\n} from \"@sixb/core/internal/storage\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiLimitStorage,\n type AiUsageStorage,\n type ObjectQueryPreparationPlan,\n type ObjectQueryPreparationResult,\n type ObjectStorage,\n type QueryPreparationCapableStorage,\n StorageTransactionError,\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 { PgObjectStorage } from \"./objects\"\nimport { preparePgObjectQueries } from \"./objects/prepare-queries\"\nimport { ensurePgObjectQueryIndexes, type PgObjectQueryIndex } from \"./objects/query-indexes\"\n\nexport type { PgObjectQueryIndex, PgObjectQueryIndexScope } from \"./objects/query-indexes\"\n\nimport { type PgObjectTextCountIndex, preparePgObjectTextCounts } from \"./objects/text-count-index\"\n\nexport type { PgObjectTextCountIndex } from \"./objects/text-count-index\"\n\nimport { PgOntologyStorage, type PgOntologyTransactionContext } from \"./ontology-storage\"\nimport { PgActionRunStorage } from \"./pg-action-run-storage\"\nimport { PgActivityStorage } from \"./pg-activity-storage\"\nimport { PgAiCostStorage } from \"./pg-ai-cost-storage\"\nimport { PgAiLimitStorage } from \"./pg-ai-limit-storage\"\nimport { PgAiUsageStorage } from \"./pg-ai-usage-storage\"\nimport { PgArtifactStorage } from \"./pg-artifact-storage\"\nimport { createPgClient, type SQL, type SQLClient } from \"./pg-client\"\nimport { PgExecutionStorage } from \"./pg-execution-storage\"\nimport { PgFileDownloadGrantStorage } from \"./pg-file-download-grant-storage\"\nimport { PgFileUploadSessionStorage } from \"./pg-file-upload-session-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 { PgShareGrantStorage } from \"./share-grant-storage\"\nimport { PgShareSessionStorage } from \"./share-session-storage\"\nimport { isRetryableTransactionConflict } from \"./storage-errors\"\nimport { registerPostgresStorageTestingAdapter } from \"./testing\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport interface PostgresStorageOptions {\n /**\n * Full connection string (e.g. DATABASE_URL). Takes precedence over individual fields.\n *\n * Add `sslnegotiation=direct` (with `sslmode=require`, `verify-ca` or `verify-full`) to open TLS\n * directly, as libpq does against PostgreSQL 17 or later. It saves a round trip per connection\n * and avoids a Bun 1.4.0–1.4.2 bug that keeps in memory every byte read over a TLS connection\n * negotiated the classic way.\n */\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 /** Concurrent root count/facet calculations per instance; defaults to 1. */\n maxConcurrentAggregates?: 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, QueryPreparationCapableStorage {\n readonly objects: ObjectStorage\n readonly ontology: PgOntologyStorage\n readonly auth: PgAuthStorage\n readonly executions: PgExecutionStorage\n readonly agents: PgAgentStorage\n readonly artifacts: PgArtifactStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\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 shareGrants: PgShareGrantStorage\n readonly shareSessions: PgShareSessionStorage\n readonly fileUploadSessions: PgFileUploadSessionStorage\n readonly fileDownloadGrants: PgFileDownloadGrantStorage\n readonly activity: PgActivityStorage\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 if (\n options.maxConcurrentAggregates !== undefined &&\n (!Number.isSafeInteger(options.maxConcurrentAggregates) ||\n options.maxConcurrentAggregates < 1)\n )\n throw new Error(\"[SixbPg] maxConcurrentAggregates must be a positive integer\")\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 maxConcurrentAggregates: options.maxConcurrentAggregates,\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 = createObjectOperationScope(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.artifacts = createOperationScopedFacade(stores.artifacts, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.aiCosts = createOperationScopedFacade(stores.aiCosts, scope)\n this.aiLimits = createOperationScopedFacade(stores.aiLimits, 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 this.shareGrants = createOperationScopedFacade(stores.shareGrants, scope)\n this.shareSessions = createOperationScopedFacade(stores.shareSessions, scope)\n this.fileUploadSessions = createOperationScopedFacade(stores.fileUploadSessions, scope)\n this.fileDownloadGrants = createOperationScopedFacade(stores.fileDownloadGrants, scope)\n this.activity = createOperationScopedFacade(stores.activity, 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 await txStorage.aiLimits.settleOperations()\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 async prepareObjectQueries(\n plan: ObjectQueryPreparationPlan\n ): Promise<ObjectQueryPreparationResult> {\n this.assertRootOperationAvailable()\n return preparePgObjectQueries(this.sql, this.schemaName, plan)\n }\n\n /** Build workload-specific indexes concurrently, after migrations, outside transactions. */\n async ensureObjectQueryIndexes(\n indexes: readonly PgObjectQueryIndex[]\n ): Promise<readonly string[]> {\n this.assertRootOperationAvailable()\n return ensurePgObjectQueryIndexes(this.sql, this.schemaName, indexes)\n }\n\n /** Offline maintenance: STORED columns rewrite the objects table before concurrent index builds. */\n async prepareObjectTextCounts(\n indexes: readonly PgObjectTextCountIndex[]\n ): Promise<readonly string[]> {\n this.assertRootOperationAvailable()\n return preparePgObjectTextCounts(this.sql, this.schemaName, indexes)\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; readonly aiLimits: PgAiLimitStorage } {\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 readonly maxConcurrentAggregates?: number\n }\n): PostgresStoreSet {\n const auth = new PgAuthStorage({ sql })\n const shareGrants = new PgShareGrantStorage(sql)\n const shareSessions = new PgShareSessionStorage(sql)\n const executions = new PgExecutionStorage(sql, auth, shareSessions)\n return {\n objects: new PgObjectStorage(sql, options.maxConcurrentAggregates),\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 artifacts: new PgArtifactStorage(sql),\n aiUsage: new PgAiUsageStorage(sql),\n aiCosts: new PgAiCostStorage(sql),\n aiLimits: new PgAiLimitStorage(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 shareGrants,\n shareSessions,\n fileUploadSessions: new PgFileUploadSessionStorage(sql),\n fileDownloadGrants: new PgFileDownloadGrantStorage(sql),\n activity: new PgActivityStorage(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 artifacts: PgArtifactStorage\n readonly aiUsage: PgAiUsageStorage\n readonly aiCosts: PgAiCostStorage\n readonly aiLimits: PgAiLimitStorage\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 readonly shareGrants: PgShareGrantStorage\n readonly shareSessions: PgShareSessionStorage\n readonly fileUploadSessions: PgFileUploadSessionStorage\n readonly fileDownloadGrants: PgFileDownloadGrantStorage\n readonly activity: PgActivityStorage\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
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\nconst PG_CHECKPOINT_RUN_ID_BATCH_SIZE = 10_000\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 async getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]> {\n const runIds = [...new Set(input.runIds)]\n if (runIds.length === 0) return []\n\n const rows: AgentContextCheckpointRow[] = []\n for (let offset = 0; offset < runIds.length; offset += PG_CHECKPOINT_RUN_ID_BATCH_SIZE) {\n const batch = runIds.slice(offset, offset + PG_CHECKPOINT_RUN_ID_BATCH_SIZE)\n const placeholders = batch.map((_, index) => `$${index + 2}`).join(\", \")\n rows.push(\n ...(await this.sql.unsafe<AgentContextCheckpointRow[]>(\n `SELECT * FROM agent_context_checkpoints WHERE project_id = $1 AND created_by_run_id IN (${placeholders})`,\n [input.projectId, ...batch]\n ))\n )\n }\n const byRunId = new Map(\n rows.map((row) => [row.created_by_run_id, rowToContextCheckpointRecord(row)] as const)\n )\n return runIds.flatMap((runId) => {\n const checkpoint = byRunId.get(runId)\n return checkpoint ? [checkpoint] : []\n })\n }\n}\n",
7
7
  "import { createSixbError } from \"@sixb/core/internal/errors\"\n\n// 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` and the server's `severity`; connection-layer failures arrive with porsager's own\n// codes or the socket's system error code.\n\n/** PostgreSQL SQLSTATE for a unique-constraint violation. */\nconst UNIQUE_VIOLATION = \"23505\"\nconst FOREIGN_KEY_VIOLATION = \"23503\"\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\n/**\n * Codes that mean the connection itself is gone, not that a statement failed: porsager's own codes\n * for a connection that closed under a query or that the pool destroyed, and the socket errors a\n * live connection can die with. Connect-time failures (`ECONNREFUSED`, `CONNECT_TIMEOUT`, ...) are\n * left out on purpose: they reject before any session exists, so there is nothing to give up.\n */\nconst CONNECTION_LOST_CODES = new Set([\n \"CONNECTION_CLOSED\",\n \"CONNECTION_DESTROYED\",\n \"ECONNRESET\",\n \"EPIPE\",\n \"ETIMEDOUT\",\n])\n\n/**\n * Codes of a connection that could not be opened: refused, unresolvable, unreachable, or not\n * answered in time. A server that accepts the socket and then refuses the session (too many\n * connections, starting up) answers with a `FATAL` error, which `isConnectionLost` covers.\n */\nconst CONNECT_FAILED_CODES = new Set([\n \"CONNECT_TIMEOUT\",\n \"ECONNREFUSED\",\n \"ENOTFOUND\",\n \"EAI_AGAIN\",\n \"EHOSTUNREACH\",\n \"ENETUNREACH\",\n])\n\n/**\n * The shared lock tables PostgreSQL can fill, keyed by the setting its hint names. Both raise\n * SQLSTATE 53200 (`out_of_memory`) with the message \"out of shared memory\", which reads like the\n * server ran out of RAM; the hint is the only part that says which table filled up.\n */\nconst LOCK_TABLES = [\n {\n setting: \"max_pred_locks_per_transaction\",\n table: \"predicate lock table\",\n note:\n \" A long serializable transaction also keeps the predicate locks of every serializable\" +\n \" transaction that commits while it is open.\",\n },\n { setting: \"max_locks_per_transaction\", table: \"lock table\", note: \"\" },\n] as const\n\nconst OUT_OF_MEMORY = \"53200\"\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/** True when the error is a PostgreSQL foreign-key violation (SQLSTATE 23503). */\nexport function isForeignKeyViolation(error: unknown): boolean {\n return pgErrorCode(error) === FOREIGN_KEY_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 means the session is gone: PostgreSQL has already rolled back its open\n * transaction and released its locks, and nothing more may be sent on that connection.\n *\n * PostgreSQL ends the session after every `FATAL` or `PANIC` error — `pg_terminate_backend` (57P01),\n * a server shutdown (57P02), `idle_in_transaction_session_timeout` (25P03) — so the severity decides\n * rather than a list of SQLSTATEs.\n */\nexport function isConnectionLost(error: unknown): boolean {\n const code = pgErrorCode(error)\n if (code !== undefined && CONNECTION_LOST_CODES.has(code)) {\n return true\n }\n const severity =\n error instanceof Error ? (error as { readonly severity?: unknown }).severity : null\n return severity === \"FATAL\" || severity === \"PANIC\"\n}\n\n/**\n * Replace an error that says something about the database rather than the statement: a lost or\n * unopenable connection becomes the retryable `storage.unavailable`, a full lock table an error\n * naming the table and the setting that sizes it. Every other error is returned unchanged.\n */\nexport function explainPgError(error: unknown): unknown {\n if (isStorageUnavailable(error)) {\n return storageUnavailable(error)\n }\n if (!(error instanceof Error) || pgErrorCode(error) !== OUT_OF_MEMORY) {\n return error\n }\n const hint = (error as { readonly hint?: unknown }).hint\n const lockTable =\n typeof hint === \"string\" ? LOCK_TABLES.find(({ setting }) => hint.includes(setting)) : undefined\n if (!lockTable) {\n return error\n }\n\n const { setting, table, note } = lockTable\n return new Error(\n `[SixbPg] PostgreSQL aborted the transaction because its shared ${table} is full ` +\n `(SQLSTATE 53200 \"${error.message}\"). The table holds ${setting} × (max_connections + ` +\n `max_prepared_transactions) entries shared by all sessions.${note} Raise ${setting} ` +\n \"(applied at server restart) or shorten the transactions that overlap.\",\n { cause: error }\n )\n}\n\nfunction isStorageUnavailable(error: unknown): boolean {\n const code = pgErrorCode(error)\n return isConnectionLost(error) || (code !== undefined && CONNECT_FAILED_CODES.has(code))\n}\n\n/**\n * Whether a lost connection's transaction committed is unknown when the loss interrupted its\n * COMMIT, so the message does not say it rolled back. Retrying is still safe for Sixb's own\n * writes: each is fenced or idempotent.\n */\nfunction storageUnavailable(error: unknown): Error {\n const code = pgErrorCode(error)\n const reason = error instanceof Error ? error.message : String(error)\n return createSixbError(\n \"storage.unavailable\",\n `[SixbPg] PostgreSQL is unavailable: the connection was lost or could not be opened (${code ?? \"no code\"}: ${reason}).`,\n { cause: error, ...(code === undefined ? {} : { details: { code } }) }\n )\n}\n",
8
8
  "import { createHash } from \"node:crypto\"\nimport type { ReservedSQL, SQL, SQLClient } from \"./pg-client\"\nimport { explainPgError, isConnectionLost } from \"./storage-errors\"\n\n// Why transactions are driven here instead of through porsager's `sql.begin`:\n//\n// postgres.js 3.4.9 writes to a connection without checking that its socket is still open. When\n// the server or the network drops a connection during a transaction, `sql.begin` answers the\n// failed statement by sending ROLLBACK on it; the write is deferred to `setImmediate` and throws\n// `null is not an object (evaluating 'socket.write')` there, outside any promise, which kills the\n// process. `reserve().release()` has the matching flaw: it hands the connection back to the pool\n// without looking at it, and the next query sent on it crashes the same way.\n//\n// Holding a reserved connection and sending BEGIN/COMMIT/ROLLBACK ourselves lets us act on the\n// loss first. PostgreSQL has already rolled the transaction back and ended the session, so nothing\n// more is sent on that connection and it is never released: the pool reconnects a closed\n// connection on its own. The upstream fix is porsager/postgres#1209; until a release carries it,\n// a connection that drops *between* two statements still crashes, because nothing reports the loss\n// before the next statement's deferred write.\n\nexport type PgStoreClient = SQL | SQLClient\n\nexport interface RunPgTransactionOptions {\n /** Open the transaction at an explicit isolation; omit for the server default. */\n readonly isolation?: \"repeatableRead\" | \"serializable\"\n}\n\ntype PgTransactionIsolation = \"unverifiedDefault\" | \"repeatableRead\" | \"serializable\"\n\n// The isolation level is folded into `BEGIN` rather than a separate `SET TRANSACTION`: one\n// round-trip instead of two, and the level takes effect before any statement of the transaction.\nconst BEGIN_STATEMENTS: Readonly<Record<PgTransactionIsolation, string>> = {\n unverifiedDefault: \"BEGIN\",\n repeatableRead: \"BEGIN ISOLATION LEVEL REPEATABLE READ\",\n serializable: \"BEGIN ISOLATION LEVEL SERIALIZABLE\",\n}\n\n/** Every client handed to a transaction callback; a reserved connection can never start one. */\nconst pgTransactionClients = new WeakSet<PgStoreClient>()\nconst activePgTransactions = new WeakMap<PgStoreClient, PgTransactionIsolation>()\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 const isolation = options.isolation ?? \"unverifiedDefault\"\n try {\n return await withReservedPgConnection(sql, (tx) => {\n pgTransactionClients.add(tx)\n return runPgTransactionOn(\n tx,\n async () => {\n activePgTransactions.set(tx, isolation)\n try {\n return await run(tx)\n } finally {\n activePgTransactions.delete(tx)\n }\n },\n isolation\n )\n })\n } catch (error) {\n throw explainPgError(error)\n }\n}\n\n/**\n * Hold one pool connection for `run`, or reuse a caller-owned reserved connection.\n * Hand an owned connection back to the pool only while it is still usable.\n * A connection whose session is gone stays out of the pool, which replaces it on its own.\n */\nexport async function withReservedPgConnection<T>(\n sql: SQL | ReservedSQL,\n run: (connection: ReservedSQL) => Promise<T>\n): Promise<T> {\n if (!(\"reserve\" in sql)) return run(sql)\n const connection = await sql.reserve()\n let usable = true\n try {\n return await run(connection)\n } catch (error) {\n usable = !isConnectionLost(error)\n throw error\n } finally {\n if (usable) {\n connection.release()\n }\n }\n}\n\n/**\n * Run `run` inside one transaction on a reserved connection.\n *\n * PostgreSQL answers COMMIT with a `ROLLBACK` tag, not an error, when a statement of the\n * transaction failed and the callback caught that error and carried on. That outcome is surfaced\n * as an error: returning normally would report writes that were discarded.\n */\nexport async function runPgTransactionOn<T>(\n connection: ReservedSQL,\n run: () => Promise<T>,\n isolation: PgTransactionIsolation = \"unverifiedDefault\"\n): Promise<T> {\n await connection.unsafe(BEGIN_STATEMENTS[isolation])\n const result = await undoOnFailure(run, () => connection.unsafe(\"ROLLBACK\"))\n const commit = await connection.unsafe(\"COMMIT\")\n if (commit.command !== \"COMMIT\") {\n throw new Error(\n \"[SixbPg] PostgreSQL rolled the transaction back instead of committing it: a statement in it\" +\n \" failed and its error was caught without being rethrown. A failed statement aborts the\" +\n \" whole transaction, so let its error propagate out of the transaction callback.\"\n )\n }\n return result\n}\n\n/**\n * Run `run`; when it throws, first undo the session state it left on its connection (an open\n * transaction, a session lock), then rethrow. Nothing is undone when the connection itself was lost:\n * the server has already discarded that state, and anything more sent on it would crash\n * postgres.js (see the top of this file).\n */\nexport async function undoOnFailure<T>(\n run: () => Promise<T>,\n undo: () => Promise<unknown>\n): Promise<T> {\n try {\n return await run()\n } catch (error) {\n if (!isConnectionLost(error)) {\n await undo()\n }\n throw error\n }\n}\n\n/**\n * Run a multi-statement read against one proven PostgreSQL snapshot.\n *\n * A provider-owned repeatable-read or serializable transaction may be reused. An external\n * transaction client is rejected because postgres.js does not expose its current isolation.\n */\nexport async function runPgRepeatableReadTransaction<T>(\n sql: PgStoreClient,\n run: (tx: SQLClient) => Promise<T>\n): Promise<T> {\n if (canStartPgTransaction(sql)) {\n return runPgTransaction(sql, run, { isolation: \"repeatableRead\" })\n }\n\n const isolation = activePgTransactions.get(sql)\n if (isolation === \"repeatableRead\" || isolation === \"serializable\") {\n return run(sql)\n }\n\n throw new Error(\n '[SixbPg] Selected object reads cannot join an unverified PostgreSQL transaction. Use storage.transaction(..., { isolation: \"serializable\" }) when reading through tx.objects.'\n )\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\n/** Whether `sql` already runs within a transaction, provider-owned or external. */\nexport function isWithinPgTransaction(sql: PgStoreClient): boolean {\n return !canStartPgTransaction(sql)\n}\n\nexport function canStartPgTransaction(sql: PgStoreClient): sql is SQL {\n return (\n !pgTransactionClients.has(sql) &&\n typeof (sql as { readonly reserve?: unknown }).reserve === \"function\"\n )\n}\n",
@@ -10,7 +10,7 @@
10
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",
11
11
  "import {\n assertAgentRunExecution,\n assertConversationAgentRunSpec,\n assertCreateSubagentRunInput,\n assertSubagentRunResult,\n subagentRunMatchesCreateInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\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 ConversationAgentRunRecord,\n type CreateAgentRunInput,\n type CreateSubagentRunInput,\n type ExecutionStorage,\n type FinishAgentRunInput,\n type FinishQueuedAgentRunInput,\n type ListAgentRunsInput,\n type ListAgentRunsResult,\n type ReclaimAgentRunInput,\n type StartAgentRunInput,\n type SubagentRunRecord,\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<ConversationAgentRunRecord> {\n assertConversationAgentRunSpec(input.spec, \"SixbPg\")\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 })\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 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 kind,\n thread_id,\n trigger_message_id,\n spec,\n status,\n attempt,\n created_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.executionId},\n ${\"conversation\"},\n ${input.threadId},\n ${input.triggerMessageId},\n ${JSON.stringify(input.spec)}::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 const created = rowToRunRecord(row)\n if (created.kind !== \"conversation\") {\n throw new Error(`[SixbPg] Agent run insert '${input.id}' returned the wrong run kind.`)\n }\n return created\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 createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord> {\n assertCreateSubagentRunInput(input, \"SixbPg\")\n const execution = await assertAgentRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n })\n\n try {\n return await runPgTransaction(this.sql, async (tx) => {\n const [parent] = await tx<AgentRunRow[]>`\n SELECT * FROM agent_runs\n WHERE project_id = ${input.projectId} AND id = ${input.parentRunId}\n FOR UPDATE\n `\n if (!parent || parent.kind !== \"conversation\") {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbPg] Parent Agent run '${input.parentRunId}' was not found.`\n )\n }\n\n const [existingRow] = await tx<AgentRunRow[]>`\n SELECT * FROM agent_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n `\n if (existingRow) {\n const existing = rowToRunRecord(existingRow)\n if (subagentRunMatchesCreateInput(existing, input)) return existing\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Subagent run '${input.id}' already exists with different immutable inputs.`\n )\n }\n if (parent.status !== \"running\") {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbPg] Parent Agent run '${parent.id}' is not running (status '${parent.status}').`\n )\n }\n if (\n execution.source.type !== \"execution\" ||\n execution.source.executionId !== parent.execution_id\n ) {\n throw new AgentStorageError(\n \"invalid_input\",\n `[SixbPg] Subagent execution '${execution.id}' is not a child of parent execution '${parent.execution_id}'.`\n )\n }\n if (parent.execution_token !== input.parentExecutionToken) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbPg] Parent Agent run '${parent.id}' is no longer owned by this execution.`\n )\n }\n\n const [countRow] = await tx<{ count: string | number }[]>`\n SELECT COUNT(*)::bigint AS count FROM agent_runs\n WHERE project_id = ${input.projectId}\n AND parent_run_id = ${input.parentRunId}\n AND status IN (${\"queued\"}, ${\"running\"})\n `\n const activeChildren = Number(countRow?.count ?? 0)\n if (activeChildren >= input.maxActiveChildren) {\n throw new AgentStorageError(\n \"active_child_limit\",\n `[SixbPg] Agent run '${parent.id}' already has ${activeChildren} active subagents.`\n )\n }\n\n const [row] = await tx<AgentRunRow[]>`\n INSERT INTO agent_runs (\n project_id, id, execution_id, kind, parent_run_id, spawn_key, spec,\n status, attempt, created_at\n ) VALUES (\n ${input.projectId}, ${input.id}, ${input.executionId}, ${\"subagent\"},\n ${input.parentRunId}, ${input.spawnKey},\n ${JSON.stringify(input.spec)}::text::jsonb,\n ${\"queued\"}, ${0}, ${input.createdAt ?? new Date()}\n )\n RETURNING *\n `\n const created = rowToRunRecord(row)\n if (created.kind !== \"subagent\") {\n throw new Error(`[SixbPg] Subagent insert '${input.id}' returned the wrong run kind.`)\n }\n return created\n })\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbPg] Subagent run '${input.id}' conflicts with an existing durable spawn.`\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 (input.status === \"succeeded\" && run.kind === \"subagent\") {\n assertSubagentRunResult(input.result, run.id, \"SixbPg\")\n }\n if (\n input.status === \"succeeded\" &&\n run.kind === \"conversation\" &&\n input.result !== undefined\n ) {\n throw new AgentStorageError(\n \"invalid_input\",\n `[SixbPg] Conversational Agent run '${run.id}' cannot persist a subagent result.`\n )\n }\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 result = ${input.status === \"succeeded\" && input.result !== undefined ? JSON.stringify(input.result) : null}::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) || input.kinds?.length === 0) {\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.kinds) {\n whereClauses.push(`kind = ANY($${index++}::text[])`)\n params.push(input.kinds as string[])\n }\n\n if (input.threadId) {\n whereClauses.push(`thread_id = $${index++}`)\n params.push(input.threadId)\n }\n\n if (input.parentRunId) {\n whereClauses.push(`parent_run_id = $${index++}`)\n params.push(input.parentRunId)\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 if (run.kind !== \"conversation\") return\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",
12
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",
13
- "import {\n snapshotAgentThreadSandboxParams,\n transitionAgentThreadSandbox,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n AgentStorageError,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type AgentThreadStore,\n type CreateAgentThreadInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n type TransitionAgentThreadSandboxInput,\n} from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"../transactions\"\nimport {\n type AgentRunRow,\n type AgentThreadRow,\n queryAgentList,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nexport class PgAgentThreadStore implements AgentThreadStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async transitionSandbox(\n input: TransitionAgentThreadSandboxInput\n ): Promise<AgentThreadSandboxState> {\n return runPgTransaction(this.sql, async (tx) => {\n // Same lock order as run finalization: run, then thread.\n const runs =\n input.action === \"recreate\"\n ? []\n : await tx<AgentRunRow[]>`\n SELECT * FROM agent_runs WHERE project_id = ${input.projectId} AND id = ${input.runId}\n FOR UPDATE\n `\n const [thread] = await tx<AgentThreadRow[]>`\n SELECT * FROM agent_threads WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n const state = transitionAgentThreadSandbox(\n thread ? rowToThreadRecord(thread) : null,\n runs[0] ? rowToRunRecord(runs[0]) : null,\n input\n )\n await tx`UPDATE agent_threads SET sandbox_state = ${JSON.stringify(state)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}`\n return state\n })\n }\n\n async create(input: CreateAgentThreadInput): Promise<AgentThreadRecord> {\n const sandboxParams =\n input.sandboxParams === undefined\n ? null\n : JSON.stringify(snapshotAgentThreadSandboxParams(input.sandboxParams))\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 owner_principal_type,\n owner_principal_id,\n title,\n sandbox_params,\n status,\n created_at,\n updated_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.ownerPrincipal.type},\n ${input.ownerPrincipal.id},\n ${input.title ?? null},\n ${sandboxParams}::text::jsonb,\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 (input.statuses !== undefined && input.statuses.length === 0) {\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.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 {\n snapshotAgentThreadSandboxParams,\n transitionAgentThreadSandbox,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n AgentStorageError,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type AgentThreadStore,\n type CreateAgentThreadInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n type TransitionAgentThreadSandboxInput,\n} from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { type PgStoreClient, runPgTransaction } from \"../transactions\"\nimport {\n type AgentRunRow,\n type AgentThreadRow,\n queryAgentList,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nexport class PgAgentThreadStore implements AgentThreadStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async transitionSandbox(\n input: TransitionAgentThreadSandboxInput\n ): Promise<AgentThreadSandboxState> {\n return runPgTransaction(this.sql, async (tx) => {\n // Same lock order as run finalization: run, then thread.\n const runs =\n input.action === \"recreate\"\n ? []\n : await tx<AgentRunRow[]>`\n SELECT * FROM agent_runs WHERE project_id = ${input.projectId} AND id = ${input.runId}\n FOR UPDATE\n `\n const [thread] = await tx<AgentThreadRow[]>`\n SELECT * FROM agent_threads WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n const state = transitionAgentThreadSandbox(\n thread ? rowToThreadRecord(thread) : null,\n runs[0] ? rowToRunRecord(runs[0]) : null,\n input\n )\n await tx`UPDATE agent_threads SET sandbox_state = ${JSON.stringify(state)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}`\n return state\n })\n }\n\n async create(input: CreateAgentThreadInput): Promise<AgentThreadRecord> {\n const sandboxParams =\n input.sandboxParams === undefined\n ? null\n : JSON.stringify(snapshotAgentThreadSandboxParams(input.sandboxParams))\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 owner_principal_type,\n owner_principal_id,\n title,\n sandbox_params,\n status,\n created_at,\n updated_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.ownerPrincipal.type},\n ${input.ownerPrincipal.id},\n ${input.title ?? null},\n ${sandboxParams}::text::jsonb,\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 getByIds(params: {\n readonly projectId: string\n readonly ids: readonly string[]\n }): Promise<readonly AgentThreadRecord[]> {\n const ids = [...new Set(params.ids)]\n if (ids.length === 0) {\n return []\n }\n\n const rows = await this.sql<AgentThreadRow[]>`\n SELECT *\n FROM agent_threads\n WHERE project_id = ${params.projectId}\n AND id = ANY(${this.sql.array(ids)}::text[])\n `\n\n const byId = new Map(rows.map((row) => [row.id, row]))\n return ids.flatMap((id) => {\n const row = byId.get(id)\n return row ? [rowToThreadRecord(row)] : []\n })\n }\n\n async list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult> {\n if (input.statuses !== undefined && input.statuses.length === 0) {\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.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",
14
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",
15
15
  "import type {\n AuthStorage,\n CompleteDeviceAuthorizationInput,\n CompleteDeviceAuthorizationResult,\n CompleteMagicLinkSignInInput,\n CompleteOidcSignInInput,\n CompleteSignInResult,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\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 {\n getPgDeviceAuthorizationById,\n PgAuthDeviceAuthorizationStore,\n} from \"./device-authorizations\"\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 readonly deviceAuthorizations: PgAuthDeviceAuthorizationStore\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 this.deviceAuthorizations = new PgAuthDeviceAuthorizationStore(this.sql)\n }\n\n async completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult> {\n return runPgTransaction(this.sql, async (tx) => {\n const authorization = await getPgDeviceAuthorizationById(tx, input.projectId, input.id)\n if (!authorization) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n assertCompletableDeviceAuthorization(authorization, input)\n const session = await createSession(tx, input.session)\n const [consumed] = await tx`\n UPDATE auth_device_authorizations\n SET status = 'consumed', consumed_at = ${input.completedAt}\n WHERE project_id = ${input.projectId} AND id = ${input.id} AND status = 'approved'\n RETURNING *\n `\n if (!consumed) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization was already consumed.\"\n )\n }\n return {\n authorization: {\n ...authorization,\n status: \"consumed\" as const,\n consumedAt: new Date(input.completedAt),\n },\n session,\n }\n })\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 await validateCompleteSessionInput(tx, projectId, input.session)\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.applyGroups(tx, {\n completedAt,\n source: \"manual\",\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 (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 && !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 await validateCompleteSessionInput(tx, projectId, input.session)\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.syncDirectoryGroups(tx, {\n completedAt,\n existing: await this.applyGroups(tx, {\n completedAt,\n source: \"manual\",\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n }),\n groupIds: input.directoryGroupIds,\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 applyGroups(\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 source: GroupMembershipSource\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: input.source,\n createdAt: input.completedAt,\n })\n )\n }\n\n return groupMemberships\n }\n // Directory memberships become exactly `groupIds`. A group the user already holds from another\n // source keeps that source, and memberships from other sources are never removed.\n private async syncDirectoryGroups(\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 if (!input.groupIds) {\n return input.existing\n }\n\n const groupIds = normalizeGroupIds(input.groupIds)\n await sql`\n DELETE FROM auth_group_memberships\n WHERE project_id = ${input.projectId}\n AND user_id = ${input.userId}\n AND source = 'directory'\n ${groupIds.length > 0 ? sql`AND group_id NOT IN ${sql(groupIds)}` : sql``}\n `\n\n return this.applyGroups(sql, { ...input, groupIds, source: \"directory\" })\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, [authLockKey(\"sessions\", input.projectId, input.userId)])\n\n return createSession(sql, {\n id: input.session.id,\n projectId: input.projectId,\n userId: input.userId,\n strategyId: input.strategyId,\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\nfunction assertCompletableDeviceAuthorization(\n authorization: DeviceAuthorizationRecord,\n input: CompleteDeviceAuthorizationInput\n): void {\n if (authorization.deviceCodeHash !== input.deviceCodeHash) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Invalid device authorization.\"\n )\n }\n if (authorization.status === \"pending\") {\n throw new AuthStorageError(\n \"pending_device_authorization\",\n \"[Sixb] Device authorization is pending.\"\n )\n }\n if (authorization.status === \"denied\") {\n throw new AuthStorageError(\n \"device_authorization_denied\",\n \"[Sixb] Device authorization was denied.\"\n )\n }\n if (\n authorization.status !== \"approved\" ||\n authorization.expiresAt <= input.completedAt ||\n !authorization.approvedUserId ||\n !authorization.approvedSessionId ||\n input.session.projectId !== input.projectId ||\n input.session.userId !== authorization.approvedUserId\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization is invalid.\"\n )\n }\n}\n",
16
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.subject.id, \"Access token subject id\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Access token hash\")\n assertKindMatchesSubject(input)\n await this.assertSubjectExists(projectId, input.subject.type, 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.subject.type},\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.subject) {\n whereClauses.push(`subject_type = $${nextIndex++}`, `subject_id = $${nextIndex++}`)\n params.push(input.subject.type, input.subject.id)\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[\"subject\"][\"type\"],\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.subject.type === \"user\") ||\n (input.kind === \"serviceAccount\" && input.subject.type === \"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.subject.type}'.`\n )\n}\n",
@@ -24,10 +24,10 @@
24
24
  "import type {\n AuthOidcAuthorizationAttemptStore,\n CreateOidcAuthorizationAttemptInput,\n OidcAuthorizationAttemptRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { type PgStoreClient, runPgTransaction } from \"../transactions\"\nimport type { PgAuthOidcAttemptRow } from \"./rows\"\nimport { rowToOidcAuthorizationAttemptRecord } from \"./rows\"\nimport {\n assertNonEmpty,\n consumeOidcAttempt,\n getOidcAttemptById,\n getOidcAttemptRowById,\n mapUniqueConstraintError,\n} from \"./shared\"\n\nexport class PgAuthOidcAuthorizationAttemptStore implements AuthOidcAuthorizationAttemptStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(\n input: CreateOidcAuthorizationAttemptInput\n ): Promise<OidcAuthorizationAttemptRecord> {\n const id = assertNonEmpty(input.id, \"OIDC authorization attempt id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const strategyId = assertNonEmpty(input.strategyId, \"Strategy id\")\n const stateHash = assertNonEmpty(input.stateHash, \"OIDC state hash\")\n const nonceHash = assertNonEmpty(input.nonceHash, \"OIDC nonce hash\")\n const codeVerifier = assertNonEmpty(input.codeVerifier, \"OIDC code verifier\")\n\n if (await getOidcAttemptRowById(this.sql, { projectId, id })) {\n throw new AuthStorageError(\n \"duplicate_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' already exists for project '${projectId}'.`\n )\n }\n\n try {\n const [row] = await this.sql<PgAuthOidcAttemptRow[]>`\n INSERT INTO auth_oidc_authorization_attempts (\n project_id,\n id,\n strategy_id,\n state_hash,\n nonce_hash,\n code_verifier,\n return_to,\n created_at,\n expires_at\n ) VALUES (\n ${projectId},\n ${id},\n ${strategyId},\n ${stateHash},\n ${nonceHash},\n ${codeVerifier},\n ${input.returnTo ?? null},\n ${input.createdAt},\n ${input.expiresAt}\n )\n RETURNING *\n `\n\n return rowToOidcAuthorizationAttemptRecord(row)\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' already exists for project '${projectId}'.`\n )\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<OidcAuthorizationAttemptRecord | null> {\n return getOidcAttemptById(this.sql, params)\n }\n\n async consume(params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }): Promise<OidcAuthorizationAttemptRecord> {\n return runPgTransaction(this.sql, (tx) => consumeOidcAttempt(tx, params))\n }\n}\n",
25
25
  "import type {\n AuthServiceAccountGroupMembershipStore,\n ReconcileAuthServiceAccountGroupMembershipsInput,\n ServiceAccountGroupMembershipRecord,\n UpsertAuthServiceAccountGroupMembershipInput,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"../transactions\"\nimport type { PgAuthServiceAccountGroupMembershipRow, PgAuthServiceAccountRow } from \"./rows\"\nimport { rowToServiceAccountGroupMembershipRecord } from \"./rows\"\nimport { assertNonEmpty, dateOrNow } from \"./shared\"\n\nexport class PgAuthServiceAccountGroupMembershipStore\n implements AuthServiceAccountGroupMembershipStore\n{\n constructor(private readonly sql: PgStoreClient) {}\n\n async upsert(\n input: UpsertAuthServiceAccountGroupMembershipInput\n ): Promise<ServiceAccountGroupMembershipRecord> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const serviceAccountId = assertNonEmpty(input.serviceAccountId, \"Service account id\")\n const groupId = assertNonEmpty(input.groupId, \"Group id\")\n const [serviceAccount] = await this.sql<PgAuthServiceAccountRow[]>`\n SELECT *\n FROM auth_service_accounts\n WHERE project_id = ${projectId}\n AND id = ${serviceAccountId}\n `\n if (!serviceAccount) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${serviceAccountId}' not found for project '${projectId}'.`\n )\n }\n\n const [row] = await this.sql<PgAuthServiceAccountGroupMembershipRow[]>`\n INSERT INTO auth_service_account_group_memberships (\n project_id,\n service_account_id,\n group_id,\n source,\n created_at\n ) VALUES (\n ${projectId},\n ${serviceAccountId},\n ${groupId},\n ${input.source},\n ${dateOrNow(input.createdAt)}\n )\n ON CONFLICT (project_id, service_account_id, group_id) DO UPDATE\n SET source = auth_service_account_group_memberships.source\n RETURNING *\n `\n\n return rowToServiceAccountGroupMembershipRecord(row)\n }\n\n async reconcileForServiceAccount(\n input: ReconcileAuthServiceAccountGroupMembershipsInput\n ): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const serviceAccountId = assertNonEmpty(input.serviceAccountId, \"Service account id\")\n const groupIds = [\n ...new Set(input.groupIds.map((groupId) => assertNonEmpty(groupId, \"Group id\"))),\n ]\n const [serviceAccount] = await this.sql<PgAuthServiceAccountRow[]>`\n SELECT *\n FROM auth_service_accounts\n WHERE project_id = ${projectId}\n AND id = ${serviceAccountId}\n `\n if (!serviceAccount) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${serviceAccountId}' not found for project '${projectId}'.`\n )\n }\n\n if (groupIds.length === 0) {\n await this.sql`\n DELETE FROM auth_service_account_group_memberships\n WHERE project_id = ${projectId}\n AND service_account_id = ${serviceAccountId}\n AND source = ${input.source}\n `\n } else {\n await this.sql`\n DELETE FROM auth_service_account_group_memberships\n WHERE project_id = ${projectId}\n AND service_account_id = ${serviceAccountId}\n AND source = ${input.source}\n AND group_id NOT IN ${this.sql(groupIds)}\n `\n }\n\n const updatedAt = dateOrNow(input.updatedAt)\n for (const groupId of groupIds) {\n await this.sql<PgAuthServiceAccountGroupMembershipRow[]>`\n INSERT INTO auth_service_account_group_memberships (\n project_id,\n service_account_id,\n group_id,\n source,\n created_at\n ) VALUES (\n ${projectId},\n ${serviceAccountId},\n ${groupId},\n ${input.source},\n ${updatedAt}\n )\n ON CONFLICT (project_id, service_account_id, group_id) DO UPDATE\n SET source = EXCLUDED.source\n `\n }\n\n return this.listForServiceAccount({ projectId, serviceAccountId })\n }\n\n async listForServiceAccount(params: {\n readonly projectId: string\n readonly serviceAccountId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const rows = await this.sql<PgAuthServiceAccountGroupMembershipRow[]>`\n SELECT *\n FROM auth_service_account_group_memberships\n WHERE project_id = ${params.projectId}\n AND service_account_id = ${params.serviceAccountId}\n ORDER BY group_id ASC\n `\n\n return rows.map(rowToServiceAccountGroupMembershipRecord)\n }\n\n async listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const rows = await this.sql<PgAuthServiceAccountGroupMembershipRow[]>`\n SELECT *\n FROM auth_service_account_group_memberships\n WHERE project_id = ${params.projectId}\n AND group_id = ${params.groupId}\n ORDER BY service_account_id ASC\n `\n\n return rows.map(rowToServiceAccountGroupMembershipRecord)\n }\n}\n",
26
26
  "import type {\n AuthServiceAccountStore,\n CreateAuthServiceAccountInput,\n ListAuthServiceAccountsInput,\n ListAuthServiceAccountsResult,\n ServiceAccountRecord,\n UpdateAuthServiceAccountInput,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"../transactions\"\nimport type { PgAuthServiceAccountRow } from \"./rows\"\nimport { rowToServiceAccountRecord } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n dateOrNow,\n hasEmptyFilter,\n mapUniqueConstraintError,\n type PgValue,\n} from \"./shared\"\n\nexport class PgAuthServiceAccountStore implements AuthServiceAccountStore {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateAuthServiceAccountInput): Promise<ServiceAccountRecord> {\n const id = assertNonEmpty(input.id, \"Service account id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Service account name\")\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<PgAuthServiceAccountRow[]>`\n INSERT INTO auth_service_accounts (\n project_id,\n id,\n name,\n description,\n status,\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 updated_at\n ) VALUES (\n ${projectId},\n ${id},\n ${name},\n ${input.description ?? null},\n ${input.status ?? \"active\"},\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 ${createdAt},\n ${updatedAt}\n )\n RETURNING *\n `\n\n return rowToServiceAccountRecord(row)\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_service_account\",\n `[Sixb] Service account '${id}' already exists for project '${projectId}'.`\n )\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ServiceAccountRecord | null> {\n const [row] = await this.sql<PgAuthServiceAccountRow[]>`\n SELECT *\n FROM auth_service_accounts\n WHERE project_id = ${params.projectId}\n AND id = ${params.id}\n `\n return row ? rowToServiceAccountRecord(row) : null\n }\n\n async update(input: UpdateAuthServiceAccountInput): Promise<ServiceAccountRecord> {\n const id = assertNonEmpty(input.id, \"Service account id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const updatedAt = dateOrNow(input.updatedAt)\n const name =\n input.name === undefined ? null : assertNonEmpty(input.name, \"Service account name\")\n const [row] = await this.sql<PgAuthServiceAccountRow[]>`\n UPDATE auth_service_accounts\n SET name = COALESCE(${name}, name),\n description = COALESCE(${input.description ?? null}, description),\n status = COALESCE(${input.status ?? null}, status),\n updated_at = ${updatedAt}\n WHERE project_id = ${projectId}\n AND id = ${id}\n RETURNING *\n `\n if (!row) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${id}' not found for project '${projectId}'.`\n )\n }\n\n return rowToServiceAccountRecord(row)\n }\n\n async list(input: ListAuthServiceAccountsInput): Promise<ListAuthServiceAccountsResult> {\n if (hasEmptyFilter(input.statuses)) {\n return { serviceAccounts: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = $1\"]\n const params: PgValue[] = [input.projectId]\n let nextIndex = 2\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 === \"desc\" ? \"DESC\" : \"ASC\"\n const [totalRow] = await this.sql.unsafe<{ readonly count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM auth_service_accounts ${where}`,\n [...params]\n )\n const queryParams = [...params]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_service_accounts\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<PgAuthServiceAccountRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n\n return {\n serviceAccounts: rows.map(rowToServiceAccountRecord),\n hasMore: input.limit === undefined ? false : (input.offset ?? 0) + input.limit < total,\n total,\n }\n }\n}\n",
27
- "import type {\n AuthSessionStore,\n CreateAuthSessionInput,\n RotateSessionRefreshTokenResult,\n SessionRecord,\n} 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 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 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.refresh_token_hash !== null ||\n row.token_hash !== params.tokenHash ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = await getSessionRowById(this.sql, params)\n if (\n !row ||\n row.access_expires_at === null ||\n row.token_hash !== params.tokenHash ||\n new Date(row.access_expires_at) <= params.now ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async rotateRefreshToken(\n params: Parameters<AuthSessionStore[\"rotateRefreshToken\"]>[0]\n ): Promise<RotateSessionRefreshTokenResult> {\n return runPgTransaction(this.sql, async (tx): Promise<RotateSessionRefreshTokenResult> => {\n const row = await getSessionRowById(tx, params, { forUpdate: true })\n if (!row?.refresh_token_hash || !isLiveSessionRow(row, params.now)) {\n return { status: \"invalid\" }\n }\n\n const replacedRecently =\n row.previous_refresh_token_hash === params.refreshTokenHash &&\n row.refreshed_at !== null &&\n params.now.getTime() - new Date(row.refreshed_at).getTime() <= params.reuseGraceMs\n if (row.refresh_token_hash !== params.refreshTokenHash && !replacedRecently) {\n if (row.previous_refresh_token_hash !== params.refreshTokenHash) {\n return { status: \"invalid\" }\n }\n await tx`\n UPDATE auth_sessions SET revoked_at = ${params.now}\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n return { status: \"reused\" }\n }\n\n const [rotated] = await tx<PgAuthSessionRow[]>`\n UPDATE auth_sessions\n SET token_hash = ${params.next.tokenHash},\n access_expires_at = ${params.next.accessExpiresAt},\n previous_refresh_token_hash = refresh_token_hash,\n refresh_token_hash = ${params.next.refreshTokenHash},\n refreshed_at = ${params.now},\n last_seen_at = ${params.now},\n expires_at = GREATEST(\n expires_at,\n LEAST(${params.next.expiresAt}, COALESCE(absolute_expires_at, ${params.next.expiresAt}))\n )\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n RETURNING *\n `\n return rotated\n ? { status: \"rotated\", session: rowToSessionRecord(rotated) }\n : { status: \"invalid\" }\n })\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\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 token_hash = ${params.tokenHash}\n AND refresh_token_hash IS NULL\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 revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return runPgTransaction(this.sql, async (tx) => {\n await lockAdvisoryKeys(tx, [authLockKey(\"sessions\", params.projectId, params.userId)])\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\nfunction isLiveSessionRow(row: PgAuthSessionRow, now: Date): boolean {\n return (\n row.revoked_at === null &&\n new Date(row.expires_at) > now &&\n (row.absolute_expires_at === null || new Date(row.absolute_expires_at) > now)\n )\n}\n",
27
+ "import type {\n AuthSessionStore,\n CreateAuthSessionInput,\n ListAuthSessionsInput,\n ListAuthSessionsResult,\n RotateSessionRefreshTokenResult,\n SessionRecord,\n} 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 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 listByUserId(params: ListAuthSessionsInput): Promise<ListAuthSessionsResult> {\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 ${params.before ? this.sql`AND created_at <= ${params.before.createdAt}` : this.sql``}\n ORDER BY created_at DESC, id DESC\n LIMIT ${params.limit + 1}\n OFFSET ${params.before?.skip ?? 0}\n `) as PgAuthSessionRow[]\n\n return {\n sessions: rows.slice(0, params.limit).map(rowToSessionRecord),\n hasMore: rows.length > params.limit,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\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.refresh_token_hash !== null ||\n row.token_hash !== params.tokenHash ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = await getSessionRowById(this.sql, params)\n if (\n !row ||\n row.access_expires_at === null ||\n row.token_hash !== params.tokenHash ||\n new Date(row.access_expires_at) <= params.now ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async rotateRefreshToken(\n params: Parameters<AuthSessionStore[\"rotateRefreshToken\"]>[0]\n ): Promise<RotateSessionRefreshTokenResult> {\n return runPgTransaction(this.sql, async (tx): Promise<RotateSessionRefreshTokenResult> => {\n const row = await getSessionRowById(tx, params, { forUpdate: true })\n if (!row?.refresh_token_hash || !isLiveSessionRow(row, params.now)) {\n return { status: \"invalid\" }\n }\n\n const replacedRecently =\n row.previous_refresh_token_hash === params.refreshTokenHash &&\n row.refreshed_at !== null &&\n params.now.getTime() - new Date(row.refreshed_at).getTime() <= params.reuseGraceMs\n if (row.refresh_token_hash !== params.refreshTokenHash && !replacedRecently) {\n if (row.previous_refresh_token_hash !== params.refreshTokenHash) {\n return { status: \"invalid\" }\n }\n await tx`\n UPDATE auth_sessions SET revoked_at = ${params.now}\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n return { status: \"reused\" }\n }\n\n const [rotated] = await tx<PgAuthSessionRow[]>`\n UPDATE auth_sessions\n SET token_hash = ${params.next.tokenHash},\n access_expires_at = ${params.next.accessExpiresAt},\n previous_refresh_token_hash = refresh_token_hash,\n refresh_token_hash = ${params.next.refreshTokenHash},\n refreshed_at = ${params.now},\n last_seen_at = ${params.now},\n expires_at = GREATEST(\n expires_at,\n LEAST(${params.next.expiresAt}, COALESCE(absolute_expires_at, ${params.next.expiresAt}))\n )\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n RETURNING *\n `\n return rotated\n ? { status: \"rotated\", session: rowToSessionRecord(rotated) }\n : { status: \"invalid\" }\n })\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\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 token_hash = ${params.tokenHash}\n AND refresh_token_hash IS NULL\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 revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return runPgTransaction(this.sql, async (tx) => {\n await lockAdvisoryKeys(tx, [authLockKey(\"sessions\", params.projectId, params.userId)])\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\nfunction isLiveSessionRow(row: PgAuthSessionRow, now: Date): boolean {\n return (\n row.revoked_at === null &&\n new Date(row.expires_at) > now &&\n (row.absolute_expires_at === null || new Date(row.absolute_expires_at) > now)\n )\n}\n",
28
28
  "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",
29
29
  "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 ${record.codeVerifier === undefined ? null : 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 listPendingConnectionRuns(): Promise<readonly ConnectorConnectionRunRecord[]> {\n if (!this.scope.connectorId) return []\n const rows = await this.sql<PgConnectionRunRow[]>`\n SELECT * FROM connector_connection_runs\n WHERE project_id = ${this.scope.projectId} AND connector_id = ${this.scope.connectorId}\n AND (status = 'running' OR (status = 'waiting' AND waiting_for = 'account_selection'))\n `\n return rows.map(connectionRunFromRow)\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 ...(row.code_verifier === null ? {} : { 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: NonNullable<ConnectorAuthorizationAttemptRecord[\"codeVerifier\"]> | null\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",
30
- "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 modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/039-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\nimport projectionRunSupersessionSql from \"./migrations/051-projection-run-supersession.sql\" with {\n type: \"text\",\n}\nimport compactSourceStorageSql from \"./migrations/052-compact-source-storage.sql\" with {\n type: \"text\",\n}\nimport replacementPlansSql from \"./migrations/053-replacement-plans.sql\" with { type: \"text\" }\nimport slimOntologyOutboxSql from \"./migrations/054-slim-ontology-outbox.sql\" with { type: \"text\" }\nimport objectQueryPreparationSql from \"./migrations/055-object-query-preparation.sql\" with {\n type: \"text\",\n}\nimport commitTouchesSql from \"./migrations/056-commit-touches.sql\" with { type: \"text\" }\nimport audioTranscriptionSql from \"./migrations/057-audio-transcription.sql\" with { type: \"text\" }\nimport rerankingModelKindSql from \"./migrations/058-reranking-model-kind.sql\" with { type: \"text\" }\nimport type { ReservedSQL, SQL, SQLClient } from \"./pg-client\"\nimport { runPgTransactionOn, undoOnFailure, withReservedPgConnection } from \"./transactions\"\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: ReservedSQL,\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 // `.begin` would open the transaction on another pool connection, so drive it on this one\n // and route exec()/markStarted()/markApplied() through it via `active`.\n const previous = active\n active = sql\n try {\n return await runPgTransactionOn(sql, async () => {\n await sql.unsafe(`SET LOCAL search_path TO ${schema}`)\n return run()\n })\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: ReservedSQL) => Promise<T>\n): Promise<T> {\n const [first, second] = advisoryLockParts(\n `storage:migration:${params.schemaName}:${params.migrations.adapterId}`\n )\n\n // A session-level lock outlives any transaction, so it is released before the connection goes\n // back to the pool — except when the connection was lost, which already released it.\n return withReservedPgConnection(params.sql, async (sql) => {\n const unlock = () => sql`SELECT pg_advisory_unlock(${first}, ${second})`\n await sql`SELECT pg_advisory_lock(${first}, ${second})`\n const result = await undoOnFailure(() => run(sql), unlock)\n await unlock()\n return result\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 pgSql(\"029-model-accounting\", modelAccountingSql),\n pgSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n pgSql(\"031-subagent-runs\", subagentRunsSql),\n pgSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n pgSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n pgSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n pgSql(\"035-share-grants\", shareGrantsSql),\n pgSql(\"036-share-sessions\", shareSessionsSql),\n pgSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n pgSql(\"038-outbox-publication-order\", outboxPublicationOrderSql),\n pgSql(\"039-projection-source-roots\", projectionSourceRootsSql),\n pgSql(\"040-connector-optional-pkce\", connectorOptionalPkceSql),\n pgSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n pgSql(\"042-vector-profiles\", vectorProfilesSql),\n pgSql(\"043-vector-indexing\", vectorIndexingSql),\n pgSql(\"044-vector-batching\", vectorBatchingSql),\n pgSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n pgSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n pgSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n pgSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n pgSql(\"049-native-sessions\", nativeSessionsSql),\n pgSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n pgSql(\"051-projection-run-supersession\", projectionRunSupersessionSql),\n pgSql(\"052-compact-source-storage\", compactSourceStorageSql),\n pgSql(\"053-replacement-plans\", replacementPlansSql),\n pgSql(\"054-slim-ontology-outbox\", slimOntologyOutboxSql),\n pgSql(\"055-object-query-preparation\", objectQueryPreparationSql),\n pgSql(\"056-commit-touches\", commitTouchesSql),\n pgSql(\"057-audio-transcription\", audioTranscriptionSql),\n pgSql(\"058-reranking-model-kind\", rerankingModelKindSql),\n pgSql(\"059-file-download-grants\", fileDownloadGrantsSql),\n pgSql(\"060-drained-source-versions\", drainedSourceVersionsSql),\n pgSql(\"061-terminal-action-runs\", terminalActionRunsSql),\n pgSql(\"062-drop-auth-audience\", dropAuthAudienceSql),\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\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/038-outbox-publication-order.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/040-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\nimport fileDownloadGrantsSql from \"./migrations/059-file-download-grants.sql\" with { type: \"text\" }\nimport drainedSourceVersionsSql from \"./migrations/060-drained-source-versions.sql\" with {\n type: \"text\",\n}\nimport terminalActionRunsSql from \"./migrations/061-terminal-action-runs.sql\" with { type: \"text\" }\nimport dropAuthAudienceSql from \"./migrations/062-drop-auth-audience.sql\" with { type: \"text\" }\n",
30
+ "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 modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/039-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\nimport projectionRunSupersessionSql from \"./migrations/051-projection-run-supersession.sql\" with {\n type: \"text\",\n}\nimport compactSourceStorageSql from \"./migrations/052-compact-source-storage.sql\" with {\n type: \"text\",\n}\nimport replacementPlansSql from \"./migrations/053-replacement-plans.sql\" with { type: \"text\" }\nimport slimOntologyOutboxSql from \"./migrations/054-slim-ontology-outbox.sql\" with { type: \"text\" }\nimport objectQueryPreparationSql from \"./migrations/055-object-query-preparation.sql\" with {\n type: \"text\",\n}\nimport commitTouchesSql from \"./migrations/056-commit-touches.sql\" with { type: \"text\" }\nimport audioTranscriptionSql from \"./migrations/057-audio-transcription.sql\" with { type: \"text\" }\nimport rerankingModelKindSql from \"./migrations/058-reranking-model-kind.sql\" with { type: \"text\" }\nimport type { ReservedSQL, SQL, SQLClient } from \"./pg-client\"\nimport { runPgTransactionOn, undoOnFailure, withReservedPgConnection } from \"./transactions\"\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: ReservedSQL,\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 // `.begin` would open the transaction on another pool connection, so drive it on this one\n // and route exec()/markStarted()/markApplied() through it via `active`.\n const previous = active\n active = sql\n try {\n return await runPgTransactionOn(sql, async () => {\n await sql.unsafe(`SET LOCAL search_path TO ${schema}`)\n return run()\n })\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: ReservedSQL) => Promise<T>\n): Promise<T> {\n const [first, second] = advisoryLockParts(\n `storage:migration:${params.schemaName}:${params.migrations.adapterId}`\n )\n\n // A session-level lock outlives any transaction, so it is released before the connection goes\n // back to the pool — except when the connection was lost, which already released it.\n return withReservedPgConnection(params.sql, async (sql) => {\n const unlock = () => sql`SELECT pg_advisory_unlock(${first}, ${second})`\n await sql`SELECT pg_advisory_lock(${first}, ${second})`\n const result = await undoOnFailure(() => run(sql), unlock)\n await unlock()\n return result\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 pgSql(\"029-model-accounting\", modelAccountingSql),\n pgSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n pgSql(\"031-subagent-runs\", subagentRunsSql),\n pgSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n pgSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n pgSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n pgSql(\"035-share-grants\", shareGrantsSql),\n pgSql(\"036-share-sessions\", shareSessionsSql),\n pgSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n pgSql(\"038-outbox-publication-order\", outboxPublicationOrderSql),\n pgSql(\"039-projection-source-roots\", projectionSourceRootsSql),\n pgSql(\"040-connector-optional-pkce\", connectorOptionalPkceSql),\n pgSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n pgSql(\"042-vector-profiles\", vectorProfilesSql),\n pgSql(\"043-vector-indexing\", vectorIndexingSql),\n pgSql(\"044-vector-batching\", vectorBatchingSql),\n pgSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n pgSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n pgSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n pgSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n pgSql(\"049-native-sessions\", nativeSessionsSql),\n pgSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n pgSql(\"051-projection-run-supersession\", projectionRunSupersessionSql),\n pgSql(\"052-compact-source-storage\", compactSourceStorageSql),\n pgSql(\"053-replacement-plans\", replacementPlansSql),\n pgSql(\"054-slim-ontology-outbox\", slimOntologyOutboxSql),\n pgSql(\"055-object-query-preparation\", objectQueryPreparationSql),\n pgSql(\"056-commit-touches\", commitTouchesSql),\n pgSql(\"057-audio-transcription\", audioTranscriptionSql),\n pgSql(\"058-reranking-model-kind\", rerankingModelKindSql),\n pgSql(\"059-file-download-grants\", fileDownloadGrantsSql),\n pgSql(\"060-drained-source-versions\", drainedSourceVersionsSql),\n pgSql(\"061-terminal-action-runs\", terminalActionRunsSql),\n pgSql(\"062-drop-auth-audience\", dropAuthAudienceSql),\n pgSql(\"063-artifacts\", artifactsSql),\n pgSql(\"064-drop-output-diagnostics\", dropOutputDiagnosticsSql),\n pgSql(\"065-plan-work-payload-statistics\", planWorkPayloadStatisticsSql),\n pgSql(\"066-activity\", activitySql),\n pgSql(\"067-activity-timeline\", activityTimelineSql),\n pgSql(\"068-activity-interactions\", activityInteractionsSql),\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\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/038-outbox-publication-order.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/040-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\nimport fileDownloadGrantsSql from \"./migrations/059-file-download-grants.sql\" with { type: \"text\" }\nimport drainedSourceVersionsSql from \"./migrations/060-drained-source-versions.sql\" with {\n type: \"text\",\n}\nimport terminalActionRunsSql from \"./migrations/061-terminal-action-runs.sql\" with { type: \"text\" }\nimport dropAuthAudienceSql from \"./migrations/062-drop-auth-audience.sql\" with { type: \"text\" }\nimport artifactsSql from \"./migrations/063-artifacts.sql\" with { type: \"text\" }\nimport dropOutputDiagnosticsSql from \"./migrations/064-drop-output-diagnostics.sql\" with {\n type: \"text\",\n}\nimport planWorkPayloadStatisticsSql from \"./migrations/065-plan-work-payload-statistics.sql\" with {\n type: \"text\",\n}\nimport activitySql from \"./migrations/066-activity.sql\" with { type: \"text\" }\nimport activityTimelineSql from \"./migrations/067-activity-timeline.sql\" with { type: \"text\" }\nimport activityInteractionsSql from \"./migrations/068-activity-interactions.sql\" with {\n type: \"text\",\n}\n",
31
31
  "import { hasVectorProfile } from \"@sixb/core/internal/query\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkBatchKey,\n LinkDirection,\n ObjectBatchKey,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n ObjectRow,\n ObjectStorage,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"@sixb/core/storage\"\nimport type { SQLClient, SqlParameter } from \"../pg-client\"\nimport {\n canStartPgTransaction,\n type PgStoreClient,\n runPgRepeatableReadTransaction,\n} from \"../transactions\"\nimport { PgAggregateAdmission } from \"./aggregate-admission\"\nimport { DEFAULT_OBJECT_QUERY_SOURCE } from \"./query-compiler\"\nimport { assertLinkQueryLimit, PgObjectReader } from \"./reader\"\nimport {\n type LinkDatabaseRow,\n linkIdentity,\n type ObjectDatabaseRow,\n rowToLink,\n rowToObject,\n} from \"./rows\"\nimport { createPgSelectedReader } from \"./selected-reader\"\n\nconst PG_OBJECT_QUERY_CAPABILITIES: ObjectQueryCapabilities = {\n queryObjects: true,\n countObjects: true,\n existsObjects: true,\n facetObjects: true,\n nodes: {\n start: true,\n refs: true,\n filter: true,\n text: true,\n vector: true,\n sort: true,\n limit: true,\n page: true,\n traverse: true,\n set: true,\n project: true,\n expand: true,\n },\n predicateOps: {\n and: true,\n or: true,\n not: true,\n eq: true,\n neq: true,\n lt: true,\n lte: true,\n gt: true,\n gte: true,\n in: true,\n exists: true,\n contains: true,\n },\n sortKinds: {\n property: true,\n },\n traversalDirections: {\n outgoing: true,\n incoming: true,\n },\n setOps: {\n union: true,\n intersect: true,\n subtract: true,\n },\n scalarOperations: {\n string: { equality: true, ordering: true },\n uuid: { equality: true, ordering: true },\n boolean: { equality: true },\n integer: { equality: true, ordering: true },\n double: { equality: true, ordering: true },\n decimal: { equality: true, ordering: true },\n date: { equality: true, ordering: true },\n timestamp: { equality: true, ordering: true },\n // jsonb equality and containment compare both fields of `{ type, id }`, whatever key order.\n userRef: { equality: true },\n },\n limits: {\n totalCount: true,\n stablePageTokens: true,\n },\n notes: [\n \"PostgreSQL object query pushdown supports start/refs/filter/text/sort/limit/page/traverse/set/project/expand over JSONB properties and object links.\",\n \"expand hydrates linked objects in-database (top-N per parent via LATERAL + jsonb_agg); core resolves each expansion's cardinality before pushdown, and a mixed/unresolved one stays on the fallback.\",\n \"Exact decimal predicates, ordering, and keyset pagination use PostgreSQL numeric casts.\",\n \"Relevance sorting and unresolved start.includeSubtypes remain planner fallback or rejection cases.\",\n ],\n}\n\n/** PostgreSQL object provider; interactive reads share one source-aware reader. */\nexport class PgObjectStorage implements ObjectStorage {\n private readonly reader: PgObjectReader\n\n constructor(\n private readonly sql: PgStoreClient,\n maxConcurrentAggregates = 1\n ) {\n this.reader = new PgObjectReader(\n sql,\n DEFAULT_OBJECT_QUERY_SOURCE,\n canStartPgTransaction(sql) ? new PgAggregateAdmission(maxConcurrentAggregates) : undefined\n )\n }\n\n queryCapabilities(): ObjectQueryCapabilities {\n return PG_OBJECT_QUERY_CAPABILITIES\n }\n\n createSelectedReadScope(params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n }): ObjectReadStorage {\n return createPgSelectedReader(this.sql, params, () => this.queryCapabilities())\n }\n\n async queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult> {\n if (hasVectorProfile(params.query))\n return runPgRepeatableReadTransaction(this.sql, (tx) =>\n new PgObjectReader(tx, DEFAULT_OBJECT_QUERY_SOURCE).queryObjects(params)\n )\n return this.reader.queryObjects(params)\n }\n\n async countObjects(params: CountObjectsInput): Promise<CountObjectsResult> {\n if (hasVectorProfile(params.query))\n return runPgRepeatableReadTransaction(this.sql, (tx) =>\n new PgObjectReader(tx, DEFAULT_OBJECT_QUERY_SOURCE).countObjects(params)\n )\n return this.reader.countObjects(params)\n }\n\n async existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult> {\n if (hasVectorProfile(params.query))\n return runPgRepeatableReadTransaction(this.sql, (tx) =>\n new PgObjectReader(tx, DEFAULT_OBJECT_QUERY_SOURCE).existsObjects(params)\n )\n return this.reader.existsObjects(params)\n }\n\n async facetObjects(params: FacetObjectsInput): Promise<FacetObjectsResult> {\n if (hasVectorProfile(params.query))\n return runPgRepeatableReadTransaction(this.sql, (tx) =>\n new PgObjectReader(tx, DEFAULT_OBJECT_QUERY_SOURCE).facetObjects(params)\n )\n return this.reader.facetObjects(params)\n }\n\n async getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): Promise<ObjectRow | null> {\n return this.reader.getByPrimaryId(params)\n }\n\n async selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): Promise<readonly boolean[]> {\n return this.reader.selectsObjectProperties(params)\n }\n\n async listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): Promise<readonly ObjectLinkRow[]> {\n return this.reader.listLinks(params)\n }\n\n async getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Promise<Map<ObjectBatchKey, ObjectRow>> {\n return this.reader.getByPrimaryIdBatch(params)\n }\n\n async listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Promise<Map<LinkBatchKey, ObjectLinkRow[]>> {\n return this.reader.listLinksBatch(params)\n }\n\n async queryLinks(params: QueryObjectLinksInput): Promise<QueryObjectLinksResult> {\n assertLinkQueryLimit(params.limit)\n return this.reader.queryLinks(params)\n }\n\n async listIncidentLinksBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; objectId: string }[]\n }): Promise<readonly ObjectLinkRow[]> {\n if (params.items.length === 0) return []\n const tuples = params.items.map((item) => [item.objectTypeId, item.objectId])\n\n // Cover both link directions with two index-friendly equality joins (source-side, then\n // target-side) rather than a single OR-join, which would defeat index usage. This is a constant\n // number of round trips regardless of the requested object count. They are issued sequentially\n // because callers may run on a serializable transaction's single connection. A link incident to\n // two listed objects matches both halves and is de-duplicated below.\n const sourceRows = await valuesJoin<LinkDatabaseRow>(\n this.sql,\n \"SELECT l.* FROM links l\",\n [\"source_type_id\", \"source_id\"],\n tuples,\n \"WHERE l.project_id = $1\",\n [params.projectId]\n )\n const targetRows = await valuesJoin<LinkDatabaseRow>(\n this.sql,\n \"SELECT l.* FROM links l\",\n [\"target_type_id\", \"target_id\"],\n tuples,\n \"WHERE l.project_id = $1\",\n [params.projectId]\n )\n\n const deduped = new Map<string, ObjectLinkRow>()\n for (const row of [...sourceRows, ...targetRows]) {\n const link = rowToLink(row)\n deduped.set(linkIdentity(link), link)\n }\n return [...deduped.values()]\n }\n\n async listByPrimaryIdPage(params: {\n projectId: string\n objectTypeId: string\n afterPrimaryId?: string\n limit: number\n }): Promise<{ objects: readonly ObjectRow[]; nextPrimaryId?: string }> {\n assertReconciliationPageLimit(params.limit)\n const rows = await this.sql<ObjectDatabaseRow[]>`\n SELECT * FROM objects\n WHERE project_id = ${params.projectId}\n AND object_type_id = ${params.objectTypeId}\n ${params.afterPrimaryId ? this.sql`AND primary_id > ${params.afterPrimaryId}` : this.sql``}\n ORDER BY primary_id ASC\n LIMIT ${params.limit + 1}\n `\n const hasMore = rows.length > params.limit\n const objects = rows.slice(0, params.limit).map((row) => rowToObject(row))\n const last = objects.at(-1)\n return {\n objects,\n ...(hasMore && last ? { nextPrimaryId: last.primaryId } : {}),\n }\n }\n\n async list(params: {\n projectId: string\n objectTypeId?: string | readonly string[]\n primaryIdPrefix?: string\n primaryIdSuffix?: string\n updatedAfter?: Date\n updatedBefore?: Date\n createdAfter?: Date\n createdBefore?: Date\n limit?: number\n offset?: number\n orderBy?: \"createdAt\" | \"updatedAt\" | \"primaryId\"\n order?: \"asc\" | \"desc\"\n }): Promise<{ objects: readonly ObjectRow[]; hasMore: boolean; total: number }> {\n return this.reader.list(params)\n }\n}\n\n/**\n * Build a `SELECT ... JOIN (VALUES ...) AS t(...) ON ... WHERE ...` query\n * with positional parameters. Bun SQL's tagged-template helpers don't\n * support VALUES inside SELECT/JOIN, so we construct the query string\n * manually while keeping all user data in the parameter array.\n */\nfunction valuesJoin<Row = unknown>(\n sql: SQLClient,\n select: string,\n columns: string[],\n tuples: unknown[][],\n where: string,\n whereParams: unknown[]\n): Promise<Row[]> {\n const alias = \"t\"\n const colWidth = columns.length\n\n // $1 … $N are reserved for the WHERE params that come first.\n const base = whereParams.length\n const valuePlaceholders = tuples\n .map((_, i) => {\n const cols = columns.map((_, j) => `$${base + i * colWidth + j + 1}`)\n return `(${cols.join(\",\")})`\n })\n .join(\",\")\n\n const onClause = columns\n .map((c) => {\n // Infer the table alias from the SELECT clause (first word after SELECT ... FROM)\n const srcAlias = select.match(/FROM\\s+\\w+\\s+(\\w+)/i)?.[1] ?? select.split(\" \").pop()\n return `${srcAlias}.${c} = ${alias}.${c}`\n })\n .join(\" AND \")\n\n const query = `${select} JOIN (VALUES ${valuePlaceholders}) AS ${alias}(${columns.join(\",\")}) ON ${onClause} ${where}`\n const params = [...whereParams, ...tuples.flat()]\n\n return sql.unsafe(query, params as SqlParameter[]) as unknown as Promise<Row[]>\n}\n\nfunction assertReconciliationPageLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object reconciliation page limit must be a positive safe integer.\")\n }\n}\n",
32
32
  "/** Limit expensive root aggregates before they reserve a database connection. Pages can\n * use the remaining pool capacity. No results or object revisions are retained here. */\nexport class PgAggregateAdmission {\n private active = 0\n private readonly waiting: (() => void)[] = []\n\n constructor(private readonly concurrency = 1) {}\n\n async run<T>(compute: () => Promise<T>): Promise<T> {\n if (this.active >= this.concurrency)\n await new Promise<void>((resolve) => this.waiting.push(resolve))\n else this.active++\n try {\n return await compute()\n } finally {\n const next = this.waiting.shift()\n if (next) next()\n else this.active--\n }\n }\n}\n",
33
33
  "import {\n type ObjectExpansion,\n type ObjectQuery,\n ObjectQueryExecutionError,\n type ObjectQueryPredicate,\n type ObjectQuerySetOperation,\n type ObjectQuerySortField,\n type QueryScalarKind,\n} from \"@sixb/core\"\nimport {\n hasVectorProfile,\n isVectorProfileQuery,\n normalizeVector,\n vectorSearchCandidateLimit,\n} from \"@sixb/core/internal/query\"\n\nexport interface PgObjectQueryPageRow {\n object_type_id: string\n primary_id: string\n properties: unknown\n _cursor_properties?: unknown\n}\n\nexport interface CompiledPgObjectQuery {\n traversalProbe?: { sql: string; args: unknown[]; limit: number }\n vectorProbe?: { sql: string; args: unknown[]; limit: number }\n sql: string\n args: unknown[]\n totalSql: string\n totalArgs: unknown[]\n order: CompiledOrder\n hasMoreProbe?: CompiledHasMoreProbe\n hasMore(rowCount: number, total?: number): boolean\n trimRows<T>(rows: readonly T[]): readonly T[]\n nextPageToken(rows: readonly PgObjectQueryPageRow[], rowCount: number): string | undefined\n}\n\nexport interface CompiledPgScalarQuery {\n sql: string\n args: unknown[]\n}\n\nexport interface CompiledPgFacetQuery {\n sql: string\n args: unknown[]\n}\n\ninterface CompiledHasMoreProbe {\n sql: string\n args: unknown[]\n hasMore(rowCount: number): boolean\n}\n\ninterface CompileContext {\n probeLimit: boolean\n startPredicate?: string\n isolateSortOverflow?: boolean\n /** A consuming operator supplies ordering; bounded inputs still keep their own order. */\n unordered?: boolean\n correlatedTraversal?: boolean\n source: PgObjectQuerySource\n}\n\ninterface CompiledPredicate {\n sql: string\n args: unknown[]\n}\n\ninterface CompiledAggregateSource {\n sql: string\n args: unknown[]\n}\n\ninterface CompiledOrder {\n sql: string\n args: unknown[]\n fields: readonly CompiledOrderField[]\n propertyColumn: string\n}\n\ntype CompiledOrderField =\n | {\n kind: \"property\"\n propertyId: string\n direction: \"asc\" | \"desc\"\n scalarKind?: QueryScalarKind\n }\n | {\n kind: \"column\"\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\"\n binary?: boolean\n direction: \"asc\" | \"desc\"\n }\n\ninterface EncodedPageToken {\n version: 1\n order: readonly string[]\n values: readonly EncodedCursorValue[]\n}\n\ninterface EncodedCursorValue {\n nullish: boolean\n value?: unknown\n}\n\nconst PAGE_TOKEN_PREFIX = \"keyset:\"\n// Per-parent fanout the core executor bakes into every pushed-down expansion;\n// this default only guards a malformed (un-baked) IR and mirrors the core cap.\nconst DEFAULT_EXPANSION_FANOUT = 1_000\n\nexport function compilePgObjectQuery(\n projectId: string,\n query: ObjectQuery,\n options: {\n includeTotal?: boolean\n source?: PgObjectQuerySource\n correlatedTraversal?: boolean\n sortIndexBound?: string\n } = {}\n): CompiledPgObjectQuery {\n if (hasVectorProfile(query) && !isVectorProfileQuery(query)) {\n throw new ObjectQueryExecutionError(\n \"unsupported_vector_composition\",\n \"Vector search supports one profile with filters, traversals or sets before ranking and limit/project after.\"\n )\n }\n const source = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n let compiled = source.wrapQuery(\n compileObjectQueryInternal(projectId, query, {\n probeLimit: options.includeTotal === false,\n correlatedTraversal: options.correlatedTraversal,\n source,\n })\n )\n if (options.sortIndexBound && source === DEFAULT_OBJECT_QUERY_SOURCE) {\n let bounded = query\n while (bounded.kind === \"expand\") bounded = bounded.input\n if (bounded.kind === \"page\" || bounded.kind === \"limit\") {\n const branches = [options.sortIndexBound, `NOT (${options.sortIndexBound})`].map(\n (startPredicate, branch) =>\n compileObjectQueryInternal(projectId, query, {\n probeLimit: options.includeTotal === false,\n source,\n startPredicate,\n isolateSortOverflow: branch === 1,\n correlatedTraversal: options.correlatedTraversal,\n })\n )\n const limit =\n bounded.kind === \"page\"\n ? bounded.pageSize + 1\n : bounded.limit + (options.includeTotal === false ? 1 : 0)\n compiled = {\n ...compiled,\n sql: `SELECT * FROM ((${branches[0]!.sql}) UNION ALL (${branches[1]!.sql})) AS input ORDER BY ${compiled.order.sql} LIMIT ?`,\n args: [...branches[0]!.args, ...branches[1]!.args, ...compiled.order.args, limit],\n }\n }\n }\n const traversal = !options.correlatedTraversal && boundedTraversal(query)\n const traversalProbe = traversal ? compileTraversalProbe(projectId, traversal, source) : undefined\n return {\n ...compiled,\n ...(traversalProbe ? { traversalProbe } : {}),\n sql: numberPlaceholders(compiled.sql),\n totalSql: numberPlaceholders(compiled.totalSql),\n vectorProbe: compiled.vectorProbe\n ? { ...compiled.vectorProbe, sql: numberPlaceholders(compiled.vectorProbe.sql) }\n : undefined,\n hasMoreProbe: compiled.hasMoreProbe\n ? {\n ...compiled.hasMoreProbe,\n sql: numberPlaceholders(compiled.hasMoreProbe.sql),\n }\n : undefined,\n }\n}\n\n/** Physical relations used by the PostgreSQL object-query compiler. */\nexport interface PgObjectQuerySource {\n readonly objectsTable: string\n readonly linksTable: string\n readonly objectPropertyPermissionsTable?: string\n /** Wrap a terminal SELECT without its own WITH clause; the selected source owns the only WITH. */\n wrapStatement(\n sql: string,\n args?: readonly unknown[]\n ): {\n readonly sql: string\n readonly args: unknown[]\n }\n wrapQuery(query: CompiledPgObjectQuery): CompiledPgObjectQuery\n}\n\n/** Prefix an optional query source, then assign PostgreSQL positional placeholders. */\nexport function compilePgObjectStatement(\n sql: string,\n args: readonly unknown[] = [],\n source?: PgObjectQuerySource\n): CompiledPgScalarQuery {\n return numberCompiledQuery((source ?? DEFAULT_OBJECT_QUERY_SOURCE).wrapStatement(sql, args))\n}\n\nexport const DEFAULT_OBJECT_QUERY_SOURCE: PgObjectQuerySource = {\n objectsTable: \"objects\",\n linksTable: \"links\",\n wrapStatement: (sql, args = []) => ({ sql, args: [...args] }),\n wrapQuery: (query) => query,\n}\n\nfunction exactContext(ctx: CompileContext): CompileContext {\n return ctx.probeLimit ? { ...ctx, probeLimit: false } : ctx\n}\n\nexport function compilePgObjectCountQuery(\n projectId: string,\n query: ObjectQuery,\n options: { source?: PgObjectQuerySource } = {}\n): CompiledPgScalarQuery {\n const querySource = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const source = compileAggregateSource(projectId, query, querySource)\n return numberCompiledQuery(\n querySource.wrapStatement(\n `\n SELECT COUNT(*)::bigint AS count\n FROM (${source.sql}) AS input\n `,\n source.args\n )\n )\n}\n\nexport function compilePgObjectExistsQuery(\n projectId: string,\n query: ObjectQuery,\n options: { source?: PgObjectQuerySource } = {}\n): CompiledPgScalarQuery {\n const querySource = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const source = compileAggregateSource(projectId, query, querySource)\n return numberCompiledQuery(\n querySource.wrapStatement(\n `\n SELECT 1\n FROM (${source.sql}) AS input\n LIMIT 1\n `,\n source.args\n )\n )\n}\n\nexport function compilePgObjectFacetQuery(\n projectId: string,\n query: ObjectQuery,\n propertyId: string,\n limit: number,\n options: { source?: PgObjectQuerySource } = {}\n): CompiledPgFacetQuery {\n const querySource = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const source = compileAggregateSource(projectId, query, querySource)\n return numberCompiledQuery(\n querySource.wrapStatement(\n `\n SELECT facet.value_type, facet.value_text, COUNT(*)::bigint AS count\n FROM (\n SELECT\n jsonb_typeof(input.properties -> (?::text)) AS value_type,\n input.properties ->> (?::text) AS value_text\n FROM (${source.sql}) AS input\n WHERE jsonb_exists(input.properties, ?::text)\n ) AS facet\n GROUP BY facet.value_type, facet.value_text\n ORDER BY count DESC, facet.value_text ASC\n LIMIT ?\n `,\n [propertyId, propertyId, ...source.args, propertyId, limit]\n )\n )\n}\n\n/** A single aggregate computes every facet and its exact total under one SQL snapshot. */\nexport function compilePgObjectFacetsQuery(\n projectId: string,\n query: ObjectQuery,\n facets: readonly { propertyId: string; limit: number }[],\n options: { source?: PgObjectQuerySource } = {}\n): CompiledPgFacetQuery {\n const querySource = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const source = compileAggregateSource(projectId, query, querySource)\n return compilePgFacetSummary(\n numberCompiledQuery(querySource.wrapStatement(source.sql, source.args)),\n facets\n )\n}\n\n/** Input is a numbered statement returning properties; compact read paths can supply it too. */\nexport function compilePgFacetSummary(\n source: CompiledPgFacetQuery,\n facets: readonly { propertyId: string; limit: number }[],\n nativeValues = false\n): CompiledPgFacetQuery {\n const args = [...source.args]\n const bind = (value: unknown) => {\n args.push(value)\n return `$${args.length}`\n }\n const fields = facets.map((facet, i) => {\n if (nativeValues) return `f${i}_type, f${i}_value`\n const property = bind(facet.propertyId)\n // Group JSONB before rendering: text would split equal numeric values such as 1.0 / 1.00.\n return `jsonb_typeof(input.properties -> ${property}::text) AS f${i}_type, input.properties -> ${property}::text AS f${i}_value`\n })\n if (!fields.length)\n return {\n sql: `SELECT -1 AS facet_index, NULL::text AS value_type, NULL::text AS value_text, count(*) AS count FROM (${source.sql}) AS input`,\n args,\n }\n const columns = facets.map((_, i) => `f${i}_type, f${i}_value`)\n const groups = facets.map((_, i) => `WHEN GROUPING(f${i}_type) = 0 THEN ${i}`).join(\" \")\n const buckets = facets.map(\n (facet, i) =>\n `(SELECT ${i} AS facet_index, f${i}_type AS value_type, ${nativeValues ? `f${i}_value` : `(f${i}_value #>> '{}')`} AS value_text, count FROM _sixb_facet_groups WHERE facet_index = ${i} AND f${i}_type IS NOT NULL ORDER BY count DESC, value_text ASC LIMIT ${bind(facet.limit)})`\n )\n return {\n sql: `WITH _sixb_facet_groups AS MATERIALIZED (\n SELECT CASE ${groups} ELSE -1 END AS facet_index, ${columns.join(\", \")}, count(*) AS count\n FROM (SELECT ${fields.join(\", \")} FROM (${source.sql}) AS input) AS _sixb_values\n GROUP BY GROUPING SETS ((), ${columns.map((column) => `(${column})`).join(\", \")})\n )\n SELECT -1 AS facet_index, NULL::text AS value_type, NULL::text AS value_text, count FROM _sixb_facet_groups WHERE facet_index = -1\n UNION ALL ${buckets.join(\" UNION ALL \")}`,\n args,\n }\n}\n\nfunction compileObjectQueryInternal(\n projectId: string,\n query: ObjectQuery,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n switch (query.kind) {\n case \"rerank\":\n throw new ObjectQueryExecutionError(\n \"reranking_requires_runtime\",\n \"Reranking must execute in the model runtime, not storage.\"\n )\n case \"start\":\n return compileStart(projectId, query, ctx)\n case \"refs\":\n return compileRefs(projectId, query, ctx)\n case \"filter\":\n return compileFilter(projectId, query.input, query.predicate, ctx)\n case \"sort\":\n return compileSort(projectId, query.input, query.fields, ctx)\n case \"limit\":\n return compileLimit(projectId, query.input, query.limit, ctx)\n case \"page\":\n return compilePage(projectId, query.input, query.pageSize, query.pageToken, ctx)\n case \"traverse\":\n return compileTraversal(\n projectId,\n query.input,\n query.linkId,\n query.direction,\n query.sourceObjectTypeId,\n ctx\n )\n case \"set\":\n return compileSet(projectId, query.op, query.inputs, ctx)\n case \"project\":\n return compileProject(projectId, query.input, query.properties, ctx)\n case \"text\":\n return compileText(\n projectId,\n query.input,\n query.query,\n query.fields,\n query.fieldsByObjectType,\n ctx\n )\n case \"expand\":\n return compileExpand(projectId, query.input, query.expansions, ctx)\n case \"vector\":\n return compileVector(projectId, query, ctx)\n }\n}\n\nfunction compileVector(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"vector\" }>,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n if (\n typeof query.vector === \"string\" ||\n !isVectorProfileQuery(query) ||\n !query.configuration ||\n !Number.isSafeInteger(query.k) ||\n query.k < 1 ||\n query.k > 1000 ||\n query.vector.length < 1 ||\n query.vector.length > 16000\n ) {\n throw new ObjectQueryExecutionError(\n \"invalid_vector_query\",\n \"A validated named vector profile is required.\"\n )\n }\n const input = compileObjectQueryInternal(projectId, query.input, exactContext(ctx))\n const permissions = ctx.source.objectPropertyPermissionsTable\n const permissionJoin = permissions\n ? `JOIN (\n SELECT project_id, object_type_id, primary_id, array_agg(property_id) AS property_ids\n FROM ${permissions}\n GROUP BY project_id, object_type_id, primary_id\n ) AS vector_permissions ON vector_permissions.project_id = vectors.project_id\n AND vector_permissions.object_type_id = vectors.object_type_id\n AND vector_permissions.primary_id = vectors.primary_id`\n : \"\"\n const authorized = permissions ? `AND vectors.source <@ vector_permissions.property_ids` : \"\"\n const candidates = `FROM (${input.sql}) AS input\n JOIN object_vectors AS vectors ON vectors.project_id = input.project_id\n AND vectors.object_type_id = input.object_type_id AND vectors.primary_id = input.primary_id\n ${permissionJoin}\n WHERE vectors.profile = ? AND vectors.configuration = ?\n AND cardinality(vectors.embedding) = ? ${authorized}`\n const candidateArgs = [...input.args, query.profile!, query.configuration, query.vector.length]\n // Bound distance work, not just returned rows. Exceeding the envelope fails before ranking.\n const limit = vectorSearchCandidateLimit(query.vector.length)\n const values = normalizeVector(query.vector, query.vector.length)\n const order = compileOrder([\n { kind: \"column\", column: \"_vector_score\", direction: \"desc\" },\n ...identityOrderFields().map((field) => ({ ...field, binary: true })),\n ])\n const sql = `SELECT * FROM (SELECT input.*, 1 - (vectors.embedding::public.vector OPERATOR(public.<=>) ?::public.vector) AS _vector_score\n ${candidates}) AS ranked ORDER BY ${order.sql} LIMIT ?`\n const args = [JSON.stringify(values), ...candidateArgs, query.k]\n return {\n sql,\n args,\n // Top-k cardinality depends on eligibility, not distances or ranking.\n totalSql: `SELECT COUNT(*)::bigint AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS eligible`,\n totalArgs: [...candidateArgs, query.k],\n order,\n vectorProbe: {\n sql: `SELECT COUNT(*)::bigint AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS candidates`,\n args: [...candidateArgs, limit + 1],\n limit,\n },\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileStart(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"start\" }>,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n if (query.includeSubtypes === true) {\n throw new Error(\"[SixbPg] PostgreSQL object storage does not support start.includeSubtypes\")\n }\n\n const order = compileOrder(identityOrderFields())\n const sql = `\n SELECT *, properties AS _cursor_properties\n FROM ${ctx.source.objectsTable}\n WHERE project_id = ? AND object_type_id = ?\n ${ctx.startPredicate ? `AND (${ctx.startPredicate})` : \"\"}\n ${ctx.unordered ? \"\" : `ORDER BY ${order.sql}`}\n ${ctx.isolateSortOverflow ? \"OFFSET 0\" : \"\"}\n `\n\n return {\n sql,\n args: [projectId, query.objectTypeId, ...(ctx.unordered ? [] : order.args)],\n totalSql: `SELECT COUNT(*)::bigint AS total FROM ${ctx.source.objectsTable} WHERE project_id = ? AND object_type_id = ?`,\n totalArgs: [projectId, query.objectTypeId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileRefs(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"refs\" }>,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n if (query.refs.length === 0) {\n throw new Error(\"[SixbPg] PostgreSQL object storage requires at least one ref\")\n }\n\n // Keep a concrete type visible to PostgreSQL even when identities arrive as JSON.\n // Relationship joins can then use partial incoming-link indexes for that type.\n const objectTypeId = query.refs[0]!.objectTypeId\n const uniformType = query.refs.every((ref) => ref.objectTypeId === objectTypeId)\n const typePredicate = uniformType ? \"AND selected.object_type_id = ?\" : \"\"\n const typeArgs = uniformType ? [objectTypeId] : []\n\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const refsJson = JSON.stringify(query.refs)\n const requested = `\n SELECT DISTINCT\n ref.value ->> 'objectTypeId' AS object_type_id,\n ref.value ->> 'primaryId' AS primary_id\n FROM jsonb_array_elements(?::text::jsonb) AS ref(value)\n `\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ${typePredicate}\n ${ctx.unordered ? \"\" : `ORDER BY ${selectedOrder.sql}`}\n `\n\n return {\n sql,\n args: [refsJson, projectId, ...typeArgs, ...(ctx.unordered ? [] : selectedOrder.args)],\n totalSql: `\n SELECT COUNT(*)::bigint AS total\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ${typePredicate}\n `,\n totalArgs: [refsJson, projectId, ...typeArgs],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileFilter(\n projectId: string,\n inputQuery: ObjectQuery,\n predicateNode: ObjectQueryPredicate,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n return compileWhere(projectId, inputQuery, compilePredicate(predicateNode), ctx)\n}\n\nfunction compileWhere(\n projectId: string,\n inputQuery: ObjectQuery,\n predicate: CompiledPredicate,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, {\n ...exactContext(ctx),\n unordered: true,\n })\n const sql = `\n SELECT *\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n ${ctx.unordered ? \"\" : `ORDER BY ${input.order.sql}`}\n `\n\n return {\n sql,\n args: [...input.args, ...predicate.args, ...(ctx.unordered ? [] : input.order.args)],\n totalSql: `\n SELECT COUNT(*)::bigint AS total\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n `,\n totalArgs: [...input.args, ...predicate.args],\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileText(\n projectId: string,\n inputQuery: ObjectQuery,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n return compileWhere(\n projectId,\n inputQuery,\n compileTextSearchPredicate(query, fields, fieldsByObjectType),\n ctx\n )\n}\n\nfunction compileSort(\n projectId: string,\n inputQuery: ObjectQuery,\n fields: readonly ObjectQuerySortField[],\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, {\n ...exactContext(ctx),\n unordered: true,\n })\n const probeInput =\n ctx.probeLimit && needsLimitProbe(inputQuery)\n ? compileObjectQueryInternal(projectId, inputQuery, ctx)\n : undefined\n const order = compileOrder(sortOrderFields(fields))\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n input.properties,\n input.properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ${ctx.unordered ? \"\" : `ORDER BY ${order.sql}`}\n `,\n args: [...input.args, ...(ctx.unordered ? [] : order.args)],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n order,\n hasMoreProbe: probeInput ? hasMoreProbeFor(probeInput) : input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction compileLimit(\n projectId: string,\n inputQuery: ObjectQuery,\n rawLimit: number,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, {\n ...exactContext(ctx),\n unordered: true,\n })\n const limit = Math.max(0, rawLimit)\n const rowLimit = ctx.probeLimit ? limit + 1 : limit\n\n // A plan bounded for the page must not force correlated probes over the full total.\n const totalInput = ctx.correlatedTraversal\n ? compileAggregateSource(projectId, inputQuery, ctx.source)\n : input\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...input.order.args, rowLimit],\n totalSql: `\n SELECT COUNT(*)::bigint AS total\n FROM (${totalInput.sql}) AS input\n `,\n totalArgs: totalInput.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount, total) =>\n total === undefined ? ctx.probeLimit && rowCount > limit : limit < total,\n trimRows: ctx.probeLimit ? (rows) => rows.slice(0, limit) : identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compilePage(\n projectId: string,\n inputQuery: ObjectQuery,\n rawPageSize: number,\n pageToken: string | undefined,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, {\n ...exactContext(ctx),\n unordered: true,\n })\n const pageSize = Math.max(0, rawPageSize)\n const cursor = pageToken ? decodePageToken(pageToken, input.order.fields) : undefined\n const cursorPredicate = cursor\n ? compileKeysetPredicate(input.order.fields, cursor, input.order.propertyColumn)\n : undefined\n const whereSql = cursorPredicate ? `WHERE ${cursorPredicate.sql}` : \"\"\n\n const ranges =\n cursor && isIndexPageInput(inputQuery)\n ? compileKeysetRanges(input.order.fields, cursor, input.order.propertyColumn)\n : undefined\n const rangeSql = ranges\n ?.map(\n (range) =>\n `(SELECT * FROM (${input.sql}) AS input WHERE ${range.sql} ORDER BY ${input.order.sql} LIMIT ?)`\n )\n .join(\" UNION ALL \")\n\n // A plan bounded for the page must not force correlated probes over the full total.\n const totalInput = ctx.correlatedTraversal\n ? compileAggregateSource(projectId, inputQuery, ctx.source)\n : input\n\n return {\n sql: rangeSql\n ? `SELECT * FROM (${rangeSql}) AS input ORDER BY ${input.order.sql} LIMIT ?`\n : `\n SELECT *\n FROM (${input.sql}) AS input\n ${whereSql}\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args:\n rangeSql && ranges\n ? [\n ...ranges.flatMap((range) => [\n ...input.args,\n ...range.args,\n ...input.order.args,\n pageSize + 1,\n ]),\n ...input.order.args,\n pageSize + 1,\n ]\n : [...input.args, ...(cursorPredicate?.args ?? []), ...input.order.args, pageSize + 1],\n totalSql: `\n SELECT COUNT(*)::bigint AS total\n FROM (${totalInput.sql}) AS input\n `,\n totalArgs: totalInput.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount) => rowCount > pageSize,\n trimRows: (rows) => rows.slice(0, pageSize),\n nextPageToken: (rows, rowCount) => {\n if (rowCount <= pageSize || rows.length === 0) return undefined\n return encodePageToken(rows[rows.length - 1], input.order.fields)\n },\n }\n}\n\nfunction compileTraversal(\n projectId: string,\n inputQuery: ObjectQuery,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, {\n ...exactContext(ctx),\n unordered: true,\n startPredicate: undefined,\n isolateSortOverflow: false,\n })\n const relation = compileTraversalRelation(\n projectId,\n input,\n linkId,\n direction,\n sourceObjectTypeId,\n ctx.source,\n ctx.correlatedTraversal,\n ctx.startPredicate\n )\n const order = compileOrder(identityOrderFields())\n return {\n sql: `SELECT selected.*, selected.properties AS _cursor_properties ${relation.sql} ${ctx.unordered ? \"\" : `ORDER BY ${order.sql}`} ${ctx.isolateSortOverflow ? \"OFFSET 0\" : \"\"}`,\n args: [...relation.args, ...(ctx.unordered ? [] : order.args)],\n totalSql: `SELECT COUNT(*)::bigint AS total ${relation.sql}`,\n totalArgs: relation.args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\n/** A traversal is a set of endpoints. EXISTS avoids sorting/deduplicating full JSON objects. */\nfunction compileTraversalRelation(\n projectId: string,\n input: CompiledAggregateSource,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n source: PgObjectQuerySource,\n correlated = false,\n endpointPredicate?: string\n): CompiledAggregateSource {\n const incoming = direction === \"incoming\"\n const parent = incoming ? \"target\" : \"source\"\n const endpoint = incoming ? \"source\" : \"target\"\n const constrainedType = incoming ? sourceObjectTypeId : undefined\n return {\n sql: `FROM ${source.objectsTable} AS selected\n WHERE selected.project_id = ?\n ${constrainedType === undefined ? \"\" : \"AND selected.object_type_id = ?\"}\n ${endpointPredicate ? `AND (${endpointPredicate})` : \"\"}\n AND EXISTS (\n SELECT 1 FROM (${input.sql}) AS input\n JOIN ${source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.${parent}_type_id = input.object_type_id\n AND edge.${parent}_id = input.primary_id\n WHERE edge.project_id = selected.project_id\n AND edge.${endpoint}_type_id = selected.object_type_id\n AND edge.${endpoint}_id = selected.primary_id\n AND edge.link_id = ?\n ${correlated ? \"OFFSET 0\" : \"\"}\n )`,\n args: [\n projectId,\n ...(constrainedType === undefined ? [] : [constrainedType]),\n ...input.args,\n linkId,\n ],\n }\n}\n\n/** Only a bounded page benefits from choosing an ordered, correlated endpoint scan. */\nfunction boundedTraversal(\n query: ObjectQuery,\n bounded = false\n): Extract<ObjectQuery, { kind: \"traverse\" }> | undefined {\n switch (query.kind) {\n case \"page\":\n case \"limit\":\n return boundedTraversal(query.input, true)\n case \"sort\":\n case \"filter\":\n case \"text\":\n case \"project\":\n case \"expand\":\n return boundedTraversal(query.input, bounded)\n case \"traverse\":\n return bounded ? query : undefined\n default:\n return undefined\n }\n}\n\nfunction compileTraversalProbe(\n projectId: string,\n traversal: Extract<ObjectQuery, { kind: \"traverse\" }>,\n source: PgObjectQuerySource\n): { sql: string; args: unknown[]; limit: number } {\n const input = compileAggregateSource(projectId, traversal.input, source)\n const parent = traversal.direction === \"incoming\" ? \"target\" : \"source\"\n const limit = 1000\n const statement = compilePgObjectStatement(\n `SELECT 1 FROM (${input.sql}) AS input\n JOIN ${source.linksTable} AS edge ON edge.project_id = input.project_id\n AND edge.${parent}_type_id = input.object_type_id AND edge.${parent}_id = input.primary_id\n WHERE edge.link_id = ? ${traversal.direction === \"incoming\" && traversal.sourceObjectTypeId ? \"AND edge.source_type_id = ?\" : \"\"}\n LIMIT ?`,\n [\n ...input.args,\n traversal.linkId,\n ...(traversal.direction === \"incoming\" && traversal.sourceObjectTypeId\n ? [traversal.sourceObjectTypeId]\n : []),\n limit + 1,\n ],\n source\n )\n return { ...statement, limit }\n}\n\n/** Correlation handle for an expansion: the parent row's identity columns. */\ninterface ExpansionParent {\n project: string\n type: string\n id: string\n}\n\n// `expand` attaches linked objects to each result row without changing which\n// objects match (unlike `traverse`, which pivots to the targets). Each expansion\n// becomes a correlated subquery that hydrates its links into a JSONB value, and\n// all expansions are folded into one `_expand` object column the row mapper reads\n// back. The input set is otherwise untouched, so pagination/order pass through.\nfunction compileExpand(\n projectId: string,\n inputQuery: ObjectQuery,\n expansions: readonly ObjectExpansion[],\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const expand = compileExpansionsObject(\n expansions,\n { project: \"input.project_id\", type: \"input.object_type_id\", id: \"input.primary_id\" },\n \"\",\n ctx\n )\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const sql = `\n SELECT input.*, ${expand.sql} AS _expand\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `\n\n return {\n sql,\n args: [...expand.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\n// `jsonb_build_object(linkId, value, ...)` over a set of expansions sharing one\n// parent. Link ids are user data, so they ride as parameters. Used both for the\n// outer `_expand` column and for each child's nested `links`.\nfunction compileExpansionsObject(\n expansions: readonly ObjectExpansion[],\n parent: ExpansionParent,\n pathPrefix: string,\n ctx: CompileContext\n): CompiledPredicate {\n const parts: string[] = []\n const args: unknown[] = []\n expansions.forEach((expansion, index) => {\n const path = pathPrefix === \"\" ? `${index}` : `${pathPrefix}_${index}`\n const value = compileExpansionValue(expansion, parent, path, ctx)\n parts.push(\"?::text\", value.sql)\n args.push(expansion.linkId, ...value.args)\n })\n return { sql: `jsonb_build_object(${parts.join(\", \")})`, args }\n}\n\n// One expansion's hydrated value. `row_number()` numbers a parent's links by the\n// order from `compileExpansionOrder` (the expansion's `orderBy` against the target\n// object's properties, then an identity tiebreak); `WHERE _ord <= N` keeps the\n// top-N per parent in-DB; each retained neighbour becomes a JSONB object; and the\n// value is an ordered array (\"many\") or the first element or null (\"one\"). The\n// cardinality is core-resolved before pushdown.\nfunction compileExpansionValue(\n expansion: ObjectExpansion,\n parent: ExpansionParent,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const edge = `edge_${path}`\n const target = `tgt_${path}`\n const ranked = `ranked_${path}`\n const incoming = expansion.direction === \"incoming\"\n // The hydrated neighbour is the link target (outgoing) or source (incoming);\n // the parent sits on the opposite end, mirroring `compileTraversal`.\n const neighborType = incoming ? `${edge}.source_type_id` : `${edge}.target_type_id`\n const neighborId = incoming ? `${edge}.source_id` : `${edge}.target_id`\n const parentType = incoming ? `${edge}.target_type_id` : `${edge}.source_type_id`\n const parentId = incoming ? `${edge}.target_id` : `${edge}.source_id`\n\n const child = compileExpansionChildJson(expansion, edge, target, path, ctx)\n const order = compileExpansionOrder(expansion, target, neighborType, neighborId)\n\n const whereParts = [\n `${edge}.project_id = ${parent.project}`,\n `${parentType} = ${parent.type}`,\n `${parentId} = ${parent.id}`,\n `${edge}.link_id = ?::text`,\n ]\n const whereArgs: unknown[] = [expansion.linkId]\n if (incoming && expansion.sourceObjectTypeId !== undefined) {\n whereParts.push(`${edge}.source_type_id = ?::text`)\n whereArgs.push(expansion.sourceObjectTypeId)\n }\n\n const inner = `\n SELECT ${child.sql} AS elem, row_number() OVER (ORDER BY ${order.sql}) AS _ord\n FROM ${ctx.source.linksTable} AS ${edge}\n JOIN ${ctx.source.objectsTable} AS ${target}\n ON ${target}.project_id = ${edge}.project_id\n AND ${target}.object_type_id = ${neighborType}\n AND ${target}.primary_id = ${neighborId}\n WHERE ${whereParts.join(\" AND \")}\n `\n const innerArgs = [...child.args, ...order.args, ...whereArgs]\n\n if (expansion.cardinality === \"one\") {\n return {\n sql: `(SELECT ${ranked}.elem FROM (${inner}) AS ${ranked} WHERE ${ranked}._ord = 1)`,\n args: innerArgs,\n }\n }\n\n // The fanout cap is baked into `limit` by the core executor before pushdown.\n const limit = expansion.limit ?? DEFAULT_EXPANSION_FANOUT\n return {\n sql: `COALESCE((SELECT jsonb_agg(${ranked}.elem ORDER BY ${ranked}._ord) FROM (${inner}) AS ${ranked} WHERE ${ranked}._ord <= ?), '[]'::jsonb)`,\n args: [...innerArgs, limit],\n }\n}\n\n// Build one hydrated neighbour as an `ExpandedObjectRow`-shaped JSONB object.\n// `linkProperties` always rides along (the mapper drops it when empty), and\n// nested expansions recurse under `links`, correlated on this neighbour.\nfunction compileExpansionChildJson(\n expansion: ObjectExpansion,\n edge: string,\n target: string,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const fields = [\n `'projectId', ${target}.project_id`,\n `'objectTypeId', ${target}.object_type_id`,\n `'primaryId', ${target}.primary_id`,\n `'properties', ${target}.properties`,\n `'createdAt', ${target}.created_at`,\n `'updatedAt', ${target}.updated_at`,\n `'version', ${target}.version`,\n `'lastCommitId', ${target}.last_commit_id`,\n `'linkProperties', ${edge}.properties`,\n ]\n const args: unknown[] = []\n\n if (expansion.expand && expansion.expand.length > 0) {\n const nested = compileExpansionsObject(\n expansion.expand,\n {\n project: `${target}.project_id`,\n type: `${target}.object_type_id`,\n id: `${target}.primary_id`,\n },\n path,\n ctx\n )\n fields.push(`'links', ${nested.sql}`)\n args.push(...nested.args)\n }\n\n return { sql: `jsonb_build_object(${fields.join(\", \")})`, args }\n}\n\n// Order a parent's links the way the fallback's per-parent trim does: each\n// property sorts nulls last with the requested direction (against the neighbour's\n// JSONB properties), then a deterministic identity tiebreak on the neighbour.\nfunction compileExpansionOrder(\n expansion: ObjectExpansion,\n target: string,\n neighborType: string,\n neighborId: string\n): CompiledPredicate {\n const propertyColumn = `${target}.properties`\n const clauses: string[] = []\n const args: unknown[] = []\n\n for (const field of expansion.orderBy ?? []) {\n // Relevance is a no-op in the fallback comparator; mirror that by skipping it.\n if (field.kind !== \"property\") continue\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${\n field.scalarKind === \"decimal\"\n ? `(${jsonTextExpression(propertyColumn)})::numeric`\n : `NULLIF(${jsonValueExpression(propertyColumn)}, 'null'::jsonb)`\n } ${direction}`\n )\n args.push(field.propertyId, field.propertyId, field.propertyId)\n }\n\n clauses.push(`${neighborType} ASC`, `${neighborId} ASC`)\n return { sql: clauses.join(\", \"), args }\n}\n\nfunction compileSet(\n projectId: string,\n op: ObjectQuerySetOperation,\n inputs: readonly ObjectQuery[],\n ctx: CompileContext\n): CompiledPgObjectQuery {\n if (inputs.length === 0) {\n const order = compileOrder(identityOrderFields())\n return {\n sql: `\n SELECT *, properties AS _cursor_properties\n FROM ${ctx.source.objectsTable}\n WHERE 1 = 0\n ORDER BY ${order.sql}\n `,\n args: order.args,\n totalSql: \"SELECT 0::bigint AS total\",\n totalArgs: [],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n }\n\n const compiledInputs = inputs.map((input) =>\n compileObjectQueryInternal(projectId, input, exactContext(ctx))\n )\n const identities = compileSetIdentities(op, compiledInputs)\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${identities.sql}) AS ids\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = ids.object_type_id\n AND selected.primary_id = ids.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n\n return {\n sql,\n args: [...identities.args, projectId, ...selectedOrder.args],\n totalSql: `SELECT COUNT(*)::bigint AS total FROM (${identities.sql}) AS ids`,\n totalArgs: identities.args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileProject(\n projectId: string,\n inputQuery: ObjectQuery,\n properties: readonly string[] | undefined,\n ctx: CompileContext\n): CompiledPgObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, ctx)\n if (!properties) return input\n\n const projection = compileProjectionExpression(properties)\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const outputOrder = compileOrder(input.order.fields, undefined, \"_cursor_properties\")\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n ${projection.sql} AS properties,\n input._cursor_properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `,\n args: [...projection.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: outputOrder,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction compileAggregateSource(\n projectId: string,\n query: ObjectQuery,\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n switch (query.kind) {\n case \"rerank\":\n throw new ObjectQueryExecutionError(\n \"reranking_requires_runtime\",\n \"Reranking must execute in the model runtime, not storage.\"\n )\n case \"start\":\n return compileAggregateStart(projectId, query, source)\n case \"refs\":\n return compileAggregateRefs(projectId, query, source)\n case \"filter\":\n return compileAggregateWhere(\n projectId,\n query.input,\n compilePredicate(query.predicate),\n source\n )\n case \"text\": {\n return compileAggregateWhere(\n projectId,\n query.input,\n compileTextSearchPredicate(query.query, query.fields, query.fieldsByObjectType),\n source\n )\n }\n case \"traverse\":\n return compileAggregateTraversal(\n projectId,\n query.input,\n query.linkId,\n query.direction,\n query.sourceObjectTypeId,\n source\n )\n case \"set\":\n return compileAggregateSet(projectId, query.op, query.inputs, source)\n case \"sort\":\n case \"project\":\n // `expand` is output-shaping, like sort/project: aggregates ignore it.\n case \"expand\":\n return compileAggregateSource(projectId, query.input, source)\n case \"limit\":\n case \"page\":\n return compileRowQueryAggregateSource(projectId, query, source)\n case \"vector\":\n return compileRowQueryAggregateSource(projectId, query, source)\n }\n}\n\nfunction compileAggregateStart(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"start\" }>,\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n if (query.includeSubtypes === true) {\n throw new Error(\"[SixbPg] PostgreSQL object storage does not support start.includeSubtypes\")\n }\n\n return {\n sql: `\n SELECT project_id, object_type_id, primary_id, properties\n FROM ${source.objectsTable}\n WHERE project_id = ? AND object_type_id = ?\n `,\n args: [projectId, query.objectTypeId],\n }\n}\n\nfunction compileAggregateRefs(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"refs\" }>,\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n if (query.refs.length === 0) {\n throw new Error(\"[SixbPg] PostgreSQL object storage requires at least one ref\")\n }\n\n // Keep a concrete type visible to PostgreSQL even when identities arrive as JSON.\n // Relationship joins can then use partial incoming-link indexes for that type.\n const objectTypeId = query.refs[0]!.objectTypeId\n const uniformType = query.refs.every((ref) => ref.objectTypeId === objectTypeId)\n const typePredicate = uniformType ? \"AND selected.object_type_id = ?\" : \"\"\n const typeArgs = uniformType ? [objectTypeId] : []\n\n return {\n sql: `\n SELECT selected.project_id, selected.object_type_id, selected.primary_id, selected.properties\n FROM (\n SELECT DISTINCT\n ref.value ->> 'objectTypeId' AS object_type_id,\n ref.value ->> 'primaryId' AS primary_id\n FROM jsonb_array_elements(?::text::jsonb) AS ref(value)\n ) AS requested\n JOIN ${source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ${typePredicate}\n `,\n args: [JSON.stringify(query.refs), projectId, ...typeArgs],\n }\n}\n\nfunction compileAggregateWhere(\n projectId: string,\n inputQuery: ObjectQuery,\n predicate: CompiledPredicate,\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n const input = compileAggregateSource(projectId, inputQuery, source)\n return {\n sql: `\n SELECT input.project_id, input.object_type_id, input.primary_id, input.properties\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n `,\n args: [...input.args, ...predicate.args],\n }\n}\n\nfunction compileAggregateTraversal(\n projectId: string,\n inputQuery: ObjectQuery,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n const input = compileAggregateSource(projectId, inputQuery, source)\n if (direction === \"incoming\" && sourceObjectTypeId !== undefined) {\n // Deduplicate endpoint identities before fetching objects. Bounded arrays let PostgreSQL\n // visit primary keys in groups instead of doing one random B-tree descent per edge.\n // Each array contains at most 1024 IDs; larger traversals can spill their sort/group work.\n return {\n sql: `SELECT selected.project_id, selected.object_type_id, selected.primary_id, selected.properties\n FROM (\n SELECT array_agg(primary_id) AS ids FROM (\n SELECT primary_id, (row_number() OVER (ORDER BY primary_id) - 1) / 1024 AS batch\n FROM (\n SELECT DISTINCT edge.source_id AS primary_id\n FROM (${input.sql}) AS input\n JOIN ${source.linksTable} AS edge ON edge.project_id = input.project_id\n AND edge.target_type_id = input.object_type_id AND edge.target_id = input.primary_id\n WHERE edge.link_id = ? AND edge.source_type_id = ?\n ) AS endpoints\n ) AS numbered GROUP BY batch\n ) AS batches\n JOIN ${source.objectsTable} AS selected ON selected.project_id = ?\n AND selected.object_type_id = ? AND selected.primary_id = ANY(batches.ids)`,\n args: [...input.args, linkId, sourceObjectTypeId, projectId, sourceObjectTypeId],\n }\n }\n const relation = compileTraversalRelation(\n projectId,\n input,\n linkId,\n direction,\n sourceObjectTypeId,\n source\n )\n return {\n sql: `SELECT selected.project_id, selected.object_type_id, selected.primary_id, selected.properties ${relation.sql}`,\n args: relation.args,\n }\n}\n\nfunction compileAggregateSet(\n projectId: string,\n op: ObjectQuerySetOperation,\n inputs: readonly ObjectQuery[],\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n if (inputs.length === 0) {\n return {\n sql: `\n SELECT project_id, object_type_id, primary_id, properties\n FROM ${source.objectsTable}\n WHERE 1 = 0\n `,\n args: [],\n }\n }\n\n const compiledInputs = inputs.map((input) => compileAggregateSource(projectId, input, source))\n const identities = compileSetIdentities(op, compiledInputs)\n return {\n sql: `\n SELECT selected.project_id, selected.object_type_id, selected.primary_id, selected.properties\n FROM (${identities.sql}) AS ids\n JOIN ${source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = ids.object_type_id\n AND selected.primary_id = ids.primary_id\n `,\n args: [...identities.args, projectId],\n }\n}\n\nfunction compileRowQueryAggregateSource(\n projectId: string,\n query: ObjectQuery,\n source: PgObjectQuerySource\n): CompiledAggregateSource {\n const rowQuery = compileObjectQueryInternal(projectId, query, {\n probeLimit: false,\n source,\n })\n return {\n sql: `\n SELECT input.project_id, input.object_type_id, input.primary_id, input.properties\n FROM (${rowQuery.sql}) AS input\n `,\n args: rowQuery.args,\n }\n}\n\nfunction needsLimitProbe(query: ObjectQuery): boolean {\n switch (query.kind) {\n case \"limit\":\n return true\n case \"project\":\n case \"sort\":\n return needsLimitProbe(query.input)\n default:\n return false\n }\n}\n\nfunction hasMoreProbeFor(compiled: CompiledPgObjectQuery): CompiledHasMoreProbe {\n return (\n compiled.hasMoreProbe ?? {\n sql: compiled.sql,\n args: compiled.args,\n hasMore: (rowCount) => compiled.hasMore(rowCount, undefined),\n }\n )\n}\n\nfunction compileSetIdentities(\n op: ObjectQuerySetOperation,\n inputs: readonly { sql: string; args: readonly unknown[] }[]\n): CompiledPredicate {\n const operator = op === \"union\" ? \"UNION\" : op === \"intersect\" ? \"INTERSECT\" : \"EXCEPT\"\n const identitySqls = inputs.map(\n (input) => `SELECT object_type_id, primary_id FROM (${input.sql}) AS input`\n )\n\n return {\n sql: identitySqls.join(` ${operator} `),\n args: inputs.flatMap((input) => input.args),\n }\n}\n\nfunction compileProjectionExpression(properties: readonly string[]): CompiledPredicate {\n if (properties.length === 0) return { sql: \"'{}'::jsonb\", args: [] }\n\n return {\n sql: `\n COALESCE(\n (\n SELECT jsonb_object_agg(projected.key, projected.value)\n FROM jsonb_each(input.properties) AS projected(key, value)\n WHERE projected.key IN (${properties.map(() => \"?::text\").join(\", \")})\n ),\n '{}'::jsonb\n )\n `,\n args: [...properties],\n }\n}\n\nfunction compilePredicate(predicate: ObjectQueryPredicate): CompiledPredicate {\n switch (predicate.op) {\n case \"and\":\n case \"or\": {\n const items = predicate.items.map(compilePredicate)\n const joiner = predicate.op === \"and\" ? \" AND \" : \" OR \"\n return {\n sql: `(${items.map((item) => item.sql).join(joiner)})`,\n args: items.flatMap((item) => item.args),\n }\n }\n case \"not\": {\n const item = compilePredicate(predicate.item)\n return negatePredicate(item)\n }\n case \"eq\":\n return predicate.scalarKind === \"decimal\"\n ? compileDecimalEqualityPredicate(predicate.propertyId, \"eq\", predicate.value)\n : compileEqualityPredicate(predicate.propertyId, \"eq\", predicate.value)\n case \"neq\":\n return predicate.scalarKind === \"decimal\"\n ? compileDecimalEqualityPredicate(predicate.propertyId, \"neq\", predicate.value)\n : compileEqualityPredicate(predicate.propertyId, \"neq\", predicate.value)\n case \"lt\":\n case \"lte\":\n case \"gt\":\n case \"gte\": {\n const op = sqlComparisonOperator(predicate.op)\n if (predicate.scalarKind === \"decimal\") {\n return {\n sql: `(${jsonTypeExpression()} = 'string' AND (${jsonTextExpression()})::numeric ${op} ?::numeric)`,\n args: [predicate.propertyId, predicate.propertyId, predicate.value],\n }\n }\n return {\n sql: `${jsonValueExpression()} ${op} ?::text::jsonb`,\n args: [predicate.propertyId, jsonbValue(predicate.value)],\n }\n }\n case \"in\":\n return predicate.scalarKind === \"decimal\"\n ? compileDecimalInPredicate(predicate.propertyId, predicate.values)\n : compileInPredicate(predicate.propertyId, predicate.values)\n case \"exists\": {\n const sql = `jsonb_exists(properties, ?::text)`\n const item: CompiledPredicate = { sql, args: [predicate.propertyId] }\n return predicate.value ? item : negatePredicate(item)\n }\n case \"contains\":\n return compileContainsPredicate(predicate.propertyId, predicate.value)\n }\n}\n\nfunction compileDecimalEqualityPredicate(\n propertyId: string,\n op: \"eq\" | \"neq\",\n value: unknown\n): CompiledPredicate {\n if (value === null) {\n const sql = `${jsonTypeExpression()} = 'null'`\n const item: CompiledPredicate = { sql, args: [propertyId] }\n return op === \"eq\" ? item : negatePredicate(item)\n }\n\n if (op === \"eq\") {\n return {\n sql: `(${jsonTypeExpression()} = 'string' AND (${jsonTextExpression()})::numeric = ?::numeric)`,\n args: [propertyId, propertyId, value],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonTypeExpression()} <> 'string' OR (${jsonTextExpression()})::numeric <> ?::numeric)`,\n args: [propertyId, propertyId, propertyId, propertyId, value],\n }\n}\n\nfunction compileDecimalInPredicate(\n propertyId: string,\n values: readonly unknown[]\n): CompiledPredicate {\n if (values.length === 0) return { sql: \"0 = 1\", args: [] }\n const nonNullValues = values.filter((value) => value !== null)\n const clauses: string[] = []\n const args: unknown[] = []\n\n if (nonNullValues.length !== values.length) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(propertyId)\n }\n\n if (nonNullValues.length > 0) {\n clauses.push(\n `(${jsonTypeExpression()} = 'string' AND (${jsonTextExpression()})::numeric IN (${nonNullValues\n .map(() => \"?::numeric\")\n .join(\", \")}))`\n )\n args.push(propertyId, propertyId, ...nonNullValues)\n }\n\n return {\n sql: `(${clauses.join(\" OR \")})`,\n args,\n }\n}\n\nfunction negatePredicate(predicate: CompiledPredicate): CompiledPredicate {\n return {\n sql: `(NOT COALESCE((${predicate.sql}), false))`,\n args: predicate.args,\n }\n}\n\nfunction compileEqualityPredicate(\n propertyId: string,\n op: \"eq\" | \"neq\",\n value: unknown\n): CompiledPredicate {\n if (value === null) {\n const sql = `${jsonTypeExpression()} = 'null'`\n const item: CompiledPredicate = { sql, args: [propertyId] }\n return op === \"eq\" ? item : negatePredicate(item)\n }\n\n if (typeof value === \"string\") {\n if (op === \"eq\") {\n return {\n sql: `(${jsonTypeExpression()} = 'string' AND ${jsonTextExpression()} = ?::text AND md5(${jsonTextExpression()}) = md5(?::text))`,\n args: [propertyId, propertyId, value, propertyId, value],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonTypeExpression()} <> 'string' OR ${jsonTextExpression()} <> ?::text)`,\n args: [propertyId, propertyId, propertyId, propertyId, value],\n }\n }\n\n if (op === \"eq\") {\n return {\n sql: `${jsonValueExpression()} = ?::text::jsonb`,\n args: [propertyId, jsonbValue(value)],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonValueExpression()} <> ?::text::jsonb)`,\n args: [propertyId, propertyId, propertyId, jsonbValue(value)],\n }\n}\n\nfunction compileInPredicate(propertyId: string, values: readonly unknown[]): CompiledPredicate {\n if (values.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const nonNullValues = values.filter((value) => value !== null)\n const stringValues = nonNullValues.filter((value): value is string => typeof value === \"string\")\n const jsonbValues = nonNullValues.filter((value) => typeof value !== \"string\")\n const clauses: string[] = []\n const args: unknown[] = []\n\n if (values.length !== nonNullValues.length) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(propertyId)\n }\n\n if (stringValues.length > 0) {\n clauses.push(\n `(${jsonTypeExpression()} = 'string' AND ${jsonTextExpression()} IN (${stringValues\n .map(() => \"?::text\")\n .join(\n \", \"\n )}) AND md5(${jsonTextExpression()}) IN (${stringValues.map(() => \"md5(?::text)\").join(\", \")}))`\n )\n args.push(propertyId, propertyId, ...stringValues, propertyId, ...stringValues)\n }\n\n if (jsonbValues.length > 0) {\n clauses.push(\n `${jsonValueExpression()} IN (${jsonbValues.map(() => \"?::text::jsonb\").join(\", \")})`\n )\n args.push(propertyId, ...jsonbValues.map(jsonbValue))\n }\n\n return {\n sql: `(${clauses.join(\" OR \")})`,\n args,\n }\n}\n\nfunction compileContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const clauses: string[] = []\n const args: unknown[] = []\n\n if (typeof value === \"string\") {\n clauses.push(\n `(${jsonTypeExpression()} = 'string' AND position(?::text in ${jsonTextExpression()}) > 0)`\n )\n args.push(propertyId, value, propertyId)\n }\n\n clauses.push(\n `(${jsonTypeExpression()} = 'array' AND ${jsonValueExpression()} @> jsonb_build_array(?::text::jsonb))`\n )\n args.push(propertyId, propertyId, jsonbValue(value))\n\n if (typeof value === \"string\") {\n clauses.push(\n `(${jsonTypeExpression()} = 'object' AND jsonb_exists(${jsonValueExpression()}, ?::text))`\n )\n args.push(propertyId, propertyId, value)\n }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileTextPredicate(query: string, fields: readonly string[]): CompiledPredicate {\n const terms = tokenize(query)\n if (terms.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const clauses = terms.map(() => {\n const fieldClauses = fields.map(\n () => `lower(coalesce(${jsonTextExpression()}, '')) LIKE ?::text`\n )\n return `(${fieldClauses.join(\" OR \")})`\n })\n const args = terms.flatMap((term) =>\n fields.flatMap((field) => [field, `%${term.replace(/[\\\\%_]/g, \"\\\\$&\")}%`])\n )\n\n return { sql: `(${clauses.join(\" AND \")})`, args }\n}\n\nfunction compileTextSearchPredicate(\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): CompiledPredicate {\n const predicate =\n fields && fields.length > 0\n ? compileTextPredicate(query, fields)\n : compileScopedTextPredicate(query, fieldsByObjectType)\n\n if (!predicate) {\n throw new Error(\n \"[SixbPg] PostgreSQL object text search requires fields or resolved text defaults\"\n )\n }\n\n return predicate\n}\n\nfunction compileScopedTextPredicate(\n query: string,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): CompiledPredicate | null {\n const scopedPredicates: CompiledPredicate[] = []\n\n for (const [objectTypeId, fields] of Object.entries(fieldsByObjectType ?? {})) {\n if (fields.length === 0) continue\n const predicate = compileTextPredicate(query, fields)\n scopedPredicates.push({\n sql: `(object_type_id = ? AND ${predicate.sql})`,\n args: [objectTypeId, ...predicate.args],\n })\n }\n\n if (scopedPredicates.length === 0) return null\n\n return {\n sql: `(${scopedPredicates.map((predicate) => predicate.sql).join(\" OR \")})`,\n args: scopedPredicates.flatMap((predicate) => predicate.args),\n }\n}\n\nfunction compileOrder(\n fields: readonly CompiledOrderField[],\n qualifier?: string,\n propertyColumn = \"properties\"\n): CompiledOrder {\n const clauses: string[] = []\n const args: unknown[] = []\n\n for (const field of fields) {\n if (field.kind === \"column\") {\n clauses.push(\n `${columnExpression(field.column, qualifier)}${field.binary ? ' COLLATE \"C\"' : \"\"} ${field.direction.toUpperCase()}`\n )\n continue\n }\n\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${compiledPropertyValueExpression(field, propertyColumn)} ${direction}`\n )\n args.push(field.propertyId, field.propertyId, field.propertyId)\n }\n\n return { sql: clauses.join(\", \"), args, fields, propertyColumn }\n}\n\nfunction sortOrderFields(fields: readonly ObjectQuerySortField[]): readonly CompiledOrderField[] {\n const orderFields: CompiledOrderField[] = []\n for (const field of fields) {\n if (field.kind !== \"property\") {\n throw new Error(\"[SixbPg] PostgreSQL object storage does not support relevance sorting\")\n }\n\n orderFields.push({\n kind: \"property\",\n propertyId: field.propertyId,\n direction: field.direction === \"desc\" ? \"desc\" : \"asc\",\n scalarKind: field.scalarKind,\n })\n }\n orderFields.push(...identityOrderFields())\n return orderFields\n}\n\nfunction identityOrderFields(): readonly CompiledOrderField[] {\n return [\n { kind: \"column\", column: \"object_type_id\", direction: \"asc\" },\n { kind: \"column\", column: \"primary_id\", direction: \"asc\" },\n ]\n}\n\n/** Bound each disjoint cursor range before merging: OR would scan all preceding index entries. */\nfunction compileKeysetRanges(\n fields: readonly CompiledOrderField[],\n cursor: readonly EncodedCursorValue[],\n propertyColumn: string\n): CompiledPredicate[] {\n const ranges: CompiledPredicate[] = []\n const prefix: CompiledPredicate[] = []\n const addRange = (advance: CompiledPredicate) => {\n const parts = [...prefix, advance]\n ranges.push({\n sql: parts.map((part) => `(${part.sql})`).join(\" AND \"),\n args: parts.flatMap((part) => part.args),\n })\n }\n fields.forEach((field, index) => {\n const value = cursor[index]\n if (field.kind === \"column\") {\n const after = compileFieldAfter(field, value, propertyColumn)\n if (after) addRange(after)\n prefix.push(compileFieldEquality(field, value, propertyColumn))\n return\n }\n const rank = `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END`\n if (!value.nullish) addRange({ sql: `${rank} = 1`, args: [field.propertyId, field.propertyId] })\n prefix.push({\n sql: `${rank} = ${value.nullish ? 1 : 0}`,\n args: [field.propertyId, field.propertyId],\n })\n if (value.nullish) return\n const expression = compiledPropertyValueExpression(field, propertyColumn)\n const parameter = field.scalarKind === \"decimal\" ? \"?::numeric\" : \"?::text::jsonb\"\n const args = [\n field.propertyId,\n field.scalarKind === \"decimal\" ? value.value : jsonbValue(value.value),\n ]\n addRange({ sql: `${expression} ${field.direction === \"desc\" ? \"<\" : \">\"} ${parameter}`, args })\n prefix.push({ sql: `${expression} = ${parameter}`, args })\n })\n return ranges\n}\n\nfunction isIndexPageInput(query: ObjectQuery): boolean {\n switch (query.kind) {\n case \"start\":\n return true\n case \"filter\":\n case \"text\":\n case \"sort\":\n case \"traverse\":\n return isIndexPageInput(query.input)\n default:\n return false\n }\n}\n\nfunction compileKeysetPredicate(\n fields: readonly CompiledOrderField[],\n cursor: readonly EncodedCursorValue[],\n propertyColumn = \"properties\"\n): CompiledPredicate {\n const disjuncts: CompiledPredicate[] = []\n\n for (let index = 0; index < fields.length; index += 1) {\n const equalityPredicates = fields\n .slice(0, index)\n .map((field, equalityIndex) =>\n compileFieldEquality(field, cursor[equalityIndex], propertyColumn)\n )\n const advancePredicate = compileFieldAfter(fields[index], cursor[index], propertyColumn)\n if (!advancePredicate) continue\n\n const parts = [...equalityPredicates, advancePredicate]\n disjuncts.push({\n sql: `(${parts.map((part) => part.sql).join(\" AND \")})`,\n args: parts.flatMap((part) => part.args),\n })\n }\n\n if (disjuncts.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return {\n sql: `(${disjuncts.map((part) => part.sql).join(\" OR \")})`,\n args: disjuncts.flatMap((part) => part.args),\n }\n}\n\nfunction compileFieldEquality(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} = ?`,\n args: [cursor.value],\n }\n }\n\n if (cursor.nullish) {\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null')`,\n args: [field.propertyId, field.propertyId],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NOT NULL AND ${jsonTypeExpression(propertyColumn)} != 'null' AND ${compiledPropertyValueExpression(field, propertyColumn)} = ${field.scalarKind === \"decimal\" ? \"?::numeric\" : \"?::text::jsonb\"})`,\n args: [\n field.propertyId,\n field.propertyId,\n field.propertyId,\n field.scalarKind === \"decimal\" ? cursor.value : jsonbValue(cursor.value),\n ],\n }\n}\n\nfunction compileFieldAfter(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate | null {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} ${field.direction === \"desc\" ? \"<\" : \">\"} ?`,\n args: [cursor.value],\n }\n }\n\n if (cursor.nullish) return null\n\n const rankSql = `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END`\n const valueOperator = field.direction === \"desc\" ? \"<\" : \">\"\n\n return {\n sql: `(${rankSql} > 0 OR (${rankSql} = 0 AND ${compiledPropertyValueExpression(field, propertyColumn)} ${valueOperator} ${field.scalarKind === \"decimal\" ? \"?::numeric\" : \"?::text::jsonb\"}))`,\n args: [\n field.propertyId,\n field.propertyId,\n field.propertyId,\n field.propertyId,\n field.propertyId,\n field.scalarKind === \"decimal\" ? cursor.value : jsonbValue(cursor.value),\n ],\n }\n}\n\nfunction encodePageToken(row: PgObjectQueryPageRow, fields: readonly CompiledOrderField[]): string {\n const properties = objectProperties(row._cursor_properties ?? row.properties)\n const token: EncodedPageToken = {\n version: 1,\n order: fields.map(orderFieldKey),\n values: fields.map((field) => cursorValueForField(row, properties, field)),\n }\n return `${PAGE_TOKEN_PREFIX}${Buffer.from(JSON.stringify(token)).toString(\"base64url\")}`\n}\n\nfunction decodePageToken(\n token: string,\n fields: readonly CompiledOrderField[]\n): readonly EncodedCursorValue[] {\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throwInvalidPageToken(\"Invalid PostgreSQL object query page token\")\n }\n\n const raw = token.slice(PAGE_TOKEN_PREFIX.length)\n let decoded: unknown\n try {\n decoded = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\"))\n } catch {\n throwInvalidPageToken(\"Invalid PostgreSQL object query page token\")\n }\n\n if (!isEncodedPageToken(decoded)) {\n throwInvalidPageToken(\"Invalid PostgreSQL object query page token\")\n }\n\n const expectedOrder = fields.map(orderFieldKey)\n if (\n decoded.order.length !== expectedOrder.length ||\n decoded.order.some((field, index) => field !== expectedOrder[index])\n ) {\n throwInvalidPageToken(\"PostgreSQL object query page token does not match query order\")\n }\n\n return decoded.values\n}\n\nfunction throwInvalidPageToken(message: string): never {\n throw new ObjectQueryExecutionError(\"invalid_page_token\", message, \"$.pageToken\")\n}\n\nfunction isEncodedPageToken(value: unknown): value is EncodedPageToken {\n if (!isPlainObject(value)) return false\n if (value.version !== 1) return false\n if (!Array.isArray(value.order) || value.order.some((item) => typeof item !== \"string\")) {\n return false\n }\n if (!Array.isArray(value.values)) return false\n return value.values.every(\n (item) =>\n isPlainObject(item) &&\n typeof item.nullish === \"boolean\" &&\n (item.nullish || Object.hasOwn(item, \"value\"))\n )\n}\n\nfunction cursorValueForField(\n row: PgObjectQueryPageRow,\n properties: Record<string, unknown>,\n field: CompiledOrderField\n): EncodedCursorValue {\n const value =\n field.kind === \"column\"\n ? field.column === \"object_type_id\"\n ? row.object_type_id\n : row.primary_id\n : properties[field.propertyId]\n\n return value === null || value === undefined ? { nullish: true } : { nullish: false, value }\n}\n\nfunction orderFieldKey(field: CompiledOrderField): string {\n return field.kind === \"column\"\n ? `column:${field.column}:${field.direction}`\n : `property:${field.propertyId}:${field.scalarKind ?? \"json\"}:${field.direction}`\n}\n\nfunction compiledPropertyValueExpression(\n field: Extract<CompiledOrderField, { kind: \"property\" }>,\n propertyColumn = \"properties\"\n): string {\n return field.scalarKind === \"decimal\"\n ? `(${jsonTextExpression(propertyColumn)})::numeric`\n : `NULLIF(${jsonValueExpression(propertyColumn)}, 'null'::jsonb)`\n}\n\nfunction columnExpression(\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\",\n qualifier?: string\n): string {\n return qualifier ? `${qualifier}.${column}` : column\n}\n\nfunction jsonValueExpression(column = \"properties\"): string {\n return `${column} -> (?::text)`\n}\n\nfunction jsonTextExpression(column = \"properties\"): string {\n return `${column} ->> (?::text)`\n}\n\nfunction jsonTypeExpression(column = \"properties\"): string {\n return `jsonb_typeof(${jsonValueExpression(column)})`\n}\n\nfunction jsonbValue(value: unknown): string {\n if (value instanceof Date) return JSON.stringify(value.toISOString())\n const json = JSON.stringify(value)\n return json === undefined ? \"null\" : json\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction sqlComparisonOperator(op: \"lt\" | \"lte\" | \"gt\" | \"gte\"): \"<\" | \"<=\" | \">\" | \">=\" {\n switch (op) {\n case \"lt\":\n return \"<\"\n case \"lte\":\n return \"<=\"\n case \"gt\":\n return \">\"\n case \"gte\":\n return \">=\"\n }\n}\n\nfunction numberPlaceholders(sql: string): string {\n let index = 0\n return sql.replace(/\\?/g, () => `$${++index}`)\n}\n\nfunction numberCompiledQuery<T extends { sql: string; args: unknown[] }>(compiled: T): T {\n return {\n ...compiled,\n sql: numberPlaceholders(compiled.sql),\n }\n}\n\nfunction objectProperties(value: unknown): Record<string, unknown> {\n if (typeof value === \"string\") {\n const parsed = JSON.parse(value) as unknown\n return isPlainObject(parsed) ? parsed : {}\n }\n\n return isPlainObject(value) ? value : {}\n}\n\nfunction identityRows<T>(rows: readonly T[]): readonly T[] {\n return rows\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
@@ -45,20 +45,22 @@
45
45
  "import { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport {\n duplicateMaterializationWork as duplicateWork,\n materializationApplyPhase,\n materializationPlanKindRank,\n ProviderMaterializationSessionState,\n type ProviderMaterializationTransactionLifecycle,\n prepareMaterializationWork,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationVectorChange,\n StageMaterializationWorkInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { PG_MATERIALIZATION_WORK_TABLE } from \"./materialization-state\"\nimport {\n assertReplacementPlanCoverage,\n PG_PLAN_WORK_TABLE,\n type PgReplacementPlan,\n replacementPlanCounts,\n} from \"./replacement-plans\"\nimport { jsonParameter } from \"./shared\"\n\nexport interface PgOntologyTransactionContext {\n readonly id: object\n readonly materializations: ProviderMaterializationTransactionLifecycle\n active: boolean\n}\n\nexport class PgMaterializationSessionState extends ProviderMaterializationSessionState {\n stagedWorkCount = 0\n changedObjects = 0\n changedLinks = 0\n workAnalyzed = false\n /** Work staged on the session lives in a temp table; a plan-bound session reads its plan's. */\n readonly workTable: string\n readonly workId: string\n\n constructor(\n header: MaterializationPlanHeader,\n transactionId: object,\n readonly plan: PgReplacementPlan | null\n ) {\n super(header, transactionId)\n this.workTable = plan ? PG_PLAN_WORK_TABLE : PG_MATERIALIZATION_WORK_TABLE\n this.workId = plan ? plan.versionId : this.id\n }\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(\n header: MaterializationPlanHeader,\n plan: PgReplacementPlan | null\n ): 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(\n structuredClone(header),\n this.context.id,\n plan\n )\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 // A plan's rows outlive the session: maintenance deletes them once the candidate moved on.\n if (!session.plan) await this.deleteWork(session.id)\n session.active = false\n this.live.delete(session)\n this.context?.materializations.complete(session.providerToken)\n }\n\n deactivateAll(): void {\n for (const session of this.live) session.active = false\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 occupied: record.kind === \"cardinality\" ? record.occupied : null,\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 work_id, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two, cardinality_occupied, 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->>'occupied')::boolean, value->'record'\n FROM staged\n `\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw duplicateWork()\n }\n throw error\n }\n session.stagedWorkCount += records.length\n }\n\n /**\n * Refreshes the work table's statistics once planning has finished writing a large population,\n * before set-based reads join it; small edits avoid the extra round trip.\n */\n async analyzeSealedWork(session: PgMaterializationSessionState): Promise<void> {\n if (session.workAnalyzed) return\n session.workAnalyzed = true\n // A plan's shared tables are analyzed as it is planned, outside any commit transaction.\n if (session.plan || session.stagedWorkCount < 10_000) return\n await this.sql`ANALYZE ${this.sql(session.workTable)}`\n }\n\n /** Staged object upserts and deletes of profiled types, or of objects with a stored vector. */\n async *vectorChangePages(\n session: PgMaterializationSessionState,\n objectTypeIds: readonly string[],\n pageRows: number\n ): AsyncIterable<readonly MaterializationVectorChange[]> {\n if (objectTypeIds.length === 0) {\n const [stored] = await this.sql`\n SELECT 1 FROM object_vectors WHERE project_id = ${session.header.commit.projectId} LIMIT 1\n `\n if (!stored) return\n }\n // Each kind is one range of the lane index, paged in its order.\n for (const kind of [\"object-delete\", \"object-upsert\"] as const) {\n let after: readonly [string, string, string] = [\"\", \"\", \"\"]\n while (true) {\n this.require(session.publicSession())\n const rows = await this.sql<\n {\n readonly sort_one: string\n readonly sort_two: string\n readonly record_key: string\n readonly payload: unknown\n }[]\n >`\n WITH changes AS (\n SELECT sort_one, sort_two, record_key, payload,\n COALESCE(payload->'item'->'value'->'row'->'ref', payload->'item'->'value'->'ref')\n AS ref\n FROM ${this.sql(session.workTable)}\n WHERE work_id = ${session.workId} AND lane = 'apply'\n AND major_order = ${materializationApplyPhase(kind)}\n AND minor_order = ${materializationPlanKindRank(kind)}\n AND (sort_one, sort_two, record_key) > (${after[0]}, ${after[1]}, ${after[2]})\n )\n SELECT sort_one, sort_two, record_key, payload FROM changes\n WHERE ref->>'objectTypeId' = ANY(${this.sql.array([...objectTypeIds])}::text[])\n OR EXISTS (\n SELECT 1 FROM object_vectors\n WHERE project_id = ${session.header.commit.projectId}\n AND object_type_id = changes.ref->>'objectTypeId'\n AND primary_id = changes.ref->>'primaryId'\n )\n ORDER BY sort_one, sort_two, record_key\n LIMIT ${pageRows}\n `\n if (rows.length === 0) break\n const last = rows[rows.length - 1]!\n after = [last.sort_one, last.sort_two, last.record_key]\n yield rows.map(\n (row) => (row.payload as MaterializationPlanWorkRecord).item\n ) as MaterializationVectorChange[]\n }\n }\n }\n\n async hasCardinalityWork(session: PgMaterializationSessionState): Promise<boolean> {\n const [row] = await this.sql`\n SELECT 1 FROM ${this.sql(session.workTable)}\n WHERE work_id = ${session.workId} AND lane = 'cardinality'\n LIMIT 1\n `\n return row !== undefined\n }\n\n async assertClassificationCoverage(session: PgMaterializationSessionState): Promise<void> {\n if (session.plan) await assertReplacementPlanCoverage(this.sql, session.plan)\n }\n\n async projectionCounts(session: PgMaterializationSessionState) {\n return session.plan ? replacementPlanCounts(this.sql, session.plan.versionId) : null\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 work_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 cardinality_occupied BOOLEAN,\n payload JSONB NOT NULL,\n PRIMARY KEY (work_id, record_key),\n UNIQUE (work_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 work_id, lane, major_order, minor_order, sort_one, sort_two, record_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 work_id = ${sessionId}\n `\n }\n}\n",
46
46
  "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 MaterializationLinkScopeRevision,\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 jsonParameter,\n jsonTupleExpression,\n linkRefFromColumns,\n objectRefFromColumns,\n type PgOntologySourceAssertionRow,\n type PgStoredOverrideRow,\n sourceAssertion,\n toIsoString,\n} from \"./shared\"\nimport {\n activeSourceRows,\n liveSourceRowsJoin,\n replacementAssertionRows,\n sourceAssertionColumns,\n} from \"./source-roots\"\n\nexport const PG_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_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\n/** A link a replacement plan decides, and whether its plan needs a diff. */\nexport interface ReplacementLinkIdentity {\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\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 activeSourceRows(\n this.sql,\n this.projectId,\n refs.map((ref) => ({ kind: \"object\", ref }))\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 activeSourceRows(\n this.sql,\n this.projectId,\n refs.map((ref) => ({ kind: \"link\", ref }))\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 linkScopeRevisions(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): Promise<readonly MaterializationLinkScopeRevision[]> {\n if (scopes.length === 0) return []\n return (await this.readEffectiveLinkScopes(scopes)).revisions\n }\n\n async linkSlotStates(\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 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 ${sourceAssertionColumns(this.sql)}\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 ${liveSourceRowsJoin(this.sql, this.projectId)}\n WHERE rows.entity_kind = 'link'\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 { revisions, effective } = await this.readEffectiveLinkScopes(scopes)\n return scopes.map(({ source, linkId }, index) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...revisions[index]!,\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n private async readEffectiveLinkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): Promise<{\n readonly revisions: readonly MaterializationLinkScopeRevision[]\n readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>\n }> {\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 requestedParameter = jsonParameter(this.sql, requested)\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 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 {\n revisions: scopes.map(({ source, linkId }) =>\n finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)\n ),\n effective,\n }\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 ${liveSourceRowsJoin(this.sql, this.projectId)}\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.entity_kind = 'link'\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 ${liveSourceRowsJoin(this.sql, this.projectId)}\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.entity_kind = 'link'\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 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 ReplacementLinkIdentity[],\n incremental = false\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 incremental\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 incremental = false\n ): Promise<ReplacementSources> {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const rows = await replacementAssertionRows(this.sql, {\n projectId: this.projectId,\n sourceId,\n materializationId: materializationIds[0]!,\n incremental,\n includePrevious: materializationIds.length > 1,\n refs,\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\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 ...sourceAssertion(row),\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 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 utf8SortExpression(parts: readonly string[]): string {\n return `encode(convert_to(${jsonTupleExpression(parts)}, 'UTF8'), 'hex')`\n}\n",
47
47
  "import type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n projectionEntityKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n sourceEntityColumns,\n sourceStageRoots,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { SourceActivationWrite, StageSourceRowsInput } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport type { PgOntologySourceAssertionRow } from \"./shared\"\nimport { columnKeyExpression, jsonParameter, type PgOntologySourceRow } from \"./shared\"\n\n/**\n * Source storage in three levels: a version (`ontology_sources`, one per run), its roots (one per\n * logical dataset row, keyed by the canonical entity key) and their rows (what each root asserts).\n *\n * A root is live while its version is published (active or superseded), it is not retired and it\n * is not a deletion. Activation retires the live roots its candidate replaces and flips the\n * version; the candidate's own roots are never rewritten. One live root per source and key holds\n * because activation, under the source fence, retires every root the candidate replaces.\n */\nexport const PUBLISHED = \"('active', 'superseded')\"\n\n/** The columns `sourceAssertion` reads, over `versions`, `roots` and `rows`. */\nexport function sourceAssertionColumns(sql: SQLClient) {\n return sql.unsafe(`versions.source_id, versions.materialization_id, roots.root_key,\n roots.staging_ordinal, rows.entity_kind, rows.object_type_id, rows.primary_id,\n rows.source_type_id, rows.source_primary_id, rows.link_id, rows.target_type_id,\n rows.target_primary_id, rows.payload`)\n}\n\n/** Keeps `rows` to those of live roots in `projectId`, joined as `roots` and `versions`. */\nexport function liveSourceRowsJoin(sql: SQLClient, projectId: string) {\n return sql`\n JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = ${projectId} AND roots.retired_at IS NULL AND NOT roots.deleted\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${sql.unsafe(PUBLISHED)}\n `\n}\n\nfunction candidateVersion(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n }\n) {\n return sql`(SELECT version_id FROM ontology_sources WHERE project_id = ${input.projectId}\n AND source_id = ${input.sourceId} AND materialization_id = ${input.materializationId})`\n}\n\n/** The typed identity of `rows` equals the one requested. */\nconst ENTITY_MATCH = `rows.entity_kind = requested.entity_kind\n AND rows.object_type_id IS NOT DISTINCT FROM requested.object_type_id\n AND rows.primary_id IS NOT DISTINCT FROM requested.primary_id\n AND rows.source_type_id IS NOT DISTINCT FROM requested.source_type_id\n AND rows.source_primary_id IS NOT DISTINCT FROM requested.source_primary_id\n AND rows.link_id IS NOT DISTINCT FROM requested.link_id\n AND rows.target_type_id IS NOT DISTINCT FROM requested.target_type_id\n AND rows.target_primary_id IS NOT DISTINCT FROM requested.target_primary_id`\n\nconst REQUESTED_ENTITY = `entity_kind TEXT, object_type_id TEXT, primary_id TEXT,\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT, target_type_id TEXT,\n target_primary_id TEXT`\n\n/** An entity's own key, and for a link the key of the object root that may assert it. */\nfunction requestedEntity(ref: ProjectionEntityRef) {\n const columns = sourceEntityColumns(ref)\n const key = projectionEntityKey(ref)\n return {\n entity_kind: ref.kind,\n object_type_id: columns.objectTypeId,\n primary_id: columns.primaryId,\n source_type_id: columns.sourceTypeId,\n source_primary_id: columns.sourcePrimaryId,\n link_id: columns.linkId,\n target_type_id: columns.targetTypeId,\n target_primary_id: columns.targetPrimaryId,\n root_keys:\n ref.kind === \"object\"\n ? [key]\n : [key, projectionEntityKey({ kind: \"object\", ref: ref.ref.source })],\n }\n}\n\n/** The candidate's rows, plus the rows of the live roots it may replace. */\nexport function replacementSourceRows(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n readonly incremental: boolean\n }\n) {\n const live = sql`roots.retired_at IS NULL AND NOT roots.deleted\n AND versions.source_id = ${input.sourceId} AND versions.status IN ${sql.unsafe(PUBLISHED)}`\n const roots = input.incremental\n ? sql`\n SELECT live.id FROM ontology_source_roots AS changed\n CROSS JOIN LATERAL (\n SELECT roots.id FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n WHERE roots.project_id = ${input.projectId} AND roots.root_key = changed.root_key AND ${live}\n OFFSET 0\n ) AS live\n WHERE changed.version_id = ${candidateVersion(sql, input)}\n `\n : sql`\n SELECT roots.id FROM ontology_sources AS versions\n JOIN ontology_source_roots AS roots ON roots.version_id = versions.version_id\n WHERE versions.project_id = ${input.projectId} AND ${live}\n `\n return sql`\n SELECT rows.* FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${candidateVersion(sql, input)}\n UNION ALL\n SELECT rows.* FROM (${roots}) AS roots\n CROSS JOIN LATERAL (\n SELECT rows.* FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id OFFSET 0\n ) AS rows\n `\n}\n\nexport async function stageSourceRoots(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n input: StageSourceRowsInput\n): Promise<void> {\n const roots = sourceStageRoots(manifest.projection_kind, input)\n if (roots.length === 0) return\n if (!manifest.base_materialization_id && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n const values = jsonParameter(\n sql,\n roots.map((root) => ({\n root_key: root.rootKey,\n staging_ordinal: root.stagingOrdinal,\n deleted: root.deleted,\n }))\n )\n const inserted = await sql<{ root_key: string }[]>`\n INSERT INTO ontology_source_roots (version_id, project_id, root_key, staging_ordinal, deleted)\n SELECT ${manifest.version_id}, ${input.projectId}, root_key, staging_ordinal, deleted\n FROM jsonb_to_recordset(${values}) AS input(root_key TEXT, staging_ordinal BIGINT, deleted BOOLEAN)\n ON CONFLICT DO NOTHING RETURNING root_key\n `\n if (inserted.length === roots.length) return\n const insertedKeys = new Set(inserted.map((row) => row.root_key))\n const skipped = roots.filter((root) => !insertedKeys.has(root.rootKey))\n const stored = await sql<\n { root_key: string; staging_ordinal: string | number; deleted: boolean }[]\n >`\n SELECT root_key, staging_ordinal, deleted FROM ontology_source_roots\n WHERE version_id = ${manifest.version_id}\n AND root_key = ANY(${sql.array(skipped.map((root) => root.rootKey))}::text[])\n `\n const existing = new Map(stored.map((root) => [root.root_key, root]))\n if (\n skipped.some((root) => {\n const previous = existing.get(root.rootKey)\n return (\n !previous ||\n Number(previous.staging_ordinal) !== root.stagingOrdinal ||\n previous.deleted !== root.deleted\n )\n })\n )\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n}\n\n/**\n * Retires what the candidate replaces; its own roots go live when its version turns active. Every\n * link those roots assert changes its live source, which the commit records as touched.\n */\nexport async function activateSourceRoots(\n sql: SQLClient,\n projectId: string,\n candidate: PgOntologySourceRow,\n activation: SourceActivationWrite\n): Promise<void> {\n if (\n candidate.base_materialization_id !== null &&\n (candidate.base_materialization_id !== activation.expected.activeMaterializationId ||\n candidate.base_commit_id !== activation.expected.lastCommitId)\n )\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n if (candidate.base_materialization_id !== null && Number(candidate.root_count) === 0) return\n const live = sql`roots.retired_at IS NULL AND NOT roots.deleted\n AND versions.version_id = roots.version_id AND versions.project_id = ${projectId}\n AND versions.source_id = ${activation.source.projectionId}\n AND versions.status IN ${sql.unsafe(PUBLISHED)}`\n const retired =\n candidate.base_materialization_id === null\n ? sql`\n UPDATE ontology_source_roots AS roots SET retired_at = ${activation.updatedAt}\n FROM ontology_sources AS versions WHERE ${live}\n RETURNING roots.id\n `\n : sql`\n UPDATE ontology_source_roots AS roots SET retired_at = ${activation.updatedAt}\n FROM ontology_source_roots AS changed, ontology_sources AS versions\n WHERE changed.version_id = ${candidate.version_id} AND roots.project_id = ${projectId}\n AND roots.root_key = changed.root_key AND ${live}\n RETURNING roots.id\n `\n await sql`\n WITH retired AS (${retired}), changed AS (\n SELECT id FROM retired\n UNION ALL\n SELECT id FROM ontology_source_roots WHERE version_id = ${candidate.version_id}\n )\n INSERT INTO ontology_commit_touches (project_id, entity_kind, identity_key)\n SELECT DISTINCT ${projectId}, 'link', ${sql.unsafe(\n columnKeyExpression([\n \"rows.source_type_id\",\n \"rows.source_primary_id\",\n \"rows.link_id\",\n \"rows.target_type_id\",\n \"rows.target_primary_id\",\n ])\n )}\n FROM changed\n CROSS JOIN LATERAL (\n SELECT * FROM ontology_source_rows AS rows\n WHERE rows.root_id = changed.id AND rows.entity_kind = 'link'\n OFFSET 0\n ) AS rows\n `\n // Deletions are never live; retiring them lets cleanup remove them with their version.\n await sql`\n UPDATE ontology_source_roots SET retired_at = ${activation.updatedAt}\n WHERE version_id = ${candidate.version_id} AND deleted\n `\n}\n\nexport async function assertSourceRootCoverage(\n sql: SQLClient,\n manifest: PgOntologySourceRow\n): Promise<void> {\n const [invalid] = await sql`\n SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.version_id = ${manifest.version_id}\n AND roots.deleted = EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id\n )\n LIMIT 1\n `\n if (invalid)\n throw new MaterializationValidationError(\n \"Source roots must have complete assertions or an explicit deletion, never both.\"\n )\n}\n\n/** The live assertions of `refs`, whichever source asserts them. */\nexport function activeSourceRows(\n sql: SQLClient,\n projectId: string,\n refs: readonly ProjectionEntityRef[]\n) {\n const requested = refs.flatMap((ref) => {\n const { root_keys, ...entity } = requestedEntity(ref)\n return root_keys.map((root_key) => ({ ...entity, root_key }))\n })\n return sql<PgOntologySourceAssertionRow[]>`\n SELECT ${sourceAssertionColumns(sql)}\n FROM jsonb_to_recordset(${jsonParameter(sql, requested)})\n AS requested(root_key TEXT, ${sql.unsafe(REQUESTED_ENTITY)})\n JOIN ontology_source_roots AS roots ON roots.project_id = ${projectId}\n AND roots.root_key = requested.root_key AND roots.retired_at IS NULL AND NOT roots.deleted\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${sql.unsafe(PUBLISHED)}\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${sql.unsafe(ENTITY_MATCH)}\n `\n}\n\n/** The candidate's assertions of `refs`, and optionally the live ones they would replace. */\nexport function replacementAssertionRows(\n sql: SQLClient,\n input: {\n projectId: string\n sourceId: string\n materializationId: string\n incremental: boolean\n includePrevious: boolean\n refs: readonly ProjectionEntityRef[]\n }\n) {\n const version = candidateVersion(sql, input)\n const previous = !input.includePrevious\n ? sql``\n : sql`UNION ALL\n SELECT ${sourceAssertionColumns(sql)} FROM (\n SELECT roots.* FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n WHERE roots.project_id = ${input.projectId} AND roots.root_key = ANY(requested.root_keys)\n AND roots.retired_at IS NULL AND NOT roots.deleted\n AND versions.source_id = ${input.sourceId} AND versions.status IN ${sql.unsafe(PUBLISHED)}\n ${\n !input.incremental\n ? sql``\n : sql`AND EXISTS (SELECT 1 FROM ontology_source_roots AS changed\n WHERE changed.version_id = ${version} AND changed.root_key = roots.root_key)`\n }\n OFFSET 0\n ) AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN LATERAL (\n SELECT rows.* FROM ontology_source_rows AS rows\n WHERE rows.root_id = roots.id AND ${sql.unsafe(ENTITY_MATCH)}\n OFFSET 0\n ) AS rows\n `\n // Keep each JSON request as an indexed identity lookup even with fresh/stale statistics.\n // Flattening this LATERAL caused a cold 10k-root run to spend seconds on each state page.\n return sql<PgOntologySourceAssertionRow[]>`\n SELECT selected.* FROM jsonb_to_recordset(${jsonParameter(sql, input.refs.map(requestedEntity))})\n AS requested(${sql.unsafe(REQUESTED_ENTITY)}, root_keys TEXT[])\n CROSS JOIN LATERAL (\n SELECT ${sourceAssertionColumns(sql)} FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${sql.unsafe(ENTITY_MATCH)}\n WHERE roots.version_id = ${version} AND roots.root_key = ANY(requested.root_keys)\n ${previous}\n OFFSET 0\n ) AS selected\n `\n}\n",
48
- "import {\n type EffectiveChangeCounts,\n MaterializationConflictError,\n MaterializationValidationError,\n type OntologyLinkRef,\n type OntologyObjectRef,\n objectRefKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertNonblank,\n assertPageRows,\n assertPositiveInteger,\n assertReplacementPlanCommit,\n duplicateMaterializationWork,\n invalidCorrelation,\n materializationWorkColumns,\n prepareReplacementIdentities,\n workUniquenessKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationObjectExistence,\n OntologyCommitWrite,\n OntologyReplacementPlanStorage,\n OpenedReplacementPlan,\n OpenReplacementPlanInput,\n PurgeReplacementPlansInput,\n ReplacementPlanRef,\n ReplacementPlanStatePage,\n ReplacementPlanStatus,\n StageReplacementPlanInput,\n StreamReplacementPlanStateInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { isWithinPgTransaction, runPgTransaction } from \"../transactions\"\nimport { PgMaterializationStateReader } from \"./materialization-state\"\nimport {\n assertProjectionExecution,\n columnKeyExpression,\n jsonParameter,\n jsonTupleExpression,\n type PgOntologySourceRow,\n toIsoString,\n} from \"./shared\"\nimport { PUBLISHED, replacementSourceRows } from \"./source-roots\"\n\nexport const PG_PLAN_WORK_TABLE = \"ontology_replacement_plan_work\"\nconst IDENTITIES = \"ontology_replacement_plan_identities\"\n/** An identity's planning order: its key's UTF-8 bytes, as `objectRefSortKey`/`linkRefSortKey`. */\nconst SORT_KEY = \"encode(convert_to(identity_key, 'UTF8'), 'hex')\"\n\n/**\n * Rows a plan writes at once before its tables are analyzed again. Autovacuum lags behind a bulk\n * write, and with the statistics of near-empty tables the planner scans a plan's whole work for\n * each keyed lookup instead of seeking it.\n */\nconst ANALYZE_ROWS = 10_000\n\n/** The plan a session applies: its work rows carry the candidate's source version as `work_id`. */\nexport interface PgReplacementPlan {\n readonly versionId: string\n readonly projectionKind: \"object\" | \"link\"\n}\n\ninterface PlanRow {\n readonly version_id: string\n readonly commit_id: string\n readonly committed_at: Date | string\n readonly replaced_materialization_id: string | null\n readonly replaced_last_commit_id: string | null\n}\n\ninterface IdentityRow {\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: boolean\n}\n\n/**\n * The revision of an object identity: its effective row, its override and the latest point of each\n * telemetry property. `type` and `id` are SQL expressions; `$1` is the project id.\n */\nfunction objectRevision(type: string, id: string): string {\n return `jsonb_build_array(\n (SELECT jsonb_build_array(version, last_commit_id) FROM objects\n WHERE project_id = $1 AND object_type_id = ${type} AND primary_id = ${id}),\n (SELECT last_commit_id FROM ontology_object_overrides\n WHERE project_id = $1 AND object_type_id = ${type} AND primary_id = ${id}),\n -- An instant, not its rendering in the session's time zone.\n (SELECT jsonb_agg(\n jsonb_build_array(property_id, extract(epoch FROM at), last_commit_id) ORDER BY property_id\n )\n FROM timeseries_latest\n WHERE project_id = $1 AND object_type_id = ${type} AND object_id = ${id})\n )`\n}\n\n/**\n * The revision of a link endpoint, which a link plan reads only for its existence. One this plan\n * decides exists as planned, which follows its whole object revision; any other exists as it is.\n * `$2` is the plan's version id.\n */\nfunction endpointRevision(type: string, id: string): string {\n return `CASE WHEN EXISTS (\n SELECT 1 FROM ${IDENTITIES} AS endpoint\n WHERE endpoint.version_id = $2 AND endpoint.entity_kind = 'object'\n AND endpoint.identity_key = ${jsonTupleExpression([`to_jsonb(${type})::text`, `to_jsonb(${id})::text`])}\n ) THEN ${objectRevision(type, id)}\n ELSE to_jsonb(EXISTS (\n SELECT 1 FROM objects WHERE project_id = $1 AND object_type_id = ${type} AND primary_id = ${id}\n ))\n END`\n}\n\n/**\n * The revision of a link identity, from its key column `key`: its effective row, its edge and slot\n * overrides, the live source root asserting it, and the existence of both endpoints. A live root\n * that asserts a link is keyed by the link or by its source object.\n */\nfunction linkRevision(key: string): string {\n const part = (index: number) => `(${key}::jsonb->>${index})`\n return `jsonb_build_array(\n (SELECT last_commit_id FROM links\n WHERE project_id = $1 AND source_type_id = ${part(0)} AND source_id = ${part(1)}\n AND link_id = ${part(2)} AND target_type_id = ${part(3)} AND target_id = ${part(4)}),\n (SELECT last_commit_id FROM ontology_link_overrides\n WHERE project_id = $1 AND identity_kind = 'edge' AND identity_key = ${key}::jsonb),\n (SELECT last_commit_id FROM ontology_link_overrides\n WHERE project_id = $1 AND identity_kind = 'slot'\n AND identity_key = jsonb_build_array(${part(0)}, ${part(1)}, ${part(2)})),\n (SELECT MAX(roots.id) FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n WHERE roots.project_id = $1 AND roots.retired_at IS NULL AND NOT roots.deleted\n AND roots.root_key IN (\n '[\"link\",' || substr(${key}, 2),\n ${jsonTupleExpression([`'\"object\"'`, `to_jsonb(${part(0)})::text`, `to_jsonb(${part(1)})::text`])}\n )\n AND EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.root_id = roots.id AND rows.entity_kind = 'link'\n AND rows.source_type_id = ${part(0)} AND rows.source_primary_id = ${part(1)}\n AND rows.link_id = ${part(2)} AND rows.target_type_id = ${part(3)}\n AND rows.target_primary_id = ${part(4)}\n )),\n ${endpointRevision(part(0), part(1))},\n ${endpointRevision(part(3), part(4))}\n )`\n}\n\n/** The revision of the identity rows aliased `identities`, as text. */\nfunction revision(kind: \"object\" | \"link\"): string {\n const key = \"identities.identity_key\"\n return kind === \"object\"\n ? `${objectRevision(`(${key}::jsonb->>0)`, `(${key}::jsonb->>1)`)}::text`\n : `${linkRevision(key)}::text`\n}\n\nexport class PgOntologyReplacementPlanStorage implements OntologyReplacementPlanStorage {\n constructor(private readonly sql: SQLClient) {}\n\n async open(input: OpenReplacementPlanInput): Promise<OpenedReplacementPlan> {\n const { commit } = input\n assertReplacementPlanCommit(commit)\n return runPgTransaction(this.sql, async (sql) => {\n const candidate = await requireCandidate(sql, input, true)\n const [active] = await sql<\n { readonly materialization_id: string; readonly last_commit_id: string | null }[]\n >`\n SELECT materialization_id, last_commit_id FROM ontology_sources\n WHERE project_id = ${input.projectId} AND source_id = ${input.source.projectionId}\n AND status = 'active'\n `\n const replacedMaterializationId = active?.materialization_id ?? null\n const replacedLastCommitId = active?.last_commit_id ?? null\n const existing = await planRow(sql, candidate.version_id)\n // A plan decides the entities of the source it replaces: once that moved, it starts over.\n if (\n existing?.replaced_materialization_id === replacedMaterializationId &&\n existing.replaced_last_commit_id === replacedLastCommitId\n ) {\n return { committedAt: toIsoString(existing.committed_at) }\n }\n if (existing) await deletePlan(sql, candidate.version_id)\n await sql`\n INSERT INTO ontology_replacement_plans (\n version_id, project_id, commit_id, committed_at, replaced_materialization_id,\n replaced_last_commit_id, watermark\n ) VALUES (\n ${candidate.version_id}, ${input.projectId}, ${commit.id}, ${commit.committedAt},\n ${replacedMaterializationId}, ${replacedLastCommitId}, pg_current_snapshot()\n )\n `\n const rows = replacementSourceRows(sql, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n materializationId: input.materializationId,\n incremental: candidate.base_materialization_id !== null,\n })\n // Every entity of the candidate and of the roots it replaces needs a diff.\n const sourceKey = columnKeyExpression([\"source_type_id\", \"source_primary_id\"])\n const targetKey = columnKeyExpression([\"target_type_id\", \"target_primary_id\"])\n const opened = await sql`\n WITH keyed AS (\n SELECT DISTINCT entity_kind, CASE entity_kind\n WHEN 'object' THEN ${sql.unsafe(columnKeyExpression([\"object_type_id\", \"primary_id\"]))}\n ELSE ${sql.unsafe(\n columnKeyExpression([\n \"source_type_id\",\n \"source_primary_id\",\n \"link_id\",\n \"target_type_id\",\n \"target_primary_id\",\n ])\n )}\n END AS identity_key,\n CASE entity_kind\n WHEN 'link' THEN ${sql.unsafe(sourceKey)}\n END AS source_key,\n CASE entity_kind\n WHEN 'link' THEN ${sql.unsafe(targetKey)}\n END AS target_key\n FROM (${rows}) AS rows\n )\n INSERT INTO ${sql(IDENTITIES)} (\n version_id, entity_kind, identity_key, sort_key, diff_required, expand_at, source_key,\n target_key\n )\n SELECT ${candidate.version_id}, entity_kind, identity_key,\n ${sql.unsafe(SORT_KEY)}, TRUE, CASE entity_kind WHEN 'link' THEN 0 END, source_key,\n target_key\n FROM keyed\n `\n if (opened.count >= ANALYZE_ROWS) await analyzePlans(sql)\n return { committedAt: commit.committedAt }\n })\n }\n\n async *streamState(\n input: StreamReplacementPlanStateInput\n ): AsyncIterable<ReplacementPlanStatePage> {\n assertPageRows(input.pageRows)\n await runPgTransaction(this.sql, async (sql) => {\n const { candidate } = await requirePlan(sql, input)\n if (input.entityKind === \"object\" && candidate.projection_kind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (input.entityKind === \"link\") {\n if ((await unplannedCount(sql, candidate.version_id, \"object\")) > 0) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must plan every object before its links.\"\n )\n }\n const expanded = await expandLinks(sql, candidate.version_id, input.projectId, \"pending\")\n if (expanded >= ANALYZE_ROWS && !isWithinPgTransaction(this.sql)) await analyzePlans(sql)\n }\n })\n let after = \"\"\n let streamed = 0\n while (true) {\n // Each page reads its state and the revision of that state in one snapshot.\n const page = await runPgTransaction(\n this.sql,\n async (sql) => {\n const { candidate } = await requirePlan(sql, input)\n const rows = await sql<IdentityRow[]>`\n SELECT identity_key, sort_key, diff_required FROM ${sql(IDENTITIES)}\n WHERE version_id = ${candidate.version_id} AND entity_kind = ${input.entityKind}\n AND planned_revision IS NULL AND sort_key > ${after}\n ORDER BY sort_key\n LIMIT ${input.pageRows}\n `\n if (rows.length === 0) return null\n after = rows[rows.length - 1]!.sort_key\n streamed += rows.length\n const state = await readPage(sql, input, candidate, rows)\n await sql.unsafe(\n `UPDATE ${IDENTITIES} AS identities\n SET read_revision = ${revision(input.entityKind)}\n WHERE version_id = $2 AND entity_kind = $3 AND identity_key = ANY($4::text[])`,\n [\n input.projectId,\n candidate.version_id,\n input.entityKind,\n rows.map((row) => row.identity_key),\n ]\n )\n return state\n },\n { isolation: \"repeatableRead\" }\n )\n if (!page) {\n // Every page is staged by now: later lookups and the commit join this work. Never in the\n // commit transaction, where ANALYZE would hold a lock other commits queue behind.\n if (streamed >= ANALYZE_ROWS && !isWithinPgTransaction(this.sql)) {\n await analyzePlans(this.sql)\n }\n return\n }\n yield page\n }\n }\n\n async stage(input: StageReplacementPlanInput): Promise<void> {\n await runPgTransaction(this.sql, async (sql) => {\n const { plan, candidate } = await requirePlan(sql, input)\n const identities = prepareReplacementIdentities(input, planCommit(plan))\n const versionId = candidate.version_id\n const summary = identities.map((identity) => ({\n entityKind: identity.kind,\n identityKey: identity.key,\n classified: identity.classified,\n change: identity.change,\n }))\n // Only an identity streamed and still to plan has the revision its work is planned from,\n // and holds no work: unplanning one deletes its work and forgets what it read.\n const planned = await sql`\n WITH planned AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(sql, summary)}::jsonb)\n )\n UPDATE ${sql(IDENTITIES)} AS identities\n SET planned_revision = identities.read_revision,\n classified = (planned.value->>'classified')::boolean,\n change = planned.value->>'change',\n -- A planned object may flip its existence: the next link expansion starts from it.\n expand_at = CASE identities.entity_kind\n WHEN 'object' THEN (\n SELECT expansions FROM ontology_replacement_plans WHERE version_id = ${versionId}\n )\n ELSE identities.expand_at\n END\n FROM planned\n WHERE identities.version_id = ${versionId}\n AND identities.entity_kind = planned.value->>'entityKind'\n AND identities.identity_key = planned.value->>'identityKey'\n AND identities.read_revision IS NOT NULL AND identities.planned_revision IS NULL\n RETURNING identities.entity_kind, identities.identity_key\n `\n if (planned.length !== identities.length) {\n const streamed = new Set(planned.map((row) => `${row.entity_kind}:${row.identity_key}`))\n const missing = identities.find(\n (identity) => !streamed.has(`${identity.kind}:${identity.key}`)\n )\n throw new MaterializationValidationError(\n `Replacement identity ${missing?.entityKey} is not streamed and still to plan.`\n )\n }\n const work = identities.flatMap((identity) =>\n identity.records.map((record) => {\n const columns = materializationWorkColumns(record)\n return {\n entityKind: identity.kind,\n identityKey: identity.key,\n recordKey: record.recordKey,\n uniqueKey: workUniquenessKey(record),\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 occupied: record.kind === \"cardinality\" ? record.occupied : null,\n record,\n }\n })\n )\n if (work.length > 0) {\n try {\n await sql`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(sql, work)}::jsonb)\n )\n INSERT INTO ${sql(PG_PLAN_WORK_TABLE)} (\n work_id, entity_kind, identity_key, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two, cardinality_occupied, payload\n )\n SELECT ${versionId}, value->>'entityKind', value->>'identityKey', value->>'recordKey',\n value->>'uniqueKey', value->>'kind', value->>'lane',\n (value->>'majorOrder')::integer, (value->>'minorOrder')::integer,\n value->>'sortOne', value->>'sortTwo', (value->>'occupied')::boolean,\n value->'record'\n FROM staged\n `\n } catch (error) {\n if (isUniqueViolation(error)) throw duplicateMaterializationWork()\n throw error\n }\n }\n })\n }\n\n async refresh(input: ReplacementPlanRef): Promise<ReplacementPlanStatus> {\n // Already within the commit transaction there: the unplanning and its work go together.\n return runPgTransaction(this.sql, async (sql) => {\n const { candidate } = await requirePlan(sql, input)\n const versionId = candidate.version_id\n const pending = await unplannedCount(sql, versionId)\n if (pending > 0) return { fresh: false, unplanned: pending }\n if (!(await committedSince(sql, versionId, input.projectId))) {\n return { fresh: true, counts: await replacementPlanCounts(sql, versionId) }\n }\n const whole = await touchesIncomplete(sql, versionId, input.projectId)\n // Taken before the revisions are read, so a commit they might miss stays past the watermark.\n const [seen] = await sql<{ readonly snapshot: string }[]>`\n SELECT pg_current_snapshot()::text AS snapshot\n `\n let unplanned = 0\n for (const kind of [\"object\", \"link\"] as const) {\n const stale = await sql.unsafe(\n `${whole ? \"\" : `WITH ${TOUCHED}`}\n UPDATE ${IDENTITIES} AS identities\n SET read_revision = NULL, planned_revision = NULL, classified = FALSE, change = NULL\n WHERE identities.version_id = $2 AND identities.entity_kind = '${kind}'\n ${whole ? \"\" : `AND identities.identity_key = ANY(ARRAY(${touchedIdentities(kind)}))`}\n AND identities.planned_revision IS DISTINCT FROM ${revision(kind)}`,\n [input.projectId, versionId]\n )\n if (stale.count === 0) continue\n await dropUnplannedWork(sql, versionId, kind)\n unplanned += stale.count\n }\n unplanned += whole\n ? await expandLinks(sql, versionId, input.projectId, \"all\")\n : await expandTouched(sql, versionId, input.projectId)\n await sql`\n UPDATE ontology_replacement_plans SET watermark = ${seen!.snapshot}::pg_snapshot\n WHERE version_id = ${versionId}\n `\n if (unplanned > 0) return { fresh: false, unplanned }\n return { fresh: true, counts: await replacementPlanCounts(sql, versionId) }\n })\n }\n\n async purge(input: PurgeReplacementPlansInput): Promise<number> {\n assertNonblank(input.projectId, \"Replacement plan purge project id\")\n assertPositiveInteger(input.limit, \"Replacement plan purge limit\")\n return runPgTransaction(this.sql, async (sql) => {\n let deleted = 0\n // A plan's row goes last, so a plan whose rows outlast the budget is found again next time.\n while (deleted < input.limit) {\n const [spent] = await sql<{ readonly version_id: string }[]>`\n SELECT plans.version_id FROM ontology_replacement_plans AS plans\n JOIN ontology_sources AS versions USING (version_id)\n WHERE plans.project_id = ${input.projectId} AND versions.status <> 'ready'\n ORDER BY plans.version_id\n LIMIT 1\n `\n if (!spent) break\n for (const [table, column] of [\n [PG_PLAN_WORK_TABLE, \"work_id\"],\n [IDENTITIES, \"version_id\"],\n ] as const) {\n const rows = await sql`\n DELETE FROM ${sql(table)} WHERE ctid = ANY(ARRAY(\n SELECT ctid FROM ${sql(table)} WHERE ${sql(column)} = ${spent.version_id}\n LIMIT ${input.limit - deleted}\n ))\n `\n deleted += rows.count\n if (deleted >= input.limit) return deleted\n }\n await sql`DELETE FROM ontology_replacement_plans WHERE version_id = ${spent.version_id}`\n deleted += 1\n }\n return deleted + (await purgeTouches(sql, input.projectId, input.limit - deleted))\n })\n }\n}\n\n/** The fresh, fully planned plan a session applies, with exactly its commit. */\nexport async function boundReplacementPlan(\n sql: SQLClient,\n header: {\n readonly commit: OntologyCommitWrite\n readonly plan?: {\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n }\n }\n): Promise<PgReplacementPlan> {\n const ref = header.plan\n const candidate = ref\n ? await sourceRow(sql, header.commit.projectId, ref.source.projectionId, ref.materializationId)\n : null\n const plan = candidate ? await planRow(sql, candidate.version_id) : null\n if (!ref || !candidate || !plan || header.commit.intent.kind !== \"projection\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"A plan-bound session needs the open plan of a projection candidate.\"\n )\n }\n const opened = planCommit(plan)\n if (opened.commitId !== header.commit.id || opened.committedAt !== header.commit.committedAt) {\n throw new MaterializationValidationError(\n \"A plan-bound session must begin with the commit its plan carries.\"\n )\n }\n if (\n (await unplannedCount(sql, candidate.version_id)) > 0 ||\n (await committedSince(sql, candidate.version_id, header.commit.projectId))\n ) {\n throw new MaterializationValidationError(\n \"A replacement plan applies only fully planned and just refreshed.\"\n )\n }\n return { versionId: candidate.version_id, projectionKind: candidate.projection_kind }\n}\n\n/**\n * Every identity the plan decides with a diff is classified, and nothing else is. Staging records\n * whether an identity's work holds its classification, so this reads identities only.\n */\nexport async function assertReplacementPlanCoverage(\n sql: SQLClient,\n plan: PgReplacementPlan\n): Promise<void> {\n const [mismatch] = await sql`\n SELECT 1 FROM ${sql(IDENTITIES)}\n WHERE version_id = ${plan.versionId}\n AND classified <> (diff_required AND (entity_kind = 'link' OR ${plan.projectionKind === \"object\"}))\n LIMIT 1\n `\n if (mismatch) {\n invalidCorrelation(\"Projection replacement classification coverage does not match its plan.\")\n }\n}\n\n/** The change counts of a plan, from what its identities planned. */\nexport async function replacementPlanCounts(\n sql: SQLClient,\n versionId: string\n): Promise<EffectiveChangeCounts> {\n const rows = await sql<\n {\n readonly entity_kind: \"object\" | \"link\"\n readonly change: \"created\" | \"updated\" | \"deleted\" | \"unchanged\"\n readonly count: number | string\n }[]\n >`\n SELECT entity_kind, COALESCE(change, 'unchanged') AS change, COUNT(*) AS count\n FROM ${sql(IDENTITIES)}\n WHERE version_id = ${versionId} AND classified\n GROUP BY entity_kind, COALESCE(change, 'unchanged')\n `\n const count = (kind: \"object\" | \"link\", change: string) =>\n Number(rows.find((row) => row.entity_kind === kind && row.change === change)?.count ?? 0)\n return {\n objectsCreated: count(\"object\", \"created\"),\n objectsUpdated: count(\"object\", \"updated\"),\n objectsDeleted: count(\"object\", \"deleted\"),\n objectsUnchanged: count(\"object\", \"unchanged\"),\n linksCreated: count(\"link\", \"created\"),\n linksUpdated: count(\"link\", \"updated\"),\n linksDeleted: count(\"link\", \"deleted\"),\n linksUnchanged: count(\"link\", \"unchanged\"),\n }\n}\n\n/**\n * Whether a commit of the project that this transaction sees is missing from the plan's watermark\n * snapshot. Transaction ids only order commits of one cluster: after a logical restore into\n * another, restored ids may lie ahead of this one's, and a restored plan's watermark too. Neither\n * ever reads as fresh: a commit this snapshot does not see counts for nothing, and a watermark\n * from beyond it counts as stale, so `refresh` checks every revision and resets it.\n */\nasync function committedSince(sql: SQLClient, versionId: string, projectId: string) {\n const [row] = await sql<{ readonly committed: boolean }[]>`\n SELECT pg_snapshot_xmax(plans.watermark) > pg_snapshot_xmax(pg_current_snapshot()) OR EXISTS (\n SELECT 1 FROM ontology_commits AS commits\n WHERE commits.project_id = ${projectId}\n AND commits.xact_id >= pg_snapshot_xmin(plans.watermark)\n AND NOT pg_visible_in_snapshot(commits.xact_id, plans.watermark)\n AND pg_visible_in_snapshot(commits.xact_id, pg_current_snapshot())\n ) AS committed\n FROM ontology_replacement_plans AS plans\n WHERE plans.version_id = ${versionId}\n `\n return row?.committed ?? true\n}\n\nasync function readPage(\n sql: SQLClient,\n input: StreamReplacementPlanStateInput,\n candidate: PgOntologySourceRow,\n rows: readonly IdentityRow[]\n): Promise<ReplacementPlanStatePage> {\n const reader = new PgMaterializationStateReader(sql, input.projectId)\n if (input.entityKind === \"object\") {\n const refs = rows.map((row) => {\n const [objectTypeId, primaryId] = JSON.parse(row.identity_key) as string[]\n return { objectTypeId: objectTypeId!, primaryId: primaryId! }\n })\n return {\n objects: await reader.replacementObjectStates(\n input.source.projectionId,\n input.materializationId,\n refs\n ),\n links: [],\n endpoints: [],\n }\n }\n const identities = rows.map((row) => {\n const parts = JSON.parse(row.identity_key) as string[]\n const ref: OntologyLinkRef = {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n }\n return { ref, sortKey: row.sort_key, diffRequired: row.diff_required }\n })\n const [previous] = await sql<{ readonly materialization_id: string }[]>`\n SELECT materialization_id FROM ontology_sources\n WHERE project_id = ${input.projectId} AND source_id = ${input.source.projectionId}\n AND status = 'active'\n `\n const links = await reader.replacementLinkStates(\n input.source.projectionId,\n input.materializationId,\n [input.materializationId, ...(previous ? [previous.materialization_id] : [])],\n identities,\n candidate.base_materialization_id !== null\n )\n return {\n objects: [],\n links,\n endpoints: await endpoints(\n sql,\n candidate.version_id,\n input.projectId,\n identities.flatMap(({ ref }) => [ref.source, ref.target])\n ),\n }\n}\n\n/** Planned existence where the plan decides an endpoint, effective existence elsewhere. */\nasync function endpoints(\n sql: SQLClient,\n versionId: string,\n projectId: string,\n refs: readonly OntologyObjectRef[]\n): Promise<MaterializationObjectExistence[]> {\n const unique = [...new Map(refs.map((ref) => [objectRefKey(ref), ref] as const)).values()]\n const rows = await sql<{ readonly key: string; readonly exists: boolean }[]>`\n SELECT requested.key, COALESCE(\n (SELECT (payload->>'exists')::boolean FROM ${sql(PG_PLAN_WORK_TABLE)}\n WHERE work_id = ${versionId} AND unique_key = 'object-existence:' || requested.key),\n EXISTS (\n SELECT 1 FROM objects\n WHERE project_id = ${projectId} AND object_type_id = requested.key::jsonb->>0\n AND primary_id = requested.key::jsonb->>1\n )\n ) AS exists\n FROM unnest(${sql.array(unique.map((ref) => objectRefKey(ref)))}::text[]) AS requested(key)\n `\n const existence = new Map(rows.map((row) => [row.key, row.exists] as const))\n return unique.map((ref) => ({ ref, exists: existence.get(objectRefKey(ref)) ?? false }))\n}\n\n/** The keys of the links of `relation` (columns as `links`), and of both their endpoints. */\nfunction linkKeys(relation: string): string {\n const key = columnKeyExpression(LINK_COLUMNS.split(\", \"))\n return `SELECT ${key} AS identity_key,\n ${columnKeyExpression([\"source_type_id\", \"source_id\"])} AS source_key,\n ${columnKeyExpression([\"target_type_id\", \"target_id\"])} AS target_key\n FROM ${relation}`\n}\n\nconst LINK_COLUMNS = \"source_type_id, source_id, link_id, target_type_id, target_id\"\n\n/** The run of link expansion an identity added now waits for: the next one. */\nconst NEXT_EXPANSION = `(SELECT expansions FROM ontology_replacement_plans WHERE version_id = $2)`\n\n/**\n * Inserts the links of `incident_links` (columns as `links`) as identities that need a diff, or\n * makes an existing member need one; the next expansion starts from each of them.\n */\nconst INSERT_INCIDENT_LINKS = `\n INSERT INTO ${IDENTITIES} AS identities (\n version_id, entity_kind, identity_key, sort_key, diff_required, expand_at, source_key,\n target_key\n )\n SELECT $2, 'link', identity_key, ${SORT_KEY}, TRUE, ${NEXT_EXPANSION}, source_key, target_key\n FROM (${linkKeys(\"incident_links\")}) AS keyed\n ON CONFLICT (version_id, entity_kind, identity_key) DO UPDATE\n SET diff_required = TRUE, read_revision = NULL, planned_revision = NULL, classified = FALSE,\n change = NULL, expand_at = EXCLUDED.expand_at\n WHERE NOT identities.diff_required`\n\n/** Inserts the links of `members` (columns as `links`) as identities planned without a diff. */\nconst INSERT_MEMBER_LINKS = `\n INSERT INTO ${IDENTITIES} (\n version_id, entity_kind, identity_key, sort_key, diff_required, source_key, target_key\n )\n SELECT $2, 'link', identity_key, ${SORT_KEY}, FALSE, source_key, target_key\n FROM (${linkKeys(\"members\")}) AS keyed\n ON CONFLICT (version_id, entity_kind, identity_key) DO NOTHING`\n\n/**\n * Adds the links the plan must decide besides its own: those incident to an object it flips,\n * and every member of a scope it changes. `pending` starts only from the identities planned or\n * added since the previous expansion, `all` from every identity. Returns how many identities this\n * left to plan, counting an existing member that now needs a diff. What commits add later is\n * found from their touches by `expandTouched`.\n */\nasync function expandLinks(\n sql: SQLClient,\n versionId: string,\n projectId: string,\n from: \"pending\" | \"all\"\n): Promise<number> {\n const pending = from === \"pending\"\n const incidentObjects = pending\n ? `SELECT work.payload->'ref'->>'objectTypeId' AS object_type_id,\n work.payload->'ref'->>'primaryId' AS primary_id\n FROM ${IDENTITIES} AS objects\n JOIN ${PG_PLAN_WORK_TABLE} AS work ON work.work_id = $2\n AND work.unique_key = 'incident-object:' || objects.identity_key\n WHERE objects.version_id = $2 AND objects.entity_kind = 'object'\n AND objects.expand_at = ${NEXT_EXPANSION}`\n : `SELECT DISTINCT payload->'ref'->>'objectTypeId' AS object_type_id,\n payload->'ref'->>'primaryId' AS primary_id\n FROM ${PG_PLAN_WORK_TABLE}\n WHERE work_id = $2 AND kind = 'incident-object'`\n const live = `JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = $1 AND roots.retired_at IS NULL AND NOT roots.deleted\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}`\n const incident = await sql.unsafe(\n `WITH incident_objects AS (${incidentObjects}), 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 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 = $1\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 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 = $1\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM ontology_link_overrides AS overrides 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 = $1\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM ontology_link_overrides AS overrides 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 = $1\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows ${live}\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.entity_kind = 'link'\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows ${live}\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.entity_kind = 'link'\n )\n ${INSERT_INCIDENT_LINKS}`,\n [projectId, versionId]\n )\n // An upgraded member planned without a diff keeps no work from before.\n if (incident.count > 0) await dropUnplannedWork(sql, versionId, \"link\")\n const members = await sql.unsafe(\n `WITH scopes AS (\n SELECT DISTINCT identity_key::jsonb->>0 AS source_type_id,\n identity_key::jsonb->>1 AS source_id, identity_key::jsonb->>2 AS link_id\n FROM ${IDENTITIES}\n WHERE version_id = $2 AND entity_kind = 'link' AND diff_required\n ${pending ? `AND expand_at = ${NEXT_EXPANSION}` : \"\"}\n ), members AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links JOIN scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = $1\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM ontology_link_overrides AS overrides JOIN scopes\n ON scopes.source_type_id = overrides.source_type_id\n AND scopes.source_id = overrides.source_primary_id\n AND scopes.link_id = overrides.link_id\n WHERE overrides.project_id = $1 AND overrides.identity_kind = 'slot'\n )\n ${INSERT_MEMBER_LINKS}`,\n [projectId, versionId]\n )\n await sql`\n UPDATE ontology_replacement_plans SET expansions = expansions + 1\n WHERE version_id = ${versionId}\n `\n return incident.count + members.count\n}\n\n/**\n * What the commits since the watermark of plan `$2` touched in project `$1`: those its snapshot\n * did not see and this one does.\n */\nconst TOUCHED = `touched AS MATERIALIZED (\n SELECT DISTINCT touches.entity_kind, touches.identity_key\n FROM ontology_replacement_plans AS plans\n JOIN ontology_commit_touches AS touches ON touches.project_id = $1\n AND touches.xact_id >= pg_snapshot_xmin(plans.watermark)\n AND NOT pg_visible_in_snapshot(touches.xact_id, plans.watermark)\n AND pg_visible_in_snapshot(touches.xact_id, pg_current_snapshot())\n WHERE plans.version_id = $2\n)`\n\n/**\n * The keys of the identities of `kind` of plan `$2` whose revision reads something `touched`\n * holds: an object its own row, override and telemetry; a link its row and edge override, its\n * scope's slot override, its live source assertion and its endpoints. A scope's links are found\n * from its source object. Each lookup is an indexed `= ANY`, whatever the plan tables' statistics.\n */\nfunction touchedIdentities(kind: \"object\" | \"link\"): string {\n if (kind === \"object\") {\n return `SELECT identity_key FROM touched WHERE entity_kind = 'object'`\n }\n const sourceKey = columnKeyExpression([\"(identity_key::jsonb->>0)\", \"(identity_key::jsonb->>1)\"])\n return `SELECT identity_key FROM touched WHERE entity_kind = 'link'\n UNION ALL\n SELECT links.identity_key FROM ${IDENTITIES} AS links\n WHERE links.version_id = $2 AND links.source_key = ANY(ARRAY(\n SELECT ${sourceKey} FROM touched WHERE entity_kind IN ('object', 'scope')\n ))\n UNION ALL\n SELECT links.identity_key FROM ${IDENTITIES} AS links\n WHERE links.version_id = $2 AND links.target_key = ANY(ARRAY(\n SELECT identity_key FROM touched WHERE entity_kind = 'object'\n ))`\n}\n\n/**\n * Adds the links commits brought within the plan's reach, from what they touched: a link that\n * now exists incident to an object the plan flips, or in a scope a planned link changes. It\n * considers the links `expandLinks` would find, among those the commits touched.\n */\nasync function expandTouched(\n sql: SQLClient,\n versionId: string,\n projectId: string\n): Promise<number> {\n const touchedLinks = `touched_links AS (\n SELECT identity_key, identity_key::jsonb->>0 AS source_type_id,\n identity_key::jsonb->>1 AS source_id, identity_key::jsonb->>2 AS link_id,\n identity_key::jsonb->>3 AS target_type_id, identity_key::jsonb->>4 AS target_id\n FROM touched WHERE entity_kind = 'link'\n ), slot_targets AS (\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id AS target_id\n FROM touched JOIN ontology_link_overrides AS overrides ON overrides.project_id = $1\n AND overrides.identity_kind = 'slot' AND overrides.identity_key = touched.identity_key::jsonb\n WHERE touched.entity_kind = 'scope'\n )`\n const columns = LINK_COLUMNS\n const sourceKey = columnKeyExpression([\"candidates.source_type_id\", \"candidates.source_id\"])\n const targetKey = columnKeyExpression([\"candidates.target_type_id\", \"candidates.target_id\"])\n const effective = `EXISTS (\n SELECT 1 FROM links AS stored\n WHERE stored.project_id = $1 AND stored.source_type_id = touched_links.source_type_id\n AND stored.source_id = touched_links.source_id AND stored.link_id = touched_links.link_id\n AND stored.target_type_id = touched_links.target_type_id\n AND stored.target_id = touched_links.target_id\n )`\n const incident = await sql.unsafe(\n `WITH ${TOUCHED}, ${touchedLinks}, incident_links AS (\n SELECT candidates.* FROM (\n SELECT ${columns} FROM touched_links\n WHERE ${effective} OR EXISTS (\n SELECT 1 FROM ontology_link_overrides AS overrides\n WHERE overrides.project_id = $1 AND overrides.identity_kind = 'edge'\n AND overrides.identity_key = touched_links.identity_key::jsonb\n ) OR EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = $1 AND roots.retired_at IS NULL AND NOT roots.deleted\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n WHERE rows.entity_kind = 'link' AND rows.source_type_id = touched_links.source_type_id\n AND rows.source_primary_id = touched_links.source_id\n AND rows.link_id = touched_links.link_id\n AND rows.target_type_id = touched_links.target_type_id\n AND rows.target_primary_id = touched_links.target_id\n )\n UNION\n SELECT ${columns} FROM slot_targets\n ) AS candidates\n WHERE EXISTS (\n SELECT 1 FROM ${PG_PLAN_WORK_TABLE} AS work\n WHERE work.work_id = $2 AND work.unique_key IN (\n 'incident-object:' || ${sourceKey}, 'incident-object:' || ${targetKey}\n )\n )\n )\n ${INSERT_INCIDENT_LINKS}`,\n [projectId, versionId]\n )\n if (incident.count > 0) await dropUnplannedWork(sql, versionId, \"link\")\n const members = await sql.unsafe(\n `WITH ${TOUCHED}, ${touchedLinks}, members AS (\n SELECT candidates.* FROM (\n SELECT ${columns} FROM touched_links WHERE ${effective}\n UNION\n SELECT ${columns} FROM slot_targets\n ) AS candidates\n WHERE EXISTS (\n SELECT 1 FROM ${IDENTITIES} AS changed\n WHERE changed.version_id = $2 AND changed.source_key = ${sourceKey}\n AND changed.diff_required AND changed.identity_key::jsonb->>2 = candidates.link_id\n )\n )\n ${INSERT_MEMBER_LINKS}`,\n [projectId, versionId]\n )\n return incident.count + members.count\n}\n\n/**\n * Whether the touches since the plan's watermark may be incomplete, so that `refresh` checks every\n * identity: purge deleted touches the watermark did not see, or the watermark comes from a cluster\n * further along (see `committedSince`).\n */\nasync function touchesIncomplete(\n sql: SQLClient,\n versionId: string,\n projectId: string\n): Promise<boolean> {\n const [row] = await sql<{ readonly incomplete: boolean }[]>`\n SELECT pg_snapshot_xmax(plans.watermark) > pg_snapshot_xmax(pg_current_snapshot())\n OR COALESCE(pg_snapshot_xmin(plans.watermark) < (\n SELECT xact_id FROM ontology_commit_touch_horizons WHERE project_id = ${projectId}\n ), FALSE) AS incomplete\n FROM ontology_replacement_plans AS plans\n WHERE plans.version_id = ${versionId}\n `\n return row?.incomplete ?? true\n}\n\n/**\n * Deletes touches no ready plan of the project needs, up to `limit`: those of commits every ready\n * plan's watermark sees. A plan opening meanwhile may not be visible yet, so the horizon records\n * how far touches are gone, and a plan watermarked before it checks every identity.\n */\nasync function purgeTouches(sql: SQLClient, projectId: string, limit: number): Promise<number> {\n if (limit <= 0) return 0\n const [horizon] = await sql<{ readonly xact_id: string }[]>`\n SELECT LEAST(\n pg_snapshot_xmin(pg_current_snapshot()),\n (SELECT pg_snapshot_xmin(plans.watermark) FROM ontology_replacement_plans AS plans\n JOIN ontology_sources AS versions USING (version_id)\n WHERE plans.project_id = ${projectId} AND versions.status = 'ready'\n ORDER BY 1 LIMIT 1)\n )::text AS xact_id\n `\n const deleted = await sql`\n DELETE FROM ontology_commit_touches WHERE ctid = ANY(ARRAY(\n SELECT ctid FROM ontology_commit_touches\n WHERE project_id = ${projectId} AND xact_id < ${horizon!.xact_id}::xid8\n LIMIT ${limit}\n ))\n `\n if (deleted.count > 0) {\n await sql`\n INSERT INTO ontology_commit_touch_horizons AS horizons (project_id, xact_id)\n VALUES (${projectId}, ${horizon!.xact_id}::xid8)\n ON CONFLICT (project_id) DO UPDATE\n SET xact_id = GREATEST(horizons.xact_id, EXCLUDED.xact_id)\n `\n }\n return deleted.count\n}\n\nasync function analyzePlans(sql: SQLClient): Promise<void> {\n await sql`ANALYZE ${sql(IDENTITIES)}, ${sql(PG_PLAN_WORK_TABLE)}`\n}\n\n/**\n * Deletes the work of the identities of `kind` left to plan: an identity to plan holds none. The\n * keys come first, so the work is sought by key whatever the plan tables' statistics.\n */\nasync function dropUnplannedWork(\n sql: SQLClient,\n versionId: string,\n kind: \"object\" | \"link\"\n): Promise<void> {\n await sql`\n DELETE FROM ${sql(PG_PLAN_WORK_TABLE)}\n WHERE work_id = ${versionId} AND entity_kind = ${kind} AND identity_key = ANY(ARRAY(\n SELECT identity_key FROM ${sql(IDENTITIES)}\n WHERE version_id = ${versionId} AND entity_kind = ${kind} AND planned_revision IS NULL\n ))\n `\n}\n\nasync function unplannedCount(\n sql: SQLClient,\n versionId: string,\n kind?: \"object\" | \"link\"\n): Promise<number> {\n const [row] = await sql<{ readonly count: number | string }[]>`\n SELECT COUNT(*) AS count FROM ${sql(IDENTITIES)}\n WHERE version_id = ${versionId} AND planned_revision IS NULL\n ${kind ? sql`AND entity_kind = ${kind}` : sql``}\n `\n return Number(row?.count ?? 0)\n}\n\nasync function requireCandidate(\n sql: SQLClient,\n input: ReplacementPlanRef,\n lock = false\n): Promise<PgOntologySourceRow> {\n const candidate = await sourceRow(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n lock\n )\n if (\n !candidate ||\n candidate.status !== \"ready\" ||\n candidate.projection_run_id !== input.execution.projectionRunId ||\n candidate.execution_token !== input.execution.executionToken\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.materializationId}' is missing, not ready, or owned by another execution.`\n )\n }\n await assertProjectionExecution(sql, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n })\n return candidate\n}\n\nasync function requirePlan(\n sql: SQLClient,\n input: ReplacementPlanRef\n): Promise<{ readonly plan: PlanRow; readonly candidate: PgOntologySourceRow }> {\n const candidate = await requireCandidate(sql, input)\n const plan = await planRow(sql, candidate.version_id)\n if (!plan) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.materializationId}' has no open plan.`\n )\n }\n return { plan, candidate }\n}\n\nasync function deletePlan(sql: SQLClient, versionId: string): Promise<void> {\n await sql`DELETE FROM ${sql(PG_PLAN_WORK_TABLE)} WHERE work_id = ${versionId}`\n await sql`DELETE FROM ${sql(IDENTITIES)} WHERE version_id = ${versionId}`\n await sql`DELETE FROM ontology_replacement_plans WHERE version_id = ${versionId}`\n}\n\nasync function planRow(sql: SQLClient, versionId: string): Promise<PlanRow | null> {\n const [row] = await sql<PlanRow[]>`\n SELECT version_id, commit_id, committed_at, replaced_materialization_id,\n replaced_last_commit_id\n FROM ontology_replacement_plans\n WHERE version_id = ${versionId}\n `\n return row ?? null\n}\n\n/** The commit a plan was opened with, as its staged work and its session must carry it. */\nfunction planCommit(plan: PlanRow) {\n return { commitId: plan.commit_id, committedAt: toIsoString(plan.committed_at) }\n}\n\nasync function sourceRow(\n sql: SQLClient,\n projectId: string,\n sourceId: string,\n materializationId: string,\n lock = false\n): Promise<PgOntologySourceRow | null> {\n const [row] = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${projectId} AND source_id = ${sourceId}\n AND materialization_id = ${materializationId}\n ${lock ? sql`FOR UPDATE` : sql``}\n `\n return row ?? null\n}\n",
48
+ "import {\n type EffectiveChangeCounts,\n MaterializationConflictError,\n MaterializationValidationError,\n type OntologyLinkRef,\n type OntologyObjectRef,\n objectRefKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertNonblank,\n assertPageRows,\n assertPositiveInteger,\n assertReplacementPlanCommit,\n duplicateMaterializationWork,\n invalidCorrelation,\n materializationWorkColumns,\n prepareReplacementIdentities,\n workUniquenessKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationObjectExistence,\n OntologyCommitWrite,\n OntologyReplacementPlanStorage,\n OpenedReplacementPlan,\n OpenReplacementPlanInput,\n PurgeReplacementPlansInput,\n ReplacementPlanRef,\n ReplacementPlanStatePage,\n ReplacementPlanStatus,\n StageReplacementPlanInput,\n StreamReplacementPlanStateInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { isUniqueViolation } from \"../storage-errors\"\nimport { isWithinPgTransaction, runPgTransaction } from \"../transactions\"\nimport { PgMaterializationStateReader } from \"./materialization-state\"\nimport {\n assertProjectionExecution,\n columnKeyExpression,\n jsonParameter,\n jsonTupleExpression,\n type PgOntologySourceRow,\n toIsoString,\n} from \"./shared\"\nimport { PUBLISHED, replacementSourceRows } from \"./source-roots\"\n\nexport const PG_PLAN_WORK_TABLE = \"ontology_replacement_plan_work\"\nconst IDENTITIES = \"ontology_replacement_plan_identities\"\n/** An identity's planning order: its key's UTF-8 bytes, as `objectRefSortKey`/`linkRefSortKey`. */\nconst SORT_KEY = \"encode(convert_to(identity_key, 'UTF8'), 'hex')\"\n\n/**\n * Rows a plan writes before its tables are analyzed again: identities when it opens or expands,\n * work once a stream has staged it. Every plan fills and empties the same tables, so their\n * statistics describe the plans that were there when they were last analyzed. Until they describe\n * this one, the planner expects none of its rows and reads its whole work for each key it looks\n * up. Below this many rows, those reads cost less than an ANALYZE.\n */\nconst ANALYZE_ROWS = 1_000\n\n/** The plan a session applies: its work rows carry the candidate's source version as `work_id`. */\nexport interface PgReplacementPlan {\n readonly versionId: string\n readonly projectionKind: \"object\" | \"link\"\n}\n\ninterface PlanRow {\n readonly version_id: string\n readonly commit_id: string\n readonly committed_at: Date | string\n readonly replaced_materialization_id: string | null\n readonly replaced_last_commit_id: string | null\n}\n\ninterface IdentityRow {\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: boolean\n}\n\n/**\n * The revision of an object identity: its effective row, its override and the latest point of each\n * telemetry property. `type` and `id` are SQL expressions; `$1` is the project id.\n */\nfunction objectRevision(type: string, id: string): string {\n return `jsonb_build_array(\n (SELECT jsonb_build_array(version, last_commit_id) FROM objects\n WHERE project_id = $1 AND object_type_id = ${type} AND primary_id = ${id}),\n (SELECT last_commit_id FROM ontology_object_overrides\n WHERE project_id = $1 AND object_type_id = ${type} AND primary_id = ${id}),\n -- An instant, not its rendering in the session's time zone.\n (SELECT jsonb_agg(\n jsonb_build_array(property_id, extract(epoch FROM at), last_commit_id) ORDER BY property_id\n )\n FROM timeseries_latest\n WHERE project_id = $1 AND object_type_id = ${type} AND object_id = ${id})\n )`\n}\n\n/**\n * The revision of a link endpoint, which a link plan reads only for its existence. One this plan\n * decides exists as planned, which follows its whole object revision; any other exists as it is.\n * `$2` is the plan's version id.\n */\nfunction endpointRevision(type: string, id: string): string {\n return `CASE WHEN EXISTS (\n SELECT 1 FROM ${IDENTITIES} AS endpoint\n WHERE endpoint.version_id = $2 AND endpoint.entity_kind = 'object'\n AND endpoint.identity_key = ${jsonTupleExpression([`to_jsonb(${type})::text`, `to_jsonb(${id})::text`])}\n ) THEN ${objectRevision(type, id)}\n ELSE to_jsonb(EXISTS (\n SELECT 1 FROM objects WHERE project_id = $1 AND object_type_id = ${type} AND primary_id = ${id}\n ))\n END`\n}\n\n/**\n * The revision of a link identity, from its key column `key`: its effective row, its edge and slot\n * overrides, the live source root asserting it, and the existence of both endpoints. A live root\n * that asserts a link is keyed by the link or by its source object.\n */\nfunction linkRevision(key: string): string {\n const part = (index: number) => `(${key}::jsonb->>${index})`\n return `jsonb_build_array(\n (SELECT last_commit_id FROM links\n WHERE project_id = $1 AND source_type_id = ${part(0)} AND source_id = ${part(1)}\n AND link_id = ${part(2)} AND target_type_id = ${part(3)} AND target_id = ${part(4)}),\n (SELECT last_commit_id FROM ontology_link_overrides\n WHERE project_id = $1 AND identity_kind = 'edge' AND identity_key = ${key}::jsonb),\n (SELECT last_commit_id FROM ontology_link_overrides\n WHERE project_id = $1 AND identity_kind = 'slot'\n AND identity_key = jsonb_build_array(${part(0)}, ${part(1)}, ${part(2)})),\n (SELECT MAX(roots.id) FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n WHERE roots.project_id = $1 AND roots.retired_at IS NULL AND NOT roots.deleted\n AND roots.root_key IN (\n '[\"link\",' || substr(${key}, 2),\n ${jsonTupleExpression([`'\"object\"'`, `to_jsonb(${part(0)})::text`, `to_jsonb(${part(1)})::text`])}\n )\n AND EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.root_id = roots.id AND rows.entity_kind = 'link'\n AND rows.source_type_id = ${part(0)} AND rows.source_primary_id = ${part(1)}\n AND rows.link_id = ${part(2)} AND rows.target_type_id = ${part(3)}\n AND rows.target_primary_id = ${part(4)}\n )),\n ${endpointRevision(part(0), part(1))},\n ${endpointRevision(part(3), part(4))}\n )`\n}\n\n/** The revision of the identity rows aliased `identities`, as text. */\nfunction revision(kind: \"object\" | \"link\"): string {\n const key = \"identities.identity_key\"\n return kind === \"object\"\n ? `${objectRevision(`(${key}::jsonb->>0)`, `(${key}::jsonb->>1)`)}::text`\n : `${linkRevision(key)}::text`\n}\n\nexport class PgOntologyReplacementPlanStorage implements OntologyReplacementPlanStorage {\n constructor(private readonly sql: SQLClient) {}\n\n async open(input: OpenReplacementPlanInput): Promise<OpenedReplacementPlan> {\n const { commit } = input\n assertReplacementPlanCommit(commit)\n return runPgTransaction(this.sql, async (sql) => {\n const candidate = await requireCandidate(sql, input, true)\n const [active] = await sql<\n { readonly materialization_id: string; readonly last_commit_id: string | null }[]\n >`\n SELECT materialization_id, last_commit_id FROM ontology_sources\n WHERE project_id = ${input.projectId} AND source_id = ${input.source.projectionId}\n AND status = 'active'\n `\n const replacedMaterializationId = active?.materialization_id ?? null\n const replacedLastCommitId = active?.last_commit_id ?? null\n const existing = await planRow(sql, candidate.version_id)\n // A plan decides the entities of the source it replaces: once that moved, it starts over.\n if (\n existing?.replaced_materialization_id === replacedMaterializationId &&\n existing.replaced_last_commit_id === replacedLastCommitId\n ) {\n return { committedAt: toIsoString(existing.committed_at) }\n }\n if (existing) await deletePlan(sql, candidate.version_id)\n await sql`\n INSERT INTO ontology_replacement_plans (\n version_id, project_id, commit_id, committed_at, replaced_materialization_id,\n replaced_last_commit_id, watermark\n ) VALUES (\n ${candidate.version_id}, ${input.projectId}, ${commit.id}, ${commit.committedAt},\n ${replacedMaterializationId}, ${replacedLastCommitId}, pg_current_snapshot()\n )\n `\n const rows = replacementSourceRows(sql, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n materializationId: input.materializationId,\n incremental: candidate.base_materialization_id !== null,\n })\n // Every entity of the candidate and of the roots it replaces needs a diff.\n const sourceKey = columnKeyExpression([\"source_type_id\", \"source_primary_id\"])\n const targetKey = columnKeyExpression([\"target_type_id\", \"target_primary_id\"])\n const opened = await sql`\n WITH keyed AS (\n SELECT DISTINCT entity_kind, CASE entity_kind\n WHEN 'object' THEN ${sql.unsafe(columnKeyExpression([\"object_type_id\", \"primary_id\"]))}\n ELSE ${sql.unsafe(\n columnKeyExpression([\n \"source_type_id\",\n \"source_primary_id\",\n \"link_id\",\n \"target_type_id\",\n \"target_primary_id\",\n ])\n )}\n END AS identity_key,\n CASE entity_kind\n WHEN 'link' THEN ${sql.unsafe(sourceKey)}\n END AS source_key,\n CASE entity_kind\n WHEN 'link' THEN ${sql.unsafe(targetKey)}\n END AS target_key\n FROM (${rows}) AS rows\n )\n INSERT INTO ${sql(IDENTITIES)} (\n version_id, entity_kind, identity_key, sort_key, diff_required, expand_at, source_key,\n target_key\n )\n SELECT ${candidate.version_id}, entity_kind, identity_key,\n ${sql.unsafe(SORT_KEY)}, TRUE, CASE entity_kind WHEN 'link' THEN 0 END, source_key,\n target_key\n FROM keyed\n `\n if (opened.count >= ANALYZE_ROWS) await analyzePlans(sql)\n return { committedAt: commit.committedAt }\n })\n }\n\n async *streamState(\n input: StreamReplacementPlanStateInput\n ): AsyncIterable<ReplacementPlanStatePage> {\n assertPageRows(input.pageRows)\n const versionId = await runPgTransaction(this.sql, async (sql) => {\n const { candidate } = await requirePlan(sql, input)\n if (input.entityKind === \"object\" && candidate.projection_kind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (input.entityKind === \"link\") {\n if ((await unplannedCount(sql, candidate.version_id, \"object\")) > 0) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must plan every object before its links.\"\n )\n }\n const expanded = await expandLinks(sql, candidate.version_id, input.projectId, \"pending\")\n if (expanded >= ANALYZE_ROWS && !isWithinPgTransaction(this.sql)) await analyzePlans(sql)\n }\n return candidate.version_id\n })\n let after = \"\"\n let streamed = 0\n while (true) {\n // Each page reads its state and the revision of that state in one snapshot.\n const page = await runPgTransaction(\n this.sql,\n async (sql) => {\n const { candidate } = await requirePlan(sql, input)\n const rows = await sql<IdentityRow[]>`\n SELECT identity_key, sort_key, diff_required FROM ${sql(IDENTITIES)}\n WHERE version_id = ${candidate.version_id} AND entity_kind = ${input.entityKind}\n AND planned_revision IS NULL AND sort_key > ${after}\n ORDER BY sort_key\n LIMIT ${input.pageRows}\n `\n if (rows.length === 0) return null\n after = rows[rows.length - 1]!.sort_key\n streamed += rows.length\n const state = await readPage(sql, input, candidate, rows)\n await sql.unsafe(\n `UPDATE ${IDENTITIES} AS identities\n SET read_revision = ${revision(input.entityKind)}\n WHERE version_id = $2 AND entity_kind = $3 AND identity_key = ANY($4::text[])`,\n [\n input.projectId,\n candidate.version_id,\n input.entityKind,\n rows.map((row) => row.identity_key),\n ]\n )\n return state\n },\n { isolation: \"repeatableRead\" }\n )\n if (!page) {\n // Every page is staged by now: later lookups and the commit join this work. Never in the\n // commit transaction, where ANALYZE would hold a lock other commits queue behind.\n if (streamed > 0 && !isWithinPgTransaction(this.sql)) {\n await analyzeStagedWork(this.sql, versionId)\n }\n return\n }\n yield page\n }\n }\n\n async stage(input: StageReplacementPlanInput): Promise<void> {\n await runPgTransaction(this.sql, async (sql) => {\n const { plan, candidate } = await requirePlan(sql, input)\n const identities = prepareReplacementIdentities(input, planCommit(plan))\n const versionId = candidate.version_id\n const summary = identities.map((identity) => ({\n entityKind: identity.kind,\n identityKey: identity.key,\n classified: identity.classified,\n change: identity.change,\n }))\n // Only an identity streamed and still to plan has the revision its work is planned from,\n // and holds no work: unplanning one deletes its work and forgets what it read.\n const planned = await sql`\n WITH planned AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(sql, summary)}::jsonb)\n )\n UPDATE ${sql(IDENTITIES)} AS identities\n SET planned_revision = identities.read_revision,\n classified = (planned.value->>'classified')::boolean,\n change = planned.value->>'change',\n -- A planned object may flip its existence: the next link expansion starts from it.\n expand_at = CASE identities.entity_kind\n WHEN 'object' THEN (\n SELECT expansions FROM ontology_replacement_plans WHERE version_id = ${versionId}\n )\n ELSE identities.expand_at\n END\n FROM planned\n WHERE identities.version_id = ${versionId}\n AND identities.entity_kind = planned.value->>'entityKind'\n AND identities.identity_key = planned.value->>'identityKey'\n AND identities.read_revision IS NOT NULL AND identities.planned_revision IS NULL\n RETURNING identities.entity_kind, identities.identity_key\n `\n if (planned.length !== identities.length) {\n const streamed = new Set(planned.map((row) => `${row.entity_kind}:${row.identity_key}`))\n const missing = identities.find(\n (identity) => !streamed.has(`${identity.kind}:${identity.key}`)\n )\n throw new MaterializationValidationError(\n `Replacement identity ${missing?.entityKey} is not streamed and still to plan.`\n )\n }\n const work = identities.flatMap((identity) =>\n identity.records.map((record) => {\n const columns = materializationWorkColumns(record)\n return {\n entityKind: identity.kind,\n identityKey: identity.key,\n recordKey: record.recordKey,\n uniqueKey: workUniquenessKey(record),\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 occupied: record.kind === \"cardinality\" ? record.occupied : null,\n record,\n }\n })\n )\n if (work.length > 0) {\n try {\n await sql`\n WITH staged AS (\n SELECT value FROM jsonb_array_elements(${jsonParameter(sql, work)}::jsonb)\n )\n INSERT INTO ${sql(PG_PLAN_WORK_TABLE)} (\n work_id, entity_kind, identity_key, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two, cardinality_occupied, payload\n )\n SELECT ${versionId}, value->>'entityKind', value->>'identityKey', value->>'recordKey',\n value->>'uniqueKey', value->>'kind', value->>'lane',\n (value->>'majorOrder')::integer, (value->>'minorOrder')::integer,\n value->>'sortOne', value->>'sortTwo', (value->>'occupied')::boolean,\n value->'record'\n FROM staged\n `\n } catch (error) {\n if (isUniqueViolation(error)) throw duplicateMaterializationWork()\n throw error\n }\n }\n })\n }\n\n async refresh(input: ReplacementPlanRef): Promise<ReplacementPlanStatus> {\n // Already within the commit transaction there: the unplanning and its work go together.\n return runPgTransaction(this.sql, async (sql) => {\n const { candidate } = await requirePlan(sql, input)\n const versionId = candidate.version_id\n const pending = await unplannedCount(sql, versionId)\n if (pending > 0) return { fresh: false, unplanned: pending }\n if (!(await committedSince(sql, versionId, input.projectId))) {\n return { fresh: true, counts: await replacementPlanCounts(sql, versionId) }\n }\n const whole = await touchesIncomplete(sql, versionId, input.projectId)\n // Taken before the revisions are read, so a commit they might miss stays past the watermark.\n const [seen] = await sql<{ readonly snapshot: string }[]>`\n SELECT pg_current_snapshot()::text AS snapshot\n `\n let unplanned = 0\n for (const kind of [\"object\", \"link\"] as const) {\n const stale = await sql.unsafe(\n `${whole ? \"\" : `WITH ${TOUCHED}`}\n UPDATE ${IDENTITIES} AS identities\n SET read_revision = NULL, planned_revision = NULL, classified = FALSE, change = NULL\n WHERE identities.version_id = $2 AND identities.entity_kind = '${kind}'\n ${whole ? \"\" : `AND identities.identity_key = ANY(ARRAY(${touchedIdentities(kind)}))`}\n AND identities.planned_revision IS DISTINCT FROM ${revision(kind)}`,\n [input.projectId, versionId]\n )\n if (stale.count === 0) continue\n await dropUnplannedWork(sql, versionId, kind)\n unplanned += stale.count\n }\n unplanned += whole\n ? await expandLinks(sql, versionId, input.projectId, \"all\")\n : await expandTouched(sql, versionId, input.projectId)\n await sql`\n UPDATE ontology_replacement_plans SET watermark = ${seen!.snapshot}::pg_snapshot\n WHERE version_id = ${versionId}\n `\n if (unplanned > 0) return { fresh: false, unplanned }\n return { fresh: true, counts: await replacementPlanCounts(sql, versionId) }\n })\n }\n\n async purge(input: PurgeReplacementPlansInput): Promise<number> {\n assertNonblank(input.projectId, \"Replacement plan purge project id\")\n assertPositiveInteger(input.limit, \"Replacement plan purge limit\")\n return runPgTransaction(this.sql, async (sql) => {\n let deleted = 0\n // A plan's row goes last, so a plan whose rows outlast the budget is found again next time.\n while (deleted < input.limit) {\n const [spent] = await sql<{ readonly version_id: string }[]>`\n SELECT plans.version_id FROM ontology_replacement_plans AS plans\n JOIN ontology_sources AS versions USING (version_id)\n WHERE plans.project_id = ${input.projectId} AND versions.status <> 'ready'\n ORDER BY plans.version_id\n LIMIT 1\n `\n if (!spent) break\n for (const [table, column] of [\n [PG_PLAN_WORK_TABLE, \"work_id\"],\n [IDENTITIES, \"version_id\"],\n ] as const) {\n const rows = await sql`\n DELETE FROM ${sql(table)} WHERE ctid = ANY(ARRAY(\n SELECT ctid FROM ${sql(table)} WHERE ${sql(column)} = ${spent.version_id}\n LIMIT ${input.limit - deleted}\n ))\n `\n deleted += rows.count\n if (deleted >= input.limit) return deleted\n }\n await sql`DELETE FROM ontology_replacement_plans WHERE version_id = ${spent.version_id}`\n deleted += 1\n }\n return deleted + (await purgeTouches(sql, input.projectId, input.limit - deleted))\n })\n }\n}\n\n/** The fresh, fully planned plan a session applies, with exactly its commit. */\nexport async function boundReplacementPlan(\n sql: SQLClient,\n header: {\n readonly commit: OntologyCommitWrite\n readonly plan?: {\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n }\n }\n): Promise<PgReplacementPlan> {\n const ref = header.plan\n const candidate = ref\n ? await sourceRow(sql, header.commit.projectId, ref.source.projectionId, ref.materializationId)\n : null\n const plan = candidate ? await planRow(sql, candidate.version_id) : null\n if (!ref || !candidate || !plan || header.commit.intent.kind !== \"projection\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"A plan-bound session needs the open plan of a projection candidate.\"\n )\n }\n const opened = planCommit(plan)\n if (opened.commitId !== header.commit.id || opened.committedAt !== header.commit.committedAt) {\n throw new MaterializationValidationError(\n \"A plan-bound session must begin with the commit its plan carries.\"\n )\n }\n if (\n (await unplannedCount(sql, candidate.version_id)) > 0 ||\n (await committedSince(sql, candidate.version_id, header.commit.projectId))\n ) {\n throw new MaterializationValidationError(\n \"A replacement plan applies only fully planned and just refreshed.\"\n )\n }\n return { versionId: candidate.version_id, projectionKind: candidate.projection_kind }\n}\n\n/**\n * Every identity the plan decides with a diff is classified, and nothing else is. Staging records\n * whether an identity's work holds its classification, so this reads identities only.\n */\nexport async function assertReplacementPlanCoverage(\n sql: SQLClient,\n plan: PgReplacementPlan\n): Promise<void> {\n const [mismatch] = await sql`\n SELECT 1 FROM ${sql(IDENTITIES)}\n WHERE version_id = ${plan.versionId}\n AND classified <> (diff_required AND (entity_kind = 'link' OR ${plan.projectionKind === \"object\"}))\n LIMIT 1\n `\n if (mismatch) {\n invalidCorrelation(\"Projection replacement classification coverage does not match its plan.\")\n }\n}\n\n/** The change counts of a plan, from what its identities planned. */\nexport async function replacementPlanCounts(\n sql: SQLClient,\n versionId: string\n): Promise<EffectiveChangeCounts> {\n const rows = await sql<\n {\n readonly entity_kind: \"object\" | \"link\"\n readonly change: \"created\" | \"updated\" | \"deleted\" | \"unchanged\"\n readonly count: number | string\n }[]\n >`\n SELECT entity_kind, COALESCE(change, 'unchanged') AS change, COUNT(*) AS count\n FROM ${sql(IDENTITIES)}\n WHERE version_id = ${versionId} AND classified\n GROUP BY entity_kind, COALESCE(change, 'unchanged')\n `\n const count = (kind: \"object\" | \"link\", change: string) =>\n Number(rows.find((row) => row.entity_kind === kind && row.change === change)?.count ?? 0)\n return {\n objectsCreated: count(\"object\", \"created\"),\n objectsUpdated: count(\"object\", \"updated\"),\n objectsDeleted: count(\"object\", \"deleted\"),\n objectsUnchanged: count(\"object\", \"unchanged\"),\n linksCreated: count(\"link\", \"created\"),\n linksUpdated: count(\"link\", \"updated\"),\n linksDeleted: count(\"link\", \"deleted\"),\n linksUnchanged: count(\"link\", \"unchanged\"),\n }\n}\n\n/**\n * Whether a commit of the project that this transaction sees is missing from the plan's watermark\n * snapshot. Transaction ids only order commits of one cluster: after a logical restore into\n * another, restored ids may lie ahead of this one's, and a restored plan's watermark too. Neither\n * ever reads as fresh: a commit this snapshot does not see counts for nothing, and a watermark\n * from beyond it counts as stale, so `refresh` checks every revision and resets it.\n */\nasync function committedSince(sql: SQLClient, versionId: string, projectId: string) {\n const [row] = await sql<{ readonly committed: boolean }[]>`\n SELECT pg_snapshot_xmax(plans.watermark) > pg_snapshot_xmax(pg_current_snapshot()) OR EXISTS (\n SELECT 1 FROM ontology_commits AS commits\n WHERE commits.project_id = ${projectId}\n AND commits.xact_id >= pg_snapshot_xmin(plans.watermark)\n AND NOT pg_visible_in_snapshot(commits.xact_id, plans.watermark)\n AND pg_visible_in_snapshot(commits.xact_id, pg_current_snapshot())\n ) AS committed\n FROM ontology_replacement_plans AS plans\n WHERE plans.version_id = ${versionId}\n `\n return row?.committed ?? true\n}\n\nasync function readPage(\n sql: SQLClient,\n input: StreamReplacementPlanStateInput,\n candidate: PgOntologySourceRow,\n rows: readonly IdentityRow[]\n): Promise<ReplacementPlanStatePage> {\n const reader = new PgMaterializationStateReader(sql, input.projectId)\n if (input.entityKind === \"object\") {\n const refs = rows.map((row) => {\n const [objectTypeId, primaryId] = JSON.parse(row.identity_key) as string[]\n return { objectTypeId: objectTypeId!, primaryId: primaryId! }\n })\n return {\n objects: await reader.replacementObjectStates(\n input.source.projectionId,\n input.materializationId,\n refs\n ),\n links: [],\n endpoints: [],\n }\n }\n const identities = rows.map((row) => {\n const parts = JSON.parse(row.identity_key) as string[]\n const ref: OntologyLinkRef = {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n }\n return { ref, sortKey: row.sort_key, diffRequired: row.diff_required }\n })\n const [previous] = await sql<{ readonly materialization_id: string }[]>`\n SELECT materialization_id FROM ontology_sources\n WHERE project_id = ${input.projectId} AND source_id = ${input.source.projectionId}\n AND status = 'active'\n `\n const links = await reader.replacementLinkStates(\n input.source.projectionId,\n input.materializationId,\n [input.materializationId, ...(previous ? [previous.materialization_id] : [])],\n identities,\n candidate.base_materialization_id !== null\n )\n return {\n objects: [],\n links,\n endpoints: await endpoints(\n sql,\n candidate.version_id,\n input.projectId,\n identities.flatMap(({ ref }) => [ref.source, ref.target])\n ),\n }\n}\n\n/** Planned existence where the plan decides an endpoint, effective existence elsewhere. */\nasync function endpoints(\n sql: SQLClient,\n versionId: string,\n projectId: string,\n refs: readonly OntologyObjectRef[]\n): Promise<MaterializationObjectExistence[]> {\n const unique = [...new Map(refs.map((ref) => [objectRefKey(ref), ref] as const)).values()]\n const rows = await sql<{ readonly key: string; readonly exists: boolean }[]>`\n SELECT requested.key, COALESCE(\n (SELECT (payload->>'exists')::boolean FROM ${sql(PG_PLAN_WORK_TABLE)}\n WHERE work_id = ${versionId} AND unique_key = 'object-existence:' || requested.key),\n EXISTS (\n SELECT 1 FROM objects\n WHERE project_id = ${projectId} AND object_type_id = requested.key::jsonb->>0\n AND primary_id = requested.key::jsonb->>1\n )\n ) AS exists\n FROM unnest(${sql.array(unique.map((ref) => objectRefKey(ref)))}::text[]) AS requested(key)\n `\n const existence = new Map(rows.map((row) => [row.key, row.exists] as const))\n return unique.map((ref) => ({ ref, exists: existence.get(objectRefKey(ref)) ?? false }))\n}\n\n/** The keys of the links of `relation` (columns as `links`), and of both their endpoints. */\nfunction linkKeys(relation: string): string {\n const key = columnKeyExpression(LINK_COLUMNS.split(\", \"))\n return `SELECT ${key} AS identity_key,\n ${columnKeyExpression([\"source_type_id\", \"source_id\"])} AS source_key,\n ${columnKeyExpression([\"target_type_id\", \"target_id\"])} AS target_key\n FROM ${relation}`\n}\n\nconst LINK_COLUMNS = \"source_type_id, source_id, link_id, target_type_id, target_id\"\n\n/** The run of link expansion an identity added now waits for: the next one. */\nconst NEXT_EXPANSION = `(SELECT expansions FROM ontology_replacement_plans WHERE version_id = $2)`\n\n/**\n * Inserts the links of `incident_links` (columns as `links`) as identities that need a diff, or\n * makes an existing member need one; the next expansion starts from each of them.\n */\nconst INSERT_INCIDENT_LINKS = `\n INSERT INTO ${IDENTITIES} AS identities (\n version_id, entity_kind, identity_key, sort_key, diff_required, expand_at, source_key,\n target_key\n )\n SELECT $2, 'link', identity_key, ${SORT_KEY}, TRUE, ${NEXT_EXPANSION}, source_key, target_key\n FROM (${linkKeys(\"incident_links\")}) AS keyed\n ON CONFLICT (version_id, entity_kind, identity_key) DO UPDATE\n SET diff_required = TRUE, read_revision = NULL, planned_revision = NULL, classified = FALSE,\n change = NULL, expand_at = EXCLUDED.expand_at\n WHERE NOT identities.diff_required`\n\n/** Inserts the links of `members` (columns as `links`) as identities planned without a diff. */\nconst INSERT_MEMBER_LINKS = `\n INSERT INTO ${IDENTITIES} (\n version_id, entity_kind, identity_key, sort_key, diff_required, source_key, target_key\n )\n SELECT $2, 'link', identity_key, ${SORT_KEY}, FALSE, source_key, target_key\n FROM (${linkKeys(\"members\")}) AS keyed\n ON CONFLICT (version_id, entity_kind, identity_key) DO NOTHING`\n\n/**\n * Adds the links the plan must decide besides its own: those incident to an object it flips,\n * and every member of a scope it changes. `pending` starts only from the identities planned or\n * added since the previous expansion, `all` from every identity. Returns how many identities this\n * left to plan, counting an existing member that now needs a diff. What commits add later is\n * found from their touches by `expandTouched`.\n */\nasync function expandLinks(\n sql: SQLClient,\n versionId: string,\n projectId: string,\n from: \"pending\" | \"all\"\n): Promise<number> {\n const pending = from === \"pending\"\n const incidentObjects = pending\n ? `SELECT work.payload->'ref'->>'objectTypeId' AS object_type_id,\n work.payload->'ref'->>'primaryId' AS primary_id\n FROM ${IDENTITIES} AS objects\n JOIN ${PG_PLAN_WORK_TABLE} AS work ON work.work_id = $2\n AND work.unique_key = 'incident-object:' || objects.identity_key\n WHERE objects.version_id = $2 AND objects.entity_kind = 'object'\n AND objects.expand_at = ${NEXT_EXPANSION}`\n : `SELECT DISTINCT payload->'ref'->>'objectTypeId' AS object_type_id,\n payload->'ref'->>'primaryId' AS primary_id\n FROM ${PG_PLAN_WORK_TABLE}\n WHERE work_id = $2 AND kind = 'incident-object'`\n const live = `JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = $1 AND roots.retired_at IS NULL AND NOT roots.deleted\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}`\n const incident = await sql.unsafe(\n `WITH incident_objects AS (${incidentObjects}), 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 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 = $1\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 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 = $1\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM ontology_link_overrides AS overrides 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 = $1\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM ontology_link_overrides AS overrides 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 = $1\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows ${live}\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.entity_kind = 'link'\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows ${live}\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.entity_kind = 'link'\n )\n ${INSERT_INCIDENT_LINKS}`,\n [projectId, versionId]\n )\n // An upgraded member planned without a diff keeps no work from before.\n if (incident.count > 0) await dropUnplannedWork(sql, versionId, \"link\")\n const members = await sql.unsafe(\n `WITH scopes AS (\n SELECT DISTINCT identity_key::jsonb->>0 AS source_type_id,\n identity_key::jsonb->>1 AS source_id, identity_key::jsonb->>2 AS link_id\n FROM ${IDENTITIES}\n WHERE version_id = $2 AND entity_kind = 'link' AND diff_required\n ${pending ? `AND expand_at = ${NEXT_EXPANSION}` : \"\"}\n ), members AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links JOIN scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = $1\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM ontology_link_overrides AS overrides JOIN scopes\n ON scopes.source_type_id = overrides.source_type_id\n AND scopes.source_id = overrides.source_primary_id\n AND scopes.link_id = overrides.link_id\n WHERE overrides.project_id = $1 AND overrides.identity_kind = 'slot'\n )\n ${INSERT_MEMBER_LINKS}`,\n [projectId, versionId]\n )\n await sql`\n UPDATE ontology_replacement_plans SET expansions = expansions + 1\n WHERE version_id = ${versionId}\n `\n return incident.count + members.count\n}\n\n/**\n * What the commits since the watermark of plan `$2` touched in project `$1`: those its snapshot\n * did not see and this one does.\n */\nconst TOUCHED = `touched AS MATERIALIZED (\n SELECT DISTINCT touches.entity_kind, touches.identity_key\n FROM ontology_replacement_plans AS plans\n JOIN ontology_commit_touches AS touches ON touches.project_id = $1\n AND touches.xact_id >= pg_snapshot_xmin(plans.watermark)\n AND NOT pg_visible_in_snapshot(touches.xact_id, plans.watermark)\n AND pg_visible_in_snapshot(touches.xact_id, pg_current_snapshot())\n WHERE plans.version_id = $2\n)`\n\n/**\n * The keys of the identities of `kind` of plan `$2` whose revision reads something `touched`\n * holds: an object its own row, override and telemetry; a link its row and edge override, its\n * scope's slot override, its live source assertion and its endpoints. A scope's links are found\n * from its source object. Each lookup is an indexed `= ANY`, whatever the plan tables' statistics.\n */\nfunction touchedIdentities(kind: \"object\" | \"link\"): string {\n if (kind === \"object\") {\n return `SELECT identity_key FROM touched WHERE entity_kind = 'object'`\n }\n const sourceKey = columnKeyExpression([\"(identity_key::jsonb->>0)\", \"(identity_key::jsonb->>1)\"])\n return `SELECT identity_key FROM touched WHERE entity_kind = 'link'\n UNION ALL\n SELECT links.identity_key FROM ${IDENTITIES} AS links\n WHERE links.version_id = $2 AND links.source_key = ANY(ARRAY(\n SELECT ${sourceKey} FROM touched WHERE entity_kind IN ('object', 'scope')\n ))\n UNION ALL\n SELECT links.identity_key FROM ${IDENTITIES} AS links\n WHERE links.version_id = $2 AND links.target_key = ANY(ARRAY(\n SELECT identity_key FROM touched WHERE entity_kind = 'object'\n ))`\n}\n\n/**\n * Adds the links commits brought within the plan's reach, from what they touched: a link that\n * now exists incident to an object the plan flips, or in a scope a planned link changes. It\n * considers the links `expandLinks` would find, among those the commits touched.\n */\nasync function expandTouched(\n sql: SQLClient,\n versionId: string,\n projectId: string\n): Promise<number> {\n const touchedLinks = `touched_links AS (\n SELECT identity_key, identity_key::jsonb->>0 AS source_type_id,\n identity_key::jsonb->>1 AS source_id, identity_key::jsonb->>2 AS link_id,\n identity_key::jsonb->>3 AS target_type_id, identity_key::jsonb->>4 AS target_id\n FROM touched WHERE entity_kind = 'link'\n ), slot_targets AS (\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id AS target_id\n FROM touched JOIN ontology_link_overrides AS overrides ON overrides.project_id = $1\n AND overrides.identity_kind = 'slot' AND overrides.identity_key = touched.identity_key::jsonb\n WHERE touched.entity_kind = 'scope'\n )`\n const columns = LINK_COLUMNS\n const sourceKey = columnKeyExpression([\"candidates.source_type_id\", \"candidates.source_id\"])\n const targetKey = columnKeyExpression([\"candidates.target_type_id\", \"candidates.target_id\"])\n const effective = `EXISTS (\n SELECT 1 FROM links AS stored\n WHERE stored.project_id = $1 AND stored.source_type_id = touched_links.source_type_id\n AND stored.source_id = touched_links.source_id AND stored.link_id = touched_links.link_id\n AND stored.target_type_id = touched_links.target_type_id\n AND stored.target_id = touched_links.target_id\n )`\n const incident = await sql.unsafe(\n `WITH ${TOUCHED}, ${touchedLinks}, incident_links AS (\n SELECT candidates.* FROM (\n SELECT ${columns} FROM touched_links\n WHERE ${effective} OR EXISTS (\n SELECT 1 FROM ontology_link_overrides AS overrides\n WHERE overrides.project_id = $1 AND overrides.identity_kind = 'edge'\n AND overrides.identity_key = touched_links.identity_key::jsonb\n ) OR EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = $1 AND roots.retired_at IS NULL AND NOT roots.deleted\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n WHERE rows.entity_kind = 'link' AND rows.source_type_id = touched_links.source_type_id\n AND rows.source_primary_id = touched_links.source_id\n AND rows.link_id = touched_links.link_id\n AND rows.target_type_id = touched_links.target_type_id\n AND rows.target_primary_id = touched_links.target_id\n )\n UNION\n SELECT ${columns} FROM slot_targets\n ) AS candidates\n WHERE EXISTS (\n SELECT 1 FROM ${PG_PLAN_WORK_TABLE} AS work\n WHERE work.work_id = $2 AND work.unique_key IN (\n 'incident-object:' || ${sourceKey}, 'incident-object:' || ${targetKey}\n )\n )\n )\n ${INSERT_INCIDENT_LINKS}`,\n [projectId, versionId]\n )\n if (incident.count > 0) await dropUnplannedWork(sql, versionId, \"link\")\n const members = await sql.unsafe(\n `WITH ${TOUCHED}, ${touchedLinks}, members AS (\n SELECT candidates.* FROM (\n SELECT ${columns} FROM touched_links WHERE ${effective}\n UNION\n SELECT ${columns} FROM slot_targets\n ) AS candidates\n WHERE EXISTS (\n SELECT 1 FROM ${IDENTITIES} AS changed\n WHERE changed.version_id = $2 AND changed.source_key = ${sourceKey}\n AND changed.diff_required AND changed.identity_key::jsonb->>2 = candidates.link_id\n )\n )\n ${INSERT_MEMBER_LINKS}`,\n [projectId, versionId]\n )\n return incident.count + members.count\n}\n\n/**\n * Whether the touches since the plan's watermark may be incomplete, so that `refresh` checks every\n * identity: purge deleted touches the watermark did not see, or the watermark comes from a cluster\n * further along (see `committedSince`).\n */\nasync function touchesIncomplete(\n sql: SQLClient,\n versionId: string,\n projectId: string\n): Promise<boolean> {\n const [row] = await sql<{ readonly incomplete: boolean }[]>`\n SELECT pg_snapshot_xmax(plans.watermark) > pg_snapshot_xmax(pg_current_snapshot())\n OR COALESCE(pg_snapshot_xmin(plans.watermark) < (\n SELECT xact_id FROM ontology_commit_touch_horizons WHERE project_id = ${projectId}\n ), FALSE) AS incomplete\n FROM ontology_replacement_plans AS plans\n WHERE plans.version_id = ${versionId}\n `\n return row?.incomplete ?? true\n}\n\n/**\n * Deletes touches no ready plan of the project needs, up to `limit`: those of commits every ready\n * plan's watermark sees. A plan opening meanwhile may not be visible yet, so the horizon records\n * how far touches are gone, and a plan watermarked before it checks every identity.\n */\nasync function purgeTouches(sql: SQLClient, projectId: string, limit: number): Promise<number> {\n if (limit <= 0) return 0\n const [horizon] = await sql<{ readonly xact_id: string }[]>`\n SELECT LEAST(\n pg_snapshot_xmin(pg_current_snapshot()),\n (SELECT pg_snapshot_xmin(plans.watermark) FROM ontology_replacement_plans AS plans\n JOIN ontology_sources AS versions USING (version_id)\n WHERE plans.project_id = ${projectId} AND versions.status = 'ready'\n ORDER BY 1 LIMIT 1)\n )::text AS xact_id\n `\n const deleted = await sql`\n DELETE FROM ontology_commit_touches WHERE ctid = ANY(ARRAY(\n SELECT ctid FROM ontology_commit_touches\n WHERE project_id = ${projectId} AND xact_id < ${horizon!.xact_id}::xid8\n LIMIT ${limit}\n ))\n `\n if (deleted.count > 0) {\n await sql`\n INSERT INTO ontology_commit_touch_horizons AS horizons (project_id, xact_id)\n VALUES (${projectId}, ${horizon!.xact_id}::xid8)\n ON CONFLICT (project_id) DO UPDATE\n SET xact_id = GREATEST(horizons.xact_id, EXCLUDED.xact_id)\n `\n }\n return deleted.count\n}\n\nasync function analyzePlans(sql: SQLClient): Promise<void> {\n await sql`ANALYZE ${sql(IDENTITIES)}, ${sql(PG_PLAN_WORK_TABLE)}`\n}\n\n/**\n * Analyzes the plan tables once the plan holds `ANALYZE_ROWS` rows of work. Counted in work rows,\n * not identities: an object stages its classification, its existence, its change and its event.\n */\nasync function analyzeStagedWork(sql: SQLClient, versionId: string): Promise<void> {\n const [staged] = await sql<{ readonly rows: number | string }[]>`\n SELECT COUNT(*) AS rows FROM (\n SELECT 1 FROM ${sql(PG_PLAN_WORK_TABLE)} WHERE work_id = ${versionId} LIMIT ${ANALYZE_ROWS}\n ) AS work\n `\n\n if (Number(staged?.rows ?? 0) < ANALYZE_ROWS) return\n await analyzePlans(sql)\n}\n\n/**\n * Deletes the work of the identities of `kind` left to plan: an identity to plan holds none. The\n * keys come first, so the work is sought by key whatever the plan tables' statistics.\n */\nasync function dropUnplannedWork(\n sql: SQLClient,\n versionId: string,\n kind: \"object\" | \"link\"\n): Promise<void> {\n await sql`\n DELETE FROM ${sql(PG_PLAN_WORK_TABLE)}\n WHERE work_id = ${versionId} AND entity_kind = ${kind} AND identity_key = ANY(ARRAY(\n SELECT identity_key FROM ${sql(IDENTITIES)}\n WHERE version_id = ${versionId} AND entity_kind = ${kind} AND planned_revision IS NULL\n ))\n `\n}\n\nasync function unplannedCount(\n sql: SQLClient,\n versionId: string,\n kind?: \"object\" | \"link\"\n): Promise<number> {\n const [row] = await sql<{ readonly count: number | string }[]>`\n SELECT COUNT(*) AS count FROM ${sql(IDENTITIES)}\n WHERE version_id = ${versionId} AND planned_revision IS NULL\n ${kind ? sql`AND entity_kind = ${kind}` : sql``}\n `\n return Number(row?.count ?? 0)\n}\n\nasync function requireCandidate(\n sql: SQLClient,\n input: ReplacementPlanRef,\n lock = false\n): Promise<PgOntologySourceRow> {\n const candidate = await sourceRow(\n sql,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n lock\n )\n if (\n !candidate ||\n candidate.status !== \"ready\" ||\n candidate.projection_run_id !== input.execution.projectionRunId ||\n candidate.execution_token !== input.execution.executionToken\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.materializationId}' is missing, not ready, or owned by another execution.`\n )\n }\n await assertProjectionExecution(sql, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n })\n return candidate\n}\n\nasync function requirePlan(\n sql: SQLClient,\n input: ReplacementPlanRef\n): Promise<{ readonly plan: PlanRow; readonly candidate: PgOntologySourceRow }> {\n const candidate = await requireCandidate(sql, input)\n const plan = await planRow(sql, candidate.version_id)\n if (!plan) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.materializationId}' has no open plan.`\n )\n }\n return { plan, candidate }\n}\n\nasync function deletePlan(sql: SQLClient, versionId: string): Promise<void> {\n await sql`DELETE FROM ${sql(PG_PLAN_WORK_TABLE)} WHERE work_id = ${versionId}`\n await sql`DELETE FROM ${sql(IDENTITIES)} WHERE version_id = ${versionId}`\n await sql`DELETE FROM ontology_replacement_plans WHERE version_id = ${versionId}`\n}\n\nasync function planRow(sql: SQLClient, versionId: string): Promise<PlanRow | null> {\n const [row] = await sql<PlanRow[]>`\n SELECT version_id, commit_id, committed_at, replaced_materialization_id,\n replaced_last_commit_id\n FROM ontology_replacement_plans\n WHERE version_id = ${versionId}\n `\n return row ?? null\n}\n\n/** The commit a plan was opened with, as its staged work and its session must carry it. */\nfunction planCommit(plan: PlanRow) {\n return { commitId: plan.commit_id, committedAt: toIsoString(plan.committed_at) }\n}\n\nasync function sourceRow(\n sql: SQLClient,\n projectId: string,\n sourceId: string,\n materializationId: string,\n lock = false\n): Promise<PgOntologySourceRow | null> {\n const [row] = await sql<PgOntologySourceRow[]>`\n SELECT * FROM ontology_sources\n WHERE project_id = ${projectId} AND source_id = ${sourceId}\n AND materialization_id = ${materializationId}\n ${lock ? sql`FOR UPDATE` : sql``}\n `\n return row ?? null\n}\n",
49
49
  "import {\n linkRefKey,\n MaterializationConflictError,\n type OntologyLinkRef,\n type OntologyObjectRef,\n objectRefKey,\n type TelemetrySeriesRef,\n telemetryPointKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n canonicalJson,\n effectiveConflict,\n materializationApplyPhase,\n materializationPlanKindRank,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { MaterializationPlanWorkItem } from \"@sixb/core/storage\"\nimport type postgres from \"postgres\"\nimport type { SQL, SQLClient } from \"../pg-client\"\n\nexport interface PgStagedPlanTarget {\n /** The work table and the id its rows carry: a session's temp table, or a durable plan. */\n readonly workTable: string\n readonly workId: string\n readonly projectId: string\n readonly commitId: string\n readonly committedAt: string\n}\n\nexport interface PgAppliedPlan {\n readonly objectWrites: number\n readonly linkWrites: number\n readonly eventCount: number\n}\n\ninterface WriteCounts {\n readonly staged: number | string\n readonly written: number | string\n}\n\ntype Fragment = ReturnType<SQL[\"unsafe\"]>\ntype Query = postgres.PendingQuery<postgres.Row[]>\n\n/**\n * Applies a session's staged plan where it is stored: each statement reads one item kind from the\n * work table and writes it set-based, so planned rows never travel back through the client.\n *\n * Every write still checks the revision its plan expected. A statement that writes fewer rows than\n * it staged is a conflict; only then does a second, indexed query find the entity to name, so the\n * normal path never correlates the written rows back to the staged ones.\n */\nexport class PgMaterializationWriter {\n constructor(private readonly sql: SQLClient) {}\n\n async applyStaged(target: PgStagedPlanTarget): Promise<PgAppliedPlan> {\n await this.applyObjectOverrides(target)\n await this.applyLinkOverrides(target)\n await this.applyPoints(target)\n let linkWrites = await this.deleteLinks(target)\n let objectWrites = await this.deleteObjects(target)\n objectWrites += await this.upsertObjects(target)\n linkWrites += await this.upsertLinks(target)\n const eventCount = await this.writeOutbox(target)\n await this.writeTouches(target)\n return { objectWrites, linkWrites, eventCount }\n }\n\n /** The staged values of one plan item kind, as `value`. */\n private staged(target: PgStagedPlanTarget, kind: MaterializationPlanWorkItem[\"kind\"]) {\n return this.sql`\n SELECT payload->'item'->'value' AS value\n FROM ${this.sql(target.workTable)}\n WHERE work_id = ${target.workId} AND lane = 'apply'\n AND major_order = ${materializationApplyPhase(kind)}\n AND minor_order = ${materializationPlanKindRank(kind)}\n `\n }\n\n private async applyObjectOverrides(target: PgStagedPlanTarget): Promise<void> {\n const { projectId } = target\n const inserts = this.sql`\n SELECT value FROM (${this.staged(target, \"object-override-upsert\")}) AS staged\n WHERE value->>'expectedLastCommitId' IS NULL\n `\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${inserts}), written AS (\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->'ref'->>'objectTypeId', value->'ref'->>'primaryId',\n value->'value', value->'editedAt', value->>'lastCommitId',\n (value->>'updatedAt')::timestamptz\n FROM candidates\n ON CONFLICT DO NOTHING\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n throw objectOverrideConflict()\n }\n )\n const updates = this.sql`\n SELECT value FROM (${this.staged(target, \"object-override-upsert\")}) AS staged\n WHERE value->>'expectedLastCommitId' IS NOT NULL\n `\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${updates}), written AS (\n UPDATE ontology_object_overrides AS stored\n SET value = candidates.value->'value', edited_at = candidates.value->'editedAt',\n last_commit_id = candidates.value->>'lastCommitId',\n updated_at = (candidates.value->>'updatedAt')::timestamptz\n FROM candidates\n WHERE stored.project_id = ${projectId} AND ${this.matches(\"object\", \"value->'ref'\")}\n AND stored.last_commit_id = candidates.value->>'expectedLastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n throw objectOverrideConflict()\n }\n )\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${this.staged(target, \"object-override-delete\")}), written AS (\n DELETE FROM ontology_object_overrides AS stored USING candidates\n WHERE stored.project_id = ${projectId} AND ${this.matches(\"object\", \"value->'ref'\")}\n AND stored.last_commit_id = candidates.value->>'expectedLastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n throw objectOverrideConflict()\n }\n )\n }\n\n private async applyLinkOverrides(target: PgStagedPlanTarget): Promise<void> {\n const { projectId, commitId } = target\n // An edge is keyed by its whole link ref and targets it; a slot is keyed by its scope and\n // targets the member its value names.\n const identified = (\n edges: MaterializationPlanWorkItem[\"kind\"],\n slots: MaterializationPlanWorkItem[\"kind\"]\n ) => this.sql`\n SELECT 'edge' AS identity_kind,\n jsonb_build_array(\n value->'ref'->'source'->>'objectTypeId', value->'ref'->'source'->>'primaryId',\n value->'ref'->>'linkId',\n value->'ref'->'target'->>'objectTypeId', value->'ref'->'target'->>'primaryId'\n ) AS identity_key,\n value->'ref'->'target' AS target, value\n FROM (${this.staged(target, edges)}) AS edges\n UNION ALL\n SELECT 'slot',\n jsonb_build_array(\n value->'ref'->'source'->>'objectTypeId', value->'ref'->'source'->>'primaryId',\n value->'ref'->>'linkId'\n ),\n value->'value'->'target', value\n FROM (${this.staged(target, slots)}) AS slots\n `\n const upserts = identified(\"link-override-upsert\", \"link-slot-override-upsert\")\n const writes = (inserts: boolean) => this.sql`\n SELECT * FROM (${upserts}) AS upserts\n WHERE (value->>'expectedLastCommitId' IS NULL) = ${inserts}\n `\n const deletes = identified(\"link-override-delete\", \"link-slot-override-delete\")\n const stored = this.sql`\n SELECT 1 FROM ontology_link_overrides AS stored\n WHERE stored.project_id = ${projectId}\n AND stored.identity_kind = candidates.identity_kind\n AND stored.identity_key = candidates.identity_key\n `\n const firstUnwritten = (source: typeof upserts) => async () => {\n const [row] = await this.sql<{ readonly identity_kind: string }[]>`\n SELECT identity_kind FROM (${source}) AS candidates\n WHERE NOT EXISTS (${stored} AND stored.last_commit_id = ${commitId})\n LIMIT 1\n `\n throw linkOverrideConflict(row?.identity_kind)\n }\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${writes(true)}), written AS (\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}, identity_kind, identity_key,\n value->'ref'->'source'->>'objectTypeId', value->'ref'->'source'->>'primaryId',\n value->'ref'->>'linkId', target->>'objectTypeId', target->>'primaryId',\n value->'value', value->>'lastCommitId', (value->>'updatedAt')::timestamptz\n FROM candidates\n ON CONFLICT DO NOTHING\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n firstUnwritten(writes(true))\n )\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${writes(false)}), written AS (\n UPDATE ontology_link_overrides AS stored\n SET target_type_id = candidates.target->>'objectTypeId',\n target_primary_id = candidates.target->>'primaryId',\n value = candidates.value->'value',\n last_commit_id = candidates.value->>'lastCommitId',\n updated_at = (candidates.value->>'updatedAt')::timestamptz\n FROM candidates\n WHERE stored.project_id = ${projectId}\n AND stored.identity_kind = candidates.identity_kind\n AND stored.identity_key = candidates.identity_key\n AND stored.last_commit_id = candidates.value->>'expectedLastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n firstUnwritten(writes(false))\n )\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${deletes}), written AS (\n DELETE FROM ontology_link_overrides AS stored USING candidates\n WHERE stored.project_id = ${projectId}\n AND stored.identity_kind = candidates.identity_kind\n AND stored.identity_key = candidates.identity_key\n AND stored.last_commit_id = candidates.value->>'expectedLastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const [row] = await this.sql<{ readonly identity_kind: string }[]>`\n SELECT identity_kind FROM (${deletes}) AS candidates WHERE EXISTS (${stored}) LIMIT 1\n `\n throw linkOverrideConflict(row?.identity_kind)\n }\n )\n }\n\n private async applyPoints(target: PgStagedPlanTarget): Promise<void> {\n const { projectId, commitId } = target\n const points = (inserts: boolean) => this.sql`\n SELECT value->'point'->'series'->'object'->>'objectTypeId' AS object_type_id,\n value->'point'->'series'->'object'->>'primaryId' AS object_id,\n value->'point'->'series'->>'propertyId' AS property_id,\n value->'point'->'value' AS value, value->'point'->>'unit' AS unit,\n (value->'point'->>'at')::timestamptz AS at,\n value->'point'->>'lastCommitId' AS last_commit_id,\n value->'expected'->>'lastCommitId' AS expected_last_commit_id,\n value->'point' AS point\n FROM (${this.staged(target, \"point-upsert\")}) AS staged\n WHERE (value->'expected'->>'lastCommitId' IS NULL) = ${inserts}\n `\n // Both statements keep `timeseries_latest` on the newest point of each series.\n const latest = this.sql`\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, 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, value, unit, at, last_commit_id\n )\n SELECT project_id, object_type_id, object_id, property_id, value, unit, at,\n 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 )\n `\n const firstUnwritten = (inserts: boolean) => async () => {\n const [row] = await this.sql<{ readonly point: unknown }[]>`\n SELECT point FROM (${points(inserts)}) AS candidates\n WHERE NOT EXISTS (\n SELECT 1 FROM timeseries AS stored\n WHERE stored.project_id = ${projectId}\n AND stored.object_type_id = candidates.object_type_id\n AND stored.object_id = candidates.object_id\n AND stored.property_id = candidates.property_id\n AND stored.at = candidates.at\n AND stored.last_commit_id = ${commitId}\n )\n LIMIT 1\n `\n throw pointConflict(row?.point)\n }\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${points(true)}), written AS (\n INSERT INTO timeseries (\n project_id, object_type_id, object_id, property_id, value, unit, at, last_commit_id\n )\n SELECT ${projectId}, object_type_id, object_id, property_id, value, unit, at,\n last_commit_id\n FROM candidates\n ON CONFLICT DO NOTHING\n RETURNING *\n ), ${latest}\n ${counts(this.sql)}\n `,\n firstUnwritten(true)\n )\n await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${points(false)}), written AS (\n UPDATE timeseries AS stored\n SET value = candidates.value, unit = candidates.unit,\n last_commit_id = candidates.last_commit_id\n FROM candidates\n WHERE stored.project_id = ${projectId}\n AND stored.object_type_id = candidates.object_type_id\n AND stored.object_id = candidates.object_id\n AND stored.property_id = candidates.property_id\n AND stored.at = candidates.at\n AND stored.last_commit_id = candidates.expected_last_commit_id\n RETURNING stored.*\n ), ${latest}\n ${counts(this.sql)}\n `,\n firstUnwritten(false)\n )\n }\n\n private async deleteLinks(target: PgStagedPlanTarget): Promise<number> {\n const candidates = this.staged(target, \"link-delete\")\n return this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${candidates}), written AS (\n DELETE FROM links AS stored USING candidates\n WHERE stored.project_id = ${target.projectId} AND ${this.matches(\"link\", \"value->'ref'\")}\n AND stored.last_commit_id = candidates.value->'expected'->>'lastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const ref = await this.firstConflict(target, candidates, \"link\", \"value->'ref'\", \"delete\")\n throw effectiveLinkConflict(ref as OntologyLinkRef | undefined)\n }\n )\n }\n\n private async deleteObjects(target: PgStagedPlanTarget): Promise<number> {\n const candidates = this.staged(target, \"object-delete\")\n return this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${candidates}), written AS (\n DELETE FROM objects AS stored USING candidates\n WHERE stored.project_id = ${target.projectId} AND ${this.matches(\"object\", \"value->'ref'\")}\n AND stored.version = (candidates.value->'expected'->>'version')::integer\n AND stored.last_commit_id = candidates.value->'expected'->>'lastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const ref = await this.firstConflict(target, candidates, \"object\", \"value->'ref'\", \"delete\")\n throw effectiveObjectConflict(ref as OntologyObjectRef | undefined)\n }\n )\n }\n\n private async upsertObjects(target: PgStagedPlanTarget): Promise<number> {\n const { projectId } = target\n const subset = (exists: boolean) => this.sql`\n SELECT value FROM (${this.staged(target, \"object-upsert\")}) AS staged\n WHERE ((value->'expected'->>'exists')::boolean IS TRUE) = ${exists}\n `\n const inserted = await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${subset(false)}), written AS (\n INSERT INTO objects (\n project_id, object_type_id, primary_id, properties, created_at, updated_at,\n version, last_commit_id\n )\n SELECT ${projectId}, value->'row'->'ref'->>'objectTypeId',\n value->'row'->'ref'->>'primaryId', value->'row'->'properties',\n (value->'row'->>'createdAt')::timestamptz, (value->'row'->>'updatedAt')::timestamptz,\n (value->'row'->>'version')::integer, value->'row'->>'lastCommitId'\n FROM candidates\n ON CONFLICT DO NOTHING\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const ref = await this.firstConflict(\n target,\n subset(false),\n \"object\",\n \"value->'row'->'ref'\",\n \"insert\"\n )\n throw effectiveConflict(\n `Expected ${objectLabel(ref as OntologyObjectRef | undefined)} to be absent.`\n )\n }\n )\n const updated = await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${subset(true)}), written AS (\n UPDATE objects AS stored\n SET properties = candidates.value->'row'->'properties',\n created_at = (candidates.value->'row'->>'createdAt')::timestamptz,\n updated_at = (candidates.value->'row'->>'updatedAt')::timestamptz,\n version = (candidates.value->'row'->>'version')::integer,\n last_commit_id = candidates.value->'row'->>'lastCommitId'\n FROM candidates\n WHERE stored.project_id = ${projectId}\n AND ${this.matches(\"object\", \"value->'row'->'ref'\")}\n AND stored.version = (candidates.value->'expected'->>'version')::integer\n AND stored.last_commit_id = candidates.value->'expected'->>'lastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const ref = await this.firstConflict(\n target,\n subset(true),\n \"object\",\n \"value->'row'->'ref'\",\n \"update\"\n )\n throw effectiveObjectConflict(ref as OntologyObjectRef | undefined)\n }\n )\n return inserted + updated\n }\n\n private async upsertLinks(target: PgStagedPlanTarget): Promise<number> {\n const { projectId } = target\n const subset = (exists: boolean) => this.sql`\n SELECT value FROM (${this.staged(target, \"link-upsert\")}) AS staged\n WHERE ((value->'expected'->>'exists')::boolean IS TRUE) = ${exists}\n `\n const inserted = await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${subset(false)}), written AS (\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->'row'->'ref'->'source'->>'objectTypeId',\n value->'row'->'ref'->'source'->>'primaryId', value->'row'->'ref'->>'linkId',\n value->'row'->'ref'->'target'->>'objectTypeId',\n value->'row'->'ref'->'target'->>'primaryId', value->'row'->'properties',\n (value->'row'->>'createdAt')::timestamptz, (value->'row'->>'updatedAt')::timestamptz,\n value->'row'->>'lastCommitId'\n FROM candidates\n ON CONFLICT DO NOTHING\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const ref = await this.firstConflict(\n target,\n subset(false),\n \"link\",\n \"value->'row'->'ref'\",\n \"insert\"\n )\n throw effectiveConflict(\n `Expected ${linkLabel(ref as OntologyLinkRef | undefined)} to be absent.`\n )\n }\n )\n const updated = await this.write(\n this.sql<WriteCounts[]>`\n WITH candidates AS (${subset(true)}), written AS (\n UPDATE links AS stored\n SET properties = candidates.value->'row'->'properties',\n created_at = (candidates.value->'row'->>'createdAt')::timestamptz,\n updated_at = (candidates.value->'row'->>'updatedAt')::timestamptz,\n last_commit_id = candidates.value->'row'->>'lastCommitId'\n FROM candidates\n WHERE stored.project_id = ${projectId}\n AND ${this.matches(\"link\", \"value->'row'->'ref'\")}\n AND stored.last_commit_id = candidates.value->'expected'->>'lastCommitId'\n RETURNING 1\n )\n ${counts(this.sql)}\n `,\n async () => {\n const ref = await this.firstConflict(\n target,\n subset(true),\n \"link\",\n \"value->'row'->'ref'\",\n \"update\"\n )\n throw effectiveLinkConflict(ref as OntologyLinkRef | undefined)\n }\n )\n return inserted + updated\n }\n\n /**\n * Writes the staged event drafts in canonical order. Event ids hash the canonical JSON of\n * `[projectId, commitId, ordinal]`; the provider-fixed prefix is rendered here, the ordinal by\n * PostgreSQL, so the outbox matches `createEventId` without one id crossing the wire.\n */\n private async writeOutbox(target: PgStagedPlanTarget): Promise<number> {\n const prefix = `${canonicalJson([target.projectId, target.commitId]).slice(0, -1)},`\n const [row] = await this.sql<WriteCounts[]>`\n WITH candidates AS (\n SELECT payload->'draft' AS draft,\n row_number() OVER (\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n ) - 1 AS ordinal\n FROM ${this.sql(target.workTable)}\n WHERE work_id = ${target.workId} AND lane = 'event'\n ), identified AS (\n SELECT draft, ordinal,\n encode(sha256(convert_to(${prefix}::text || ordinal::text || ']', 'UTF8')), 'hex') AS id\n FROM candidates\n ), written AS (\n INSERT INTO ontology_outbox (\n project_id, id, commit_id, commit_ordinal, event,\n available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n )\n SELECT ${target.projectId}, id, ${target.commitId}, ordinal, draft,\n ${target.committedAt}::timestamptz, 0, NULL, NULL, NULL, NULL,\n ${target.committedAt}::timestamptz\n FROM identified\n ON CONFLICT DO NOTHING\n RETURNING 1\n )\n ${counts(this.sql)}\n `\n const staged = Number(row?.staged ?? 0)\n if (Number(row?.written ?? 0) !== staged) {\n throw effectiveConflict(`Outbox events of commit '${target.commitId}' already exist.`)\n }\n return staged\n }\n\n /**\n * Records the entities whose plan inputs this commit changed, once each, as the in-memory\n * `touchPlanItem` does: a replacement plan's refresh rechecks only those.\n */\n private async writeTouches(target: PgStagedPlanTarget): Promise<void> {\n await this.sql`\n INSERT INTO ontology_commit_touches (project_id, entity_kind, identity_key)\n SELECT DISTINCT ${target.projectId}, entity.kind,\n CASE entity.kind\n WHEN 'object' THEN\n concat('[', entity.ref->'objectTypeId', ',', entity.ref->'primaryId', ']')\n WHEN 'scope' THEN concat('[', entity.ref->'source'->'objectTypeId', ',',\n entity.ref->'source'->'primaryId', ',', entity.ref->'linkId', ']')\n ELSE concat('[', entity.ref->'source'->'objectTypeId', ',',\n entity.ref->'source'->'primaryId', ',', entity.ref->'linkId', ',',\n entity.ref->'target'->'objectTypeId', ',', entity.ref->'target'->'primaryId', ']')\n END\n FROM ${this.sql(target.workTable)} AS work\n CROSS JOIN LATERAL (\n SELECT CASE work.payload->'item'->>'kind'\n WHEN 'object-upsert' THEN 'object'\n WHEN 'object-delete' THEN 'object'\n WHEN 'object-override-upsert' THEN 'object'\n WHEN 'object-override-delete' THEN 'object'\n WHEN 'point-upsert' THEN 'object'\n WHEN 'link-upsert' THEN 'link'\n WHEN 'link-delete' THEN 'link'\n WHEN 'link-override-upsert' THEN 'link'\n WHEN 'link-override-delete' THEN 'link'\n WHEN 'link-slot-override-upsert' THEN 'scope'\n WHEN 'link-slot-override-delete' THEN 'scope'\n END AS kind,\n CASE work.payload->'item'->>'kind'\n WHEN 'object-upsert' THEN work.payload->'item'->'value'->'row'->'ref'\n WHEN 'link-upsert' THEN work.payload->'item'->'value'->'row'->'ref'\n WHEN 'point-upsert' THEN work.payload->'item'->'value'->'point'->'series'->'object'\n ELSE work.payload->'item'->'value'->'ref'\n END AS ref\n ) AS entity\n WHERE work.work_id = ${target.workId} AND work.lane = 'apply'\n `\n }\n\n private async write(\n statement: Promise<readonly WriteCounts[]>,\n conflict: () => Promise<never>\n ): Promise<number> {\n const [row] = await statement\n const written = Number(row?.written ?? 0)\n if (written !== Number(row?.staged ?? 0)) await conflict()\n return written\n }\n\n /** Matches a staged ref, at a static JSON path of `candidates.value`, to `stored`. */\n private matches(kind: \"object\" | \"link\", path: string): Fragment {\n const ref = `(candidates.${path})`\n return this.sql.unsafe(\n kind === \"object\"\n ? `stored.object_type_id = ${ref}->>'objectTypeId'\n AND stored.primary_id = ${ref}->>'primaryId'`\n : `stored.source_type_id = ${ref}->'source'->>'objectTypeId'\n AND stored.source_id = ${ref}->'source'->>'primaryId'\n AND stored.link_id = ${ref}->>'linkId'\n AND stored.target_type_id = ${ref}->'target'->>'objectTypeId'\n AND stored.target_id = ${ref}->'target'->>'primaryId'`\n )\n }\n\n /**\n * The ref of the first staged entity whose stored row tells why a write missed it: it still\n * exists after a delete, another commit wrote it before an insert, or an update left it without\n * this commit. None when no stored row tells, as for a delete whose row is already gone.\n */\n private async firstConflict(\n target: PgStagedPlanTarget,\n candidates: Query,\n kind: \"object\" | \"link\",\n path: string,\n missed: \"delete\" | \"insert\" | \"update\"\n ): Promise<unknown> {\n const table = kind === \"object\" ? \"objects\" : \"links\"\n const revision =\n missed === \"insert\"\n ? this.sql`AND stored.last_commit_id <> ${target.commitId}`\n : missed === \"update\"\n ? this.sql`AND stored.last_commit_id = ${target.commitId}`\n : this.sql``\n const stored = this.sql`\n EXISTS (\n SELECT 1 FROM ${this.sql(table)} AS stored\n WHERE stored.project_id = ${target.projectId} AND ${this.matches(kind, path)} ${revision}\n )\n `\n const [row] = await this.sql<{ readonly ref: unknown }[]>`\n SELECT ${this.sql.unsafe(`candidates.${path}`)} AS ref FROM (${candidates}) AS candidates\n WHERE ${missed === \"update\" ? this.sql`NOT` : this.sql``} ${stored}\n LIMIT 1\n `\n return row?.ref\n }\n}\n\nfunction counts(sql: SQLClient) {\n return sql`SELECT (SELECT COUNT(*) FROM candidates) AS staged,\n (SELECT COUNT(*) FROM written) AS written`\n}\n\nfunction objectOverrideConflict(): MaterializationConflictError {\n return effectiveConflict(\"Expected object override changed.\")\n}\n\nfunction linkOverrideConflict(identityKind: string | undefined): MaterializationConflictError {\n return effectiveConflict(\n identityKind === \"slot\"\n ? \"Expected link slot override changed.\"\n : \"Expected link edge override changed.\"\n )\n}\n\nfunction effectiveObjectConflict(ref: OntologyObjectRef | undefined): MaterializationConflictError {\n return effectiveConflict(`Expected ${objectLabel(ref)} changed.`)\n}\n\nfunction effectiveLinkConflict(ref: OntologyLinkRef | undefined): MaterializationConflictError {\n return effectiveConflict(`Expected ${linkLabel(ref)} changed.`)\n}\n\nfunction objectLabel(ref: OntologyObjectRef | undefined): string {\n return ref ? `object ${objectRefKey(ref)}` : \"object\"\n}\n\nfunction linkLabel(ref: OntologyLinkRef | undefined): string {\n return ref ? `link ${linkRefKey(ref)}` : \"link\"\n}\n\nfunction pointConflict(point: unknown): MaterializationConflictError {\n const found = point as { readonly series: TelemetrySeriesRef; readonly at: string } | undefined\n return new MaterializationConflictError(\n \"timeseries-point\",\n found\n ? `Telemetry point ${telemetryPointKey(found.series, found.at)} changed.`\n : \"Telemetry point changed.\"\n )\n}\n",
50
50
  "import { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n type OntologyMaterializationEventCommit,\n} from \"@sixb/core/internal/materialization\"\nimport {\n claimedOutboxRows,\n type OutboxEventContext,\n} from \"@sixb/core/internal/ontology-storage-provider\"\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 { type PgExecutionRow, pgExecutionRecord } from \"../pg-execution-storage\"\nimport {\n assertNonblank,\n assertPositiveInteger,\n assertTimestamp,\n claimedOutboxDraft,\n type PgOntologyOutboxRow,\n type PgRootOperation,\n toIsoString,\n} from \"./shared\"\n\n/** A commit's own fields, prefixed, beside every column of the execution it ran under. */\ninterface PgOutboxContextRow extends PgExecutionRow {\n readonly commit_id: string\n readonly commit_committed_at: Date | string\n readonly commit_origin: OntologyMaterializationEventCommit[\"origin\"]\n}\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, outbox.commit_id, outbox.commit_ordinal, outbox.event,\n outbox.available_at, outbox.attempts, outbox.lease_id, outbox.lease_expires_at,\n outbox.published_at, outbox.last_failure, outbox.created_at\n )\n SELECT * FROM claimed ORDER BY created_at, commit_id, commit_ordinal\n `\n if (rows.length === 0) return []\n // Each commit and its execution are read once, however many of its events the batch holds.\n const commitIds = [...new Set(rows.map((row) => row.commit_id))]\n const contexts = await sql<PgOutboxContextRow[]>`\n SELECT commits.id AS commit_id, commits.committed_at AS commit_committed_at,\n commits.origin AS commit_origin, executions.*\n FROM ontology_commits AS commits\n JOIN executions\n ON executions.project_id = commits.project_id AND executions.id = commits.execution_id\n WHERE commits.project_id = ${input.projectId}\n AND commits.id = ANY(${sql.array(commitIds)}::text[])\n `\n const contextOf = new Map(\n contexts.map((row) => [row.commit_id, outboxEventContext(input.projectId, row)])\n )\n return claimedOutboxRows(rows.map(claimedOutboxDraft), (commitId) => contextOf.get(commitId))\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 outboxEventContext(projectId: string, row: PgOutboxContextRow): OutboxEventContext {\n return {\n commit: {\n projectId,\n id: row.commit_id,\n committedAt: toIsoString(row.commit_committed_at),\n origin: row.commit_origin,\n },\n execution: pgExecutionRecord(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 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",
51
- "import {\n type ExecutionStorageRow,\n executionRecordFromStorageRow,\n executionRecordToStorageRow,\n prepareExecutionRecord,\n} from \"@sixb/core/internal/execution-storage\"\nimport type {\n CreateExecutionInput,\n ExecutionRecord,\n ExecutionStorage,\n ShareSessionStorage,\n} 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 private readonly shareSessions: Pick<ShareSessionStorage, \"getById\">\n ) {}\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n const record = await prepareExecutionRecord(input, {\n auth: this.auth,\n getExecution: (params) => this.getById(params),\n getShareSession: (params) => this.shareSessions.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 requester_group_ids,\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 authority_delegation_kind,\n authority_delegation_id,\n authority_delegation_session_id,\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 ${JSON.stringify(row.requesterGroupIds)}::text::jsonb,\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.authorityDelegationKind},\n ${row.authorityDelegationId},\n ${row.authorityDelegationSessionId},\n ${row.createdAt}\n )\n RETURNING *\n `\n\n if (!created) {\n throw new Error(\"[SixbPg] Execution insert returned no row.\")\n }\n return pgExecutionRecord(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 ? pgExecutionRecord(row) : null\n }\n}\n\n/** An `executions` row as its record, for any store that reads executions alongside its own rows. */\nexport function pgExecutionRecord(row: PgExecutionRow): ExecutionRecord {\n return executionRecordFromStorageRow(toStorageRow(row))\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 requesterGroupIds: row.requester_group_ids,\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 authorityDelegationKind: row.authority_delegation_kind,\n authorityDelegationId: row.authority_delegation_id,\n authorityDelegationSessionId: row.authority_delegation_session_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport interface 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 requester_group_ids: string[]\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 authority_delegation_kind: ExecutionStorageRow[\"authorityDelegationKind\"]\n readonly authority_delegation_id: string | null\n readonly authority_delegation_session_id: string | null\n readonly created_at: Date | string\n}\n",
52
- "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 sourceAssertionPayload,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonRunSourceMaterializationInput,\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AdoptedSourceMaterialization,\n AdoptSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n PurgeAbandonedSourceMaterializationsInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\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\"\nimport { cleanupSourceVersions, purgeAbandonedSourceVersions } from \"./source-cleanup\"\nimport { assertSourceRootCoverage, sourceAssertionColumns, stageSourceRoots } from \"./source-roots\"\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; adopt 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, base_materialization_id, base_commit_id\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 ${input.base?.materializationId ?? null}, ${input.base?.lastCommitId ?? null}\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; adopt 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, manifest, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n await stageSourceRoots(sql, manifest, input)\n await this.insertStageRows(sql, manifest, 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 // A newly loaded run is absent from the planner statistics. Without refreshing them,\n // PostgreSQL can scan the whole run for each identity instead of using its full key.\n // Sparse deltas avoid this table-level sampling cost.\n if (input.assertionCount >= 1_000 || input.rootCount >= 1_000) {\n await sql`ANALYZE ontology_source_rows, ontology_source_roots`\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 adopt(\n input: AdoptSourceMaterializationInput\n ): Promise<AdoptedSourceMaterialization | null> {\n return this.runRootOperation(async (sql) => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.adoptedAt, \"Source adoptedAt\", true)\n await this.assertExecution(sql, input)\n const candidate = await this.lockRunCandidate(sql, input)\n if (!candidate) return null\n // Workers' clocks differ; adoption never moves the record back in time.\n const [adopted] = await sql<PgOntologySourceRow[]>`\n UPDATE ontology_sources\n SET execution_token = ${input.execution.executionToken},\n updated_at = GREATEST(updated_at, ${input.adoptedAt}::timestamptz)\n WHERE project_id = ${candidate.project_id} AND source_id = ${candidate.source_id}\n AND materialization_id = ${candidate.materialization_id}\n AND status IN ('staging', 'ready')\n RETURNING *\n `\n if (!adopted) {\n throw sourceConflict(`Source materialization '${candidate.materialization_id}' changed.`)\n }\n return {\n record: sourceRecord(adopted),\n resumeStagingOrdinal:\n adopted.status === \"ready\"\n ? Number(adopted.root_count)\n : await this.lastStagedOrdinal(sql, adopted),\n }\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: AbandonRunSourceMaterializationInput): 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 if (input.kind === \"candidate\") return this.abandonCandidate(sql, input)\n const candidate = await this.lockRunCandidate(sql, input)\n return candidate ? this.transitionToAbandoned(sql, candidate, input.abandonedAt) : null\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 return cleanupSourceVersions(sql, input)\n })\n }\n\n async purgeAbandoned(\n input: PurgeAbandonedSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Abandoned source purge project id\")\n assertPositiveInteger(input.limit, \"Abandoned source purge limit\")\n return purgeAbandonedSourceVersions(sql, input)\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 /** The run's one staging or ready candidate, locked, whichever execution staged it. */\n private async lockRunCandidate(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string }\n }\n ): Promise<PgOntologySourceRow | 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 (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ?? null\n }\n\n private async lastStagedOrdinal(sql: SQLClient, manifest: PgOntologySourceRow): Promise<number> {\n const [last] = await sql<{ readonly ordinal: number | string | null }[]>`\n SELECT MAX(staging_ordinal) AS ordinal FROM ontology_source_roots\n WHERE version_id = ${manifest.version_id}\n `\n return last?.ordinal == null ? 0 : Number(last.ordinal)\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 // Its roots were never live and stay unpublished; purging removes them with the version.\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 version = manifest.version_id\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 (SELECT COUNT(*) FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${version}) AS assertions,\n COUNT(*) AS roots, COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE version_id = ${version}\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 await assertSourceRootCoverage(sql, manifest)\n\n // Roots store only their canonical key; compare its parts with each row's typed identity.\n const [invalid] =\n manifest.projection_kind === \"link\"\n ? await sql<{ readonly root_key: string }[]>`\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n CROSS JOIN LATERAL (SELECT roots.root_key::jsonb AS parts) AS root\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${version}\n GROUP BY roots.id, roots.root_key\n HAVING COUNT(*) <> 1\n OR BOOL_OR(root.parts->>0 <> 'link')\n OR BOOL_OR(rows.entity_kind <> 'link')\n OR BOOL_OR(rows.source_type_id <> root.parts->>1\n OR rows.source_primary_id <> root.parts->>2 OR rows.link_id <> root.parts->>3\n OR rows.target_type_id <> root.parts->>4 OR rows.target_primary_id <> root.parts->>5)\n LIMIT 1\n `\n : await sql<{ readonly root_key: string }[]>`\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n CROSS JOIN LATERAL (SELECT roots.root_key::jsonb AS parts) AS root\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${version}\n GROUP BY roots.id, roots.root_key\n HAVING BOOL_OR(root.parts->>0 <> 'object')\n OR COUNT(*) FILTER (\n WHERE rows.entity_kind = 'object' AND rows.object_type_id = root.parts->>1\n AND rows.primary_id = root.parts->>2\n ) <> 1\n OR COUNT(*) FILTER (\n WHERE (rows.entity_kind = 'object' AND (rows.object_type_id <> root.parts->>1\n OR rows.primary_id <> root.parts->>2))\n OR (rows.entity_kind = 'link' AND (rows.source_type_id <> root.parts->>1\n OR rows.source_primary_id <> root.parts->>2))\n ) <> 0\n OR COUNT(*) FILTER (WHERE rows.entity_kind = 'link') <> COUNT(DISTINCT (\n rows.link_id, rows.target_type_id, rows.target_primary_id\n )) FILTER (WHERE rows.entity_kind = 'link')\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 /** Already staged assertions sharing a root or an ordinal with `rows`. */\n private async findStageRows(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): Promise<readonly SourceStageRow[]> {\n if (rows.length === 0) return []\n const rootKeys = [...new Set(rows.map((row) => row.rootKey))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n const existing = await sql<PgOntologySourceAssertionRow[]>`\n SELECT ${sourceAssertionColumns(sql)}\n FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${manifest.version_id}\n AND (\n roots.root_key = ANY(${sql.array(rootKeys)}::text[])\n OR roots.staging_ordinal = ANY(${sql.array(ordinals)}::bigint[])\n )\n `\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private async insertStageRows(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): Promise<void> {\n if (rows.length === 0) return\n const payload = rows.map(({ rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n return {\n root_key: rootKey,\n entity_kind: row.assertion.kind,\n object_type_id: entity.objectTypeId,\n primary_id: entity.primaryId,\n source_type_id: entity.sourceTypeId,\n source_primary_id: entity.sourcePrimaryId,\n link_id: entity.linkId,\n target_type_id: entity.targetTypeId,\n target_primary_id: entity.targetPrimaryId,\n payload: sourceAssertionPayload(row.assertion),\n }\n })\n const inserted = await sql`\n INSERT INTO ontology_source_rows (\n root_id, entity_kind, object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id, payload\n )\n SELECT roots.id, staged.entity_kind, staged.object_type_id, staged.primary_id,\n staged.source_type_id, staged.source_primary_id, staged.link_id,\n staged.target_type_id, staged.target_primary_id, staged.payload\n FROM jsonb_to_recordset(${jsonParameter(sql, payload)}) AS staged(\n root_key TEXT, entity_kind TEXT, object_type_id TEXT, primary_id TEXT,\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT,\n target_type_id TEXT, target_primary_id TEXT, payload JSONB\n )\n JOIN ontology_source_roots AS roots\n ON roots.version_id = ${manifest.version_id} AND roots.root_key = staged.root_key\n `\n if (inserted.count !== rows.length) {\n throw sourceConflict(\"Staged source rows do not all belong to a staged root.\")\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 numberOrNull(value: number | string | null): number | null {\n return value === null ? null : Number(value)\n}\n",
51
+ "import {\n compareExecutionCreation,\n type ExecutionStorageRow,\n executionRecordFromStorageRow,\n executionRecordToStorageRow,\n prepareExecutionRecord,\n} from \"@sixb/core/internal/execution-storage\"\nimport type {\n CreateExecutionInput,\n ExecutionRecord,\n ExecutionStorage,\n ListSessionExecutionsInput,\n SessionExecutions,\n ShareSessionStorage,\n} 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 private readonly shareSessions: Pick<ShareSessionStorage, \"getById\">\n ) {}\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n const record = await prepareExecutionRecord(input, {\n auth: this.auth,\n getExecution: (params) => this.getById(params),\n getShareSession: (params) => this.shareSessions.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 requester_group_ids,\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 authority_delegation_kind,\n authority_delegation_id,\n authority_delegation_session_id,\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 ${JSON.stringify(row.requesterGroupIds)}::text::jsonb,\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.authorityDelegationKind},\n ${row.authorityDelegationId},\n ${row.authorityDelegationSessionId},\n ${row.createdAt}\n )\n RETURNING *\n `\n\n if (!created) {\n throw new Error(\"[SixbPg] Execution insert returned no row.\")\n }\n return pgExecutionRecord(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 ? pgExecutionRecord(row) : null\n }\n\n async listBySession(input: ListSessionExecutionsInput): Promise<SessionExecutions> {\n const session =\n input.session.type === \"user\"\n ? this.sql`authority_session_id = ${input.session.id}`\n : this.sql`authority_delegation_session_id = ${input.session.id}`\n\n // Each iteration of a recursive query reads the rows the previous one produced, so the walk goes\n // level by level, roots first; with no ORDER BY outside, PostgreSQL evaluates only the rows the\n // limit returns. Within the last level reached, which rows come first is unspecified.\n const rows = await this.sql<(PgExecutionRow & { readonly depth: number })[]>`\n WITH RECURSIVE tree AS (\n (\n SELECT *, 0 AS depth\n FROM executions\n WHERE project_id = ${input.projectId}\n AND ${session}\n AND parent_execution_id IS NULL\n AND created_at >= ${input.from}\n AND created_at < ${input.to}\n ORDER BY created_at, id\n LIMIT ${input.limit + 1}\n )\n UNION ALL\n SELECT child.*, tree.depth + 1\n FROM tree\n JOIN executions child\n ON child.project_id = tree.project_id\n AND child.parent_execution_id = tree.id\n )\n SELECT * FROM tree\n LIMIT ${input.limit + 1}\n `\n\n // Keep the first `limit` by depth, then oldest first, as the contract keeps them.\n const records = rows\n .map((row) => ({ depth: row.depth, record: pgExecutionRecord(row) }))\n .sort(\n (left, right) =>\n left.depth - right.depth || compareExecutionCreation(left.record, right.record)\n )\n .slice(0, input.limit)\n .map(({ record }) => record)\n\n return {\n executions: records.sort(compareExecutionCreation),\n truncated: rows.length > input.limit,\n }\n }\n}\n\n/** An `executions` row as its record, for any store that reads executions alongside its own rows. */\nexport function pgExecutionRecord(row: PgExecutionRow): ExecutionRecord {\n return executionRecordFromStorageRow(toStorageRow(row))\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 requesterGroupIds: row.requester_group_ids,\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 authorityDelegationKind: row.authority_delegation_kind,\n authorityDelegationId: row.authority_delegation_id,\n authorityDelegationSessionId: row.authority_delegation_session_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport interface 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 requester_group_ids: string[]\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 authority_delegation_kind: ExecutionStorageRow[\"authorityDelegationKind\"]\n readonly authority_delegation_id: string | null\n readonly authority_delegation_session_id: string | null\n readonly created_at: Date | string\n}\n",
52
+ "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 sourceAssertionPayload,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonRunSourceMaterializationInput,\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n ActiveOntologySource,\n AdoptedSourceMaterialization,\n AdoptSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n ListActiveOntologySourcesInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n PurgeAbandonedSourceMaterializationsInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\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\"\nimport { cleanupSourceVersions, purgeAbandonedSourceVersions } from \"./source-cleanup\"\nimport { assertSourceRootCoverage, sourceAssertionColumns, stageSourceRoots } from \"./source-roots\"\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; adopt 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, base_materialization_id, base_commit_id\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 ${input.base?.materializationId ?? null}, ${input.base?.lastCommitId ?? null}\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; adopt 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, manifest, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n await stageSourceRoots(sql, manifest, input)\n await this.insertStageRows(sql, manifest, 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 // A newly loaded run is absent from the planner statistics. Without refreshing them,\n // PostgreSQL can scan the whole run for each identity instead of using its full key.\n // Sparse deltas avoid this table-level sampling cost.\n if (input.assertionCount >= 1_000 || input.rootCount >= 1_000) {\n await sql`ANALYZE ontology_source_rows, ontology_source_roots`\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 listActive(\n input: ListActiveOntologySourcesInput\n ): Promise<readonly ActiveOntologySource[]> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Source project id\")\n\n // Served by the partial index on active sources.\n const rows = await sql<ActiveSourceRow[]>`\n SELECT source_id, dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision\n FROM ontology_sources\n WHERE project_id = ${input.projectId} AND status = 'active'\n `\n\n return rows.map((row) => ({\n source: { projectionId: row.source_id },\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 }))\n })\n }\n\n async adopt(\n input: AdoptSourceMaterializationInput\n ): Promise<AdoptedSourceMaterialization | null> {\n return this.runRootOperation(async (sql) => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.adoptedAt, \"Source adoptedAt\", true)\n await this.assertExecution(sql, input)\n const candidate = await this.lockRunCandidate(sql, input)\n if (!candidate) return null\n // Workers' clocks differ; adoption never moves the record back in time.\n const [adopted] = await sql<PgOntologySourceRow[]>`\n UPDATE ontology_sources\n SET execution_token = ${input.execution.executionToken},\n updated_at = GREATEST(updated_at, ${input.adoptedAt}::timestamptz)\n WHERE project_id = ${candidate.project_id} AND source_id = ${candidate.source_id}\n AND materialization_id = ${candidate.materialization_id}\n AND status IN ('staging', 'ready')\n RETURNING *\n `\n if (!adopted) {\n throw sourceConflict(`Source materialization '${candidate.materialization_id}' changed.`)\n }\n return {\n record: sourceRecord(adopted),\n resumeStagingOrdinal:\n adopted.status === \"ready\"\n ? Number(adopted.root_count)\n : await this.lastStagedOrdinal(sql, adopted),\n }\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: AbandonRunSourceMaterializationInput): 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 if (input.kind === \"candidate\") return this.abandonCandidate(sql, input)\n const candidate = await this.lockRunCandidate(sql, input)\n return candidate ? this.transitionToAbandoned(sql, candidate, input.abandonedAt) : null\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 return cleanupSourceVersions(sql, input)\n })\n }\n\n async purgeAbandoned(\n input: PurgeAbandonedSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(async (sql) => {\n assertNonblank(input.projectId, \"Abandoned source purge project id\")\n assertPositiveInteger(input.limit, \"Abandoned source purge limit\")\n return purgeAbandonedSourceVersions(sql, input)\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 /** The run's one staging or ready candidate, locked, whichever execution staged it. */\n private async lockRunCandidate(\n sql: SQLClient,\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string }\n }\n ): Promise<PgOntologySourceRow | 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 (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ?? null\n }\n\n private async lastStagedOrdinal(sql: SQLClient, manifest: PgOntologySourceRow): Promise<number> {\n const [last] = await sql<{ readonly ordinal: number | string | null }[]>`\n SELECT MAX(staging_ordinal) AS ordinal FROM ontology_source_roots\n WHERE version_id = ${manifest.version_id}\n `\n return last?.ordinal == null ? 0 : Number(last.ordinal)\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 // Its roots were never live and stay unpublished; purging removes them with the version.\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 version = manifest.version_id\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 (SELECT COUNT(*) FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${version}) AS assertions,\n COUNT(*) AS roots, COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE version_id = ${version}\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 await assertSourceRootCoverage(sql, manifest)\n\n // Roots store only their canonical key; compare its parts with each row's typed identity.\n const [invalid] =\n manifest.projection_kind === \"link\"\n ? await sql<{ readonly root_key: string }[]>`\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n CROSS JOIN LATERAL (SELECT roots.root_key::jsonb AS parts) AS root\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${version}\n GROUP BY roots.id, roots.root_key\n HAVING COUNT(*) <> 1\n OR BOOL_OR(root.parts->>0 <> 'link')\n OR BOOL_OR(rows.entity_kind <> 'link')\n OR BOOL_OR(rows.source_type_id <> root.parts->>1\n OR rows.source_primary_id <> root.parts->>2 OR rows.link_id <> root.parts->>3\n OR rows.target_type_id <> root.parts->>4 OR rows.target_primary_id <> root.parts->>5)\n LIMIT 1\n `\n : await sql<{ readonly root_key: string }[]>`\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n CROSS JOIN LATERAL (SELECT roots.root_key::jsonb AS parts) AS root\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${version}\n GROUP BY roots.id, roots.root_key\n HAVING BOOL_OR(root.parts->>0 <> 'object')\n OR COUNT(*) FILTER (\n WHERE rows.entity_kind = 'object' AND rows.object_type_id = root.parts->>1\n AND rows.primary_id = root.parts->>2\n ) <> 1\n OR COUNT(*) FILTER (\n WHERE (rows.entity_kind = 'object' AND (rows.object_type_id <> root.parts->>1\n OR rows.primary_id <> root.parts->>2))\n OR (rows.entity_kind = 'link' AND (rows.source_type_id <> root.parts->>1\n OR rows.source_primary_id <> root.parts->>2))\n ) <> 0\n OR COUNT(*) FILTER (WHERE rows.entity_kind = 'link') <> COUNT(DISTINCT (\n rows.link_id, rows.target_type_id, rows.target_primary_id\n )) FILTER (WHERE rows.entity_kind = 'link')\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 /** Already staged assertions sharing a root or an ordinal with `rows`. */\n private async findStageRows(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): Promise<readonly SourceStageRow[]> {\n if (rows.length === 0) return []\n const rootKeys = [...new Set(rows.map((row) => row.rootKey))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n const existing = await sql<PgOntologySourceAssertionRow[]>`\n SELECT ${sourceAssertionColumns(sql)}\n FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${manifest.version_id}\n AND (\n roots.root_key = ANY(${sql.array(rootKeys)}::text[])\n OR roots.staging_ordinal = ANY(${sql.array(ordinals)}::bigint[])\n )\n `\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private async insertStageRows(\n sql: SQLClient,\n manifest: PgOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): Promise<void> {\n if (rows.length === 0) return\n const payload = rows.map(({ rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n return {\n root_key: rootKey,\n entity_kind: row.assertion.kind,\n object_type_id: entity.objectTypeId,\n primary_id: entity.primaryId,\n source_type_id: entity.sourceTypeId,\n source_primary_id: entity.sourcePrimaryId,\n link_id: entity.linkId,\n target_type_id: entity.targetTypeId,\n target_primary_id: entity.targetPrimaryId,\n payload: sourceAssertionPayload(row.assertion),\n }\n })\n const inserted = await sql`\n INSERT INTO ontology_source_rows (\n root_id, entity_kind, object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id, payload\n )\n SELECT roots.id, staged.entity_kind, staged.object_type_id, staged.primary_id,\n staged.source_type_id, staged.source_primary_id, staged.link_id,\n staged.target_type_id, staged.target_primary_id, staged.payload\n FROM jsonb_to_recordset(${jsonParameter(sql, payload)}) AS staged(\n root_key TEXT, entity_kind TEXT, object_type_id TEXT, primary_id TEXT,\n source_type_id TEXT, source_primary_id TEXT, link_id TEXT,\n target_type_id TEXT, target_primary_id TEXT, payload JSONB\n )\n JOIN ontology_source_roots AS roots\n ON roots.version_id = ${manifest.version_id} AND roots.root_key = staged.root_key\n `\n if (inserted.count !== rows.length) {\n throw sourceConflict(\"Staged source rows do not all belong to a staged root.\")\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 numberOrNull(value: number | string | null): number | null {\n return value === null ? null : Number(value)\n}\n\ntype ActiveSourceRow = Pick<\n PgOntologySourceRow,\n | \"source_id\"\n | \"dataset_id\"\n | \"dataset_version_id\"\n | \"dataset_version_created_at\"\n | \"projection_revision\"\n>\n",
53
53
  "import type {\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n PurgeAbandonedSourceMaterializationsInput,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\n\n/** A version outlives its replacement plan, which references it. */\nconst PLAN_PURGED = `NOT EXISTS (\n SELECT 1 FROM ontology_replacement_plans AS plans WHERE plans.version_id = versions.version_id\n)`\n\n/**\n * Superseded versions can still hold live roots (a delta keeps unchanged roots where they were),\n * so they are cleaned root by root once retired. An abandoned candidate was never published:\n * everything it holds goes, one whole version at a time, each delete on its own version prefix.\n */\nexport async function purgeAbandonedSourceVersions(\n sql: SQLClient,\n input: PurgeAbandonedSourceMaterializationsInput\n): Promise<CleanupTerminalSourceMaterializationsResult> {\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n while (remaining > 0) {\n const [candidate] = await sql<{ readonly version_id: string }[]>`\n SELECT version_id FROM ontology_sources AS versions\n WHERE project_id = ${input.projectId} AND status = 'abandoned' AND ${sql.unsafe(PLAN_PURGED)}\n ORDER BY terminal_at, source_id, materialization_id\n LIMIT 1 FOR UPDATE SKIP LOCKED\n `\n if (!candidate) break\n const rows = await sql`\n DELETE FROM ontology_source_rows WHERE ctid IN (\n SELECT rows.ctid FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ${candidate.version_id} LIMIT ${remaining}\n )\n `\n rowsDeleted += rows.count\n remaining -= rows.count\n if (remaining === 0) break\n const roots = await sql`\n DELETE FROM ontology_source_roots WHERE ctid IN (\n SELECT ctid FROM ontology_source_roots\n WHERE version_id = ${candidate.version_id} LIMIT ${remaining}\n )\n `\n rowsDeleted += roots.count\n remaining -= roots.count\n if (remaining === 0) break\n const manifest = await sql`\n DELETE FROM ontology_sources\n WHERE version_id = ${candidate.version_id} AND status = 'abandoned'\n `\n if (manifest.count === 0) break\n materializationsDeleted += manifest.count\n remaining -= manifest.count\n }\n return { rowsDeleted, materializationsDeleted }\n}\n\nexport async function cleanupSourceVersions(\n sql: SQLClient,\n input: CleanupTerminalSourceMaterializationsInput\n): Promise<CleanupTerminalSourceMaterializationsResult> {\n let remaining = input.limit\n const retired = sql`roots.project_id = ${input.projectId}\n AND roots.retired_at < ${input.terminalBefore} AND versions.status = 'superseded'`\n const removedRows = await sql`\n WITH selected AS (\n SELECT rows.ctid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE ${retired}\n ORDER BY roots.retired_at, roots.id\n LIMIT ${remaining} FOR UPDATE OF rows SKIP LOCKED\n ) DELETE FROM ontology_source_rows AS rows USING selected WHERE rows.ctid = selected.ctid RETURNING 1\n `\n let rowsDeleted = removedRows.length\n remaining -= rowsDeleted\n if (remaining > 0) {\n // Each version's root_count follows its roots down, so a drained version is found by index.\n const [removed] = await sql<{ readonly count: number }[]>`\n WITH selected AS (\n SELECT roots.ctid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n WHERE ${retired}\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id)\n ORDER BY roots.retired_at, roots.id\n LIMIT ${remaining} FOR UPDATE OF roots SKIP LOCKED\n ), removed AS (\n DELETE FROM ontology_source_roots AS roots USING selected WHERE roots.ctid = selected.ctid\n RETURNING roots.version_id\n ), drained AS (\n UPDATE ontology_sources AS versions SET root_count = versions.root_count - counts.count\n FROM (SELECT version_id, count(*)::int AS count FROM removed GROUP BY version_id) AS counts\n WHERE versions.version_id = counts.version_id\n RETURNING counts.count\n ) SELECT COALESCE(sum(count), 0)::int AS count FROM drained\n `\n rowsDeleted += removed?.count ?? 0\n remaining -= removed?.count ?? 0\n }\n const removedManifests =\n remaining === 0\n ? []\n : await sql`\n WITH selected AS (\n SELECT versions.ctid FROM ontology_sources AS versions\n WHERE project_id = ${input.projectId} AND status = 'superseded' AND root_count = 0\n AND terminal_at < ${input.terminalBefore} AND ${sql.unsafe(PLAN_PURGED)}\n ORDER BY terminal_at, source_id, materialization_id LIMIT ${remaining} FOR UPDATE SKIP LOCKED\n ) DELETE FROM ontology_sources AS versions USING selected WHERE versions.ctid = selected.ctid RETURNING 1\n `\n return { rowsDeleted, materializationsDeleted: removedManifests.length }\n}\n",
54
54
  "import { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n type MaterializationSession,\n type OntologyVectorIndexingStorage,\n VECTOR_INDEXING_FAILURE_CODES,\n type VectorIndexingRequest,\n type VectorIndexingWork,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { jsonParameter as json, type PgRootOperation } from \"./shared\"\n\ninterface WorkRow {\n batch_id: string | null\n request: VectorIndexingRequest\n status: VectorIndexingWork[\"status\"]\n available_at: Date | string\n values_json: number[] | null\n error: string | null\n}\n\nexport class PgVectorIndexingStorage implements OntologyVectorIndexingStorage {\n constructor(\n private readonly sql: SQLClient,\n private readonly run: PgRootOperation,\n private readonly assertSession: (session: MaterializationSession, projectId: string) => void\n ) {}\n\n async schedule(input: Parameters<OntologyVectorIndexingStorage[\"schedule\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n if (input.deleted.length)\n await this.sql`\n DELETE FROM object_vector_indexing AS work\n USING jsonb_array_elements(${json(this.sql, input.deleted)}::jsonb) AS deleted(ref)\n WHERE work.project_id = ${input.projectId}\n AND work.object_type_id = deleted.ref->>'objectTypeId'\n AND work.primary_id = deleted.ref->>'primaryId'\n `\n if (input.requests.length)\n await this.sql`\n INSERT INTO object_vector_indexing (\n project_id, id, object_type_id, primary_id, profile, batch_id, request, status, available_at, dispatch_at\n )\n SELECT ${input.projectId}, entry->>'id', entry#>>'{ref,objectTypeId}',\n entry#>>'{ref,primaryId}', entry->>'profile', entry->>'batchId', entry - 'batchId', 'pending',\n ${input.availableAt}::timestamptz, ${input.availableAt}::timestamptz\n FROM jsonb_array_elements(${json(this.sql, input.requests)}::jsonb) AS pending(entry)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO UPDATE SET\n id = EXCLUDED.id, batch_id = EXCLUDED.batch_id, request = EXCLUDED.request, status = 'pending',\n available_at = EXCLUDED.available_at, dispatch_at = EXCLUDED.dispatch_at,\n values_json = NULL, error = NULL\n `\n }\n async complete(input: Parameters<OntologyVectorIndexingStorage[\"complete\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n if (!input.entries.length) return\n await this.sql`\n DELETE FROM object_vector_indexing AS work\n USING jsonb_array_elements(${json(this.sql, input.entries)}::jsonb) AS completed(entry)\n WHERE work.project_id = ${input.projectId}\n AND work.object_type_id = entry#>>'{ref,objectTypeId}'\n AND work.primary_id = entry#>>'{ref,primaryId}'\n AND work.profile = entry->>'profile'\n AND work.request->>'configuration' = entry->>'configuration'\n AND work.request->>'sourceFingerprint' = entry->>'sourceFingerprint'\n `\n }\n\n async dispatched(input: Parameters<OntologyVectorIndexingStorage[\"dispatched\"]>[0]) {\n if (!input.ids.length) return\n await this.run(async (sql) => {\n await sql`UPDATE object_vector_indexing SET dispatch_at = ${input.nextDispatchAt} WHERE project_id = ${input.projectId} AND id = ANY(${sql.array([...input.ids])}::text[])`\n })\n }\n async get(input: Parameters<OntologyVectorIndexingStorage[\"get\"]>[0]) {\n return this.run(async (sql) => {\n const rows = await sql<\n WorkRow[]\n >`SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing WHERE project_id = ${input.projectId} AND id = ${input.id}`\n return rows[0] ? decode(rows[0]) : null\n })\n }\n async getBatch(input: Parameters<OntologyVectorIndexingStorage[\"getBatch\"]>[0]) {\n return this.run(async (sql) =>\n (\n await sql<WorkRow[]>`\n SELECT batch_id, request, status, available_at, values_json, error\n FROM object_vector_indexing WHERE project_id = ${input.projectId}\n AND batch_id = ${input.batchId} ORDER BY id`\n ).map(decode)\n )\n }\n\n async getBatchMember(input: Parameters<OntologyVectorIndexingStorage[\"getBatchMember\"]>[0]) {\n return this.run(async (sql) => {\n const rows = await sql<WorkRow[]>`\n SELECT batch_id, request, status, available_at, values_json, error\n FROM object_vector_indexing WHERE project_id = ${input.projectId}\n AND object_type_id = ${input.ref.objectTypeId} AND primary_id = ${input.ref.primaryId}\n AND profile = ${input.profile} AND batch_id = ${input.batchId}`\n return rows[0] ? decode(rows[0]) : null\n })\n }\n\n async updateBatch(input: Parameters<OntologyVectorIndexingStorage[\"updateBatch\"]>[0]) {\n if (!input.updates.length) return true\n return this.run(async (sql) => {\n const rows = await sql<{ id: string }[]>`\n WITH changes AS MATERIALIZED (\n SELECT item FROM jsonb_array_elements(${json(sql, input.updates)}::jsonb) AS entries(item)\n ), locked AS MATERIALIZED (\n SELECT work.id FROM object_vector_indexing AS work\n JOIN changes ON work.id = item->>'id' AND work.status = item->>'expectedStatus'\n WHERE work.project_id = ${input.projectId} ORDER BY work.id FOR UPDATE OF work\n )\n UPDATE object_vector_indexing AS work SET\n status = changes.item->>'status', available_at = (changes.item->>'availableAt')::timestamptz,\n values_json = COALESCE(changes.item->'values', work.values_json),\n error = (changes.item->'error')::text\n FROM changes, locked\n WHERE work.project_id = ${input.projectId} AND work.id = locked.id\n AND work.id = changes.item->>'id'\n AND (${!input.requireAll} OR (SELECT count(*) FROM locked) = ${input.updates.length})\n RETURNING work.id`\n return !input.requireAll || rows.length === input.updates.length\n })\n }\n\n async listDue(input: Parameters<OntologyVectorIndexingStorage[\"listDue\"]>[0]) {\n return this.run(async (sql) =>\n (\n await sql<\n WorkRow[]\n >`SELECT batch_id, request, status, available_at, NULL AS values_json, error FROM object_vector_indexing WHERE project_id = ${input.projectId} AND status <> 'failed' AND dispatch_at <= ${input.now} ORDER BY dispatch_at, id LIMIT ${input.limit}`\n ).map(decode)\n )\n }\n async update(input: Parameters<OntologyVectorIndexingStorage[\"update\"]>[0]) {\n return this.run(\n async (sql) =>\n (\n await sql`\n UPDATE object_vector_indexing SET status = ${input.status}, available_at = ${input.availableAt},\n values_json = COALESCE(${input.values ? json(sql, input.values) : null}, values_json), error = ${input.error ? JSON.stringify(input.error) : null}\n WHERE project_id = ${input.projectId} AND id = ${input.id} AND status = ${input.expectedStatus} RETURNING id\n `\n ).length === 1\n )\n }\n async remove(input: Parameters<OntologyVectorIndexingStorage[\"remove\"]>[0]) {\n await this.run(async (sql) => {\n await sql`DELETE FROM object_vector_indexing WHERE project_id = ${input.projectId} AND id = ${input.id}`\n })\n }\n}\nfunction decode(row: WorkRow): VectorIndexingWork {\n return {\n ...row.request,\n ...(row.batch_id ? { batchId: row.batch_id } : {}),\n status: row.status,\n availableAt: new Date(row.available_at).toISOString(),\n ...(row.values_json ? { values: row.values_json } : {}),\n ...(row.error\n ? {\n error: parseSixbFailure(row.error, VECTOR_INDEXING_FAILURE_CODES),\n }\n : {}),\n }\n}\n",
55
55
  "import { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n MaterializationSession,\n ObjectVectorState,\n OntologyVectorStorage,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"../pg-client\"\nimport { jsonParameter as json, type PgRootOperation } from \"./shared\"\n\ninterface VectorMetadataRow {\n readonly profile: string\n readonly configuration: string\n readonly source: string[]\n readonly source_fingerprint: string\n readonly last_commit_id: string\n}\n\nexport class PgOntologyVectorStorage implements OntologyVectorStorage {\n constructor(\n private readonly sql: SQLClient,\n private readonly runRootOperation: PgRootOperation,\n private readonly assertSession: (\n session: MaterializationSession,\n projectId: string,\n commitId?: string\n ) => void\n ) {}\n\n async list(\n input: Parameters<OntologyVectorStorage[\"list\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n return this.runRootOperation(async (sql) => {\n const rows = await sql<VectorMetadataRow[]>`\n SELECT profile, configuration, source, source_fingerprint, last_commit_id\n FROM object_vectors\n WHERE project_id = ${input.projectId}\n AND object_type_id = ${input.ref.objectTypeId} AND primary_id = ${input.ref.primaryId}\n ORDER BY profile\n `\n return rows.map((row) => ({\n ref: { ...input.ref },\n profile: row.profile,\n configuration: row.configuration,\n source: row.source,\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async listBatch(\n input: Parameters<OntologyVectorStorage[\"listBatch\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n if (!input.refs.length) return []\n return this.runRootOperation(async (sql) => {\n const rows = await sql<\n (VectorMetadataRow & { object_type_id: string; primary_id: string })[]\n >`\n SELECT stored.object_type_id, stored.primary_id, stored.profile, stored.configuration,\n stored.source, stored.source_fingerprint, stored.last_commit_id\n FROM (SELECT DISTINCT ref->>'objectTypeId' AS object_type_id, ref->>'primaryId' AS primary_id\n FROM jsonb_array_elements(${json(sql, input.refs)}::jsonb) AS requested(ref)) AS requested\n JOIN object_vectors AS stored ON stored.project_id = ${input.projectId}\n AND stored.object_type_id = requested.object_type_id AND stored.primary_id = requested.primary_id\n ORDER BY stored.object_type_id, stored.primary_id, stored.profile\n `\n return rows.map((row) => ({\n ref: { objectTypeId: row.object_type_id, primaryId: row.primary_id },\n profile: row.profile,\n configuration: row.configuration,\n source: row.source,\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async removeBatch(input: Parameters<OntologyVectorStorage[\"removeBatch\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n if (!input.entries.length) return\n const removed = await this.sql`\n DELETE FROM object_vectors AS stored\n USING jsonb_array_elements(${json(this.sql, input.entries)}::jsonb) AS requested(entry)\n WHERE stored.project_id = ${input.projectId}\n AND stored.object_type_id = entry#>>'{ref,objectTypeId}'\n AND stored.primary_id = entry#>>'{ref,primaryId}' AND stored.profile = entry->>'profile'\n AND stored.last_commit_id = entry->>'expectedCommitId'\n RETURNING stored.profile\n `\n if (removed.length !== input.entries.length) throw vectorConflict()\n }\n\n async write(input: Parameters<OntologyVectorStorage[\"write\"]>[0]): Promise<void> {\n await this.writeBatch({ session: input.session, projectId: input.projectId, entries: [input] })\n }\n\n async writeBatch(input: Parameters<OntologyVectorStorage[\"writeBatch\"]>[0]): Promise<void> {\n const entries = input.entries.map(({ value, expectedCommitId }) => {\n this.assertSession(input.session, input.projectId, value.lastCommitId)\n return {\n object_type_id: value.ref.objectTypeId,\n primary_id: value.ref.primaryId,\n profile: value.profile,\n configuration: value.configuration,\n source: [...value.source],\n source_fingerprint: value.sourceFingerprint,\n embedding: [...value.values],\n last_commit_id: value.lastCommitId,\n expected_commit_id: expectedCommitId,\n }\n })\n const inserts = entries.filter((entry) => entry.expected_commit_id === null)\n const updates = entries.filter((entry) => entry.expected_commit_id !== null)\n\n // Keep insert-if-absent and revision-checked update distinct: an upsert could recreate\n // a deleted vector or overwrite a representation produced after preparation.\n if (inserts.length) {\n const rows = await this.sql`\n INSERT INTO object_vectors (\n project_id, object_type_id, primary_id, profile, configuration,\n source, source_fingerprint, embedding, last_commit_id\n )\n SELECT ${input.projectId}, object_type_id, primary_id, profile, configuration,\n source, source_fingerprint, embedding, last_commit_id\n FROM jsonb_to_recordset(${json(this.sql, inserts)}::jsonb) AS incoming(\n object_type_id text, primary_id text, profile text, configuration text,\n source text[], source_fingerprint text, embedding real[], last_commit_id text\n )\n ORDER BY object_type_id, primary_id, profile\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO NOTHING\n RETURNING profile`\n if (rows.length !== inserts.length) throw vectorConflict()\n }\n\n if (updates.length) {\n const rows = await this.sql`\n UPDATE object_vectors AS stored SET\n configuration = incoming.configuration, source = incoming.source,\n source_fingerprint = incoming.source_fingerprint, embedding = incoming.embedding,\n last_commit_id = incoming.last_commit_id\n FROM jsonb_to_recordset(${json(this.sql, updates)}::jsonb) AS incoming(\n object_type_id text, primary_id text, profile text, configuration text,\n source text[], source_fingerprint text, embedding real[], last_commit_id text,\n expected_commit_id text\n )\n WHERE stored.project_id = ${input.projectId}\n AND stored.object_type_id = incoming.object_type_id AND stored.primary_id = incoming.primary_id\n AND stored.profile = incoming.profile AND stored.last_commit_id = incoming.expected_commit_id\n RETURNING stored.profile`\n if (rows.length !== updates.length) throw vectorConflict()\n }\n }\n\n async remove(input: Parameters<OntologyVectorStorage[\"remove\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n const rows = await this.sql`\n DELETE FROM object_vectors\n WHERE project_id = ${input.projectId}\n AND object_type_id = ${input.ref.objectTypeId} AND primary_id = ${input.ref.primaryId}\n AND profile = ${input.profile} AND last_commit_id = ${input.expectedCommitId}\n RETURNING profile\n `\n if (rows.length !== 1) throw vectorConflict()\n }\n}\n\nfunction vectorConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n \"Vector changed since it was prepared.\"\n )\n}\n",
56
56
  "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 { PgOntologyReplacementPlanStorage } from \"./replacement-plans\"\nimport type { PgRootOperation } from \"./shared\"\nimport { PgOntologySourceStorage } from \"./sources\"\nimport { PgVectorIndexingStorage } from \"./vector-indexing\"\nimport { PgOntologyVectorStorage } from \"./vectors\"\n\nexport class PgOntologyStorage implements OntologyStorage {\n readonly commits: PgOntologyCommitStorage\n readonly sources: PgOntologySourceStorage\n readonly materializations: PgOntologyMaterializationStorage\n readonly replacementPlans: PgOntologyReplacementPlanStorage\n readonly outbox: PgOntologyOutboxStorage\n readonly vectorIndexing: PgVectorIndexingStorage\n readonly vectors: PgOntologyVectorStorage\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.replacementPlans = new PgOntologyReplacementPlanStorage(input.sql)\n this.outbox = new PgOntologyOutboxStorage(input.runRootOperation)\n this.vectorIndexing = new PgVectorIndexingStorage(\n input.sql,\n input.runRootOperation,\n (session, projectId) => this.materializations.assertVectorSession(session, projectId)\n )\n this.vectors = new PgOntologyVectorStorage(\n input.sql,\n input.runRootOperation,\n (session, projectId, commitId) =>\n this.materializations.assertVectorSession(session, projectId, commitId)\n )\n }\n\n deactivateSessions(): void {\n this.materializations.deactivateSessions()\n }\n}\n\nexport type { PgOntologyTransactionContext } from \"./materialization-session\"\n",
57
- "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 { normalizeRecordActionRunInput, resolveActionRunEffects } from \"@sixb/core/internal/storage\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStatus,\n ActionRunStorage,\n ActionRunWritebackRecord,\n ExecutionStorage,\n ListActionRunsInput,\n ListActionRunsResult,\n RecordActionEffectsInput,\n RecordActionRunInput,\n} from \"@sixb/core/storage\"\nimport { ActionRunError } from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"./pg-client\"\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 record(input: RecordActionRunInput): Promise<ActionRunRecord> {\n const record = normalizeRecordActionRunInput(input)\n await assertActionRunExecution({\n executions: this.executions,\n projectId: record.projectId,\n executionId: record.executionId,\n runId: record.id,\n actionId: record.actionId,\n })\n\n // A conflict with a committed record is answered as a refusal rather than raised: a raised\n // unique violation would abort the caller's transaction before the error could say what\n // conflicted. A conflict with a concurrent transaction's insert waits for that transaction;\n // under the serializable isolation of an Action commit, it then fails with a serialization\n // error, which the Materializer retries into a replay of the commit that won.\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 started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n error\n ) VALUES (\n ${record.projectId},\n ${record.id},\n ${record.executionId},\n ${record.actionId},\n ${record.subject.kind},\n ${record.subject.kind === \"object\" ? record.subject.objectTypeId : null},\n ${record.subject.kind === \"object\" ? record.subject.primaryId : null},\n ${record.status},\n ${record.phase},\n ${record.startedAt},\n ${record.finishedAt},\n ${JSON.stringify(record.params)}::text::jsonb,\n ${record.idempotencyKey},\n ${record.writeback?.status ?? null},\n ${record.writeback?.completedAt ?? null},\n ${record.writeback?.status === \"succeeded\" ? JSON.stringify(record.writeback.result) : null}::text::jsonb,\n ${record.writeback?.status === \"failed\" ? serializeActionRunFailure(record.writeback.error, \"writeback\") : null}::text::jsonb,\n ${record.status === \"failed\" ? serializeActionRunFailure(record.error) : null}::text::jsonb\n )\n ON CONFLICT DO NOTHING\n RETURNING *\n `\n if (row) return rowToActionRunRecord(row)\n\n const [conflict] = await this.sql<{ id: string }[]>`\n SELECT id FROM action_runs\n WHERE project_id = ${record.projectId} AND id = ${record.id}\n `\n throw new ActionRunError(\n conflict\n ? `[SixbPg] Action run '${record.id}' is already recorded for project '${record.projectId}'.`\n : `[SixbPg] Execution '${record.executionId}' already belongs to another Action run.`\n )\n }\n\n async recordEffects(input: RecordActionEffectsInput): 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 const { run, effects } = resolveActionRunEffects(\n existing ? rowToActionRunRecord(existing) : null,\n input\n )\n if (!effects) return run\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET\n phase = ${\"effects\"},\n effects_status = ${effects.status},\n effects_completed_at = ${effects.completedAt},\n effects_error = ${effects.status === \"failed\" ? serializeActionRunFailure(effects.error, \"effects\") : null}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\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(`started_at >= $${index++}`)\n params.push(input.startedAfter)\n }\n\n if (input.startedBefore) {\n whereClauses.push(`started_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 started_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\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = new Date(row.writeback_completed_at ?? row.finished_at)\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: row.writeback_result ?? null,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parseActionRunFailure(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 = new Date(row.effects_completed_at ?? row.finished_at)\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: parseActionRunFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n const writeback = toActionRunWritebackRecord(row)\n const effects = toActionRunEffectsRecord(row)\n const fields = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n phase: row.phase,\n startedAt: new Date(row.started_at),\n finishedAt: new Date(row.finished_at),\n params: row.params,\n idempotencyKey: row.idempotency_key,\n ...(writeback === undefined ? {} : { writeback }),\n ...(effects === undefined ? {} : { effects }),\n }\n\n if (row.status === \"succeeded\") return { ...fields, status: \"succeeded\" }\n return { ...fields, status: \"failed\", error: parseActionRunFailure(row.error) }\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: ActionRunStatus\n phase: ActionRunPhase\n started_at: Date | string\n finished_at: Date | string\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",
57
+ "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 { normalizeRecordActionRunInput, resolveActionRunEffects } from \"@sixb/core/internal/storage\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStatus,\n ActionRunStorage,\n ActionRunWritebackRecord,\n ExecutionStorage,\n ListActionRunsInput,\n ListActionRunsResult,\n RecordActionEffectsInput,\n RecordActionRunInput,\n} from \"@sixb/core/storage\"\nimport { ActionRunError } from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"./pg-client\"\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 record(input: RecordActionRunInput): Promise<ActionRunRecord> {\n const record = normalizeRecordActionRunInput(input)\n await assertActionRunExecution({\n executions: this.executions,\n projectId: record.projectId,\n executionId: record.executionId,\n runId: record.id,\n actionId: record.actionId,\n })\n\n // A conflict with a committed record is answered as a refusal rather than raised: a raised\n // unique violation would abort the caller's transaction before the error could say what\n // conflicted. A conflict with a concurrent transaction's insert waits for that transaction;\n // under the serializable isolation of an Action commit, it then fails with a serialization\n // error, which the Materializer retries into a replay of the commit that won.\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 started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n error\n ) VALUES (\n ${record.projectId},\n ${record.id},\n ${record.executionId},\n ${record.actionId},\n ${record.subject.kind},\n ${record.subject.kind === \"object\" ? record.subject.objectTypeId : null},\n ${record.subject.kind === \"object\" ? record.subject.primaryId : null},\n ${record.status},\n ${record.phase},\n ${record.startedAt},\n ${record.finishedAt},\n ${JSON.stringify(record.params)}::text::jsonb,\n ${record.idempotencyKey},\n ${record.writeback?.status ?? null},\n ${record.writeback?.completedAt ?? null},\n ${record.writeback?.status === \"succeeded\" ? JSON.stringify(record.writeback.result) : null}::text::jsonb,\n ${record.writeback?.status === \"failed\" ? serializeActionRunFailure(record.writeback.error, \"writeback\") : null}::text::jsonb,\n ${record.status === \"failed\" ? serializeActionRunFailure(record.error) : null}::text::jsonb\n )\n ON CONFLICT DO NOTHING\n RETURNING *\n `\n if (row) return rowToActionRunRecord(row)\n\n const [conflict] = await this.sql<{ id: string }[]>`\n SELECT id FROM action_runs\n WHERE project_id = ${record.projectId} AND id = ${record.id}\n `\n throw new ActionRunError(\n conflict\n ? `[SixbPg] Action run '${record.id}' is already recorded for project '${record.projectId}'.`\n : `[SixbPg] Execution '${record.executionId}' already belongs to another Action run.`\n )\n }\n\n async recordEffects(input: RecordActionEffectsInput): 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 const { run, effects } = resolveActionRunEffects(\n existing ? rowToActionRunRecord(existing) : null,\n input\n )\n if (!effects) return run\n\n const [updated] = await tx<DatabaseRow[]>`\n UPDATE action_runs\n SET\n phase = ${\"effects\"},\n effects_status = ${effects.status},\n effects_completed_at = ${effects.completedAt},\n effects_error = ${effects.status === \"failed\" ? serializeActionRunFailure(effects.error, \"effects\") : null}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\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 getByExecutionIds(params: {\n readonly projectId: string\n readonly executionIds: readonly string[]\n }): Promise<readonly ActionRunRecord[]> {\n const executionIds = [...new Set(params.executionIds)]\n if (executionIds.length === 0) {\n return []\n }\n\n const rows = await this.sql<DatabaseRow[]>`\n SELECT *\n FROM action_runs\n WHERE project_id = ${params.projectId}\n AND execution_id = ANY(${this.sql.array(executionIds)}::text[])\n `\n\n const byExecution = new Map(rows.map((row) => [row.execution_id, row]))\n return executionIds.flatMap((executionId) => {\n const row = byExecution.get(executionId)\n return row ? [rowToActionRunRecord(row)] : []\n })\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(`started_at >= $${index++}`)\n params.push(input.startedAfter)\n }\n\n if (input.startedBefore) {\n whereClauses.push(`started_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 started_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\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = new Date(row.writeback_completed_at ?? row.finished_at)\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: row.writeback_result ?? null,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parseActionRunFailure(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 = new Date(row.effects_completed_at ?? row.finished_at)\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: parseActionRunFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n const writeback = toActionRunWritebackRecord(row)\n const effects = toActionRunEffectsRecord(row)\n const fields = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n phase: row.phase,\n startedAt: new Date(row.started_at),\n finishedAt: new Date(row.finished_at),\n params: row.params,\n idempotencyKey: row.idempotency_key,\n ...(writeback === undefined ? {} : { writeback }),\n ...(effects === undefined ? {} : { effects }),\n }\n\n if (row.status === \"succeeded\") return { ...fields, status: \"succeeded\" }\n return { ...fields, status: \"failed\", error: parseActionRunFailure(row.error) }\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: ActionRunStatus\n phase: ActionRunPhase\n started_at: Date | string\n finished_at: Date | string\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",
58
+ "import {\n ACTIVITY_MAX_VISIT_MS,\n type ActivitySourceState,\n activityActor,\n activityCalendarDays,\n parseActivityAttribution,\n planActivityAppend,\n type StoredActivityEvent,\n serializeActivityAttribution,\n validateActivityAppend,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ActivityCalendarInput,\n ActivityCursor,\n ActivityDay,\n ActivityInteraction,\n ActivityPageView,\n ActivityPeriodInput,\n ActivitySessionVisits,\n ActivityStorage,\n ActivitySummary,\n ActivityUsersPage,\n ActivityVisit,\n ActivityVisitsPage,\n AppendActivityInput,\n AppendActivityResult,\n ListActivitySessionVisitsInput,\n ListActivityUsersInput,\n ListActivityVisitsInput,\n ReadActivityVisitInput,\n StoredActivityVisitPage,\n} from \"@sixb/core/storage\"\nimport type { SQLClient } from \"./pg-client\"\nimport { lockAdvisoryKeys, type PgStoreClient, runPgTransaction } from \"./transactions\"\n\n// Sorts after every stored timestamp, so a first page starts from the newest row.\nconst NO_CURSOR = { at: new Date(\"9999-12-31T23:59:59.999Z\"), id: \"\" }\n\n/** PostgreSQL activity. An advisory lock per session serializes its batches across replicas. */\nexport class PgActivityStorage implements ActivityStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async append(input: AppendActivityInput): Promise<AppendActivityResult> {\n validateActivityAppend(input)\n\n return runPgTransaction(this.sql, async (sql) => {\n await lockAdvisoryKeys(sql, [\n JSON.stringify([\"activity\", input.projectId, input.actor.type, input.sessionId]),\n ])\n\n const plan = planActivityAppend(\n input,\n await readSource(sql, input),\n await readStoredEvents(sql, input)\n )\n if (plan.status !== \"append\") {\n return { status: plan.status === \"duplicate\" ? \"accepted\" : \"throttled\", accepted: 0 }\n }\n\n const { state } = plan\n const lastSeenAt = new Date(state.lastSeenAt)\n\n if (plan.newVisit) {\n const attribution =\n plan.newVisit.attribution === null\n ? null\n : serializeActivityAttribution(plan.newVisit.attribution)\n\n await sql`\n INSERT INTO activity_visits (\n project_id, id, actor_type, user_id, grant_id, session_id,\n started_at, last_seen_at, page_views, interactions, attribution\n ) VALUES (\n ${input.projectId}, ${state.visitId}, ${input.actor.type},\n ${input.actor.type === \"user\" ? input.actor.userId : null},\n ${input.actor.type === \"share\" ? input.actor.grantId : null},\n ${input.sessionId}, ${lastSeenAt}, ${lastSeenAt}, ${plan.pageViews.length},\n ${plan.interactions.length}, ${attribution}::text::jsonb\n )\n `\n } else {\n await sql`\n UPDATE activity_visits\n SET\n last_seen_at = ${lastSeenAt},\n page_views = page_views + ${plan.pageViews.length},\n interactions = interactions + ${plan.interactions.length}\n WHERE project_id = ${input.projectId} AND id = ${state.visitId}\n `\n }\n\n for (const pageView of plan.pageViews) {\n await sql`\n INSERT INTO activity_page_views (\n project_id, visit_id, sequence, id, route, received_at, attribution\n ) VALUES (\n ${input.projectId}, ${pageView.visitId}, ${pageView.sequence}, ${pageView.id},\n ${pageView.route}, ${pageView.receivedAt},\n ${serializeActivityAttribution(pageView.attribution)}::text::jsonb\n )\n `\n }\n\n for (const interaction of plan.interactions) {\n await sql`\n INSERT INTO activity_interactions (\n project_id, visit_id, sequence, id, name, route, received_at\n ) VALUES (\n ${input.projectId}, ${interaction.visitId}, ${interaction.sequence},\n ${interaction.id}, ${interaction.name}, ${interaction.route}, ${interaction.receivedAt}\n )\n `\n }\n\n await sql`\n INSERT INTO activity_sources (\n project_id, actor_type, session_id, visit_id, last_seen_at, sequence,\n window_start, window_count\n ) VALUES (\n ${input.projectId}, ${input.actor.type}, ${input.sessionId}, ${state.visitId},\n ${lastSeenAt}, ${state.sequence}, ${new Date(state.windowStart)}, ${state.windowCount}\n )\n ON CONFLICT (project_id, actor_type, session_id) DO UPDATE SET\n visit_id = excluded.visit_id,\n last_seen_at = excluded.last_seen_at,\n sequence = excluded.sequence,\n window_start = excluded.window_start,\n window_count = excluded.window_count\n `\n\n return { status: \"accepted\", accepted: plan.accepted }\n })\n }\n\n async list(input: ListActivityVisitsInput): Promise<ActivityVisitsPage> {\n const before = input.before ?? NO_CURSOR\n const rows = await this.sql<VisitRow[]>`\n SELECT ${this.visitColumns()}\n FROM activity_visits v\n WHERE ${this.overlapping(input)}\n AND (\n v.last_seen_at < ${before.at}\n OR (v.last_seen_at = ${before.at} AND v.id < ${before.id})\n )\n ORDER BY v.last_seen_at DESC, v.id DESC\n LIMIT ${input.limit + 1}\n `\n\n return {\n visits: rows.slice(0, input.limit).map(visitFromRow),\n hasMore: rows.length > input.limit,\n }\n }\n\n async users(input: ListActivityUsersInput): Promise<ActivityUsersPage> {\n const before: ActivityCursor = input.before ?? NO_CURSOR\n const rows = await this.sql<UserRow[]>`\n SELECT\n v.user_id,\n MAX(v.last_seen_at) AS last_seen_at,\n COUNT(DISTINCT v.id) AS visits,\n COUNT(p.id) AS page_views\n FROM activity_visits v\n LEFT JOIN activity_page_views p\n ON p.project_id = v.project_id\n AND p.visit_id = v.id\n AND p.received_at >= ${input.from}\n AND p.received_at < ${input.to}\n WHERE ${this.overlapping(input)} AND v.actor_type = 'user'\n GROUP BY v.user_id\n HAVING MAX(v.last_seen_at) < ${before.at}\n OR (MAX(v.last_seen_at) = ${before.at} AND v.user_id < ${before.id})\n ORDER BY last_seen_at DESC, v.user_id DESC\n LIMIT ${input.limit + 1}\n `\n\n return {\n users: rows.slice(0, input.limit).map((row) => ({\n userId: row.user_id,\n lastSeenAt: new Date(row.last_seen_at),\n visits: Number(row.visits),\n pageViews: Number(row.page_views),\n })),\n hasMore: rows.length > input.limit,\n }\n }\n\n async summarize(input: ActivityPeriodInput): Promise<ActivitySummary> {\n const [row] = await this.sql<SummaryRow[]>`\n SELECT\n COUNT(DISTINCT v.user_id) AS users,\n COUNT(DISTINCT v.id) AS visits,\n COUNT(DISTINCT v.id) FILTER (WHERE v.actor_type = 'share') AS shared_visits,\n COUNT(p.id) AS page_views\n FROM activity_visits v\n LEFT JOIN activity_page_views p\n ON p.project_id = v.project_id\n AND p.visit_id = v.id\n AND p.received_at >= ${input.from}\n AND p.received_at < ${input.to}\n WHERE ${this.overlapping(input)}\n `\n\n return {\n users: Number(row?.users ?? 0),\n visits: Number(row?.visits ?? 0),\n sharedVisits: Number(row?.shared_visits ?? 0),\n pageViews: Number(row?.page_views ?? 0),\n }\n }\n\n async calendar(input: ActivityCalendarInput): Promise<readonly ActivityDay[]> {\n const visits = await this.sql<{ started_at: Date | string; last_seen_at: Date | string }[]>`\n SELECT v.started_at, v.last_seen_at\n FROM activity_visits v\n WHERE ${this.overlapping(input)}\n `\n const days = await this.sql<{ day: string; page_views: string }[]>`\n SELECT\n to_char(p.received_at AT TIME ZONE 'UTC', 'YYYY-MM-DD') AS day,\n COUNT(*) AS page_views\n FROM activity_visits v\n JOIN activity_page_views p ON p.project_id = v.project_id AND p.visit_id = v.id\n WHERE ${this.overlapping(input)}\n AND p.received_at >= ${input.from}\n AND p.received_at < ${input.to}\n GROUP BY day\n `\n\n return activityCalendarDays(\n input,\n visits.map((visit) => ({\n startedAt: new Date(visit.started_at),\n lastSeenAt: new Date(visit.last_seen_at),\n })),\n new Map(days.map((row) => [row.day, Number(row.page_views)]))\n )\n }\n\n async read(input: ReadActivityVisitInput): Promise<StoredActivityVisitPage | null> {\n const [visit] = await this.sql<(VisitRow & { readonly session_id: string })[]>`\n SELECT ${this.visitColumns()}, v.session_id\n FROM activity_visits v\n WHERE v.project_id = ${input.projectId} AND v.id = ${input.id}\n `\n if (!visit) {\n return null\n }\n\n // Page views and interactions share the visit's sequence, so one bound covers both.\n const rows = await this.sql<EventRow[]>`\n SELECT id, visit_id, sequence, route, NULL::text AS name, received_at\n FROM activity_page_views\n WHERE project_id = ${input.projectId}\n AND visit_id = ${input.id}\n UNION ALL\n SELECT id, visit_id, sequence, route, name, received_at\n FROM activity_interactions\n WHERE project_id = ${input.projectId}\n AND visit_id = ${input.id}\n ORDER BY sequence\n LIMIT ${input.limit + 1}\n `\n\n const pageViews: ActivityPageView[] = []\n const interactions: ActivityInteraction[] = []\n for (const row of rows.slice(0, input.limit)) {\n if (row.name === null) {\n pageViews.push(pageViewFromRow(row))\n } else {\n interactions.push({ ...pageViewFromRow(row), name: row.name })\n }\n }\n\n return {\n visit: visitFromRow(visit),\n sessionId: visit.session_id,\n pageViews,\n interactions,\n hasMore: rows.length > input.limit,\n }\n }\n\n async sessionVisits(\n input: ListActivitySessionVisitsInput\n ): Promise<readonly ActivitySessionVisits[]> {\n if (input.sessionIds.length === 0) {\n return []\n }\n\n // A session opens a visit per return after inactivity, so each has a few to rank.\n const rows = await this.sql<SessionVisitRow[]>`\n SELECT *\n FROM (\n SELECT\n ${this.visitColumns()},\n v.session_id,\n ROW_NUMBER() OVER (\n PARTITION BY v.session_id ORDER BY v.started_at DESC, v.id DESC\n ) AS position,\n COUNT(*) OVER (PARTITION BY v.session_id) AS total\n FROM activity_visits v\n WHERE v.project_id = ${input.projectId}\n AND v.actor_type = 'user'\n AND v.session_id = ANY(${this.sql.array([...input.sessionIds])}::text[])\n AND v.user_id = ${input.userId}\n ) ranked\n WHERE position <= ${input.limit}\n ORDER BY session_id, position\n `\n\n const bySession = new Map<string, { visits: number; latest: ActivityVisit[] }>()\n for (const row of rows) {\n const session = bySession.get(row.session_id) ?? { visits: Number(row.total), latest: [] }\n session.latest.push(visitFromRow(row))\n bySession.set(row.session_id, session)\n }\n\n return [...bySession].map(([sessionId, session]) => ({ sessionId, ...session }))\n }\n\n /**\n * The visits `v` active in the period, and only the account's when one is asked for. A visit\n * lasts less than a day, so it started at most a day before the period: that bounds the index\n * range.\n */\n private overlapping(input: ActivityPeriodInput | ActivityCalendarInput) {\n const user = input.userId === undefined ? this.sql`` : this.sql`AND v.user_id = ${input.userId}`\n const earliestStart = new Date(input.from.getTime() - ACTIVITY_MAX_VISIT_MS)\n\n return this.sql`\n v.project_id = ${input.projectId}\n AND v.started_at >= ${earliestStart}\n AND v.started_at < ${input.to}\n AND v.last_seen_at >= ${input.from}\n ${user}\n `\n }\n\n private visitColumns() {\n return this.sql`\n v.id, v.actor_type, v.user_id, v.grant_id, v.started_at, v.last_seen_at, v.page_views,\n v.interactions, v.attribution::text AS attribution\n `\n }\n}\n\nasync function readSource(\n sql: SQLClient,\n input: AppendActivityInput\n): Promise<ActivitySourceState | undefined> {\n const [row] = await sql<SourceRow[]>`\n SELECT\n s.visit_id, v.started_at AS visit_started_at, s.last_seen_at, s.sequence,\n s.window_start, s.window_count\n FROM activity_sources s\n LEFT JOIN activity_visits v ON v.project_id = s.project_id AND v.id = s.visit_id\n WHERE s.project_id = ${input.projectId}\n AND s.actor_type = ${input.actor.type}\n AND s.session_id = ${input.sessionId}\n `\n if (!row) {\n return undefined\n }\n\n // A deleted visit leaves its source behind; the next batch starts another visit.\n return {\n visitId: row.visit_id,\n visitStartedAt: row.visit_started_at === null ? null : new Date(row.visit_started_at).getTime(),\n lastSeenAt: new Date(row.last_seen_at).getTime(),\n sequence: Number(row.sequence),\n windowStart: new Date(row.window_start).getTime(),\n windowCount: Number(row.window_count),\n }\n}\n\n/** The session's page views and interactions with an id of the batch, to recognize retries. */\nasync function readStoredEvents(\n sql: SQLClient,\n input: AppendActivityInput\n): Promise<StoredActivityEvent[]> {\n const ids = input.events.map((event) => event.id)\n const rows = await sql<\n { id: string; route: string; name: string | null; attribution: string | null }[]\n >`\n SELECT p.id, p.route, NULL::text AS name, p.attribution::text AS attribution\n FROM activity_page_views p\n JOIN activity_visits v ON v.project_id = p.project_id AND v.id = p.visit_id\n WHERE p.project_id = ${input.projectId}\n AND p.id = ANY(${sql.array(ids)}::text[])\n AND v.actor_type = ${input.actor.type}\n AND v.session_id = ${input.sessionId}\n UNION ALL\n SELECT i.id, i.route, i.name, NULL::text AS attribution\n FROM activity_interactions i\n JOIN activity_visits v ON v.project_id = i.project_id AND v.id = i.visit_id\n WHERE i.project_id = ${input.projectId}\n AND i.id = ANY(${sql.array(ids)}::text[])\n AND v.actor_type = ${input.actor.type}\n AND v.session_id = ${input.sessionId}\n `\n\n return rows.map((row) => {\n if (row.name !== null) {\n return { id: row.id, route: row.route, name: row.name }\n }\n\n const attribution = parseActivityAttribution(row.attribution)\n return { id: row.id, route: row.route, ...(attribution ? { attribution } : {}) }\n })\n}\n\ninterface SourceRow {\n readonly visit_id: string\n readonly visit_started_at: Date | string | null\n readonly last_seen_at: Date | string\n readonly sequence: number\n readonly window_start: Date | string\n readonly window_count: number\n}\n\ninterface VisitRow {\n readonly id: string\n readonly actor_type: string\n readonly user_id: string | null\n readonly grant_id: string | null\n readonly started_at: Date | string\n readonly last_seen_at: Date | string\n readonly page_views: number\n readonly interactions: number\n readonly attribution: string | null\n}\n\ninterface SessionVisitRow extends VisitRow {\n readonly session_id: string\n readonly total: number | string\n}\n\ninterface UserRow {\n readonly user_id: string\n readonly last_seen_at: Date | string\n readonly visits: string\n readonly page_views: string\n}\n\ninterface SummaryRow {\n readonly users: string\n readonly visits: string\n readonly shared_visits: string\n readonly page_views: string\n}\n\ninterface PageViewRow {\n readonly id: string\n readonly visit_id: string\n readonly sequence: number\n readonly route: string\n readonly received_at: Date | string\n}\n\n/** A page view or, with a name, an interaction. */\ninterface EventRow extends PageViewRow {\n readonly name: string | null\n}\n\nfunction visitFromRow(row: VisitRow): ActivityVisit {\n return {\n id: row.id,\n actor: activityActor(row.actor_type, row.user_id, row.grant_id),\n attribution: parseActivityAttribution(row.attribution),\n startedAt: new Date(row.started_at),\n lastSeenAt: new Date(row.last_seen_at),\n pageViews: Number(row.page_views),\n interactions: Number(row.interactions),\n }\n}\n\nfunction pageViewFromRow(row: PageViewRow): ActivityPageView {\n return {\n id: row.id,\n visitId: row.visit_id,\n sequence: Number(row.sequence),\n route: row.route,\n receivedAt: new Date(row.received_at),\n }\n}\n",
58
59
  "import {\n type AiAccountingAggregateFragment,\n type AiAccountingRecordSetItem,\n aiModelCallCostDetails,\n aiModelCallCostMatchesUsage,\n buildAiAccountingOverviewFromFragments,\n directModelCallAttribution,\n normalizeAiAccountingQuery,\n normalizeAiModelCallAccountingQuery,\n normalizeAiModelCallCostRecord,\n parseAiModelCallCostDetails,\n toAccountingItem,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport { normalizeModelProviderIds } from \"@sixb/core/models\"\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 ListAiModelCallGroupsInput,\n type ListAiModelCallGroupsResult,\n type QueryAiAccountingOverviewInput,\n type SummarizeAiCostExecutionsInput,\n} from \"@sixb/core/storage\"\nimport { listAiModelCallGroups } from \"./ai-cost-groups\"\nimport { requestedReasoningFromRow } from \"./pg-ai-usage-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 listModelCallGroups(\n input: ListAiModelCallGroupsInput\n ): Promise<ListAiModelCallGroupsResult> {\n return listAiModelCallGroups(this.sql, input)\n }\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.audio_duration_ms,\n usage.reporting_status,\n CASE\n WHEN direct_agent.kind = 'conversation' THEN 'agent'\n WHEN workflow_agent.node_run_id IS NOT NULL THEN 'workflowAgent'\n ELSE NULL\n END AS attribution_agent_kind,\n workflow_node.node_id AS attribution_agent_step_id,\n COALESCE(workflow_node.workflow_id,\n CASE WHEN execution.executor_kind = 'workflow' THEN execution.authority_primitive_id END\n ) 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 JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\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::text AS key_3,\n NULL::timestamptz AS bucket_start,\n classified.*\n FROM classified\n UNION ALL\n SELECT 'series', NULL, 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, NULL, classified.* FROM classified\n UNION ALL\n SELECT 'agent', attribution_agent_kind, attribution_workflow_id, attribution_agent_step_id, NULL, classified.*\n FROM classified WHERE attribution_agent_kind IS NOT NULL\n UNION ALL\n SELECT 'workflow', attribution_workflow_id, NULL, NULL, NULL, classified.*\n FROM classified WHERE attribution_workflow_id IS NOT NULL\n )\n SELECT dimension,\n key_1,\n key_2,\n key_3,\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(*) FILTER (WHERE input_tokens IS NOT NULL AND output_tokens IS NOT NULL)::text\n AS complete_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(audio_duration_ms)::text AS audio_duration_ms_count,\n SUM(audio_duration_ms)::text AS audio_duration_ms_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, key_3, 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.kind = 'conversation' THEN 'agent'\n WHEN direct_agent.kind = 'subagent' THEN 'subagent'\n WHEN workflow_agent.node_run_id IS NOT NULL THEN 'workflowAgent'\n ELSE NULL\n END AS attribution_kind,\n workflow_node.node_id AS attribution_agent_step_id,\n direct_agent.id AS attribution_agent_run_id,\n direct_agent.thread_id AS attribution_thread_id,\n direct_agent.parent_run_id AS attribution_parent_run_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 execution.executor_kind, execution.executor_id, execution.authority_primitive_id AS primitive_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 JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\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 model_kind: AiModelCallUsageRecord[\"modelKind\"] | null\n readonly requested_reasoning: string | Record<string, unknown> | null\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 audio_duration_ms: number | string | null\n readonly reporting_status: AiModelCallUsageRecord[\"usage\"][\"reportingStatus\"]\n readonly raw_usage: ReadonlyJsonObject | string | null\n readonly provider_ids: Record<string, unknown> | string | null\n readonly occurred_at: Date | string\n readonly recorded_at: Date | string\n}\n\ninterface JoinedRow extends UsageRow {\n readonly executor_kind: string | null\n readonly executor_id: string | null\n readonly primitive_id: string | null\n readonly attribution_kind: \"agent\" | \"subagent\" | \"workflowAgent\" | null\n readonly attribution_agent_step_id: string | null\n readonly attribution_agent_run_id: string | null\n readonly attribution_thread_id: string | null\n readonly attribution_parent_run_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 key_3: 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 complete_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 audio_duration_ms_count: string\n readonly audio_duration_ms_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 ? {\n agentKind: required(row.key_1) as \"agent\" | \"workflowAgent\",\n ...(row.key_1 === \"workflowAgent\"\n ? { workflowId: required(row.key_2), agentStepId: required(row.key_3) }\n : {}),\n }\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 completeCallCount: row.complete_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 audioDurationMs: meterFragment(row.audio_duration_ms_count, row.audio_duration_ms_sum),\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 ? directModelCallAttribution(row.executor_kind, row.executor_id, row.primitive_id)\n : row.attribution_kind === \"agent\"\n ? {\n kind: \"agent\" as const,\n agentRunId: required(row.attribution_agent_run_id),\n threadId: required(row.attribution_thread_id),\n }\n : row.attribution_kind === \"subagent\"\n ? {\n kind: \"subagent\" as const,\n subagentRunId: required(row.attribution_agent_run_id),\n parentRunId: required(row.attribution_parent_run_id),\n }\n : {\n kind: \"workflowAgent\" as const,\n agentStepId: required(row.attribution_agent_step_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 ...(row.provider_ids === null\n ? {}\n : {\n providerIds: normalizeModelProviderIds(\n typeof row.provider_ids === \"string\" ? JSON.parse(row.provider_ids) : row.provider_ids\n ),\n }),\n requestedModelId: row.requested_model_id,\n ...(row.model_kind === null ? {} : { modelKind: row.model_kind }),\n ...(row.requested_reasoning === null\n ? {}\n : { requestedReasoning: requestedReasoningFromRow(row.requested_reasoning) }),\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 ...(number(row.audio_duration_ms) === undefined\n ? {}\n : { audioDurationMs: number(row.audio_duration_ms) }),\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 priceSource =\n details.priceSource === undefined\n ? undefined\n : { ...details.priceSource, observedAt: new Date(details.priceSource.observedAt) }\n const base = {\n ...(details.estimate === undefined ? {} : { estimate: details.estimate }),\n projectId: input.projectId,\n usageRecordId: input.usageId,\n pricingContext: details.pricingContext,\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 priceSource: required(priceSource),\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 ...(priceSource === undefined ? {} : { priceSource }),\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",
59
60
  "import {\n type AiModelCallGroupRow,\n aiModelCallGroupFragmentFromRow,\n buildAiModelCallGroupsFromFragments,\n normalizeAiModelCallAccountingQuery,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport type { ListAiModelCallGroupsInput, ListAiModelCallGroupsResult } from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"./transactions\"\n\n/** Paginate initiating executions, then aggregate their matching calls without loading usage payloads. */\nexport async function listAiModelCallGroups(\n sql: PgStoreClient,\n input: ListAiModelCallGroupsInput\n): Promise<ListAiModelCallGroupsResult> {\n const query = normalizeAiModelCallAccountingQuery(input)\n const parameters = [\n query.projectId,\n query.from.toISOString(),\n query.to.toISOString(),\n query.providerId ?? null,\n query.modelId ?? null,\n query.valuationStatus ?? null,\n ]\n const [count] = await sql.unsafe<{ total: string }[]>(COUNT_SQL, parameters)\n const rows = await sql.unsafe<AiModelCallGroupRow[]>(PAGE_SQL, [\n ...parameters,\n query.limit,\n query.offset,\n ])\n const total = Number(count?.total)\n if (!Number.isSafeInteger(total) || total < 0)\n throw new RangeError(\"[Sixb] Invalid model-call group count.\")\n const items = buildAiModelCallGroupsFromFragments(rows.map(aiModelCallGroupFragmentFromRow))\n return { items, total, hasMore: query.offset + items.length < total }\n}\n\nconst FILTERED_SQL = `\nWITH filtered AS (\n SELECT COALESCE(root_agent.execution_id, usage.execution_id) AS root_execution_id,\n usage.execution_id, usage.provider_id, usage.requested_model_id, usage.occurred_at,\n usage.total_tokens,\n execution.executor_kind, execution.executor_id, execution.authority_primitive_id AS primitive_id,\n COALESCE(cost.status, 'unvalued') AS valuation_status,\n cost.currency AS amount_currency, cost.amount_nanos,\n root_agent.id AS root_agent_run_id,\n root_agent.thread_id AS root_thread_id,\n direct_agent.kind AS direct_kind,\n direct_agent.id AS direct_run_id,\n direct_agent.parent_run_id AS parent_run_id,\n workflow_node.node_id AS workflow_agent_step_id,\n workflow_agent.node_run_id AS workflow_node_run_id,\n workflow_node.workflow_id AS workflow_id,\n workflow_node.workflow_run_id AS workflow_run_id\n FROM ai_model_call_usage AS usage\n JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN agent_runs AS root_agent\n ON root_agent.project_id = usage.project_id\n AND root_agent.id = COALESCE(direct_agent.parent_run_id, direct_agent.id)\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id 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 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 = $1\n AND usage.occurred_at >= $2::timestamptz\n AND usage.occurred_at < $3::timestamptz\n AND ($4::text IS NULL OR usage.provider_id = $4)\n AND ($5::text IS NULL OR usage.requested_model_id = $5)\n AND ($6::text IS NULL OR COALESCE(cost.status, 'unvalued') = $6)\n), roots AS (\n SELECT root_execution_id, MAX(occurred_at) AS last_call_at\n FROM filtered GROUP BY root_execution_id\n)\n`\nconst COUNT_SQL = `${FILTERED_SQL} SELECT CAST(COUNT(*) AS TEXT) AS total FROM roots`\nconst PAGE_SQL = `${FILTERED_SQL}, page AS (\n SELECT root_execution_id FROM roots\n ORDER BY last_call_at DESC, root_execution_id COLLATE \"C\" ASC LIMIT $7 OFFSET $8\n)\nSELECT filtered.root_execution_id, execution_id, provider_id, requested_model_id,\n MIN(occurred_at) AS first_call_at, MAX(occurred_at) AS last_call_at,\n CAST(COUNT(*) AS TEXT) AS call_count,\n CAST(COUNT(total_tokens) AS TEXT) AS token_count,\n CAST(SUM(total_tokens) AS TEXT) AS total_tokens,\n valuation_status, amount_currency,\n CAST(SUM(amount_nanos / 1000000000000) AS TEXT) AS amount_high,\n CAST(SUM((amount_nanos / 1000000) % 1000000) AS TEXT) AS amount_middle,\n CAST(SUM(amount_nanos % 1000000) AS TEXT) AS amount_low,\n MAX(root_agent_run_id) AS root_agent_run_id,\n MAX(executor_kind) AS executor_kind, MAX(executor_id) AS executor_id, MAX(primitive_id) AS primitive_id,\n MAX(root_thread_id) AS root_thread_id,\n MAX(direct_kind) AS direct_kind,\n MAX(direct_run_id) AS direct_run_id,\n MAX(parent_run_id) AS parent_run_id,\n MAX(workflow_agent_step_id) AS workflow_agent_step_id,\n MAX(workflow_node_run_id) AS workflow_node_run_id,\n MAX(workflow_id) AS workflow_id,\n MAX(workflow_run_id) AS workflow_run_id\nFROM filtered JOIN page ON page.root_execution_id = filtered.root_execution_id\nGROUP BY filtered.root_execution_id, execution_id, provider_id, requested_model_id,\n valuation_status, amount_currency\n`\n",
60
61
  "import { assertAiUsageExecutionId, normalizeAiModelCallRecord } from \"@sixb/core/internal/storage\"\nimport { isModelReasoning, normalizeModelProviderIds } from \"@sixb/core/models\"\nimport type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiModelCallUsageInput,\n type AiModelCallUsageRecord,\n type AiUsageExecutionSummary,\n type AiUsageStorage,\n AiUsageStorageError,\n aggregateAiModelCallUsage,\n type GetLatestAiModelCallForExecutionInput,\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 provider_ids,\n requested_model_id,\n model_kind,\n requested_reasoning,\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 audio_duration_ms,\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.providerIds === undefined ? null : JSON.stringify(record.providerIds)}::jsonb,\n ${record.requestedModelId},\n ${record.modelKind ?? null},\n ${\n record.requestedReasoning === undefined\n ? null\n : JSON.stringify(record.requestedReasoning)\n }::text::jsonb,\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.audioDurationMs ?? 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 getLatestForExecution(\n input: GetLatestAiModelCallForExecutionInput\n ): Promise<AiModelCallUsageRecord | null> {\n assertNonBlankProjectId(input.projectId)\n assertAiUsageExecutionId(input.executionId)\n const [row] = await this.sql<AiUsageRow[]>`\n SELECT * FROM ai_model_call_usage\n WHERE project_id = ${input.projectId} AND execution_id = ${input.executionId}\n ORDER BY occurred_at DESC, id DESC\n LIMIT 1\n `\n return row ? this.rowToRecord(this.sql, row) : null\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 ...(row.provider_ids === null\n ? {}\n : {\n providerIds: normalizeModelProviderIds(\n typeof row.provider_ids === \"string\" ? JSON.parse(row.provider_ids) : row.provider_ids\n ),\n }),\n requestedModelId: row.requested_model_id,\n ...(row.model_kind === null ? {} : { modelKind: row.model_kind }),\n ...(row.requested_reasoning === null\n ? {}\n : { requestedReasoning: requestedReasoningFromRow(row.requested_reasoning) }),\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 provider_ids: Record<string, unknown> | string | null\n readonly requested_model_id: string\n readonly model_kind: AiModelCallUsageRecord[\"modelKind\"] | null\n readonly requested_reasoning: string | Record<string, unknown> | null\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 audio_duration_ms: 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 ...(row.audio_duration_ms === null ? {} : { audioDurationMs: Number(row.audio_duration_ms) }),\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\nexport function requestedReasoningFromRow(\n value: Exclude<AiUsageRow[\"requested_reasoning\"], null>\n): AiModelCallUsageRecord[\"requestedReasoning\"] {\n const parsed: unknown =\n typeof value === \"string\" && (value.startsWith('\"') || value.startsWith(\"{\"))\n ? JSON.parse(value)\n : value\n if (!isModelReasoning(parsed)) {\n throw new Error(\"[SixbPg] Stored AI usage requested reasoning is invalid.\")\n }\n return parsed\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",
61
62
  "import {\n type AiLimitAccountingEntry,\n AiLimitOperationLock,\n aiLimitAmountKey,\n aiLimitMeterApplies,\n aiLimitQuantityFromAmount,\n aiLimitReservationBuckets,\n aiLimitReservationRequestKey,\n aiLimitReservationRequestMatches,\n aiLimitSubjectFromParts,\n aiLimitSubjectKey,\n aiLimitSubjectParts,\n aiLimitSubjectsFromAccountingEntry,\n assertAiLimitAccountingMatchesReservation,\n assertNonBlank,\n cloneValidDate,\n type NormalizedAiLimitAmount,\n normalizeAiLimitAmount,\n normalizeAiLimitQuantities,\n normalizeAiModelCallReservationIdentity,\n normalizeCreateAiLimitPolicy,\n normalizeReserveAiModelCall,\n normalizeUpdateAiLimitPolicy,\n resolveAiLimitActual,\n} from \"@sixb/core/internal/ai-limit-storage-provider\"\nimport type {\n AiLimitPeriod,\n AiLimitPolicy,\n AiLimitPolicyStatus,\n AiLimitQuantity,\n AiLimitReservationBucket,\n AiLimitStorage,\n AiLimitSubject,\n AiModelCallReservation,\n CreateAiLimitPolicyInput,\n DeleteAiLimitPolicyInput,\n GetAiLimitPolicyInput,\n ListAiLimitPoliciesInput,\n ListAiLimitPolicyStatusesInput,\n MarkAiModelCallReservationUnknownInput,\n ReconcileAiModelCallInput,\n RecordAiModelCallLimitActualsInput,\n ReserveAiModelCallInput,\n ReserveAiModelCallResult,\n UpdateAiLimitPolicyInput,\n} from \"@sixb/core/storage\"\nimport { AiLimitStorageError, aiLimitCalendarMonth } from \"@sixb/core/storage\"\nimport type { SQLClient } from \"./pg-client\"\nimport { lockAdvisoryKeys, type PgStoreClient, runPgTransaction } from \"./transactions\"\n\n/** PostgreSQL-backed editable AI limits and atomic model-call reservations. */\nexport class PgAiLimitStorage implements AiLimitStorage {\n private readonly operations = new AiLimitOperationLock()\n\n constructor(private readonly sql: PgStoreClient) {}\n\n /** @internal Keep queued work inside the lifetime of the owning SQL transaction. */\n settleOperations(): Promise<void> {\n return this.operations.settle()\n }\n\n async createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n const policy = normalizeCreateAiLimitPolicy(input)\n return this.withProjectLock(policy.projectId, async (tx) => {\n const subject = aiLimitSubjectParts(policy.subject)\n const limit = normalizeAiLimitAmount(policy.limit)\n const inserted = await tx<{ id: string }[]>`\n INSERT INTO ai_usage_limits (\n project_id, id, subject_type, subject_id, meter, currency, limit_amount,\n period_kind, enabled, created_at, updated_at\n ) VALUES (\n ${policy.projectId}, ${policy.id}, ${subject.type}, ${subject.id}, ${limit.meter},\n ${limit.currency}, ${limit.amount.toString()}, ${policy.period}, ${policy.enabled},\n ${policy.createdAt}, ${policy.updatedAt}\n )\n ON CONFLICT DO NOTHING\n RETURNING id\n `\n if (inserted.length === 0) throw duplicatePolicy(policy)\n return this.requirePolicy(tx, policy.projectId, policy.id)\n })\n }\n\n async updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n const update = normalizeUpdateAiLimitPolicy(input)\n return this.withProjectLock(update.projectId, async (tx) => {\n const existing = await this.requirePolicy(tx, update.projectId, update.id)\n if (update.limit !== undefined) assertSameDimension(existing.limit, update.limit)\n const limit = normalizeAiLimitAmount(update.limit ?? existing.limit)\n await tx`\n UPDATE ai_usage_limits\n SET limit_amount = ${limit.amount.toString()},\n enabled = ${update.enabled ?? existing.enabled},\n updated_at = ${update.updatedAt}\n WHERE project_id = ${update.projectId} AND id = ${update.id}\n `\n return this.requirePolicy(tx, update.projectId, update.id)\n })\n }\n\n async deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean> {\n validatePolicyIdentity(input)\n return this.withProjectLock(input.projectId, async (tx) => {\n const deleted = await tx<{ id: string }[]>`\n DELETE FROM ai_usage_limits\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING id\n `\n return deleted.length > 0\n })\n }\n\n async getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null> {\n validatePolicyIdentity(input)\n const [row] = await this.sql<AiLimitPolicyRow[]>`\n SELECT * FROM ai_usage_limits\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n `\n return row ? policyFromRow(row) : null\n }\n\n async listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]> {\n assertNonBlank(input.projectId, \"projectId\")\n return (await this.policyRows(this.sql, input.projectId, input.includeDisabled ?? false)).map(\n policyFromRow\n )\n }\n\n async listPolicyStatuses(\n input: ListAiLimitPolicyStatusesInput\n ): Promise<readonly AiLimitPolicyStatus[]> {\n assertNonBlank(input.projectId, \"projectId\")\n const period = aiLimitCalendarMonth(input.at ?? new Date())\n const existingGroups =\n input.existingGroupIds === undefined ? undefined : new Set(input.existingGroupIds)\n return this.withProjectLock(input.projectId, async (tx) => {\n const rows = await this.policyRows(tx, input.projectId, input.includeDisabled ?? false)\n return Promise.all(\n rows.map((row) => this.statusForPolicy(tx, policyFromRow(row), period, existingGroups))\n )\n })\n }\n\n async reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult> {\n const request = normalizeReserveAiModelCall(input)\n return this.withProjectLock(request.identity.projectId, async (tx) => {\n const existing = await this.findReservation(tx, request.identity)\n if (existing) {\n if (!aiLimitReservationRequestMatches(existing, request)) {\n throw new AiLimitStorageError(\n \"reservation_conflict\",\n `[SixbPg] AI model-call reservation '${input.callId}' was replayed with different subjects, estimates, or period.`\n )\n }\n if (existing.state !== \"active\") {\n return { status: \"terminal\", reservation: existing, created: false }\n }\n return { status: \"reserved\", reservation: existing, created: false }\n }\n await this.assertExecutionExists(tx, request.identity.projectId, request.identity.executionId)\n\n const subjectKeys = new Set(request.subjects.map(aiLimitSubjectKey))\n const estimates = new Map(\n request.estimates.map((quantity) => {\n const amount = normalizeAiLimitAmount(quantity)\n return [aiLimitAmountKey(amount), amount] as const\n })\n )\n const enabledPolicies = (await this.policyRows(tx, request.identity.projectId, false)).map(\n policyFromRow\n )\n const exhaustedPolicies: AiLimitPolicyStatus[] = []\n const unavailablePolicies: AiLimitPolicyStatus[] = []\n const unavailableReasons = new Set<\"missingEstimate\" | \"incompleteAccounting\">()\n for (const policy of enabledPolicies) {\n if (\n !subjectKeys.has(aiLimitSubjectKey(policy.subject)) ||\n !aiLimitMeterApplies(policy.limit.meter, request.modelKind)\n ) {\n continue\n }\n const limit = normalizeAiLimitAmount(policy.limit)\n const estimate = estimates.get(aiLimitAmountKey(limit))\n const status = await this.statusForPolicy(tx, policy, request.period)\n if (!estimate || status.accountingStatus === \"unavailable\") {\n unavailablePolicies.push(status)\n if (!estimate) unavailableReasons.add(\"missingEstimate\")\n if (status.accountingStatus === \"unavailable\") {\n unavailableReasons.add(\"incompleteAccounting\")\n }\n continue\n }\n const consumed =\n normalizeAiLimitAmount(status.consumption.actual).amount +\n normalizeAiLimitAmount(status.consumption.reserved).amount +\n normalizeAiLimitAmount(status.consumption.unknown).amount\n if (consumed + estimate.amount > limit.amount) exhaustedPolicies.push(status)\n }\n if (unavailablePolicies.length > 0) {\n unavailablePolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"unavailable\",\n unavailablePolicies,\n reasons: [...unavailableReasons].sort(),\n }\n }\n if (exhaustedPolicies.length > 0) {\n exhaustedPolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"denied\",\n exhaustedPolicies,\n resetAt: new Date(\n Math.min(...exhaustedPolicies.map((status) => status.period.resetAt.getTime()))\n ),\n }\n }\n\n const buckets = aiLimitReservationBuckets(\n enabledPolicies,\n request.subjects,\n request.estimates,\n request.modelKind\n )\n if (buckets.length === 0) return { status: \"notRequired\" }\n for (const bucket of buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n await this.changeCounters(\n tx,\n request.identity.projectId,\n bucket.subject,\n amount,\n request.period,\n { reserved: amount.amount },\n request.reservedAt\n )\n }\n const reservation: AiModelCallReservation = {\n ...request.identity,\n buckets,\n requestKey: aiLimitReservationRequestKey(request),\n period: request.period,\n state: \"active\",\n reservedAt: request.reservedAt,\n updatedAt: new Date(request.reservedAt),\n }\n await this.insertReservation(tx, reservation)\n return { status: \"reserved\", reservation: structuredClone(reservation), created: true }\n })\n }\n\n async recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void> {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), \"recordedAt\")\n await this.withProjectLock(input.projectId, async (tx) => {\n const entry = await this.requireAccountingEntry(tx, input.projectId, input.usageRecordId)\n const period = aiLimitCalendarMonth(entry.occurredAt)\n for (const subjectValue of aiLimitSubjectsFromAccountingEntry(entry)) {\n const subject = aiLimitSubjectParts(subjectValue)\n const rows = await tx<AiLimitActualStateRow[]>`\n SELECT meter, currency, actual_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ${input.projectId}\n AND subject_type = ${subject.type}\n AND subject_id = ${subject.id}\n AND period_start = ${period.start}\n FOR UPDATE\n `\n for (const row of rows) {\n const actual = resolveAiLimitActual([entry], row)\n await tx`\n UPDATE ai_usage_limit_periods\n SET actual_amount = ${(BigInt(row.actual_amount) + actual.amount).toString()},\n accounting_status = ${\n row.accounting_status === \"unavailable\" ||\n actual.accountingStatus === \"unavailable\"\n ? \"unavailable\"\n : \"complete\"\n },\n updated_at = ${recordedAt}\n WHERE project_id = ${input.projectId}\n AND subject_type = ${subject.type}\n AND subject_id = ${subject.id}\n AND meter = ${row.meter}\n AND currency = ${row.currency}\n AND period_start = ${period.start}\n `\n }\n }\n })\n }\n\n async reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation> {\n const identity = normalizeAiModelCallReservationIdentity(input)\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const reconciledAt = cloneValidDate(input.reconciledAt ?? new Date(), \"reconciledAt\")\n return this.withProjectLock(identity.projectId, async (tx) => {\n const reservation = await this.findReservation(tx, identity)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"reconciled\") {\n if (reservation.usageRecordId === input.usageRecordId) {\n return reservation\n }\n throw reconciliationConflict(identity.callId)\n }\n const accounting = await this.requireAccountingEntry(\n tx,\n identity.projectId,\n input.usageRecordId\n )\n assertAiLimitAccountingMatchesReservation(reservation, accounting)\n await this.reconcileEstimateCounters(tx, reservation, accounting, reconciledAt)\n const reconciled: AiModelCallReservation = {\n ...reservation,\n state: \"reconciled\",\n usageRecordId: input.usageRecordId,\n updatedAt: reconciledAt,\n }\n await this.updateReservation(tx, reconciled)\n return structuredClone(reconciled)\n })\n }\n\n async markReservationUnknown(\n input: MarkAiModelCallReservationUnknownInput\n ): Promise<AiModelCallReservation> {\n const identity = normalizeAiModelCallReservationIdentity(input)\n const markedAt = cloneValidDate(input.markedAt ?? new Date(), \"markedAt\")\n return this.withProjectLock(identity.projectId, async (tx) => {\n const reservation = await this.findReservation(tx, identity)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"unknown\") return reservation\n if (reservation.state !== \"active\") throw invalidState(reservation, \"mark unknown\")\n await this.moveEstimateCounters(tx, reservation, { reserved: -1n, unknown: 1n }, markedAt)\n const unknown = { ...reservation, state: \"unknown\" as const, updatedAt: markedAt }\n await this.updateReservation(tx, unknown)\n return structuredClone(unknown)\n })\n }\n\n private async withProjectLock<T>(\n projectId: string,\n run: (tx: SQLClient) => Promise<T>\n ): Promise<T> {\n return runPgTransaction(this.sql, async (tx) => {\n const operation = async () => {\n await lockAdvisoryKeys(tx, [`ai-limit:${projectId}`])\n return run(tx)\n }\n // Advisory locks are reentrant within one transaction. Serialize calls sharing this\n // transaction's store locally; independent root transactions retain their concurrency.\n return tx === this.sql ? this.operations.run(operation) : operation()\n })\n }\n\n private policyRows(\n sql: PgStoreClient,\n projectId: string,\n includeDisabled: boolean\n ): Promise<AiLimitPolicyRow[]> {\n return sql<AiLimitPolicyRow[]>`\n SELECT * FROM ai_usage_limits\n WHERE project_id = ${projectId} AND (${includeDisabled} OR enabled)\n ORDER BY id\n `\n }\n\n private async requirePolicy(\n sql: PgStoreClient,\n projectId: string,\n id: string\n ): Promise<AiLimitPolicy> {\n const [row] = await sql<AiLimitPolicyRow[]>`\n SELECT * FROM ai_usage_limits WHERE project_id = ${projectId} AND id = ${id}\n `\n if (row) return policyFromRow(row)\n throw new AiLimitStorageError(\n \"missing_policy\",\n `[SixbPg] AI limit policy '${id}' does not exist in project '${projectId}'.`\n )\n }\n\n private async statusForPolicy(\n sql: PgStoreClient,\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n existingGroups?: ReadonlySet<string>\n ): Promise<AiLimitPolicyStatus> {\n const subject = aiLimitSubjectParts(policy.subject)\n const limit = normalizeAiLimitAmount(policy.limit)\n let [row] = await sql<AiLimitPeriodStateRow[]>`\n SELECT actual_amount, reserved_amount, unknown_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ${policy.projectId}\n AND subject_type = ${subject.type}\n AND subject_id = ${subject.id}\n AND meter = ${limit.meter}\n AND currency = ${limit.currency}\n AND period_start = ${period.start}\n `\n // Re-read incomplete accounting under the project lock; retain in-flight estimates.\n if (!row || row.accounting_status === \"unavailable\") {\n const actual = resolveAiLimitActual(await this.accountingEntries(sql, policy, period), limit)\n const [inserted] = await sql<AiLimitPeriodStateRow[]>`\n INSERT INTO ai_usage_limit_periods (\n project_id, subject_type, subject_id, meter, currency, period_start, period_end,\n actual_amount, reserved_amount, unknown_amount, accounting_status, updated_at\n ) VALUES (\n ${policy.projectId}, ${subject.type}, ${subject.id}, ${limit.meter}, ${limit.currency},\n ${period.start}, ${period.end}, ${actual.amount.toString()}, 0, 0,\n ${actual.accountingStatus}, ${new Date()}\n )\n ON CONFLICT (project_id, subject_type, subject_id, meter, currency, period_start)\n DO UPDATE SET\n actual_amount = excluded.actual_amount,\n accounting_status = excluded.accounting_status,\n updated_at = excluded.updated_at\n RETURNING actual_amount, reserved_amount, unknown_amount, accounting_status\n `\n row = inserted\n }\n if (!row) throw new Error(\"[SixbPg] Failed to initialize AI limit period state.\")\n return policyStatus(policy, period, row, existingGroups)\n }\n\n private async changeCounters(\n sql: PgStoreClient,\n projectId: string,\n subjectValue: AiLimitSubject,\n amount: NormalizedAiLimitAmount,\n period: AiLimitPeriod,\n changes: { readonly reserved?: bigint; readonly unknown?: bigint },\n updatedAt: Date\n ): Promise<void> {\n const subject = aiLimitSubjectParts(subjectValue)\n const [row] = await sql<AiLimitPeriodStateRow[]>`\n SELECT actual_amount, reserved_amount, unknown_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ${projectId}\n AND subject_type = ${subject.type}\n AND subject_id = ${subject.id}\n AND meter = ${amount.meter}\n AND currency = ${amount.currency}\n AND period_start = ${period.start}\n FOR UPDATE\n `\n const reserved = BigInt(row?.reserved_amount ?? \"0\") + (changes.reserved ?? 0n)\n const unknown = BigInt(row?.unknown_amount ?? \"0\") + (changes.unknown ?? 0n)\n if (reserved < 0n || unknown < 0n) {\n throw new Error(\"[SixbPg] AI limit period counter became negative.\")\n }\n await sql`\n INSERT INTO ai_usage_limit_periods (\n project_id, subject_type, subject_id, meter, currency, period_start, period_end,\n actual_amount, reserved_amount, unknown_amount, accounting_status, updated_at\n ) VALUES (\n ${projectId}, ${subject.type}, ${subject.id}, ${amount.meter}, ${amount.currency},\n ${period.start}, ${period.end}, ${row?.actual_amount ?? \"0\"}, ${reserved.toString()},\n ${unknown.toString()}, ${row?.accounting_status ?? \"complete\"}, ${updatedAt}\n )\n ON CONFLICT (project_id, subject_type, subject_id, meter, currency, period_start)\n DO UPDATE SET\n period_end = excluded.period_end,\n actual_amount = excluded.actual_amount,\n reserved_amount = excluded.reserved_amount,\n unknown_amount = excluded.unknown_amount,\n accounting_status = excluded.accounting_status,\n updated_at = excluded.updated_at\n `\n }\n\n private async moveEstimateCounters(\n sql: PgStoreClient,\n reservation: AiModelCallReservation,\n directions: { readonly reserved?: bigint; readonly unknown?: bigint },\n updatedAt: Date\n ): Promise<void> {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n await this.changeCounters(\n sql,\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n {\n ...(directions.reserved === undefined\n ? {}\n : { reserved: directions.reserved * amount.amount }),\n ...(directions.unknown === undefined\n ? {}\n : { unknown: directions.unknown * amount.amount }),\n },\n updatedAt\n )\n }\n }\n\n private async reconcileEstimateCounters(\n sql: PgStoreClient,\n reservation: AiModelCallReservation,\n entry: AiLimitAccountingEntry,\n updatedAt: Date\n ): Promise<void> {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const actual = resolveAiLimitActual([entry], amount)\n if (actual.accountingStatus === \"complete\") {\n await this.changeCounters(\n sql,\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n reservation.state === \"active\"\n ? { reserved: -amount.amount }\n : { unknown: -amount.amount },\n updatedAt\n )\n } else if (reservation.state === \"active\") {\n await this.changeCounters(\n sql,\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n { reserved: -amount.amount, unknown: amount.amount },\n updatedAt\n )\n }\n }\n }\n\n private async insertReservation(\n sql: PgStoreClient,\n reservation: AiModelCallReservation\n ): Promise<void> {\n await sql`\n INSERT INTO ai_model_call_reservations (\n project_id, execution_id, attempt, call_id, buckets, request_key,\n period_start, period_end, state, usage_record_id, reserved_at, updated_at\n ) VALUES (\n ${reservation.projectId}, ${reservation.executionId}, ${reservation.attempt},\n ${reservation.callId}, ${JSON.stringify(reservation.buckets)}::text::jsonb,\n ${reservation.requestKey}, ${reservation.period.start},\n ${reservation.period.end}, ${reservation.state}, ${reservation.usageRecordId ?? null},\n ${reservation.reservedAt}, ${reservation.updatedAt}\n )\n `\n }\n\n private async updateReservation(\n sql: PgStoreClient,\n reservation: AiModelCallReservation\n ): Promise<void> {\n await sql`\n UPDATE ai_model_call_reservations\n SET state = ${reservation.state},\n usage_record_id = ${reservation.usageRecordId ?? null},\n updated_at = ${reservation.updatedAt}\n WHERE project_id = ${reservation.projectId}\n AND execution_id = ${reservation.executionId}\n AND attempt = ${reservation.attempt}\n AND call_id = ${reservation.callId}\n `\n }\n\n private async findReservation(\n sql: PgStoreClient,\n input: {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n }\n ): Promise<AiModelCallReservation | null> {\n const [row] = await sql<AiModelCallReservationRow[]>`\n SELECT * FROM ai_model_call_reservations\n WHERE project_id = ${input.projectId}\n AND execution_id = ${input.executionId}\n AND attempt = ${input.attempt}\n AND call_id = ${input.callId}\n `\n return row ? reservationFromRow(row) : null\n }\n\n private async accountingEntries(\n sql: PgStoreClient,\n policy: AiLimitPolicy,\n period: AiLimitPeriod\n ): Promise<readonly AiLimitAccountingEntry[]> {\n const subject = aiLimitSubjectParts(policy.subject)\n const rows = await sql<AiLimitAccountingRow[]>`\n SELECT usage.project_id, usage.id AS usage_record_id, usage.execution_id,\n usage.attempt, usage.call_id, usage.occurred_at,\n usage.total_tokens::text AS total_tokens,\n usage.model_kind,\n executions.requested_by_user_id,\n executions.requested_by_service_account_id,\n valuations.status AS valuation_status,\n valuations.currency AS valuation_currency,\n valuations.amount_nanos::text AS valuation_amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions\n ON executions.project_id = usage.project_id AND executions.id = usage.execution_id\n LEFT JOIN ai_model_call_valuations AS valuations\n ON valuations.project_id = usage.project_id\n AND valuations.usage_record_id = usage.id\n WHERE usage.project_id = ${policy.projectId}\n AND usage.occurred_at >= ${period.start}\n AND usage.occurred_at < ${period.end}\n AND (\n ${subject.type} = 'project'\n OR (\n ${subject.type} = 'group'\n AND EXISTS (\n SELECT 1 FROM ai_model_call_usage_groups AS usage_groups\n WHERE usage_groups.project_id = usage.project_id\n AND usage_groups.usage_record_id = usage.id\n AND usage_groups.group_id = ${subject.id}\n )\n )\n OR (${subject.type} = 'user' AND executions.requested_by_user_id = ${subject.id})\n OR (\n ${subject.type} = 'serviceAccount'\n AND executions.requested_by_service_account_id = ${subject.id}\n )\n )\n ORDER BY usage.occurred_at, usage.id\n `\n return rows.map((row) => accountingEntryFromRow(row, policy.subject))\n }\n\n private async requireAccountingEntry(\n sql: PgStoreClient,\n projectId: string,\n usageRecordId: string\n ): Promise<AiLimitAccountingEntry> {\n const [row] = await sql<AiLimitAccountingRow[]>`\n SELECT usage.project_id, usage.id AS usage_record_id, usage.execution_id,\n usage.attempt, usage.call_id, usage.occurred_at,\n usage.total_tokens::text AS total_tokens,\n usage.model_kind,\n executions.requested_by_user_id,\n executions.requested_by_service_account_id,\n valuations.status AS valuation_status,\n valuations.currency AS valuation_currency,\n valuations.amount_nanos::text AS valuation_amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions\n ON executions.project_id = usage.project_id AND executions.id = usage.execution_id\n LEFT JOIN ai_model_call_valuations AS valuations\n ON valuations.project_id = usage.project_id\n AND valuations.usage_record_id = usage.id\n WHERE usage.project_id = ${projectId} AND usage.id = ${usageRecordId}\n `\n if (row) {\n const groups = await sql<{ group_id: string }[]>`\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = ${projectId} AND usage_record_id = ${usageRecordId}\n ORDER BY group_id\n `\n return accountingEntryFromRow(\n row,\n undefined,\n groups.map((group) => group.group_id)\n )\n }\n throw new AiLimitStorageError(\n \"missing_usage_record\",\n `[SixbPg] AI usage record '${usageRecordId}' does not exist in project '${projectId}'.`\n )\n }\n\n private async assertExecutionExists(\n sql: PgStoreClient,\n projectId: string,\n executionId: string\n ): Promise<void> {\n const [row] = 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 (row?.exists) return\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[SixbPg] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\ninterface AiLimitPolicyRow {\n readonly project_id: string\n readonly id: string\n readonly subject_type: AiLimitSubject[\"type\"]\n readonly subject_id: string\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly limit_amount: string\n readonly period_kind: \"calendarMonth\"\n readonly enabled: boolean\n readonly created_at: Date | string\n readonly updated_at: Date | string\n}\n\ninterface AiLimitPeriodStateRow {\n readonly actual_amount: string\n readonly reserved_amount: string\n readonly unknown_amount: string\n readonly accounting_status: \"complete\" | \"unavailable\"\n}\n\ninterface AiLimitActualStateRow {\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly actual_amount: string\n readonly accounting_status: \"complete\" | \"unavailable\"\n}\n\ninterface AiLimitAccountingRow {\n readonly project_id: string\n readonly usage_record_id: string\n readonly execution_id: string\n readonly attempt: number | string\n readonly call_id: string\n readonly occurred_at: Date | string\n readonly total_tokens: string | null\n readonly model_kind: AiLimitAccountingEntry[\"modelKind\"] | null\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly valuation_status: \"rated\" | \"unpriceable\" | null\n readonly valuation_currency: string | null\n readonly valuation_amount_nanos: string | null\n}\n\ninterface AiModelCallReservationRow {\n readonly project_id: string\n readonly execution_id: string\n readonly attempt: number | string\n readonly call_id: string\n readonly buckets: readonly AiLimitReservationBucket[] | string\n readonly request_key: string\n readonly period_start: Date | string\n readonly period_end: Date | string\n readonly state: AiModelCallReservation[\"state\"]\n readonly usage_record_id: string | null\n readonly reserved_at: Date | string\n readonly updated_at: Date | string\n}\n\nfunction policyFromRow(row: AiLimitPolicyRow): AiLimitPolicy {\n return {\n id: row.id,\n projectId: row.project_id,\n subject: aiLimitSubjectFromParts(row.subject_type, row.subject_id),\n limit: aiLimitQuantityFromAmount({\n meter: row.meter,\n currency: row.currency,\n amount: BigInt(row.limit_amount),\n }),\n period: row.period_kind,\n enabled: row.enabled,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction policyStatus(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n row: AiLimitPeriodStateRow,\n existingGroups?: ReadonlySet<string>\n): AiLimitPolicyStatus {\n const limit = normalizeAiLimitAmount(policy.limit)\n const actual = BigInt(row.actual_amount)\n const reserved = BigInt(row.reserved_amount)\n const unknown = BigInt(row.unknown_amount)\n const consumed = actual + reserved + unknown\n const quantity = (amount: bigint) => aiLimitQuantityFromAmount({ ...limit, amount })\n return {\n policy,\n period: structuredClone(period),\n consumption: {\n actual: quantity(actual),\n reserved: quantity(reserved),\n unknown: quantity(unknown),\n remaining: quantity(limit.amount > consumed ? limit.amount - consumed : 0n),\n },\n accountingStatus: row.accounting_status,\n exhausted: consumed >= limit.amount,\n orphaned:\n policy.subject.type === \"group\" &&\n existingGroups !== undefined &&\n !existingGroups.has(policy.subject.id),\n }\n}\n\nfunction accountingEntryFromRow(\n row: AiLimitAccountingRow,\n subject?: AiLimitSubject,\n requesterGroupIds = subject?.type === \"group\" ? [subject.id] : []\n): AiLimitAccountingEntry {\n const totalTokens = row.total_tokens === null ? undefined : Number(row.total_tokens)\n const requester = row.requested_by_user_id\n ? ({ type: \"user\", id: row.requested_by_user_id } as const)\n : row.requested_by_service_account_id\n ? ({ type: \"serviceAccount\", id: row.requested_by_service_account_id } as const)\n : undefined\n return {\n projectId: row.project_id,\n usageRecordId: row.usage_record_id,\n executionId: row.execution_id,\n attempt: Number(row.attempt),\n callId: row.call_id,\n occurredAt: new Date(row.occurred_at),\n ...(row.model_kind === null ? {} : { modelKind: row.model_kind }),\n ...(totalTokens !== undefined && Number.isSafeInteger(totalTokens) ? { totalTokens } : {}),\n requesterGroupIds,\n ...(requester ? { requester } : {}),\n ...(row.valuation_status === \"rated\" &&\n row.valuation_currency !== null &&\n row.valuation_amount_nanos !== null\n ? {\n valuation: {\n status: \"rated\" as const,\n money: {\n currency: row.valuation_currency,\n amountNanos: row.valuation_amount_nanos,\n },\n },\n }\n : row.valuation_status === \"unpriceable\"\n ? { valuation: { status: \"unavailable\" as const } }\n : {}),\n }\n}\n\nfunction reservationFromRow(row: AiModelCallReservationRow): AiModelCallReservation {\n const buckets = jsonValue<readonly AiLimitReservationBucket[]>(row.buckets)\n return {\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: Number(row.attempt),\n callId: row.call_id,\n buckets: buckets.map((bucket) => ({\n subject: structuredClone(bucket.subject),\n estimate: normalizeAiLimitQuantities([bucket.estimate], \"stored bucket\")[0]!,\n })),\n requestKey: row.request_key,\n period: {\n kind: \"calendarMonth\",\n start: new Date(row.period_start),\n end: new Date(row.period_end),\n resetAt: new Date(row.period_end),\n },\n state: row.state,\n ...(row.usage_record_id === null ? {} : { usageRecordId: row.usage_record_id }),\n reservedAt: new Date(row.reserved_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction jsonValue<T>(value: T | string): T {\n return typeof value === \"string\" ? (JSON.parse(value) as T) : value\n}\n\nfunction assertSameDimension(previous: AiLimitQuantity, next: AiLimitQuantity): void {\n if (\n aiLimitAmountKey(normalizeAiLimitAmount(previous)) !==\n aiLimitAmountKey(normalizeAiLimitAmount(next))\n ) {\n throw new TypeError(\"[Sixb] AI limit policy meter and cost currency are immutable.\")\n }\n}\n\nfunction validatePolicyIdentity(input: GetAiLimitPolicyInput): void {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.id, \"policy id\")\n}\n\nfunction duplicatePolicy(policy: AiLimitPolicy): AiLimitStorageError {\n return new AiLimitStorageError(\n \"duplicate_policy\",\n `[SixbPg] An AI limit policy already exists for policy ID or subject-meter dimension '${policy.id}'.`\n )\n}\n\nfunction missingReservation(input: {\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n}): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_reservation\",\n `[SixbPg] AI model-call reservation '${input.callId}' does not exist for execution '${input.executionId}' attempt ${input.attempt}.`\n )\n}\n\nfunction reconciliationConflict(callId: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"reconciliation_conflict\",\n `[SixbPg] AI model-call reservation '${callId}' was reconciled with a different usage record.`\n )\n}\n\nfunction invalidState(reservation: AiModelCallReservation, operation: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"invalid_reservation_state\",\n `[SixbPg] Cannot ${operation} AI model-call reservation '${reservation.callId}' in state '${reservation.state}'.`\n )\n}\n",
63
+ "import {\n artifactStorageErrors,\n parseArtifactFrameGrantRow,\n parseArtifactRow,\n parseArtifactVersionRow,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ArtifactFrameGrantRecord,\n ArtifactRecord,\n ArtifactStorage,\n ArtifactVersionInput,\n ArtifactVersionRecord,\n CreateArtifactInput,\n DeleteArtifactInput,\n DeleteArtifactVersionsByOriginInput,\n DeleteExpiredArtifactFrameGrantsInput,\n FindArtifactFrameGrantInput,\n GetArtifactInput,\n GetArtifactVersionInput,\n ListArtifactsInput,\n ListArtifactsResult,\n ListArtifactVersionsInput,\n ListArtifactVersionsResult,\n ListReferencingVersionsInput,\n PublishArtifactVersionInput,\n PublishedArtifactVersion,\n} from \"@sixb/core/storage\"\nimport type { SQLClient, SqlParameter } from \"./pg-client\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\ninterface PgRow {\n readonly [column: string]: unknown\n}\n\n// Quoted aliases give the shared row parsers their camelCase keys; an unquoted alias would fold to\n// lower case.\nconst ARTIFACT_COLUMNS = `\n project_id AS \"projectId\", id, kind, title,\n owner_principal_type AS \"ownerPrincipalType\", owner_principal_id AS \"ownerPrincipalId\",\n latest_version AS \"latestVersion\", created_at AS \"createdAt\", updated_at AS \"updatedAt\"\n`\n\nconst VERSION_COLUMNS = `\n project_id AS \"projectId\", artifact_id AS \"artifactId\", version, title, entry, files, outline,\n refs, author_principal_type AS \"authorPrincipalType\", author_principal_id AS \"authorPrincipalId\",\n origin_thread_id AS \"originThreadId\", origin_run_id AS \"originRunId\", created_at AS \"createdAt\"\n`\n\nconst FRAME_GRANT_COLUMNS = `\n project_id AS \"projectId\", token_hash AS \"tokenHash\", artifact_id AS \"artifactId\", version,\n targets, created_at AS \"createdAt\", expires_at AS \"expiresAt\"\n`\n\nexport class PgArtifactStorage implements ArtifactStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateArtifactInput): Promise<PublishedArtifactVersion> {\n return runPgTransaction(this.sql, async (tx) => {\n const [artifact] = await tx<PgRow[]>`\n INSERT INTO artifacts (\n project_id, id, kind, title, owner_principal_type, owner_principal_id,\n latest_version, next_version, created_at, updated_at\n ) VALUES (\n ${input.projectId}, ${input.id}, ${input.kind}, ${input.version.title},\n ${input.owner.type}, ${input.owner.id}, 1, 2,\n ${input.version.createdAt}, ${input.version.createdAt}\n )\n ON CONFLICT (project_id, id) DO NOTHING\n RETURNING ${tx.unsafe(ARTIFACT_COLUMNS)}\n `\n if (!artifact) throw artifactStorageErrors.exists(input.id)\n return {\n artifact: parseArtifactRow(artifact),\n version: await insertVersion(tx, input.projectId, input.id, 1, input.version),\n }\n })\n }\n\n async publish(input: PublishArtifactVersionInput): Promise<PublishedArtifactVersion> {\n return runPgTransaction(this.sql, async (tx) => {\n // The row lock serializes concurrent publishes of one artifact.\n const [current] = await tx<PgRow[]>`\n SELECT kind, next_version FROM artifacts\n WHERE project_id = ${input.projectId} AND id = ${input.artifactId}\n FOR UPDATE\n `\n if (!current) throw artifactStorageErrors.notFound(input.artifactId)\n const kind = current.kind as ArtifactRecord[\"kind\"]\n if (kind !== input.kind) {\n throw artifactStorageErrors.kindMismatch(input.artifactId, kind, input.kind)\n }\n const version = await insertVersion(\n tx,\n input.projectId,\n input.artifactId,\n Number(current.next_version),\n input.version\n )\n const [artifact] = await tx<PgRow[]>`\n UPDATE artifacts\n SET title = ${input.version.title}, latest_version = ${version.version},\n next_version = ${version.version + 1}, updated_at = ${input.version.createdAt}\n WHERE project_id = ${input.projectId} AND id = ${input.artifactId}\n RETURNING ${tx.unsafe(ARTIFACT_COLUMNS)}\n `\n return { artifact: parseArtifactRow(artifact), version }\n })\n }\n\n async get(input: GetArtifactInput): Promise<ArtifactRecord | null> {\n const [row] = await this.sql<PgRow[]>`\n SELECT ${this.sql.unsafe(ARTIFACT_COLUMNS)} FROM artifacts\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n `\n return row ? parseArtifactRow(row) : null\n }\n\n async list(input: ListArtifactsInput): Promise<ListArtifactsResult> {\n const where = [\"a.project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n if (input.owner) {\n where.push(`a.owner_principal_type = $${params.length + 1}`)\n params.push(input.owner.type)\n where.push(`a.owner_principal_id = $${params.length + 1}`)\n params.push(input.owner.id)\n }\n if (input.originThreadId !== undefined) {\n where.push(\n `EXISTS (\n SELECT 1 FROM artifact_versions v\n WHERE v.project_id = a.project_id AND v.artifact_id = a.id\n AND v.origin_thread_id = $${params.length + 1}\n )`\n )\n params.push(input.originThreadId)\n }\n if (input.kind !== undefined) {\n where.push(`a.kind = $${params.length + 1}`)\n params.push(input.kind)\n }\n const clause = where.join(\" AND \")\n const [counted] = await this.sql.unsafe<{ total: number }[]>(\n `SELECT COUNT(*)::int AS total FROM artifacts a WHERE ${clause}`,\n params\n )\n const offset = input.offset ?? 0\n const rows = await this.sql.unsafe<PgRow[]>(\n `SELECT ${ARTIFACT_COLUMNS} FROM artifacts a WHERE ${clause}\n ORDER BY a.updated_at DESC, a.id ASC\n LIMIT $${params.length + 1} OFFSET $${params.length + 2}`,\n [...params, input.limit ?? null, offset]\n )\n const total = counted?.total ?? 0\n return { artifacts: rows.map(parseArtifactRow), hasMore: offset + rows.length < total, total }\n }\n\n async getVersion(input: GetArtifactVersionInput): Promise<ArtifactVersionRecord | null> {\n const [row] = await this.sql<PgRow[]>`\n SELECT ${this.sql.unsafe(VERSION_COLUMNS)} FROM artifact_versions\n WHERE project_id = ${input.projectId} AND artifact_id = ${input.artifactId}\n AND version = ${input.version}\n `\n return row ? parseArtifactVersionRow(row) : null\n }\n\n async listVersions(input: ListArtifactVersionsInput): Promise<ListArtifactVersionsResult> {\n const [counted] = await this.sql<{ total: number }[]>`\n SELECT COUNT(*)::int AS total FROM artifact_versions\n WHERE project_id = ${input.projectId} AND artifact_id = ${input.artifactId}\n `\n const offset = input.offset ?? 0\n const rows = await this.sql<PgRow[]>`\n SELECT ${this.sql.unsafe(VERSION_COLUMNS)} FROM artifact_versions\n WHERE project_id = ${input.projectId} AND artifact_id = ${input.artifactId}\n ORDER BY version DESC\n LIMIT ${input.limit ?? null} OFFSET ${offset}\n `\n const total = counted?.total ?? 0\n return {\n versions: rows.map(parseArtifactVersionRow),\n hasMore: offset + rows.length < total,\n total,\n }\n }\n\n async listReferencingVersions(\n input: ListReferencingVersionsInput\n ): Promise<ArtifactVersionRecord[]> {\n // An address names the artifact when the id is followed by nothing, a version, a file, or a\n // part.\n const prefix = `artifact:${input.artifactId}`\n const rows = await this.sql<PgRow[]>`\n SELECT ${this.sql.unsafe(VERSION_COLUMNS)} FROM artifact_versions v\n WHERE project_id = ${input.projectId} AND (artifact_id, version) IN (\n SELECT id, latest_version FROM artifacts WHERE project_id = ${input.projectId}\n ) AND EXISTS (\n SELECT 1 FROM jsonb_array_elements(v.refs) r\n WHERE left(r ->> 'address', ${prefix.length}::int) = ${prefix}\n AND substr(r ->> 'address', ${prefix.length + 1}::int, 1) IN ('', '@', '/', '#')\n )\n ORDER BY artifact_id\n `\n return rows.map(parseArtifactVersionRow)\n }\n\n async createFrameGrant(record: ArtifactFrameGrantRecord): Promise<void> {\n const rows = await this.sql`\n INSERT INTO artifact_frame_grants\n (project_id, token_hash, artifact_id, version, targets, created_at, expires_at)\n SELECT ${record.projectId}, ${record.tokenHash}, ${record.artifactId}, ${record.version},\n ${JSON.stringify(record.targets)}::text::jsonb, ${record.createdAt},\n ${record.expiresAt}\n WHERE EXISTS (\n SELECT 1 FROM artifacts WHERE project_id = ${record.projectId} AND id = ${record.artifactId}\n )\n RETURNING token_hash\n `\n if (rows.length === 0) throw artifactStorageErrors.notFound(record.artifactId)\n }\n\n async findFrameGrant(\n input: FindArtifactFrameGrantInput\n ): Promise<ArtifactFrameGrantRecord | null> {\n const [row] = await this.sql<PgRow[]>`\n SELECT ${this.sql.unsafe(FRAME_GRANT_COLUMNS)} FROM artifact_frame_grants\n WHERE project_id = ${input.projectId} AND token_hash = ${input.tokenHash}\n `\n return row ? parseArtifactFrameGrantRow(row) : null\n }\n\n async deleteExpiredFrameGrants(input: DeleteExpiredArtifactFrameGrantsInput): Promise<number> {\n const rows = await this.sql`\n DELETE FROM artifact_frame_grants\n WHERE (project_id, token_hash) IN (\n SELECT project_id, token_hash FROM artifact_frame_grants\n WHERE project_id = ${input.projectId} AND expires_at < ${input.expiredBefore}\n ORDER BY expires_at LIMIT ${input.limit}\n )\n RETURNING token_hash\n `\n return rows.length\n }\n\n async delete(input: DeleteArtifactInput): Promise<boolean> {\n // Versions and frame grants go with the artifact through ON DELETE CASCADE.\n const rows = await this.sql`\n DELETE FROM artifacts WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING id\n `\n return rows.length > 0\n }\n\n async deleteVersionsByOrigin(input: DeleteArtifactVersionsByOriginInput): Promise<number> {\n return runPgTransaction(this.sql, async (tx) => {\n // Lock the run's artifacts first, in id order so two of these never deadlock. `publish`\n // holds the same lock while it adds a version, and under READ COMMITTED each statement\n // below then reads a snapshot taken after any publish that held it committed. Without the\n // lock they would wait on a publish's row lock and then apply what they read before it: the\n // UPDATE would point `latest_version` back past the new version, and the DELETE would drop\n // an artifact whose versions were all the run's, cascading the new version with it.\n const locked = await tx<{ id: string }[]>`\n SELECT id FROM artifacts\n WHERE project_id = ${input.projectId} AND id IN (\n SELECT artifact_id FROM artifact_versions\n WHERE project_id = ${input.projectId} AND origin_run_id = ${input.runId}\n )\n ORDER BY id\n FOR UPDATE\n `\n const affected = locked.map((row) => row.id)\n if (affected.length === 0) return 0\n const deleted = await tx`\n DELETE FROM artifact_versions\n WHERE project_id = ${input.projectId} AND origin_run_id = ${input.runId}\n AND artifact_id IN ${tx(affected)}\n RETURNING version\n `\n // An artifact left without versions goes; the rest point at their newest remaining one.\n await tx`\n DELETE FROM artifacts a\n WHERE a.project_id = ${input.projectId} AND a.id IN ${tx(affected)}\n AND NOT EXISTS (\n SELECT 1 FROM artifact_versions v\n WHERE v.project_id = a.project_id AND v.artifact_id = a.id\n )\n `\n await tx`\n UPDATE artifacts a\n SET latest_version = latest.version, title = latest.title, updated_at = latest.created_at\n FROM (\n SELECT DISTINCT ON (artifact_id) artifact_id, version, title, created_at\n FROM artifact_versions\n WHERE project_id = ${input.projectId} AND artifact_id IN ${tx(affected)}\n ORDER BY artifact_id, version DESC\n ) latest\n WHERE a.project_id = ${input.projectId} AND a.id = latest.artifact_id\n `\n return deleted.length\n })\n }\n}\n\nasync function insertVersion(\n sql: SQLClient,\n projectId: string,\n artifactId: string,\n version: number,\n input: ArtifactVersionInput\n): Promise<ArtifactVersionRecord> {\n const [row] = await sql<PgRow[]>`\n INSERT INTO artifact_versions (\n project_id, artifact_id, version, title, entry, files, outline, refs,\n author_principal_type, author_principal_id, origin_thread_id, origin_run_id, created_at\n ) VALUES (\n ${projectId}, ${artifactId}, ${version}, ${input.title}, ${input.entry},\n ${JSON.stringify(input.files)}::text::jsonb,\n ${JSON.stringify(input.outline)}::text::jsonb,\n ${JSON.stringify(input.references)}::text::jsonb,\n ${input.author.type}, ${input.author.id},\n ${input.origin?.threadId ?? null}, ${input.origin?.runId ?? null}, ${input.createdAt}\n )\n RETURNING ${sql.unsafe(VERSION_COLUMNS)}\n `\n return parseArtifactVersionRow(row)\n}\n",
62
64
  "import { isIP } from \"node:net\"\nimport { connect as connectTls, type TLSSocket } from \"node:tls\"\nimport postgres from \"postgres\"\nimport { pgErrorCode } from \"./storage-errors\"\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/** One pool connection held outside the pool until `release()` — see `withReservedPgConnection`. */\nexport type ReservedSQL = postgres.ReservedSql<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 ...tlsOptions(options),\n }\n\n if (options.connectionString) {\n return assertDirectTlsTarget(postgres(options.connectionString, base), 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\n/**\n * What the server's certificate is checked against when TLS is opened directly: nothing\n * (`require`), the trusted CAs (`verify-ca`), or the CAs and the host name (`verify-full`).\n */\ntype DirectTlsVerification = \"none\" | \"ca\" | \"full\"\n\n// `sslnegotiation=direct` is read from the connection string, as libpq reads it. Without it,\n// porsager negotiates TLS the classic way: an SSLRequest on a plain TCP socket, then an upgrade of\n// that socket with `tls.connect({ socket })`. Bun 1.4.0–1.4.2 keeps every byte received on such an\n// upgraded socket in memory for good, so a process that reads a lot grows until it is killed.\n// Opening the TLS connection ourselves with `tls.connect({ host, port })` avoids that path, and\n// saves the SSLRequest round trip on every connection.\nfunction tlsOptions(options: CreatePgClientOptions): Record<string, unknown> {\n const verification = directTlsVerification(options)\n if (verification === null) {\n return options.ssl ? { ssl: options.ssl } : {}\n }\n // porsager must not negotiate TLS again on the socket we hand it; explicit options also\n // override the `sslmode` it would otherwise read from the connection string.\n return { ssl: false, sslnegotiation: null, socket: directTlsSocket(verification) }\n}\n\nfunction directTlsVerification(options: CreatePgClientOptions): DirectTlsVerification | null {\n const params = connectionStringParams(options.connectionString)\n if (params.get(\"sslnegotiation\") !== \"direct\") {\n return null\n }\n\n const sslmode =\n options.ssl === true\n ? \"verify-full\"\n : options.ssl ||\n (params.get(\"sslrootcert\") === \"system\"\n ? \"verify-full\"\n : (params.get(\"sslmode\") ?? params.get(\"ssl\")))\n switch (sslmode) {\n case \"require\":\n return \"none\"\n case \"verify-ca\":\n return \"ca\"\n case \"verify-full\":\n case \"true\":\n return \"full\"\n default:\n throw new Error(\n `[SixbPg] sslnegotiation=direct requires sslmode=require, verify-ca or verify-full, got ${\n sslmode ? `\"${sslmode}\"` : \"no sslmode\"\n }: a direct TLS connection has no plaintext fallback.`\n )\n }\n}\n\nfunction connectionStringParams(connectionString: string | undefined): URLSearchParams {\n return new URLSearchParams(connectionString?.split(\"?\")[1] ?? \"\")\n}\n\n/**\n * porsager's `socket` factory, called for every connection. It must return at once and never\n * throw: a factory that fails leaves its pool slot stuck in porsager's connecting state for good,\n * and one that returns an already-dead socket stalls the slot's next attempt (postgres.js 3.4.9).\n * Failures are reported by the socket instead, through the `error` and `close` events porsager\n * handles for its own sockets, and its connect timeout covers the handshake.\n */\nfunction directTlsSocket(\n verification: DirectTlsVerification\n): (options: postgres.ParsedOptions) => TLSSocket {\n let reportedRefusal = false\n\n return ({ host: [host = \"localhost\"], port: [port = 5432] }) => {\n const socket = connectTls({\n host,\n port,\n servername: isIP(host) ? undefined : host,\n // PostgreSQL 17+ accepts a direct TLS connection only for this ALPN protocol.\n ALPNProtocols: [\"postgresql\"],\n rejectUnauthorized: verification !== \"none\",\n ...(verification === \"ca\" ? { checkServerIdentity: () => undefined } : {}),\n })\n\n let reachedServer = false\n let secured = false\n socket.once(\"connect\", () => {\n reachedServer = true\n })\n socket.once(\"secureConnect\", () => {\n secured = true\n if (socket.alpnProtocol !== \"postgresql\") {\n socket.destroy(\n new Error(\n `[SixbPg] ${host}:${port} accepted TLS without selecting the \"postgresql\" protocol` +\n \" (ALPN), so it is not a PostgreSQL server accepting sslnegotiation=direct.\"\n )\n )\n }\n })\n // A server that expects an SSLRequest reads the TLS hello as a malformed startup packet and\n // closes the connection, which porsager reports as a bare reset. Say what it means, once.\n socket.once(\"error\", (error: Error) => {\n if (reportedRefusal || !reachedServer || secured) return\n if (![\"ECONNRESET\", \"EPIPE\", \"ERR_SOCKET_CLOSED\"].includes(pgErrorCode(error) ?? \"\")) return\n reportedRefusal = true\n console.error(\n `[SixbPg] ${host}:${port} closed the connection during a direct TLS handshake` +\n \" (sslnegotiation=direct). Direct TLS needs PostgreSQL 17 or later, reached without a\" +\n \" proxy or pooler that expects an SSLRequest; remove sslnegotiation=direct otherwise.\"\n )\n })\n return socket\n }\n}\n\nfunction assertDirectTlsTarget(sql: SQL, options: Record<string, unknown>): SQL {\n if (!(\"socket\" in options)) {\n return sql\n }\n if (sql.options.host.length !== 1 || sql.options.path) {\n throw new Error(\n \"[SixbPg] sslnegotiation=direct supports one TCP host:port in the connection string, not\" +\n \" several hosts or a Unix socket path.\"\n )\n }\n return sql\n}\n",
63
65
  "import { parseFileDownloadGrantRow } from \"@sixb/core/internal/storage\"\nimport type {\n DeleteExpiredFileDownloadGrantsInput,\n FileDownloadGrantRecord,\n FileDownloadGrantStorage,\n FindFileDownloadGrantInput,\n RevokeFileDownloadGrantInput,\n} from \"@sixb/core/storage\"\nimport type { PgStoreClient } from \"./transactions\"\n\nexport class PgFileDownloadGrantStorage implements FileDownloadGrantStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(record: FileDownloadGrantRecord): Promise<void> {\n await this.sql`\n INSERT INTO file_download_grants (\n project_id, id, token_hash, file, execution_id, created_at, expires_at\n ) VALUES (\n ${record.projectId}, ${record.id}, ${record.tokenHash},\n ${JSON.stringify(record.file)}::text::jsonb, ${record.executionId},\n ${record.createdAt}, ${record.expiresAt}\n )\n `\n }\n\n async findByTokenHash(\n input: FindFileDownloadGrantInput\n ): Promise<FileDownloadGrantRecord | null> {\n const [row] = await this.sql<PgFileDownloadGrantRow[]>`\n SELECT * FROM file_download_grants\n WHERE project_id = ${input.projectId} AND token_hash = ${input.tokenHash}\n `\n return row ? grantFromRow(row) : null\n }\n\n async revoke(input: RevokeFileDownloadGrantInput): Promise<FileDownloadGrantRecord | null> {\n const [row] = await this.sql<PgFileDownloadGrantRow[]>`\n UPDATE file_download_grants\n SET revoked_at = COALESCE(revoked_at, ${input.revokedAt})\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n return row ? grantFromRow(row) : null\n }\n\n async deleteExpired(input: DeleteExpiredFileDownloadGrantsInput): Promise<number> {\n const rows = await this.sql`\n DELETE FROM file_download_grants\n WHERE project_id = ${input.projectId} AND id IN (\n SELECT id FROM file_download_grants\n WHERE project_id = ${input.projectId} AND expires_at < ${input.expiredBefore}\n ORDER BY expires_at\n LIMIT ${input.limit}\n )\n RETURNING id\n `\n return rows.length\n }\n}\n\ninterface PgFileDownloadGrantRow {\n readonly [column: string]: unknown\n}\n\nfunction grantFromRow(row: PgFileDownloadGrantRow): FileDownloadGrantRecord {\n return parseFileDownloadGrantRow({\n id: row.id,\n projectId: row.project_id,\n tokenHash: row.token_hash,\n file: row.file,\n executionId: row.execution_id,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n revokedAt: row.revoked_at,\n })\n}\n",
64
66
  "import {\n DurableFileUploadSessions,\n type FileUploadSessionPersistence,\n type FileUploadSessionPersistenceBackend,\n fileUploadSessionReapAt,\n parseFileUploadSessionRow,\n} from \"@sixb/core/internal/file-upload-session-storage-provider\"\nimport type { FileUploadSession, ListAbandonedFileUploadSessionsInput } from \"@sixb/core/storage\"\nimport { type PgStoreClient, runPgTransaction } from \"./transactions\"\n\nexport class PgFileUploadSessionStorage extends DurableFileUploadSessions {\n constructor(sql: PgStoreClient) {\n super(new PgFileUploadSessionBackend(sql))\n }\n}\n\nclass PgFileUploadSessionBackend implements FileUploadSessionPersistenceBackend {\n constructor(private readonly sql: PgStoreClient) {}\n\n read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return run(new PgFileUploadSessionPersistence(this.sql, false))\n }\n\n transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return runPgTransaction(this.sql, (tx) => run(new PgFileUploadSessionPersistence(tx, true)))\n }\n}\n\nclass PgFileUploadSessionPersistence implements FileUploadSessionPersistence {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly locking: boolean\n ) {}\n\n async now(): Promise<Date> {\n const [row] = await this.sql<{ readonly now: Date }[]>`SELECT clock_timestamp() AS now`\n if (!row) throw new Error(\"[SixbPg] Database clock returned no row.\")\n return new Date(row.now)\n }\n\n async insert(session: FileUploadSession): Promise<boolean> {\n // A unique violation would abort the surrounding transaction; report the conflict instead.\n const rows = await this.sql`\n INSERT INTO file_upload_sessions (\n id, project_id, owner_principal_type, owner_principal_id, strategy, status, file_name,\n media_type, logical_path, expected_size_bytes, expected_digest, provider_upload,\n signed_parts, file_ref, created_at, expires_at, completed_at, aborted_at, reap_at\n ) VALUES (\n ${session.id}, ${session.projectId}, ${session.principal.type}, ${session.principal.id},\n ${session.strategy}, ${session.status}, ${session.fileName ?? null}, ${session.mediaType ?? null},\n ${session.logicalPath ?? null}, ${session.expectedSizeBytes ?? null},\n ${session.expectedDigest ?? null}, ${jsonText(session.providerUpload)}::text::jsonb,\n ${JSON.stringify(session.signedParts)}::text::jsonb, ${jsonText(session.fileRef)}::text::jsonb,\n ${session.createdAt}, ${session.expiresAt}, ${session.completedAt ?? null},\n ${session.abortedAt ?? null}, ${fileUploadSessionReapAt(session)}\n )\n ON CONFLICT (id) DO NOTHING\n RETURNING id\n `\n return rows.length === 1\n }\n\n async get(uploadId: string): Promise<FileUploadSession | null> {\n const [row] = this.locking\n ? await this.sql<PgFileUploadSessionRow[]>`\n SELECT * FROM file_upload_sessions WHERE id = ${uploadId} FOR UPDATE\n `\n : await this.sql<PgFileUploadSessionRow[]>`\n SELECT * FROM file_upload_sessions WHERE id = ${uploadId}\n `\n return row ? sessionFromRow(row) : null\n }\n\n async update(session: FileUploadSession): Promise<void> {\n await this.sql`\n UPDATE file_upload_sessions\n SET status = ${session.status},\n provider_upload = ${jsonText(session.providerUpload)}::text::jsonb,\n signed_parts = ${JSON.stringify(session.signedParts)}::text::jsonb,\n file_ref = ${jsonText(session.fileRef)}::text::jsonb,\n created_at = ${session.createdAt},\n expires_at = ${session.expiresAt},\n completed_at = ${session.completedAt ?? null},\n aborted_at = ${session.abortedAt ?? null},\n reap_at = ${fileUploadSessionReapAt(session)}\n WHERE id = ${session.id}\n `\n }\n\n async listAbandoned(\n input: ListAbandonedFileUploadSessionsInput\n ): Promise<readonly FileUploadSession[]> {\n const rows = await this.sql<PgFileUploadSessionRow[]>`\n SELECT * FROM file_upload_sessions\n WHERE project_id = ${input.projectId} AND status = 'pending'\n AND provider_upload IS NOT NULL AND expires_at <= ${input.now}\n ORDER BY expires_at, id COLLATE \"C\"\n LIMIT ${input.limit}\n `\n return rows.map(sessionFromRow)\n }\n\n async deleteReapable(now: Date): Promise<number> {\n const rows = await this.sql`\n DELETE FROM file_upload_sessions\n WHERE reap_at IS NOT NULL AND reap_at <= ${now}\n RETURNING id\n `\n return rows.length\n }\n}\n\ninterface PgFileUploadSessionRow {\n readonly [column: string]: unknown\n}\n\nfunction sessionFromRow(row: PgFileUploadSessionRow): FileUploadSession {\n return parseFileUploadSessionRow({\n id: row.id,\n projectId: row.project_id,\n ownerPrincipalType: row.owner_principal_type,\n ownerPrincipalId: row.owner_principal_id,\n strategy: row.strategy,\n status: row.status,\n fileName: row.file_name,\n mediaType: row.media_type,\n logicalPath: row.logical_path,\n expectedSizeBytes: row.expected_size_bytes,\n expectedDigest: row.expected_digest,\n providerUpload: row.provider_upload,\n signedParts: row.signed_parts,\n fileRef: row.file_ref,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n completedAt: row.completed_at,\n abortedAt: row.aborted_at,\n })\n}\n\n/** JSON text for a nullable jsonb column; always bind with the `::text::jsonb` double cast. */\nfunction jsonText(value: object | undefined): string | null {\n return value === undefined ? null : JSON.stringify(value)\n}\n",
@@ -70,12 +72,12 @@
70
72
  "import type {\n TimeseriesHistoryBatchInput,\n TimeseriesHistoryBatchResult,\n TimeseriesPoint,\n TimeseriesStorage,\n} from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"./pg-client\"\nimport type { PgStoreClient } from \"./transactions\"\n\n/**\n * PostgreSQL-based TimeseriesStorage implementation.\n *\n * Stores time-series data with JSONB values and TIMESTAMPTZ timestamps\n * for efficient querying of history and latest values.\n *\n * Requires `search_path` to be set to the Sixb schema on the connection.\n */\nexport class PgTimeseriesStorage implements TimeseriesStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async getHistory(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n propertyId: string\n from?: Date\n to?: Date\n limit?: number\n order?: \"asc\" | \"desc\"\n }): Promise<readonly TimeseriesPoint[]> {\n const order = params.order ?? \"asc\"\n\n // Build WHERE conditions using conditional fragments\n const fromFilter = params.from ? this.sql`AND at >= ${params.from}` : this.sql``\n const toFilter = params.to ? this.sql`AND at <= ${params.to}` : this.sql``\n const limitFilter = params.limit !== undefined ? this.sql`LIMIT ${params.limit}` : this.sql``\n\n const rows = await this.sql<TimeseriesDatabaseRow[]>`\n SELECT * FROM timeseries\n WHERE project_id = ${params.projectId}\n AND object_type_id = ${params.objectTypeId}\n AND object_id = ${params.objectId}\n AND property_id = ${params.propertyId}\n ${fromFilter}\n ${toFilter}\n ORDER BY at ${order === \"asc\" ? this.sql`ASC` : this.sql`DESC`}\n ${limitFilter}\n `\n\n return rows.map((row) => rowToPoint(row))\n }\n\n async getHistoryBatch(\n input: TimeseriesHistoryBatchInput\n ): Promise<readonly TimeseriesHistoryBatchResult[]> {\n if (input.series.length === 0) {\n return []\n }\n\n const order = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const params: unknown[] = []\n let nextIndex = 1\n const values = input.series\n .map((series, seriesIndex) => {\n const placeholders = [\n `$${nextIndex++}`,\n `$${nextIndex++}`,\n `$${nextIndex++}`,\n `$${nextIndex++}`,\n ]\n params.push(seriesIndex, series.objectTypeId, series.objectId, series.propertyId)\n return `(${placeholders.join(\", \")})`\n })\n .join(\", \")\n\n const projectIdPlaceholder = `$${nextIndex++}`\n params.push(input.projectId)\n\n const whereClauses = [\"1 = 1\"]\n if (input.from) {\n whereClauses.push(`timeseries.at >= $${nextIndex++}`)\n params.push(input.from)\n }\n if (input.to) {\n whereClauses.push(`timeseries.at <= $${nextIndex++}`)\n params.push(input.to)\n }\n\n let query = `\n WITH requested(series_index, object_type_id, object_id, property_id) AS (\n VALUES ${values}\n ),\n ranked AS (\n SELECT\n requested.series_index,\n timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY requested.series_index\n ORDER BY timeseries.at ${order}\n ) AS series_row_number\n FROM requested\n JOIN timeseries\n ON timeseries.project_id = ${projectIdPlaceholder}\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.object_id\n AND timeseries.property_id = requested.property_id\n WHERE ${whereClauses.join(\" AND \")}\n )\n SELECT * FROM ranked\n `\n\n if (input.limitPerSeries !== undefined) {\n query += ` WHERE series_row_number <= $${nextIndex++}`\n params.push(Math.max(0, input.limitPerSeries))\n }\n\n query += ` ORDER BY series_index ASC, at ${order}`\n\n const rows = await this.sql.unsafe<\n (TimeseriesDatabaseRow & {\n series_index: number | string\n series_row_number: number | string\n })[]\n >(query, params as SqlParameter[])\n const results = input.series.map((series) => ({\n ...series,\n points: [] as TimeseriesPoint[],\n }))\n\n for (const row of rows) {\n const result = results[Number(row.series_index)]\n if (result) {\n result.points.push(rowToPoint(row))\n }\n }\n\n return results\n }\n\n async getLatest(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n propertyId: string\n }): Promise<TimeseriesPoint | null> {\n const [row] = await this.sql<TimeseriesDatabaseRow[]>`\n SELECT * FROM timeseries_latest\n WHERE project_id = ${params.projectId}\n AND object_type_id = ${params.objectTypeId}\n AND object_id = ${params.objectId}\n AND property_id = ${params.propertyId}\n `\n\n return row ? rowToPoint(row) : null\n }\n}\n\nfunction rowToPoint(row: TimeseriesDatabaseRow): TimeseriesPoint {\n return {\n projectId: row.project_id,\n objectTypeId: row.object_type_id,\n objectId: row.object_id,\n propertyId: row.property_id,\n value: row.value,\n unit: row.unit ?? undefined,\n at: new Date(row.at),\n lastCommitId: row.last_commit_id,\n }\n}\n\ninterface TimeseriesDatabaseRow {\n project_id: string\n object_type_id: string\n object_id: string\n property_id: string\n value: unknown\n unit: string | null\n at: Date | string\n last_commit_id: string\n}\n",
71
73
  "import { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { assertWebhookRunExecution } from \"@sixb/core/internal/webhook-run-storage-provider\"\nimport type {\n ExecutionStorage,\n FinishWebhookRunInput,\n GetWebhookRunByDeliveryInput,\n ListWebhookRunsInput,\n ListWebhookRunsResult,\n RestartWebhookRunInput,\n StartWebhookRunInput,\n WebhookRunRecord,\n WebhookRunStorage,\n} from \"@sixb/core/storage\"\nimport { canRetryWebhookRun, WEBHOOK_RUN_FAILURE_CODES, WebhookRunError } from \"@sixb/core/storage\"\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 PgWebhookRunStorage implements WebhookRunStorage {\n constructor(\n private readonly sql: PgStoreClient,\n private readonly executions: ExecutionStorage\n ) {}\n\n async start(input: StartWebhookRunInput): Promise<WebhookRunRecord> {\n await assertWebhookRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n route: input.route,\n })\n try {\n const [row] = await this.sql<WebhookRunDatabaseRow[]>`\n INSERT INTO webhook_runs (\n project_id, id, execution_id, connector_id, webhook_id, status, method, route,\n started_at, request_body_bytes, request_body_sha256, idempotency_key\n ) VALUES (\n ${input.projectId}, ${input.id}, ${input.executionId}, ${input.connectorId},\n ${input.webhookId}, ${\"running\"}, ${input.method}, ${input.route},\n ${input.startedAt ?? new Date()}, ${input.requestBodyBytes},\n ${input.requestBodySha256}, ${input.idempotencyKey ?? null}\n )\n RETURNING *\n `\n return rowToWebhookRunRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new WebhookRunError(\n `[SixbPg] Webhook run '${input.id}' or delivery key already exists for project '${input.projectId}'.`,\n \"duplicate_run\"\n )\n }\n throw error\n }\n }\n\n async restart(input: RestartWebhookRunInput): Promise<WebhookRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WebhookRunDatabaseRow[]>`\n SELECT * FROM webhook_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n if (!existing) {\n throw new WebhookRunError(\n `[SixbPg] Webhook run '${input.id}' not found for project '${input.projectId}'.`,\n \"not_found\"\n )\n }\n if (!canRetryWebhookRun(rowToWebhookRunRecord(existing))) {\n throw new WebhookRunError(\n `[SixbPg] Webhook run '${input.id}' cannot restart from status '${existing.status}'.`,\n \"invalid_transition\"\n )\n }\n\n const [updated] = await tx<WebhookRunDatabaseRow[]>`\n UPDATE webhook_runs\n SET status = ${\"running\"}, started_at = ${input.startedAt ?? new Date()},\n finished_at = ${null}, response_status = ${null}, error = ${null}\n WHERE project_id = ${input.projectId} AND id = ${input.id} AND status = ${\"failed\"}\n RETURNING *\n `\n if (!updated) {\n throw new WebhookRunError(\n `[SixbPg] Webhook run '${input.id}' changed while restarting.`,\n \"invalid_transition\"\n )\n }\n return rowToWebhookRunRecord(updated)\n })\n }\n\n async finish(input: FinishWebhookRunInput): Promise<WebhookRunRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n const [existing] = await tx<WebhookRunDatabaseRow[]>`\n SELECT * FROM webhook_runs\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n FOR UPDATE\n `\n if (!existing) {\n throw new WebhookRunError(\n `[SixbPg] Webhook run '${input.id}' not found for project '${input.projectId}'.`,\n \"not_found\"\n )\n }\n if (existing.status !== \"running\") {\n throw new WebhookRunError(\n `[SixbPg] Webhook run '${input.id}' for project '${input.projectId}' is already terminal.`,\n \"invalid_transition\"\n )\n }\n\n const [updated] = await tx<WebhookRunDatabaseRow[]>`\n UPDATE webhook_runs\n SET status = ${input.status}, finished_at = ${input.finishedAt ?? new Date()},\n response_status = ${input.responseStatus ?? null},\n error = ${input.status === \"succeeded\" ? null : serializeSixbFailure(input.error, WEBHOOK_RUN_FAILURE_CODES)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n return rowToWebhookRunRecord(updated)\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WebhookRunRecord | null> {\n const [row] = await this.sql<WebhookRunDatabaseRow[]>`\n SELECT * FROM webhook_runs\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n return row ? rowToWebhookRunRecord(row) : null\n }\n\n async getByDelivery(input: GetWebhookRunByDeliveryInput): Promise<WebhookRunRecord | null> {\n const [row] = await this.sql<WebhookRunDatabaseRow[]>`\n SELECT * FROM webhook_runs\n WHERE project_id = ${input.projectId}\n AND connector_id = ${input.connectorId}\n AND webhook_id = ${input.webhookId}\n AND idempotency_key = ${input.idempotencyKey}\n `\n return row ? rowToWebhookRunRecord(row) : null\n }\n\n async list(input: ListWebhookRunsInput): Promise<ListWebhookRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], hasMore: false, total: 0 }\n\n const whereClauses = [\"project_id = $1\"]\n const params: SqlParameter[] = [input.projectId]\n let index = 2\n if (input.connectorId) {\n whereClauses.push(`connector_id = $${index++}`)\n params.push(input.connectorId)\n }\n if (input.webhookId) {\n whereClauses.push(`webhook_id = $${index++}`)\n params.push(input.webhookId)\n }\n if (input.idempotencyKey) {\n whereClauses.push(`idempotency_key = $${index++}`)\n params.push(input.idempotencyKey)\n }\n index = appendRunListFilters(whereClauses, params, index, input)\n\n const { rows, total, hasMore } = await queryRunList<WebhookRunDatabaseRow>({\n sql: this.sql,\n tableName: \"webhook_runs\",\n whereClauses,\n params,\n nextIndex: index,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { runs: rows.map(rowToWebhookRunRecord), hasMore, total }\n }\n}\n\nfunction rowToWebhookRunRecord(row: WebhookRunDatabaseRow): WebhookRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n connectorId: row.connector_id,\n webhookId: row.webhook_id,\n status: row.status,\n method: row.method,\n route: row.route,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n requestBodyBytes: Number(row.request_body_bytes),\n requestBodySha256: row.request_body_sha256,\n responseStatus: row.response_status != null ? Number(row.response_status) : undefined,\n idempotencyKey: row.idempotency_key ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WEBHOOK_RUN_FAILURE_CODES),\n }\n}\n\ninterface WebhookRunDatabaseRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly connector_id: string\n readonly webhook_id: string\n readonly status: WebhookRunRecord[\"status\"]\n readonly method: string\n readonly route: string\n readonly started_at: Date | string\n readonly finished_at: Date | string | null\n readonly request_body_bytes: number | string\n readonly request_body_sha256: string\n readonly response_status: number | string | null\n readonly idempotency_key: string | null\n readonly error: unknown | null\n}\n",
72
74
  "import type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowInterventionInput,\n CreateWorkflowInterventionInput,\n ExpireWorkflowInterventionInput,\n ListWorkflowInterventionsInput,\n ListWorkflowInterventionsResult,\n Principal,\n SubmitWorkflowInterventionInput,\n WorkflowInterventionRecord,\n WorkflowInterventionStorage,\n} from \"@sixb/core/storage\"\nimport { WorkflowInterventionError } 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 PgWorkflowInterventionStorage implements WorkflowInterventionStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n try {\n const [row] = await this.sql<WorkflowInterventionDatabaseRow[]>`\n INSERT INTO workflow_interventions (\n project_id,\n id,\n workflow_id,\n workflow_run_id,\n node_run_id,\n node_index,\n node_id,\n node_key,\n intervention_id,\n input,\n default_response,\n status,\n requested_at,\n expires_at\n ) VALUES (\n ${input.projectId},\n ${input.id},\n ${input.workflowId},\n ${input.workflowRunId},\n ${input.nodeRunId},\n ${input.nodeIndex},\n ${input.nodeId},\n ${input.nodeKey},\n ${input.interventionId},\n ${serializeRecord(input.input)}::text::jsonb,\n ${serializeRecord(input.defaultResponse)}::text::jsonb,\n ${\"pending\"},\n ${input.requestedAt ?? new Date()},\n ${input.expiresAt ?? null}\n )\n RETURNING *\n `\n\n return rowToWorkflowInterventionRecord(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new WorkflowInterventionError(\n `[SixbPg] Workflow intervention '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n async submit(input: SubmitWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await requirePendingIntervention(tx, input.projectId, input.id)\n\n const [updated] = await tx<WorkflowInterventionDatabaseRow[]>`\n UPDATE workflow_interventions\n SET\n status = ${\"submitted\"},\n submitted_at = ${input.submittedAt ?? new Date()},\n submitted_by = ${serializePrincipal(input.submittedBy)}::text::jsonb,\n response = ${serializeRecord(input.response)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowInterventionRecord(updated)\n })\n }\n\n async cancel(input: CancelWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await requirePendingIntervention(tx, input.projectId, input.id)\n\n const [updated] = await tx<WorkflowInterventionDatabaseRow[]>`\n UPDATE workflow_interventions\n SET\n status = ${\"cancelled\"},\n cancelled_at = ${input.cancelledAt ?? new Date()},\n cancelled_by = ${serializePrincipal(input.cancelledBy)}::text::jsonb\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowInterventionRecord(updated)\n })\n }\n\n async expire(input: ExpireWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return runPgTransaction(this.sql, async (tx) => {\n await requirePendingIntervention(tx, input.projectId, input.id)\n\n const [updated] = await tx<WorkflowInterventionDatabaseRow[]>`\n UPDATE workflow_interventions\n SET\n status = ${\"expired\"},\n expired_at = ${input.expiredAt ?? new Date()}\n WHERE project_id = ${input.projectId} AND id = ${input.id}\n RETURNING *\n `\n\n return rowToWorkflowInterventionRecord(updated)\n })\n }\n\n async getById(params: {\n projectId: string\n id: string\n }): Promise<WorkflowInterventionRecord | null> {\n const [row] = await this.sql<WorkflowInterventionDatabaseRow[]>`\n SELECT * FROM workflow_interventions\n WHERE project_id = ${params.projectId} AND id = ${params.id}\n `\n\n return row ? rowToWorkflowInterventionRecord(row) : null\n }\n\n async list(input: ListWorkflowInterventionsInput): Promise<ListWorkflowInterventionsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.workflowIds?.length === 0) {\n return {\n interventions: [],\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.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.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 if (input.workflowRunId) {\n whereClauses.push(`workflow_run_id = $${index++}`)\n params.push(input.workflowRunId)\n }\n\n if (input.nodeRunId) {\n whereClauses.push(`node_run_id = $${index++}`)\n params.push(input.nodeRunId)\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 if (input.interventionId) {\n whereClauses.push(`intervention_id = $${index++}`)\n params.push(input.interventionId)\n }\n\n if (input.requestedAfter) {\n whereClauses.push(`requested_at >= $${index++}`)\n params.push(input.requestedAfter)\n }\n\n if (input.requestedBefore) {\n whereClauses.push(`requested_at <= $${index++}`)\n params.push(input.requestedBefore)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const [totalRow] = await this.sql.unsafe<{ count: string | number }[]>(\n `SELECT COUNT(*)::bigint AS count FROM workflow_interventions ${where}`,\n params\n )\n\n const queryParams = [...params]\n let query = `\n SELECT * FROM workflow_interventions\n ${where}\n ORDER BY requested_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<WorkflowInterventionDatabaseRow[]>(query, queryParams)\n const total = Number(totalRow?.count ?? 0)\n\n return {\n interventions: rows.map(rowToWorkflowInterventionRecord),\n hasMore: offset + rows.length < total,\n total,\n }\n }\n}\n\nasync function requirePendingIntervention(\n sql: SQLClient,\n projectId: string,\n id: string\n): Promise<WorkflowInterventionDatabaseRow> {\n const [row] = await sql<WorkflowInterventionDatabaseRow[]>`\n SELECT * FROM workflow_interventions\n WHERE project_id = ${projectId} AND id = ${id}\n FOR UPDATE\n `\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbPg] Workflow intervention '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.status !== \"pending\") {\n throw new WorkflowInterventionError(\n `[SixbPg] Workflow intervention '${id}' for project '${projectId}' is not pending.`\n )\n }\n\n return row\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 serializePrincipal(principal: Principal | undefined): string | null {\n return principal ? JSON.stringify(principal) : null\n}\n\nfunction parsePrincipal(value: Principal | string | null): Principal | undefined {\n return typeof value === \"string\" ? (JSON.parse(value) as Principal) : (value ?? undefined)\n}\n\nfunction rowToWorkflowInterventionRecord(\n row: WorkflowInterventionDatabaseRow\n): WorkflowInterventionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowId: row.workflow_id,\n workflowRunId: row.workflow_run_id,\n nodeRunId: row.node_run_id,\n nodeIndex: Number(row.node_index),\n nodeId: row.node_id,\n nodeKey: row.node_key,\n interventionId: row.intervention_id,\n input: parseRecord(row.input),\n defaultResponse: parseRecord(row.default_response),\n status: row.status,\n requestedAt: new Date(row.requested_at),\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n submittedAt: row.submitted_at ? new Date(row.submitted_at) : undefined,\n submittedBy: parsePrincipal(row.submitted_by),\n response: row.response ? parseRecord(row.response) : undefined,\n cancelledAt: row.cancelled_at ? new Date(row.cancelled_at) : undefined,\n cancelledBy: parsePrincipal(row.cancelled_by),\n expiredAt: row.expired_at ? new Date(row.expired_at) : undefined,\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowInterventionError(\n `[SixbPg] Workflow intervention ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface WorkflowInterventionDatabaseRow {\n project_id: string\n id: string\n workflow_id: string\n workflow_run_id: string\n node_run_id: string\n node_index: number | string\n node_id: string\n node_key: string\n intervention_id: string\n input: WorkflowIOSnapshot | string\n default_response: WorkflowIOSnapshot | string\n status: WorkflowInterventionRecord[\"status\"]\n requested_at: Date | string\n expires_at: Date | string | null\n submitted_at: Date | string | null\n submitted_by: Principal | string | null\n response: WorkflowIOSnapshot | string | null\n cancelled_at: Date | string | null\n cancelled_by: Principal | string | null\n expired_at: Date | string | null\n}\n",
73
- "import type { JsonValue } from \"@sixb/core\"\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 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 ${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 actorId: input.actorId,\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, actor_id, status, prompt, attempt, created_at\n ) VALUES (\n ${input.projectId}, ${input.nodeRunId}, ${input.executionId}, ${input.actorId},\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.actorId) {\n whereClauses.push(`actor_id = $${index++}`)\n params.push(input.actorId)\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 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 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 actor_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 actorId: row.actor_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",
74
- "import {\n normalizeGetShareGrantByIdInput,\n normalizeListShareGrantsInput,\n normalizeRevokeShareGrantInput,\n normalizeShareGrantCreate,\n parseShareGrantRecord,\n} from \"@sixb/core/internal/share-grant-storage-provider\"\nimport type {\n CreateShareGrantInput,\n GetShareGrantByIdInput,\n ListShareGrantsInput,\n ListShareGrantsResult,\n RevokeShareGrantInput,\n ShareGrantRecord,\n ShareGrantStorage,\n} from \"@sixb/core/storage\"\nimport { ShareGrantStorageError } from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"./pg-client\"\nimport { isUniqueViolation } from \"./storage-errors\"\nimport type { PgStoreClient } from \"./transactions\"\n\nexport class PgShareGrantStorage implements ShareGrantStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateShareGrantInput): Promise<ShareGrantRecord> {\n const record = normalizeShareGrantCreate(input)\n try {\n const [row] = await this.sql<PgShareGrantRow[]>`\n INSERT INTO share_grants (\n project_id,\n id,\n definition_id,\n target_object_type_id,\n target_primary_id,\n issued_by_type,\n issued_by_id,\n authority_version,\n authority_snapshot,\n authority_digest,\n token_hash,\n destination_path,\n created_at,\n expires_at\n ) VALUES (\n ${record.projectId},\n ${record.id},\n ${record.definitionId},\n ${record.target.objectTypeId},\n ${record.target.primaryId},\n ${record.issuedBy.type},\n ${record.issuedBy.id},\n ${record.authoritySnapshot.version},\n ${JSON.stringify(record.authoritySnapshot)}::text::jsonb,\n ${record.authorityDigest},\n ${record.tokenHash},\n ${record.destinationPath},\n ${record.createdAt},\n ${record.expiresAt}\n )\n RETURNING *\n `\n if (!row) {\n throw invalidRecord(`Share grant '${record.id}' disappeared after create.`)\n }\n return recordFromRow(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new ShareGrantStorageError(\n \"duplicate\",\n `[SixbPg] Share grant '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeGetShareGrantByIdInput(input)\n const [row] = await this.sql<PgShareGrantRow[]>`\n SELECT *\n FROM share_grants\n WHERE project_id = ${normalized.projectId} AND id = ${normalized.id}\n `\n return row ? recordFromRow(row) : null\n }\n\n async list(input: ListShareGrantsInput): Promise<ListShareGrantsResult> {\n const normalized = normalizeListShareGrantsInput(input)\n const where = [\"project_id = $1\"]\n const params: SqlParameter[] = [normalized.projectId]\n let parameter = 2\n\n if (normalized.definitionId !== undefined) {\n where.push(`definition_id = $${parameter++}`)\n params.push(normalized.definitionId)\n }\n if (normalized.target !== undefined) {\n where.push(`target_object_type_id = $${parameter++}`, `target_primary_id = $${parameter++}`)\n params.push(normalized.target.objectTypeId, normalized.target.primaryId)\n }\n if (!normalized.includeRevoked) where.push(\"revoked_at IS NULL\")\n if (!normalized.includeExpired) {\n where.push(`expires_at > $${parameter++}`)\n params.push(normalized.now)\n }\n\n const predicate = where.join(\" AND \")\n const [totalRow] = await this.sql.unsafe<PgShareGrantCountRow[]>(\n `SELECT COUNT(*)::bigint AS total FROM share_grants WHERE ${predicate}`,\n params\n )\n const total = parseCount(totalRow?.total)\n\n const listParams = [...params, normalized.limit, normalized.offset]\n const rows = await this.sql.unsafe<PgShareGrantRow[]>(\n `\n SELECT *\n FROM share_grants\n WHERE ${predicate}\n ORDER BY created_at DESC, id DESC\n LIMIT $${parameter++} OFFSET $${parameter}\n `,\n listParams\n )\n const grants = rows.map(recordFromRow)\n return {\n grants,\n total,\n hasMore: normalized.offset + grants.length < total,\n }\n }\n\n async revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeRevokeShareGrantInput(input)\n const current = await this.getById({ projectId: normalized.projectId, id: normalized.id })\n if (!current) return null\n if (current.revokedAt) return current\n\n const revocation = normalizeRevokeShareGrantInput(normalized, current.createdAt)\n const [updated] = await this.sql<PgShareGrantRow[]>`\n UPDATE share_grants\n SET revoked_at = ${revocation.revokedAt},\n revoked_by_type = ${revocation.revokedBy.type},\n revoked_by_id = ${revocation.revokedBy.id}\n WHERE project_id = ${revocation.projectId}\n AND id = ${revocation.id}\n AND revoked_at IS NULL\n RETURNING *\n `\n if (updated) return recordFromRow(updated)\n\n return this.getById({ projectId: revocation.projectId, id: revocation.id })\n }\n}\n\ninterface PgShareGrantRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly definition_id: unknown\n readonly target_object_type_id: unknown\n readonly target_primary_id: unknown\n readonly issued_by_type: unknown\n readonly issued_by_id: unknown\n readonly authority_version: unknown\n readonly authority_snapshot: unknown\n readonly authority_digest: unknown\n readonly token_hash: unknown\n readonly destination_path: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly revoked_at: unknown\n readonly revoked_by_type: unknown\n readonly revoked_by_id: unknown\n}\n\ninterface PgShareGrantCountRow {\n readonly total: unknown\n}\n\nfunction recordFromRow(row: PgShareGrantRow): ShareGrantRecord {\n const authoritySnapshot = parseJsonColumn(row.authority_snapshot)\n if (\n !isRecord(authoritySnapshot) ||\n !Number.isSafeInteger(row.authority_version) ||\n authoritySnapshot.version !== row.authority_version\n ) {\n throw invalidRecord(\"Share authority version does not match its snapshot.\")\n }\n\n return parseShareGrantRecord({\n id: row.id,\n projectId: row.project_id,\n definitionId: row.definition_id,\n target: {\n objectTypeId: row.target_object_type_id,\n primaryId: row.target_primary_id,\n },\n issuedBy: { type: row.issued_by_type, id: row.issued_by_id },\n authoritySnapshot,\n authorityDigest: row.authority_digest,\n tokenHash: row.token_hash,\n destinationPath: row.destination_path,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n ...(row.revoked_by_type === null && row.revoked_by_id === null\n ? {}\n : { revokedBy: { type: row.revoked_by_type, id: row.revoked_by_id } }),\n })\n}\n\nfunction parseJsonColumn(value: unknown): unknown {\n if (typeof value !== \"string\") return value\n try {\n return JSON.parse(value)\n } catch (error) {\n throw invalidRecord(\"Share authority snapshot is not valid JSON.\", error)\n }\n}\n\nfunction parseCount(value: unknown): number {\n const count = Number(value)\n if (!Number.isSafeInteger(count) || count < 0) {\n throw invalidRecord(\"Share grant count is not a non-negative safe integer.\")\n }\n return count\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidRecord(message: string, cause?: unknown): ShareGrantStorageError {\n return new ShareGrantStorageError(\"invalid_record\", `[SixbPg] ${message}`, { cause })\n}\n",
75
+ "import type { JsonValue } from \"@sixb/core\"\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 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 ${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 getByExecutionIds(params: {\n readonly projectId: string\n readonly executionIds: readonly string[]\n }): Promise<readonly WorkflowRunRecord[]> {\n const executionIds = [...new Set(params.executionIds)]\n if (executionIds.length === 0) {\n return []\n }\n\n const rows = await this.sql<WorkflowRunDatabaseRow[]>`\n SELECT *\n FROM workflow_runs\n WHERE project_id = ${params.projectId}\n AND execution_id = ANY(${this.sql.array(executionIds)}::text[])\n `\n\n const byExecution = new Map(rows.map((row) => [row.execution_id, row]))\n return executionIds.flatMap((executionId) => {\n const row = byExecution.get(executionId)\n return row ? [rowToWorkflowRunRecord(row)] : []\n })\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 actorId: input.actorId,\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, actor_id, status, prompt, attempt, created_at\n ) VALUES (\n ${input.projectId}, ${input.nodeRunId}, ${input.executionId}, ${input.actorId},\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.actorId) {\n whereClauses.push(`actor_id = $${index++}`)\n params.push(input.actorId)\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 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 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 actor_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 actorId: row.actor_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",
76
+ "import {\n normalizeGetShareGrantByIdInput,\n normalizeListShareGrantsInput,\n normalizeRevokeShareGrantInput,\n normalizeShareGrantCreate,\n parseShareGrantRecord,\n} from \"@sixb/core/internal/share-grant-storage-provider\"\nimport type {\n CreateShareGrantInput,\n GetShareGrantByIdInput,\n GetShareGrantsByIdsInput,\n ListShareGrantsInput,\n ListShareGrantsResult,\n RevokeShareGrantInput,\n ShareGrantRecord,\n ShareGrantStorage,\n} from \"@sixb/core/storage\"\nimport { ShareGrantStorageError } from \"@sixb/core/storage\"\nimport type { SqlParameter } from \"./pg-client\"\nimport { isUniqueViolation } from \"./storage-errors\"\nimport type { PgStoreClient } from \"./transactions\"\n\nexport class PgShareGrantStorage implements ShareGrantStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateShareGrantInput): Promise<ShareGrantRecord> {\n const record = normalizeShareGrantCreate(input)\n try {\n const [row] = await this.sql<PgShareGrantRow[]>`\n INSERT INTO share_grants (\n project_id,\n id,\n definition_id,\n target_object_type_id,\n target_primary_id,\n issued_by_type,\n issued_by_id,\n authority_version,\n authority_snapshot,\n authority_digest,\n token_hash,\n destination_path,\n created_at,\n expires_at\n ) VALUES (\n ${record.projectId},\n ${record.id},\n ${record.definitionId},\n ${record.target.objectTypeId},\n ${record.target.primaryId},\n ${record.issuedBy.type},\n ${record.issuedBy.id},\n ${record.authoritySnapshot.version},\n ${JSON.stringify(record.authoritySnapshot)}::text::jsonb,\n ${record.authorityDigest},\n ${record.tokenHash},\n ${record.destinationPath},\n ${record.createdAt},\n ${record.expiresAt}\n )\n RETURNING *\n `\n if (!row) {\n throw invalidRecord(`Share grant '${record.id}' disappeared after create.`)\n }\n return recordFromRow(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new ShareGrantStorageError(\n \"duplicate\",\n `[SixbPg] Share grant '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeGetShareGrantByIdInput(input)\n const [row] = await this.sql<PgShareGrantRow[]>`\n SELECT *\n FROM share_grants\n WHERE project_id = ${normalized.projectId} AND id = ${normalized.id}\n `\n return row ? recordFromRow(row) : null\n }\n\n async getByIds(input: GetShareGrantsByIdsInput): Promise<readonly ShareGrantRecord[]> {\n const ids = [...new Set(input.ids)]\n if (ids.length === 0) {\n return []\n }\n\n const rows = await this.sql<PgShareGrantRow[]>`\n SELECT *\n FROM share_grants\n WHERE project_id = ${input.projectId}\n AND id = ANY(${this.sql.array(ids)}::text[])\n `\n\n const byId = new Map(rows.map((row) => [row.id, row]))\n return ids.flatMap((id) => {\n const row = byId.get(id)\n return row ? [recordFromRow(row)] : []\n })\n }\n\n async list(input: ListShareGrantsInput): Promise<ListShareGrantsResult> {\n const normalized = normalizeListShareGrantsInput(input)\n const where = [\"project_id = $1\"]\n const params: SqlParameter[] = [normalized.projectId]\n let parameter = 2\n\n if (normalized.definitionId !== undefined) {\n where.push(`definition_id = $${parameter++}`)\n params.push(normalized.definitionId)\n }\n if (normalized.target !== undefined) {\n where.push(`target_object_type_id = $${parameter++}`, `target_primary_id = $${parameter++}`)\n params.push(normalized.target.objectTypeId, normalized.target.primaryId)\n }\n if (!normalized.includeRevoked) where.push(\"revoked_at IS NULL\")\n if (!normalized.includeExpired) {\n where.push(`expires_at > $${parameter++}`)\n params.push(normalized.now)\n }\n\n const predicate = where.join(\" AND \")\n const [totalRow] = await this.sql.unsafe<PgShareGrantCountRow[]>(\n `SELECT COUNT(*)::bigint AS total FROM share_grants WHERE ${predicate}`,\n params\n )\n const total = parseCount(totalRow?.total)\n\n const listParams = [...params, normalized.limit, normalized.offset]\n const rows = await this.sql.unsafe<PgShareGrantRow[]>(\n `\n SELECT *\n FROM share_grants\n WHERE ${predicate}\n ORDER BY created_at DESC, id DESC\n LIMIT $${parameter++} OFFSET $${parameter}\n `,\n listParams\n )\n const grants = rows.map(recordFromRow)\n return {\n grants,\n total,\n hasMore: normalized.offset + grants.length < total,\n }\n }\n\n async revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeRevokeShareGrantInput(input)\n const current = await this.getById({ projectId: normalized.projectId, id: normalized.id })\n if (!current) return null\n if (current.revokedAt) return current\n\n const revocation = normalizeRevokeShareGrantInput(normalized, current.createdAt)\n const [updated] = await this.sql<PgShareGrantRow[]>`\n UPDATE share_grants\n SET revoked_at = ${revocation.revokedAt},\n revoked_by_type = ${revocation.revokedBy.type},\n revoked_by_id = ${revocation.revokedBy.id}\n WHERE project_id = ${revocation.projectId}\n AND id = ${revocation.id}\n AND revoked_at IS NULL\n RETURNING *\n `\n if (updated) return recordFromRow(updated)\n\n return this.getById({ projectId: revocation.projectId, id: revocation.id })\n }\n}\n\ninterface PgShareGrantRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly definition_id: unknown\n readonly target_object_type_id: unknown\n readonly target_primary_id: unknown\n readonly issued_by_type: unknown\n readonly issued_by_id: unknown\n readonly authority_version: unknown\n readonly authority_snapshot: unknown\n readonly authority_digest: unknown\n readonly token_hash: unknown\n readonly destination_path: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly revoked_at: unknown\n readonly revoked_by_type: unknown\n readonly revoked_by_id: unknown\n}\n\ninterface PgShareGrantCountRow {\n readonly total: unknown\n}\n\nfunction recordFromRow(row: PgShareGrantRow): ShareGrantRecord {\n const authoritySnapshot = parseJsonColumn(row.authority_snapshot)\n if (\n !isRecord(authoritySnapshot) ||\n !Number.isSafeInteger(row.authority_version) ||\n authoritySnapshot.version !== row.authority_version\n ) {\n throw invalidRecord(\"Share authority version does not match its snapshot.\")\n }\n\n return parseShareGrantRecord({\n id: row.id,\n projectId: row.project_id,\n definitionId: row.definition_id,\n target: {\n objectTypeId: row.target_object_type_id,\n primaryId: row.target_primary_id,\n },\n issuedBy: { type: row.issued_by_type, id: row.issued_by_id },\n authoritySnapshot,\n authorityDigest: row.authority_digest,\n tokenHash: row.token_hash,\n destinationPath: row.destination_path,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n ...(row.revoked_by_type === null && row.revoked_by_id === null\n ? {}\n : { revokedBy: { type: row.revoked_by_type, id: row.revoked_by_id } }),\n })\n}\n\nfunction parseJsonColumn(value: unknown): unknown {\n if (typeof value !== \"string\") return value\n try {\n return JSON.parse(value)\n } catch (error) {\n throw invalidRecord(\"Share authority snapshot is not valid JSON.\", error)\n }\n}\n\nfunction parseCount(value: unknown): number {\n const count = Number(value)\n if (!Number.isSafeInteger(count) || count < 0) {\n throw invalidRecord(\"Share grant count is not a non-negative safe integer.\")\n }\n return count\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidRecord(message: string, cause?: unknown): ShareGrantStorageError {\n return new ShareGrantStorageError(\"invalid_record\", `[SixbPg] ${message}`, { cause })\n}\n",
75
77
  "import {\n normalizeGetShareSessionByIdInput,\n normalizeRenewShareSessionIfValidInput,\n normalizeRevokeShareSessionInput,\n normalizeShareSessionCreate,\n parseShareSessionRecord,\n} from \"@sixb/core/internal/share-session-storage-provider\"\nimport type {\n CreateShareSessionInput,\n GetShareSessionByIdInput,\n RenewShareSessionIfValidInput,\n RevokeShareSessionInput,\n ShareSessionRecord,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ShareSessionStorageError } from \"@sixb/core/storage\"\nimport { isForeignKeyViolation, isUniqueViolation } from \"./storage-errors\"\nimport type { PgStoreClient } from \"./transactions\"\n\nexport class PgShareSessionStorage implements ShareSessionStorage {\n constructor(private readonly sql: PgStoreClient) {}\n\n async create(input: CreateShareSessionInput): Promise<ShareSessionRecord> {\n const record = normalizeShareSessionCreate(input)\n try {\n const [row] = await this.sql<PgShareSessionRow[]>`\n INSERT INTO share_sessions (\n project_id, id, grant_id, token_hash, created_at, expires_at, absolute_expires_at\n ) VALUES (\n ${record.projectId}, ${record.id}, ${record.grantId}, ${record.tokenHash},\n ${record.createdAt}, ${record.expiresAt}, ${record.absoluteExpiresAt}\n )\n RETURNING *\n `\n if (!row) throw invalidRecord(`Share session '${record.id}' disappeared after create.`)\n return recordFromRow(row)\n } catch (error) {\n if (isUniqueViolation(error)) {\n throw new ShareSessionStorageError(\n \"duplicate\",\n `[SixbPg] Share session '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n if (isForeignKeyViolation(error)) {\n throw new ShareSessionStorageError(\n \"invalid_input\",\n `[SixbPg] Share grant '${record.grantId}' does not exist in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(input: GetShareSessionByIdInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeGetShareSessionByIdInput(input)\n const [row] = await this.sql<PgShareSessionRow[]>`\n SELECT * FROM share_sessions\n WHERE project_id = ${normalized.projectId} AND id = ${normalized.id}\n `\n return row ? recordFromRow(row) : null\n }\n\n async renewIfValid(input: RenewShareSessionIfValidInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRenewShareSessionIfValidInput(input)\n const [row] = await this.sql<PgShareSessionRow[]>`\n UPDATE share_sessions\n SET expires_at = LEAST(absolute_expires_at, GREATEST(expires_at, ${normalized.expiresAt}))\n WHERE project_id = ${normalized.projectId}\n AND id = ${normalized.id}\n AND grant_id = ${normalized.grantId}\n AND token_hash = ${normalized.tokenHash}\n AND revoked_at IS NULL\n AND created_at <= ${normalized.now}\n AND expires_at > ${normalized.now}\n AND absolute_expires_at > ${normalized.now}\n RETURNING *\n `\n return row ? recordFromRow(row) : null\n }\n\n async revoke(input: RevokeShareSessionInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRevokeShareSessionInput(input)\n const current = await this.getById(normalized)\n if (!current || current.revokedAt) return current\n const revocation = normalizeRevokeShareSessionInput(normalized, current.createdAt)\n const [updated] = await this.sql<PgShareSessionRow[]>`\n UPDATE share_sessions\n SET revoked_at = ${revocation.revokedAt}\n WHERE project_id = ${revocation.projectId}\n AND id = ${revocation.id}\n AND revoked_at IS NULL\n RETURNING *\n `\n if (updated) return recordFromRow(updated)\n return this.getById({ projectId: revocation.projectId, id: revocation.id })\n }\n}\n\ninterface PgShareSessionRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly grant_id: unknown\n readonly token_hash: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly absolute_expires_at: unknown\n readonly revoked_at: unknown\n}\n\nfunction recordFromRow(row: PgShareSessionRow): ShareSessionRecord {\n return parseShareSessionRecord({\n projectId: row.project_id,\n id: row.id,\n grantId: row.grant_id,\n tokenHash: row.token_hash,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n absoluteExpiresAt: row.absolute_expires_at,\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n })\n}\n\nfunction invalidRecord(message: string, cause?: unknown): ShareSessionStorageError {\n return new ShareSessionStorageError(\"invalid_record\", `[SixbPg] ${message}`, { cause })\n}\n",
76
78
  "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"
77
79
  ],
78
- "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
79
- "debugId": "971E14D4D5198C8B64756E2164756E21",
80
+ "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
81
+ "debugId": "E2B2D974990D4A3064756E2164756E21",
80
82
  "names": []
81
83
  }