{"version":3,"sources":["jsdelivr-header.js","/npm/@duosecurity/duo_api@1.5.0/lib/main.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,IAAI,QAAU,QAAQ,aAClB,MAAQ,QAAQ,SAChB,YAAc,QAAQ,eACtB,UAAY,QAAQ,eAExB,MAAM,iBAAmB,QAAQ,mBAAmB,QAC9C,oBAAsB,EACtB,oBAAsB,EAE5B,SAAS,OAAQ,EAAM,EAAM,EAAM,EAHP,GAI1B,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,WAAa,CACpB,CA8CA,SAAS,sBAAuB,EAAS,EAAM,EAAU,EAAW,GAClE,IAAI,EAAM,MAAM,QAAQ,GAAS,SAAU,GACzC,GAAI,EAAI,aAAe,UAAU,yBAC/B,GAAY,UAAU,uBADxB,CAEE,IAAI,EAAe,KAAK,MAAsB,IAAhB,KAAK,UACnC,YAAW,WACT,sBAAsB,EAAS,EAAM,EAAU,EAAW,UAAU,gBACtE,GAAc,IAAX,EAAkB,EAEvB,KAPA,CASA,IAAI,EAAS,GACb,EAAI,YAAY,QAChB,EAAI,GAAG,QAAQ,SAAU,GACvB,GAAkB,CACpB,IAEA,EAAI,GAAG,OAAO,SAAU,GACtB,EAAS,EACX,GAVA,CAWF,IACA,EAAI,GAAG,SAAU,IACf,EAAS,KAAK,UAAU,CAAE,KAAM,QAAS,QAAS,EAAI,UAAU,IAElE,EAAI,MAAM,GACV,EAAI,KACN,CAtEA,OAAO,UAAU,QAAU,SAAU,EAAQ,EAAM,EAAQ,GACzD,IAAI,GAAO,IAAI,MAAO,cAClB,EAAU,CACZ,KAAQ,EACR,KAAQ,KAAK,KACb,aAAc,kBAAkB,oBAE9B,EAAO,GACP,EAAoB,CAAC,OAAQ,MAAO,SAAS,SAAS,GACtD,EAAK,YAAY,UAAU,GAlBL,IAoBtB,KAAK,YACH,IACF,EAAO,KAAK,UAAU,GACtB,EAAS,CAAC,GAEZ,EAAuB,cAAI,QAAQ,OACjC,KAAK,KAAM,KAAK,KAAM,EAAQ,KAAK,KAAM,EAAM,EAAQ,EAAM,IAE/D,EAAuB,cAAI,QAAQ,KACjC,KAAK,KAAM,KAAK,KAAM,EAAQ,KAAK,KAAM,EAAM,EAAQ,GAGvD,EAhCsB,IAiCpB,KAAK,WACP,EAAQ,gBAAkB,oBAE1B,EAAQ,gBAAkB,oCAC1B,EAAO,GAEA,IACT,GAAQ,IAAM,GAUhB,sBAPgB,CACd,KAAQ,KAAK,KACb,OAAU,EACV,KAAQ,EACR,QAAW,EACX,GAAM,UAAU,iBAEa,EAAM,EACvC,EA8BA,OAAO,UAAU,YAAc,SAAU,EAAQ,EAAM,EAAQ,GAC7D,KAAK,QAAQ,EAAQ,EAAM,GAAQ,SAAU,GAC3C,EAAS,KAAK,MAAM,GACtB,GACF,EAEA,OAAO,QAAU,CACf,OAAU,OACV,oBA1F0B,EA2F1B,oBA1F0B","file":"/npm/@duosecurity/duo_api@1.5.0/lib/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@duosecurity/duo_api@1.5.0/lib/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var duo_sig = require('./duo_sig')\nvar https = require('https')\nvar querystring = require('querystring')\nvar constants = require('./constants')\n\nconst _PACKAGE_VERSION = require('../package.json').version\nconst SIGNATURE_VERSION_2 = 2\nconst SIGNATURE_VERSION_5 = 5\n\nfunction Client (ikey, skey, host, sigVersion = SIGNATURE_VERSION_2) {\n  this.ikey = ikey\n  this.skey = skey\n  this.host = host\n  this.sigVersion = sigVersion\n}\n\nClient.prototype.apiCall = function (method, path, params, callback) {\n  var date = new Date().toUTCString()\n  var headers = {\n    'Date': date,\n    'Host': this.host,\n    'User-Agent': `duo_api_nodejs/${_PACKAGE_VERSION}`\n  }\n  var body = ''\n  var params_go_in_body = ['POST', 'PUT', 'PATCH'].includes(method)\n  var qs = querystring.stringify(params)\n\n  if (this.sigVersion === SIGNATURE_VERSION_5) {\n    if (params_go_in_body) {\n      body = JSON.stringify(params)\n      params = {}\n    }\n    headers['Authorization'] = duo_sig.signV5(\n      this.ikey, this.skey, method, this.host, path, params, date, body)\n  } else {\n    headers['Authorization'] = duo_sig.sign(\n      this.ikey, this.skey, method, this.host, path, params, date)\n  }\n\n  if (params_go_in_body) {\n    if (this.sigVersion === SIGNATURE_VERSION_5) {\n      headers['Content-Type'] = 'application/json'\n    } else {\n      headers['Content-Type'] = 'application/x-www-form-urlencoded'\n      body = qs\n    }\n  } else if (qs) {\n    path += '?' + qs\n  }\n\n  const options = {\n    'host': this.host,\n    'method': method,\n    'path': path,\n    'headers': headers,\n    'ca': constants.DUO_PINNED_CERT\n  }\n  _request_with_backoff(options, body, callback)\n}\n\nfunction _request_with_backoff (options, body, callback, waitSecs = 1) {\n  var req = https.request(options, function (res) {\n    if (res.statusCode === constants._RATE_LIMITED_RESP_CODE &&\n      waitSecs <= constants._MAX_BACKOFF_WAIT_SECS) {\n      var randomOffset = Math.floor(Math.random() * 1000)\n      setTimeout(function () {\n        _request_with_backoff(options, body, callback, waitSecs * constants._BACKOFF_FACTOR)\n      }, waitSecs * 1000 + randomOffset)\n      return\n    }\n\n    var buffer = ''\n    res.setEncoding('utf8')\n    res.on('data', function (data) {\n      buffer = buffer + data\n    })\n\n    res.on('end', function (data) {\n      callback(buffer)\n    })\n  })\n  req.on('error', (err) => {\n    callback(JSON.stringify({ stat: 'ERROR', message: err.message }))\n  })\n  req.write(body)\n  req.end()\n}\n\nClient.prototype.jsonApiCall = function (method, path, params, callback) {\n  this.apiCall(method, path, params, function (data) {\n    callback(JSON.parse(data))\n  })\n}\n\nmodule.exports = {\n  'Client': Client,\n  'SIGNATURE_VERSION_2': SIGNATURE_VERSION_2,\n  'SIGNATURE_VERSION_5': SIGNATURE_VERSION_5\n}\n"]}