| import { v4 as uuidv4 } from "uuid"; |
| import { getAdapter } from "../driver.js"; |
|
|
| function rowToKey(row) { |
| if (!row) return null; |
| return { |
| id: row.id, |
| key: row.key, |
| name: row.name, |
| machineId: row.machineId, |
| isActive: row.isActive === 1 || row.isActive === true, |
| createdAt: row.createdAt, |
| }; |
| } |
|
|
| export async function getApiKeys() { |
| const db = await getAdapter(); |
| const rows = db.all(`SELECT * FROM apiKeys ORDER BY createdAt ASC`); |
| return rows.map(rowToKey); |
| } |
|
|
| export async function getApiKeyById(id) { |
| const db = await getAdapter(); |
| const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [id]); |
| return rowToKey(row); |
| } |
|
|
| export async function createApiKey(name, machineId) { |
| if (!machineId) throw new Error("machineId is required"); |
| const db = await getAdapter(); |
| const { generateApiKeyWithMachine } = await import("@/shared/utils/apiKey"); |
| const result = generateApiKeyWithMachine(machineId); |
| const apiKey = { |
| id: uuidv4(), |
| name, |
| key: result.key, |
| machineId, |
| isActive: true, |
| createdAt: new Date().toISOString(), |
| }; |
| db.run( |
| `INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)`, |
| [apiKey.id, apiKey.key, apiKey.name, apiKey.machineId, 1, apiKey.createdAt] |
| ); |
| return apiKey; |
| } |
|
|
| export async function updateApiKey(id, data) { |
| const db = await getAdapter(); |
| let result = null; |
| db.transaction(() => { |
| const row = db.get(`SELECT * FROM apiKeys WHERE id = ?`, [id]); |
| if (!row) return; |
| const merged = { ...rowToKey(row), ...data }; |
| db.run( |
| `UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ? WHERE id = ?`, |
| [merged.key, merged.name, merged.machineId, merged.isActive ? 1 : 0, id] |
| ); |
| result = merged; |
| }); |
| return result; |
| } |
|
|
| export async function deleteApiKey(id) { |
| const db = await getAdapter(); |
| const res = db.run(`DELETE FROM apiKeys WHERE id = ?`, [id]); |
| return (res?.changes ?? 0) > 0; |
| } |
|
|
| export async function validateApiKey(key) { |
| const db = await getAdapter(); |
| const row = db.get(`SELECT isActive FROM apiKeys WHERE key = ?`, [key]); |
| if (!row) return false; |
| return row.isActive === 1 || row.isActive === true; |
| } |
|
|