diff --git a/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts b/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts index 7a0b17ae3..6314689b6 100644 --- a/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts +++ b/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts @@ -251,3 +251,31 @@ describe('error handling', (): void => { expect(response.isTimedOut).toBe(false); }); }); + +describe('requesterOptions', () => { + it('allows to pass requesterOptions', async () => { + const body = JSON.stringify({ foo: 'bar' }); + const requesterTmp = createNodeHttpRequester({ + requesterOptions: { + headers: { + 'x-algolia-foo': 'bar', + }, + }, + }); + + nock('https://algolia-dns.net', { + reqheaders: { + ...headers, + 'x-algolia-foo': 'bar', + }, + }) + .post('/foo') + .query({ 'x-algolia-header': 'foo' }) + .reply(200, body); + + const response = await requesterTmp.send(requestStub); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + }); +}); diff --git a/packages/requester-node-http/src/createNodeHttpRequester.ts b/packages/requester-node-http/src/createNodeHttpRequester.ts index c6bb94c03..ec3e66b00 100644 --- a/packages/requester-node-http/src/createNodeHttpRequester.ts +++ b/packages/requester-node-http/src/createNodeHttpRequester.ts @@ -10,6 +10,7 @@ export type NodeHttpRequesterOptions = { agent?: https.Agent | http.Agent; httpAgent?: http.Agent; httpsAgent?: https.Agent; + requesterOptions?: https.RequestOptions; }; const agentOptions = { keepAlive: true }; @@ -20,6 +21,7 @@ export function createNodeHttpRequester({ agent: userGlobalAgent, httpAgent: userHttpAgent, httpsAgent: userHttpsAgent, + requesterOptions = {}, }: NodeHttpRequesterOptions = {}): Requester & Destroyable { const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent; const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent; @@ -32,11 +34,15 @@ export function createNodeHttpRequester({ const path = url.query === null ? url.pathname : `${url.pathname}?${url.query}`; const options: https.RequestOptions = { + ...requesterOptions, agent: url.protocol === 'https:' ? httpsAgent : httpAgent, hostname: url.hostname, path, method: request.method, - headers: request.headers, + headers: { + ...(requesterOptions && requesterOptions.headers ? requesterOptions.headers : {}), + ...request.headers, + }, ...(url.port !== undefined ? { port: url.port || '' } : {}), };