From 9ec0ee62f1c370e85158698941e764b1d3ef2f87 Mon Sep 17 00:00:00 2001 From: Edward Mao Date: Tue, 17 Dec 2019 17:25:13 -0600 Subject: [PATCH 1/4] Set request headers to ones provided in transportOpts in XHR transport --- packages/browser/src/transports/xhr.ts | 3 +++ packages/types/src/transport.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/browser/src/transports/xhr.ts b/packages/browser/src/transports/xhr.ts index c2cd1d140af4..1725697108e7 100644 --- a/packages/browser/src/transports/xhr.ts +++ b/packages/browser/src/transports/xhr.ts @@ -46,6 +46,9 @@ export class XHRTransport extends BaseTransport { }; request.open('POST', this.url); + for (const header in this.options.headers) { + request.setRequestHeader(header, this.options.headers[header]); + } request.send(JSON.stringify(event)); }), ); diff --git a/packages/types/src/transport.ts b/packages/types/src/transport.ts index 23d874a871ee..dc326ac75a5b 100644 --- a/packages/types/src/transport.ts +++ b/packages/types/src/transport.ts @@ -27,7 +27,7 @@ export interface TransportOptions { /** Sentry DSN */ dsn: DsnLike; /** Define custom headers */ - headers?: object; + headers?: { [index: string]: string }; /** Set a HTTP proxy that should be used for outbound requests. */ httpProxy?: string; /** Set a HTTPS proxy that should be used for outbound requests. */ From 28ef93408f3f1541e2540331c52f2d2f873133b2 Mon Sep 17 00:00:00 2001 From: edjmao Date: Wed, 18 Dec 2019 14:58:45 -0600 Subject: [PATCH 2/4] Rename variable in transport header object. Co-Authored-By: Sijawusz Pur Rahnama --- packages/types/src/transport.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/src/transport.ts b/packages/types/src/transport.ts index dc326ac75a5b..e5b0172b75b7 100644 --- a/packages/types/src/transport.ts +++ b/packages/types/src/transport.ts @@ -27,7 +27,7 @@ export interface TransportOptions { /** Sentry DSN */ dsn: DsnLike; /** Define custom headers */ - headers?: { [index: string]: string }; + headers?: { [key: string]: string }; /** Set a HTTP proxy that should be used for outbound requests. */ httpProxy?: string; /** Set a HTTPS proxy that should be used for outbound requests. */ From 3fdc4f3ebab7944b751a97b4d14337c68308de08 Mon Sep 17 00:00:00 2001 From: Edward Mao Date: Wed, 18 Dec 2019 15:02:23 -0600 Subject: [PATCH 3/4] Lint fixes --- packages/apm/test/span.test.ts | 4 +++- packages/browser/src/transports/xhr.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/apm/test/span.test.ts b/packages/apm/test/span.test.ts index d7be6241aae2..eea2cb47b7cb 100644 --- a/packages/apm/test/span.test.ts +++ b/packages/apm/test/span.test.ts @@ -198,7 +198,9 @@ describe('Span', () => { spanOne.initFinishedSpans(); const childSpanOne = spanOne.child(); childSpanOne.finish(); - hub.configureScope((scope) => { scope.setSpan(spanOne) }) + hub.configureScope(scope => { + scope.setSpan(spanOne); + }); const spanTwo = new Span({ transaction: 'testTwo', sampled: false }, hub); spanTwo.initFinishedSpans(); diff --git a/packages/browser/src/transports/xhr.ts b/packages/browser/src/transports/xhr.ts index 1725697108e7..5ed705cff79c 100644 --- a/packages/browser/src/transports/xhr.ts +++ b/packages/browser/src/transports/xhr.ts @@ -47,7 +47,9 @@ export class XHRTransport extends BaseTransport { request.open('POST', this.url); for (const header in this.options.headers) { - request.setRequestHeader(header, this.options.headers[header]); + if (this.options.headers.hasOwnProperty(header)) { + request.setRequestHeader(header, this.options.headers[header]); + } } request.send(JSON.stringify(event)); }), From 5f0d843bf5f048d591828bc153eddee97533d86c Mon Sep 17 00:00:00 2001 From: Edward Mao Date: Thu, 19 Dec 2019 15:08:50 -0600 Subject: [PATCH 4/4] Add headers to fetch transport with unit tests. --- packages/browser/src/transports/fetch.ts | 4 +++ .../test/unit/transports/fetch.test.ts | 26 +++++++++++++++++++ .../browser/test/unit/transports/xhr.test.ts | 18 +++++++++++++ 3 files changed, 48 insertions(+) diff --git a/packages/browser/src/transports/fetch.ts b/packages/browser/src/transports/fetch.ts index 501fc8e33deb..3d3a5831ea88 100644 --- a/packages/browser/src/transports/fetch.ts +++ b/packages/browser/src/transports/fetch.ts @@ -32,6 +32,10 @@ export class FetchTransport extends BaseTransport { referrerPolicy: (supportsReferrerPolicy() ? 'origin' : '') as ReferrerPolicy, }; + if (this.options.headers !== undefined) { + defaultOptions.headers = this.options.headers; + } + return this._buffer.add( new SyncPromise((resolve, reject) => { global diff --git a/packages/browser/test/unit/transports/fetch.test.ts b/packages/browser/test/unit/transports/fetch.test.ts index 5a237f455945..05af0492dde7 100644 --- a/packages/browser/test/unit/transports/fetch.test.ts +++ b/packages/browser/test/unit/transports/fetch.test.ts @@ -129,5 +129,31 @@ describe('FetchTransport', () => { dateStub.restore(); }); + + it('passes in headers', async () => { + transport = new Transports.FetchTransport({ + dsn: testDsn, + headers: { + Authorization: 'Basic GVzdDp0ZXN0Cg==', + }, + }); + const response = { status: 200 }; + + fetch.returns(Promise.resolve(response)); + + const res = await transport.sendEvent(payload); + + expect(res.status).equal(Status.Success); + expect( + fetch.calledWith(transportUrl, { + body: JSON.stringify(payload), + headers: { + Authorization: 'Basic GVzdDp0ZXN0Cg==', + }, + method: 'POST', + referrerPolicy: 'origin', + }), + ).equal(true); + }); }); }); diff --git a/packages/browser/test/unit/transports/xhr.test.ts b/packages/browser/test/unit/transports/xhr.test.ts index 603925208a84..6162ed68926f 100644 --- a/packages/browser/test/unit/transports/xhr.test.ts +++ b/packages/browser/test/unit/transports/xhr.test.ts @@ -102,5 +102,23 @@ describe('XHRTransport', () => { dateStub.restore(); }); + + it('passes in headers', async () => { + transport = new Transports.XHRTransport({ + dsn: testDsn, + headers: { + Authorization: 'Basic GVzdDp0ZXN0Cg==', + }, + }); + + server.respondWith('POST', transportUrl, [200, {}, '']); + const res = await transport.sendEvent(payload); + const request = server.requests[0]; + + expect(res.status).equal(Status.Success); + const requestHeaders: { [key: string]: string } = request.requestHeaders as { [key: string]: string }; + const authHeaderLabel: string = 'Authorization'; + expect(requestHeaders[authHeaderLabel]).equal('Basic GVzdDp0ZXN0Cg=='); + }); }); });