CoolFace
Apppublic

sora222/process-app5

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
index.js82 linesDownload Raw Back to src
1import turnstile from "./lib/ends/turnstile.js";2import { initBrowser, getPage, releasePage } from "./lib/browser/index.js";3 4const port = Number(process.env.PORT) || 7860;5 6global.browserLimit = Number(process.env.browserLimit) || 50;7global.timeOut = Number(process.env.timeOut) || 60000;8 9initBrowser({ headless: true })10    .then(async () => {11    console.log("Browser initialized");12})13    .catch((err) => console.error("Initial browser launch failed", err));14    15const server = Bun.serve({16    port,17    idleTimeout: Math.floor(global.timeOut / 1000),18    async fetch(req) {19        const url = new URL(req.url);20        if (req.method === "POST" && url.pathname === "/cloudflare") {21            const startTime = Date.now();22            let data;23            try {24                data = await req.json();25            }26            catch {27                return Response.json({ message: "Bad Request: invalid JSON" }, { status: 400 });28            }29            if (!data || typeof data.mode !== "string") {30                return Response.json({ message: "Bad Request: missing or invalid mode" }, { status: 400 });31            }32            if (global.browserLimit <= 0) {33                return Response.json({ message: "Too Many Requests" }, { status: 429 });34            }35            global.browserLimit--;36            let result;37            let page;38            try {39                if (data.mode === "turnstile") {40                    page = await getPage({ newPage: true });41                    result = await turnstile(data, page)42                        .then((token) => ({ token, success: true }))43                        .catch(async (err) => {44                        return { code: 500, message: err.message, success: false };45                    });46                }47                else {48                    result = { code: 400, message: "Invalid mode", success: false };49                }50            }51            catch (err) {52                result = { code: 500, message: err.message, success: false };53            }54            finally {55                if (page) {56                    await releasePage(page);57                }58                global.browserLimit++;59            }60            if (!result.elapsed) {61                result.elapsed = ((Date.now() - startTime) / 1000).toFixed(2) + "s";62            }63            const finalResult = {};64            if ("token" in result)65                finalResult.token = result.token;66            if ("headers" in result)67                finalResult.headers = result.headers;68            if ("code" in result)69                finalResult.code = result.code;70            if ("message" in result)71                finalResult.message = result.message;72            finalResult.elapsed = result.elapsed;73            if ("success" in result)74                finalResult.success = result.success;75            return Response.json(finalResult, { status: result.code ?? 200 });76        }77        return Response.json({ message: "Not Found" }, { status: 404 });78    },79});80 81console.log(`Server running on port ${server.port}`);82