{"version":3,"sources":["jsdelivr-header.js","/npm/proxy-test-server@1.0.0/lib/server.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,IAAI,IAAM,QAAQ,OACd,aAAe,QAAQ,UAAU,aACjC,KAAO,QAAQ,QAInB,SAAS,mBACL,aAAa,KAAK,MAClB,KAAK,OAAS,IAAI,aAAa,KAAK,WAAW,KAAK,OACpD,KAAK,OAAO,GAAG,QAAS,KAAK,SAAS,KAAK,MAC/C,CANA,OAAO,QAAU,iBAOjB,KAAK,SAAS,iBAAkB,cAGhC,CAAC,SAAU,SAAS,SAAQ,SAAU,GAClC,iBAAiB,UAAU,GAAU,WACjC,IAAI,EAAO,MAAM,UAAU,MAAM,KAAK,WACtC,KAAK,OAAO,GAAQ,MAAM,KAAK,OAAQ,EAC3C,CACJ,IAEA,iBAAiB,UAAU,SAAW,SAAU,GAC5C,KAAK,KAAK,QAAS,EACvB,EAEA,iBAAiB,UAAU,WAAa,SAAU,GAC9C,IAAI,GAAO,EACP,EAAU,GACV,EAAO,KAEP,EAAc,YAAW,WACzB,EAAO,MAAM,sCACb,GAAO,CACX,GAAG,KAEC,EAAgB,SAAU,GAC1B,QAAQ,IAAI,EAAI,OAChB,aAAa,EACjB,EAEA,EAAO,GAAG,SAAS,WACf,GAAO,EACP,aAAa,EACjB,IAEA,IAAI,EAAmB,WASnB,IARA,IAAI,EACA,EACA,EACA,EACA,EACA,EACA,GAEI,GAAoC,QAA3B,EAAQ,EAAO,SAG5B,GAFA,EAAM,EAAM,SAAS,UAEhB,GADL,GAAW,GACU,MAAM,YAAc,CAarC,GAZA,EAAY,EAAQ,OAAO,EAAM,MAAQ,EAAM,GAAG,QAClD,EAAU,EAAQ,OAAO,EAAG,EAAM,OAE9B,GACA,EAAO,QAAQ,IAAI,OAAO,EAAW,WAGzC,GAAO,EACP,aAAa,GACb,EAAO,eAAe,WAAY,KAClC,EAAQ,EAAQ,MAAM,QAAQ,QAAQ,MAAM,0CAIxC,OADA,EAAO,MAAM,uCACN,EAAO,MAQlB,GALI,GADA,EAAO,EAAM,GAAG,QAAQ,UAAW,IAAI,QAAQ,YAAa,KAChD,MAAM,KAClB,EAAO,OAAO,EAAK,QAAU,KAC7B,EAAO,EAAK,KAAK,QAGP,EAEV,OADA,EAAO,MAAM,uCACN,EAAO,OAGlB,EAAM,IAAI,iBAAiB,EAAM,GAAM,WACnC,EAAO,KAAK,GACZ,EAAI,KAAK,GAET,EAAO,eAAe,QAAS,GAC/B,EAAO,GAAG,SAAS,WACf,EAAI,KACR,IACA,EAAO,MAAM,2BAEb,EAAK,KAAK,UAAW,EAAM,EAAM,EACrC,KAEI,GAAG,SAAS,SAAU,GACtB,EAAO,KAAK,QAAS,EACzB,IAEA,KACJ,CAGR,EAEA,EAAO,GAAG,WAAY,GACtB,EAAO,GAAG,QAAS,EACvB","file":"/npm/proxy-test-server@1.0.0/lib/server.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/proxy-test-server@1.0.0/lib/server.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nvar net = require('net');\nvar EventEmitter = require('events').EventEmitter;\nvar util = require('util');\n\nmodule.exports = HttpConnectProxy;\n\nfunction HttpConnectProxy() {\n    EventEmitter.call(this);\n    this.server = net.createServer(this._onConnect.bind(this));\n    this.server.on('error', this._onError.bind(this));\n}\nutil.inherits(HttpConnectProxy, EventEmitter);\n\n// forward net emthods\n['listen', 'close'].forEach(function (method) {\n    HttpConnectProxy.prototype[method] = function () {\n        var args = Array.prototype.slice.call(arguments);\n        this.server[method].apply(this.server, args);\n    };\n});\n\nHttpConnectProxy.prototype._onError = function (err) {\n    this.emit('error', err);\n};\n\nHttpConnectProxy.prototype._onConnect = function (socket) {\n    var done = false;\n    var headers = '';\n    var that = this;\n\n    var waitTimeout = setTimeout(function () {\n        socket.write('HTTP/1.1 500 Proxy Timeout\\r\\n\\r\\n');\n        done = true;\n    }, 10000);\n\n    var onSocketError = function (err) {\n        console.log(err.stack);\n        clearTimeout(waitTimeout);\n    };\n\n    socket.on('close', function () {\n        done = true;\n        clearTimeout(waitTimeout);\n    });\n\n    var onSocketReadable = function () {\n        var chunk;\n        var str;\n        var match;\n        var remainder;\n        var host;\n        var port;\n        var out;\n\n        while (!done && (chunk = socket.read()) !== null) {\n            str = chunk.toString('binary');\n            headers += str;\n            if ((match = headers.match(/\\r\\n\\r\\n/))) {\n                remainder = headers.substr(match.index + match[0].length);\n                headers = headers.substr(0, match.index);\n\n                if (remainder) {\n                    socket.unshift(new Buffer(remainder, 'binary'));\n                }\n\n                done = true;\n                clearTimeout(waitTimeout);\n                socket.removeListener('readable', onSocketReadable);\n                match = headers.split('\\r\\n').shift().match(/^CONNECT\\s+([^\\s]+)\\s+HTTP\\/[\\d\\.]+$/i);\n\n                if (!match) {\n                    socket.write('HTTP/1.1 500 Invalid Method\\r\\n\\r\\n');\n                    return socket.end();\n                } else {\n                    host = match[1].replace(/[\\[\\]]/g, '').replace(/^IPv\\d\\:/i, '');\n                    host = host.split(':');\n                    port = Number(host.pop()) || 80;\n                    host = host.join(':');\n                }\n\n                if (!host || !port) {\n                    socket.write('HTTP/1.1 500 Invalid Target\\r\\n\\r\\n');\n                    return socket.end();\n                }\n\n                out = net.createConnection(port, host, function () {\n                    socket.pipe(out);\n                    out.pipe(socket);\n\n                    socket.removeListener('error', onSocketError);\n                    socket.on('error', function ( /*err*/ ) {\n                        out.end();\n                    });\n                    socket.write('HTTP/1.1 200 OK\\r\\n\\r\\n');\n\n                    that.emit('connect', port, host, socket);\n                });\n\n                out.on('error', function (err) {\n                    socket.emit('error', err);\n                });\n\n                break;\n            }\n\n        }\n    };\n\n    socket.on('readable', onSocketReadable);\n    socket.on('error', onSocketError);\n};\n"]}