@boillodmanuel/link-check
v5.5.0
Published
checks whether a hyperlink is alive (200 OK) or dead
Downloads
3
Maintainers
Readme
ℹ️ Fork of tcort repository (version 4.5.2), with several improvements:
- completely rewritten in typescript
- see CHANGELOG.md since v4.5.2 to get full list of improvements
link-check
Checks whether a hyperlink is alive (200 OK
) or dead.
Installation
npm install --save link-check
Specification
A link is said to be 'alive' if an HTTP HEAD or HTTP GET for the given URL
eventually ends in a 200 OK
response. To minimize bandwidth, an HTTP HEAD
is performed. If that fails (e.g. with a 405 Method Not Allowed
), an HTTP
GET is performed. Redirects are followed.
In the case of mailto:
links, this module validates the e-mail address
using isemail.
API
linkCheck(link, [opts,] callback)
Given a link
and a callback
, attempt an HTTP HEAD and possibly an HTTP GET.
Parameters:
url
string containing a URL.opts
optional options object containing any of the following optional fields:baseUrl
the base URL for relative links.timeout
timeout in zeit/ms format. (e.g."2000ms"
,20s
,1m
). Default10s
.aliveStatusCodes
an array of numeric HTTP Response codes which indicate that the link is alive. Entries in this array may also be regular expressions. Example:[ 200, /^[45][0-9]{2}$/ ]
. Default[ 200 ]
.headers
a string based attribute value object to send custom HTTP headers. Example:{ 'Authorization' : 'Basic Zm9vOmJhcg==' }
.retryOn429
a boolean indicating whether to retry on a 429 (Too Many Requests) response. When true, if the response has a 429 HTTP code and includes an optionalretry-after
header, a retry will be attempted after the delay indicated in theretry-after
header. If noretry-after
header is present in the response or theretry-after
header value is not valid according to RFC7231 (value must be in seconds), a default retry delay of 60 seconds will apply. This default can be overriden by thefallbackRetryDelay
parameter.retryOnError
a boolean indicating whether to retry on error (not an error status code). Default isfalse
.retryCount
the number of retries to be made on a 429 response. Default2
.fallbackRetryDelay
the delay in zeit/ms format. (e.g."2000ms"
,20s
,1m
) for retries on a 429 response when noretry-after
header is returned or when it has an invalid value. Default is60s
.debug
enable debugdebugToStdErr
write debug message to standard error output
callback
function which accepts(err, result)
.err
an Error object when the operation cannot be completed, otherwisenull
.result
an object with the following properties orundefined
:link
thelink
provided as inputstatus
a string set to eitheralive
ordead
.statusCode
the HTTP status code. Set to0
if no HTTP status code was returned (e.g. when the server is down).err
any connection error that occurred, otherwiseundefined
.additionalMessages
a list of additional messages that occured, otherwiseundefined
.
Examples
Javascript:
'use strict';
const linkChecker = require('link-check');
linkCheck.linkCheck('http://example.com', function (err, result) {
if (err) {
console.error(err);
return;
}
console.log(`${result.link} is ${result.status}`);
});
Typescript:
import { linkCheck, Options, LinkCheckResult } from 'link-check'
const options: Options = {
timeout: '5s',
}
linkCheck('http://example.com', options, (err: any, result: LinkCheckResult) => {
if (err) {
console.error(err)
return
}
console.log(`${result.link} is ${result.status}`)
})
One-liner test from shell
node -e 'require("link-check").linkCheck("https://www.shellcheck.net", {debug: true, timeout: "5s"}, function (err, result) { console.log(result)})'
With basic authentication:
'use strict';
const linkChecker = require('link-check');
linkChecker.linkCheck('http://example.com', { headers: { 'Authorization': 'Basic Zm9vOmJhcg==' } }, function (err, result) {
if (err) {
console.error(err);
return;
}
console.log(`${result.link} is ${result.status}`);
});
Testing
npm test
License
See LICENSE.md