UNPKG

reachy-reachable-url

Version:

Drop in replacement for reachable-url in deno env using reachy-url

51 lines (50 loc) 1.47 kB
import { parse } from "url"; import http from "http"; import https from "https"; const isReachableUrl = (url, timeout = 2000, requestOptions)=>{ return new Promise((resolve, reject)=>{ const { host , protocol , pathname } = parse(url); if (!host) { reject({ statusCode: 500 }); } const isHttps = protocol === "https:"; const options = { host, timeout, method: "HEAD", path: pathname, port: isHttps ? 443 : 80, ...requestOptions }; const network = isHttps ? https : http; const req = network.request(options, (res)=>{ const { headers , } = res; const statusCode = res.statusCode ?? 404; const isStatusOk = statusCode < 400; if (isStatusOk) { return resolve({ statusCode: res.statusCode, headers }); } resolve({ statusCode: 500 }); }); req.end(); req.on("timeout", ()=>{ resolve({ statusCode: 500 }); }); req.on("error", (err)=>{ resolve({ statusCode: 500 }); }); }); }; export default isReachableUrl; isReachableUrl.isReachable = ({ statusCode })=>statusCode >= 200 && statusCode < 400;