CREATE TABLE api_key ( id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL REFERENCES tenant (id) ON DELETE CASCADE, name TEXT NOT NULL, role TEXT NOT NULL, token_prefix TEXT NOT NULL, token_hash BLOB NOT NULL, created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), expires_at TEXT, revoked_at TEXT, last_used_at TEXT, CHECK (role IN ('viewer', 'editor', 'operator', 'node')), CHECK (length(trim(name)) > 0), CHECK (length(token_hash) = 32) ); CREATE UNIQUE INDEX idx_api_key_token_hash ON api_key (token_hash); CREATE INDEX idx_api_key_tenant_active ON api_key (tenant_id) WHERE revoked_at IS NULL;