reachy-reachable-url
Version:
Drop in replacement for reachable-url in deno env using reachy-url
51 lines (50 loc) • 1.47 kB
JavaScript
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;