40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { join } from 'node:path';
|
|
import { createRouter } from '../../create-router';
|
|
import { DATA_PATH } from '../../data-path';
|
|
|
|
export const searxngRouter = createRouter();
|
|
|
|
const SEARXNG_FILE = join(DATA_PATH, 'searxng.json');
|
|
|
|
const DEFAULT_URL = 'https://searxng.home.pastilhas.eu';
|
|
|
|
export type SearxngConfig = {
|
|
url: string;
|
|
};
|
|
|
|
export async function readSearxngConfig(): Promise<SearxngConfig> {
|
|
try {
|
|
const file = Bun.file(SEARXNG_FILE);
|
|
if (!(await file.exists())) return { url: DEFAULT_URL };
|
|
return (await file.json()) as SearxngConfig;
|
|
} catch {
|
|
return { url: DEFAULT_URL };
|
|
}
|
|
}
|
|
|
|
async function writeSearxngConfig(config: SearxngConfig) {
|
|
await Bun.write(SEARXNG_FILE, JSON.stringify(config, null, 2));
|
|
}
|
|
|
|
searxngRouter.get('/', async (ctx) => {
|
|
return ctx.json(await readSearxngConfig());
|
|
});
|
|
|
|
searxngRouter.put('/', async (ctx) => {
|
|
const { url } = await ctx.req.json<{ url: string }>();
|
|
if (!url?.trim()) return ctx.json({ error: 'URL is required' }, 400);
|
|
const config: SearxngConfig = { url: url.trim().replace(/\/+$/, '') };
|
|
await writeSearxngConfig(config);
|
|
return ctx.json(config);
|
|
});
|