summaryrefslogtreecommitdiff
path: root/desktop/node_modules/global-agent/src/utilities
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/node_modules/global-agent/src/utilities')
-rw-r--r--desktop/node_modules/global-agent/src/utilities/bindHttpMethod.js54
-rw-r--r--desktop/node_modules/global-agent/src/utilities/index.js5
-rw-r--r--desktop/node_modules/global-agent/src/utilities/isUrlMatchingNoProxy.js37
-rw-r--r--desktop/node_modules/global-agent/src/utilities/parseProxyUrl.js36
4 files changed, 132 insertions, 0 deletions
diff --git a/desktop/node_modules/global-agent/src/utilities/bindHttpMethod.js b/desktop/node_modules/global-agent/src/utilities/bindHttpMethod.js
new file mode 100644
index 0000000..f8859b5
--- /dev/null
+++ b/desktop/node_modules/global-agent/src/utilities/bindHttpMethod.js
@@ -0,0 +1,54 @@
+// @flow
+
+import http from 'http';
+import https from 'https';
+
+type AgentType = http.Agent | https.Agent;
+
+// eslint-disable-next-line flowtype/no-weak-types
+export default (originalMethod: Function, agent: AgentType, forceGlobalAgent: boolean) => {
+ // eslint-disable-next-line unicorn/prevent-abbreviations
+ return (...args: *) => {
+ let url;
+ let options;
+ let callback;
+
+ if (typeof args[0] === 'string' || args[0] instanceof URL) {
+ url = args[0];
+
+ if (typeof args[1] === 'function') {
+ options = {};
+ callback = args[1];
+ } else {
+ options = {
+ ...args[1],
+ };
+ callback = args[2];
+ }
+ } else {
+ options = {
+ ...args[0],
+ };
+ callback = args[1];
+ }
+
+ if (forceGlobalAgent) {
+ options.agent = agent;
+ } else {
+ if (!options.agent) {
+ options.agent = agent;
+ }
+
+ if (options.agent === http.globalAgent || options.agent === https.globalAgent) {
+ options.agent = agent;
+ }
+ }
+
+ if (url) {
+ // $FlowFixMe
+ return originalMethod(url, options, callback);
+ } else {
+ return originalMethod(options, callback);
+ }
+ };
+};
diff --git a/desktop/node_modules/global-agent/src/utilities/index.js b/desktop/node_modules/global-agent/src/utilities/index.js
new file mode 100644
index 0000000..3412387
--- /dev/null
+++ b/desktop/node_modules/global-agent/src/utilities/index.js
@@ -0,0 +1,5 @@
+// @flow
+
+export {default as bindHttpMethod} from './bindHttpMethod';
+export {default as isUrlMatchingNoProxy} from './isUrlMatchingNoProxy';
+export {default as parseProxyUrl} from './parseProxyUrl';
diff --git a/desktop/node_modules/global-agent/src/utilities/isUrlMatchingNoProxy.js b/desktop/node_modules/global-agent/src/utilities/isUrlMatchingNoProxy.js
new file mode 100644
index 0000000..f2de584
--- /dev/null
+++ b/desktop/node_modules/global-agent/src/utilities/isUrlMatchingNoProxy.js
@@ -0,0 +1,37 @@
+// @flow
+
+import {
+ parse as parseUrl,
+} from 'url';
+import matcher from 'matcher';
+import {
+ UnexpectedStateError,
+} from '../errors';
+
+export default (subjectUrl: string, noProxy: string) => {
+ const subjectUrlTokens = parseUrl(subjectUrl);
+
+ const rules = noProxy.split(/[\s,]+/);
+
+ for (const rule of rules) {
+ const ruleMatch = rule
+ .replace(/^(?<leadingDot>\.)/, '*')
+ .match(/^(?<hostname>.+?)(?::(?<port>\d+))?$/);
+
+ if (!ruleMatch || !ruleMatch.groups) {
+ throw new UnexpectedStateError('Invalid NO_PROXY pattern.');
+ }
+
+ if (!ruleMatch.groups.hostname) {
+ throw new UnexpectedStateError('NO_PROXY entry pattern must include hostname. Use * to match any hostname.');
+ }
+
+ const hostnameIsMatch = matcher.isMatch(subjectUrlTokens.hostname, ruleMatch.groups.hostname);
+
+ if (hostnameIsMatch && (!ruleMatch.groups || !ruleMatch.groups.port || subjectUrlTokens.port && subjectUrlTokens.port === ruleMatch.groups.port)) {
+ return true;
+ }
+ }
+
+ return false;
+};
diff --git a/desktop/node_modules/global-agent/src/utilities/parseProxyUrl.js b/desktop/node_modules/global-agent/src/utilities/parseProxyUrl.js
new file mode 100644
index 0000000..e2e9a6b
--- /dev/null
+++ b/desktop/node_modules/global-agent/src/utilities/parseProxyUrl.js
@@ -0,0 +1,36 @@
+// @flow
+
+import {
+ parse as parseUrl,
+} from 'url';
+import {
+ UnexpectedStateError,
+} from '../errors';
+
+export default (url: string) => {
+ const urlTokens = parseUrl(url);
+
+ if (urlTokens.query !== null) {
+ throw new UnexpectedStateError('Unsupported `GLOBAL_AGENT.HTTP_PROXY` configuration value: URL must not have query.');
+ }
+
+ if (urlTokens.hash !== null) {
+ throw new UnexpectedStateError('Unsupported `GLOBAL_AGENT.HTTP_PROXY` configuration value: URL must not have hash.');
+ }
+
+ if (urlTokens.protocol !== 'http:') {
+ throw new UnexpectedStateError('Unsupported `GLOBAL_AGENT.HTTP_PROXY` configuration value: URL protocol must be "http:".');
+ }
+
+ let port = 80;
+
+ if (urlTokens.port) {
+ port = Number.parseInt(urlTokens.port, 10);
+ }
+
+ return {
+ authorization: urlTokens.auth || null,
+ hostname: urlTokens.hostname,
+ port,
+ };
+};