JSPM

  • Created
  • Published
  • Downloads 562414
  • Score
    100M100P100Q179267F
  • License ISC

digest auth request plugin for fetch/node-fetch also support http basic auth authentication

Package Exports

  • digest-fetch

Readme

digest-fetch

Join the chat at https://gitter.im/devfans/digest-fetch NPM Version NPM Downloads Build Status Test Coverage

digest auth request plugin for fetch/node-fetch also supports http basic authentication

Installation

// For digest-fetch 3.x.x or above

npm install node-fetch@latest

// For digest-fetch 2.0.3 or below

// dependencies for node
npm install node-fetch@@v2

Get Started

// Use require for digest-fetch 2.0.3 or below
const DigestFetch = require('digest-fetch')

// Use import
import DigestFetch from "digest-fetch"

// typescript
import DigestFetch from 'digest-fetch'

Http Basic Authentication

Create a client using basic authentication challenge

const client = new DigestFetch('user', 'password', { basic: true })
client.fetch(url, options).then(res => res.json).then(console.dir)

Digest Access Authentication

Create a digest authentication request client with default options

const client = new DigestFetch('user', 'password') 

Specify options for digest authentication

const client = new DigestFetch('user', 'password', { algorithm: 'MD5' }) 

Supported Algorithm

['MD5', 'MD5-sess', 'SHA-256', 'SHA-256-sess', 'SHA-512-256', 'SHA-512-256-sess']

Options fields:

field type default description
algorithm string 'MD5' algorithm to be used: 'MD5', 'SHA-256', 'SHA-512-256' or with '-sess'
statusCode number 401 custom alternate authentication failure code for avoiding browser prompt, see details below
cnonceSize number 32 length of the cnonce
logger object none logger for debug, can use console, default no logging
basic bool false switch to use basic authentication
precomputeHash bool false wether to attach hash of credentials to the client instance instead of raw credential

Details:

Do request same way as fetch or node-fetch

const url = ''
const options = {}
client.fetch(url, options)
  .then(resp=>resp.json())
  .then(data=>console.log(data))
  .catch(e=>console.error(e))

Pass in refresh request options factory function for conditions options needs be refreshed when trying again. For example when posting with file stream:

const factory = () => ({ method: 'post', body: fs.createReadStream('path-to-file') })
client.fetch(url, {factory})
  .then(resp=>resp.json())
  .then(data=>console.log(data))
  .catch(e=>console.error(e))

About

Digest authentication: https://en.wikipedia.org/wiki/Digest_access_authentication or https://www.rfc-editor.org/rfc/rfc7616 This plugin is implemented following RFC2069, RFC2617 and RFC7616 supports http basic authentication as well!

Please open issues if you find bugs or meet problems during using this plugin. Feel free to open PRs whenever you have better ideas on this project!