{"id":"@lssm-tech/integration.provider-database","slug":"integration.provider-database","name":"@lssm-tech/integration.provider-database","version":"2.0.5","path":"packages/integrations/provider-database","manifestPath":"packages/integrations/provider-database/package.json","manifestBlobSha":"cf19c3e4113b641e017c28590254b02c47ecf8c9","layer":"integrations","physicalArea":null,"primaryArea":"integrations-and-providers","classification":{"privateDeclared":null,"catalogFamily":"integrations","catalogKind":"integration","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Database provider implementations for ContractSpec.","descriptionOrigin":"package.json","catalog":{"family":"integrations","kind":"integration","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./auth-seam","./database","./generated/contractspec-schema.generated","./generated/contractspec-schema.manifest.generated","./governed-execute-query","./governed-mutation","./governed-read","./governed-relational-read","./governed-sql-guards","./governed-versioning","./impls","./impls/drizzle-contractspec","./impls/supabase-psql","./postgres-json-semantics","./typed-read","./typed-read/relational-read","./typed-read/relational-read.type-test","./version-column-migration","./version-token-source"],"documentation":[{"title":"Integration Provider Database documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.provider-database","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.integration.provider.database","title":"Integration Provider Database","description":"Database provider implementations for ContractSpec.","status":"active","useCases":["Adopt database provider implementations for contractspec"],"aliases":["database adapter","ORM","integration","provider","database"],"pythonEquivalents":["SQLAlchemy"],"canonicalImports":[{"from":"@lssm-tech/integration.provider-database","symbols":[]},{"from":"@lssm-tech/integration.provider-database/auth-seam","symbols":[]},{"from":"@lssm-tech/integration.provider-database/database","symbols":[]},{"from":"@lssm-tech/integration.provider-database/generated/contractspec-schema.generated","symbols":[]},{"from":"@lssm-tech/integration.provider-database/generated/contractspec-schema.manifest.generated","symbols":[]},{"from":"@lssm-tech/integration.provider-database/governed-execute-query","symbols":[]},{"from":"@lssm-tech/integration.provider-database/governed-mutation","symbols":[]},{"from":"@lssm-tech/integration.provider-database/governed-read","symbols":[]},{"from":"@lssm-tech/integration.provider-database/governed-relational-read","symbols":[]},{"from":"@lssm-tech/integration.provider-database/governed-sql-guards","symbols":[]},{"from":"@lssm-tech/integration.provider-database/impls","symbols":[]},{"from":"@lssm-tech/integration.provider-database/impls/drizzle-contractspec","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/integration.provider-database package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/auth-seam","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/database","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/generated/contractspec-schema.generated","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/generated/contractspec-schema.manifest.generated","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/governed-execute-query","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/governed-mutation","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/governed-read","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/governed-relational-read","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/governed-sql-guards","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/impls","symbols":[]},{"capabilityId":"package.lssm.tech.integration.provider.database","from":"@lssm-tech/integration.provider-database/impls/drizzle-contractspec","symbols":[]}],"scripts":{"build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","clean":"rimraf dist .turbo","lint:check":"node ../../../scripts/biome.cjs check .","lint:fix":"node ../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../scripts/biome.cjs check --write .","test":"bun test","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/integration.runtime":"workspace:^","@lssm-tech/lib.contracts-spec-core":"workspace:^","@lssm-tech/lib.contracts-integrations":"workspace:^","@lssm-tech/lib.contracts-runtime-core":"workspace:^","drizzle-orm":"catalog:data"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.contractspec-drizzle-gen":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@lssm-tech/lib.schema":"workspace:*","@types/bun":"catalog:types","postgres":"^3.4.9","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./auth-seam":"./src/auth-seam.ts","./database":"./src/database.ts","./generated/contractspec-schema.generated":"./src/generated/contractspec-schema.generated.ts","./generated/contractspec-schema.manifest.generated":"./src/generated/contractspec-schema.manifest.generated.ts","./governed-execute-query":"./src/governed-execute-query.ts","./governed-mutation":"./src/governed-mutation.ts","./governed-read":"./src/governed-read.ts","./governed-relational-read":"./src/governed-relational-read.ts","./governed-sql-guards":"./src/governed-sql-guards.ts","./governed-versioning":"./src/governed-versioning.ts","./impls":"./src/impls/index.ts","./impls/drizzle-contractspec":"./src/impls/drizzle-contractspec.ts","./impls/supabase-psql":"./src/impls/supabase-psql.ts","./postgres-json-semantics":"./src/postgres-json-semantics.ts","./typed-read":"./src/typed-read/index.ts","./typed-read/relational-read":"./src/typed-read/relational-read.ts","./typed-read/relational-read.type-test":"./src/typed-read/relational-read.type-test.ts","./version-column-migration":"./src/version-column-migration.ts","./version-token-source":"./src/version-token-source.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./auth-seam":{"types":"./dist/auth-seam.d.ts","bun":"./dist/auth-seam.js","node":"./dist/node/auth-seam.js","default":"./dist/auth-seam.js"},"./database":{"types":"./dist/database.d.ts","bun":"./dist/database.js","node":"./dist/node/database.js","default":"./dist/database.js"},"./generated/contractspec-schema.generated":{"types":"./dist/generated/contractspec-schema.generated.d.ts","bun":"./dist/generated/contractspec-schema.generated.js","node":"./dist/node/generated/contractspec-schema.generated.js","default":"./dist/generated/contractspec-schema.generated.js"},"./generated/contractspec-schema.manifest.generated":{"types":"./dist/generated/contractspec-schema.manifest.generated.d.ts","bun":"./dist/generated/contractspec-schema.manifest.generated.js","node":"./dist/node/generated/contractspec-schema.manifest.generated.js","default":"./dist/generated/contractspec-schema.manifest.generated.js"},"./governed-execute-query":{"types":"./dist/governed-execute-query.d.ts","bun":"./dist/governed-execute-query.js","node":"./dist/node/governed-execute-query.js","default":"./dist/governed-execute-query.js"},"./governed-mutation":{"types":"./dist/governed-mutation.d.ts","bun":"./dist/governed-mutation.js","node":"./dist/node/governed-mutation.js","default":"./dist/governed-mutation.js"},"./governed-read":{"types":"./dist/governed-read.d.ts","bun":"./dist/governed-read.js","node":"./dist/node/governed-read.js","default":"./dist/governed-read.js"},"./governed-relational-read":{"types":"./dist/governed-relational-read.d.ts","bun":"./dist/governed-relational-read.js","node":"./dist/node/governed-relational-read.js","default":"./dist/governed-relational-read.js"},"./governed-sql-guards":{"types":"./dist/governed-sql-guards.d.ts","bun":"./dist/governed-sql-guards.js","node":"./dist/node/governed-sql-guards.js","default":"./dist/governed-sql-guards.js"},"./governed-versioning":{"types":"./dist/governed-versioning.d.ts","bun":"./dist/governed-versioning.js","node":"./dist/node/governed-versioning.js","default":"./dist/governed-versioning.js"},"./impls":{"types":"./dist/impls/index.d.ts","bun":"./dist/impls/index.js","node":"./dist/node/impls/index.js","default":"./dist/impls/index.js"},"./impls/drizzle-contractspec":{"types":"./dist/impls/drizzle-contractspec.d.ts","bun":"./dist/impls/drizzle-contractspec.js","node":"./dist/node/impls/drizzle-contractspec.js","default":"./dist/impls/drizzle-contractspec.js"},"./impls/supabase-psql":{"types":"./dist/impls/supabase-psql.d.ts","bun":"./dist/impls/supabase-psql.js","node":"./dist/node/impls/supabase-psql.js","default":"./dist/impls/supabase-psql.js"},"./postgres-json-semantics":{"types":"./dist/postgres-json-semantics.d.ts","bun":"./dist/postgres-json-semantics.js","node":"./dist/node/postgres-json-semantics.js","default":"./dist/postgres-json-semantics.js"},"./typed-read":{"types":"./dist/typed-read/index.d.ts","bun":"./dist/typed-read/index.js","node":"./dist/node/typed-read/index.js","default":"./dist/typed-read/index.js"},"./typed-read/relational-read":{"types":"./dist/typed-read/relational-read.d.ts","bun":"./dist/typed-read/relational-read.js","node":"./dist/node/typed-read/relational-read.js","default":"./dist/typed-read/relational-read.js"},"./typed-read/relational-read.type-test":{"types":"./dist/typed-read/relational-read.type-test.d.ts","bun":"./dist/typed-read/relational-read.type-test.js","node":"./dist/node/typed-read/relational-read.type-test.js","default":"./dist/typed-read/relational-read.type-test.js"},"./version-column-migration":{"types":"./dist/version-column-migration.d.ts","bun":"./dist/version-column-migration.js","node":"./dist/node/version-column-migration.js","default":"./dist/version-column-migration.js"},"./version-token-source":{"types":"./dist/version-token-source.d.ts","bun":"./dist/version-token-source.js","node":"./dist/node/version-token-source.js","default":"./dist/version-token-source.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/integration.provider-database","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/integrations/provider-database/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./auth-seam","importPath":"@lssm-tech/integration.provider-database/auth-seam","target":"./src/auth-seam.ts","targets":[{"conditions":[],"target":"./src/auth-seam.ts","sourcePath":"packages/integrations/provider-database/src/auth-seam.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/auth-seam.ts","sourceStatus":"verified source file"}]},{"subpath":"./database","importPath":"@lssm-tech/integration.provider-database/database","target":"./src/database.ts","targets":[{"conditions":[],"target":"./src/database.ts","sourcePath":"packages/integrations/provider-database/src/database.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/database.ts","sourceStatus":"verified source file"}]},{"subpath":"./generated/contractspec-schema.generated","importPath":"@lssm-tech/integration.provider-database/generated/contractspec-schema.generated","target":"./src/generated/contractspec-schema.generated.ts","targets":[{"conditions":[],"target":"./src/generated/contractspec-schema.generated.ts","sourcePath":"packages/integrations/provider-database/src/generated/contractspec-schema.generated.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/generated/contractspec-schema.generated.ts","sourceStatus":"verified source file"}]},{"subpath":"./generated/contractspec-schema.manifest.generated","importPath":"@lssm-tech/integration.provider-database/generated/contractspec-schema.manifest.generated","target":"./src/generated/contractspec-schema.manifest.generated.ts","targets":[{"conditions":[],"target":"./src/generated/contractspec-schema.manifest.generated.ts","sourcePath":"packages/integrations/provider-database/src/generated/contractspec-schema.manifest.generated.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/generated/contractspec-schema.manifest.generated.ts","sourceStatus":"verified source file"}]},{"subpath":"./governed-execute-query","importPath":"@lssm-tech/integration.provider-database/governed-execute-query","target":"./src/governed-execute-query.ts","targets":[{"conditions":[],"target":"./src/governed-execute-query.ts","sourcePath":"packages/integrations/provider-database/src/governed-execute-query.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/governed-execute-query.ts","sourceStatus":"verified source file"}]},{"subpath":"./governed-mutation","importPath":"@lssm-tech/integration.provider-database/governed-mutation","target":"./src/governed-mutation.ts","targets":[{"conditions":[],"target":"./src/governed-mutation.ts","sourcePath":"packages/integrations/provider-database/src/governed-mutation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/governed-mutation.ts","sourceStatus":"verified source file"}]},{"subpath":"./governed-read","importPath":"@lssm-tech/integration.provider-database/governed-read","target":"./src/governed-read.ts","targets":[{"conditions":[],"target":"./src/governed-read.ts","sourcePath":"packages/integrations/provider-database/src/governed-read.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/governed-read.ts","sourceStatus":"verified source file"}]},{"subpath":"./governed-relational-read","importPath":"@lssm-tech/integration.provider-database/governed-relational-read","target":"./src/governed-relational-read.ts","targets":[{"conditions":[],"target":"./src/governed-relational-read.ts","sourcePath":"packages/integrations/provider-database/src/governed-relational-read.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/governed-relational-read.ts","sourceStatus":"verified source file"}]},{"subpath":"./governed-sql-guards","importPath":"@lssm-tech/integration.provider-database/governed-sql-guards","target":"./src/governed-sql-guards.ts","targets":[{"conditions":[],"target":"./src/governed-sql-guards.ts","sourcePath":"packages/integrations/provider-database/src/governed-sql-guards.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/governed-sql-guards.ts","sourceStatus":"verified source file"}]},{"subpath":"./governed-versioning","importPath":"@lssm-tech/integration.provider-database/governed-versioning","target":"./src/governed-versioning.ts","targets":[{"conditions":[],"target":"./src/governed-versioning.ts","sourcePath":"packages/integrations/provider-database/src/governed-versioning.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/governed-versioning.ts","sourceStatus":"verified source file"}]},{"subpath":"./impls","importPath":"@lssm-tech/integration.provider-database/impls","target":"./src/impls/index.ts","targets":[{"conditions":[],"target":"./src/impls/index.ts","sourcePath":"packages/integrations/provider-database/src/impls/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/impls/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./impls/drizzle-contractspec","importPath":"@lssm-tech/integration.provider-database/impls/drizzle-contractspec","target":"./src/impls/drizzle-contractspec.ts","targets":[{"conditions":[],"target":"./src/impls/drizzle-contractspec.ts","sourcePath":"packages/integrations/provider-database/src/impls/drizzle-contractspec.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/impls/drizzle-contractspec.ts","sourceStatus":"verified source file"}]},{"subpath":"./impls/supabase-psql","importPath":"@lssm-tech/integration.provider-database/impls/supabase-psql","target":"./src/impls/supabase-psql.ts","targets":[{"conditions":[],"target":"./src/impls/supabase-psql.ts","sourcePath":"packages/integrations/provider-database/src/impls/supabase-psql.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/impls/supabase-psql.ts","sourceStatus":"verified source file"}]},{"subpath":"./postgres-json-semantics","importPath":"@lssm-tech/integration.provider-database/postgres-json-semantics","target":"./src/postgres-json-semantics.ts","targets":[{"conditions":[],"target":"./src/postgres-json-semantics.ts","sourcePath":"packages/integrations/provider-database/src/postgres-json-semantics.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/postgres-json-semantics.ts","sourceStatus":"verified source file"}]},{"subpath":"./typed-read","importPath":"@lssm-tech/integration.provider-database/typed-read","target":"./src/typed-read/index.ts","targets":[{"conditions":[],"target":"./src/typed-read/index.ts","sourcePath":"packages/integrations/provider-database/src/typed-read/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/typed-read/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./typed-read/relational-read","importPath":"@lssm-tech/integration.provider-database/typed-read/relational-read","target":"./src/typed-read/relational-read.ts","targets":[{"conditions":[],"target":"./src/typed-read/relational-read.ts","sourcePath":"packages/integrations/provider-database/src/typed-read/relational-read.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/typed-read/relational-read.ts","sourceStatus":"verified source file"}]},{"subpath":"./typed-read/relational-read.type-test","importPath":"@lssm-tech/integration.provider-database/typed-read/relational-read.type-test","target":"./src/typed-read/relational-read.type-test.ts","targets":[{"conditions":[],"target":"./src/typed-read/relational-read.type-test.ts","sourcePath":"packages/integrations/provider-database/src/typed-read/relational-read.type-test.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/typed-read/relational-read.type-test.ts","sourceStatus":"verified source file"}]},{"subpath":"./version-column-migration","importPath":"@lssm-tech/integration.provider-database/version-column-migration","target":"./src/version-column-migration.ts","targets":[{"conditions":[],"target":"./src/version-column-migration.ts","sourcePath":"packages/integrations/provider-database/src/version-column-migration.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/version-column-migration.ts","sourceStatus":"verified source file"}]},{"subpath":"./version-token-source","importPath":"@lssm-tech/integration.provider-database/version-token-source","target":"./src/version-token-source.ts","targets":[{"conditions":[],"target":"./src/version-token-source.ts","sourcePath":"packages/integrations/provider-database/src/version-token-source.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/src/version-token-source.ts","sourceStatus":"verified source file"}]}],"entryCount":20,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Integration Provider Database documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.provider-database","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.provider-database.txt"},"readme":{"status":"available","body":"# @lssm-tech/integration.provider-database\n\nWebsite: https://contractspec.io\n\nDatabase provider implementations for ContractSpec.\n\n## Usage\n\nImport the root entrypoint for the domain surface, or import a concrete implementation from the `./impls/*` subpaths.\nUse `./governed-read` when a contracts-spec `DataViewQueryGenerator` emits a `database.query.readonly` descriptor and you need to execute that governed read through a `DatabaseProvider`. The helper builds parameterized SQL from field mappings and keeps SQL construction inside this adapter package.\nGoverned reads support offset descriptors and cursor descriptors from\n`DataViewDatabaseBinding.pagination`. Cursor descriptors add a parameterized\n`cursorField > cursor` predicate only when the cursor field is present in the\ncontract-owned select mapping; unknown cursor fields fail before provider\nexecution, and `maxPageSize` is enforced before the query reaches the provider.\n`executeQuery` exposes the governed read as a `Transport`-shaped resolver for the data-fetching engine: it executes a canonical `QueryEnvelope` and returns a `ContractResult<QueryResultEnvelope>` carrying a real `versionToken` (read from the entity's `version` column with `versionTokenFromColumn()`) for the engine's etag / optimistic-concurrency path.\n\nUse `./governed-mutation` for first-class database writes after the owning domain command has planned a portable `database.mutation.execute@2.0.0` envelope. The helper validates actor, tenant, domain-command authority, policy decision, idempotency key, transaction boundary, expected write set, audit refs, replay ref, and correlation ref before running the provider transaction. Drizzle/PostgreSQL rendering remains in this integration package, not in contracts-spec core.\n\n### Version-governed entities\n\nDeclare the entities whose writes need optimistic concurrency once, at the composition root, and pass the registry to every governed mutation:\n\n```ts\nconst versioning = createGovernedVersionRegistry([\n\t{ entity: 'workspace', table: 'workspaces' }, // schema public, column version\n]);\nawait applyVersionColumnMigration(provider, buildVersionColumnMigration(versioning));\n\nawait executeGovernedMutation({\n\tdescriptor: { ...renameDescriptor, expectedVersionToken: ctx.queryEnvelope?.versionToken },\n\tprovider,\n\tversioning,\n});\n```\n\n- `buildVersionColumnMigration(registry)` returns idempotent `up` statements and `down` statements. `up` adds a missing column as `bigint NOT NULL DEFAULT 1` (existing rows start at 1) and marks it with a column comment, or normalizes an existing `smallint`/`integer`/`bigint` column (NULLs backfilled to 1, `NOT NULL DEFAULT 1`; any other type fails the migration). It then installs a `BEFORE UPDATE` trigger that sets `NEW.<column> = OLD.<column> + 1`, so writers that bypass the store still advance the version. `down` removes the triggers and functions and drops only the columns `up` added. Building the migration fails when two entities of one schema would share a trigger function name.\n- A descriptor without a schema matches the one registered schema that governs its table and fails when several do; the governed SQL always names the registered schema, so it never depends on the connection's `search_path`.\n- On a governed table, insert returns the new `versionToken`; update and delete must carry `expectedVersionToken`, check it in the same statement (`AND <column> = $n::bigint ... RETURNING <column>`) and return the new token (update) or none (delete). Their `where` must name one row by its key: the store refuses a write that returns more than one row, but it does not see rows the version filter excluded.\n- A missing, stale or non-integer token (BIGINT range only), or a row that no longer matches, throws `ContractSpecError` with the typed Core version conflict (`CONFLICT` 409, `metadata.versionConflict.reason` = `missing`, `stale` or `gone`, and the stored version in `versionToken` when the row exists). The transaction rolls back and the idempotency key is not stored. The data engine resolves it with the mutation's conflict policy; under `client-wins` a `gone` row fails the mutation and rolls the optimistic write back.\n- A write that returns more than one row, a value for the version column itself, or an `expectedVersionToken` on a table that is not in the registry fails with an error.\n- Clients send the expected token as `MutationRequest.versionToken`; the engine forwards it as `QueryEnvelope.versionToken` and REST carries it as `$versionToken`, so handlers read `ctx.queryEnvelope?.versionToken`.\n\nManaged and BYOK Postgres/Supabase deployments are the production posture. Local/PgLite remains a provider-binding compatibility mode for deterministic tests and demos, not a separate ownership mode.\n\nPostgres statement parameters preserve the shared `DatabaseProvider` contract:\n`Date` values are serialized as ISO-8601 timestamps before reaching\n`postgres.js`, while bigint, byte, JSON-object, and array parameters retain\ntheir existing normalized representations.\n\n## Public subpaths\n\n- `.` re-exports the provider surface plus governed read/mutation helpers.\n- `./database` re-exports the shared `DatabaseProvider` contracts.\n- `./governed-read` executes portable DataView read descriptors through a provider.\n- `./governed-mutation` executes governed mutation descriptors with transaction, idempotency, audit hooks and, for version-governed tables, the version precondition.\n- `./governed-versioning` declares version-governed entities (`createGovernedVersionRegistry`).\n- `./version-column-migration` builds and applies the per-entity version-column rollout (`buildVersionColumnMigration`, `applyVersionColumnMigration`, `VERSION_COLUMN_ROLLOUT_MARKER`).\n- `./version-token-source` maps a stored version column to a `VersionToken` (`versionTokenFromColumn`, `versionTokenFromValue`) and a token back to its BIGINT bind value (`parseVersionCounter`).\n- `./impls` and `./impls/supabase-psql` expose concrete PostgreSQL/Supabase implementations.\n- `./postgres-json-semantics` exports `withPgJsonSemantics(client)`, which makes a raw postgres.js client pass JSON text through to json/jsonb parameters instead of double-encoding it (pg/PGlite semantics). It has no imports, so any runtime that builds its own postgres.js client can use it.\n\n## Compatibility\n\nThis package owns the database implementation slice split out of `@lssm-tech/integration.providers-impls`. The legacy package continues to re-export these subpaths for existing consumers.\n","sourcePath":"packages/integrations/provider-database/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-database/README.md","blobSha":"a31233e58ac0eb7699628d2e4d8f8d292400c1a9","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"integrations-and-providers","areaTitle":"Integrations and provider selection","displayName":"integration.provider-database","runtimes":["node"],"platforms":["server"],"kind":"integration","scope":"Package manifest","canonicalRoute":"/docs/packages/integration.provider-database/","contextUrl":"/docs/packages/integration.provider-database.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}