import { Hono } from 'hono' import { Context } from 'hono'; import { bearerAuth } from 'hono/bearer-auth' import OpenAI from "openai"; const openai = new OpenAI({ apiKey: "sk-1234", baseURL: "https://openai-endpoint.ishaanjaffer0324.workers.dev" }); async function call_proxy() { const completion = await openai.chat.completions.create({ messages: [{ role: "system", content: "You are a helpful assistant." }], model: "gpt-3.5-turbo", }); return completion } const app = new Hono() // Middleware for API Key Authentication const apiKeyAuth = async (c: Context, next: Function) => { const apiKey = c.req.header('Authorization'); if (!apiKey || apiKey !== 'Bearer sk-1234') { return c.text('Unauthorized', 401); } await next(); }; app.use('/*', apiKeyAuth) app.get('/', (c) => { return c.text('Hello Hono!') }) // Handler for chat completions const chatCompletionHandler = async (c: Context) => { // Assuming your logic for handling chat completion goes here // For demonstration, just returning a simple JSON response const response = await call_proxy() return c.json(response); }; // Register the above handler for different POST routes with the apiKeyAuth middleware app.post('/v1/chat/completions', chatCompletionHandler); app.post('/chat/completions', chatCompletionHandler); // Example showing how you might handle dynamic segments within the URL // Here, using ':model*' to capture the rest of the path as a parameter 'model' app.post('/openai/deployments/:model*/chat/completions', chatCompletionHandler); export default app