Files
embycovers/homescreen_editor/routes/api/emby-users/+server.js
T
2026-06-08 21:58:16 +12:00

69 lines
1.7 KiB
JavaScript

import { readFileSync, existsSync } from 'fs';
import { resolve } from 'path';
import { json, error } from '@sveltejs/kit';
import { readCachedEmbyUsers, writeCachedEmbyUsers } from '../../../lib/server/emby-user-cache.js';
const CONFIG_PATH = resolve('config.json');
function loadConfig() {
if (!existsSync(CONFIG_PATH)) return {};
try {
return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
} catch {
return {};
}
}
export async function GET() {
const { embyUrl, apiKey } = loadConfig();
if (!embyUrl || !apiKey) {
throw error(400, 'Emby URL and API key not configured');
}
const base = embyUrl.replace(/\/+$/, '');
let res;
try {
res = await fetch(`${base}/Users?api_key=${encodeURIComponent(apiKey)}`);
} catch (e) {
const cached = readCachedEmbyUsers();
if (cached.users.length > 0) {
return json({
users: cached.users,
source: 'cache',
lastSyncedAt: cached.lastSyncedAt,
message: `Using cached Emby users because the server could not be reached: ${e.message}`
});
}
throw error(502, `Could not reach Emby server: ${e.message}`);
}
if (!res.ok) {
if (res.status >= 500) {
const cached = readCachedEmbyUsers();
if (cached.users.length > 0) {
return json({
users: cached.users,
source: 'cache',
lastSyncedAt: cached.lastSyncedAt,
message: `Using cached Emby users because the Emby API returned ${res.status} ${res.statusText}`
});
}
}
throw error(res.status, `Emby API error: ${res.status} ${res.statusText}`);
}
const users = await res.json();
const cached = writeCachedEmbyUsers(
users.map((u) => ({
embyGuid: u.Id,
name: u.Name
}))
);
return json({
users: cached.users,
source: 'live',
lastSyncedAt: cached.lastSyncedAt
});
}