const http = require("http"); const WebSocket = require("ws"); const axios = require("axios"); const express = require("express"); const PORT = process.env.PORT || 7860; const WEBSOCKET_URL = "wss://gagstock.gleeze.com"; const FALLBACK_SECOND_URL = "https://gagstock.gleeze.com/choose-scraper/second"; const ARIA_FETCH_URL = "https://kaiz-apis.gleeze.com/api/aria?ask=hi&uid=1&apikey=20f3d256-cb34-4c8b-991f-710f28fdf230"; let ws = null; let pingInterval = null; let lastUpdate = Date.now(); let fallbackSecondTriggered = false; let wsConnected = false; const startTime = Date.now(); // Express app const app = express(); // WebSocket connection function connectWebSocket() { if (ws) { ws.removeAllListeners(); ws.terminate(); } ws = new WebSocket(WEBSOCKET_URL); ws.on("open", () => { console.log("[WebSocket] Connected"); wsConnected = true; if (pingInterval) clearInterval(pingInterval); pingInterval = setInterval(() => { if (ws.readyState === WebSocket.OPEN) { ws.send("ping"); } }, 10_000); }); ws.on("message", (data) => { try { const json = JSON.parse(data); if (json.status !== "success") return; lastUpdate = Date.now(); fallbackSecondTriggered = false; console.log("[WebSocket] Received update:", new Date().toLocaleString()); } catch (e) { console.error("[WebSocket] Failed to parse message:", e.message); } }); ws.on("close", () => { console.log("[WebSocket] Disconnected. Reconnecting in 3s..."); wsConnected = false; if (pingInterval) clearInterval(pingInterval); setTimeout(connectWebSocket, 3000); }); ws.on("error", (err) => { console.log("[WebSocket] Error:", err.message); ws.close(); }); } // Check WebSocket updates setInterval(async () => { const now = Date.now(); const diff = now - lastUpdate; if (diff > 10 * 60 * 1000 && !fallbackSecondTriggered) { console.log("[Fallback] No WebSocket update in 10 minutes. Triggering SECOND fallback..."); try { await axios.get(FALLBACK_SECOND_URL); console.log("[Fallback] Triggered fallback to SECOND API."); fallbackSecondTriggered = true; } catch (e) { console.error("[Fallback] SECOND API call failed:", e.message); } } if (diff < 10 * 60 * 1000) { fallbackSecondTriggered = false; } }, 60_000); // 🔁 Ping docs every 5 seconds (original) setInterval(async () => { try { await axios.get("https://markdevs69v2.onrender.com/docs"); console.log(`[DOCS] Pinged successfully at ${new Date().toLocaleTimeString()}`); } catch (e) { console.error("[DOCS] Fetch failed:", e.message); } }, 5000); // 🔁 NEW — Pinging https://ccprojectsapis.zetsu.xyz/docs.html every 5s setInterval(async () => { try { await axios.get("https://ccprojectsapis.zetsu.xyz/docs.html"); console.log(`[CCPROJECTS] Pinged successfully at ${new Date().toLocaleTimeString()}`); } catch (e) { console.error("[CCPROJECTS] Fetch failed:", e.message); } }, 5000); // 🔁 Fetch from ARIA API every 1 hour setInterval(async () => { console.log("[Scheduled] Fetching from ARIA API..."); try { const response = await axios.get(ARIA_FETCH_URL); console.log("[ARIA API] Response:", response.data); } catch (err) { console.error("[ARIA API] Fetch failed:", err.message); } }, 5 * 60 * 1000); // 🖥️ HTTP status API app.get("/status", (req, res) => { const now = Date.now(); const uptime = Math.floor((now - startTime) / 1000); const secondsSinceLastUpdate = Math.floor((now - lastUpdate) / 1000); const status = { status: "running", websocketConnected: wsConnected, fallbackToSecondTriggered: fallbackSecondTriggered, lastUpdate: new Date(lastUpdate).toLocaleString(), secondsSinceLastUpdate, serverTime: new Date().toLocaleString(), uptimeSeconds: uptime, port: PORT }; res.json(status); }); app.get("/", (req, res) => { res.json({ message: "GrowAGarden WebSocket Monitor is running." }); }); // Start HTTP server & WebSocket app.listen(PORT, () => { console.log(`[HTTP] Server running at http://localhost:${PORT}/`); connectWebSocket(); });