| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | Object.defineProperty(exports, '__esModule', { value: true });const utils = require('@sentry/utils');function debug(...args) {  utils.logger.log('[https-proxy-agent:parse-proxy-response]', ...args);}function parseProxyResponse(socket) {  return new Promise((resolve, reject) => {    // we need to buffer any HTTP traffic that happens with the proxy before we get    // the CONNECT response, so that if the response is anything other than an "200"    // response code, then we can re-play the "data" events on the socket once the    // HTTP parser is hooked up...    let buffersLength = 0;    const buffers = [];    function read() {      const b = socket.read();      if (b) ondata(b);      else socket.once('readable', read);    }    function cleanup() {      socket.removeListener('end', onend);      socket.removeListener('error', onerror);      socket.removeListener('readable', read);    }    function onend() {      cleanup();      debug('onend');      reject(new Error('Proxy connection ended before receiving CONNECT response'));    }    function onerror(err) {      cleanup();      debug('onerror %o', err);      reject(err);    }    function ondata(b) {      buffers.push(b);      buffersLength += b.length;      const buffered = Buffer.concat(buffers, buffersLength);      const endOfHeaders = buffered.indexOf('\r\n\r\n');      if (endOfHeaders === -1) {        // keep buffering        debug('have not received end of HTTP headers yet...');        read();        return;      }      const headerParts = buffered.slice(0, endOfHeaders).toString('ascii').split('\r\n');      const firstLine = headerParts.shift();      if (!firstLine) {        socket.destroy();        return reject(new Error('No header received from proxy CONNECT response'));      }      const firstLineParts = firstLine.split(' ');      const statusCode = +firstLineParts[1];      const statusText = firstLineParts.slice(2).join(' ');      const headers = {};      for (const header of headerParts) {        if (!header) continue;        const firstColon = header.indexOf(':');        if (firstColon === -1) {          socket.destroy();          return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`));        }        const key = header.slice(0, firstColon).toLowerCase();        const value = header.slice(firstColon + 1).trimStart();        const current = headers[key];        if (typeof current === 'string') {          headers[key] = [current, value];        } else if (Array.isArray(current)) {          current.push(value);        } else {          headers[key] = value;        }      }      debug('got proxy server response: %o %o', firstLine, headers);      cleanup();      resolve({        connect: {          statusCode,          statusText,          headers,        },        buffered,      });    }    socket.on('error', onerror);    socket.on('end', onend);    read();  });}exports.parseProxyResponse = parseProxyResponse;//# sourceMappingURL=parse-proxy-response.js.map
 |