Some checks failed
Deploy / Deploy Production (push) Has been skipped
Deploy / Cleanup Preview (push) Has been skipped
Deploy / Deploy Preview (push) Failing after 1s
CI / UI / Build (pull_request) Successful in 16s
CI / Scraper / Test (pull_request) Successful in 16s
CI / Scraper / Lint (pull_request) Successful in 19s
CI / Scraper / Build (pull_request) Successful in 16s
- Add /profile page with reading settings (voice, speed, auto-next) and password change form - Add /admin/scrape page showing scraping task history with live status polling and trigger controls - Add /admin/audio page showing audio cache entries with client-side search filter - Add changePassword(), listAudioCache(), listScrapingTasks() to pocketbase.ts - Add /api/admin/scrape and /api/browse-page server-side proxy routes - Replace browse page pagination with IntersectionObserver infinite scroll - Update nav: username becomes a /profile link; admin users see Scrape and Audio cache links
24 lines
718 B
TypeScript
24 lines
718 B
TypeScript
import { json, error } from '@sveltejs/kit';
|
|
import type { RequestHandler } from './$types';
|
|
import { env } from '$env/dynamic/private';
|
|
|
|
const SCRAPER_URL = env.SCRAPER_API_URL ?? 'http://localhost:8080';
|
|
|
|
/**
|
|
* GET /api/admin/scrape/status
|
|
* Admin-only proxy to the Go scraper's /api/scrape/status endpoint.
|
|
*/
|
|
export const GET: RequestHandler = async ({ locals }) => {
|
|
if (!locals.user || locals.user.role !== 'admin') {
|
|
throw error(403, 'Forbidden');
|
|
}
|
|
try {
|
|
const res = await fetch(`${SCRAPER_URL}/api/scrape/status`);
|
|
if (!res.ok) return json({ running: false });
|
|
const data = await res.json();
|
|
return json({ running: data.running ?? false });
|
|
} catch {
|
|
return json({ running: false });
|
|
}
|
|
};
|