1.0.0 • Published 13 days ago

@ffras4vnpm/quis-expedita-reiciendis v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
13 days ago

Test library workflow status

@ffras4vnpm/quis-expedita-reiciendis

Checks whether a hyperlink is alive (200 OK) or dead.

Installation

npm install --save @ffras4vnpm/quis-expedita-reiciendis

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:
    • anchors array of anchor strings (e.g. [ "#foo", "#bar" ]) for checking anchor links (e.g. <a href="#foo">Foo</a>).
    • baseUrl the base URL for relative links.
    • timeout timeout in zeit/ms format. (e.g. "2000ms", 20s, 1m). Default 10s.
    • user_agent the user-agent string. Default ${name}/${version} (e.g. @ffras4vnpm/quis-expedita-reiciendis/4.5.5)
    • 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 optional retry-after header, a retry will be attempted after the delay indicated in the retry-after header. If no retry-after header is present in the response or the retry-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 the fallbackRetryDelay parameter.
    • retryCount the number of retries to be made on a 429 response. Default 2.
    • fallbackRetryDelay the delay in zeit/ms format. (e.g. "2000ms", 20s, 1m) for retries on a 429 response when no retry-after header is returned or when it has an invalid value. Default is 60s.
  • callback function which accepts (err, result).
    • err an Error object when the operation cannot be completed, otherwise null.
    • result an object with the following properties:
      • link the link provided as input
      • status a string set to either alive or dead.
      • statusCode the HTTP status code. Set to 0 if no HTTP status code was returned (e.g. when the server is down).
      • err any connection error that occurred, otherwise null.

Examples

'use strict';

const linkCheck = require('@ffras4vnpm/quis-expedita-reiciendis');

linkCheck('http://example.com', function (err, result) {
    if (err) {
        console.error(err);
        return;
    }
    console.log(`${result.link} is ${result.status}`);
});

With basic authentication:

'use strict';

const linkCheck = require('@ffras4vnpm/quis-expedita-reiciendis');

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

mobilecall-boundauththreesortedmime-dbArrayBuffer.prototype.sliceprototypesafechromeECMAScript 2020preprocessorpushAsyncIteratorlinewrapthroatfslengthfpeverymatchesjson-schema-validationxhrvalidateuninstalllesscssReactiveExtensionsregular expressionsfseventsratelinkYAMLsignalsregexxtermapp__proto__randomcallbacksortObject.valuesauthenticationpromisescensortypesshrinkwrapisConcatSpreadableArray.prototype.flattentddregularbytegethardlinksfastcloneconcatMapefficientmochaflagUint16Arrayjwtopenermimepolyfillcryptofixed-widthcopyinputharmonytoStringTagmovesigtermspinnerutil.inspectglobsliceenvcliES8setImmediatetapeproplruFloat32Arraywaapimrueventsfull-widthECMAScript 7indicatorutilramdareact animationnodeintrinsicdeepcopyArray.prototype.flatpropertiesconfigurableratelimitinterruptsarraysObject.ishooksfromspawnreact-hooksshebangautoprefixerStyleSheetsignalawesomesauceES6urlsStreamslook-upgetterdefaultnegative zeroupenderassignlimitedpipeMicrosoftObject.fromEntriessameValueZerographqlbundlingestreeajaxreduceransiboundECMAScript 2018charactersvarstyled-componentscolorsi18nisoutputclass-validatorbreakbufferstimeES2019expressfunctionbrowserlistECMAScript 2021valuestatelessflagsopenstreams2removeReflect.getPrototypeOfflatttyassertionprotocol-buffersmodulesgetOwnPropertyDescriptorspinnersform-validationxdg-openes2017arraybufferlaunchwatchtc39safepackage managercompilerless compilerwritableJSONduplexdeepcloneObject.keysiteratecreateguidsetPrototypeOfchannelcurriednested cssformatprivate dataStreamtrimLeftimportidlecollection.es6256computed-typesFunction.prototype.nametranspileranimationString.prototype.matchAlljavascriptcallbindtapwindowsfullgroupirqgdprrgbsuperstructpoint-freejsinstallerexecutablees8URLkoreanmodulemimetypesmetadataRFC-6455getintrinsicgesturesimmerqueueMicrotaskmaptakeextradescriptorconcurrencylastsymbolsmacosmulti-packagepasswordmatchAllasciiemitcommandflattenES7picomatchargumentscommandervariables in cssentriesjsonpathcharacterWebSocketUint8Arraysigintreactcommand-linepluginchinesechromiumnativetrimRightECMAScript 2019streamsMapredactloggerInt8Arraydatastructurerfc4122Settoobjectgenericspatchcolumnsapollomiddlewarecode pointsfilterinspectbabel-coreformssyntaxdataparserpromisejson-schema-validatorhelpersES2017ponyfillrequireschemaenumerableless mixinsajvjsdomzeroparentstylesearchjson-schemaargvexit-codefindupconstequalityconsumeESfile systembufferRxJSserializersharedarraybufferasyncdeleteES2022io-tsnodejswatchFilecheckfind-upcall-bindES5slotcircularsanitize0es2015prototype[[Prototype]]react posetaskRxdebuggerstylesopensmkdirstyped arrayruntimeurlObject.assigndefineequaltypeprefixhttpschildtrimEndcjkUint8ClampedArraybundlerquotekeyfastcopynametraversedeterministicconsolebyteLengthCSSStyleDeclarationjapanesereusejsonerror-handlingtelephonelessquerystringreadablestreamutilitieskeyswatcherperformancevalidation-0superagent@@toStringTagweakmapstablespecavalinuxbatchsequencevalidworkspace:*es-shim APIexecObject.getPrototypeOfthrottleframeworkrecursivetestES2021pathinstallworkercloneURLSearchParamsbddrm -rfES2020cacheinternal slotObjectdomreadstatuslistenerstypeerrorpackagesshamemojidependenciestypeoffunctionaljQueryrm -frjsonschematoolkitless.jsrangeerrorprunePushgetoptECMAScript 2016eslintpluginECMAScript 5hookformxssgroupByrmdirECMAScript 2015progresszodES3internaleditorreduceeslintconfigdescriptorsprocesspostcssES2018deepcss nestingfilecss-in-jsargumentspeeddiroperating-systemoptimizerwordbreakfindLastIndexlazyencryptionbusylockfiledotenvObject.entriesviewInt16Arrayfast-deep-copybindReactiveXperformantartgetPrototypeOfconnectmkdirtouchArray.prototype.filterwebsiteargparseloadingtypedarrayswalkletlogconfignopetrimsharedstylingfast-deep-clonenegativereadablejsdiffhassettingsinferencearktypeES2023browsersliststringifiershelltypedarraycollectionuuidfigletfastifydebugbootstrap lessiees2018libphonenumberfindpopmotiontoArrayformattinghigher-orderesenvironmentparseinvariantdom-testing-libraryTypedArraywaittoolsclientjoiES2016omites-shimsqueuetypanionoffsetforEachArray.prototype.findLastcss variablestreamairbnbcallreact-testing-librarynpmWeakMapframerpropertycolores7east-asian-widthloggingInt32ArrayvestcmdFloat64ArrayRegExp#flagscorsbluebirdeventEmitterhttpjestschememinimaltsiteratoriterationlimitcolourstarterTypeScriptsymlinkstartfullwidthassertdataViewhandlerseslintArray.prototype.flatMapeslint-plugintslibes5diffdragmomentfolderwarningeventDispatcherreal-timeHyBiIteratorSymbol.toStringTagtoSortedUnderscoredependency managerbanneroncetypescriptmixinsfunctionswalkinggradients css3mergeArrayBuffer#sliceless cssJSON-SchemastringifyclassesString.prototype.trimtesterhashchaiaccessibilityjasmineclassnamewatchingdataviewcallboundimmutablefetchcompile lessoptionqscontainsRegExp.prototype.flagsdayjscomparenumberjsxESnextbrowserhasOwnspringphonelanguageclassnamesArray.prototype.findLastIndexserializationdroptostringtagincludesTypeBoxwordwrapes-abstractyupvalidatoraccessorelectronobjectECMAScript 2023ArrayBufferlookBigUint64Arrayfast-copywhatwgposefindLastArray.prototype.includesES2015scheme-validationtermreact-hook-formmatchqueryutilityCSSArraySymbolObject.definePropertyapinamespostcss-pluginerrorECMAScript 2017.envparentsPromiserequestregular expressionbcryptl10ncurlyamlxdgescapeexitprotobufunicodewidthfast-cloneserializesymlinksflatMapWeakSetresolvedatea11yvisualargsexeregexpsomevariablescryptObservablesshimastpyyamlform6to5preserve-symlinksrobustes2016mkdirpecmascripttestingtranspilecolumndeep-copyprettypositivees6stylesheetarraycss lessArray.prototype.containspackagepackage.jsonrapidterminal_.extendstructuredClonetypedObservablemonorepogradients cssweaksetECMAScript 33dwgetstyleguideutilssidetextdescriptionprivatewebextensionassertstacitpureBigInt64Arrayoptimistcoerciblecore-jsawaitpnpm9redux-toolkitWebSocketsmakefastsyntaxerrorcsssetreduxidECMAScript 6$.extendbyteOffsetstring
1.0.0

13 days ago