import { libx } from 'libx.js/build/bundles/essentials.js'; import { RouterWrapper } from 'edge.libx.js/build/main.js'; import { json } from 'itty-router'; import v1Routes from './routes/v1'; import { LogLevel } from 'libx.js/build/modules/log'; import { authMiddleware } from './middleware/auth'; import { corsMiddleware, withCors } from './middleware/cors'; // Configure logging libx.log.filterLevel = LogLevel.All; libx.log.isConsole = false; libx.log.isBrowser = false; // Create base router const baseRouterWrapper = RouterWrapper.getNew(''); // Apply CORS middleware first (handles OPTIONS preflight) baseRouterWrapper.router.all('*', corsMiddleware); // Root endpoint baseRouterWrapper.router.all('/', async (req) => { return json({ message: 'Ask API - Edge Worker', version: '1.0.0', endpoints: { health: '/v1/health', completion: '/v1/completion', models: '/v1/models', apiKeys: '/v1/apikeys' } }); }); // Apply auth middleware to all routes baseRouterWrapper.router.all('*', authMiddleware); // Register v1 routes directly const v1Router = v1Routes('/v1'); baseRouterWrapper.router.all('/v1/*', v1Router.router.fetch); // Catch 404s baseRouterWrapper.catchNotFound(); // Create server adapter with automatic CORS wrapping const originalAdapter = baseRouterWrapper.createServerAdapter(); const serverAdapter = { ...originalAdapter, fetch: async (request: Request, env: any, ctx: any) => { const response = await originalAdapter.fetch(request, env, ctx); // Automatically wrap all responses with CORS headers return withCors(response); } }; export { serverAdapter, baseRouterWrapper };