Spaces:
Paused
Paused
| import { logger } from "../../../lib/logger"; | |
| import * as Sentry from "@sentry/node"; | |
| import { Request, Response } from "express"; | |
| export async function checkFireEngine(req: Request, res: Response) { | |
| try { | |
| if (!process.env.FIRE_ENGINE_BETA_URL) { | |
| logger.warn("Fire engine beta URL not configured"); | |
| return res.status(500).json({ | |
| success: false, | |
| error: "Fire engine beta URL not configured", | |
| }); | |
| } | |
| const controller = new AbortController(); | |
| const timeout = setTimeout(() => controller.abort(), 30000); | |
| const urls = ["https://roastmywebsite.ai", "https://example.com"]; | |
| let lastError: any = null; | |
| for (const url of urls) { | |
| try { | |
| const response = await fetch( | |
| `${process.env.FIRE_ENGINE_BETA_URL}/scrape`, | |
| { | |
| method: "POST", | |
| headers: { | |
| "Content-Type": "application/json", | |
| "X-Disable-Cache": "true", | |
| }, | |
| body: JSON.stringify({ | |
| url, | |
| engine: "chrome-cdp", | |
| }), | |
| signal: controller.signal, | |
| }, | |
| ); | |
| clearTimeout(timeout); | |
| if (response.ok) { | |
| const responseData = await response.json(); | |
| return res.status(200).json({ | |
| data: responseData, | |
| }); | |
| } | |
| lastError = `Fire engine returned status ${response.status}`; | |
| } catch (error) { | |
| if (error.name === "AbortError") { | |
| return res.status(504).json({ | |
| success: false, | |
| error: "Request timed out after 30 seconds", | |
| }); | |
| } | |
| lastError = error; | |
| } | |
| } | |
| // If we get here, all retries failed | |
| logger.error("An error occurred while checking fire-engine", { | |
| module: "admin", | |
| method: "checkFireEngine", | |
| error: lastError, | |
| }); | |
| Sentry.captureException(lastError); | |
| return res.status(500).json({ | |
| success: false, | |
| error: "Internal server error - all retry attempts failed", | |
| }); | |
| } catch (error) { | |
| logger.error(error); | |
| Sentry.captureException(error); | |
| return res.status(500).json({ | |
| success: false, | |
| error: "Internal server error", | |
| }); | |
| } | |
| } | |