@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
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a `LiteLLM.PolicyAttachment` declares (props) and what is remembered about it (attributes).
|
|
3
|
+
*
|
|
4
|
+
* ★ AN ATTACHMENT SAYS WHERE A POLICY APPLIES (`LiteLLM_PolicyAttachmentTable`,
|
|
5
|
+
* `/policies/attachments`): a request gets the policy when it matches ALL of the attachment's
|
|
6
|
+
* selectors (`PolicyMatcher.scope_matches`, `policy_engine/policy_matcher.py`, 1.103.0). Teams, keys
|
|
7
|
+
* and models are matched by ALIAS or model name with `*` wildcards (`prefix-*`); a request's team
|
|
8
|
+
* alias is `LiteLLM.Team`'s `teamAlias`, not its id.
|
|
9
|
+
* ⛔ AN ATTACHMENT WITH NO SELECTOR IS GLOBAL. `PolicyScope.get_teams()`, `get_keys()` and
|
|
10
|
+
* `get_models()` each default to `["*"]` when empty, and empty `tags` are simply not checked
|
|
11
|
+
* (`policy_types.py`), so an attachment that names only a policy applies to EVERY request. It is
|
|
12
|
+
* refused unless `scope: '*'` says so. The other three empty selectors are "any", which is why
|
|
13
|
+
* `{ teams: ['x'] }` covers every key and every model of team x.
|
|
14
|
+
* ⛔ IMMUTABLE: THERE IS NO UPDATE ROUTE (`policy_endpoints.py` has create, get, list and delete only).
|
|
15
|
+
* Any change is a REPLACE: the new attachment is created first, then the old one is deleted, so for a
|
|
16
|
+
* moment both apply. Guardrails are additive, so overlap can only add enforcement, never drop it.
|
|
17
|
+
* ★ IDENTITY IS CONTENT. The id is issued by the proxy and there is no name, so a live attachment is
|
|
18
|
+
* adopted by matching every field (policy, scope, the four selector sets, priority).
|
|
19
|
+
* ⚠️ CONFIG-FILE ATTACHMENTS (`config-<n>` ids) are never adopted or deleted: they cannot be removed
|
|
20
|
+
* through the API.
|
|
21
|
+
*/
|
|
22
|
+
export interface PolicyAttachmentProps {
|
|
23
|
+
/** The policy to attach, by name. The proxy refuses a name with no PRODUCTION version (404). */
|
|
24
|
+
readonly policyName: string;
|
|
25
|
+
/** `'*'` for a global attachment. Declare this OR a selector; neither is refused (see above). */
|
|
26
|
+
readonly scope?: '*';
|
|
27
|
+
/** Team ALIASES or patterns. A set. */
|
|
28
|
+
readonly teams?: readonly string[];
|
|
29
|
+
/** Key aliases or patterns. A set. */
|
|
30
|
+
readonly keys?: readonly string[];
|
|
31
|
+
/** Model names or patterns. A set. */
|
|
32
|
+
readonly models?: readonly string[];
|
|
33
|
+
/** Tag patterns matched against key and team `metadata.tags`. A set. */
|
|
34
|
+
readonly tags?: readonly string[];
|
|
35
|
+
/** Explicit execution order, lower first; an attachment with one runs before those without. 32-bit int. */
|
|
36
|
+
readonly priority?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface PolicyAttachmentAttributes {
|
|
39
|
+
readonly attachmentId: string;
|
|
40
|
+
readonly policyName: string;
|
|
41
|
+
readonly scope: string | null;
|
|
42
|
+
readonly teams: readonly string[];
|
|
43
|
+
readonly keys: readonly string[];
|
|
44
|
+
readonly models: readonly string[];
|
|
45
|
+
readonly tags: readonly string[];
|
|
46
|
+
readonly priority: number | null;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=policy-attachment-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-attachment-types.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-attachment-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iGAAiG;IACjG,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACrB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,sCAAsC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `LiteLLM.PolicyAttachment` — one row of LiteLLM's policy attachment table
|
|
3
|
+
* (`/policies/attachments`): WHERE a policy applies, by team alias, key alias, model and tag. Props,
|
|
4
|
+
* the global-by-default trap and the config-file exclusion: policy-attachment-types.ts.
|
|
5
|
+
*
|
|
6
|
+
* ⛔ IMMUTABLE, SO EVERY CHANGE IS A CREATE-FIRST REPLACE. There is no update route. The engine creates
|
|
7
|
+
* the new attachment and then deletes the old, so both apply for a moment; guardrails are additive,
|
|
8
|
+
* so that can only add enforcement.
|
|
9
|
+
* ★ THE REMOVAL POLICY IS THE DEFAULT (`destroy`), DELIBERATELY NOT `retain` (the other registry
|
|
10
|
+
* resources retain). Under `retain` a replace would leave the OLD attachment live beside the new one
|
|
11
|
+
* for good: a scope the declaration no longer names would keep the policy attached. An attachment
|
|
12
|
+
* holds no data, so removing it loses nothing but the scoping the declaration just dropped.
|
|
13
|
+
* ★ ADOPT BY CONTENT. A live attachment that matches every field, with no state, is `Unowned` and needs
|
|
14
|
+
* `--adopt`. Two identical live rows are refused, never guessed at.
|
|
15
|
+
* ⚠️ NO LICENCE GATE ON THESE ROUTES: none in `policy_endpoints.py` or `policy_engine/*.py` (1.103.0).
|
|
16
|
+
* The guardrail-policies docs page says team/key-based attachment needs Enterprise
|
|
17
|
+
* (docs.litellm.ai/docs/proxy/guardrails/guardrail_policies); whether a CE proxy enforces a
|
|
18
|
+
* team-scoped attachment is UNVERIFIED.
|
|
19
|
+
* ⛔ NO LITELLM CREDENTIAL IS A PROP; `litellmProviders`' layer supplies `Credentials`.
|
|
20
|
+
*/
|
|
21
|
+
import { Resource } from 'alchemy';
|
|
22
|
+
import type { Input } from 'alchemy/Input';
|
|
23
|
+
import * as Provider from 'alchemy/Provider';
|
|
24
|
+
import * as Effect from 'effect/Effect';
|
|
25
|
+
import type { PolicyAttachmentAttributes, PolicyAttachmentProps } from './policy-attachment-types.ts';
|
|
26
|
+
import { LitellmRegistryAbsentAfterWriteError, LitellmRegistryAmbiguousError, LitellmRegistryNotConvergedError, LitellmRegistryUnreadableError } from './registry-errors.ts';
|
|
27
|
+
export type { PolicyAttachmentAttributes, PolicyAttachmentProps };
|
|
28
|
+
export type { RegistryError as PolicyAttachmentError } from './registry-errors.ts';
|
|
29
|
+
export interface LiteLLMPolicyAttachment extends Resource<'LiteLLM.PolicyAttachment', PolicyAttachmentProps, PolicyAttachmentAttributes> {
|
|
30
|
+
}
|
|
31
|
+
export declare const LiteLLMPolicyAttachment: import("alchemy").ResourceClass<LiteLLMPolicyAttachment>;
|
|
32
|
+
export declare const isLiteLLMPolicyAttachment: (value: unknown) => value is LiteLLMPolicyAttachment;
|
|
33
|
+
/** ⛔ TEST-ONLY EXPORT. Not on index.ts's barrel. */
|
|
34
|
+
export declare const policyAttachmentHandlers: {
|
|
35
|
+
/** ⛔ With no `output` this is the adoption probe, so the refusals run here too (registry-support.ts). */
|
|
36
|
+
read: ({ olds, output, }: {
|
|
37
|
+
olds: PolicyAttachmentProps;
|
|
38
|
+
output: PolicyAttachmentAttributes | undefined;
|
|
39
|
+
}) => Effect.Effect<PolicyAttachmentAttributes | undefined, LitellmRegistryAmbiguousError | LitellmRegistryUnreadableError | import("@distilled.cloud/litellm/Protocol").LitellmOpError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
40
|
+
diff: ({ news, output, }: {
|
|
41
|
+
news: Input<PolicyAttachmentProps>;
|
|
42
|
+
output: PolicyAttachmentAttributes | undefined;
|
|
43
|
+
}) => Effect.Effect<{
|
|
44
|
+
readonly deleteFirst?: never;
|
|
45
|
+
readonly action: 'noop';
|
|
46
|
+
} | {
|
|
47
|
+
readonly action: 'replace';
|
|
48
|
+
readonly deleteFirst: false;
|
|
49
|
+
} | undefined, import("./registry-errors.ts").LitellmRegistryInvalidError, never>;
|
|
50
|
+
reconcile: ({ news, output, }: {
|
|
51
|
+
news: PolicyAttachmentProps;
|
|
52
|
+
output: PolicyAttachmentAttributes | undefined;
|
|
53
|
+
}) => Effect.Effect<PolicyAttachmentAttributes, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("@distilled.cloud/litellm/Errors").LitellmParseError | LitellmRegistryAbsentAfterWriteError | LitellmRegistryAmbiguousError | import("./registry-errors.ts").LitellmRegistryInvalidError | LitellmRegistryNotConvergedError | LitellmRegistryUnreadableError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/policy_engine").UnprocessableEntity, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
54
|
+
delete: ({ output }: {
|
|
55
|
+
output: PolicyAttachmentAttributes;
|
|
56
|
+
}) => Effect.Effect<void, import("@distilled.cloud/litellm/policy_engine").DeletePolicyAttachmentPoliciesAttachmentsAttachmentIdDeleteError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
57
|
+
/** ⛔ EMPTY: adoption is an explicit act (`--adopt`), and no ownership mark exists to filter by. */
|
|
58
|
+
list: () => Effect.Effect<never[], never, never>;
|
|
59
|
+
};
|
|
60
|
+
export declare const LiteLLMPolicyAttachmentProvider: () => import("effect/Layer").Layer<Provider.Provider<LiteLLMPolicyAttachment>, never, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
61
|
+
//# sourceMappingURL=policy-attachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-attachment.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAQxC,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,oCAAoC,EACpC,6BAA6B,EAC7B,gCAAgC,EAChC,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,CAAC;AAClE,YAAY,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAInF,MAAM,WAAW,uBAAwB,SAAQ,QAAQ,CACvD,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,CAC3B;CAAG;AAEJ,eAAO,MAAM,uBAAuB,0DAEnC,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAAW,OAAO,KAAG,KAAK,IAAI,uBACe,CAAC;AA0BpF,oDAAoD;AACpD,eAAO,MAAM,wBAAwB;IACnC,yGAAyG;IACzG,IAAI,sBAGD;QACD,IAAI,EAAE,qBAAqB,CAAC;QAC5B,MAAM,EAAE,0BAA0B,GAAG,SAAS,CAAC;KAChD;IAUD,IAAI,sBAGD;QACD,IAAI,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,EAAE,0BAA0B,GAAG,SAAS,CAAC;KAChD;;yBAOkB,MAAM;;yBACN,SAAS;;;IAG5B,SAAS,sBAGN;QACD,IAAI,EAAE,qBAAqB,CAAC;QAC5B,MAAM,EAAE,0BAA0B,GAAG,SAAS,CAAC;KAChD;IAqCD,MAAM,eAAe;QAAE,MAAM,EAAE,0BAA0B,CAAA;KAAE;IAG3D,mGAAmG;IACnG,IAAI;CACL,CAAC;AAEF,eAAO,MAAM,+BAA+B,mJAIzC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire bodies, comparison and refusals for `LiteLLM.Policy`, testable without a server.
|
|
3
|
+
*
|
|
4
|
+
* ★ THE EDIT BODY CARRIES ONLY WHAT DIFFERS AND IS NEVER A `null`: `update_policy_in_db` skips every
|
|
5
|
+
* field that is `None` (policy-types.ts), so a `null` would be a silent no-op the read back would
|
|
6
|
+
* then have to catch.
|
|
7
|
+
*/
|
|
8
|
+
import type * as policies from '@distilled.cloud/litellm/policy_engine';
|
|
9
|
+
import type { PolicyAttributes, PolicyProps, PolicyVersion } from './policy-types.ts';
|
|
10
|
+
/** The first reason a declaration is refused, or `undefined`. Runs before any request. */
|
|
11
|
+
export declare const firstProblem: (props: PolicyProps) => string | undefined;
|
|
12
|
+
/** One policy version. `undefined` is "not a policy row": the caller refuses the whole answer. */
|
|
13
|
+
export declare const toVersion: (value: unknown) => PolicyVersion | undefined;
|
|
14
|
+
/** The attributes of a version: without the status, which is never recorded. */
|
|
15
|
+
export declare const toAttributes: (version: PolicyVersion) => PolicyAttributes;
|
|
16
|
+
/** Wire names of the fields where live and declared disagree. */
|
|
17
|
+
export declare const differing: (live: PolicyAttributes, props: PolicyProps) => readonly string[];
|
|
18
|
+
/** Create body (version 1, which LiteLLM makes production): every declared field. */
|
|
19
|
+
export declare const createBody: (props: PolicyProps) => policies.CreatePolicyPoliciesPostRequest;
|
|
20
|
+
/** Draft edit body: only the fields that differ from what the draft was cloned from. */
|
|
21
|
+
export declare const updateBody: (props: PolicyProps, live: PolicyAttributes) => Omit<policies.UpdatePolicyPoliciesPolicyIdPutRequest, 'policy_id'>;
|
|
22
|
+
//# sourceMappingURL=policy-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-form.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-form.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,wCAAwC,CAAC;AAYxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEtF,0FAA0F;AAC1F,eAAO,MAAM,YAAY,UAAW,WAAW,KAAG,MAAM,GAAG,SA6B1D,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,aAAa,GAAG,SAkB1D,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,YAAY,YAAa,aAAa,KAAG,gBAGrD,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,SAAS,SAAU,gBAAgB,SAAS,WAAW,KAAG,SAAS,MAAM,EAarF,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,UAAU,UAAW,WAAW,KAAG,QAAQ,CAAC,+BAOvD,CAAC;AAEH,wFAAwF;AACxF,eAAO,MAAM,UAAU,UACd,WAAW,QACZ,gBAAgB,KACrB,IAAI,CAAC,QAAQ,CAAC,sCAAsC,EAAE,WAAW,CAWnE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The seven LiteLLM `/policies*` calls `LiteLLM.Policy` uses, through the SDK's typed operations in
|
|
3
|
+
* `@distilled.cloud/litellm/policy_engine` (LiteLLM 1.103.0):
|
|
4
|
+
*
|
|
5
|
+
* versions `listPolicyVersionsPoliciesNamePolicyNameVersionsGet` GET /policies/name/{policy_name}/versions
|
|
6
|
+
* config `listPoliciesPoliciesListGet` GET /policies/list?version_status=production
|
|
7
|
+
* create `createPolicyPoliciesPost` POST /policies
|
|
8
|
+
* draft `createPolicyVersionPoliciesNamePolicyNameVersionsPost` POST /policies/name/{policy_name}/versions
|
|
9
|
+
* edit `updatePolicyPoliciesPolicyIdPut` PUT /policies/{policy_id}
|
|
10
|
+
* status `updatePolicyVersionStatusPoliciesPolicyIdStatusPut` PUT /policies/{policy_id}/status
|
|
11
|
+
* delete `deleteAllPolicyVersionsPoliciesNamePolicyNameAllVersionsDelete` DELETE /policies/name/{policy_name}/all-versions
|
|
12
|
+
*
|
|
13
|
+
* ⛔ THE VERSION LIST IS THE TABLE AND ANSWERS ABSENCE WITH AN EMPTY LIST. `get_versions_by_policy_name`
|
|
14
|
+
* is a `find_many` by name (`policy_registry.py`, 1.103.0), so a name with no rows is `versions: []`
|
|
15
|
+
* with a 200, never a 404. Nothing here needs the SDK's undeclared `NotFound`.
|
|
16
|
+
* ⛔ A CONFIG-FILE POLICY IS NOT IN THE TABLE. `/policies/list` merges DB rows with config.yaml
|
|
17
|
+
* policies (`definition_location: "config"`), and a production DB policy of the same name OVERRIDES the
|
|
18
|
+
* config one at runtime. `configPolicyNames` is how a create refuses to do that by accident.
|
|
19
|
+
* ⚠️ MOST FAILURES HERE ARE A PLAIN 500. The handlers wrap everything in `except Exception` and answer
|
|
20
|
+
* `HTTPException(500, detail=str(e))`, except a duplicate name (400) and a few 404/400 cases matched
|
|
21
|
+
* by message text. The SDK retries 5xx with backoff, so a genuine failure is slow to surface; nothing
|
|
22
|
+
* here reads the text either way (S21).
|
|
23
|
+
* ⛔ DELETE REMOVES EVERY VERSION (`delete_many` by name), not just production, and answers 200 whether
|
|
24
|
+
* or not any row existed, so it is idempotent as it stands. It is why the resource defaults to `retain`.
|
|
25
|
+
*/
|
|
26
|
+
import * as policies from '@distilled.cloud/litellm/policy_engine';
|
|
27
|
+
import * as Effect from 'effect/Effect';
|
|
28
|
+
import type { PolicyVersion } from './policy-types.ts';
|
|
29
|
+
import { LitellmRegistryUnreadableError } from './registry-errors.ts';
|
|
30
|
+
/** Every version of one policy name, newest first as LiteLLM orders them. `[]` when there is none. */
|
|
31
|
+
export declare const listPolicyVersions: (policyName: string) => Effect.Effect<readonly PolicyVersion[], LitellmRegistryUnreadableError | policies.ListPolicyVersionsPoliciesNamePolicyNameVersionsGetError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
32
|
+
/** The names of the policies defined in config.yaml (their `definition_location` is `config`). */
|
|
33
|
+
export declare const configPolicyNames: () => Effect.Effect<string[], LitellmRegistryUnreadableError | policies.ListPoliciesPoliciesListGetError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
34
|
+
/** Creates version 1 AS PRODUCTION. */
|
|
35
|
+
export declare const createPolicy: (body: policies.CreatePolicyPoliciesPostRequest) => Effect.Effect<void, policies.CreatePolicyPoliciesPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
36
|
+
/** A new DRAFT cloned from production. Answers the draft, whose id every later call needs. */
|
|
37
|
+
export declare const createDraft: (policyName: string) => Effect.Effect<PolicyVersion, LitellmRegistryUnreadableError | policies.CreatePolicyVersionPoliciesNamePolicyNameVersionsPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
38
|
+
export declare const editDraft: (policyId: string, body: Omit<policies.UpdatePolicyPoliciesPolicyIdPutRequest, 'policy_id'>) => Effect.Effect<void, policies.UpdatePolicyPoliciesPolicyIdPutError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
39
|
+
/** `draft → published` or `published → production` (which demotes the old production to published). */
|
|
40
|
+
export declare const setVersionStatus: (policyId: string, status: 'published' | 'production') => Effect.Effect<void, policies.UpdatePolicyVersionStatusPoliciesPolicyIdStatusPutError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
41
|
+
export declare const deleteAllVersions: (policyName: string) => Effect.Effect<void, policies.DeleteAllPolicyVersionsPoliciesNamePolicyNameAllVersionsDeleteError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
42
|
+
//# sourceMappingURL=policy-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,QAAQ,MAAM,wCAAwC,CAAC;AACnE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAQtE,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,eAAgB,MAAM,4MAalD,CAAC;AAEJ,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,uKAe3B,CAAC;AAEJ,uCAAuC;AACvC,eAAO,MAAM,YAAY,SAAU,QAAQ,CAAC,+BAA+B,4HACA,CAAC;AAE5E,8FAA8F;AAC9F,eAAO,MAAM,WAAW,eAAgB,MAAM,mMAU3C,CAAC;AAEJ,eAAO,MAAM,SAAS,aACV,MAAM,QACV,IAAI,CAAC,QAAQ,CAAC,sCAAsC,EAAE,WAAW,CAAC,mIAIvE,CAAC;AAEJ,uGAAuG;AACvG,eAAO,MAAM,gBAAgB,aAAc,MAAM,UAAU,WAAW,GAAG,YAAY,sJAM9D,CAAC;AAExB,eAAO,MAAM,iBAAiB,eAAgB,MAAM,kKAK7B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a `LiteLLM.Policy` declares (props) and what is remembered about it (attributes).
|
|
3
|
+
*
|
|
4
|
+
* ★ A POLICY IS A NAMED SET OF GUARDRAILS (`LiteLLM_PolicyTable`, `/policies`;
|
|
5
|
+
* docs.litellm.ai/docs/proxy/guardrails/guardrail_policies): guardrails to add, guardrails to remove
|
|
6
|
+
* from an inherited parent, and an optional model condition. WHERE it applies is a
|
|
7
|
+
* `LiteLLM.PolicyAttachment`, not a property of the policy.
|
|
8
|
+
* ⛔ A POLICY IS VERSIONED, AND THIS RESOURCE MANAGES THE PRODUCTION VERSION. LiteLLM keeps every
|
|
9
|
+
* version (`draft` → `published` → `production`) and only the production one is enforced. `POST /policies`
|
|
10
|
+
* creates version 1 AS PRODUCTION, and `PUT /policies/{id}` edits a DRAFT only (400 otherwise;
|
|
11
|
+
* `policy_endpoints.py` and `policy_registry.py`, 1.103.0). So a change is four calls: new draft from
|
|
12
|
+
* production, edit the draft, publish it, promote it (which demotes the old production to `published`).
|
|
13
|
+
* The old version is kept as history. `policyId` in the attributes is the PRODUCTION version's id and
|
|
14
|
+
* changes with every promotion.
|
|
15
|
+
* ⚠️ NOT MODELLED: `pipeline` (an ordered guardrail pipeline). A new version is cloned from production,
|
|
16
|
+
* so an adopted policy's pipeline survives every update, and none is ever sent.
|
|
17
|
+
* ⚠️ A FIELD CANNOT BE CLEARED THROUGH THE API. `update_policy_in_db` writes only fields that are not
|
|
18
|
+
* `None`, so `description`, `inherit` and `conditionModel` are compared only when declared and
|
|
19
|
+
* removing one from the declaration leaves the live value. The two guardrail lists can be written as
|
|
20
|
+
* `[]`, so they are always compared.
|
|
21
|
+
*/
|
|
22
|
+
export interface PolicyProps {
|
|
23
|
+
/**
|
|
24
|
+
* The policy's name, and the way an existing policy is ADOPTED: its production version, found by
|
|
25
|
+
* name. Identity: a different name is a different policy, so it is a replace (create-first).
|
|
26
|
+
*/
|
|
27
|
+
readonly policyName: string;
|
|
28
|
+
/** Compared only when declared. Blank is refused. */
|
|
29
|
+
readonly description?: string;
|
|
30
|
+
/** The parent policy's name. Compared only when declared. Refused if it is this policy's own name. */
|
|
31
|
+
readonly inherit?: string;
|
|
32
|
+
/** Guardrail names this policy adds, compared as a SET and always compared (default `[]`). */
|
|
33
|
+
readonly guardrailsAdd?: readonly string[];
|
|
34
|
+
/** Guardrail names removed from the inherited set, compared as a set, always compared (default `[]`). */
|
|
35
|
+
readonly guardrailsRemove?: readonly string[];
|
|
36
|
+
/**
|
|
37
|
+
* `condition.model`: the model name (exact or regex) the policy applies to. Compared only when
|
|
38
|
+
* declared. Written as the whole condition (`PolicyConditionRequest` has no other key).
|
|
39
|
+
*/
|
|
40
|
+
readonly conditionModel?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface PolicyAttributes {
|
|
43
|
+
readonly policyName: string;
|
|
44
|
+
/** The PRODUCTION version's id. */
|
|
45
|
+
readonly policyId: string;
|
|
46
|
+
readonly versionNumber: number;
|
|
47
|
+
readonly description: string | null;
|
|
48
|
+
readonly inherit: string | null;
|
|
49
|
+
readonly guardrailsAdd: readonly string[];
|
|
50
|
+
readonly guardrailsRemove: readonly string[];
|
|
51
|
+
readonly conditionModel: string | null;
|
|
52
|
+
}
|
|
53
|
+
/** One version of a policy, as the version list returns it. */
|
|
54
|
+
export interface PolicyVersion extends PolicyAttributes {
|
|
55
|
+
readonly versionStatus: string;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=policy-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-types.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yGAAyG;IACzG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,+DAA+D;AAC/D,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `LiteLLM.Policy` — the PRODUCTION version of one named policy in LiteLLM's policy engine
|
|
3
|
+
* (`LiteLLM_PolicyTable`, `/policies`): a set of guardrails to add and remove, with an optional model
|
|
4
|
+
* condition. Props, the versioning and what is left out: policy-types.ts.
|
|
5
|
+
*
|
|
6
|
+
* ★ A CHANGE IS A NEW VERSION, PROMOTED. Only a draft is editable and only production is enforced, so
|
|
7
|
+
* an update clones production to a draft, edits it, publishes it and promotes it; the old production
|
|
8
|
+
* stays as a `published` version. A run that stops midway leaves a draft or a published copy, both
|
|
9
|
+
* inert; the next run starts from production again and never touches a version it did not make.
|
|
10
|
+
* ★ ADOPT BY NAME. A live production version with no state is `Unowned`, so it needs `--adopt`.
|
|
11
|
+
* ⛔ A POLICY THAT EXISTS ONLY IN config.yaml IS NEVER SHADOWED BY ACCIDENT: a create refuses when the
|
|
12
|
+
* name belongs to a config policy, because a production DB policy would override it at runtime.
|
|
13
|
+
* ⛔ NO PRODUCTION VERSION IS NEVER GUESSED AT: a name whose versions are all `draft` or `published`
|
|
14
|
+
* (someone demoted it) is refused with the count, not promoted.
|
|
15
|
+
* ★ `defaultRemovalPolicy: 'retain'` — deleting removes EVERY version (the history) and stops the
|
|
16
|
+
* guardrails applying wherever an attachment pointed at it. Opt in with `RemovalPolicy.destroy()`.
|
|
17
|
+
* ⚠️ NO LICENCE GATE ON THESE ROUTES: `policy_endpoints.py` and `policy_engine/*.py` have no
|
|
18
|
+
* `premium_user` check (grep, 1.103.0). The docs page says team/key-based attachment needs Enterprise
|
|
19
|
+
* (docs.litellm.ai/docs/proxy/guardrails/guardrail_policies); whether a CE proxy enforces one is
|
|
20
|
+
* UNVERIFIED. The `policies` metadata of a team or key IS gated (`_premium_user_check`).
|
|
21
|
+
* ⛔ NO LITELLM CREDENTIAL IS A PROP; `litellmProviders`' layer supplies `Credentials`.
|
|
22
|
+
*/
|
|
23
|
+
import { Resource } from 'alchemy';
|
|
24
|
+
import type { Input } from 'alchemy/Input';
|
|
25
|
+
import * as Provider from 'alchemy/Provider';
|
|
26
|
+
import * as Effect from 'effect/Effect';
|
|
27
|
+
import type { PolicyAttributes, PolicyProps } from './policy-types.ts';
|
|
28
|
+
import { LitellmRegistryAbsentAfterWriteError, LitellmRegistryInvalidError, LitellmRegistryNotConvergedError } from './registry-errors.ts';
|
|
29
|
+
export type { PolicyAttributes, PolicyProps };
|
|
30
|
+
export type { RegistryError as PolicyError } from './registry-errors.ts';
|
|
31
|
+
export interface LiteLLMPolicy extends Resource<'LiteLLM.Policy', PolicyProps, PolicyAttributes> {
|
|
32
|
+
}
|
|
33
|
+
export declare const LiteLLMPolicy: import("alchemy").ResourceClass<LiteLLMPolicy>;
|
|
34
|
+
export declare const isLiteLLMPolicy: (value: unknown) => value is LiteLLMPolicy;
|
|
35
|
+
/** ⛔ TEST-ONLY EXPORT. Not on index.ts's barrel. */
|
|
36
|
+
export declare const policyHandlers: {
|
|
37
|
+
/** ⛔ With no `output` this is the adoption probe, so the refusals run here too (registry-support.ts). */
|
|
38
|
+
read: ({ olds, output }: {
|
|
39
|
+
olds: PolicyProps;
|
|
40
|
+
output: PolicyAttributes | undefined;
|
|
41
|
+
}) => Effect.Effect<PolicyAttributes | undefined, import("./registry-errors.ts").LitellmRegistryUnreadableError | import("@distilled.cloud/litellm/policy_engine").ListPolicyVersionsPoliciesNamePolicyNameVersionsGetError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
42
|
+
diff: ({ news, output }: {
|
|
43
|
+
news: Input<PolicyProps>;
|
|
44
|
+
output: PolicyAttributes | undefined;
|
|
45
|
+
}) => Effect.Effect<{
|
|
46
|
+
readonly action: 'replace';
|
|
47
|
+
readonly deleteFirst: false;
|
|
48
|
+
} | {
|
|
49
|
+
readonly deleteFirst?: never;
|
|
50
|
+
readonly action: 'noop';
|
|
51
|
+
} | {
|
|
52
|
+
readonly deleteFirst?: never;
|
|
53
|
+
readonly action: 'update';
|
|
54
|
+
} | undefined, LitellmRegistryInvalidError, never>;
|
|
55
|
+
reconcile: ({ news }: {
|
|
56
|
+
news: PolicyProps;
|
|
57
|
+
}) => Effect.Effect<PolicyAttributes, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("@distilled.cloud/litellm/Errors").LitellmParseError | LitellmRegistryAbsentAfterWriteError | LitellmRegistryInvalidError | LitellmRegistryNotConvergedError | import("./registry-errors.ts").LitellmRegistryUnreadableError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/policy_engine").UnprocessableEntity, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
58
|
+
delete: ({ output }: {
|
|
59
|
+
output: PolicyAttributes;
|
|
60
|
+
}) => Effect.Effect<void, import("@distilled.cloud/litellm/policy_engine").DeleteAllPolicyVersionsPoliciesNamePolicyNameAllVersionsDeleteError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
61
|
+
/** ⛔ EMPTY: adoption is an explicit act (`--adopt`), and no ownership mark exists to filter by. */
|
|
62
|
+
list: () => Effect.Effect<never[], never, never>;
|
|
63
|
+
};
|
|
64
|
+
export declare const LiteLLMPolicyProvider: () => import("effect/Layer").Layer<Provider.Provider<LiteLLMPolicy>, never, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
65
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/litellm/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAYxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAiB,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,oCAAoC,EACpC,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;AAC9C,YAAY,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIzE,MAAM,WAAW,aAAc,SAAQ,QAAQ,CAAC,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,CAAC;CAAG;AAEnG,eAAO,MAAM,aAAa,gDAExB,CAAC;AAEH,eAAO,MAAM,eAAe,UAAW,OAAO,KAAG,KAAK,IAAI,aACe,CAAC;AAQ1E,oDAAoD;AACpD,eAAO,MAAM,cAAc;IACzB,yGAAyG;IACzG,IAAI,qBAAqB;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAA;KAAE;IAUpF,IAAI,qBAAqB;QAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAA;KAAE;yBAOpE,SAAS;;;;yBAGb,MAAM;;;yBACN,QAAQ;;IAG3B,SAAS,aAAa;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE;IA4C3C,MAAM,eAAe;QAAE,MAAM,EAAE,gBAAgB,CAAA;KAAE;IAEjD,mGAAmG;IACnG,IAAI;CACL,CAAC;AAEF,eAAO,MAAM,qBAAqB,yIACyD,CAAC"}
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { type Credentials } from '@distilled.cloud/litellm/Credentials';
|
|
22
22
|
import * as Layer from 'effect/Layer';
|
|
23
|
-
export declare const litellmProviders: (creds?: Layer.Layer<Credentials>) => Layer.Layer<Credentials | import("alchemy").Provider<import("./budget.ts").LiteLLMBudget> | import("alchemy").Provider<import("./pass-through-endpoint.ts").LiteLLMPassThroughEndpoint>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stack | import("alchemy").Stage>;
|
|
23
|
+
export declare const litellmProviders: (creds?: Layer.Layer<Credentials>) => Layer.Layer<Credentials | import("alchemy").Provider<import("./access-group.ts").LiteLLMAccessGroup> | import("alchemy").Provider<import("./budget.ts").LiteLLMBudget> | import("alchemy").Provider<import("./credential.ts").LiteLLMCredential> | import("alchemy").Provider<import("./key.ts").LiteLLMKey> | import("alchemy").Provider<import("./mcp-server.ts").LiteLLMMCPServer> | import("alchemy").Provider<import("./model.ts").LiteLLMModel> | import("alchemy").Provider<import("./pass-through-endpoint.ts").LiteLLMPassThroughEndpoint> | import("alchemy").Provider<import("./policy.ts").LiteLLMPolicy> | import("alchemy").Provider<import("./policy-attachment.ts").LiteLLMPolicyAttachment> | import("alchemy").Provider<import("./team.ts").LiteLLMTeam> | import("alchemy").Provider<import("./tool-policy.ts").LiteLLMToolPolicy> | import("alchemy").Provider<import("./toolset.ts").LiteLLMToolset>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stack | import("alchemy").Stage>;
|
|
24
24
|
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/litellm/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,sCAAsC,CAAC;AAC5F,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/litellm/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,sCAAsC,CAAC;AAC5F,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AActC,eAAO,MAAM,gBAAgB,WAAW,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,g/BAc7B,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
declare const LitellmRegistryInvalidError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
2
|
+
readonly _tag: "LitellmRegistryInvalidError";
|
|
3
|
+
} & Readonly<A>;
|
|
4
|
+
/** A declaration the resource refuses before any request: a combination nobody meant. */
|
|
5
|
+
export declare class LitellmRegistryInvalidError extends LitellmRegistryInvalidError_base<{
|
|
6
|
+
readonly resource: string;
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly problem: string;
|
|
9
|
+
}> {
|
|
10
|
+
get message(): string;
|
|
11
|
+
}
|
|
12
|
+
declare const LitellmRegistryUnreadableError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
13
|
+
readonly _tag: "LitellmRegistryUnreadableError";
|
|
14
|
+
} & Readonly<A>;
|
|
15
|
+
/** A list or read answered something that is not the rows this resource expects. */
|
|
16
|
+
export declare class LitellmRegistryUnreadableError extends LitellmRegistryUnreadableError_base<{
|
|
17
|
+
readonly resource: string;
|
|
18
|
+
readonly reason: string;
|
|
19
|
+
}> {
|
|
20
|
+
get message(): string;
|
|
21
|
+
}
|
|
22
|
+
declare const LitellmRegistryAmbiguousError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
23
|
+
readonly _tag: "LitellmRegistryAmbiguousError";
|
|
24
|
+
} & Readonly<A>;
|
|
25
|
+
/**
|
|
26
|
+
* More than one live row could be the declared one, so adopting by name cannot say which. Nothing is
|
|
27
|
+
* adopted, updated or deleted on a guess: declare the id to choose one.
|
|
28
|
+
*/
|
|
29
|
+
export declare class LitellmRegistryAmbiguousError extends LitellmRegistryAmbiguousError_base<{
|
|
30
|
+
readonly resource: string;
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly ids: readonly string[];
|
|
33
|
+
}> {
|
|
34
|
+
get message(): string;
|
|
35
|
+
}
|
|
36
|
+
declare const LitellmRegistryAbsentAfterWriteError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
37
|
+
readonly _tag: "LitellmRegistryAbsentAfterWriteError";
|
|
38
|
+
} & Readonly<A>;
|
|
39
|
+
/** A write returned no error, yet the row is not there on the read back. */
|
|
40
|
+
export declare class LitellmRegistryAbsentAfterWriteError extends LitellmRegistryAbsentAfterWriteError_base<{
|
|
41
|
+
readonly resource: string;
|
|
42
|
+
readonly name: string;
|
|
43
|
+
}> {
|
|
44
|
+
get message(): string;
|
|
45
|
+
}
|
|
46
|
+
declare const LitellmRegistryNotConvergedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
47
|
+
readonly _tag: "LitellmRegistryNotConvergedError";
|
|
48
|
+
} & Readonly<A>;
|
|
49
|
+
/**
|
|
50
|
+
* A write returned no error, yet the row still differs from the declaration. The route may merge with
|
|
51
|
+
* `exclude_none` or a truthiness check; the read back says so instead of reporting a converged row.
|
|
52
|
+
*/
|
|
53
|
+
export declare class LitellmRegistryNotConvergedError extends LitellmRegistryNotConvergedError_base<{
|
|
54
|
+
readonly resource: string;
|
|
55
|
+
readonly name: string;
|
|
56
|
+
readonly fields: readonly string[];
|
|
57
|
+
}> {
|
|
58
|
+
get message(): string;
|
|
59
|
+
}
|
|
60
|
+
export type RegistryError = LitellmRegistryInvalidError | LitellmRegistryUnreadableError | LitellmRegistryAmbiguousError | LitellmRegistryAbsentAfterWriteError | LitellmRegistryNotConvergedError;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=registry-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-errors.d.ts","sourceRoot":"","sources":["../../src/litellm/registry-errors.ts"],"names":[],"mappings":";;;AAYA,yFAAyF;AACzF,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED,oFAAoF;AACpF,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,mCAEjD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED,4EAA4E;AAC5E,qBAAa,oCAAqC,SAAQ,0CAExD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,sCAEpD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;AAED,MAAM,MAAM,aAAa,GACrB,2BAA2B,GAC3B,8BAA8B,GAC9B,6BAA6B,GAC7B,oCAAoC,GACpC,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import { LitellmRegistryInvalidError } from './registry-errors.ts';
|
|
3
|
+
/** Whether a failure is the SDK's `NotFound` class. A 401, a 500 or a dead network is never absence. */
|
|
4
|
+
export declare const isNotFound: (error: unknown) => boolean;
|
|
5
|
+
/**
|
|
6
|
+
* ⚠️ The SDK types most of these answers `{ body: unknown }`, but hands a JSON array or object back as
|
|
7
|
+
* it came (measured through the fakes, as for `/budget/list`). Accept both shapes.
|
|
8
|
+
*/
|
|
9
|
+
export declare const bodyOf: (response: unknown) => unknown;
|
|
10
|
+
export type Row = Readonly<Record<string, unknown>>;
|
|
11
|
+
/** The value as a plain object, else `undefined`. An array is not a row. */
|
|
12
|
+
export declare const asRow: (value: unknown) => Row | undefined;
|
|
13
|
+
/** The strings of a live list, in order. Anything else (`null`, a number) is skipped, never trusted. */
|
|
14
|
+
export declare const stringsOf: (value: unknown) => readonly string[];
|
|
15
|
+
/** `null` for anything that is not a string: a live column can hold `null`, and so can a proxy's JSON. */
|
|
16
|
+
export declare const stringOrNull: (value: unknown) => string | null;
|
|
17
|
+
/** `null` for anything that is not a finite number. Numeric strings (Prisma BigInt) are converted. */
|
|
18
|
+
export declare const numberOrNull: (value: unknown) => number | null;
|
|
19
|
+
/** Sorted, de-duplicated. Every list a resource compares is a SET, so this is its canonical form. */
|
|
20
|
+
export declare const canonical: (values: readonly string[]) => readonly string[];
|
|
21
|
+
export declare const sameSet: (left: readonly string[], right: readonly string[]) => boolean;
|
|
22
|
+
/** Whether a value is not a string with something in it. Takes `unknown`: a declaration can say anything. */
|
|
23
|
+
export declare const isBlank: (value: unknown) => boolean;
|
|
24
|
+
/** The first blank or padded entry of a declared list, or `undefined`. Padding is refused too: it is a typo. */
|
|
25
|
+
export declare const firstBadEntry: (values: readonly unknown[]) => string | undefined;
|
|
26
|
+
/** A list that names one entry twice. Refused rather than silently collapsed: the twin is a typo. */
|
|
27
|
+
export declare const firstDuplicate: (values: readonly string[]) => string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* A refusal as a TYPED FAILURE. Used in `diff` and `reconcile`, where a failure blocks that one
|
|
30
|
+
* resource with a message.
|
|
31
|
+
*/
|
|
32
|
+
export declare const failIfInvalid: (resource: string, name: string, problem: string | undefined) => Effect.Effect<void, never, never> | Effect.Effect<never, LitellmRegistryInvalidError, never>;
|
|
33
|
+
/**
|
|
34
|
+
* The same refusal as a DEFECT, for `read` with no `output` — Alchemy's adoption probe and the ONLY
|
|
35
|
+
* plan-time hook a brand-new declaration gets (`mcp-server.ts` measured this on beta.79, `Plan.ts`
|
|
36
|
+
* lines 1303-1316). ★ A defect and not a typed failure because the same call shape is Alchemy's
|
|
37
|
+
* recovery read of an interrupted create with the STORED props, where only a defect is caught
|
|
38
|
+
* (`Effect.catchDefect`); a typed failure would wedge a stage on props a later, stricter release now
|
|
39
|
+
* refuses. The cold-start probe has no such catch, so there the defect fails the plan, as intended.
|
|
40
|
+
*/
|
|
41
|
+
export declare const dieIfInvalid: (resource: string, name: string, problem: string | undefined) => Effect.Effect<void, never, never>;
|
|
42
|
+
//# sourceMappingURL=registry-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-support.d.ts","sourceRoot":"","sources":["../../src/litellm/registry-support.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE,wGAAwG;AACxG,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,OAAoC,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,MAAM,aAAc,OAAO,KAAG,OAM7B,CAAC;AAEf,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpD,4EAA4E;AAC5E,eAAO,MAAM,KAAK,UAAW,OAAO,KAAG,GAAG,GAAG,SACsD,CAAC;AAEpG,wGAAwG;AACxG,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,SAAS,MAAM,EACoC,CAAC;AAE/F,0GAA0G;AAC1G,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,MAAM,GAAG,IACb,CAAC;AAE3C,sGAAsG;AACtG,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,MAAM,GAAG,IAItD,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,SAAS,WAAY,SAAS,MAAM,EAAE,KAAG,SAAS,MAAM,EACxC,CAAC;AAE9B,eAAO,MAAM,OAAO,SAAU,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,KAAG,OAI3E,CAAC;AAEF,6GAA6G;AAC7G,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,OACS,CAAC;AAEnD,gHAAgH;AAChH,eAAO,MAAM,aAAa,WAAY,SAAS,OAAO,EAAE,KAAG,MAAM,GAAG,SAKnE,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,cAAc,WAAY,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SACN,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,aAAa,aAAc,MAAM,QAAQ,MAAM,WAAW,MAAM,GAAG,SAAS,iGAGV,CAAC;AAEhF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,aAAc,MAAM,QAAQ,MAAM,WAAW,MAAM,GAAG,SAAS,sCAGV,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire bodies, comparison and refusals for `LiteLLM.Team`, testable without a server. The object
|
|
3
|
+
* permission is team-permission.ts, the roster team-members.ts.
|
|
4
|
+
*
|
|
5
|
+
* ★ THE UPDATE IS A PARTIAL ONE (`/team/update` builds its write from `data.json(exclude_unset=True)`,
|
|
6
|
+
* `team_endpoints.py` line 2418, 1.103.0), so it sends the team id and ONLY what differs. Nothing
|
|
7
|
+
* here sends `metadata`, a budget, a limit or any Enterprise field.
|
|
8
|
+
* ★ THE READ IS `/team/info`, and it returns the team's OWN columns: access-group grants are resolved
|
|
9
|
+
* into separate `access_group_*` fields (`_resolve_team_access_group_resources`), never merged into
|
|
10
|
+
* `models` or `object_permission`, so a group cannot make a team look as if it declared a model.
|
|
11
|
+
*/
|
|
12
|
+
import type * as team from '@distilled.cloud/litellm/team_management';
|
|
13
|
+
import type { TeamAttributes, TeamProps } from './team-types.ts';
|
|
14
|
+
/** The first reason a declaration is refused, or `undefined`. Runs before any request. */
|
|
15
|
+
export declare const firstProblem: (props: TeamProps) => string | undefined;
|
|
16
|
+
/** One `team_info` row. `undefined` is "not a team": the caller refuses the whole answer. */
|
|
17
|
+
export declare const toAttributes: (value: unknown) => TeamAttributes | undefined;
|
|
18
|
+
/** The team's own fields (never the roster) where live and declared disagree, by wire name. */
|
|
19
|
+
export declare const teamFieldsDiffering: (live: TeamAttributes, props: TeamProps) => readonly string[];
|
|
20
|
+
/** Everything that differs, the roster included. Empty means converged. */
|
|
21
|
+
export declare const differing: (live: TeamAttributes, props: TeamProps) => readonly string[];
|
|
22
|
+
/** Create body: every declared team field. The roster is added afterwards, through `member_add`. */
|
|
23
|
+
export declare const createBody: (props: TeamProps, teamId: string) => team.PostNewTeamTeamNewRequest;
|
|
24
|
+
/** Update body: the team id and only the fields that differ. `undefined` when nothing but the roster does. */
|
|
25
|
+
export declare const updateBody: (props: TeamProps, live: TeamAttributes) => team.UpdateTeamTeamUpdatePostRequest | undefined;
|
|
26
|
+
//# sourceMappingURL=team-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-form.d.ts","sourceRoot":"","sources":["../../src/litellm/team-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAiBtE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjE,0FAA0F;AAC1F,eAAO,MAAM,YAAY,UAAW,SAAS,KAAG,MAAM,GAAG,SAgCxD,CAAC;AAEF,6FAA6F;AAC7F,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,cAAc,GAAG,SAc9D,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,mBAAmB,SAAU,cAAc,SAAS,SAAS,KAAG,SAAS,MAAM,EAY3F,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,SAAS,SAAU,cAAc,SAAS,SAAS,KAAG,SAAS,MAAM,EAGjF,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,UAAU,UAAW,SAAS,UAAU,MAAM,KAAG,IAAI,CAAC,yBASjE,CAAC;AAEH,8GAA8G;AAC9G,eAAO,MAAM,UAAU,UACd,SAAS,QACV,cAAc,KACnB,IAAI,CAAC,+BAA+B,GAAG,SAoBzC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TeamMember, TeamMemberAttributes } from './team-types.ts';
|
|
2
|
+
/** The roster of a `team_info` row. An entry with no `user_id` (an email-only invite) is skipped. */
|
|
3
|
+
export declare const toMemberAttributes: (value: unknown) => readonly TeamMemberAttributes[];
|
|
4
|
+
/** Declared members that are not on the live roster at all. */
|
|
5
|
+
export declare const membersToAdd: (live: readonly TeamMemberAttributes[], declared: readonly TeamMember[] | undefined) => readonly TeamMember[];
|
|
6
|
+
/** Declared members that are on the roster with another role. */
|
|
7
|
+
export declare const roleChanges: (live: readonly TeamMemberAttributes[], declared: readonly TeamMember[] | undefined) => readonly TeamMember[];
|
|
8
|
+
/** Whether the declared roster is fully present. Extra live members do not count. */
|
|
9
|
+
export declare const rosterPending: (live: readonly TeamMemberAttributes[], declared: readonly TeamMember[] | undefined) => boolean;
|
|
10
|
+
//# sourceMappingURL=team-members.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-members.d.ts","sourceRoot":"","sources":["../../src/litellm/team-members.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAExE,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,SAAS,oBAAoB,EAahF,CAAC;AAIF,+DAA+D;AAC/D,eAAO,MAAM,YAAY,SACjB,SAAS,oBAAoB,EAAE,YAC3B,SAAS,UAAU,EAAE,GAAG,SAAS,KAC1C,SAAS,UAAU,EACoE,CAAC;AAE3F,iEAAiE;AACjE,eAAO,MAAM,WAAW,SAChB,SAAS,oBAAoB,EAAE,YAC3B,SAAS,UAAU,EAAE,GAAG,SAAS,KAC1C,SAAS,UAAU,EAGnB,CAAC;AAEJ,qFAAqF;AACrF,eAAO,MAAM,aAAa,SAClB,SAAS,oBAAoB,EAAE,YAC3B,SAAS,UAAU,EAAE,GAAG,SAAS,KAC1C,OAAuF,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The seven LiteLLM `/team/*` calls `LiteLLM.Team` uses, through the SDK's typed operations in
|
|
3
|
+
* `@distilled.cloud/litellm/team_management` (LiteLLM 1.103.0):
|
|
4
|
+
*
|
|
5
|
+
* read `getTeamInfoTeamInfo` GET /team/info?team_id=
|
|
6
|
+
* list `listTeamTeamListGet` GET /team/list (only to confirm a delete)
|
|
7
|
+
* create `postNewTeamTeamNew` POST /team/new
|
|
8
|
+
* update `updateTeamTeamUpdatePost` POST /team/update
|
|
9
|
+
* add `teamMemberAddTeamMemberAddPost` POST /team/member_add
|
|
10
|
+
* role `teamMemberUpdateTeamMemberUpdatePost` POST /team/member_update
|
|
11
|
+
* delete `deleteTeamTeamDeletePost` POST /team/delete
|
|
12
|
+
*
|
|
13
|
+
* ⛔ A "NOT FOUND" FROM `/team/info` IS NOT PROOF OF ABSENCE. Its lookup sits in `try … except Exception:
|
|
14
|
+
* raise HTTPException(404)` (`team_endpoints.py`, 1.103.0), so a database error answers exactly like a
|
|
15
|
+
* missing team, and `/team/delete` does the same. The SDK declares no 404 for `/team/info`; a 404
|
|
16
|
+
* decodes at run time as its `NotFound` class, which `readTeam` tests by CLASS (registry-support.ts,
|
|
17
|
+
* never a message). A wrong "absent" can only end in a `create`, which a duplicate team id turns into a
|
|
18
|
+
* 400 that fails the deploy; nothing is written on a guess.
|
|
19
|
+
* ⛔ DELETE DELETES THE TEAM'S KEYS (`delete_team`, `team_endpoints.py` line 4258: "delete team and associated team
|
|
20
|
+
* keys", and `prisma_client.delete_data(team_id_list=…, table_name="key")` at line 4374). It is the single most destructive
|
|
21
|
+
* call in this family, and the reason the resource defaults to `retain`.
|
|
22
|
+
* ★ DELETE IS IDEMPOTENT ONLY AFTER A REAL READ THAT CANNOT LIE. The SDK types `NotFound` for
|
|
23
|
+
* `/team/delete` (a distilled patch), so it is caught with `catchTag`; but the route's own 404 also
|
|
24
|
+
* covers a database error, so success is reported only when `/team/list` (a `find_many`, whose
|
|
25
|
+
* failures are not swallowed) no longer has the id. A team still listed re-raises the ORIGINAL error.
|
|
26
|
+
*/
|
|
27
|
+
import * as team from '@distilled.cloud/litellm/team_management';
|
|
28
|
+
import * as Effect from 'effect/Effect';
|
|
29
|
+
import type { TeamMember } from './team-types.ts';
|
|
30
|
+
/** One team BY ID, or `undefined` when the proxy has no such team (see the file header). */
|
|
31
|
+
export declare const readTeam: (teamId: string) => Effect.Effect<import("./team-types.ts").TeamAttributes | undefined, team.GetTeamInfoTeamInfoError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
32
|
+
export declare const createTeam: (body: team.PostNewTeamTeamNewRequest) => Effect.Effect<void, team.PostNewTeamTeamNewError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
33
|
+
export declare const updateTeam: (body: team.UpdateTeamTeamUpdatePostRequest) => Effect.Effect<void, team.UpdateTeamTeamUpdatePostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
34
|
+
/** One call adds every missing member; LiteLLM skips a user already on the roster. */
|
|
35
|
+
export declare const addMembers: (teamId: string, members: readonly TeamMember[]) => Effect.Effect<void, team.TeamMemberAddTeamMemberAddPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
36
|
+
export declare const setMemberRole: (teamId: string, member: TeamMember) => Effect.Effect<void, team.TeamMemberUpdateTeamMemberUpdatePostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
37
|
+
export declare const deleteTeam: (teamId: string) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | team.BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("@distilled.cloud/litellm/Errors").LitellmParseError | team.NotFound | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | team.UnprocessableEntity, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
38
|
+
//# sourceMappingURL=team-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/team-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,WAAY,MAAM,mKAOpC,CAAC;AAEJ,eAAO,MAAM,UAAU,SAAU,IAAI,CAAC,yBAAyB,kHACE,CAAC;AAElE,eAAO,MAAM,UAAU,SAAU,IAAI,CAAC,+BAA+B,wHACE,CAAC;AAExE,sFAAsF;AACtF,eAAO,MAAM,UAAU,WAAY,MAAM,WAAW,SAAS,UAAU,EAAE,8HAMlD,CAAC;AAExB,eAAO,MAAM,aAAa,WAAY,MAAM,UAAU,UAAU,oIAOzC,CAAC;AAgBxB,eAAO,MAAM,UAAU,WAAY,MAAM,8qBAQtC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `object_permission` half of `LiteLLM.Team`: reading it, comparing it, and the body that writes it.
|
|
3
|
+
*
|
|
4
|
+
* ★ THE WRITE IS A MERGE BY TOP-LEVEL FIELD (measured, `object_permission_utils.py` lines 114-118,
|
|
5
|
+
* 1.103.0, read from the live container): `prepare_object_permission_upsert` builds
|
|
6
|
+
* `{**existing_fields, **new_object_permission}`, so a field the request leaves out KEEPS its stored
|
|
7
|
+
* value, and a field sent as `[]` (or `{}`) REPLACES it with an empty one. That is what lets this
|
|
8
|
+
* resource manage five fields and leave the other seven of an adopted team alone. docs.litellm.ai/docs/
|
|
9
|
+
* mcp_grant_access says the same: "unset fields are left unchanged on update".
|
|
10
|
+
* ★ NULL AND `[]` ARE THE SAME "NOTHING GRANTED". A team that never had a grant reads `null` or `[]`
|
|
11
|
+
* (`LiteLLM_ObjectPermissionTable` defaults), so both normalise to an empty list before comparing.
|
|
12
|
+
* ⚠️ `mcp_tool_permissions` CAN COME BACK AS A JSON STRING (it is stored through `safe_dumps` "for
|
|
13
|
+
* GraphQL compatibility", and `_resolve_team_allowed_mcp_servers` itself handles both), so the read
|
|
14
|
+
* accepts an object or a string.
|
|
15
|
+
* ⚠️ THE SERVER REFUSES, AND THIS FILE DOES NOT REPEAT IT: a name or alias that matches several MCP
|
|
16
|
+
* servers cannot key `mcp_tool_permissions` (400, `reject_ambiguous_mcp_tool_permission_keys`), and a
|
|
17
|
+
* non-admin caller cannot grant `all-proxy-mcpservers` (403). The one refusal made here is that
|
|
18
|
+
* sentinel, because it silently grants every server on the proxy and is not something a declaration
|
|
19
|
+
* should carry by accident.
|
|
20
|
+
*/
|
|
21
|
+
import type * as team from '@distilled.cloud/litellm/team_management';
|
|
22
|
+
import type { TeamObjectPermission, TeamObjectPermissionAttributes } from './team-types.ts';
|
|
23
|
+
/** A live `object_permission` (or `null`) as this resource compares it. */
|
|
24
|
+
export declare const toPermissionAttributes: (value: unknown) => TeamObjectPermissionAttributes;
|
|
25
|
+
/** Wire names of the DECLARED fields where live and declared disagree. An undeclared field never counts. */
|
|
26
|
+
export declare const permissionDiffers: (live: TeamObjectPermissionAttributes, declared: TeamObjectPermission | undefined) => readonly string[];
|
|
27
|
+
/**
|
|
28
|
+
* The `object_permission` body: the declared fields named in `only` (all of them when `only` is
|
|
29
|
+
* absent, for a create). ⛔ Never a `null`: a merge would read it as "clear", and the declaration said
|
|
30
|
+
* a list.
|
|
31
|
+
*/
|
|
32
|
+
export declare const permissionBody: (declared: TeamObjectPermission, only?: ReadonlySet<string>) => team.LiteLLMObjectPermissionBase;
|
|
33
|
+
/** The first reason a declared object permission is refused, or `undefined`. */
|
|
34
|
+
export declare const permissionProblem: (declared: TeamObjectPermission | undefined) => string | undefined;
|
|
35
|
+
//# sourceMappingURL=team-permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-permission.d.ts","sourceRoot":"","sources":["../../src/litellm/team-permission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAUtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AA+B5F,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,UAAW,OAAO,KAAG,8BASvD,CAAC;AAaF,4GAA4G;AAC5G,eAAO,MAAM,iBAAiB,SACtB,8BAA8B,YAC1B,oBAAoB,GAAG,SAAS,KACzC,SAAS,MAAM,EAcjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,aACf,oBAAoB,SACvB,WAAW,CAAC,MAAM,CAAC,KACzB,IAAI,CAAC,2BAeP,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,aAClB,oBAAoB,GAAG,SAAS,KACzC,MAAM,GAAG,SA0BX,CAAC"}
|