lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

lib: Match proxy support with request module - #1978

Closed
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy
Closed

lib: Match proxy support with request module#1978
imatlopez wants to merge 7 commits into
nodejs:masterfrom
imatlopez:noproxy

Conversation

@imatlopez

@imatlopezimatlopez commented Nov 28, 2019

Copy link
Copy Markdown
Contributor
Checklist
  • npm install && npm test passes
  • documentation is changed or added
  • commit message follows commit guidelines
Description of change

Per #1176 (comment), closes#1751

When using the no_proxy environmental variable I noticed that some installations would fail when NODE_CONFIG_PROXY was set (or its equivalent). From inspecting this code plus how its dependency, https://github.com/request/request, I noticed it already has full proxy support. Changing env itself might lead to side effects.

@imatlopezimatlopez changed the title lib: Delegate proxy support to request modulelib: Match proxy support with request moduleNov 28, 2019
@rvagg

Copy link
Copy Markdown
Member

It's unfortunate we have to include so much additional logic just to get proper no_proxy support, we're basically digging a bigger hole because of the support for non-standard methods of specifying proxies. One option might be to just rip it out and tell the user to just use standard *_PROXY env vars and be done with it but that's probably going to be too painful for enterprise users that have this baked in already.

Regarding the breaking change - would it really be breaking? In this and the current version, gyp.opts.proxy clobbers whatever you have set. If you have HTTPS_PROXY set only then in the current version it'll flow through and request will handle it properly, in this version you're handling it in the same way as request would have handled it previously. When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

I could imagine some weirdness if you had a proxy setting that didn't pass our basic regex: if (/^https?:\/\//i.test(proxyUrl)) {. request does a url.parse() which I think is assumed to throw if it's bad and so there's scope for some permutation of a proxy setting in an env var that's not picked up here but is picked up by request. But, you'd get an informational message here and you're probably not doing something sensible if you're getting that anyway .. I think.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

but that's probably going to be too painful for enterprise users that have this baked in already

This is actually why I am here, the only way I make proxies work is to not specify them outside env var.

When you provide a proxy option to request, it won't even invoke the getProxyFromURI.js logic as far as I can tell, so it's clobbered by what's done here.

Exactly, which is why no_proxy is never handled correctly. My initial concern was with env vars leaking elsewhere if they were changed within the program, so I ripped out all the request code related to it (including the url.parse part--which is deprecated sadly). A benefit is that proxy behavior is now set in stone if request goes away.

@imatlopez

Copy link
Copy Markdown
ContributorAuthor

@rvagg anything pending here?

rvagg pushed a commit that referenced this pull request Dec 15, 2019
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
@rvagg

Copy link
Copy Markdown
Member

landed in 3bcba2a, labelled semver-minor

@rvaggrvagg closed this Dec 15, 2019
@imatlopez
imatlopez deleted the noproxy branch December 16, 2019 01:57
rvagg pushed a commit that referenced this pull request Jan 3, 2020
PR-URL: #1978
Reviewed-By: Rod Vagg <rod@vagg.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@imatlopez@rvagg