{"version":3,"sources":["jsdelivr-header.js","/npm/httpx@3.0.1/lib/index.js"],"names":[],"mappings":"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","file":"/npm/httpx@3.0.1/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/httpx@3.0.1/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\n\nimport zlib from 'zlib';\nimport http from 'http';\nimport https from 'https';\nimport { parse, format } from 'url';\nimport debug from 'debug';\n\nconst debugBody = debug('httpx:body');\nconst debugHeader = debug('httpx:header');\n\nconst httpAgent = new http.Agent({ keepAlive: true });\nconst httpsAgent = new https.Agent({ keepAlive: true });\n\nconst TIMEOUT = 3000; // 3s\n\nconst READ_TIMER = Symbol('TIMER::READ_TIMER');\nconst READ_TIME_OUT = Symbol('TIMER::READ_TIME_OUT');\nconst READ_TIMER_START_AT = Symbol('TIMER::READ_TIMER_START_AT');\n\n/**\n * Check the content-encoding header, and auto decompress it.\n * @param {Readable} response http response\n * @returns Readable\n */\nfunction decompress(response) {\n  switch (response.headers['content-encoding']) {\n  // or, just use zlib.createUnzip() to handle both cases\n  case 'gzip':\n    return response.pipe(zlib.createGunzip());\n  case 'deflate':\n    return response.pipe(zlib.createInflate());\n  default:\n    return response;\n  }\n}\n\nvar append = function (err, name, message) {\n  err.name = name + err.name;\n  err.message = `${message}. ${err.message}`;\n  return err;\n};\n\nconst isNumber = function (num) {\n  return num !== null && !isNaN(num);\n};\n\nexport function request(url, opts) {\n  opts || (opts = {});\n\n  const parsed = typeof url === 'string' ? parse(url) : url;\n\n  let readTimeout, connectTimeout;\n  if (isNumber(opts.readTimeout) || isNumber(opts.connectTimeout)) {\n    readTimeout = isNumber(opts.readTimeout) ? Number(opts.readTimeout) : TIMEOUT;\n    connectTimeout = isNumber(opts.connectTimeout) ? Number(opts.connectTimeout) : TIMEOUT;\n  } else if (isNumber(opts.timeout)) {\n    readTimeout = connectTimeout = Number(opts.timeout);\n  } else {\n    readTimeout = connectTimeout = TIMEOUT;\n  }\n\n  const isHttps = parsed.protocol === 'https:';\n  const method = (opts.method || 'GET').toUpperCase();\n  const defaultAgent = isHttps ? httpsAgent : httpAgent;\n  const agent = opts.agent || defaultAgent;\n\n  var options = {\n    host: parsed.hostname || 'localhost',\n    path: parsed.path || '/',\n    method: method,\n    port: parsed.port || (parsed.protocol === 'https:' ? 443 : 80),\n    agent: agent,\n    headers: opts.headers || {},\n    // ssl config\n    key: opts.key || '',\n    cert: opts.cert || '',\n    ca: opts.ca || '',\n    // connect timerout\n    timeout: connectTimeout\n  };\n\n  if (isHttps && typeof opts.rejectUnauthorized !== 'undefined') {\n    options.rejectUnauthorized = opts.rejectUnauthorized;\n  }\n\n  if (opts.compression) {\n    options.headers['accept-encoding'] = 'gzip,deflate';\n  }\n\n  const httplib = isHttps ? https : http;\n\n  if (typeof opts.beforeRequest === 'function') {\n    options = opts.beforeRequest(options);\n  }\n\n  return new Promise((resolve, reject) => {\n    const request = httplib.request(options);\n    const body = opts.data;\n\n    var fulfilled = (response) => {\n      if (debugHeader.enabled) {\n        const requestHeaders = response.req._header;\n        requestHeaders.split('\\r\\n').forEach((line) => {\n          debugHeader('> %s', line);\n        });\n\n        debugHeader('< HTTP/%s %s %s', response.httpVersion, response.statusCode, response.statusMessage);\n        Object.keys(response.headers).forEach((key) => {\n          debugHeader('< %s: %s', key, response.headers[key]);\n        });\n      }\n      resolve(response);\n    };\n\n    var rejected = (err) => {\n      err.message += `${method} ${format(parsed)} failed.`;\n      // clear response timer when error\n      if (request.socket && request.socket[READ_TIMER]) {\n        clearTimeout(request.socket[READ_TIMER]);\n      }\n      reject(err);\n    };\n\n    var abort = (err) => {\n      request.abort();\n      rejected(err);\n    };\n\n    const startResponseTimer = function (socket) {\n      const timer = setTimeout(() => {\n        if (socket[READ_TIMER]) {\n          clearTimeout(socket[READ_TIMER]);\n          socket[READ_TIMER] = null;\n        }\n        var err = new Error();\n        var message = `ReadTimeout(${readTimeout})`;\n        abort(append(err, 'RequestTimeout', message));\n      }, readTimeout);\n      // start read-timer\n      socket[READ_TIME_OUT] = readTimeout;\n      socket[READ_TIMER] = timer;\n      socket[READ_TIMER_START_AT] = Date.now();\n      // don't block the loop\n      timer.unref();\n    };\n\n    // string\n    if (!body || 'string' === typeof body || body instanceof Buffer) {\n      if (debugBody.enabled) {\n        if (!body) {\n          debugBody('<no request body>');\n        } else if ('string' === typeof body) {\n          debugBody(body);\n        } else {\n          debugBody(`Buffer <ignored>, Buffer length: ${body.length}`);\n        }\n      }\n      request.end(body);\n    } else if ('function' === typeof body.pipe) { // stream\n      body.pipe(request);\n      if (debugBody.enabled) {\n        debugBody('<request body is a stream>');\n      }\n      body.once('error', (err) => {\n        abort(append(err, 'HttpX', 'Stream occor error'));\n      });\n    }\n\n    request.on('response', fulfilled);\n    request.on('error', rejected);\n    request.once('socket', function (socket) {\n      // reuse socket\n      if (socket.readyState === 'opening') {\n        socket.once('connect', function () {\n          startResponseTimer(socket);\n        });\n      } else {\n        startResponseTimer(socket);\n      }\n    });\n  });\n}\n\nexport function read(response, encoding) {\n  const readable = decompress(response);\n\n  return new Promise((resolve, reject) => {\n    // node.js 14 use response.client\n    const socket = response.socket || response.client;\n\n    const makeReadTimeoutError = () => {\n      const req = response.req;\n      var err = new Error();\n      err.name = 'RequestTimeoutError';\n      err.message = `ReadTimeout: ${socket[READ_TIME_OUT]}. ${req.method} ${req.path} failed.`;\n      return err;\n    };\n    // check read-timer\n    let readTimer;\n    const oldReadTimer = socket[READ_TIMER];\n    if (!oldReadTimer) {\n      reject(makeReadTimeoutError());\n      return;\n    }\n    const remainTime = socket[READ_TIME_OUT] - (Date.now() - socket[READ_TIMER_START_AT]);\n    clearTimeout(oldReadTimer);\n    if (remainTime <= 0) {\n      reject(makeReadTimeoutError());\n      return;\n    }\n    readTimer = setTimeout(function () {\n      reject(makeReadTimeoutError());\n    }, remainTime);\n\n    // start reading data\n    var onError, onData, onEnd;\n    var cleanup = function () {\n      // cleanup\n      readable.removeListener('error', onError);\n      readable.removeListener('data', onData);\n      readable.removeListener('end', onEnd);\n      // clear read timer\n      if (readTimer) {\n        clearTimeout(readTimer);\n      }\n    };\n\n    const bufs = [];\n    var size = 0;\n\n    onData = function (buf) {\n      bufs.push(buf);\n      size += buf.length;\n    };\n\n    onError = function (err) {\n      cleanup();\n      reject(err);\n    };\n\n    onEnd = function () {\n      cleanup();\n      var buff = Buffer.concat(bufs, size);\n\n      debugBody('');\n      if (encoding) {\n        const result = buff.toString(encoding);\n        debugBody(result);\n        return resolve(result);\n      }\n\n      if (debugBody.enabled) {\n        debugBody(buff.toString());\n      }\n      resolve(buff);\n    };\n\n    readable.on('error', onError);\n    readable.on('data', onData);\n    readable.on('end', onEnd);\n  });\n}\n\nfunction readyToRead(readable) {\n  return new Promise((resolve, reject) => {\n    var onReadable, onEnd, onError;\n    var cleanup = function () {\n      // cleanup\n      readable.removeListener('error', onError);\n      readable.removeListener('end', onEnd);\n      readable.removeListener('readable', onReadable);\n    };\n\n    onReadable = function () {\n      cleanup();\n      resolve(false);\n    };\n\n    onEnd = function () {\n      cleanup();\n      resolve(true);\n    };\n\n    onError = function (err) {\n      cleanup();\n      reject(err);\n    };\n\n    readable.once('readable', onReadable);\n    readable.once('end', onEnd);\n    readable.once('error', onError);\n  });\n}\n\nexport class Event {\n  constructor(id, event, data, retry) {\n    this.id = id;\n    this.event = event;\n    this.data = data;\n    this.retry = retry;\n  }\n}\n\nconst DATA_PREFIX = 'data:';\nconst EVENT_PREFIX = 'event:';\nconst ID_PREFIX = 'id:';\nconst RETRY_PREFIX = 'retry:';\n\nfunction isDigitsOnly(str) {\n  for (let i = 0; i < str.length; i++) {\n    const c = str.charAt(i);\n    if (c < '0' || c > '9') {\n      return false;\n    }\n  }\n  return str.length > 0;\n}\n\nfunction tryGetEvents(head, chunk) {\n  const all = head + chunk;\n  let start = 0;\n  const events = [];\n  for (let i = 0; i < all.length - 1; i++) {\n    const c = all[i];\n    const c2 = all[i + 1];\n    if (c === '\\n' && c2 === '\\n') {\n      const part = all.substring(start, i);\n      const lines = part.split('\\n');\n      const event = new Event();\n      lines.forEach((line) => {\n        if (line.startsWith(DATA_PREFIX)) {\n          event.data = line.substring(DATA_PREFIX.length).trim();\n        } else if (line.startsWith(EVENT_PREFIX)) {\n          event.event = line.substring(EVENT_PREFIX.length).trim();\n        } else if (line.startsWith(ID_PREFIX)) {\n          event.id = line.substring(ID_PREFIX.length).trim();\n        } else if (line.startsWith(RETRY_PREFIX)) {\n          const retry = line.substring(RETRY_PREFIX.length).trim();\n          if (isDigitsOnly(retry)) {\n            event.retry = parseInt(retry, 10);\n          }\n        } else if (line.startsWith(':')) {\n          // ignore the line\n        }\n      });\n      events.push(event);\n      start = i + 2;\n    }\n  }\n\n  const rest = all.substring(start);\n  return [events, rest];\n}\n\n/**\n * consume response and parse to event stream\n * @param {ReadableStream} response \n * @returns AsyncGenerator<Event, void, unknown>\n */\nexport async function* readAsSSE(response) {\n  const readable = decompress(response);\n\n  const socket = response.socket || response.client;\n  clearTimeout(socket[READ_TIMER]);\n\n  let rest = '';\n\n  while (true) {\n    const ended = await readyToRead(readable);\n    if (ended) {\n      return;\n    }\n\n    let chunk;\n    while (null !== (chunk = readable.read())) {\n      const [ events, remain ] = tryGetEvents(rest, chunk.toString());\n      rest = remain;\n      if (events && events.length > 0) {\n        for (const event of events) {\n          yield event;\n        }\n      }\n    }\n  }\n}"]}