import { Database } from './db/database.js'; import { discordRouter } from './discord/router.js'; import { createCors, Router, IRequestStrict } from 'itty-router'; import { webRouter } from './web/router.js'; export interface Env { readonly BASE_URL: string; readonly CREDITS_URL: string; readonly DISCORD_APP_ID: string; readonly DISCORD_APP_SECRET: string; readonly DISCORD_PUBLIC_KEY: string; readonly DISCORD_DEV_GUILD_IDS: string; readonly DB: D1Database; } const { preflight, corsify } = createCors(); const discord = discordRouter('/discord') const web = webRouter('/') const router = Router() .all('*', preflight) .all('/discord/*', discord.handle.bind(discord)) .all('/*', web.handle.bind(web)) .all('*', (_req, _env, _db, _ctx) => null); // noinspection JSUnusedGlobalSymbols export default { async fetch(req: Request, env: Env, ctx: ExecutionContext): Promise { return router.handle(req, env, new Database(env.DB), ctx).then((result) => { if (result instanceof Response) { return result; } else if (typeof result === 'string') { const headers = new Headers() headers.set("Content-Type", "text/html") return new Response(result, { status: 200, statusText: 'OK', headers}); } else if (typeof result === 'object' || Array.isArray(result)) { return Response.json(result, { status: 200, statusText: 'OK' }); } else { return new Response('Not Found', { status: 404, statusText: 'Not Found' }); } }).catch((reason) => { return new Response(`Failed: ${reason}`, { status: 500, statusText: 'Internal Server Error' }); }).then((response) => { return corsify(response); }); } };