/** * 真机核验用的 mock NexusPHP 站(testkit mock-nexusphp,观众风格),在 compose 网络里以 mocknexus:8080 提供给 camofox。 * testkit 的 mock 只监听 127.0.0.1 随机端口,这里在 0.0.0.0:8080 做一层 TCP 转发。 * 控制端点(只供核验脚本):POST /__mock/login?v=0|1 切换登录态;GET /__mock/infohash?id= 取种子 infohash; * GET /__mock/stats 取 takelogin 次数。 */ import { createServer } from "node:http"; import { connect, createServer as createTcp } from "node:net"; import { createMockNexusPhpSite } from "../../packages/testkit/src/sites/mock-nexusphp.ts"; const site = await createMockNexusPhpSite({ siteName: "观众(mock)", loginMode: "redirect" }); const upstream = new URL(site.baseUrl); const control = createServer((req, res) => { const u = new URL(req.url ?? "/", "http://x"); res.setHeader("content-type", "application/json"); if (u.pathname === "/__mock/login") { site.setLoggedIn(u.searchParams.get("v") !== "0"); return res.end(JSON.stringify({ ok: true })); } if (u.pathname === "/__mock/infohash") return res.end(JSON.stringify({ infohash: site.infoHashOf(u.searchParams.get("id") ?? "") })); if (u.pathname === "/__mock/stats") return res.end(JSON.stringify({ loginAttempts: site.loginAttempts, releases: site.releases.length })); res.statusCode = 404; res.end("{}"); }); control.listen(8081, "0.0.0.0"); createTcp((client) => { const up = connect(Number(upstream.port), upstream.hostname); client.pipe(up).pipe(client); client.on("error", () => up.destroy()); up.on("error", () => client.destroy()); }).listen(8080, "0.0.0.0", () => console.log(`mock nexus ${site.baseUrl} → 0.0.0.0:8080(控制 8081)`));