52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { requireOwner } from '#lib/server/owner.js';
|
|
import {
|
|
addLog,
|
|
deleteFrequency,
|
|
deleteLog,
|
|
deleteNet,
|
|
loadRadio,
|
|
saveFrequency,
|
|
saveNet,
|
|
setChannel,
|
|
toggleRemind
|
|
} from '#lib/server/radio.js';
|
|
import { fail, type RequestEvent } from '@sveltejs/kit';
|
|
import type { Actions, PageServerLoad } from './$types';
|
|
|
|
// /trackers/radio: owner-only. Everyone else gets a 404 (here and in hooks.server.ts via
|
|
// ownerOnlyPrefixes); hooks.server.ts also sends cache-control: private, no-store.
|
|
export const load: PageServerLoad = async (event) => {
|
|
requireOwner(event);
|
|
return {
|
|
...(await loadRadio()),
|
|
now: Date.now(),
|
|
seo: {
|
|
title: 'radio',
|
|
description: 'Frequencies, scanner banks, nets and ISS passes.',
|
|
index: false
|
|
}
|
|
};
|
|
};
|
|
|
|
type Handler = (
|
|
form: FormData
|
|
) => Promise<{ ok: true; message?: string } | { ok: false; message: string }>;
|
|
// Actions don't run the load, so each one checks the owner again.
|
|
const action = (name: string, fn: Handler) => async (event: RequestEvent) => {
|
|
requireOwner(event);
|
|
const r = await fn(await event.request.formData());
|
|
if (!r.ok) return fail(400, { action: name, message: r.message });
|
|
return { action: name, ok: true as const, message: r.message ?? null };
|
|
};
|
|
|
|
export const actions: Actions = {
|
|
saveFreq: action('saveFreq', saveFrequency),
|
|
deleteFreq: action('deleteFreq', deleteFrequency),
|
|
channel: action('channel', setChannel),
|
|
saveNet: action('saveNet', saveNet),
|
|
deleteNet: action('deleteNet', deleteNet),
|
|
remind: action('remind', toggleRemind),
|
|
log: action('log', addLog),
|
|
deleteLog: action('deleteLog', deleteLog)
|
|
};
|