Socket
Socket
Sign inDemoInstall

http-proxy-middleware

Package Overview
Dependencies
16
Maintainers
1
Versions
81
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.3.1 to 2.0.0

4

CHANGELOG.md
# Changelog
## [v2.0.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.0)
- chore(package): drop node 10 [BREAKING CHANGE] ([#577](https://github.com/chimurai/http-proxy-middleware/pull/577))
## [v1.3.1](https://github.com/chimurai/http-proxy-middleware/releases/tag/v1.3.1)

@@ -4,0 +8,0 @@

49

dist/handlers/response-interceptor.js
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -22,24 +13,22 @@ exports.responseInterceptor = void 0;

function responseInterceptor(interceptor) {
return function proxyRes(proxyRes, req, res) {
return __awaiter(this, void 0, void 0, function* () {
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', () => __awaiter(this, void 0, void 0, function* () {
// copy original headers
copyHeaders(proxyRes, res);
// call interceptor with intercepted response (buffer)
const interceptedBuffer = Buffer.from(yield 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}`);
});
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}`);
});
};

@@ -46,0 +35,0 @@ }

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -26,7 +17,7 @@ exports.HttpProxyMiddleware = void 0;

// https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this
this.middleware = (req, res, next) => __awaiter(this, void 0, void 0, function* () {
this.middleware = async (req, res, next) => {
var _a, _b;
if (this.shouldProxy(this.config.context, req)) {
try {
const activeProxyOptions = yield this.prepareProxyRequest(req);
const activeProxyOptions = await this.prepareProxyRequest(req);
this.proxy.web(req, res, activeProxyOptions);

@@ -61,3 +52,3 @@ }

}
});
};
this.catchUpgradeRequest = (server) => {

@@ -71,9 +62,9 @@ if (!this.wsInternalSubscribed) {

};
this.handleUpgrade = (req, socket, head) => __awaiter(this, void 0, void 0, function* () {
this.handleUpgrade = async (req, socket, head) => {
if (this.shouldProxy(this.config.context, req)) {
const activeProxyOptions = yield this.prepareProxyRequest(req);
const activeProxyOptions = await this.prepareProxyRequest(req);
this.proxy.ws(req, socket, head, activeProxyOptions);
this.logger.info('[HPM] Upgrading to WebSocket');
}
});
};
/**

@@ -99,3 +90,3 @@ * Determine whether request should be proxied.

*/
this.prepareProxyRequest = (req) => __awaiter(this, void 0, void 0, function* () {
this.prepareProxyRequest = async (req) => {
// https://github.com/chimurai/http-proxy-middleware/issues/17

@@ -110,4 +101,4 @@ // https://github.com/chimurai/http-proxy-middleware/issues/94

// 2. option.pathRewrite
yield this.applyRouter(req, newProxyOptions);
yield this.applyPathRewrite(req, this.pathRewriter);
await this.applyRouter(req, newProxyOptions);
await this.applyPathRewrite(req, this.pathRewriter);
// debug logging for both http(s) and websockets

@@ -119,8 +110,8 @@ if (this.proxyOptions.logLevel === 'debug') {

return newProxyOptions;
});
};
// Modify option.target when router present.
this.applyRouter = (req, options) => __awaiter(this, void 0, void 0, function* () {
this.applyRouter = async (req, options) => {
let newTarget;
if (options.router) {
newTarget = yield Router.getTarget(req, options);
newTarget = await Router.getTarget(req, options);
if (newTarget) {

@@ -131,7 +122,7 @@ this.logger.debug('[HPM] Router new target: %s -> "%s"', options.target, newTarget);

}
});
};
// rewrite path
this.applyPathRewrite = (req, pathRewriter) => __awaiter(this, void 0, void 0, function* () {
this.applyPathRewrite = async (req, pathRewriter) => {
if (pathRewriter) {
const path = yield pathRewriter(req.url, req);
const path = await pathRewriter(req.url, req);
if (typeof path === 'string') {

@@ -144,3 +135,3 @@ req.url = path;

}
});
};
this.logError = (err, req, res, target) => {

@@ -147,0 +138,0 @@ var _a;

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -16,14 +7,12 @@ exports.getTarget = void 0;

const logger = logger_1.getInstance();
function getTarget(req, config) {
return __awaiter(this, void 0, void 0, function* () {
let newTarget;
const router = config.router;
if (isPlainObj(router)) {
newTarget = getTargetFromProxyTable(req, router);
}
else if (typeof router === 'function') {
newTarget = yield router(req);
}
return newTarget;
});
async function getTarget(req, config) {
let newTarget;
const router = config.router;
if (isPlainObj(router)) {
newTarget = getTargetFromProxyTable(req, router);
}
else if (typeof router === 'function') {
newTarget = await router(req);
}
return newTarget;
}

@@ -30,0 +19,0 @@ exports.getTarget = getTarget;

{
"name": "http-proxy-middleware",
"version": "1.3.1",
"version": "2.0.0",
"description": "The one-liner node.js proxy middleware for connect, express and browser-sync",

@@ -22,2 +22,3 @@ "main": "dist/index.js",

"test": "jest",
"precoverage": "yarn build",
"coverage": "jest --coverage --coverageReporters=lcov",

@@ -91,3 +92,3 @@ "prepare": "yarn build && rm dist/tsconfig.tsbuildinfo"

"engines": {
"node": ">=8.0.0"
"node": ">=12.0.0"
},

@@ -94,0 +95,0 @@ "husky": {

# http-proxy-middleware
[![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/chimurai/http-proxy-middleware/Test/master?style=flat-square)](https://github.com/chimurai/http-proxy-middleware/actions?query=branch%3Amaster)
[![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/chimurai/http-proxy-middleware/CI/master?style=flat-square)](https://github.com/chimurai/http-proxy-middleware/actions?query=branch%3Amaster)
[![Coveralls](https://img.shields.io/coveralls/chimurai/http-proxy-middleware.svg?style=flat-square)](https://coveralls.io/r/chimurai/http-proxy-middleware)

@@ -5,0 +5,0 @@ [![dependency Status](https://img.shields.io/david/chimurai/http-proxy-middleware.svg?style=flat-square)](https://david-dm.org/chimurai/http-proxy-middleware#info=dependencies)

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc