diff --git a/packages/shared/common/__tests__/internal/events/EventProcessor.test.ts b/packages/shared/common/__tests__/internal/events/EventProcessor.test.ts index d32f78c66c..e972fa46e0 100644 --- a/packages/shared/common/__tests__/internal/events/EventProcessor.test.ts +++ b/packages/shared/common/__tests__/internal/events/EventProcessor.test.ts @@ -131,7 +131,12 @@ describe('given an event processor', () => { }), ); contextDeduplicator = new ContextDeduplicator(); - eventProcessor = new EventProcessor(eventProcessorConfig, clientContext, contextDeduplicator); + eventProcessor = new EventProcessor( + eventProcessorConfig, + clientContext, + {}, + contextDeduplicator, + ); }); afterEach(() => { @@ -788,6 +793,7 @@ describe('given an event processor', () => { eventProcessor = new EventProcessor( eventProcessorConfig, clientContextWithDebug, + {}, contextDeduplicator, ); diff --git a/packages/shared/common/src/internal/events/EventProcessor.ts b/packages/shared/common/src/internal/events/EventProcessor.ts index bda2fe7b8e..8743494214 100644 --- a/packages/shared/common/src/internal/events/EventProcessor.ts +++ b/packages/shared/common/src/internal/events/EventProcessor.ts @@ -5,6 +5,7 @@ import LDEventProcessor from '../../api/subsystem/LDEventProcessor'; import AttributeReference from '../../AttributeReference'; import ContextFilter from '../../ContextFilter'; import { ClientContext } from '../../options'; +import { LDHeaders } from '../../utils'; import { DiagnosticsManager } from '../diagnostics'; import EventSender from './EventSender'; import EventSummarizer, { SummarizedFlagsEvent } from './EventSummarizer'; @@ -106,13 +107,14 @@ export default class EventProcessor implements LDEventProcessor { constructor( private readonly config: EventProcessorOptions, clientContext: ClientContext, + baseHeaders: LDHeaders, private readonly contextDeduplicator?: LDContextDeduplicator, private readonly diagnosticsManager?: DiagnosticsManager, start: boolean = true, ) { this.capacity = config.eventsCapacity; this.logger = clientContext.basicConfiguration.logger; - this.eventSender = new EventSender(clientContext); + this.eventSender = new EventSender(clientContext, baseHeaders); this.contextFilter = new ContextFilter( config.allAttributesPrivate, diff --git a/packages/shared/common/src/internal/events/EventSender.test.ts b/packages/shared/common/src/internal/events/EventSender.test.ts index 5e0e348e29..3bd27d77cf 100644 --- a/packages/shared/common/src/internal/events/EventSender.test.ts +++ b/packages/shared/common/src/internal/events/EventSender.test.ts @@ -112,6 +112,12 @@ describe('given an event sender', () => { eventSender = new EventSender( new ClientContext('sdk-key', basicConfig, { ...mockPlatform, info }), + { + authorization: 'sdk-key', + 'user-agent': 'TestUserAgent/2.0.2', + 'x-launchdarkly-tags': 'application-id/testApplication1 application-version/1.0.0', + 'x-launchdarkly-wrapper': 'Rapper/1.2.3', + }, ); eventSenderResult = await eventSender.sendEventData( diff --git a/packages/shared/common/src/internal/events/EventSender.ts b/packages/shared/common/src/internal/events/EventSender.ts index afee52df19..3d11a14b35 100644 --- a/packages/shared/common/src/internal/events/EventSender.ts +++ b/packages/shared/common/src/internal/events/EventSender.ts @@ -11,7 +11,7 @@ import { LDUnexpectedResponseError, } from '../../errors'; import { ClientContext, getEventsUri } from '../../options'; -import { defaultHeaders, httpErrorMessage, sleep } from '../../utils'; +import { httpErrorMessage, LDHeaders, sleep } from '../../utils'; export default class EventSender implements LDEventSender { private crypto: Crypto; @@ -22,16 +22,14 @@ export default class EventSender implements LDEventSender { private eventsUri: string; private requests: Requests; - constructor(clientContext: ClientContext) { + constructor(clientContext: ClientContext, baseHeaders: LDHeaders) { const { basicConfiguration, platform } = clientContext; const { - sdkKey, - serviceEndpoints: { analyticsEventPath, diagnosticEventPath, includeAuthorizationHeader }, - tags, + serviceEndpoints: { analyticsEventPath, diagnosticEventPath }, } = basicConfiguration; - const { crypto, info, requests } = platform; + const { crypto, requests } = platform; - this.defaultHeaders = defaultHeaders(sdkKey, info, tags, includeAuthorizationHeader); + this.defaultHeaders = { ...baseHeaders }; this.eventsUri = getEventsUri(basicConfiguration.serviceEndpoints, analyticsEventPath, []); this.diagnosticEventsUri = getEventsUri( basicConfiguration.serviceEndpoints, diff --git a/packages/shared/sdk-client/src/LDClientImpl.ts b/packages/shared/sdk-client/src/LDClientImpl.ts index d1c0ac331a..3f3b2b8e41 100644 --- a/packages/shared/sdk-client/src/LDClientImpl.ts +++ b/packages/shared/sdk-client/src/LDClientImpl.ts @@ -86,6 +86,15 @@ export default class LDClientImpl implements LDClient { this.connectionMode = this.config.initialConnectionMode; this.clientContext = new ClientContext(sdkKey, this.config, platform); this.logger = this.config.logger; + + this.baseHeaders = defaultHeaders( + this.sdkKey, + this.platform.info, + this.config.tags, + this.config.serviceEndpoints.includeAuthorizationHeader, + this.config.userAgentHeaderName, + ); + this.flagManager = new FlagManager( this.platform, sdkKey, @@ -97,6 +106,7 @@ export default class LDClientImpl implements LDClient { sdkKey, this.config, platform, + this.baseHeaders, this.diagnosticsManager, !this.isOffline(), ); @@ -113,13 +123,6 @@ export default class LDClientImpl implements LDClient { this.emitter.emit('change', ldContext, flagKeys); }); - this.baseHeaders = defaultHeaders( - this.sdkKey, - this.platform.info, - this.config.tags, - true, - 'x-launchdarkly-user-agent', - ); } /** diff --git a/packages/shared/sdk-client/src/events/createEventProcessor.ts b/packages/shared/sdk-client/src/events/createEventProcessor.ts index 8e9075e7da..6d45036db0 100644 --- a/packages/shared/sdk-client/src/events/createEventProcessor.ts +++ b/packages/shared/sdk-client/src/events/createEventProcessor.ts @@ -1,4 +1,4 @@ -import { ClientContext, internal, Platform } from '@launchdarkly/js-sdk-common'; +import { ClientContext, internal, LDHeaders, Platform } from '@launchdarkly/js-sdk-common'; import Configuration from '../configuration'; @@ -6,6 +6,7 @@ const createEventProcessor = ( clientSideID: string, config: Configuration, platform: Platform, + baseHeaders: LDHeaders, diagnosticsManager?: internal.DiagnosticsManager, start: boolean = false, ): internal.EventProcessor | undefined => { @@ -13,6 +14,7 @@ const createEventProcessor = ( return new internal.EventProcessor( { ...config, eventsCapacity: config.capacity }, new ClientContext(clientSideID, config, platform), + baseHeaders, undefined, diagnosticsManager, start,