import dotenv from "dotenv"; import express from "express"; import cors from "cors"; import path from "path"; import fs from "fs"; import { fileURLToPath } from "url"; import { dirname } from "path"; import { createApiRoutes } from "./src/routes/apiRoutes.js"; dotenv.config(); const app = express(); const PORT = process.env.PORT || 4444; const __filename = fileURLToPath(import.meta.url); const publicDir = path.join(dirname(__filename), "public"); const defaultOrigins = [ "https://hianimez.xyz", "http://localhost:3000", "https://hianimez-45j.pages.dev", ]; const allowedOrigins = process.env.ALLOWED_ORIGINS ? [...defaultOrigins, ...process.env.ALLOWED_ORIGINS.split(",")] : defaultOrigins; app.use( cors({ origin: allowedOrigins?.includes("*") ? "*" : allowedOrigins || [], methods: ["GET"], }) ); // Custom CORS middleware app.use((req, res, next) => { const origin = req.headers.origin; if ( !origin || // Allow requests without an origin (server-side fetches, tools, etc.) allowedOrigins.includes("*") || allowedOrigins.includes(origin) ) { res.setHeader("Access-Control-Allow-Origin", origin || "*"); res.setHeader("Access-Control-Allow-Methods", "GET"); res.setHeader("Access-Control-Allow-Headers", "Content-Type"); return next(); } res .status(403) .json({ success: false, message: "Forbidden: Origin not allowed" }); }); app.use(express.static(publicDir, { redirect: false })); const jsonResponse = (res, data, status = 200) => res.status(status).json({ success: true, results: data }); const jsonError = (res, message = "Internal server error", status = 500) => res.status(status).json({ success: false, message }); createApiRoutes(app, jsonResponse, jsonError); app.use((req, res) => { const filePath = path.join(publicDir, "404.html"); if (fs.existsSync(filePath)) { res.status(404).sendFile(filePath); } else { res.status(500).send("Error loading 404 page."); } }); app.listen(PORT, () => { console.info(`Listening at ${PORT}`); });