const baseUrl = String( process.argv[2] || process.env.QIWEI_ONLINE_BASE || "https://server.fmode.cn", ).replace(/\/+$/, ""); const authToken = String(process.env.QIWEI_AUTH_TOKEN || "").trim(); const timeoutMs = 15_000; async function request(path, options = {}) { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), timeoutMs); try { const response = await fetch(`${baseUrl}${path}`, { ...options, headers: { Accept: "application/json", ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}), ...(options.headers || {}), }, signal: controller.signal, }); const contentType = response.headers.get("content-type") || ""; const text = await response.text(); let body = null; if (contentType.includes("json")) { try { body = JSON.parse(text); } catch { body = null; } } return { path, status: response.status, contentType, bytes: Buffer.byteLength(text), code: body && typeof body === "object" ? body.code ?? null : null, }; } finally { clearTimeout(timeout); } } function expect(name, result, statuses) { const ok = statuses.includes(result.status); console.log(JSON.stringify({ name, ...result, ok })); if (!ok) throw new Error(`${name} returned HTTP ${result.status}`); } const health = await request("/api/qiwei/health"); expect("health", health, [200]); const test = await request("/api/qiwei/test"); expect("test", test, [200]); const plans = await request("/api/qiwei/product/plans?seats=1&months=1"); expect("plans", plans, [200]); if (authToken) { const trial = await request("/api/qiwei/trial/status"); expect("trial-status", trial, [200]); const subscription = await request("/api/qiwei/subscribe/status?seats=1&months=1"); expect("subscription-status", subscription, [200]); } else { const unauthenticated = await request("/api/qiwei/trial/status"); expect("trial-status-without-auth", unauthenticated, [401, 403]); } console.log(JSON.stringify({ ok: true, baseUrl, authenticatedChecks: Boolean(authToken) }));