export function startServer()

in src/api.ts [12:101]


export function startServer({ cliOptions }: { cliOptions: CliOptions }) {
  const app = express();
  const PORT = 3000;

  app.post('/', (req: Request, res: Response) => {
    const targetUrlParam = req.query.target_url as string;
    const targetUrl = parseTargetUrl(targetUrlParam);
    if (!targetUrl) {
      res.status(400).send('Invalid target_url query parameter');
      return;
    }

    // Setup options for the outbound request
    const options = {
      method: req.method,
      headers: { ...req.headers, host: targetUrl.host },
    };

    // Create the outbound HTTPS request
    const request =
      targetUrl.protocol === 'https:' ? httpsRequest : httpRequest;
    const proxyReq = request(targetUrl, options, (proxyRes) => {
      res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);

      let allResponseChunks = '';
      const responsePassThrough = new PassThrough();
      responsePassThrough.on('data', (chunk: Buffer) => {
        allResponseChunks += chunk.toString();
      });

      responsePassThrough.on('end', () => {
        try {
          console.log(`────────────────────────────────────────────────────
🌍  Target URL: ${targetUrl}
────────────────────────────────────────────────────\n`);
          const interceptorName = res.getHeader('Elastic-Interceptor');
          if (interceptorName) {
            console.log(`🚀  Interceptor: ${interceptorName || 'N/A'}`);
          }

          const { statusCode, statusMessage } = proxyRes;
          const isSuccess = statusCode && statusCode >= 200 && statusCode < 300;
          const statusIcon = isSuccess ? '✅️' : '❌️';
          console.log(`${statusIcon} ${statusCode} ${statusMessage}`);

          console.log(''); // Add a newline for readability
          console.log('===== Request Body =====');
          console.log(formatRequestBody({ requestData, cliOptions }), '\n');

          console.log(`===== Response Body =====`);
          console.log(
            formatResponseBody({ res, allResponseChunks, cliOptions }),
          );
        } catch (e) {
          console.log('Error:', e);
        }
      });

      proxyRes.pipe(responsePassThrough).pipe(res);
    });

    proxyReq.on('error', (error) => {
      console.error('Proxy request error:', error);
      res.status(500).send('Error forwarding the request');
    });

    // Capture the request data
    const requestPassThrough = new PassThrough();
    let requestData = '';
    requestPassThrough.on('data', (chunk) => {
      requestData += chunk.toString();
    });

    req.pipe(requestPassThrough).pipe(proxyReq);
  });

  app.all('*', (req: Request, res: Response) => {
    console.log(`Hitting catch all route: ${req.method} ${req.path}`);
    res.send('Noting to see here. Try POST /chat/completions');
  });

  app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
    console.log(`Try sending a cURL request:\n`);
    console.log(`
curl -X POST \\
http://localhost:${PORT}/?target_url=https://jsonplaceholder.typicode.com/posts \\
-d '{"title": "foo", "body": "bar", "userId": 1}'`);
  });
}