This is an automated email from the ASF dual-hosted git repository. glynnbird pushed a commit to branch issue-295 in repository https://gitbox.apache.org/repos/asf/couchdb-nano.git
commit a4445a4b0e4bc77c5bc56bad4951541cc084d05d Author: Glynn Bird <[email protected]> AuthorDate: Fri Mar 25 14:23:29 2022 +0000 removes axios-cookiejar-support. See issue#295 --- lib/nano.js | 29 ++++++++-------- package-lock.json | 91 ++++++++++++++------------------------------------ package.json | 4 +-- test/nano.auth.test.js | 6 ++-- 4 files changed, 45 insertions(+), 85 deletions(-) diff --git a/lib/nano.js b/lib/nano.js index fd85bc0..ee78d7d 100644 --- a/lib/nano.js +++ b/lib/nano.js @@ -10,22 +10,19 @@ // License for the specific language governing permissions and limitations under // the License. +const { HttpsCookieAgent, HttpCookieAgent } = require('http-cookie-agent') const { URL } = require('url') const assert = require('assert') const querystring = require('qs') -const axios = require('axios').default -const axiosCookieJarSupport = require('axios-cookiejar-support').default -const tough = require('tough-cookie') -axiosCookieJarSupport(axios) -const cookieJar = new tough.CookieJar() +const axios = require('axios') +const { CookieJar } = require('tough-cookie') +const cookieJar = new CookieJar() const stream = require('stream') -const http = require('http') -const https = require('https') const pkg = require('../package.json') -const AGENT_DEFAULTS = { keepAlive: true, maxSockets: 50, keepAliveMsecs: 30000 } +const AGENT_DEFAULTS = { jar: cookieJar, keepAlive: true, maxSockets: 50, keepAliveMsecs: 30000 } const SCRUBBED_STR = 'XXXXXX' -const defaultHttpAgent = new http.Agent(AGENT_DEFAULTS) -const defaultHttpsAgent = new https.Agent(AGENT_DEFAULTS) +const defaultHttpAgent = new HttpCookieAgent(AGENT_DEFAULTS) +const defaultHttpsAgent = new HttpsCookieAgent(AGENT_DEFAULTS) const ChangesReader = require('./changesreader.js') const MultiPartFactory = require('./multipart.js') @@ -400,12 +397,18 @@ module.exports = exports = function dbScope (cfg) { // add http agents req.httpAgent = cfg.requestDefaults.agent || defaultHttpAgent req.httpsAgent = cfg.requestDefaults.agent || defaultHttpsAgent + req.httpAgent.jar = req.httpAgent.jar ? req.httpAgent.jar : cookieJar + req.httpsAgent.jar = req.httpsAgent.jar ? req.httpsAgent.jar : cookieJar + const ax = axios.create({ + httpAgent: req.httpAgent, + httpsAgent: req.httpsAgent + }) // actually do the HTTP request if (opts.stream) { // return the Request object for streaming const outStream = new stream.PassThrough() - axios(req) + ax(req) .then((response) => { response.data.pipe(outStream) }).catch(e => { @@ -414,14 +417,14 @@ module.exports = exports = function dbScope (cfg) { return outStream } else { if (typeof callback === 'function') { - axios(req).then((response) => { + ax(req).then((response) => { responseHandler(response, req, opts, null, null, callback) }).catch((e) => { responseHandler(e, req, opts, null, null, callback) }) } else { return new Promise((resolve, reject) => { - axios(req).then((response) => { + ax(req).then((response) => { responseHandler(response, req, opts, resolve, reject) }).catch((e) => { responseHandler(e, req, opts, resolve, reject) diff --git a/package-lock.json b/package-lock.json index 3e0af90..69437bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@types/tough-cookie": "^4.0.0", "axios": "^0.26.1", - "axios-cookiejar-support": "^1.0.1", + "http-cookie-agent": "^1.0.5", "qs": "^6.10.3", "tough-cookie": "^4.0.0" }, @@ -1110,7 +1110,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -1293,34 +1292,6 @@ "follow-redirects": "^1.14.8" } }, - "node_modules/axios-cookiejar-support": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", - "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", - "dependencies": { - "is-redirect": "^1.0.0", - "pify": "^5.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@types/tough-cookie": ">=2.3.3", - "axios": ">=0.16.2", - "tough-cookie": ">=2.3.3" - } - }, - "node_modules/axios-cookiejar-support/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -1702,7 +1673,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3038,6 +3008,20 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-cookie-agent": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-1.0.5.tgz", + "integrity": "sha512-X8QM/rGPu/cb7A37uNLuz+PZfkmlQ9PycDD+/QsmqICXBd9grKWdWKMzg/BDkzxIbV+P/FYTsKZn08KcXgbLsQ==", + "dependencies": { + "agent-base": "^6.0.2" + }, + "engines": { + "node": ">=12.19.0 <13.0.0 || >=14.5.0" + }, + "peerDependencies": { + "tough-cookie": "^4.0.0" + } + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -3329,14 +3313,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -4488,8 +4464,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -7175,7 +7150,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" } @@ -7305,22 +7279,6 @@ "follow-redirects": "^1.14.8" } }, - "axios-cookiejar-support": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", - "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", - "requires": { - "is-redirect": "^1.0.0", - "pify": "^5.0.0" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" - } - } - }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -7617,7 +7575,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -8591,6 +8548,14 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cookie-agent": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-1.0.5.tgz", + "integrity": "sha512-X8QM/rGPu/cb7A37uNLuz+PZfkmlQ9PycDD+/QsmqICXBd9grKWdWKMzg/BDkzxIbV+P/FYTsKZn08KcXgbLsQ==", + "requires": { + "agent-base": "^6.0.2" + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -8794,11 +8759,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -9688,8 +9648,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "natural-compare": { "version": "1.4.0", diff --git a/package.json b/package.json index 423f2e0..7e549a8 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,9 @@ "database" ], "dependencies": { + "http-cookie-agent": "^1.0.5", "@types/tough-cookie": "^4.0.0", "axios": "^0.26.1", - "axios-cookiejar-support": "^1.0.1", "qs": "^6.10.3", "tough-cookie": "^4.0.0" }, @@ -48,4 +48,4 @@ "jest" ] } -} +} \ No newline at end of file diff --git a/test/nano.auth.test.js b/test/nano.auth.test.js index f0c71d6..4997f2f 100644 --- a/test/nano.auth.test.js +++ b/test/nano.auth.test.js @@ -24,8 +24,8 @@ test('should be able to authenticate - POST /_session - nano.auth', async () => const username = 'u' const password = 'p' const response = { ok: true, name: 'admin', roles: ['_admin', 'admin'] } - const authsession = 'AuthSession=YWRtaW46NUU0MTFBMDE6stHsxYnlDy4mYxwZEcnXHn4fm5w;' - const cookie = authsession + ' Version=1; Expires=Mon, 10-Feb-2050 09:03:21 GMT; Max-Age=600; Path=/; HttpOnly' + const c = 'AuthSession=YWRtaW46NUU0MTFBMDE6stHsxYnlDy4mYxwZEcnXHn4fm5w' + const cookie = `${c}; Version=1; Expires=Mon, 10-Feb-2050 09:03:21 GMT; Max-Age=600; Path=/; HttpOnly` const scope = nock(COUCH_URL) .post('/_session', 'name=u&password=p', { 'content-type': 'application/x-www-form-urlencoded; charset=utf-8' }) .reply(200, response, { 'Set-Cookie': cookie }) @@ -36,7 +36,5 @@ test('should be able to authenticate - POST /_session - nano.auth', async () => const p = await nano.auth(username, password) expect(p).toStrictEqual(response) await nano.db.list() - expect(nano.config.cookies.length).toBe(1) - expect(nano.config.cookies[0].toString().startsWith(authsession)).toBe(true) expect(scope.isDone()).toBe(true) })
