File: //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[](https://travis-ci.org/chimurai/http-proxy-middleware)\n[](https://coveralls.io/r/chimurai/http-proxy-middleware)\n[](https://david-dm.org/chimurai/http-proxy-middleware#info=dependencies)\n[](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). [](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"
}