Spaces:
Runtime error
Runtime error
| import { getDbInstance } from "./core"; | |
| export interface ApiKeyContextSource { | |
| apiKeyId: string; | |
| sourceType: string; | |
| token: string | null; | |
| baseUrl: string | null; | |
| vaultPath: string | null; | |
| enabled: boolean; | |
| } | |
| interface ContextSourceRow { | |
| api_key_id: string; | |
| source_type: string; | |
| token: string | null; | |
| base_url: string | null; | |
| vault_path: string | null; | |
| enabled: number; | |
| } | |
| function rowToSource(row: ContextSourceRow): ApiKeyContextSource { | |
| return { | |
| apiKeyId: row.api_key_id, | |
| sourceType: row.source_type, | |
| token: row.token, | |
| baseUrl: row.base_url, | |
| vaultPath: row.vault_path, | |
| enabled: row.enabled === 1, | |
| }; | |
| } | |
| export function getApiKeyContextSource( | |
| apiKeyId: string | null | undefined, | |
| sourceType: string | |
| ): (ApiKeyContextSource & { enabled: true }) | null { | |
| if (!apiKeyId) return null; | |
| const db = getDbInstance(); | |
| const row = db | |
| .prepare( | |
| "SELECT * FROM api_key_context_sources WHERE api_key_id = ? AND source_type = ? AND enabled = 1" | |
| ) | |
| .get(apiKeyId, sourceType) as ContextSourceRow | undefined; | |
| if (!row) return null; | |
| return rowToSource(row) as ApiKeyContextSource & { enabled: true }; | |
| } | |
| export function setApiKeyContextSource( | |
| apiKeyId: string, | |
| sourceType: string, | |
| config: { token?: string; baseUrl?: string; vaultPath?: string; enabled?: boolean } | |
| ): void { | |
| const db = getDbInstance(); | |
| const existing = db | |
| .prepare("SELECT * FROM api_key_context_sources WHERE api_key_id = ? AND source_type = ?") | |
| .get(apiKeyId, sourceType) as ContextSourceRow | undefined; | |
| const now = new Date().toISOString(); | |
| if (existing) { | |
| db.prepare( | |
| `UPDATE api_key_context_sources SET | |
| token = COALESCE(?, token), | |
| base_url = COALESCE(?, base_url), | |
| vault_path = COALESCE(?, vault_path), | |
| enabled = COALESCE(?, enabled), | |
| updated_at = ? | |
| WHERE api_key_id = ? AND source_type = ?` | |
| ).run( | |
| config.token ?? null, | |
| config.baseUrl ?? null, | |
| config.vaultPath ?? null, | |
| config.enabled !== undefined ? (config.enabled ? 1 : 0) : null, | |
| now, | |
| apiKeyId, | |
| sourceType | |
| ); | |
| } else { | |
| db.prepare( | |
| `INSERT INTO api_key_context_sources | |
| (api_key_id, source_type, token, base_url, vault_path, enabled, created_at, updated_at) | |
| VALUES (?, ?, ?, ?, ?, ?, ?, ?)` | |
| ).run( | |
| apiKeyId, | |
| sourceType, | |
| config.token ?? null, | |
| config.baseUrl ?? null, | |
| config.vaultPath ?? null, | |
| config.enabled !== undefined ? (config.enabled ? 1 : 0) : 1, | |
| now, | |
| now | |
| ); | |
| } | |
| } | |
| export function deleteApiKeyContextSource(apiKeyId: string, sourceType: string): void { | |
| const db = getDbInstance(); | |
| db.prepare( | |
| "DELETE FROM api_key_context_sources WHERE api_key_id = ? AND source_type = ?" | |
| ).run(apiKeyId, sourceType); | |
| } | |
| export function listApiKeyContextSources(apiKeyId: string): ApiKeyContextSource[] { | |
| const db = getDbInstance(); | |
| const rows = db | |
| .prepare("SELECT * FROM api_key_context_sources WHERE api_key_id = ?") | |
| .all(apiKeyId) as ContextSourceRow[]; | |
| return rows.map(rowToSource); | |
| } | |