All checks were successful
Release / Test backend (push) Successful in 40s
Release / Check ui (push) Successful in 1m36s
Release / Docker / caddy (push) Successful in 45s
Release / Docker / backend (push) Successful in 4m27s
Release / Docker / runner (push) Successful in 3m32s
Release / Upload source maps (push) Successful in 44s
Release / Docker / ui (push) Successful in 2m46s
Release / Gitea Release (push) Successful in 58s
- Add /admin/ai-jobs page with live-polling jobs table, status badges, progress bars, and cancel action - Add listAIJobs() helper in pocketbase.ts; AIJob type - Add POST /api/admin/ai-jobs/[id]/cancel SvelteKit proxy - Add ai-jobs link to admin sidebar nav (all 5 locales) - Cache image-gen and text-gen model lists in Valkey (10 min TTL) via scraper.ts helpers - Cache changelog Gitea API response (5 min TTL) - Improve 502/504 error message on image-gen page with CF AI timeout hint - Show CF AI timeout warning in advanced options when a Cloudflare/FLUX model is selected
41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
import type { PageServerLoad } from './$types';
|
|
import * as cache from '$lib/server/cache';
|
|
|
|
export interface Release {
|
|
id: number;
|
|
tag_name: string;
|
|
name: string;
|
|
body: string;
|
|
published_at: string;
|
|
prerelease: boolean;
|
|
draft: boolean;
|
|
}
|
|
|
|
const GITEA_RELEASES_URL =
|
|
'https://gitea.kalekber.cc/api/v1/repos/kamil/libnovel/releases?limit=50&page=1';
|
|
|
|
const CACHE_KEY = 'admin:changelog:releases';
|
|
const CACHE_TTL = 5 * 60; // 5 minutes
|
|
|
|
export const load: PageServerLoad = async ({ fetch }) => {
|
|
const cached = await cache.get<Release[]>(CACHE_KEY);
|
|
if (cached) {
|
|
return { releases: cached };
|
|
}
|
|
|
|
try {
|
|
const res = await fetch(GITEA_RELEASES_URL, {
|
|
headers: { Accept: 'application/json' }
|
|
});
|
|
if (!res.ok) {
|
|
return { releases: [], error: `Gitea API returned ${res.status}` };
|
|
}
|
|
const releases: Release[] = await res.json();
|
|
const filtered = releases.filter((r) => !r.draft);
|
|
await cache.set(CACHE_KEY, filtered, CACHE_TTL);
|
|
return { releases: filtered };
|
|
} catch (e) {
|
|
return { releases: [], error: String(e) };
|
|
}
|
|
};
|