UNPKG

reachy-url

Version:

Zero dependency nodejs library for checking if URL is reachable or not

73 lines (71 loc) 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: ()=>_default }); const _url = require("url"); const _http = _interopRequireDefault(require("http")); const _https = _interopRequireDefault(require("https")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // taken from https://stackoverflow.com/a/68415816/5748481 /** Check if a URL is reachable @param {string} url - URL of the website @param {number} timeout - Cancel request after given time @param {RequestOptions} requestOptions - Request options for HTTP Request @returns {Promise} Promise object with status code or error @example try { const statusCode = await isReachable("https://learnaws.io"); // statusCode = 200 } catch (error) { const { message } = error; // Unable to resolve given URL, got status 404 or // Request timed out while requesting the provided URL } */ const isReachable = (url, timeout = 2000, requestOptions)=>{ return new Promise((resolve, reject)=>{ const { host , protocol , pathname } = (0, _url.parse)(url); if (!host) { reject(Error("Invalid URL")); } const isHttps = protocol === "https:"; const options = { host, timeout, method: "HEAD", path: pathname, port: isHttps ? 443 : 80, ...requestOptions }; const network = isHttps ? _https.default : _http.default; const req = network.request(options, (res)=>{ const statusCode = res.statusCode ?? 404; const isStatusOk = statusCode < 400; if (isStatusOk) { return resolve(statusCode); } reject(Error(`Unable to resolve given URL, got status ${res.statusCode}`)); }); req.end(); req.on("timeout", ()=>{ req.destroy(Error("Request timed out while requesting the provided URL")); }); req.on("error", (err)=>{ reject(err); }); }); }; const _default = isReachable; console.time("took"); isReachable("https://learnaws.io").then((d)=>{ console.log(d); console.timeEnd("took"); }); /*#__PURE__*/ /*#__PURE__*/