Spaces:
Runtime error
Runtime error
| -- Migration 008: Registered Keys Provisioning API (#464) | |
| -- | |
| -- Adds three tables: | |
| -- registered_keys β auto-provisioned API keys with quota metadata | |
| -- provider_key_limits β per-provider issuance limits | |
| -- account_key_limits β per-account issuance limits | |
| -- -------------------------------------------------------------------------- | |
| -- Table: registered_keys | |
| -- -------------------------------------------------------------------------- | |
| CREATE TABLE IF NOT EXISTS registered_keys ( | |
| id TEXT PRIMARY KEY, -- UUID | |
| key TEXT NOT NULL UNIQUE, -- hashed key material (sha256) | |
| key_prefix TEXT NOT NULL, -- first 8 chars for display (e.g. "ork_abc1") | |
| name TEXT NOT NULL, | |
| provider TEXT NOT NULL DEFAULT '', -- associated provider (optional) | |
| account_id TEXT NOT NULL DEFAULT '', -- account/tenant identifier | |
| is_active INTEGER NOT NULL DEFAULT 1, | |
| revoked_at TEXT, -- ISO timestamp, null if active | |
| expires_at TEXT, -- ISO timestamp, null = no expiry | |
| idempotency_key TEXT UNIQUE, -- prevents duplicate issue requests | |
| daily_budget INTEGER, -- max requests per day (null = unlimited) | |
| hourly_budget INTEGER, -- max requests per hour (null = unlimited) | |
| daily_used INTEGER NOT NULL DEFAULT 0, | |
| hourly_used INTEGER NOT NULL DEFAULT 0, | |
| last_reset_day TEXT NOT NULL DEFAULT '', -- YYYY-MM-DD for daily reset tracking | |
| last_reset_hour TEXT NOT NULL DEFAULT '', -- YYYY-MM-DDTHH for hourly reset tracking | |
| created_at TEXT NOT NULL DEFAULT (datetime('now')), | |
| updated_at TEXT NOT NULL DEFAULT (datetime('now')) | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_registered_keys_provider ON registered_keys(provider); | |
| CREATE INDEX IF NOT EXISTS idx_registered_keys_account ON registered_keys(account_id); | |
| CREATE INDEX IF NOT EXISTS idx_registered_keys_active ON registered_keys(is_active); | |
| CREATE INDEX IF NOT EXISTS idx_registered_keys_idempotency ON registered_keys(idempotency_key); | |
| -- -------------------------------------------------------------------------- | |
| -- Table: provider_key_limits (per-provider issuance limits) | |
| -- -------------------------------------------------------------------------- | |
| CREATE TABLE IF NOT EXISTS provider_key_limits ( | |
| provider TEXT PRIMARY KEY, | |
| max_active_keys INTEGER, -- null = unlimited | |
| daily_issue_limit INTEGER, -- max keys per day | |
| hourly_issue_limit INTEGER, -- max keys per hour | |
| daily_issued INTEGER NOT NULL DEFAULT 0, | |
| hourly_issued INTEGER NOT NULL DEFAULT 0, | |
| last_reset_day TEXT NOT NULL DEFAULT '', | |
| last_reset_hour TEXT NOT NULL DEFAULT '', | |
| updated_at TEXT NOT NULL DEFAULT (datetime('now')) | |
| ); | |
| -- -------------------------------------------------------------------------- | |
| -- Table: account_key_limits (per-account issuance limits) | |
| -- -------------------------------------------------------------------------- | |
| CREATE TABLE IF NOT EXISTS account_key_limits ( | |
| account_id TEXT PRIMARY KEY, | |
| max_active_keys INTEGER, | |
| daily_issue_limit INTEGER, | |
| hourly_issue_limit INTEGER, | |
| daily_issued INTEGER NOT NULL DEFAULT 0, | |
| hourly_issued INTEGER NOT NULL DEFAULT 0, | |
| last_reset_day TEXT NOT NULL DEFAULT '', | |
| last_reset_hour TEXT NOT NULL DEFAULT '', | |
| updated_at TEXT NOT NULL DEFAULT (datetime('now')) | |
| ); | |