{"version":3,"sources":["../../src/adapters/express.ts"],"names":[],"mappings":"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","file":"express.mjs","sourcesContent":["import { OpenRouterClient } from '../client/OpenRouterClient';\nimport { SendOptions } from '../types/client';\n\nexport class ExpressAdapter {\n  constructor(private client: OpenRouterClient) {}\n\n  /**\n   * Middleware for chat completion\n   */\n  chatMiddleware() {\n    return async (req: any, res: any, next: any) => {\n      try {\n        const { message, messages, options } = req.body;\n\n        if (!message && !messages) {\n          return res.status(400).json({\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        const response = await this.client.sendMessage(input, sendOptions);\n\n        res.json({\n          success: true,\n          data: response,\n        });\n      } catch (error) {\n        next(error);\n      }\n    };\n  }\n\n  /**\n   * Middleware for streaming chat completion\n   */\n  streamMiddleware() {\n    return async (req: any, res: any, next: any) => {\n      try {\n        const { message, messages, options } = req.body;\n\n        if (!message && !messages) {\n          return res.status(400).json({\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        // Set SSE headers\n        res.setHeader('Content-Type', 'text/event-stream');\n        res.setHeader('Cache-Control', 'no-cache');\n        res.setHeader('Connection', 'keep-alive');\n\n        for await (const chunk of this.client.streamMessage(input, sendOptions)) {\n          res.write(`data: ${JSON.stringify(chunk)}\\n\\n`);\n        }\n\n        res.write('data: [DONE]\\n\\n');\n        res.end();\n      } catch (error) {\n        next(error);\n      }\n    };\n  }\n\n  /**\n   * Middleware for listing models\n   */\n  modelsMiddleware() {\n    return (_req: any, res: any, next: any) => {\n      try {\n        const models = this.client.getModelCatalog().getAllModels();\n\n        res.json({\n          success: true,\n          data: models,\n          count: models.length,\n        });\n      } catch (error) {\n        next(error);\n      }\n    };\n  }\n\n  /**\n   * Middleware for getting cost summary\n   */\n  costsMiddleware() {\n    return (req: any, res: any, next: any) => {\n      try {\n        const { startDate, endDate } = req.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        res.json({\n          success: true,\n          data: summary,\n        });\n      } catch (error) {\n        next(error);\n      }\n    };\n  }\n\n  /**\n   * Error handling middleware\n   */\n  errorMiddleware() {\n    return (error: any, _req: any, res: any, _next: any) => {\n      const statusCode = error.statusCode || 500;\n\n      res.status(statusCode).json({\n        success: false,\n        error: {\n          message: error.message,\n          code: error.code || 'INTERNAL_ERROR',\n          ...(error.details && { details: error.details }),\n        },\n      });\n    };\n  }\n\n  /**\n   * Setup complete Express router\n   */\n  setupRouter(router: any) {\n    router.post('/chat', this.chatMiddleware());\n    router.post('/chat/stream', this.streamMiddleware());\n    router.get('/models', this.modelsMiddleware());\n    router.get('/costs', this.costsMiddleware());\n\n    // Error handler should be last\n    router.use(this.errorMiddleware());\n\n    return router;\n  }\n}\n\n/**\n * Factory function for Express integration\n */\nexport function createExpressAdapter(client: OpenRouterClient): ExpressAdapter {\n  return new ExpressAdapter(client);\n}\n"]}