{"version":3,"sources":["jsdelivr-header.js","/npm/digest-auth-request@0.7.0/digestAuthRequest.js"],"names":[],"mappings":"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","file":"/npm/digest-auth-request@0.7.0/digestAuthRequest.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/digest-auth-request@0.7.0/digestAuthRequest.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// digest auth request\n// by Jamie Perkins\n\n// dependent upon CryptoJS MD5 hashing:\n// http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js\n\n;(function(global, factory) {\n        typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n        global.digestAuthRequest = factory()\n}(this, function() {\n        return function(method, url, username, password) {\n                var self = this;\n\n                if (typeof CryptoJS === 'undefined' && typeof require === 'function') {\n                  var CryptoJS = require('crypto-js');\n                }\n\n                this.scheme = null; // we just echo the scheme, to allow for 'Digest', 'X-Digest', 'JDigest' etc\n                this.nonce = null; // server issued nonce\n                this.realm = null; // server issued realm\n                this.qop = null; // \"quality of protection\" - '' or 'auth' or 'auth-int'\n                this.response = null; // hashed response to server challenge\n                this.opaque = null; // hashed response to server challenge\n                this.nc = 1; // nonce count - increments with each request used with the same nonce\n                this.cnonce = null; // client nonce\n\n                // settings\n                this.timeout = 10000; // timeout\n                this.loggingOn = true; // toggle console logging\n\n                // determine if a post, so that request will send data\n                this.post = false;\n                if (method.toLowerCase() === 'post' || method.toLowerCase() === 'put') {\n                        this.post = true;\n                }\n\n                // start here\n                // successFn - will be passed JSON data\n                // errorFn - will be passed error status code\n                // data - optional, for POSTS\n                this.request = function(successFn, errorFn, data) {\n                        // posts data as JSON if there is any\n                        if (data) {\n                                self.data = JSON.stringify(data);\n                        }\n                        self.successFn = successFn;\n                        self.errorFn = errorFn;\n\n                        if (!self.nonce) {\n                                self.makeUnauthenticatedRequest(self.data);\n                        } else {\n                                self.makeAuthenticatedRequest();\n                        }\n                }\n                this.makeUnauthenticatedRequest = function(data) {\n                        self.firstRequest = new XMLHttpRequest();\n                        self.firstRequest.open(method, url, true);\n                        self.firstRequest.timeout = self.timeout;\n                        // if we are posting, add appropriate headers\n                        if (self.post) {\n                                self.firstRequest.setRequestHeader('Content-type', 'application/json');\n                        }\n\n                        self.firstRequest.onreadystatechange = function() {\n\n                                // 2: received headers,  3: loading, 4: done\n                                if (self.firstRequest.readyState === 2) {\n\n                                        var responseHeaders = self.firstRequest.getAllResponseHeaders();\n                                        responseHeaders = responseHeaders.split('\\n');\n                                        // get authenticate header\n                                        var digestHeaders;\n                                        for(var i = 0; i < responseHeaders.length; i++) {\n                                                if (responseHeaders[i].match(/www-authenticate/i) != null) {\n                                                        digestHeaders = responseHeaders[i];\n                                                }\n                                        }\n\n                                        if (digestHeaders != null) {\n                                                // parse auth header and get digest auth keys\n                                                digestHeaders = digestHeaders.slice(digestHeaders.indexOf(':') + 1, -1);\n                                                digestHeaders = digestHeaders.split(',');\n                                                self.scheme = digestHeaders[0].split(/\\s/)[1];\n                                                for (var i = 0; i < digestHeaders.length; i++) {\n                                                        var equalIndex = digestHeaders[i].indexOf('='),\n                                                                key = digestHeaders[i].substring(0, equalIndex),\n                                                                val = digestHeaders[i].substring(equalIndex + 1);\n                                                        val = val.replace(/['\"]+/g, '');\n                                                        // find realm\n                                                        if (key.match(/realm/i) != null) {\n                                                                self.realm = val;\n                                                        }\n                                                        // find nonce\n                                                        if (key.match(/nonce/i) != null) {\n                                                                self.nonce = val;\n                                                        }\n                                                        // find opaque\n                                                        if (key.match(/opaque/i) != null) {\n                                                                self.opaque = val;\n                                                        }\n                                                        // find QOP\n                                                        if (key.match(/qop/i) != null) {\n                                                                self.qop = val;\n                                                        }\n                                                }\n                                                // client generated keys\n                                                self.cnonce = self.generateCnonce();\n                                                self.nc++;\n                                                // if logging, show headers received:\n                                                self.log('received headers:');\n                                                self.log('\trealm: '+self.realm);\n                                                self.log('\tnonce: '+self.nonce);\n                                                self.log('\topaque: '+self.opaque);\n                                                self.log('\tqop: '+self.qop);\n                                                // now we can make an authenticated request\n\n                                                self.makeAuthenticatedRequest();\n                                        }\n                                }\n                                if (self.firstRequest.readyState === 4) {\n                                        if (self.firstRequest.status === 200) {\n                                                self.log('Authentication not required for '+url);\n                                                if (self.firstRequest.responseText !== 'undefined') {\n                                                        if (self.firstRequest.responseText.length > 0) {\n                                                                // If JSON, parse and return object\n                                                                if (self.isJson(self.firstRequest.responseText)) {\n                                                                        self.successFn(JSON.parse(self.firstRequest.responseText));\n                                                                } else {\n                                                                        self.successFn(self.firstRequest.responseText);\n                                                                }\n                                                        }\n                                                } else {\n                                                        self.successFn();\n                                                }\n                                        }\n                                }\n                        }\n                        // send\n                        if (self.post) {\n                                // in case digest auth not required\n                                self.firstRequest.send(self.data);\n                        } else {\n                                self.firstRequest.send();\n                        }\n                        self.log('Unauthenticated request to '+url);\n\n                        // handle error\n                        self.firstRequest.onerror = function() {\n                                if (self.firstRequest.status !== 401) {\n                                        self.log('Error ('+self.firstRequest.status+') on unauthenticated request to '+url);\n                                        self.errorFn(self.firstRequest.status);\n                                }\n                        }\n\n                }\n                this.makeAuthenticatedRequest= function() {\n\n                        self.response = self.formulateResponse();\n\n                        self.authenticatedRequest = new XMLHttpRequest();\n                        self.authenticatedRequest.open(method, url, true);\n                        self.authenticatedRequest.timeout = self.timeout;\n                        var digestAuthHeader = self.scheme+' '+\n                                'username=\"'+username+'\", '+\n                                'realm=\"'+self.realm+'\", '+\n                                'nonce=\"'+self.nonce+'\", '+\n                                'uri=\"'+url+'\", '+\n                                'response=\"'+self.response+'\", '+\n                                'opaque=\"'+self.opaque+'\", '+\n                                'qop='+self.qop+', '+\n                                'nc='+('00000000' + self.nc).slice(-8)+', '+\n                                'cnonce=\"'+self.cnonce+'\"';\n                        self.authenticatedRequest.setRequestHeader('Authorization', digestAuthHeader);\n                        self.log('digest auth header response to be sent:');\n                        self.log(digestAuthHeader);\n                        // if we are posting, add appropriate headers\n                        if (self.post) {\n                                self.authenticatedRequest.setRequestHeader('Content-type', 'application/json');\n                        }\n                        self.authenticatedRequest.onload = function() {\n                                // success\n                                if (self.authenticatedRequest.status >= 200 && self.authenticatedRequest.status < 400) {\n                                        // increment nonce count\n                                        self.nc++;\n                                        // return data\n                                        if (self.authenticatedRequest.responseText !== 'undefined' && self.authenticatedRequest.responseText.length > 0 ) {\n                                                // If JSON, parse and return object\n                                                if (self.isJson(self.authenticatedRequest.responseText)) {\n                                                        self.successFn(JSON.parse(self.authenticatedRequest.responseText));\n                                                } else {\n                                                        self.successFn(self.authenticatedRequest.responseText);\n                                                }\n                                        } else {\n                                                self.successFn();\n                                        }\n                                }\n                                // failure\n                                else {\n                                        self.nonce = null;\n                                        self.errorFn(self.authenticatedRequest.status);\n                                }\n                        }\n                        // handle errors\n                        self.authenticatedRequest.onerror = function() {\n                                self.log('Error ('+self.authenticatedRequest.status+') on authenticated request to '+url);\n                                self.nonce = null;\n                                self.errorFn(self.authenticatedRequest.status);\n                        };\n                        // send\n                        if (self.post) {\n                                self.authenticatedRequest.send(self.data);\n                        } else {\n                                self.authenticatedRequest.send();\n                        }\n                        self.log('Authenticated request to '+url);\n                }\n                // hash response based on server challenge\n                this.formulateResponse = function() {\n                        var HA1 = CryptoJS.MD5(username+':'+self.realm+':'+password).toString();\n                        var HA2 = CryptoJS.MD5(method+':'+url).toString();\n                        var response = CryptoJS.MD5(HA1+':'+\n                                self.nonce+':'+\n                                ('00000000' + self.nc).slice(-8)+':'+\n                                self.cnonce+':'+\n                                self.qop+':'+\n                                HA2).toString();\n                        return response;\n                }\n                // generate 16 char client nonce\n                this.generateCnonce = function() {\n                        var characters = 'abcdef0123456789';\n                        var token = '';\n                        for (var i = 0; i < 16; i++) {\n                                var randNum = Math.round(Math.random() * characters.length);\n                                token += characters.substr(randNum, 1);\n                        }\n                        return token;\n                }\n                this.abort = function() {\n                        self.log('[digestAuthRequest] Aborted request to '+url);\n                        if (self.firstRequest != null) {\n                                if (self.firstRequest.readyState != 4) self.firstRequest.abort();\n                        }\n                        if (self.authenticatedRequest != null) {\n                                if (self.authenticatedRequest.readyState != 4) self.authenticatedRequest.abort();\n                        }\n                }\n                this.isJson = function(str) {\n                    try {\n                        JSON.parse(str);\n                    } catch (e) {\n                        return false;\n                    }\n                    return true;\n                }\n                this.log = function(str) {\n                        if (self.loggingOn) {\n                                console.log('[digestAuthRequest] '+str);\n                        }\n                }\n                this.version = function() { return '0.6.1' }\n        }\n}));\n"]}