bzl

self-hosted ephemeral community engine
Log | Files | Refs | README | LICENSE

stream-pack-detect-ip.js (1642B)


      1 const https = require("https");
      2 
      3 function getJson(url, { timeoutMs = 2500 } = {}) {
      4   return new Promise((resolve) => {
      5     let settled = false;
      6     const done = (v) => {
      7       if (settled) return;
      8       settled = true;
      9       resolve(v);
     10     };
     11     try {
     12       const u = new URL(url);
     13       const req = https.request(
     14         {
     15           method: "GET",
     16           protocol: u.protocol,
     17           hostname: u.hostname,
     18           port: u.port,
     19           path: `${u.pathname || "/"}${u.search || ""}`,
     20           headers: { Accept: "application/json", "Cache-Control": "no-store" }
     21         },
     22         (res) => {
     23           let buf = "";
     24           res.setEncoding("utf8");
     25           res.on("data", (c) => (buf += c));
     26           res.on("end", () => {
     27             try {
     28               done({ ok: true, status: res.statusCode || 0, json: JSON.parse(buf || "{}") });
     29             } catch {
     30               done({ ok: false, status: res.statusCode || 0 });
     31             }
     32           });
     33         }
     34       );
     35       req.on("error", (e) => done({ ok: false, error: e?.message || String(e) }));
     36       req.setTimeout(timeoutMs, () => {
     37         try {
     38           req.destroy(new Error("timeout"));
     39         } catch {
     40           // ignore
     41         }
     42         done({ ok: false, timeout: true });
     43       });
     44       req.end();
     45     } catch (e) {
     46       done({ ok: false, error: e?.message || String(e) });
     47     }
     48   });
     49 }
     50 
     51 async function main() {
     52   const r = await getJson("https://api.ipify.org?format=json");
     53   const ip = String(r?.json?.ip || "").trim();
     54   if (!ip) {
     55     console.error("[stream-pack] Failed to detect IP.");
     56     process.exit(1);
     57   }
     58   console.log(ip);
     59 }
     60 
     61 main();
     62