{"version":3,"sources":["../../src/adapters/fastify.ts"],"names":[],"mappings":"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","file":"fastify.mjs","sourcesContent":["import { OpenRouterClient } from '../client/OpenRouterClient';\nimport { SendOptions } from '../types/client';\n\nexport class FastifyAdapter {\n  constructor(private client: OpenRouterClient) {}\n\n  /**\n   * Chat completion route handler\n   */\n  async chatHandler(request: any, reply: any) {\n    const { message, messages, options } = request.body;\n\n    if (!message && !messages) {\n      return reply.status(400).send({\n        error: 'Either \"message\" (string) or \"messages\" (array) is required',\n      });\n    }\n\n    const input = messages || message;\n    const sendOptions: SendOptions = options || {};\n\n    try {\n      const response = await this.client.sendMessage(input, sendOptions);\n      return { success: true, data: response };\n    } catch (error: any) {\n      return reply.status(error.statusCode || 500).send({\n        success: false,\n        error: {\n          message: error.message,\n          code: error.code || 'INTERNAL_ERROR',\n        },\n      });\n    }\n  }\n\n  /**\n   * Stream chat completion route handler\n   */\n  async streamHandler(request: any, reply: any) {\n    const { message, messages, options } = request.body;\n\n    if (!message && !messages) {\n      return reply.status(400).send({\n        error: 'Either \"message\" (string) or \"messages\" (array) is required',\n      });\n    }\n\n    const input = messages || message;\n    const sendOptions: SendOptions = options || {};\n\n    reply.raw.setHeader('Content-Type', 'text/event-stream');\n    reply.raw.setHeader('Cache-Control', 'no-cache');\n    reply.raw.setHeader('Connection', 'keep-alive');\n\n    try {\n      for await (const chunk of this.client.streamMessage(input, sendOptions)) {\n        reply.raw.write(`data: ${JSON.stringify(chunk)}\\n\\n`);\n      }\n\n      reply.raw.write('data: [DONE]\\n\\n');\n      reply.raw.end();\n    } catch (error: any) {\n      reply.raw.write(`data: ${JSON.stringify({ error: error.message })}\\n\\n`);\n      reply.raw.end();\n    }\n  }\n\n  /**\n   * List models route handler\n   */\n  modelsHandler() {\n    const models = this.client.getModelCatalog().getAllModels();\n    return { success: true, data: models, count: models.length };\n  }\n\n  /**\n   * Cost summary route handler\n   */\n  costsHandler(request: any) {\n    const { startDate, endDate } = request.query;\n\n    const summary = this.client\n      .getCostTracker()\n      .getSummary(\n        startDate ? new Date(startDate) : undefined,\n        endDate ? new Date(endDate) : undefined,\n      );\n\n    return { success: true, data: summary };\n  }\n\n  /**\n   * Register Fastify plugin\n   */\n  plugin(fastify: any, _options: any) {\n    fastify.post('/chat', this.chatHandler.bind(this));\n    fastify.post('/chat/stream', this.streamHandler.bind(this));\n    fastify.get('/models', this.modelsHandler.bind(this));\n    fastify.get('/costs', this.costsHandler.bind(this));\n  }\n}\n\n/**\n * Factory function for Fastify integration\n */\nexport function createFastifyAdapter(client: OpenRouterClient): FastifyAdapter {\n  return new FastifyAdapter(client);\n}\n\n/**\n * Create Fastify plugin directly\n */\nexport function createFastifyPlugin(client: OpenRouterClient) {\n  const adapter = new FastifyAdapter(client);\n  return adapter.plugin.bind(adapter);\n}\n"]}