/opt/canhelp/node_modules/next/dist/server/lib/router-utils
NameSizeModeActions
block-cross-site.d.ts2770644editdlrm
block-cross-site.js32420644editdlrm
block-cross-site.js.map52200644editdlrm
build-data-route.d.ts2360644editdlrm
build-data-route.js19010644editdlrm
build-data-route.js.map26760644editdlrm
build-prefetch-segment-data-route.d.ts7880644editdlrm
build-prefetch-segment-data-route.js26130644editdlrm
build-prefetch-segment-data-route.js.map37020644editdlrm
decode-path-params.d.ts3450644editdlrm
decode-path-params.js14810644editdlrm
decode-path-params.js.map15700644editdlrm
filesystem.d.ts27200644editdlrm
filesystem.js271530644editdlrm
filesystem.js.map376760644editdlrm
instrumentation-globals.external.d.ts5040644editdlrm
instrumentation-globals.external.js36020644editdlrm
instrumentation-globals.external.js.map47580644editdlrm
instrumentation-node-extensions.d.ts1940644editdlrm
instrumentation-node-extensions.js50300644editdlrm
instrumentation-node-extensions.js.map71780644editdlrm
is-postpone.d.ts570644editdlrm
is-postpone.js4360644editdlrm
is-postpone.js.map5970644editdlrm
proxy-request.d.ts3700644editdlrm
proxy-request.js42890644editdlrm
proxy-request.js.map65810644editdlrm
resolve-routes.d.ts11250644editdlrm
resolve-routes.js338990644editdlrm
resolve-routes.js.map471420644editdlrm
route-types-utils.d.ts24280644editdlrm
route-types-utils.js113940644editdlrm
route-types-utils.js.map192130644editdlrm
router-server-context.d.ts11290644editdlrm
router-server-context.js6890644editdlrm
router-server-context.js.map22830644editdlrm
setup-dev-bundler.d.ts27220644editdlrm
setup-dev-bundler.js473040644editdlrm
setup-dev-bundler.js.map681600644editdlrm
typegen.d.ts3370644editdlrm
typegen.js247410644editdlrm
typegen.js.map347410644editdlrm
types.d.ts1810644editdlrm
types.js1150644editdlrm
types.js.map670644editdlrm
Edit: /opt/canhelp/node_modules/next/dist/server/lib/router-utils/proxy-request.js (4289B)
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "proxyRequest", { enumerable: true, get: function() { return proxyRequest; } }); const _url = /*#__PURE__*/ _interop_require_default(require("url")); const _serverrouteutils = require("../../server-route-utils"); const _stream = require("stream"); const _detachedpromise = require("../../../lib/detached-promise"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function proxyRequest(req, res, parsedUrl, upgradeHead, reqBody, proxyTimeout) { const { query } = parsedUrl; delete parsedUrl.query; parsedUrl.search = (0, _serverrouteutils.stringifyQuery)(req, query); const target = _url.default.format(parsedUrl); const HttpProxy = require('next/dist/compiled/http-proxy'); const proxy = new HttpProxy({ target, changeOrigin: true, ignorePath: true, ws: true, // we limit proxy requests to 30s by default, in development // we don't time out WebSocket requests to allow proxying proxyTimeout: proxyTimeout === null ? undefined : proxyTimeout || 30000, headers: { 'x-forwarded-host': req.headers.host || '' } }); let finished = false; // http-proxy does not properly detect a client disconnect in newer // versions of Node.js. This is caused because it only listens for the // `aborted` event on the our request object, but it also fully reads // and closes the request object. Node **will not** fire `aborted` when // the request is already closed. Listening for `close` on our response // object will detect the disconnect, and we can abort the proxy's // connection. proxy.on('proxyReq', (proxyReq)=>{ res.on('close', ()=>proxyReq.destroy()); }); proxy.on('proxyRes', (proxyRes)=>{ if (res.destroyed) { proxyRes.destroy(); } else { res.on('close', ()=>proxyRes.destroy()); } }); proxy.on('proxyRes', (proxyRes, innerReq, innerRes)=>{ const cleanup = (err)=>{ // cleanup event listeners to allow clean garbage collection proxyRes.removeListener('error', cleanup); proxyRes.removeListener('close', cleanup); innerRes.removeListener('error', cleanup); innerRes.removeListener('close', cleanup); // destroy all source streams to propagate the caught event backward innerReq.destroy(err); proxyRes.destroy(err); }; proxyRes.once('error', cleanup); proxyRes.once('close', cleanup); innerRes.once('error', cleanup); innerRes.once('close', cleanup); }); const detached = new _detachedpromise.DetachedPromise(); proxy.on('error', (err)=>{ console.error(`Failed to proxy ${target}`, err); if (!finished) { finished = true; detached.reject(err); if (!res.destroyed) { if (!(res instanceof _stream.Duplex)) { res.statusCode = 500; } res.end('Internal Server Error'); } } }); // If upgrade head is present or the response is a Duplex stream, treat as // WebSocket request. if (upgradeHead || res instanceof _stream.Duplex) { proxy.on('proxyReqWs', (proxyReq)=>{ proxyReq.on('close', ()=>{ if (!finished) { finished = true; detached.resolve(true); } }); }); proxy.ws(req, res, upgradeHead); detached.resolve(true); } else { proxy.on('proxyReq', (proxyReq)=>{ proxyReq.on('close', ()=>{ if (!finished) { finished = true; detached.resolve(true); } }); }); proxy.web(req, res, { buffer: reqBody }); } // When the proxy finishes proxying the request, shut down the proxy. return detached.promise.finally(()=>{ proxy.close(); }); } //# sourceMappingURL=proxy-request.js.map