HEX
Server: Apache/2.4.18 (Ubuntu)
System: Linux ubuntu 7.0.5-x86_64-linode173 #1 SMP PREEMPT_DYNAMIC Fri May 8 10:12:05 EDT 2026 x86_64
User: root (0)
PHP: 7.2.28-1+ubuntu16.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //proc/self/root/opt/code/node_modules/http-proxy-middleware/package.json
{
  "name": "http-proxy-middleware",
  "version": "0.17.4",
  "description": "The one-liner node.js proxy middleware for connect, express and browser-sync",
  "main": "index.js",
  "files": [
    "index.js",
    "lib"
  ],
  "scripts": {
    "clean": "rm -rf coverage",
    "test": "mocha --recursive --colors --reporter spec",
    "cover": "npm run clean && istanbul cover ./node_modules/mocha/bin/_mocha -- --recursive",
    "coveralls": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --recursive --reporter spec && istanbul-coveralls && npm run clean"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/chimurai/http-proxy-middleware.git"
  },
  "keywords": [
    "reverse",
    "proxy",
    "middleware",
    "http",
    "https",
    "connect",
    "express",
    "browser-sync",
    "gulp",
    "grunt-contrib-connect",
    "websocket",
    "ws",
    "cors"
  ],
  "author": {
    "name": "Steven Chim"
  },
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/chimurai/http-proxy-middleware/issues"
  },
  "homepage": "https://github.com/chimurai/http-proxy-middleware",
  "devDependencies": {
    "browser-sync": "^2.18.2",
    "chai": "^3.5.0",
    "connect": "^3.5.0",
    "coveralls": "^2.11.15",
    "express": "^4.14.0",
    "istanbul": "^0.4.5",
    "istanbul-coveralls": "^1.0.3",
    "mocha": "^3.2.0",
    "mocha-lcov-reporter": "1.2.0",
    "opn": "^4.0.2",
    "ws": "^1.1.1"
  },
  "dependencies": {
    "http-proxy": "^1.16.2",
    "is-glob": "^3.1.0",
    "lodash": "^4.17.2",
    "micromatch": "^2.3.11"
  },
  "readme": "# http-proxy-middleware\n\n[![Build Status](https://img.shields.io/travis/chimurai/http-proxy-middleware/master.svg?style=flat-square)](https://travis-ci.org/chimurai/http-proxy-middleware)\n[![Coveralls](https://img.shields.io/coveralls/chimurai/http-proxy-middleware.svg?style=flat-square)](https://coveralls.io/r/chimurai/http-proxy-middleware)\n[![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)\n[![dependency Status](https://snyk.io/test/npm/http-proxy-middleware/badge.svg)](https://snyk.io/test/npm/http-proxy-middleware)\n\nNode.js proxying made simple. Configure proxy middleware with ease for [connect](https://github.com/senchalabs/connect), [express](https://github.com/strongloop/express), [browser-sync](https://github.com/BrowserSync/browser-sync) and [many more](#compatible-servers).\n\nPowered by the popular Nodejitsu [`http-proxy`](https://github.com/nodejitsu/node-http-proxy). [![GitHub stars](https://img.shields.io/github/stars/nodejitsu/node-http-proxy.svg?style=social&label=Star)](https://github.com/nodejitsu/node-http-proxy)\n\n## TL;DR\n\nProxy `/api` requests to `http://www.example.org`\n\n```javascript\nvar express = require('express');\nvar proxy = require('http-proxy-middleware');\n\nvar app = express();\n\napp.use('/api', proxy({target: 'http://www.example.org', changeOrigin: true}));\napp.listen(3000);\n\n// http://localhost:3000/api/foo/bar -> http://www.example.org/api/foo/bar\n```\n\n_All_ `http-proxy` [options](https://github.com/nodejitsu/node-http-proxy#options) can be used, along with some extra `http-proxy-middleware` [options](#options).\n\n:bulb: **Tip:** Set the option `changeOrigin` to `true` for [name-based virtual hosted sites](http://en.wikipedia.org/wiki/Virtual_hosting#Name-based).\n\n## Table of Contents\n\n<!-- MarkdownTOC autolink=true bracket=round depth=2 -->\n\n- [Install](#install)\n- [Core concept](#core-concept)\n- [Example](#example)\n- [Context matching](#context-matching)\n- [Options](#options)\n    - [http-proxy-middleware options](#http-proxy-middleware-options)\n    - [http-proxy events](#http-proxy-events)\n    - [http-proxy options](#http-proxy-options)\n- [Shorthand](#shorthand)\n    - [app.use\\(path, proxy\\)](#appusepath-proxy)\n- [WebSocket](#websocket)\n    - [External WebSocket upgrade](#external-websocket-upgrade)\n- [Working examples](#working-examples)\n- [Recipes](#recipes)\n- [Compatible servers](#compatible-servers)\n- [Tests](#tests)\n- [Changelog](#changelog)\n- [License](#license)\n\n<!-- /MarkdownTOC -->\n\n\n## Install\n\n```javascript\n$ npm install --save-dev http-proxy-middleware\n```\n\n## Core concept\n\nProxy middleware configuration.\n\n#### proxy([context,] config)\n\n```javascript\nvar proxy = require('http-proxy-middleware');\n\nvar apiProxy = proxy('/api', {target: 'http://www.example.org'});\n//                   \\____/   \\_____________________________/\n//                     |                    |\n//                   context             options\n\n// 'apiProxy' is now ready to be used as middleware in a server.\n```\n* **context**: Determine which requests should be proxied to the target host.\n    (more on [context matching](#context-matching))\n* **options.target**: target host to proxy to. _(protocol + host)_\n\n(full list of [`http-proxy-middleware` configuration options](#options))\n\n#### proxy(uri [, config])\n\n``` javascript\n// shorthand syntax for the example above:\nvar apiProxy = proxy('http://www.example.org/api');\n\n```\nMore about the [shorthand configuration](#shorthand).\n\n## Example\n\nAn example with `express` server.\n\n```javascript\n// include dependencies\nvar express = require('express');\nvar proxy = require('http-proxy-middleware');\n\n// proxy middleware options\nvar options = {\n        target: 'http://www.example.org', // target host\n        changeOrigin: true,               // needed for virtual hosted sites\n        ws: true,                         // proxy websockets\n        pathRewrite: {\n            '^/api/old-path' : '/api/new-path',     // rewrite path\n            '^/api/remove/path' : '/path'           // remove base path\n        },\n        router: {\n            // when request.headers.host == 'dev.localhost:3000',\n            // override target 'http://www.example.org' to 'http://localhost:8000'\n            'dev.localhost:3000' : 'http://localhost:8000'\n        }\n    };\n\n// create the proxy (without context)\nvar exampleProxy = proxy(options);\n\n// mount `exampleProxy` in web server\nvar app = express();\n    app.use('/api', exampleProxy);\n    app.listen(3000);\n```\n\n## Context matching\n\nProviding an alternative way to decide which requests should be proxied; In case you are not able to use the server's [`path` parameter](http://expressjs.com/en/4x/api.html#app.use) to mount the proxy or when you need more flexibility.\n\nThe [RFC 3986 `path`](https://tools.ietf.org/html/rfc3986#section-3.3) is be used for context matching.\n\n```\n         foo://example.com:8042/over/there?name=ferret#nose\n         \\_/   \\______________/\\_________/ \\_________/ \\__/\n          |           |            |            |        |\n       scheme     authority       path        query   fragment\n```\n\n* **path matching**\n    - `proxy({...})` - matches any path, all requests will be proxied.\n    - `proxy('/', {...})` - matches any path, all requests will be proxied.\n    - `proxy('/api', {...})` - matches paths starting with `/api`\n\n* **multiple path matching**\n    - `proxy(['/api', '/ajax', '/someotherpath'], {...})` \n\n* **wildcard path matching**\n    \n    For fine-grained control you can use wildcard matching. Glob pattern matching is done by _micromatch_. Visit [micromatch](https://www.npmjs.com/package/micromatch) or [glob](https://www.npmjs.com/package/glob) for more globbing examples.\n    - `proxy('**', {...})` matches any path, all requests will be proxied.\n    - `proxy('**/*.html', {...})` matches any path which ends with `.html`\n    - `proxy('/*.html', {...})` matches paths directly under path-absolute\n    - `proxy('/api/**/*.html', {...})` matches requests ending with `.html` in the path of `/api`\n    - `proxy(['/api/**', '/ajax/**'], {...})` combine multiple patterns\n    - `proxy(['/api/**', '!**/bad.json'], {...})` exclusion\n\n* **custom matching**\n    \n    For full control you can provide a custom function to determine which requests should be proxied or not.\n    ```javascript\n    /**\n     * @return {Boolean}\n     */\n    var filter = function (pathname, req) {\n        return (pathname.match('^/api') && req.method === 'GET');\n    };\n\n    var apiProxy = proxy(filter, {target: 'http://www.example.org'})\n    ```\n\n## Options\n\n### http-proxy-middleware options\n\n*  **option.pathRewrite**: object/function, rewrite target's url path. Object-keys will be used as _RegExp_ to match paths.\n    ```javascript\n    // rewrite path\n    pathRewrite: {'^/old/api' : '/new/api'}\n    \n    // remove path\n    pathRewrite: {'^/remove/api' : ''}\n    \n    // add base path\n    pathRewrite: {'^/' : '/basepath/'}\n\n    // custom rewriting\n    pathRewrite: function (path, req) { return path.replace('/api', '/base/api') }\n    ```\n\n* **option.router**: object/function, re-target `option.target` for specific requests.\n    ```javascript\n    // Use `host` and/or `path` to match requests. First match will be used.\n    // The order of the configuration matters.\n    router: {\n        'integration.localhost:3000' : 'http://localhost:8001',  // host only\n        'staging.localhost:3000'     : 'http://localhost:8002',  // host only\n        'localhost:3000/api'         : 'http://localhost:8003',  // host + path\n        '/rest'                      : 'http://localhost:8004'   // path only\n    }\n\n    // Custom router function\n    router: function(req) {\n        return 'http://localhost:8004';\n    }\n    ```\n\n*  **option.logLevel**: string, ['debug', 'info', 'warn', 'error', 'silent']. Default: `'info'`\n\n*  **option.logProvider**: function, modify or replace log provider. Default: `console`.\n    ```javascript\n    // simple replace\n    function logProvider(provider) {\n        // replace the default console log provider.\n        return require('winston');\n    }\n    ```\n\n    ```javascript\n    // verbose replacement\n    function logProvider(provider) {\n        var logger = new (require('winston').Logger)();\n\n        var myCustomProvider = {\n            log: logger.log,\n            debug: logger.debug,\n            info: logger.info,\n            warn: logger.warn,\n            error: logger.error\n        }\n        return myCustomProvider;\n    }\n    ```\n* (DEPRECATED) **option.proxyHost**: Use `option.changeOrigin = true` instead.\n* (DEPRECATED) **option.proxyTable**: Use `option.router` instead.\n\n\n### http-proxy events\n\nSubscribe to [http-proxy events](https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events):\n\n*  **option.onError**: function, subscribe to http-proxy's `error` event for custom error handling.\n    ```javascript\n    function onError(err, req, res) {\n        res.writeHead(500, {\n            'Content-Type': 'text/plain'\n        });\n        res.end('Something went wrong. And we are reporting a custom error message.');\n    }\n    ```\n\n*  **option.onProxyRes**: function, subscribe to http-proxy's `proxyRes` event.\n    ```javascript\n    function onProxyRes(proxyRes, req, res) {\n        proxyRes.headers['x-added'] = 'foobar';     // add new header to response\n        delete proxyRes.headers['x-removed'];       // remove header from response\n    }\n    ```\n\n*  **option.onProxyReq**: function, subscribe to http-proxy's `proxyReq` event.\n    ```javascript\n    function onProxyReq(proxyReq, req, res) {\n        // add custom header to request\n        proxyReq.setHeader('x-added', 'foobar');\n        // or log the req\n    }\n    ```\n\n*  **option.onProxyReqWs**: function, subscribe to http-proxy's `proxyReqWs` event.\n    ```javascript\n    function onProxyReqWs(proxyReq, req, socket, options, head) {\n        // add custom header\n        proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');\n    }\n    ```\n\n*  **option.onOpen**: function, subscribe to http-proxy's `open` event.\n    ```javascript\n    function onOpen(proxySocket) {\n        // listen for messages coming FROM the target here\n        proxySocket.on('data', hybiParseAndLogMessage);\n    }\n    ```\n\n*  **option.onClose**: function, subscribe to http-proxy's `close` event.\n    ```javascript\n    function onClose(res, socket, head) {\n        // view disconnected websocket connections\n        console.log('Client disconnected');\n    }\n    ```\n\n### http-proxy options\n\nThe following options are provided by the underlying [http-proxy](https://github.com/nodejitsu/node-http-proxy#options) library.\n\n*  **option.target**: url string to be parsed with the url module\n*  **option.forward**: url string to be parsed with the url module\n*  **option.agent**: object to be passed to http(s).request (see Node's [https agent](http://nodejs.org/api/https.html#https_class_https_agent) and [http agent](http://nodejs.org/api/http.html#http_class_http_agent) objects)\n*  **option.ssl**: object to be passed to https.createServer()\n*  **option.ws**: true/false: if you want to proxy websockets\n*  **option.xfwd**: true/false, adds x-forward headers\n*  **option.secure**: true/false, if you want to verify the SSL Certs\n*  **option.toProxy**: true/false, passes the absolute URL as the `path` (useful for proxying to proxies)\n*  **option.prependPath**: true/false, Default: true - specify whether you want to prepend the target's path to the proxy path\n*  **option.ignorePath**: true/false, Default: false - specify whether you want to ignore the proxy path of the incoming request (note: you will have to append / manually if required).\n*  **option.localAddress** : Local interface string to bind for outgoing connections\n*  **option.changeOrigin**: true/false, Default: false - changes the origin of the host header to the target URL\n*  **option.auth** : Basic authentication i.e. 'user:password' to compute an Authorization header.\n*  **option.hostRewrite**: rewrites the location hostname on (301/302/307/308) redirects.\n*  **option.autoRewrite**: rewrites the location host/port on (301/302/307/308) redirects based on requested host/port. Default: false.\n*  **option.protocolRewrite**: rewrites the location protocol on (301/302/307/308) redirects to 'http' or 'https'. Default: null.\n*  **option.cookieDomainRewrite**: rewrites domain of `set-cookie` headers. Possible values:\n   * `false` (default): disable cookie rewriting\n   * String: new domain, for example `cookieDomainRewrite: \"new.domain\"`. To remove the domain, use `cookieDomainRewrite: \"\"`.\n   * Object: mapping of domains to new domains, use `\"*\"` to match all domains.  \n     For example keep one domain unchanged, rewrite one domain and remove other domains:\n     ```\n     cookieDomainRewrite: {\n       \"unchanged.domain\": \"unchanged.domain\",\n       \"old.domain\": \"new.domain\",\n       \"*\": \"\"\n     }\n     ```\n*  **option.headers**: object, adds [request headers](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields). (Example: `{host:'www.example.org'}`)\n*  **option.proxyTimeout**: timeout (in millis) when proxy receives no response from target\n\n\n\n## Shorthand\n\nUse the shorthand syntax when verbose configuration is not needed. The `context` and `option.target` will be automatically configured when shorthand is used. Options can still be used if needed.\n\n```javascript\nproxy('http://www.example.org:8000/api');\n// proxy('/api', {target: 'http://www.example.org:8000'});\n\n\nproxy('http://www.example.org:8000/api/books/*/**.json');\n// proxy('/api/books/*/**.json', {target: 'http://www.example.org:8000'});\n\n\nproxy('http://www.example.org:8000/api', {changeOrigin:true});\n// proxy('/api', {target: 'http://www.example.org:8000', changeOrigin: true});\n```\n\n### app.use(path, proxy)\n\nIf you want to use the server's `app.use` `path` parameter to match requests; \nCreate and mount the proxy without the http-proxy-middleware `context` parameter:\n```javascript\napp.use('/api', proxy({target:'http://www.example.org', changeOrigin:true}));\n```\n\n`app.use` documentation:\n* express: http://expressjs.com/en/4x/api.html#app.use\n* connect: https://github.com/senchalabs/connect#mount-middleware\n\n## WebSocket\n\n```javascript\n// verbose api\nproxy('/', {target:'http://echo.websocket.org', ws:true});\n\n// shorthand\nproxy('http://echo.websocket.org', {ws:true});\n\n// shorter shorthand\nproxy('ws://echo.websocket.org');\n```\n\n### External WebSocket upgrade\n\nIn the previous WebSocket examples, http-proxy-middleware relies on a initial http request in order to listen to the http `upgrade` event. If you need to proxy WebSockets without the initial http request, you can subscribe to the server's http `upgrade` event manually.\n```javascript\nvar wsProxy = proxy('ws://echo.websocket.org', {changeOrigin:true});\n\nvar app = express();\n    app.use(wsProxy);\n\nvar server = app.listen(3000);\n    server.on('upgrade', wsProxy.upgrade);  // <-- subscribe to http 'upgrade'\n```\n\n\n## Working examples\n\nView and play around with [working examples](https://github.com/chimurai/http-proxy-middleware/tree/master/examples).\n\n* Browser-Sync ([example source](https://github.com/chimurai/http-proxy-middleware/tree/master/examples/browser-sync/index.js))\n* express ([example source](https://github.com/chimurai/http-proxy-middleware/tree/master/examples/express/index.js))\n* connect ([example source](https://github.com/chimurai/http-proxy-middleware/tree/master/examples/connect/index.js))\n* WebSocket ([example source](https://github.com/chimurai/http-proxy-middleware/tree/master/examples/websocket/index.js))\n\n## Recipes\n\nView the [recipes](https://github.com/chimurai/http-proxy-middleware/tree/master/recipes) for common use cases.\n\n## Compatible servers\n\n`http-proxy-middleware` is compatible with the following servers:\n* [connect](https://www.npmjs.com/package/connect)\n* [express](https://www.npmjs.com/package/express)\n* [browser-sync](https://www.npmjs.com/package/browser-sync)\n* [lite-server](https://www.npmjs.com/package/lite-server)\n* [grunt-contrib-connect](https://www.npmjs.com/package/grunt-contrib-connect)\n* [grunt-browser-sync](https://www.npmjs.com/package/grunt-browser-sync)\n* [gulp-connect](https://www.npmjs.com/package/gulp-connect)\n* [gulp-webserver](https://www.npmjs.com/package/gulp-webserver)\n\nSample implementations can be found in the [server recipes](https://github.com/chimurai/http-proxy-middleware/tree/master/recipes/servers.md).\n\n## Tests\n\nRun the test suite:\n\n```bash\n# install dependencies\n$ npm install\n```\n\nunit testing\n\n```bash\n# unit tests\n$ npm test\n```\n\ncoverage\n\n```bash\n# code coverage\n$ npm run cover\n```\n\n## Changelog\n\n- [View changelog](https://github.com/chimurai/http-proxy-middleware/blob/master/CHANGELOG.md)\n\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2015-2017 Steven Chim\n",
  "readmeFilename": "README.md",
  "_id": "http-proxy-middleware@0.17.4",
  "dist": {
    "shasum": "cb1756319ea02492d7a07bf2d9ecdfe9549bdef2"
  },
  "_from": "http-proxy-middleware@^0.17.3",
  "_resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz"
}