api-jer / index.js
jerdev38282's picture
Update index.js
cd2e284 verified
raw
history blame
4.2 kB
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();
});