@homeflare/alchemy 0.43.0 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/caddy/index.js +35 -1
- package/dist/caddy/index.js.map +3 -3
- package/dist/launchd/index.js +35 -1
- package/dist/launchd/index.js.map +3 -3
- package/dist/linux/index.js +35 -1
- package/dist/linux/index.js.map +3 -3
- package/dist/litellm/access-group-form.d.ts +26 -0
- package/dist/litellm/access-group-form.d.ts.map +1 -0
- package/dist/litellm/access-group-operations.d.ts +37 -0
- package/dist/litellm/access-group-operations.d.ts.map +1 -0
- package/dist/litellm/access-group-types.d.ts +49 -0
- package/dist/litellm/access-group-types.d.ts.map +1 -0
- package/dist/litellm/access-group.d.ts +55 -0
- package/dist/litellm/access-group.d.ts.map +1 -0
- package/dist/litellm/credential-errors.d.ts +131 -0
- package/dist/litellm/credential-errors.d.ts.map +1 -0
- package/dist/litellm/credential-form.d.ts +79 -0
- package/dist/litellm/credential-form.d.ts.map +1 -0
- package/dist/litellm/credential-operations.d.ts +84 -0
- package/dist/litellm/credential-operations.d.ts.map +1 -0
- package/dist/litellm/credential-rewrite.d.ts +6 -0
- package/dist/litellm/credential-rewrite.d.ts.map +1 -0
- package/dist/litellm/credential-types.d.ts +87 -0
- package/dist/litellm/credential-types.d.ts.map +1 -0
- package/dist/litellm/credential-values.d.ts +53 -0
- package/dist/litellm/credential-values.d.ts.map +1 -0
- package/dist/litellm/credential.d.ts +83 -0
- package/dist/litellm/credential.d.ts.map +1 -0
- package/dist/litellm/fake-access-group-litellm.d.ts +34 -0
- package/dist/litellm/fake-access-group-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-credential-litellm.d.ts +54 -0
- package/dist/litellm/fake-credential-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-keys.d.ts +53 -0
- package/dist/litellm/fake-keys.d.ts.map +1 -0
- package/dist/litellm/fake-litellm.d.ts +4 -1
- package/dist/litellm/fake-litellm.d.ts.map +1 -1
- package/dist/litellm/fake-mcp-litellm.d.ts +67 -0
- package/dist/litellm/fake-mcp-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-model-litellm-post-update.d.ts +49 -0
- package/dist/litellm/fake-model-litellm-post-update.d.ts.map +1 -0
- package/dist/litellm/fake-model-litellm.d.ts +48 -0
- package/dist/litellm/fake-model-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-policy-attachment-litellm.d.ts +33 -0
- package/dist/litellm/fake-policy-attachment-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-policy-litellm.d.ts +32 -0
- package/dist/litellm/fake-policy-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-registry-base.d.ts +42 -0
- package/dist/litellm/fake-registry-base.d.ts.map +1 -0
- package/dist/litellm/fake-stack.d.ts +8 -1
- package/dist/litellm/fake-stack.d.ts.map +1 -1
- package/dist/litellm/fake-team-litellm.d.ts +47 -0
- package/dist/litellm/fake-team-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-tool-litellm.d.ts +28 -0
- package/dist/litellm/fake-tool-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-toolset-litellm.d.ts +29 -0
- package/dist/litellm/fake-toolset-litellm.d.ts.map +1 -0
- package/dist/litellm/index.d.ts +18 -0
- package/dist/litellm/index.d.ts.map +1 -1
- package/dist/litellm/index.js +3078 -2
- package/dist/litellm/index.js.map +65 -4
- package/dist/litellm/key-errors.d.ts +169 -0
- package/dist/litellm/key-errors.d.ts.map +1 -0
- package/dist/litellm/key-form.d.ts +119 -0
- package/dist/litellm/key-form.d.ts.map +1 -0
- package/dist/litellm/key-harness.d.ts +41 -0
- package/dist/litellm/key-harness.d.ts.map +1 -0
- package/dist/litellm/key-metadata-errors.d.ts +30 -0
- package/dist/litellm/key-metadata-errors.d.ts.map +1 -0
- package/dist/litellm/key-metadata.d.ts +22 -0
- package/dist/litellm/key-metadata.d.ts.map +1 -0
- package/dist/litellm/key-operations.d.ts +63 -0
- package/dist/litellm/key-operations.d.ts.map +1 -0
- package/dist/litellm/key-secret.d.ts +33 -0
- package/dist/litellm/key-secret.d.ts.map +1 -0
- package/dist/litellm/key.d.ts +78 -0
- package/dist/litellm/key.d.ts.map +1 -0
- package/dist/litellm/mcp-server-credential.d.ts +50 -0
- package/dist/litellm/mcp-server-credential.d.ts.map +1 -0
- package/dist/litellm/mcp-server-errors.d.ts +101 -0
- package/dist/litellm/mcp-server-errors.d.ts.map +1 -0
- package/dist/litellm/mcp-server-form.d.ts +56 -0
- package/dist/litellm/mcp-server-form.d.ts.map +1 -0
- package/dist/litellm/mcp-server-locate.d.ts +26 -0
- package/dist/litellm/mcp-server-locate.d.ts.map +1 -0
- package/dist/litellm/mcp-server-operations.d.ts +63 -0
- package/dist/litellm/mcp-server-operations.d.ts.map +1 -0
- package/dist/litellm/mcp-server-shadow.d.ts +24 -0
- package/dist/litellm/mcp-server-shadow.d.ts.map +1 -0
- package/dist/litellm/mcp-server-types.d.ts +118 -0
- package/dist/litellm/mcp-server-types.d.ts.map +1 -0
- package/dist/litellm/mcp-server-url.d.ts +11 -0
- package/dist/litellm/mcp-server-url.d.ts.map +1 -0
- package/dist/litellm/mcp-server.d.ts +95 -0
- package/dist/litellm/mcp-server.d.ts.map +1 -0
- package/dist/litellm/model-claim.d.ts +24 -0
- package/dist/litellm/model-claim.d.ts.map +1 -0
- package/dist/litellm/model-credential.d.ts +12 -0
- package/dist/litellm/model-credential.d.ts.map +1 -0
- package/dist/litellm/model-errors.d.ts +119 -0
- package/dist/litellm/model-errors.d.ts.map +1 -0
- package/dist/litellm/model-form.d.ts +78 -0
- package/dist/litellm/model-form.d.ts.map +1 -0
- package/dist/litellm/model-locate.d.ts +13 -0
- package/dist/litellm/model-locate.d.ts.map +1 -0
- package/dist/litellm/model-operations.d.ts +59 -0
- package/dist/litellm/model-operations.d.ts.map +1 -0
- package/dist/litellm/model-types.d.ts +91 -0
- package/dist/litellm/model-types.d.ts.map +1 -0
- package/dist/litellm/model.d.ts +88 -0
- package/dist/litellm/model.d.ts.map +1 -0
- package/dist/litellm/policy-attachment-form.d.ts +19 -0
- package/dist/litellm/policy-attachment-form.d.ts.map +1 -0
- package/dist/litellm/policy-attachment-operations.d.ts +31 -0
- package/dist/litellm/policy-attachment-operations.d.ts.map +1 -0
- package/dist/litellm/policy-attachment-types.d.ts +48 -0
- package/dist/litellm/policy-attachment-types.d.ts.map +1 -0
- package/dist/litellm/policy-attachment.d.ts +61 -0
- package/dist/litellm/policy-attachment.d.ts.map +1 -0
- package/dist/litellm/policy-form.d.ts +22 -0
- package/dist/litellm/policy-form.d.ts.map +1 -0
- package/dist/litellm/policy-operations.d.ts +42 -0
- package/dist/litellm/policy-operations.d.ts.map +1 -0
- package/dist/litellm/policy-types.d.ts +57 -0
- package/dist/litellm/policy-types.d.ts.map +1 -0
- package/dist/litellm/policy.d.ts +65 -0
- package/dist/litellm/policy.d.ts.map +1 -0
- package/dist/litellm/providers.d.ts +1 -1
- package/dist/litellm/providers.d.ts.map +1 -1
- package/dist/litellm/registry-errors.d.ts +62 -0
- package/dist/litellm/registry-errors.d.ts.map +1 -0
- package/dist/litellm/registry-support.d.ts +42 -0
- package/dist/litellm/registry-support.d.ts.map +1 -0
- package/dist/litellm/team-form.d.ts +26 -0
- package/dist/litellm/team-form.d.ts.map +1 -0
- package/dist/litellm/team-members.d.ts +10 -0
- package/dist/litellm/team-members.d.ts.map +1 -0
- package/dist/litellm/team-operations.d.ts +38 -0
- package/dist/litellm/team-operations.d.ts.map +1 -0
- package/dist/litellm/team-permission.d.ts +35 -0
- package/dist/litellm/team-permission.d.ts.map +1 -0
- package/dist/litellm/team-types.d.ts +101 -0
- package/dist/litellm/team-types.d.ts.map +1 -0
- package/dist/litellm/team.d.ts +67 -0
- package/dist/litellm/team.d.ts.map +1 -0
- package/dist/litellm/tool-policy-form.d.ts +21 -0
- package/dist/litellm/tool-policy-form.d.ts.map +1 -0
- package/dist/litellm/tool-policy-operations.d.ts +30 -0
- package/dist/litellm/tool-policy-operations.d.ts.map +1 -0
- package/dist/litellm/tool-policy-types.d.ts +46 -0
- package/dist/litellm/tool-policy-types.d.ts.map +1 -0
- package/dist/litellm/tool-policy.d.ts +62 -0
- package/dist/litellm/tool-policy.d.ts.map +1 -0
- package/dist/litellm/toolset-form.d.ts +20 -0
- package/dist/litellm/toolset-form.d.ts.map +1 -0
- package/dist/litellm/toolset-operations.d.ts +39 -0
- package/dist/litellm/toolset-operations.d.ts.map +1 -0
- package/dist/litellm/toolset-types.d.ts +46 -0
- package/dist/litellm/toolset-types.d.ts.map +1 -0
- package/dist/litellm/toolset.d.ts +55 -0
- package/dist/litellm/toolset.d.ts.map +1 -0
- package/dist/openbao/index.js +35 -1
- package/dist/openbao/index.js.map +3 -3
- package/dist/ownership/rows.d.ts +11 -0
- package/dist/ownership/rows.d.ts.map +1 -1
- package/dist/postgres/connection.d.ts +14 -2
- package/dist/postgres/connection.d.ts.map +1 -1
- package/dist/postgres/database-sql.d.ts +27 -8
- package/dist/postgres/database-sql.d.ts.map +1 -1
- package/dist/postgres/fake-grants-parse.d.ts +37 -0
- package/dist/postgres/fake-grants-parse.d.ts.map +1 -0
- package/dist/postgres/fake-grants-read.d.ts +61 -0
- package/dist/postgres/fake-grants-read.d.ts.map +1 -0
- package/dist/postgres/fake-grants-sql.d.ts +46 -0
- package/dist/postgres/fake-grants-sql.d.ts.map +1 -0
- package/dist/postgres/fake-grants-write.d.ts +29 -0
- package/dist/postgres/fake-grants-write.d.ts.map +1 -0
- package/dist/postgres/fake-role-sql.d.ts +41 -0
- package/dist/postgres/fake-role-sql.d.ts.map +1 -0
- package/dist/postgres/fake-schema-sql.d.ts +42 -0
- package/dist/postgres/fake-schema-sql.d.ts.map +1 -0
- package/dist/postgres/fake-sql-parse.d.ts +23 -0
- package/dist/postgres/fake-sql-parse.d.ts.map +1 -0
- package/dist/postgres/fake-sql-quote.d.ts +12 -0
- package/dist/postgres/fake-sql-quote.d.ts.map +1 -0
- package/dist/postgres/fake-sql.d.ts +42 -0
- package/dist/postgres/fake-sql.d.ts.map +1 -1
- package/dist/postgres/grants-attrs.d.ts +115 -0
- package/dist/postgres/grants-attrs.d.ts.map +1 -0
- package/dist/postgres/grants-declare.d.ts +88 -0
- package/dist/postgres/grants-declare.d.ts.map +1 -0
- package/dist/postgres/grants-diff.d.ts +25 -0
- package/dist/postgres/grants-diff.d.ts.map +1 -0
- package/dist/postgres/grants-errors.d.ts +137 -0
- package/dist/postgres/grants-errors.d.ts.map +1 -0
- package/dist/postgres/grants-existence.d.ts +14 -0
- package/dist/postgres/grants-existence.d.ts.map +1 -0
- package/dist/postgres/grants-ops.d.ts +65 -0
- package/dist/postgres/grants-ops.d.ts.map +1 -0
- package/dist/postgres/grants-ownership.d.ts +18 -0
- package/dist/postgres/grants-ownership.d.ts.map +1 -0
- package/dist/postgres/grants-plan-restore.d.ts +22 -0
- package/dist/postgres/grants-plan-restore.d.ts.map +1 -0
- package/dist/postgres/grants-plan.d.ts +65 -0
- package/dist/postgres/grants-plan.d.ts.map +1 -0
- package/dist/postgres/grants-read-defaults.d.ts +17 -0
- package/dist/postgres/grants-read-defaults.d.ts.map +1 -0
- package/dist/postgres/grants-read.d.ts +77 -0
- package/dist/postgres/grants-read.d.ts.map +1 -0
- package/dist/postgres/grants-refuse.d.ts +25 -0
- package/dist/postgres/grants-refuse.d.ts.map +1 -0
- package/dist/postgres/grants-sql.d.ts +42 -0
- package/dist/postgres/grants-sql.d.ts.map +1 -0
- package/dist/postgres/grants-words.d.ts +29 -0
- package/dist/postgres/grants-words.d.ts.map +1 -0
- package/dist/postgres/grants.d.ts +37 -0
- package/dist/postgres/grants.d.ts.map +1 -0
- package/dist/postgres/index.d.ts +31 -6
- package/dist/postgres/index.d.ts.map +1 -1
- package/dist/postgres/index.js +1998 -37
- package/dist/postgres/index.js.map +46 -7
- package/dist/postgres/installed-classifier.d.ts +13 -0
- package/dist/postgres/installed-classifier.d.ts.map +1 -0
- package/dist/postgres/providers.d.ts +16 -8
- package/dist/postgres/providers.d.ts.map +1 -1
- package/dist/postgres/psql-executor.d.ts +4 -0
- package/dist/postgres/psql-executor.d.ts.map +1 -1
- package/dist/postgres/role-attrs.d.ts +112 -0
- package/dist/postgres/role-attrs.d.ts.map +1 -0
- package/dist/postgres/role-diff.d.ts +22 -0
- package/dist/postgres/role-diff.d.ts.map +1 -0
- package/dist/postgres/role-errors.d.ts +132 -0
- package/dist/postgres/role-errors.d.ts.map +1 -0
- package/dist/postgres/role-membership-sql.d.ts +78 -0
- package/dist/postgres/role-membership-sql.d.ts.map +1 -0
- package/dist/postgres/role-provider.d.ts +11 -0
- package/dist/postgres/role-provider.d.ts.map +1 -0
- package/dist/postgres/role-scram.d.ts +8 -0
- package/dist/postgres/role-scram.d.ts.map +1 -0
- package/dist/postgres/role-secrets.d.ts +38 -0
- package/dist/postgres/role-secrets.d.ts.map +1 -0
- package/dist/postgres/role-sql.d.ts +68 -0
- package/dist/postgres/role-sql.d.ts.map +1 -0
- package/dist/postgres/role.d.ts +57 -0
- package/dist/postgres/role.d.ts.map +1 -0
- package/dist/postgres/schema-assert.d.ts +50 -0
- package/dist/postgres/schema-assert.d.ts.map +1 -0
- package/dist/postgres/schema-attrs.d.ts +51 -0
- package/dist/postgres/schema-attrs.d.ts.map +1 -0
- package/dist/postgres/schema-delete.d.ts +28 -0
- package/dist/postgres/schema-delete.d.ts.map +1 -0
- package/dist/postgres/schema-diff.d.ts +14 -0
- package/dist/postgres/schema-diff.d.ts.map +1 -0
- package/dist/postgres/schema-errors.d.ts +139 -0
- package/dist/postgres/schema-errors.d.ts.map +1 -0
- package/dist/postgres/schema-identity.d.ts +8 -0
- package/dist/postgres/schema-identity.d.ts.map +1 -0
- package/dist/postgres/schema-reconcile.d.ts +12 -0
- package/dist/postgres/schema-reconcile.d.ts.map +1 -0
- package/dist/postgres/schema-sql.d.ts +45 -0
- package/dist/postgres/schema-sql.d.ts.map +1 -0
- package/dist/postgres/schema-test-kit.d.ts +67 -0
- package/dist/postgres/schema-test-kit.d.ts.map +1 -0
- package/dist/postgres/schema.d.ts +54 -0
- package/dist/postgres/schema.d.ts.map +1 -0
- package/dist/proxmox/index.js +35 -1
- package/dist/proxmox/index.js.map +3 -3
- package/dist/release/fake-engine.d.ts +10 -0
- package/dist/release/fake-engine.d.ts.map +1 -1
- package/dist/release/index.js +35 -1
- package/dist/release/index.js.map +3 -3
- package/dist/valkey/acl-attrs.d.ts +94 -0
- package/dist/valkey/acl-attrs.d.ts.map +1 -0
- package/dist/valkey/acl-compare.d.ts +28 -0
- package/dist/valkey/acl-compare.d.ts.map +1 -0
- package/dist/valkey/acl-connection.d.ts +6 -0
- package/dist/valkey/acl-connection.d.ts.map +1 -0
- package/dist/valkey/acl-form.d.ts +62 -0
- package/dist/valkey/acl-form.d.ts.map +1 -0
- package/dist/valkey/acl-managed.d.ts +4 -0
- package/dist/valkey/acl-managed.d.ts.map +1 -0
- package/dist/valkey/acl-ops.d.ts +37 -0
- package/dist/valkey/acl-ops.d.ts.map +1 -0
- package/dist/valkey/acl-profiles.d.ts +53 -0
- package/dist/valkey/acl-profiles.d.ts.map +1 -0
- package/dist/valkey/acl-reconcile.d.ts +26 -0
- package/dist/valkey/acl-reconcile.d.ts.map +1 -0
- package/dist/valkey/acl.d.ts +24 -0
- package/dist/valkey/acl.d.ts.map +1 -0
- package/dist/valkey/connection-service.d.ts +22 -0
- package/dist/valkey/connection-service.d.ts.map +1 -0
- package/dist/valkey/connection.d.ts +59 -0
- package/dist/valkey/connection.d.ts.map +1 -0
- package/dist/valkey/errors.d.ts +165 -0
- package/dist/valkey/errors.d.ts.map +1 -0
- package/dist/valkey/fake-acl.d.ts +29 -0
- package/dist/valkey/fake-acl.d.ts.map +1 -0
- package/dist/valkey/fake-valkey.d.ts +35 -0
- package/dist/valkey/fake-valkey.d.ts.map +1 -0
- package/dist/valkey/handler-test-fixture.d.ts +20 -0
- package/dist/valkey/handler-test-fixture.d.ts.map +1 -0
- package/dist/valkey/index.d.ts +18 -0
- package/dist/valkey/index.d.ts.map +1 -0
- package/dist/valkey/index.js +964 -0
- package/dist/valkey/index.js.map +27 -0
- package/dist/valkey/instance-attrs.d.ts +46 -0
- package/dist/valkey/instance-attrs.d.ts.map +1 -0
- package/dist/valkey/instance-form.d.ts +22 -0
- package/dist/valkey/instance-form.d.ts.map +1 -0
- package/dist/valkey/instance.d.ts +48 -0
- package/dist/valkey/instance.d.ts.map +1 -0
- package/dist/valkey/provider-socket-fixture.d.ts +8 -0
- package/dist/valkey/provider-socket-fixture.d.ts.map +1 -0
- package/dist/valkey/providers.d.ts +16 -0
- package/dist/valkey/providers.d.ts.map +1 -0
- package/dist/valkey/resp.d.ts +38 -0
- package/dist/valkey/resp.d.ts.map +1 -0
- package/dist/valkey/transport-error.d.ts +36 -0
- package/dist/valkey/transport-error.d.ts.map +1 -0
- package/dist/valkey/transport.d.ts +50 -0
- package/dist/valkey/transport.d.ts.map +1 -0
- package/docs/litellm-access-group.md +105 -0
- package/docs/litellm-credential.md +60 -0
- package/docs/litellm-key-metadata.md +56 -0
- package/docs/litellm-key.md +194 -0
- package/docs/litellm-mcp.md +187 -0
- package/docs/litellm-model.md +111 -0
- package/docs/litellm-policy-attachment.md +86 -0
- package/docs/litellm-policy.md +103 -0
- package/docs/litellm-team.md +117 -0
- package/docs/litellm-tool-policy.md +90 -0
- package/docs/litellm-toolset.md +92 -0
- package/docs/litellm.md +16 -9
- package/docs/peers.md +15 -6
- package/docs/postgres-grants-example.md +55 -0
- package/docs/postgres-grants.md +157 -0
- package/docs/postgres-role.md +126 -0
- package/docs/postgres-schema.md +139 -0
- package/docs/postgres.md +20 -3
- package/docs/valkey-transport.md +29 -0
- package/docs/valkey.md +187 -0
- package/package.json +6 -2
- package/src/ceph/ceph-argv.test.ts +1 -1
- package/src/launchd/sudo-allowlist.test.ts +2 -2
- package/src/linux/sudo-allowlist.test.ts +3 -3
- package/src/linux/sudo-runner.test.ts +2 -2
- package/src/litellm/access-group-form.ts +105 -0
- package/src/litellm/access-group-operations.ts +92 -0
- package/src/litellm/access-group-types.ts +49 -0
- package/src/litellm/access-group.test.ts +197 -0
- package/src/litellm/access-group.ts +151 -0
- package/src/litellm/credential-errors.ts +183 -0
- package/src/litellm/credential-form.test.ts +151 -0
- package/src/litellm/credential-form.ts +211 -0
- package/src/litellm/credential-guards.test.ts +241 -0
- package/src/litellm/credential-operations.ts +208 -0
- package/src/litellm/credential-recovery.test.ts +93 -0
- package/src/litellm/credential-rewrite.test.ts +164 -0
- package/src/litellm/credential-rewrite.ts +50 -0
- package/src/litellm/credential-types.ts +117 -0
- package/src/litellm/credential-values.ts +94 -0
- package/src/litellm/credential.test.ts +218 -0
- package/src/litellm/credential.ts +227 -0
- package/src/litellm/fake-access-group-litellm.ts +127 -0
- package/src/litellm/fake-credential-litellm.ts +216 -0
- package/src/litellm/fake-keys.ts +190 -0
- package/src/litellm/fake-litellm.ts +19 -9
- package/src/litellm/fake-mcp-litellm.ts +214 -0
- package/src/litellm/fake-model-litellm-post-update.ts +103 -0
- package/src/litellm/fake-model-litellm.ts +233 -0
- package/src/litellm/fake-policy-attachment-litellm.ts +97 -0
- package/src/litellm/fake-policy-litellm.ts +186 -0
- package/src/litellm/fake-registry-base.ts +69 -0
- package/src/litellm/fake-stack.ts +17 -1
- package/src/litellm/fake-team-litellm.ts +229 -0
- package/src/litellm/fake-tool-litellm.ts +88 -0
- package/src/litellm/fake-toolset-litellm.ts +110 -0
- package/src/litellm/index.ts +140 -0
- package/src/litellm/key-delete.test.ts +212 -0
- package/src/litellm/key-errors.ts +241 -0
- package/src/litellm/key-form.ts +200 -0
- package/src/litellm/key-harness.ts +121 -0
- package/src/litellm/key-metadata-errors.ts +49 -0
- package/src/litellm/key-metadata.test.ts +156 -0
- package/src/litellm/key-metadata.ts +74 -0
- package/src/litellm/key-operations.ts +184 -0
- package/src/litellm/key-rotation.test.ts +110 -0
- package/src/litellm/key-scope.test.ts +135 -0
- package/src/litellm/key-secret.test.ts +248 -0
- package/src/litellm/key-secret.ts +137 -0
- package/src/litellm/key-transport.test.ts +166 -0
- package/src/litellm/key.test.ts +231 -0
- package/src/litellm/key.ts +213 -0
- package/src/litellm/mcp-server-adopt.test.ts +86 -0
- package/src/litellm/mcp-server-alias.test.ts +184 -0
- package/src/litellm/mcp-server-credential.ts +85 -0
- package/src/litellm/mcp-server-errors.ts +141 -0
- package/src/litellm/mcp-server-exports.test.ts +15 -0
- package/src/litellm/mcp-server-form.test.ts +241 -0
- package/src/litellm/mcp-server-form.ts +233 -0
- package/src/litellm/mcp-server-handlers.test.ts +150 -0
- package/src/litellm/mcp-server-locate.ts +66 -0
- package/src/litellm/mcp-server-operations.ts +111 -0
- package/src/litellm/mcp-server-registry.test.ts +146 -0
- package/src/litellm/mcp-server-retype.test.ts +114 -0
- package/src/litellm/mcp-server-shadow.test.ts +91 -0
- package/src/litellm/mcp-server-shadow.ts +45 -0
- package/src/litellm/mcp-server-tools.test.ts +85 -0
- package/src/litellm/mcp-server-types.ts +143 -0
- package/src/litellm/mcp-server-url.ts +66 -0
- package/src/litellm/mcp-server.test.ts +213 -0
- package/src/litellm/mcp-server.ts +225 -0
- package/src/litellm/model-claim.ts +69 -0
- package/src/litellm/model-credential.ts +45 -0
- package/src/litellm/model-errors.ts +168 -0
- package/src/litellm/model-foreign-row.test.ts +173 -0
- package/src/litellm/model-form.test.ts +228 -0
- package/src/litellm/model-form.ts +223 -0
- package/src/litellm/model-locate.test.ts +128 -0
- package/src/litellm/model-locate.ts +67 -0
- package/src/litellm/model-operations.test.ts +93 -0
- package/src/litellm/model-operations.ts +146 -0
- package/src/litellm/model-params-preserve.test.ts +119 -0
- package/src/litellm/model-recovery.test.ts +57 -0
- package/src/litellm/model-types.ts +112 -0
- package/src/litellm/model.test.ts +222 -0
- package/src/litellm/model.ts +237 -0
- package/src/litellm/policy-attachment-form.ts +103 -0
- package/src/litellm/policy-attachment-operations.ts +74 -0
- package/src/litellm/policy-attachment-types.ts +48 -0
- package/src/litellm/policy-attachment.test.ts +198 -0
- package/src/litellm/policy-attachment.ts +178 -0
- package/src/litellm/policy-form.ts +122 -0
- package/src/litellm/policy-operations.ts +112 -0
- package/src/litellm/policy-types.ts +58 -0
- package/src/litellm/policy.test.ts +214 -0
- package/src/litellm/policy.ts +146 -0
- package/src/litellm/providers.ts +24 -3
- package/src/litellm/registry-errors.ts +88 -0
- package/src/litellm/registry-exports.test.ts +66 -0
- package/src/litellm/registry-support.ts +109 -0
- package/src/litellm/team-form.ts +140 -0
- package/src/litellm/team-members.test.ts +150 -0
- package/src/litellm/team-members.ts +58 -0
- package/src/litellm/team-operations.ts +90 -0
- package/src/litellm/team-permission.ts +159 -0
- package/src/litellm/team-read.test.ts +89 -0
- package/src/litellm/team-types.ts +106 -0
- package/src/litellm/team.test.ts +206 -0
- package/src/litellm/team.ts +159 -0
- package/src/litellm/tool-policy-form.ts +94 -0
- package/src/litellm/tool-policy-operations.ts +58 -0
- package/src/litellm/tool-policy-types.ts +48 -0
- package/src/litellm/tool-policy.test.ts +172 -0
- package/src/litellm/tool-policy.ts +125 -0
- package/src/litellm/toolset-form.ts +104 -0
- package/src/litellm/toolset-operations.ts +90 -0
- package/src/litellm/toolset-types.ts +47 -0
- package/src/litellm/toolset.test.ts +198 -0
- package/src/litellm/toolset.ts +151 -0
- package/src/ownership/ownership.test.ts +33 -1
- package/src/ownership/rows.ts +53 -0
- package/src/postgres/connection.ts +42 -7
- package/src/postgres/database-bigint-serialization.test.ts +1 -0
- package/src/postgres/database-refusals.test.ts +2 -2
- package/src/postgres/database-sql.ts +36 -9
- package/src/postgres/fake-grants-parse.ts +189 -0
- package/src/postgres/fake-grants-read.ts +250 -0
- package/src/postgres/fake-grants-sql.ts +207 -0
- package/src/postgres/fake-grants-write.ts +90 -0
- package/src/postgres/fake-role-sql.ts +240 -0
- package/src/postgres/fake-schema-semantics.test.ts +36 -0
- package/src/postgres/fake-schema-sql.ts +146 -0
- package/src/postgres/fake-sql-parse.ts +86 -0
- package/src/postgres/fake-sql-quote.ts +36 -0
- package/src/postgres/fake-sql.ts +166 -46
- package/src/postgres/fixtures/pg-REL_18_6-acl.h.txt +147 -0
- package/src/postgres/fixtures/pg-REL_18_6-aclexplode-func.txt +31 -0
- package/src/postgres/fixtures/pg-REL_18_6-alter-default-privileges-synopsis.txt +82 -0
- package/src/postgres/fixtures/pg-REL_18_6-alter_role.sgml.txt +44 -0
- package/src/postgres/fixtures/pg-REL_18_6-create_role.sgml.txt +26 -0
- package/src/postgres/fixtures/pg-REL_18_6-grant-synopsis.txt +95 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_attribute.h.txt +24 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_auth_members.h.txt +62 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_authid.h.txt +70 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_class.h.txt +33 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_default_acl.h.txt +81 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_namespace.h.txt +28 -0
- package/src/postgres/fixtures/pg-REL_18_6-revoke-synopsis.txt +124 -0
- package/src/postgres/grants-acl.test.ts +61 -0
- package/src/postgres/grants-attrs.ts +185 -0
- package/src/postgres/grants-database.test.ts +158 -0
- package/src/postgres/grants-declare.ts +172 -0
- package/src/postgres/grants-delete-proof.test.ts +154 -0
- package/src/postgres/grants-diff.ts +101 -0
- package/src/postgres/grants-errors.ts +215 -0
- package/src/postgres/grants-existence-guards.test.ts +113 -0
- package/src/postgres/grants-existence.ts +101 -0
- package/src/postgres/grants-lifecycle-guards.test.ts +208 -0
- package/src/postgres/grants-lifecycle-repair.test.ts +208 -0
- package/src/postgres/grants-lifecycle.test.ts +181 -0
- package/src/postgres/grants-ops.ts +229 -0
- package/src/postgres/grants-owner-revoke.test.ts +121 -0
- package/src/postgres/grants-ownership.ts +49 -0
- package/src/postgres/grants-plan-collateral.test.ts +202 -0
- package/src/postgres/grants-plan-diff.test.ts +204 -0
- package/src/postgres/grants-plan-restore.ts +43 -0
- package/src/postgres/grants-plan-revocations.test.ts +69 -0
- package/src/postgres/grants-plan.test.ts +148 -0
- package/src/postgres/grants-plan.ts +245 -0
- package/src/postgres/grants-provenance.test.ts +134 -0
- package/src/postgres/grants-psql-lifecycle.test.ts +105 -0
- package/src/postgres/grants-read-absent.test.ts +91 -0
- package/src/postgres/grants-read-defaults.ts +51 -0
- package/src/postgres/grants-read.ts +250 -0
- package/src/postgres/grants-refusals.test.ts +136 -0
- package/src/postgres/grants-refuse.ts +119 -0
- package/src/postgres/grants-relkind-wire.test.ts +111 -0
- package/src/postgres/grants-repair-plan.test.ts +201 -0
- package/src/postgres/grants-sql.test.ts +128 -0
- package/src/postgres/grants-sql.ts +144 -0
- package/src/postgres/grants-words.ts +34 -0
- package/src/postgres/grants.ts +110 -0
- package/src/postgres/index.ts +129 -5
- package/src/postgres/installed-classifier.ts +36 -0
- package/src/postgres/providers.ts +33 -9
- package/src/postgres/psql-executor-escaping.test.ts +67 -0
- package/src/postgres/psql-executor.test.ts +63 -2
- package/src/postgres/psql-executor.ts +74 -34
- package/src/postgres/role-adopt.test.ts +98 -0
- package/src/postgres/role-attrs.ts +137 -0
- package/src/postgres/role-diff.ts +93 -0
- package/src/postgres/role-errors.ts +206 -0
- package/src/postgres/role-guard.test.ts +60 -0
- package/src/postgres/role-identity.test.ts +197 -0
- package/src/postgres/role-lifecycle.test.ts +228 -0
- package/src/postgres/role-membership-options.test.ts +73 -0
- package/src/postgres/role-membership-repair.test.ts +153 -0
- package/src/postgres/role-membership-sql.ts +223 -0
- package/src/postgres/role-password-ascii.test.ts +53 -0
- package/src/postgres/role-password-transports.test.ts +123 -0
- package/src/postgres/role-password.test.ts +158 -0
- package/src/postgres/role-privilege.test.ts +107 -0
- package/src/postgres/role-provenance.test.ts +200 -0
- package/src/postgres/role-provider.ts +105 -0
- package/src/postgres/role-refusals.test.ts +225 -0
- package/src/postgres/role-scram.test.ts +38 -0
- package/src/postgres/role-scram.ts +40 -0
- package/src/postgres/role-secrets.ts +61 -0
- package/src/postgres/role-sql.ts +213 -0
- package/src/postgres/role-valid-until.test.ts +68 -0
- package/src/postgres/role.ts +226 -0
- package/src/postgres/schema-assert.ts +139 -0
- package/src/postgres/schema-attrs.ts +71 -0
- package/src/postgres/schema-delete-proofs.test.ts +192 -0
- package/src/postgres/schema-delete.ts +96 -0
- package/src/postgres/schema-diff.ts +44 -0
- package/src/postgres/schema-drop-2bp01.test.ts +146 -0
- package/src/postgres/schema-errors.ts +209 -0
- package/src/postgres/schema-handlers.test.ts +193 -0
- package/src/postgres/schema-identity.ts +39 -0
- package/src/postgres/schema-lifecycle.test.ts +246 -0
- package/src/postgres/schema-race.test.ts +70 -0
- package/src/postgres/schema-reconcile.ts +100 -0
- package/src/postgres/schema-refusals.test.ts +144 -0
- package/src/postgres/schema-socket.test.ts +162 -0
- package/src/postgres/schema-sql.ts +130 -0
- package/src/postgres/schema-takeover.test.ts +149 -0
- package/src/postgres/schema-test-kit.ts +85 -0
- package/src/postgres/schema.ts +130 -0
- package/src/release/binary-alias.test.ts +3 -3
- package/src/release/binary-claims.test.ts +3 -3
- package/src/release/binary-directory-umask.test.ts +65 -0
- package/src/release/fake-engine.ts +15 -0
- package/src/valkey/acl-attrs.ts +98 -0
- package/src/valkey/acl-compare.ts +57 -0
- package/src/valkey/acl-connection.ts +13 -0
- package/src/valkey/acl-delete.test.ts +127 -0
- package/src/valkey/acl-form.ts +239 -0
- package/src/valkey/acl-managed.ts +13 -0
- package/src/valkey/acl-ops.ts +122 -0
- package/src/valkey/acl-ownership.test.ts +118 -0
- package/src/valkey/acl-prefix.test.ts +38 -0
- package/src/valkey/acl-profiles.ts +81 -0
- package/src/valkey/acl-reconcile.ts +180 -0
- package/src/valkey/acl-reserved.test.ts +69 -0
- package/src/valkey/acl-revocation.test.ts +94 -0
- package/src/valkey/acl-seat-prefix.test.ts +111 -0
- package/src/valkey/acl-validation.test.ts +54 -0
- package/src/valkey/acl.test.ts +215 -0
- package/src/valkey/acl.ts +169 -0
- package/src/valkey/connection-service.ts +46 -0
- package/src/valkey/connection.ts +180 -0
- package/src/valkey/errors.ts +239 -0
- package/src/valkey/fake-acl.ts +128 -0
- package/src/valkey/fake-valkey.ts +224 -0
- package/src/valkey/handler-test-fixture.ts +43 -0
- package/src/valkey/handlers.test.ts +205 -0
- package/src/valkey/index.ts +54 -0
- package/src/valkey/instance-attrs.ts +48 -0
- package/src/valkey/instance-form.ts +104 -0
- package/src/valkey/instance.test.ts +108 -0
- package/src/valkey/instance.ts +160 -0
- package/src/valkey/provider-socket-fixture.ts +71 -0
- package/src/valkey/providers.test.ts +129 -0
- package/src/valkey/providers.ts +21 -0
- package/src/valkey/resp.ts +212 -0
- package/src/valkey/transport-bounds.test.ts +150 -0
- package/src/valkey/transport-error.ts +37 -0
- package/src/valkey/transport.test.ts +158 -0
- package/src/valkey/transport.ts +109 -0
- package/src/valkey/upstream-bounds.test.ts +14 -0
package/src/postgres/fake-sql.ts
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A recording fake `PgExecutor` (S28: "Tests use `bun:test`… a test never trusts the deploy's
|
|
3
3
|
* own report" — here read back from the fake's own catalog, not from the statement list) for
|
|
4
|
-
* every lifecycle test in this family. No socket, no `@effect/sql-pg` client — it
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* every lifecycle test in this family. No socket, no `@effect/sql-pg` client — it matches the
|
|
5
|
+
* statement shapes this family issues, by text, against an in-memory `pg_database` map. The
|
|
6
|
+
* role catalog is `fake-role-sql.ts`; the schema catalog is `fake-schema-sql.ts`.
|
|
7
7
|
*
|
|
8
|
-
* ⛔ IT PARSES ITS OWN OUTPUT, NOT SQL IN GENERAL. `parseCreate`
|
|
9
|
-
* text `buildCreateDatabaseSql`
|
|
8
|
+
* ⛔ IT PARSES ITS OWN OUTPUT, NOT SQL IN GENERAL. `parseCreate` (`fake-sql-parse.ts`) understands
|
|
9
|
+
* exactly the text `buildCreateDatabaseSql` produces — quoted with `quoteIdent` /
|
|
10
10
|
* `quoteStringLiteral` — because that is the only `CREATE DATABASE` this family ever issues. A
|
|
11
|
-
* general SQL parser would hide a quoting bug instead of tripping over it.
|
|
11
|
+
* general SQL parser would hide a quoting bug instead of tripping over it. The role and schema
|
|
12
|
+
* halves live in their own files under the same rule.
|
|
12
13
|
*/
|
|
13
14
|
import * as Effect from 'effect/Effect';
|
|
14
|
-
import { SqlError, SqlSyntaxError } from 'effect/unstable/sql/SqlError';
|
|
15
|
+
import { SqlError, SqlSyntaxError, UnknownError } from 'effect/unstable/sql/SqlError';
|
|
15
16
|
import type { PostgresDatabaseAttributes } from './database-attrs.ts';
|
|
16
17
|
import type { PgExecutor } from './database-sql.ts';
|
|
18
|
+
import { parseCreate } from './fake-sql-parse.ts';
|
|
19
|
+
import { type FakeRoleState, applyRoleStatement } from './fake-role-sql.ts';
|
|
20
|
+
import { type FakeSchemaState, applySchemaStatement, seedSchemas } from './fake-schema-sql.ts';
|
|
21
|
+
import type { PostgresRoleAttributes } from './role-attrs.ts';
|
|
22
|
+
import type { PostgresSchemaAttributes } from './schema-attrs.ts';
|
|
17
23
|
|
|
18
24
|
export interface RecordedStatement {
|
|
19
25
|
readonly text: string;
|
|
@@ -25,57 +31,93 @@ export interface FakeSql extends PgExecutor {
|
|
|
25
31
|
/** Mutable on purpose: a test seeds a row a "competing" statement would have produced (the
|
|
26
32
|
* `42P04` race case) before the fake ever sees it. */
|
|
27
33
|
readonly databases: Map<string, PostgresDatabaseAttributes>;
|
|
34
|
+
/** Mutable on purpose: a test seeds a live role (adoption, drift) or clears one (drop). */
|
|
35
|
+
readonly roleRows: Map<string, PostgresRoleAttributes>;
|
|
36
|
+
/** `member\0parent\0grantor` triples backing `pg_auth_members` (a plain `pg_auth_members`
|
|
37
|
+
* read, a grant, a revoke and a DROP ROLE cascade all go through `fake-role-sql.ts`);
|
|
38
|
+
* `GRANT`/`REVOKE` mutate it. An empty grantor segment is an inconsistent catalog/test row. */
|
|
39
|
+
readonly memberships: Set<string>;
|
|
40
|
+
/** Options on a membership the name alone hides, keyed `member\0parent\0grantor`. Absent
|
|
41
|
+
* means neither ADMIN, SET nor an explicit per-grant INHERIT. */
|
|
42
|
+
readonly membershipOptions: Map<
|
|
43
|
+
string,
|
|
44
|
+
{ readonly admin: boolean; readonly set: boolean; readonly inherit?: boolean }
|
|
45
|
+
>;
|
|
46
|
+
/** Mutable on purpose: a test seeds a live schema (adoption, drift) or clears one (drop). */
|
|
47
|
+
readonly schemas: Map<string, PostgresSchemaAttributes>;
|
|
48
|
+
/** Mutable on purpose: names of schemas this fake pretends hold at least one relation, so a
|
|
49
|
+
* `cascade: false` drop refusal has something to refuse. */
|
|
50
|
+
readonly relationsIn: Set<string>;
|
|
28
51
|
}
|
|
29
52
|
|
|
30
53
|
export interface FakeSqlOptions {
|
|
54
|
+
readonly standardConformingStrings?: boolean;
|
|
31
55
|
readonly roles?: ReadonlyArray<string>;
|
|
32
56
|
readonly databases?: ReadonlyArray<PostgresDatabaseAttributes>;
|
|
57
|
+
readonly roleRows?: ReadonlyArray<PostgresRoleAttributes>;
|
|
33
58
|
/** Fail the NEXT `CREATE DATABASE` with SQLSTATE `42P04` (duplicate_database), once, the way a
|
|
34
59
|
* concurrent creator racing this reconcile would — classified exactly as
|
|
35
60
|
* `@effect/sql-pg`'s own driver classifies it (`database-sql.ts`'s header). */
|
|
36
61
|
readonly raceNextCreate?: boolean;
|
|
62
|
+
/** Fail the next statement whose text starts with this prefix, once, without applying it.
|
|
63
|
+
* A `transaction` that included earlier statements rolls them back. */
|
|
64
|
+
readonly failNext?: string;
|
|
65
|
+
readonly schemas?: ReadonlyArray<PostgresSchemaAttributes>;
|
|
66
|
+
/** Names of schemas the fake answers `schemaIsEmpty` with `false` for. */
|
|
67
|
+
readonly schemasWithRelations?: ReadonlyArray<string>;
|
|
68
|
+
/** Accept the NEXT `CREATE SCHEMA` (no error) but record nothing — the S10 case where the
|
|
69
|
+
* write's own report is a lie and the immediate re-read finds nothing. */
|
|
70
|
+
readonly swallowNextCreateSchema?: boolean;
|
|
71
|
+
/** What `current_database()` answers and every schema row is stamped with (a real server
|
|
72
|
+
* always reports the database its connection opened). Default `postgres`. */
|
|
73
|
+
readonly database?: string;
|
|
74
|
+
/** The NEXT `CREATE SCHEMA` races with a row owned by THIS role — a
|
|
75
|
+
* concurrent creator won between the first `SELECT` and the `IF NOT EXISTS`, which then
|
|
76
|
+
* does nothing; plain CREATE instead fails with 42P06. Consumed once. */
|
|
77
|
+
readonly raceNextCreateSchema?: string;
|
|
78
|
+
/** What `current_user` answers, and the owner a `CREATE SCHEMA` without `AUTHORIZATION`
|
|
79
|
+
* stores. Default `postgres`. A test that sets this pins the omitted-owner comparison
|
|
80
|
+
* against the session role, not a hardcoded name. */
|
|
81
|
+
readonly currentUser?: string;
|
|
37
82
|
}
|
|
38
83
|
|
|
39
|
-
const unquoteIdent = (raw: string): string => raw.replace(/""/g, '"');
|
|
40
|
-
const unquoteLiteral = (raw: string): string => raw.replace(/''/g, "'");
|
|
41
|
-
|
|
42
|
-
/** Pull every field back out of exactly the text `buildCreateDatabaseSql` writes. */
|
|
43
|
-
const parseCreate = (text: string): PostgresDatabaseAttributes => {
|
|
44
|
-
const name = /^CREATE DATABASE "((?:[^"]|"")*)" WITH /.exec(text);
|
|
45
|
-
const owner = /OWNER "((?:[^"]|"")*)"/.exec(text);
|
|
46
|
-
const encoding = /ENCODING '((?:[^']|'')*)'/.exec(text);
|
|
47
|
-
const localeProvider = /LOCALE_PROVIDER '((?:[^']|'')*)'/.exec(text);
|
|
48
|
-
const lcCollate = /LC_COLLATE '((?:[^']|'')*)'/.exec(text);
|
|
49
|
-
const lcCtype = /LC_CTYPE '((?:[^']|'')*)'/.exec(text);
|
|
50
|
-
const tablespace = /TABLESPACE "((?:[^"]|"")*)"/.exec(text);
|
|
51
|
-
const allowConnections = /ALLOW_CONNECTIONS (true|false)/.exec(text);
|
|
52
|
-
const connectionLimit = /CONNECTION LIMIT (-?\d+)/.exec(text);
|
|
53
|
-
const isTemplate = /IS_TEMPLATE (true|false)/.exec(text);
|
|
54
|
-
if (name === null || owner === null) {
|
|
55
|
-
throw new Error(`fake-sql: could not parse a generated CREATE DATABASE statement: ${text}`);
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
name: unquoteIdent(name[1] as string),
|
|
59
|
-
oid: 0,
|
|
60
|
-
owner: unquoteIdent(owner[1] as string),
|
|
61
|
-
encoding: encoding === null ? 'UTF8' : unquoteLiteral(encoding[1] as string),
|
|
62
|
-
localeProvider:
|
|
63
|
-
localeProvider === null ? 'libc' : (unquoteLiteral(localeProvider[1] as string) as 'libc'),
|
|
64
|
-
collate: lcCollate === null ? 'C' : unquoteLiteral(lcCollate[1] as string),
|
|
65
|
-
ctype: lcCtype === null ? 'C' : unquoteLiteral(lcCtype[1] as string),
|
|
66
|
-
tablespace: tablespace === null ? 'pg_default' : unquoteIdent(tablespace[1] as string),
|
|
67
|
-
allowConnections: allowConnections === null ? true : allowConnections[1] === 'true',
|
|
68
|
-
connectionLimit: connectionLimit === null ? -1 : Number(connectionLimit[1]),
|
|
69
|
-
isTemplate: isTemplate === null ? false : isTemplate[1] === 'true',
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
84
|
export const makeFakeSql = (options: FakeSqlOptions = {}): FakeSql => {
|
|
74
85
|
const statements: RecordedStatement[] = [];
|
|
75
|
-
const
|
|
86
|
+
const roleNames = new Set(options.roles ?? []);
|
|
87
|
+
const roleRows = new Map(options.roleRows?.map((r) => [r.name, r] as const) ?? []);
|
|
76
88
|
const databases = new Map(options.databases?.map((d) => [d.name, d] as const) ?? []);
|
|
89
|
+
const memberships = new Set<string>();
|
|
90
|
+
const membershipOptions = new Map<
|
|
91
|
+
string,
|
|
92
|
+
{ readonly admin: boolean; readonly set: boolean; readonly inherit?: boolean }
|
|
93
|
+
>();
|
|
94
|
+
const schemas = seedSchemas(options.schemas, options.database ?? 'postgres');
|
|
95
|
+
const relationsIn = new Set(options.schemasWithRelations ?? []);
|
|
77
96
|
let raceRemaining = options.raceNextCreate === true ? 1 : 0;
|
|
97
|
+
let failNext = options.failNext;
|
|
78
98
|
let oidCounter = 20000;
|
|
99
|
+
const nextOid = (): number => {
|
|
100
|
+
const oid = oidCounter;
|
|
101
|
+
oidCounter += 1;
|
|
102
|
+
return oid;
|
|
103
|
+
};
|
|
104
|
+
const roleState: FakeRoleState = {
|
|
105
|
+
roleNames,
|
|
106
|
+
roleRows,
|
|
107
|
+
memberships,
|
|
108
|
+
membershipOptions,
|
|
109
|
+
nextOid,
|
|
110
|
+
};
|
|
111
|
+
const schemaState: FakeSchemaState = {
|
|
112
|
+
schemas,
|
|
113
|
+
relationsIn,
|
|
114
|
+
database: options.database ?? 'postgres',
|
|
115
|
+
standardConformingStrings: options.standardConformingStrings ?? true,
|
|
116
|
+
sessionRole: options.currentUser ?? 'postgres',
|
|
117
|
+
swallowRemaining: options.swallowNextCreateSchema === true ? 1 : 0,
|
|
118
|
+
raceOwner: options.raceNextCreateSchema,
|
|
119
|
+
nextOid,
|
|
120
|
+
};
|
|
79
121
|
|
|
80
122
|
const unsafe = <A extends object>(
|
|
81
123
|
text: string,
|
|
@@ -84,10 +126,35 @@ export const makeFakeSql = (options: FakeSqlOptions = {}): FakeSql => {
|
|
|
84
126
|
Effect.suspend(() => {
|
|
85
127
|
statements.push({ text, params });
|
|
86
128
|
|
|
129
|
+
if (failNext !== undefined && text.startsWith(failNext)) {
|
|
130
|
+
failNext = undefined;
|
|
131
|
+
return Effect.fail(
|
|
132
|
+
new SqlError({
|
|
133
|
+
reason: new UnknownError({
|
|
134
|
+
cause: new Error('injected statement failure'),
|
|
135
|
+
message: 'injected statement failure',
|
|
136
|
+
operation: text.slice(0, 40),
|
|
137
|
+
}),
|
|
138
|
+
}),
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
87
142
|
if (text.startsWith('SELECT 1 AS present FROM pg_roles')) {
|
|
88
143
|
const role = params[0] as string;
|
|
89
144
|
return Effect.succeed(
|
|
90
|
-
(
|
|
145
|
+
(roleNames.has(role) || roleRows.has(role)
|
|
146
|
+
? [{ present: 1 }]
|
|
147
|
+
: []) as unknown as ReadonlyArray<A>,
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ⚠️ startsWith, BEFORE the `FROM pg_database` branch: the full-row select also contains
|
|
152
|
+
// `FROM pg_database`, but starts with `SELECT d.oid` — only the existence probe starts
|
|
153
|
+
// with `SELECT 1 AS present`.
|
|
154
|
+
if (text.startsWith('SELECT 1 AS present FROM pg_database')) {
|
|
155
|
+
const name = params[0] as string;
|
|
156
|
+
return Effect.succeed(
|
|
157
|
+
(databases.has(name) ? [{ present: 1 }] : []) as unknown as ReadonlyArray<A>,
|
|
91
158
|
);
|
|
92
159
|
}
|
|
93
160
|
|
|
@@ -110,14 +177,67 @@ export const makeFakeSql = (options: FakeSqlOptions = {}): FakeSql => {
|
|
|
110
177
|
}),
|
|
111
178
|
);
|
|
112
179
|
}
|
|
113
|
-
const row = { ...parseCreate(text), oid:
|
|
114
|
-
oidCounter += 1;
|
|
180
|
+
const row = { ...parseCreate(text), oid: nextOid() };
|
|
115
181
|
databases.set(row.name, row);
|
|
116
182
|
return Effect.succeed([] as unknown as ReadonlyArray<A>);
|
|
117
183
|
}
|
|
118
184
|
|
|
185
|
+
const schemaStatement = applySchemaStatement<A>(schemaState, text, params);
|
|
186
|
+
if (schemaStatement !== undefined) return schemaStatement;
|
|
187
|
+
|
|
188
|
+
const roleStatement = applyRoleStatement<A>(roleState, text, params);
|
|
189
|
+
if (roleStatement !== undefined) return roleStatement;
|
|
190
|
+
|
|
119
191
|
throw new Error(`fake-sql: unrecognised statement: ${text}`);
|
|
120
192
|
});
|
|
121
193
|
|
|
122
|
-
|
|
194
|
+
const snapshot = () => ({
|
|
195
|
+
roleRows: new Map(roleRows),
|
|
196
|
+
roleNames: new Set(roleNames),
|
|
197
|
+
memberships: new Set(memberships),
|
|
198
|
+
membershipOptions: new Map(membershipOptions),
|
|
199
|
+
databases: new Map(databases),
|
|
200
|
+
schemas: new Map(schemas),
|
|
201
|
+
relationsIn: new Set(relationsIn),
|
|
202
|
+
swallowRemaining: schemaState.swallowRemaining,
|
|
203
|
+
raceOwner: schemaState.raceOwner,
|
|
204
|
+
oid: oidCounter,
|
|
205
|
+
});
|
|
206
|
+
const restore = (snap: ReturnType<typeof snapshot>) => {
|
|
207
|
+
roleRows.clear();
|
|
208
|
+
for (const [key, value] of snap.roleRows) roleRows.set(key, value);
|
|
209
|
+
roleNames.clear();
|
|
210
|
+
for (const name of snap.roleNames) roleNames.add(name);
|
|
211
|
+
memberships.clear();
|
|
212
|
+
for (const key of snap.memberships) memberships.add(key);
|
|
213
|
+
membershipOptions.clear();
|
|
214
|
+
for (const [key, value] of snap.membershipOptions) membershipOptions.set(key, value);
|
|
215
|
+
databases.clear();
|
|
216
|
+
for (const [key, value] of snap.databases) databases.set(key, value);
|
|
217
|
+
schemas.clear();
|
|
218
|
+
for (const [key, value] of snap.schemas) schemas.set(key, value);
|
|
219
|
+
relationsIn.clear();
|
|
220
|
+
for (const name of snap.relationsIn) relationsIn.add(name);
|
|
221
|
+
schemaState.swallowRemaining = snap.swallowRemaining;
|
|
222
|
+
schemaState.raceOwner = snap.raceOwner;
|
|
223
|
+
oidCounter = snap.oid;
|
|
224
|
+
};
|
|
225
|
+
const transaction = (sqls: readonly string[]): Effect.Effect<void, SqlError> => {
|
|
226
|
+
const snap = snapshot();
|
|
227
|
+
return Effect.gen(function* () {
|
|
228
|
+
for (const sql of sqls) yield* unsafe(sql).pipe(Effect.asVoid);
|
|
229
|
+
}).pipe(Effect.onError(() => Effect.sync(() => restore(snap))));
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
return {
|
|
233
|
+
unsafe,
|
|
234
|
+
transaction,
|
|
235
|
+
statements,
|
|
236
|
+
databases,
|
|
237
|
+
roleRows,
|
|
238
|
+
memberships,
|
|
239
|
+
membershipOptions,
|
|
240
|
+
schemas,
|
|
241
|
+
relationsIn,
|
|
242
|
+
};
|
|
123
243
|
};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# path: src/include/utils/acl.h
|
|
2
|
+
# blob: 13bb8128747139d9cae66777e4782359ead0a760
|
|
3
|
+
# tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
|
|
4
|
+
# fetched: 2026-09-30 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
|
|
5
|
+
# excerpt: the AclItem struct, the grant-option layout, every ACL_*_CHR letter define and the ACL_ALL_RIGHTS_* sets (lines 40-180 of the full file)
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* typedef AclMode is declared in parsenodes.h, also the individual privilege
|
|
10
|
+
* bit meanings are defined there
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
#define ACL_ID_PUBLIC 0 /* placeholder for id in a PUBLIC acl item */
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* AclItem
|
|
17
|
+
*
|
|
18
|
+
* Note: must be same size on all platforms, because the size is hardcoded
|
|
19
|
+
* in the pg_type.h entry for aclitem.
|
|
20
|
+
*/
|
|
21
|
+
typedef struct AclItem
|
|
22
|
+
{
|
|
23
|
+
Oid ai_grantee; /* ID that this item grants privs to */
|
|
24
|
+
Oid ai_grantor; /* grantor of privs */
|
|
25
|
+
AclMode ai_privs; /* privilege bits */
|
|
26
|
+
} AclItem;
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* The upper 32 bits of the ai_privs field of an AclItem are the grant option
|
|
30
|
+
* bits, and the lower 32 bits are the actual privileges. We use "rights"
|
|
31
|
+
* to mean the combined grant option and privilege bits fields.
|
|
32
|
+
*/
|
|
33
|
+
#define ACLITEM_GET_PRIVS(item) ((item).ai_privs & 0xFFFFFFFF)
|
|
34
|
+
#define ACLITEM_GET_GOPTIONS(item) (((item).ai_privs >> 32) & 0xFFFFFFFF)
|
|
35
|
+
#define ACLITEM_GET_RIGHTS(item) ((item).ai_privs)
|
|
36
|
+
|
|
37
|
+
#define ACL_GRANT_OPTION_FOR(privs) (((AclMode) (privs) & 0xFFFFFFFF) << 32)
|
|
38
|
+
#define ACL_OPTION_TO_PRIVS(privs) (((AclMode) (privs) >> 32) & 0xFFFFFFFF)
|
|
39
|
+
|
|
40
|
+
#define ACLITEM_SET_PRIVS(item,privs) \
|
|
41
|
+
((item).ai_privs = ((item).ai_privs & ~((AclMode) 0xFFFFFFFF)) | \
|
|
42
|
+
((AclMode) (privs) & 0xFFFFFFFF))
|
|
43
|
+
#define ACLITEM_SET_GOPTIONS(item,goptions) \
|
|
44
|
+
((item).ai_privs = ((item).ai_privs & ~(((AclMode) 0xFFFFFFFF) << 32)) | \
|
|
45
|
+
(((AclMode) (goptions) & 0xFFFFFFFF) << 32))
|
|
46
|
+
#define ACLITEM_SET_RIGHTS(item,rights) \
|
|
47
|
+
((item).ai_privs = (AclMode) (rights))
|
|
48
|
+
|
|
49
|
+
#define ACLITEM_SET_PRIVS_GOPTIONS(item,privs,goptions) \
|
|
50
|
+
((item).ai_privs = ((AclMode) (privs) & 0xFFFFFFFF) | \
|
|
51
|
+
(((AclMode) (goptions) & 0xFFFFFFFF) << 32))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
#define ACLITEM_ALL_PRIV_BITS ((AclMode) 0xFFFFFFFF)
|
|
55
|
+
#define ACLITEM_ALL_GOPTION_BITS ((AclMode) 0xFFFFFFFF << 32)
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Definitions for convenient access to Acl (array of AclItem).
|
|
59
|
+
* These are standard PostgreSQL arrays, but are restricted to have one
|
|
60
|
+
* dimension and no nulls. We also ignore the lower bound when reading,
|
|
61
|
+
* and set it to one when writing.
|
|
62
|
+
*
|
|
63
|
+
* CAUTION: as of PostgreSQL 7.1, these arrays are toastable (just like all
|
|
64
|
+
* other array types). Therefore, be careful to detoast them with the
|
|
65
|
+
* macros provided, unless you know for certain that a particular array
|
|
66
|
+
* can't have been toasted.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* Acl a one-dimensional array of AclItem
|
|
72
|
+
*/
|
|
73
|
+
typedef struct ArrayType Acl;
|
|
74
|
+
|
|
75
|
+
#define ACL_NUM(ACL) (ARR_DIMS(ACL)[0])
|
|
76
|
+
#define ACL_DAT(ACL) ((AclItem *) ARR_DATA_PTR(ACL))
|
|
77
|
+
#define ACL_N_SIZE(N) (ARR_OVERHEAD_NONULLS(1) + ((N) * sizeof(AclItem)))
|
|
78
|
+
#define ACL_SIZE(ACL) ARR_SIZE(ACL)
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* fmgr macros for these types
|
|
82
|
+
*/
|
|
83
|
+
#define DatumGetAclItemP(X) ((AclItem *) DatumGetPointer(X))
|
|
84
|
+
#define PG_GETARG_ACLITEM_P(n) DatumGetAclItemP(PG_GETARG_DATUM(n))
|
|
85
|
+
#define PG_RETURN_ACLITEM_P(x) PG_RETURN_POINTER(x)
|
|
86
|
+
|
|
87
|
+
#define DatumGetAclP(X) ((Acl *) PG_DETOAST_DATUM(X))
|
|
88
|
+
#define DatumGetAclPCopy(X) ((Acl *) PG_DETOAST_DATUM_COPY(X))
|
|
89
|
+
#define PG_GETARG_ACL_P(n) DatumGetAclP(PG_GETARG_DATUM(n))
|
|
90
|
+
#define PG_GETARG_ACL_P_COPY(n) DatumGetAclPCopy(PG_GETARG_DATUM(n))
|
|
91
|
+
#define PG_RETURN_ACL_P(x) PG_RETURN_POINTER(x)
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* ACL modification opcodes for aclupdate
|
|
95
|
+
*/
|
|
96
|
+
#define ACL_MODECHG_ADD 1
|
|
97
|
+
#define ACL_MODECHG_DEL 2
|
|
98
|
+
#define ACL_MODECHG_EQL 3
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* External representations of the privilege bits --- aclitemin/aclitemout
|
|
102
|
+
* represent each possible privilege bit with a distinct 1-character code
|
|
103
|
+
*/
|
|
104
|
+
#define ACL_INSERT_CHR 'a' /* formerly known as "append" */
|
|
105
|
+
#define ACL_SELECT_CHR 'r' /* formerly known as "read" */
|
|
106
|
+
#define ACL_UPDATE_CHR 'w' /* formerly known as "write" */
|
|
107
|
+
#define ACL_DELETE_CHR 'd'
|
|
108
|
+
#define ACL_TRUNCATE_CHR 'D' /* super-delete, as it were */
|
|
109
|
+
#define ACL_REFERENCES_CHR 'x'
|
|
110
|
+
#define ACL_TRIGGER_CHR 't'
|
|
111
|
+
#define ACL_EXECUTE_CHR 'X'
|
|
112
|
+
#define ACL_USAGE_CHR 'U'
|
|
113
|
+
#define ACL_CREATE_CHR 'C'
|
|
114
|
+
#define ACL_CREATE_TEMP_CHR 'T'
|
|
115
|
+
#define ACL_CONNECT_CHR 'c'
|
|
116
|
+
#define ACL_SET_CHR 's'
|
|
117
|
+
#define ACL_ALTER_SYSTEM_CHR 'A'
|
|
118
|
+
#define ACL_MAINTAIN_CHR 'm'
|
|
119
|
+
|
|
120
|
+
/* string holding all privilege code chars, in order by bitmask position */
|
|
121
|
+
#define ACL_ALL_RIGHTS_STR "arwdDxtXUCTcsAm"
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* Bitmasks defining "all rights" for each supported object type
|
|
125
|
+
*/
|
|
126
|
+
#define ACL_ALL_RIGHTS_COLUMN (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_REFERENCES)
|
|
127
|
+
#define ACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_TRUNCATE|ACL_REFERENCES|ACL_TRIGGER|ACL_MAINTAIN)
|
|
128
|
+
#define ACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE)
|
|
129
|
+
#define ACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)
|
|
130
|
+
#define ACL_ALL_RIGHTS_FDW (ACL_USAGE)
|
|
131
|
+
#define ACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE)
|
|
132
|
+
#define ACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)
|
|
133
|
+
#define ACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)
|
|
134
|
+
#define ACL_ALL_RIGHTS_LARGEOBJECT (ACL_SELECT|ACL_UPDATE)
|
|
135
|
+
#define ACL_ALL_RIGHTS_PARAMETER_ACL (ACL_SET|ACL_ALTER_SYSTEM)
|
|
136
|
+
#define ACL_ALL_RIGHTS_SCHEMA (ACL_USAGE|ACL_CREATE)
|
|
137
|
+
#define ACL_ALL_RIGHTS_TABLESPACE (ACL_CREATE)
|
|
138
|
+
#define ACL_ALL_RIGHTS_TYPE (ACL_USAGE)
|
|
139
|
+
|
|
140
|
+
/* operation codes for pg_*_aclmask */
|
|
141
|
+
typedef enum
|
|
142
|
+
{
|
|
143
|
+
ACLMASK_ALL, /* normal case: compute all bits */
|
|
144
|
+
ACLMASK_ANY, /* return when result is known nonzero */
|
|
145
|
+
} AclMaskHow;
|
|
146
|
+
|
|
147
|
+
/* result codes for pg_*_aclcheck */
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# path: doc/src/sgml/func.sgml
|
|
2
|
+
# blob: b57f161f53c8833c721dede3d48121490dc15f12
|
|
3
|
+
# tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
|
|
4
|
+
# fetched: 2026-09-30 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
|
|
5
|
+
# excerpt: the aclexplode row of "Access Privilege Inquiry Functions" (lines 25843-25867 of the full file)
|
|
6
|
+
#
|
|
7
|
+
<entry role="func_table_entry"><para role="func_signature">
|
|
8
|
+
<indexterm>
|
|
9
|
+
<primary>aclexplode</primary>
|
|
10
|
+
</indexterm>
|
|
11
|
+
<function>aclexplode</function> ( <type>aclitem[]</type> )
|
|
12
|
+
<returnvalue>setof record</returnvalue>
|
|
13
|
+
( <parameter>grantor</parameter> <type>oid</type>,
|
|
14
|
+
<parameter>grantee</parameter> <type>oid</type>,
|
|
15
|
+
<parameter>privilege_type</parameter> <type>text</type>,
|
|
16
|
+
<parameter>is_grantable</parameter> <type>boolean</type> )
|
|
17
|
+
</para>
|
|
18
|
+
<para>
|
|
19
|
+
Returns the <type>aclitem</type> array as a set of rows.
|
|
20
|
+
If the grantee is the pseudo-role PUBLIC, it is represented by zero in
|
|
21
|
+
the <parameter>grantee</parameter> column. Each granted privilege is
|
|
22
|
+
represented as <literal>SELECT</literal>, <literal>INSERT</literal>,
|
|
23
|
+
etc (see <xref linkend="privilege-abbrevs-table"/> for a full list).
|
|
24
|
+
Note that each privilege is broken out as a separate row, so
|
|
25
|
+
only one keyword appears in the <parameter>privilege_type</parameter>
|
|
26
|
+
column.
|
|
27
|
+
</para></entry>
|
|
28
|
+
</row>
|
|
29
|
+
|
|
30
|
+
<row>
|
|
31
|
+
<entry role="func_table_entry"><para role="func_signature">
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# path: doc/src/sgml/ref/alter_default_privileges.sgml
|
|
2
|
+
# blob: 6acd0f1df914c6926e6d6f5bd28b0599d66d629c
|
|
3
|
+
# tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
|
|
4
|
+
# fetched: 2026-09-30 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
|
|
5
|
+
# excerpt: the <synopsis> block only (lines 23-98 of the full file), cut per house doc-size convention
|
|
6
|
+
#
|
|
7
|
+
<synopsis>
|
|
8
|
+
ALTER DEFAULT PRIVILEGES
|
|
9
|
+
[ FOR { ROLE | USER } <replaceable>target_role</replaceable> [, ...] ]
|
|
10
|
+
[ IN SCHEMA <replaceable>schema_name</replaceable> [, ...] ]
|
|
11
|
+
<replaceable class="parameter">abbreviated_grant_or_revoke</replaceable>
|
|
12
|
+
|
|
13
|
+
<phrase>where <replaceable class="parameter">abbreviated_grant_or_revoke</replaceable> is one of:</phrase>
|
|
14
|
+
|
|
15
|
+
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
|
|
16
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
17
|
+
ON TABLES
|
|
18
|
+
TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
|
19
|
+
|
|
20
|
+
GRANT { { USAGE | SELECT | UPDATE }
|
|
21
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
22
|
+
ON SEQUENCES
|
|
23
|
+
TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
|
24
|
+
|
|
25
|
+
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
|
|
26
|
+
ON { FUNCTIONS | ROUTINES }
|
|
27
|
+
TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
|
28
|
+
|
|
29
|
+
GRANT { USAGE | ALL [ PRIVILEGES ] }
|
|
30
|
+
ON TYPES
|
|
31
|
+
TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
|
32
|
+
|
|
33
|
+
GRANT { { USAGE | CREATE }
|
|
34
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
35
|
+
ON SCHEMAS
|
|
36
|
+
TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
|
37
|
+
|
|
38
|
+
GRANT { { SELECT | UPDATE }
|
|
39
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
40
|
+
ON LARGE OBJECTS
|
|
41
|
+
TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
|
42
|
+
|
|
43
|
+
REVOKE [ GRANT OPTION FOR ]
|
|
44
|
+
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
|
|
45
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
46
|
+
ON TABLES
|
|
47
|
+
FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
|
|
48
|
+
[ CASCADE | RESTRICT ]
|
|
49
|
+
|
|
50
|
+
REVOKE [ GRANT OPTION FOR ]
|
|
51
|
+
{ { USAGE | SELECT | UPDATE }
|
|
52
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
53
|
+
ON SEQUENCES
|
|
54
|
+
FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
|
|
55
|
+
[ CASCADE | RESTRICT ]
|
|
56
|
+
|
|
57
|
+
REVOKE [ GRANT OPTION FOR ]
|
|
58
|
+
{ EXECUTE | ALL [ PRIVILEGES ] }
|
|
59
|
+
ON { FUNCTIONS | ROUTINES }
|
|
60
|
+
FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
|
|
61
|
+
[ CASCADE | RESTRICT ]
|
|
62
|
+
|
|
63
|
+
REVOKE [ GRANT OPTION FOR ]
|
|
64
|
+
{ USAGE | ALL [ PRIVILEGES ] }
|
|
65
|
+
ON TYPES
|
|
66
|
+
FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
|
|
67
|
+
[ CASCADE | RESTRICT ]
|
|
68
|
+
|
|
69
|
+
REVOKE [ GRANT OPTION FOR ]
|
|
70
|
+
{ { USAGE | CREATE }
|
|
71
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
72
|
+
ON SCHEMAS
|
|
73
|
+
FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
|
|
74
|
+
[ CASCADE | RESTRICT ]
|
|
75
|
+
|
|
76
|
+
REVOKE [ GRANT OPTION FOR ]
|
|
77
|
+
{ { SELECT | UPDATE }
|
|
78
|
+
[, ...] | ALL [ PRIVILEGES ] }
|
|
79
|
+
ON LARGE OBJECTS
|
|
80
|
+
FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
|
|
81
|
+
[ CASCADE | RESTRICT ]
|
|
82
|
+
</synopsis>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# path: doc/src/sgml/ref/alter_role.sgml
|
|
2
|
+
# blob: 7b0a04bc4637c7c08246e597a9acf4466b467fa2
|
|
3
|
+
# tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
|
|
4
|
+
# fetched: 2026-09-29 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
|
|
5
|
+
# excerpt: the <synopsis> block plus the memberships sentence the GRANT/REVOKE design leans on; blob SHA is the full upstream file
|
|
6
|
+
#
|
|
7
|
+
<synopsis>
|
|
8
|
+
ALTER ROLE <replaceable class="parameter">role_specification</replaceable> [ WITH ] <replaceable class="parameter">option</replaceable> [ ... ]
|
|
9
|
+
|
|
10
|
+
<phrase>where <replaceable class="parameter">option</replaceable> can be:</phrase>
|
|
11
|
+
|
|
12
|
+
SUPERUSER | NOSUPERUSER
|
|
13
|
+
| CREATEDB | NOCREATEDB
|
|
14
|
+
| CREATEROLE | NOCREATEROLE
|
|
15
|
+
| INHERIT | NOINHERIT
|
|
16
|
+
| LOGIN | NOLOGIN
|
|
17
|
+
| REPLICATION | NOREPLICATION
|
|
18
|
+
| BYPASSRLS | NOBYPASSRLS
|
|
19
|
+
| CONNECTION LIMIT <replaceable class="parameter">connlimit</replaceable>
|
|
20
|
+
| [ ENCRYPTED ] PASSWORD '<replaceable class="parameter">password</replaceable>' | PASSWORD NULL
|
|
21
|
+
| VALID UNTIL '<replaceable class="parameter">timestamp</replaceable>'
|
|
22
|
+
|
|
23
|
+
ALTER ROLE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
|
|
24
|
+
|
|
25
|
+
ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
|
|
26
|
+
ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
|
|
27
|
+
ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET <replaceable>configuration_parameter</replaceable>
|
|
28
|
+
ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET ALL
|
|
29
|
+
|
|
30
|
+
<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
|
|
31
|
+
|
|
32
|
+
<replaceable class="parameter">role_name</replaceable>
|
|
33
|
+
| CURRENT_ROLE
|
|
34
|
+
| CURRENT_USER
|
|
35
|
+
| SESSION_USER
|
|
36
|
+
</synopsis>
|
|
37
|
+
|
|
38
|
+
The first variant of this command listed in the synopsis can change
|
|
39
|
+
many of the role attributes that can be specified in
|
|
40
|
+
<link linkend="sql-createrole"><command>CREATE ROLE</command></link>.
|
|
41
|
+
(All the possible attributes are covered,
|
|
42
|
+
except that there are no options for adding or removing memberships; use
|
|
43
|
+
<link linkend="sql-grant"><command>GRANT</command></link> and
|
|
44
|
+
<link linkend="sql-revoke"><command>REVOKE</command></link> for that.)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# path: doc/src/sgml/ref/create_role.sgml
|
|
2
|
+
# blob: cee23b1ea6b4dcf2d9d356d07a582e64808c2912
|
|
3
|
+
# tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
|
|
4
|
+
# fetched: 2026-09-29 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
|
|
5
|
+
# excerpt: the <synopsis> block only (the provenance test reads the option list); blob SHA is the full upstream file
|
|
6
|
+
#
|
|
7
|
+
<synopsis>
|
|
8
|
+
CREATE ROLE <replaceable class="parameter">name</replaceable> [ [ WITH ] <replaceable class="parameter">option</replaceable> [ ... ] ]
|
|
9
|
+
|
|
10
|
+
<phrase>where <replaceable class="parameter">option</replaceable> can be:</phrase>
|
|
11
|
+
|
|
12
|
+
SUPERUSER | NOSUPERUSER
|
|
13
|
+
| CREATEDB | NOCREATEDB
|
|
14
|
+
| CREATEROLE | NOCREATEROLE
|
|
15
|
+
| INHERIT | NOINHERIT
|
|
16
|
+
| LOGIN | NOLOGIN
|
|
17
|
+
| REPLICATION | NOREPLICATION
|
|
18
|
+
| BYPASSRLS | NOBYPASSRLS
|
|
19
|
+
| CONNECTION LIMIT <replaceable class="parameter">connlimit</replaceable>
|
|
20
|
+
| [ ENCRYPTED ] PASSWORD '<replaceable class="parameter">password</replaceable>' | PASSWORD NULL
|
|
21
|
+
| VALID UNTIL '<replaceable class="parameter">timestamp</replaceable>'
|
|
22
|
+
| IN ROLE <replaceable class="parameter">role_name</replaceable> [, ...]
|
|
23
|
+
| ROLE <replaceable class="parameter">role_name</replaceable> [, ...]
|
|
24
|
+
| ADMIN <replaceable class="parameter">role_name</replaceable> [, ...]
|
|
25
|
+
| SYSID <replaceable class="parameter">uid</replaceable>
|
|
26
|
+
</synopsis>
|