UNPKG

@lukesthl/ts-axios-digest-auth

Version:

A library which implements HTTP digest authentication for axios clients. With generic typescript support

2 lines (1 loc) 3.18 kB
"use strict";var k=Object.create;var d=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,O=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var E=(r,e,s)=>e in r?d(r,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[e]=s,m=(r,e)=>{for(var s in e||(e={}))R.call(e,s)&&E(r,s,e[s]);if(y)for(var s of y(e))G.call(e,s)&&E(r,s,e[s]);return r};var H=(r,e)=>{for(var s in e)d(r,s,{get:e[s],enumerable:!0})},q=(r,e,s,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of L(e))!R.call(r,o)&&o!==s&&d(r,o,{get:()=>e[o],enumerable:!(t=v(e,o))||t.enumerable});return r};var T=(r,e,s)=>(s=r!=null?k(O(r)):{},q(e||!r||!r.__esModule?d(s,"default",{value:r,enumerable:!0}):s,r)),z=r=>q(d({},"__esModule",{value:!0}),r);var c=(r,e,s)=>new Promise((t,o)=>{var p=n=>{try{u(s.next(n))}catch(i){o(i)}},x=n=>{try{u(s.throw(n))}catch(i){o(i)}},u=n=>n.done?t(n.value):Promise.resolve(n.value).then(p,x);u((s=s.apply(r,e)).next())});var I={};H(I,{AxiosDigestAuth:()=>A});module.exports=z(I);var f=T(require("axios")),h=T(require("crypto")),C=T(require("url"));var A=class{constructor({axios:e,password:s,username:t}){this.axios=e||f.default.create(),this.count=0,this.password=s,this.username=t}authError(e){var s,t;return!!(((s=e.response)==null?void 0:s.status)===401||(t=e.response)!=null&&t.headers["www-authenticate"])}get(e,s){return c(this,null,function*(){return this.request(m({url:e,method:"GET"},s))})}post(e,s,t){return c(this,null,function*(){return this.request(m({url:e,method:"GET",data:s},t))})}put(e,s,t){return c(this,null,function*(){return this.request(m({url:e,method:"PUT",data:s},t))})}delete(e,s){return c(this,null,function*(){return this.request(m({url:e,method:"DELETE"},s))})}request(e){return c(this,null,function*(){var s;try{return yield this.axios.request(e)}catch(t){if(f.default.isAxiosError(t)&&!this.authError(t))throw t;if(f.default.isAxiosError(t)&&t.response){let p=t.response.headers["www-authenticate"].split(",").map(a=>a.split("="));if(!p)throw new Error("authDetails is undefined");++this.count;let x=("00000000"+this.count.toString()).slice(-8),u=h.randomBytes(24).toString("hex"),n=p.find(a=>a[0]&&a[0].toLowerCase().indexOf("realm")>-1),i=n&&n[1]?n[1].replace(/"/g,""):void 0,l=p.find(a=>a[0]&&a[0].toLowerCase().indexOf("nonce")>-1),w=l&&l[1]?l[1].replace(/"/g,""):void 0;if(!w||!i)throw new Error("nonce or realm is undefined");let b=h.createHash("md5").update(`${this.username}:${i}:${this.password}`).digest("hex");if(!e.url)throw new Error("opts.url is undefined");let g=new C.URL(e.url).pathname;if(!g)throw new Error("path is undefined");let D=h.createHash("md5").update(`${(s=e.method)!=null?s:"GET"}:${g}`).digest("hex"),P=h.createHash("md5").update(`${b}:${w}:${x}:${u}:auth:${D}`).digest("hex"),$=`Digest username="${this.username}",realm="${i}",nonce="${w}",uri="${g}",qop="auth",algorithm="MD5",response="${P}",nc="${x}",cnonce="${u}"`;return e.headers?e.headers.authorization=$:e.headers={authorization:$},e.auth&&delete e.auth,this.axios.request(e)}throw t}})}};0&&(module.exports={AxiosDigestAuth});