Description
The use of the non-standard href property in getUrlFromOptions results in different behavior depending on whether or not Polly is enabled. There is no such property according to the Node.js documentation: https://nodejs.org/docs/latest-v18.x/api/http.html#httprequesturl-options-callback
Unfortunately there are libraries in the wild that use this non-standard property, and assign it an inconsistent/invalid value (I encounters this with the OpenSearch client library: https://github.com/opensearch-project/opensearch-js/blob/main/lib/Connection.js#L207)
Shareable Source
import https from 'https'
import { Polly } from '@pollyjs/core'
import NodeHttpAdapter from '@pollyjs/adapter-node-http'
import InMemoryPersister from './in-memory-persister.js'
function doRequest() {
return new Promise(resolve => {
let data = ''
const req = https.request(
{
host: 'echo.free.beeceptor.com',
path: '/great-shot-kid',
method: 'GET',
// This is non-standard and has no effect on the request
href: 'https://echo.free.beeceptor.com/these-are-not-the-droids-you-are-looking-for'
},
(res) => {
res.on('data', (chunk) => {
data += chunk
})
res.on('end', () => {
const body = JSON.parse(data)
resolve(body.path)
})
}
)
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
})
req.end()
})
}
console.log('Expected:')
console.log(await doRequest())
Polly.register(NodeHttpAdapter)
Polly.register(InMemoryPersister)
const polly = new Polly('node-http-test', {
adapters: ['node-http'],
persister: 'in-memory-persister',
})
console.log('\nActual:')
console.log(await doRequest())
await polly.stop()
Error Message & Stack Trace
N/A in this case. The request succeeds, it's just the wrong request.
Config
Copy the config used to setup the Polly instance:
Polly.register(NodeHttpAdapter)
Polly.register(InMemoryPersister)
const polly = new Polly('node-http-test', {
adapters: ['node-http'],
persister: 'in-memory-persister',
})
Dependencies
Copy the @pollyjs dependencies from package.json:
{
"@pollyjs/adapter-node-http": "^6.0.6",
"@pollyjs/core": "^6.0.6",
"@pollyjs/persister": "^6.0.6"
}
Relevant Links
Environment
OS: darwin 23.6.0
Node.js v18.20.4
npm v10.7.0
Description
The use of the non-standard
hrefproperty ingetUrlFromOptionsresults in different behavior depending on whether or not Polly is enabled. There is no such property according to the Node.js documentation: https://nodejs.org/docs/latest-v18.x/api/http.html#httprequesturl-options-callbackUnfortunately there are libraries in the wild that use this non-standard property, and assign it an inconsistent/invalid value (I encounters this with the OpenSearch client library: https://github.com/opensearch-project/opensearch-js/blob/main/lib/Connection.js#L207)
Shareable Source
Error Message & Stack Trace
N/A in this case. The request succeeds, it's just the wrong request.
Config
Copy the config used to setup the Polly instance:
Dependencies
Copy the @pollyjs dependencies from
package.json:{ "@pollyjs/adapter-node-http": "^6.0.6", "@pollyjs/core": "^6.0.6", "@pollyjs/persister": "^6.0.6" }Relevant Links
Environment
OS: darwin 23.6.0
Node.js v18.20.4
npm v10.7.0