Files
OmniRoute/src/lib/db/apiKeyColumnFallbacks.ts
Xiangzhe def5334768 feat(api-manager): add provider-level model permissions (#9313)
* feat(api-manager): add provider-level model permissions

Persist canonical provider wildcards alongside exact model grants and
preserve explicit restricted-empty deny-all semantics across API, SQLite,
JSON import, sync, runtime policy, and the dashboard.

Invalidate filtered model catalogs on permission changes and guard against
stale in-flight catalog builders repopulating invalidated cache entries.

* fix(api-manager): show provider and model counts separately in summary

Provider wildcard selections (provider/*) are no longer counted as
individual models in the Selected Models Summary. The header now shows
"N providers · M models" when both are present, or just the non-empty
category when only one type is selected.

* fix(api-manager): separate provider and model permission displays

* fix(api-manager): separate provider wildcard permissions in UI
2026-08-11 10:29:28 -03:00

62 lines
2.7 KiB
TypeScript

export const API_KEY_COLUMN_FALLBACKS = [
{ name: "allowed_models", definition: "allowed_models TEXT" },
{
name: "model_access_mode",
definition:
"model_access_mode TEXT NOT NULL DEFAULT 'all' CHECK (model_access_mode IN ('all', 'restricted'))",
},
{ name: "blocked_models", definition: "blocked_models TEXT" },
{ name: "allowed_combos", definition: "allowed_combos TEXT" },
{ name: "no_log", definition: "no_log INTEGER NOT NULL DEFAULT 0" },
{ name: "allowed_connections", definition: "allowed_connections TEXT" },
{ name: "auto_resolve", definition: "auto_resolve INTEGER NOT NULL DEFAULT 0" },
{ name: "is_active", definition: "is_active INTEGER NOT NULL DEFAULT 1" },
{ name: "access_schedule", definition: "access_schedule TEXT" },
{ name: "max_requests_per_day", definition: "max_requests_per_day INTEGER" },
{ name: "max_requests_per_minute", definition: "max_requests_per_minute INTEGER" },
{ name: "throttle_delay_ms", definition: "throttle_delay_ms INTEGER" },
{ name: "max_sessions", definition: "max_sessions INTEGER NOT NULL DEFAULT 0" },
{ name: "revoked_at", definition: "revoked_at TEXT" },
{ name: "expires_at", definition: "expires_at TEXT" },
{ name: "last_used_at", definition: "last_used_at TEXT" },
{ name: "key_prefix", definition: "key_prefix TEXT" },
{ name: "ip_allowlist", definition: "ip_allowlist TEXT" },
{ name: "scopes", definition: "scopes TEXT" },
{ name: "rate_limits", definition: "rate_limits TEXT" },
{ name: "is_banned", definition: "is_banned INTEGER NOT NULL DEFAULT 0" },
{ name: "key_hash", definition: "key_hash TEXT" },
{ name: "proxy_id", definition: "proxy_id TEXT" },
{ name: "allowed_endpoints", definition: "allowed_endpoints TEXT" },
{ name: "allowed_quotas", definition: "allowed_quotas TEXT NOT NULL DEFAULT '[]'" },
{ name: "stream_default_mode", definition: "stream_default_mode TEXT NOT NULL DEFAULT 'legacy'" },
{ name: "cache_default_mode", definition: "cache_default_mode TEXT NOT NULL DEFAULT 'legacy'" },
{
name: "disable_non_public_models",
definition: "disable_non_public_models INTEGER NOT NULL DEFAULT 0",
},
{
name: "allow_usage_command",
definition: "allow_usage_command INTEGER NOT NULL DEFAULT 0",
},
{
name: "usage_limit_enabled",
definition: "usage_limit_enabled INTEGER NOT NULL DEFAULT 0",
},
{
name: "daily_usage_limit_usd",
definition: "daily_usage_limit_usd REAL",
},
{
name: "weekly_usage_limit_usd",
definition: "weekly_usage_limit_usd REAL",
},
{
name: "chaos_mode_enabled",
definition: "chaos_mode_enabled INTEGER NOT NULL DEFAULT 0",
},
{
name: "compression_enabled",
definition: "compression_enabled INTEGER NOT NULL DEFAULT 1",
},
] as const;