http2-proxy
Advanced tools
Comparing version 5.0.34 to 5.0.35
152
index.js
const net = require('net') | ||
const http = require('http') | ||
const https = require('https') | ||
const compat = require('./compat') | ||
@@ -29,99 +28,9 @@ const CONNECTION = 'connection' | ||
module.exports = proxy | ||
module.exports = compat(proxy) | ||
proxy.ws = function ws (req, socket, head, options, callback) { | ||
const promise = compat({ req, socket, head }, options) | ||
if (!callback) { | ||
return promise | ||
} | ||
// Legacy compat... | ||
promise | ||
.then(() => callback(null, req, socket, head)) | ||
.catch(err => callback(err, req, socket, head)) | ||
} | ||
proxy.web = function web (req, res, options, callback) { | ||
const promise = compat({ req, res }, options) | ||
if (!callback) { | ||
return promise | ||
} | ||
// Legacy compat... | ||
promise | ||
.then(() => callback(null, req, res)) | ||
.catch(err => callback(err, req, res)) | ||
} | ||
async function compat (ctx, options) { | ||
const { req, res } = ctx | ||
const { | ||
hostname, | ||
port, | ||
protocol, | ||
timeout, | ||
proxyTimeout, | ||
proxyName, | ||
onReq, | ||
onRes | ||
} = options | ||
// Legacy compat... | ||
if (timeout != null) { | ||
req.setTimeout(timeout) | ||
} | ||
await proxy( | ||
{ ...ctx, proxyName }, | ||
async ureq => { | ||
ureq.hostname = hostname | ||
ureq.port = port | ||
ureq.timeout = proxyTimeout | ||
if (onReq) { | ||
if (onReq.length <= 2) { | ||
return onReq(req, ureq) | ||
} else { | ||
// Legacy compat... | ||
return new Promise((resolve, reject) => { | ||
const promiseOrReq = onReq(req, ureq, (err, val) => err ? reject(err) : resolve(val)) | ||
if (promiseOrReq) { | ||
if (promiseOrReq.then) { | ||
promiseOrReq.then(resolve).catch(reject) | ||
} else if (promiseOrReq.abort) { | ||
resolve(promiseOrReq) | ||
} else { | ||
throw new Error('onReq must return a promise or a request object') | ||
} | ||
} | ||
}) | ||
} | ||
} else { | ||
let agent | ||
if (protocol == null || /^(http|ws):?$/.test(protocol)) { | ||
agent = http | ||
} else if (/^(http|ws)s:?$/.test(protocol)) { | ||
agent = https | ||
} else { | ||
throw new HttpError(`invalid protocol`, null, 500) | ||
} | ||
return agent.request(ureq) | ||
} | ||
}, | ||
onRes ? async (proxyRes, headers) => { | ||
proxyRes.headers = headers | ||
if (onRes.length <= 3) { | ||
return onRes(req, res, proxyRes) | ||
} else { | ||
// Legacy compat... | ||
return new Promise((resolve, reject) => { | ||
const promise = onRes(req, res, proxyRes, (err, val) => err ? reject(err) : resolve(val)) | ||
if (promise && promise.then) { | ||
promise.then(resolve).catch(reject) | ||
} | ||
}) | ||
} | ||
} : null | ||
) | ||
} | ||
async function proxy ({ req, socket, res = socket, head, proxyName }, onReq, onRes) { | ||
async function proxy ( | ||
{ req, socket, res = socket, head, proxyName }, | ||
onReq, | ||
onRes | ||
) { | ||
if (req.aborted) { | ||
@@ -169,3 +78,3 @@ return | ||
const promise = new Promise((resolve, reject) => { | ||
callback = err => err ? reject(err) : resolve() | ||
callback = err => (err ? reject(err) : resolve()) | ||
}) | ||
@@ -253,4 +162,2 @@ | ||
.off('error', onComplete) | ||
.off('data', onRequestData) | ||
.off('end', onRequestEnd) | ||
@@ -266,2 +173,4 @@ if (proxySocket) { | ||
if (proxyReq) { | ||
req.unpipe(proxyReq) | ||
if (proxyReq.abort) { | ||
@@ -279,25 +188,5 @@ proxyReq.abort() | ||
this[kConnected] = true | ||
this[kReq] | ||
.on('data', onRequestData) | ||
.on('end', onRequestEnd) | ||
this | ||
.on('drain', onProxyRequestDrain) | ||
this[kReq].pipe(this) | ||
} | ||
function onRequestData (buf) { | ||
if (!this[kProxyReq].write(buf)) { | ||
this.pause() | ||
} | ||
} | ||
function onRequestEnd () { | ||
this[kProxyReq].end() | ||
} | ||
function onProxyRequestDrain () { | ||
this[kReq].resume() | ||
} | ||
function onProxyReqError (err) { | ||
@@ -320,5 +209,3 @@ err.statusCode = this[kConnected] ? 502 : 503 | ||
proxyRes | ||
.on('aborted', onProxyResAborted) | ||
.on('error', onProxyResError) | ||
proxyRes.on('aborted', onProxyResAborted).on('error', onProxyResError) | ||
@@ -333,3 +220,8 @@ if (this[kOnRes]) { | ||
if (!proxyRes.upgrade) { | ||
res.write(createHttpHeader(`HTTP/${proxyRes.httpVersion} ${proxyRes.statusCode} ${proxyRes.statusMessage}`, proxyRes.headers)) | ||
res.write( | ||
createHttpHeader( | ||
`HTTP/${proxyRes.httpVersion} ${proxyRes.statusCode} ${proxyRes.statusMessage}`, | ||
proxyRes.headers | ||
) | ||
) | ||
proxyRes.pipe(res) | ||
@@ -342,5 +234,3 @@ } | ||
} | ||
proxyRes | ||
.on('end', onProxyResEnd) | ||
.pipe(res) | ||
proxyRes.on('end', onProxyResEnd).pipe(res) | ||
} | ||
@@ -361,3 +251,5 @@ } | ||
res.write(createHttpHeader('HTTP/1.1 101 Switching Protocols', proxyRes.headers)) | ||
res.write( | ||
createHttpHeader('HTTP/1.1 101 Switching Protocols', proxyRes.headers) | ||
) | ||
@@ -364,0 +256,0 @@ proxySocket |
{ | ||
"name": "http2-proxy", | ||
"version": "5.0.34", | ||
"version": "5.0.35", | ||
"scripts": { | ||
"dev": "nodemon --inspect=9308 src" | ||
"test": "jest", | ||
"lint": "eslint .", | ||
"format": "prettier --write *.js && eslint --fix *.js" | ||
}, | ||
@@ -16,6 +18,32 @@ "main": "index.js", | ||
], | ||
"eslintConfig": { | ||
"extends": [ | ||
"standard" | ||
], | ||
"overrides": [ | ||
{ | ||
"files": [ | ||
"*.test.js" | ||
], | ||
"env": { | ||
"jest": true | ||
}, | ||
"plugins": [ | ||
"jest" | ||
] | ||
} | ||
], | ||
"parser": "babel-eslint" | ||
}, | ||
"devDependencies": { | ||
"babel-eslint": "^10.0.2", | ||
"eslint": "^6.1.0", | ||
"eslint-config-standard": "^13.0.1", | ||
"eslint-plugin-jest": "^22.14.1", | ||
"eslint-plugin-node": "^9.1.0", | ||
"eslint-plugin-promise": "^4.2.1", | ||
"eslint-plugin-standard": "^4.0.0", | ||
"husky": "^3.0.0", | ||
"nodemon": "^1.17.3", | ||
"standard": "^13.1.0", | ||
"jest": "^24.9.0", | ||
"prettier": "^1.18.2", | ||
"validate-commit-msg": "^2.14.0" | ||
@@ -26,5 +54,8 @@ }, | ||
"commit-msg": "validate-commit-msg", | ||
"pre-commit": "standard" | ||
"pre-commit": "files=`git diff --cached --diff-filter=d --name-only | grep '\\.js$' || true` && ( [ -z \"$files\" ] || eslint --format=unix $files ) && yarn test" | ||
} | ||
}, | ||
"dependencies": { | ||
"eslint-plugin-import": "^2.18.2" | ||
} | ||
} |
11
537
26705
1
11
7
+ Addedeslint-plugin-import@^2.18.2
+ Added@eslint-community/eslint-utils@4.4.0(transitive)
+ Added@eslint-community/regexpp@4.10.1(transitive)
+ Added@eslint/eslintrc@2.1.4(transitive)
+ Added@eslint/js@8.57.0(transitive)
+ Added@humanwhocodes/config-array@0.11.14(transitive)
+ Added@humanwhocodes/module-importer@1.0.1(transitive)
+ Added@humanwhocodes/object-schema@2.0.3(transitive)
+ Added@nodelib/fs.scandir@2.1.5(transitive)
+ Added@nodelib/fs.stat@2.0.5(transitive)
+ Added@nodelib/fs.walk@1.2.8(transitive)
+ Added@types/json5@0.0.29(transitive)
+ Added@ungap/structured-clone@1.2.0(transitive)
+ Addedacorn@8.11.3(transitive)
+ Addedacorn-jsx@5.3.2(transitive)
+ Addedajv@6.12.6(transitive)
+ Addedansi-regex@5.0.1(transitive)
+ Addedansi-styles@4.3.0(transitive)
+ Addedargparse@2.0.1(transitive)
+ Addedarray-buffer-byte-length@1.0.1(transitive)
+ Addedarray-includes@3.1.8(transitive)
+ Addedarray.prototype.findlastindex@1.2.5(transitive)
+ Addedarray.prototype.flat@1.3.2(transitive)
+ Addedarray.prototype.flatmap@1.3.2(transitive)
+ Addedarraybuffer.prototype.slice@1.0.3(transitive)
+ Addedavailable-typed-arrays@1.0.7(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbrace-expansion@1.1.11(transitive)
+ Addedcall-bind@1.0.7(transitive)
+ Addedcallsites@3.1.0(transitive)
+ Addedchalk@4.1.2(transitive)
+ Addedcolor-convert@2.0.1(transitive)
+ Addedcolor-name@1.1.4(transitive)
+ Addedconcat-map@0.0.1(transitive)
+ Addedcross-spawn@7.0.3(transitive)
+ Addeddata-view-buffer@1.0.1(transitive)
+ Addeddata-view-byte-length@1.0.1(transitive)
+ Addeddata-view-byte-offset@1.0.0(transitive)
+ Addeddebug@3.2.74.3.5(transitive)
+ Addeddeep-is@0.1.4(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddefine-properties@1.2.1(transitive)
+ Addeddoctrine@2.1.03.0.0(transitive)
+ Addedes-abstract@1.23.3(transitive)
+ Addedes-define-property@1.0.0(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedes-object-atoms@1.0.0(transitive)
+ Addedes-set-tostringtag@2.0.3(transitive)
+ Addedes-shim-unscopables@1.0.2(transitive)
+ Addedes-to-primitive@1.2.1(transitive)
+ Addedescape-string-regexp@4.0.0(transitive)
+ Addedeslint@8.57.0(transitive)
+ Addedeslint-import-resolver-node@0.3.9(transitive)
+ Addedeslint-module-utils@2.8.1(transitive)
+ Addedeslint-plugin-import@2.29.1(transitive)
+ Addedeslint-scope@7.2.2(transitive)
+ Addedeslint-visitor-keys@3.4.3(transitive)
+ Addedespree@9.6.1(transitive)
+ Addedesquery@1.5.0(transitive)
+ Addedesrecurse@4.3.0(transitive)
+ Addedestraverse@5.3.0(transitive)
+ Addedesutils@2.0.3(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedfast-levenshtein@2.0.6(transitive)
+ Addedfastq@1.17.1(transitive)
+ Addedfile-entry-cache@6.0.1(transitive)
+ Addedfind-up@5.0.0(transitive)
+ Addedflat-cache@3.2.0(transitive)
+ Addedflatted@3.3.1(transitive)
+ Addedfor-each@0.3.3(transitive)
+ Addedfs.realpath@1.0.0(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedfunction.prototype.name@1.1.6(transitive)
+ Addedfunctions-have-names@1.2.3(transitive)
+ Addedget-intrinsic@1.2.4(transitive)
+ Addedget-symbol-description@1.0.2(transitive)
+ Addedglob@7.2.3(transitive)
+ Addedglob-parent@6.0.2(transitive)
+ Addedglobals@13.24.0(transitive)
+ Addedglobalthis@1.0.4(transitive)
+ Addedgopd@1.0.1(transitive)
+ Addedgraphemer@1.4.0(transitive)
+ Addedhas-bigints@1.0.2(transitive)
+ Addedhas-flag@4.0.0(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.0.3(transitive)
+ Addedhas-symbols@1.0.3(transitive)
+ Addedhas-tostringtag@1.0.2(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedignore@5.3.1(transitive)
+ Addedimport-fresh@3.3.0(transitive)
+ Addedimurmurhash@0.1.4(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedinternal-slot@1.0.7(transitive)
+ Addedis-array-buffer@3.0.4(transitive)
+ Addedis-bigint@1.0.4(transitive)
+ Addedis-boolean-object@1.1.2(transitive)
+ Addedis-callable@1.2.7(transitive)
+ Addedis-core-module@2.13.1(transitive)
+ Addedis-data-view@1.0.1(transitive)
+ Addedis-date-object@1.0.5(transitive)
+ Addedis-extglob@2.1.1(transitive)
+ Addedis-glob@4.0.3(transitive)
+ Addedis-negative-zero@2.0.3(transitive)
+ Addedis-number-object@1.0.7(transitive)
+ Addedis-path-inside@3.0.3(transitive)
+ Addedis-regex@1.1.4(transitive)
+ Addedis-shared-array-buffer@1.0.3(transitive)
+ Addedis-string@1.0.7(transitive)
+ Addedis-symbol@1.0.4(transitive)
+ Addedis-typed-array@1.1.13(transitive)
+ Addedis-weakref@1.0.2(transitive)
+ Addedisarray@2.0.5(transitive)
+ Addedisexe@2.0.0(transitive)
+ Addedjs-yaml@4.1.0(transitive)
+ Addedjson-buffer@3.0.1(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stable-stringify-without-jsonify@1.0.1(transitive)
+ Addedjson5@1.0.2(transitive)
+ Addedkeyv@4.5.4(transitive)
+ Addedlevn@0.4.1(transitive)
+ Addedlocate-path@6.0.0(transitive)
+ Addedlodash.merge@4.6.2(transitive)
+ Addedminimatch@3.1.2(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedms@2.1.22.1.3(transitive)
+ Addednatural-compare@1.4.0(transitive)
+ Addedobject-inspect@1.13.1(transitive)
+ Addedobject-keys@1.1.1(transitive)
+ Addedobject.assign@4.1.5(transitive)
+ Addedobject.fromentries@2.0.8(transitive)
+ Addedobject.groupby@1.0.3(transitive)
+ Addedobject.values@1.2.0(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedoptionator@0.9.4(transitive)
+ Addedp-limit@3.1.0(transitive)
+ Addedp-locate@5.0.0(transitive)
+ Addedparent-module@1.0.1(transitive)
+ Addedpath-exists@4.0.0(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedpath-key@3.1.1(transitive)
+ Addedpath-parse@1.0.7(transitive)
+ Addedpossible-typed-array-names@1.0.0(transitive)
+ Addedprelude-ls@1.2.1(transitive)
+ Addedpunycode@2.3.1(transitive)
+ Addedqueue-microtask@1.2.3(transitive)
+ Addedregexp.prototype.flags@1.5.2(transitive)
+ Addedresolve@1.22.8(transitive)
+ Addedresolve-from@4.0.0(transitive)
+ Addedreusify@1.0.4(transitive)
+ Addedrimraf@3.0.2(transitive)
+ Addedrun-parallel@1.2.0(transitive)
+ Addedsafe-array-concat@1.1.2(transitive)
+ Addedsafe-regex-test@1.0.3(transitive)
+ Addedsemver@6.3.1(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedset-function-name@2.0.2(transitive)
+ Addedshebang-command@2.0.0(transitive)
+ Addedshebang-regex@3.0.0(transitive)
+ Addedside-channel@1.0.6(transitive)
+ Addedstring.prototype.trim@1.2.9(transitive)
+ Addedstring.prototype.trimend@1.0.8(transitive)
+ Addedstring.prototype.trimstart@1.0.8(transitive)
+ Addedstrip-ansi@6.0.1(transitive)
+ Addedstrip-bom@3.0.0(transitive)
+ Addedstrip-json-comments@3.1.1(transitive)
+ Addedsupports-color@7.2.0(transitive)
+ Addedsupports-preserve-symlinks-flag@1.0.0(transitive)
+ Addedtext-table@0.2.0(transitive)
+ Addedtsconfig-paths@3.15.0(transitive)
+ Addedtype-check@0.4.0(transitive)
+ Addedtype-fest@0.20.2(transitive)
+ Addedtyped-array-buffer@1.0.2(transitive)
+ Addedtyped-array-byte-length@1.0.1(transitive)
+ Addedtyped-array-byte-offset@1.0.2(transitive)
+ Addedtyped-array-length@1.0.6(transitive)
+ Addedunbox-primitive@1.0.2(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addedwhich@2.0.2(transitive)
+ Addedwhich-boxed-primitive@1.0.2(transitive)
+ Addedwhich-typed-array@1.1.15(transitive)
+ Addedword-wrap@1.2.5(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedyocto-queue@0.1.0(transitive)