sora222/process-app5
0
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 