From 4b4dba5cb0bfa2c36bf8d5ce29fb73fdb342afb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20K=C5=82ys?= Date: Mon, 17 Jul 2023 09:42:57 +0200 Subject: [PATCH] https: make https.globalAgent overridable also under ECMAScript Modules Under ECMAScript modules when you do "import * as https from 'https'" you get a new object with properties copied from https module exports. So if this is a regular data property, you will just override a copy, but if this would be a accessor property, we can still access the actual https.globalAgent. Refs: https://github.com/nodejs/node/pull/25170, https://github.com/nodejs/node/pull/9386 --- lib/https.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/https.js b/lib/https.js index d8b42c85493f7e..6de78f454e165a 100644 --- a/lib/https.js +++ b/lib/https.js @@ -350,7 +350,7 @@ Agent.prototype._evictSession = function _evictSession(key) { delete this._sessionCache.map[key]; }; -const globalAgent = new Agent({ keepAlive: true, scheduling: 'lifo', timeout: 5000 }); +let globalAgent = new Agent({ keepAlive: true, scheduling: 'lifo', timeout: 5000 }); /** * Makes a request to a secure web server. @@ -415,9 +415,21 @@ function get(input, options, cb) { module.exports = { Agent, - globalAgent, Server, createServer, get, request, }; + +// make https.globalAgent overridable also under ECMAScript Modules +ObjectDefineProperty(module.exports, 'globalAgent', { + __proto__: null, + configurable: true, + enumerable: true, + get() { + return globalAgent; + }, + set(value) { + globalAgent = value; + }, +});