Is there an existing issue for this?
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using? If you use the CDN bundles, please specify the exact bundle (e.g. bundle.tracing.min.js) in your SDK setup.
@sentry/node
SDK Version
7.36.0
Framework Version
No response
Link to Sentry event
No response
SDK Setup
Sentry.init({
integrations: [new Sentry.Integrations.Http({ tracing: true })],
tracesSampleRate: 1.0,
})
Steps to Reproduce
const Sentry = require('@sentry/node')
require('@sentry/tracing')
const HttpsProxyAgent = require('https-proxy-agent')
Sentry.init({
integrations: [new Sentry.Integrations.Http({ tracing: true })],
tracesSampleRate: 1.0,
})
const get = require('https').get
get({
agent: new HttpsProxyAgent.HttpsProxyAgent('http://localhost:8080'),
hostname: 'apple.com',
})
Expected Result
no crash
Actual Result
Crash
TypeError [ERR_INVALID_PROTOCOL]: Protocol "http:" not supported. Expected "https:"
at new NodeError (node:internal/errors:393:5)
at new ClientRequest (node:_http_client:186:11)
at request (node:https:360:10)
at get (node:https:394:15)
at wrappedMethod (…/node_modules/@sentry/node/cjs/integrations/http.js:208:10)
at Object.<anonymous> (…/test.cjs:12:1)
at Module._compile (node:internal/modules/cjs/loader:1159:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
at Module.load (node:internal/modules/cjs/loader:1037:32)
at Module._load (node:internal/modules/cjs/loader:878:12)
The issue that the code that's hooking into https.get expects this to be the https module but due to how the function is called this is the globalThis.
With this being the https module, the code in normalizeRequestArgs() will initialize protocol correctly (this.globalAgent.protocol). But with this being global scope globalThis.globalAgent does not exist, so the function uses requestOptions.agent.protocol which in my code is http:.
Workaround
Setting the protocol of the agent explicitly to https: seems to make it work.
const agent = new HttpsProxyAgent.HttpsProxyAgent('http://localhost:8080')
agent.protocol = 'https:'
Is there an existing issue for this?
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using? If you use the CDN bundles, please specify the exact bundle (e.g.
bundle.tracing.min.js) in your SDK setup.@sentry/node
SDK Version
7.36.0
Framework Version
No response
Link to Sentry event
No response
SDK Setup
Steps to Reproduce
Expected Result
no crash
Actual Result
Crash
The issue that the code that's hooking into https.get expects
thisto be the https module but due to how the function is calledthisis the globalThis.With
thisbeing the https module, the code innormalizeRequestArgs()will initialize protocol correctly (this.globalAgent.protocol). But withthisbeing global scopeglobalThis.globalAgentdoes not exist, so the function usesrequestOptions.agent.protocolwhich in my code ishttp:.Workaround
Setting the protocol of the agent explicitly to
https:seems to make it work.