first
This commit is contained in:
6
node_modules/http-proxy-middleware/dist/handlers/fix-request-body.d.ts
generated
vendored
Normal file
6
node_modules/http-proxy-middleware/dist/handlers/fix-request-body.d.ts
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
/// <reference types="node" />
|
||||
import type * as http from 'http';
|
||||
/**
|
||||
* Fix proxied body if bodyParser is involved.
|
||||
*/
|
||||
export declare function fixRequestBody(proxyReq: http.ClientRequest, req: http.IncomingMessage): void;
|
26
node_modules/http-proxy-middleware/dist/handlers/fix-request-body.js
generated
vendored
Normal file
26
node_modules/http-proxy-middleware/dist/handlers/fix-request-body.js
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.fixRequestBody = void 0;
|
||||
const querystring = require("querystring");
|
||||
/**
|
||||
* Fix proxied body if bodyParser is involved.
|
||||
*/
|
||||
function fixRequestBody(proxyReq, req) {
|
||||
const requestBody = req.body;
|
||||
if (!requestBody) {
|
||||
return;
|
||||
}
|
||||
const contentType = proxyReq.getHeader('Content-Type');
|
||||
const writeBody = (bodyData) => {
|
||||
// deepcode ignore ContentLengthInCode: bodyParser fix
|
||||
proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
|
||||
proxyReq.write(bodyData);
|
||||
};
|
||||
if (contentType && contentType.includes('application/json')) {
|
||||
writeBody(JSON.stringify(requestBody));
|
||||
}
|
||||
if (contentType && contentType.includes('application/x-www-form-urlencoded')) {
|
||||
writeBody(querystring.stringify(requestBody));
|
||||
}
|
||||
}
|
||||
exports.fixRequestBody = fixRequestBody;
|
1
node_modules/http-proxy-middleware/dist/handlers/index.d.ts
generated
vendored
Normal file
1
node_modules/http-proxy-middleware/dist/handlers/index.d.ts
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * from './public';
|
13
node_modules/http-proxy-middleware/dist/handlers/index.js
generated
vendored
Normal file
13
node_modules/http-proxy-middleware/dist/handlers/index.js
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__exportStar(require("./public"), exports);
|
2
node_modules/http-proxy-middleware/dist/handlers/public.d.ts
generated
vendored
Normal file
2
node_modules/http-proxy-middleware/dist/handlers/public.d.ts
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export { responseInterceptor } from './response-interceptor';
|
||||
export { fixRequestBody } from './fix-request-body';
|
7
node_modules/http-proxy-middleware/dist/handlers/public.js
generated
vendored
Normal file
7
node_modules/http-proxy-middleware/dist/handlers/public.js
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.fixRequestBody = exports.responseInterceptor = void 0;
|
||||
var response_interceptor_1 = require("./response-interceptor");
|
||||
Object.defineProperty(exports, "responseInterceptor", { enumerable: true, get: function () { return response_interceptor_1.responseInterceptor; } });
|
||||
var fix_request_body_1 = require("./fix-request-body");
|
||||
Object.defineProperty(exports, "fixRequestBody", { enumerable: true, get: function () { return fix_request_body_1.fixRequestBody; } });
|
12
node_modules/http-proxy-middleware/dist/handlers/response-interceptor.d.ts
generated
vendored
Normal file
12
node_modules/http-proxy-middleware/dist/handlers/response-interceptor.d.ts
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/// <reference types="node" />
|
||||
import type * as http from 'http';
|
||||
declare type Interceptor = (buffer: Buffer, proxyRes: http.IncomingMessage, req: http.IncomingMessage, res: http.ServerResponse) => Promise<Buffer | string>;
|
||||
/**
|
||||
* Intercept responses from upstream.
|
||||
* Automatically decompress (deflate, gzip, brotli).
|
||||
* Give developer the opportunity to modify intercepted Buffer and http.ServerResponse
|
||||
*
|
||||
* NOTE: must set options.selfHandleResponse=true (prevent automatic call of res.end())
|
||||
*/
|
||||
export declare function responseInterceptor(interceptor: Interceptor): (proxyRes: http.IncomingMessage, req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
|
||||
export {};
|
86
node_modules/http-proxy-middleware/dist/handlers/response-interceptor.js
generated
vendored
Normal file
86
node_modules/http-proxy-middleware/dist/handlers/response-interceptor.js
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.responseInterceptor = void 0;
|
||||
const zlib = require("zlib");
|
||||
/**
|
||||
* Intercept responses from upstream.
|
||||
* Automatically decompress (deflate, gzip, brotli).
|
||||
* Give developer the opportunity to modify intercepted Buffer and http.ServerResponse
|
||||
*
|
||||
* NOTE: must set options.selfHandleResponse=true (prevent automatic call of res.end())
|
||||
*/
|
||||
function responseInterceptor(interceptor) {
|
||||
return async function proxyRes(proxyRes, req, res) {
|
||||
const originalProxyRes = proxyRes;
|
||||
let buffer = Buffer.from('', 'utf8');
|
||||
// decompress proxy response
|
||||
const _proxyRes = decompress(proxyRes, proxyRes.headers['content-encoding']);
|
||||
// concat data stream
|
||||
_proxyRes.on('data', (chunk) => (buffer = Buffer.concat([buffer, chunk])));
|
||||
_proxyRes.on('end', async () => {
|
||||
// copy original headers
|
||||
copyHeaders(proxyRes, res);
|
||||
// call interceptor with intercepted response (buffer)
|
||||
const interceptedBuffer = Buffer.from(await interceptor(buffer, originalProxyRes, req, res));
|
||||
// set correct content-length (with double byte character support)
|
||||
res.setHeader('content-length', Buffer.byteLength(interceptedBuffer, 'utf8'));
|
||||
res.write(interceptedBuffer);
|
||||
res.end();
|
||||
});
|
||||
_proxyRes.on('error', (error) => {
|
||||
res.end(`Error fetching proxied request: ${error.message}`);
|
||||
});
|
||||
};
|
||||
}
|
||||
exports.responseInterceptor = responseInterceptor;
|
||||
/**
|
||||
* Streaming decompression of proxy response
|
||||
* source: https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L116
|
||||
*/
|
||||
function decompress(proxyRes, contentEncoding) {
|
||||
let _proxyRes = proxyRes;
|
||||
let decompress;
|
||||
switch (contentEncoding) {
|
||||
case 'gzip':
|
||||
decompress = zlib.createGunzip();
|
||||
break;
|
||||
case 'br':
|
||||
decompress = zlib.createBrotliDecompress();
|
||||
break;
|
||||
case 'deflate':
|
||||
decompress = zlib.createInflate();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (decompress) {
|
||||
_proxyRes.pipe(decompress);
|
||||
_proxyRes = decompress;
|
||||
}
|
||||
return _proxyRes;
|
||||
}
|
||||
/**
|
||||
* Copy original headers
|
||||
* https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L78
|
||||
*/
|
||||
function copyHeaders(originalResponse, response) {
|
||||
response.statusCode = originalResponse.statusCode;
|
||||
response.statusMessage = originalResponse.statusMessage;
|
||||
if (response.setHeader) {
|
||||
let keys = Object.keys(originalResponse.headers);
|
||||
// ignore chunked, brotli, gzip, deflate headers
|
||||
keys = keys.filter((key) => !['content-encoding', 'transfer-encoding'].includes(key));
|
||||
keys.forEach((key) => {
|
||||
let value = originalResponse.headers[key];
|
||||
if (key === 'set-cookie') {
|
||||
// remove cookie domain
|
||||
value = Array.isArray(value) ? value : [value];
|
||||
value = value.map((x) => x.replace(/Domain=[^;]+?/i, ''));
|
||||
}
|
||||
response.setHeader(key, value);
|
||||
});
|
||||
}
|
||||
else {
|
||||
response.headers = originalResponse.headers;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user