@crimson-education/browser-logger 5.0.3 → 5.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -120,6 +120,50 @@ describe('posthogReporter', () => {
120
120
  });
121
121
  expect(posthogMock.stopSessionRecording).toHaveBeenCalled();
122
122
  });
123
+ it('suppresses configured trackEvent messages from PostHog analytics', () => {
124
+ const reporter = posthogReporter({
125
+ service: 'crimson-app-frontend',
126
+ application: 'crimson-app',
127
+ environment: 'production',
128
+ version: '1.2.3',
129
+ }, {
130
+ apiKey: 'ph_key',
131
+ apiHost: 'https://eu.i.posthog.com',
132
+ ignoreTrackEventPatterns: ['feedback fetch success'],
133
+ });
134
+ reporter.trackEvent({
135
+ message: 'feedback fetch success',
136
+ level: LogLevel.Info,
137
+ });
138
+ expect(posthogMock.capture).not.toHaveBeenCalled();
139
+ reporter.trackEvent({
140
+ message: 'message-sent',
141
+ level: LogLevel.Info,
142
+ });
143
+ expect(posthogMock.capture).toHaveBeenCalledWith('message-sent', {
144
+ message: 'message-sent',
145
+ level: LogLevel.Info,
146
+ });
147
+ });
148
+ it('does not suppress trackEvent messages unless configured', () => {
149
+ const reporter = posthogReporter({
150
+ service: 'crimson-app-frontend',
151
+ application: 'crimson-app',
152
+ environment: 'production',
153
+ version: '1.2.3',
154
+ }, {
155
+ apiKey: 'ph_key',
156
+ apiHost: 'https://eu.i.posthog.com',
157
+ });
158
+ reporter.trackEvent({
159
+ message: 'feedback fetch success',
160
+ level: LogLevel.Info,
161
+ });
162
+ expect(posthogMock.capture).toHaveBeenCalledWith('feedback fetch success', {
163
+ message: 'feedback fetch success',
164
+ level: LogLevel.Info,
165
+ });
166
+ });
123
167
  it('adds compatibility properties in before_send', () => {
124
168
  const beforeSend = jest.fn((captureResult) => captureResult);
125
169
  posthogReporter({
@@ -1 +1 @@
1
- {"version":3,"file":"posthogReporter.test.js","sourceRoot":"","sources":["../../src/reporters/posthogReporter.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"posthogReporter.test.js","sourceRoot":"","sources":["../../src/reporters/posthogReporter.test.ts"],"names":[],"mappings":"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"}
@@ -145,6 +145,11 @@ export interface ReporterConfigBase {
145
145
  * This is useful to prevent data of no use for the reporter, or if the data keys are too long.
146
146
  */
147
147
  ignoreMetadataPatterns?: (string | RegExp)[];
148
+ /**
149
+ * Ignore specific trackEvent messages from analytics-style reporters.
150
+ * This keeps technical log noise out of product analytics/RUM while preserving log reporter output.
151
+ */
152
+ ignoreTrackEventPatterns?: (string | RegExp)[];
148
153
  }
149
154
  /**
150
155
  * A Reporter is a service that can receive Analytics data.
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/types/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/types/reporter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crimson-education/browser-logger",
3
- "version": "5.0.3",
3
+ "version": "5.0.4",
4
4
  "description": "An abstract logger and reporting utility for browser environments",
5
5
  "scripts": {
6
6
  "prepack": "npm run build",
@@ -0,0 +1,15 @@
1
+ function patternMatches(message: string, pattern: string | RegExp): boolean {
2
+ if (typeof pattern === 'string') {
3
+ return message === pattern;
4
+ }
5
+
6
+ return pattern.test(message);
7
+ }
8
+
9
+ export function shouldSuppressAnalyticsEvent(message: string, patterns?: (string | RegExp)[]): boolean {
10
+ if (!patterns?.length) {
11
+ return false;
12
+ }
13
+
14
+ return patterns.some((pattern) => patternMatches(message, pattern));
15
+ }
@@ -0,0 +1,229 @@
1
+ jest.mock('@datadog/browser-rum', () => ({
2
+ __esModule: true,
3
+ datadogRum: {
4
+ init: jest.fn(),
5
+ addAction: jest.fn(),
6
+ setGlobalContextProperty: jest.fn(),
7
+ removeGlobalContextProperty: jest.fn(),
8
+ setUser: jest.fn(),
9
+ startView: jest.fn(),
10
+ addError: jest.fn(),
11
+ addFeatureFlagEvaluation: jest.fn(),
12
+ startSessionReplayRecording: jest.fn(),
13
+ stopSessionReplayRecording: jest.fn(),
14
+ },
15
+ DefaultPrivacyLevel: {},
16
+ }));
17
+
18
+ jest.mock('@datadog/browser-logs', () => ({
19
+ __esModule: true,
20
+ HandlerType: {
21
+ http: 'http',
22
+ },
23
+ datadogLogs: {
24
+ init: jest.fn(),
25
+ setGlobalContextProperty: jest.fn(),
26
+ removeGlobalContextProperty: jest.fn(),
27
+ logger: {
28
+ setHandler: jest.fn(),
29
+ debug: jest.fn(),
30
+ info: jest.fn(),
31
+ warn: jest.fn(),
32
+ error: jest.fn(),
33
+ },
34
+ },
35
+ }));
36
+
37
+ jest.mock('../logger/datadogTransport', () => ({
38
+ __esModule: true,
39
+ datadogTransport: jest.fn(() => ({ log: jest.fn() })),
40
+ }));
41
+
42
+ import { datadogLogs } from '@datadog/browser-logs';
43
+ import { datadogRum } from '@datadog/browser-rum';
44
+ import { LogLevel } from '../types';
45
+ import { datadogReporter } from './datadogReporter';
46
+
47
+ const datadogLogsMock = datadogLogs as unknown as {
48
+ init: jest.Mock;
49
+ setGlobalContextProperty: jest.Mock;
50
+ removeGlobalContextProperty: jest.Mock;
51
+ logger: {
52
+ setHandler: jest.Mock;
53
+ debug: jest.Mock;
54
+ info: jest.Mock;
55
+ warn: jest.Mock;
56
+ error: jest.Mock;
57
+ };
58
+ };
59
+
60
+ const datadogRumMock = datadogRum as unknown as {
61
+ init: jest.Mock;
62
+ addAction: jest.Mock;
63
+ setGlobalContextProperty: jest.Mock;
64
+ removeGlobalContextProperty: jest.Mock;
65
+ setUser: jest.Mock;
66
+ startView: jest.Mock;
67
+ addError: jest.Mock;
68
+ addFeatureFlagEvaluation: jest.Mock;
69
+ startSessionReplayRecording: jest.Mock;
70
+ stopSessionReplayRecording: jest.Mock;
71
+ };
72
+
73
+ describe('datadogReporter', () => {
74
+ beforeEach(() => {
75
+ jest.clearAllMocks();
76
+ Object.defineProperty(globalThis, 'window', {
77
+ configurable: true,
78
+ value: {
79
+ location: {
80
+ hostname: 'app.crimsoneducation.org',
81
+ },
82
+ },
83
+ });
84
+ });
85
+
86
+ it('can initialize logs without rum', () => {
87
+ const reporter = datadogReporter(
88
+ {
89
+ service: 'crimson-app-frontend',
90
+ application: 'crimson-app',
91
+ environment: 'production',
92
+ version: '1.2.3',
93
+ },
94
+ {
95
+ applicationId: 'app-id',
96
+ clientToken: 'client-token',
97
+ site: 'datadoghq.eu',
98
+ rumEnabled: false,
99
+ logsEnabled: true,
100
+ },
101
+ );
102
+
103
+ expect(datadogLogsMock.init).toHaveBeenCalled();
104
+ expect(datadogRumMock.init).not.toHaveBeenCalled();
105
+
106
+ reporter.addMetadata({
107
+ namespace: 'production',
108
+ clearMe: null,
109
+ });
110
+
111
+ expect(datadogLogsMock.setGlobalContextProperty).toHaveBeenCalledWith('namespace', 'production');
112
+ expect(datadogLogsMock.removeGlobalContextProperty).toHaveBeenCalledWith('clearMe');
113
+ expect(datadogRumMock.setGlobalContextProperty).not.toHaveBeenCalled();
114
+
115
+ reporter.reportError?.(new Error('broken'), {
116
+ routeName: 'messages',
117
+ });
118
+
119
+ expect(datadogLogsMock.logger.error).toHaveBeenCalledWith(
120
+ 'broken',
121
+ expect.objectContaining({
122
+ routeName: 'messages',
123
+ errorName: 'Error',
124
+ errorStack: expect.any(String),
125
+ }),
126
+ );
127
+ expect(datadogRumMock.addError).not.toHaveBeenCalled();
128
+ });
129
+
130
+ it('can initialize rum without logs', () => {
131
+ const reporter = datadogReporter(
132
+ {
133
+ service: 'student-center-frontend',
134
+ application: 'core-student-center',
135
+ environment: 'production',
136
+ version: '2.0.0',
137
+ },
138
+ {
139
+ applicationId: 'app-id',
140
+ clientToken: 'client-token',
141
+ site: 'datadoghq.eu',
142
+ rumEnabled: true,
143
+ logsEnabled: false,
144
+ },
145
+ );
146
+
147
+ expect(datadogRumMock.init).toHaveBeenCalled();
148
+ expect(datadogLogsMock.init).not.toHaveBeenCalled();
149
+
150
+ reporter.trackEvent({
151
+ message: 'message-sent',
152
+ metadata: {
153
+ userId: '123',
154
+ },
155
+ });
156
+ expect(datadogRumMock.addAction).toHaveBeenCalledWith('message-sent', expect.objectContaining({ userId: '123' }));
157
+
158
+ reporter.reportError?.(new Error('broken'));
159
+ expect(datadogRumMock.addError).toHaveBeenCalled();
160
+ expect(datadogLogsMock.logger.error).not.toHaveBeenCalled();
161
+ });
162
+
163
+ it('suppresses configured trackEvent messages from rum actions', () => {
164
+ const reporter = datadogReporter(
165
+ {
166
+ service: 'crimson-app-frontend',
167
+ application: 'crimson-app',
168
+ environment: 'production',
169
+ version: '1.2.3',
170
+ },
171
+ {
172
+ applicationId: 'app-id',
173
+ clientToken: 'client-token',
174
+ site: 'datadoghq.eu',
175
+ ignoreTrackEventPatterns: ['TIM_LOGIN_SUCCESS'],
176
+ },
177
+ );
178
+
179
+ reporter.trackEvent({
180
+ message: 'TIM_LOGIN_SUCCESS',
181
+ level: LogLevel.Info,
182
+ metadata: {
183
+ userId: '123',
184
+ },
185
+ });
186
+
187
+ expect(datadogRumMock.addAction).not.toHaveBeenCalled();
188
+
189
+ reporter.trackEvent({
190
+ message: 'message-sent',
191
+ level: LogLevel.Info,
192
+ });
193
+
194
+ expect(datadogRumMock.addAction).toHaveBeenCalledWith(
195
+ 'message-sent',
196
+ expect.objectContaining({
197
+ level: LogLevel.Info,
198
+ }),
199
+ );
200
+ });
201
+
202
+ it('does not suppress trackEvent messages unless configured', () => {
203
+ const reporter = datadogReporter(
204
+ {
205
+ service: 'crimson-app-frontend',
206
+ application: 'crimson-app',
207
+ environment: 'production',
208
+ version: '1.2.3',
209
+ },
210
+ {
211
+ applicationId: 'app-id',
212
+ clientToken: 'client-token',
213
+ site: 'datadoghq.eu',
214
+ },
215
+ );
216
+
217
+ reporter.trackEvent({
218
+ message: 'TIM_LOGIN_SUCCESS',
219
+ level: LogLevel.Info,
220
+ });
221
+
222
+ expect(datadogRumMock.addAction).toHaveBeenCalledWith(
223
+ 'TIM_LOGIN_SUCCESS',
224
+ expect.objectContaining({
225
+ level: LogLevel.Info,
226
+ }),
227
+ );
228
+ });
229
+ });
@@ -14,6 +14,7 @@ import { datadogLogs, HandlerType, LogsInitConfiguration } from '@datadog/browse
14
14
  import { datadogRum, DefaultPrivacyLevel, RumInitConfiguration } from '@datadog/browser-rum';
15
15
  import { logTransports } from '../logger';
16
16
  import { DatadogLogTransportConfig, datadogTransport } from '../logger/datadogTransport';
17
+ import { shouldSuppressAnalyticsEvent } from './analyticsNoise';
17
18
 
18
19
  // User frustration detection for Datadog Gen2
19
20
  class DatadogFrustrationDetector {
@@ -105,6 +106,16 @@ class DatadogFrustrationDetector {
105
106
  }
106
107
 
107
108
  export interface DatadogReporterConfig extends ReporterConfigBase {
109
+ /**
110
+ * Enable Datadog Browser Logs initialization and log transport wiring.
111
+ * Defaults to true.
112
+ */
113
+ logsEnabled?: boolean;
114
+ /**
115
+ * Enable Datadog Browser RUM initialization.
116
+ * Defaults to true.
117
+ */
118
+ rumEnabled?: boolean;
108
119
  /** The RUM application ID. */
109
120
  applicationId: string;
110
121
  /** A Datadog client token (Generated in the RUM Page) */
@@ -241,6 +252,8 @@ export interface DatadogReporterConfig extends ReporterConfigBase {
241
252
 
242
253
  export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig): IReporter {
243
254
  const isLocalhost = window.location.hostname === 'localhost';
255
+ const logsEnabled = config.logsEnabled ?? true;
256
+ const rumEnabled = config.rumEnabled ?? true;
244
257
 
245
258
  // Don't forward error logs by default, do enable the log transport by default
246
259
  // forwardErrorsToLogs incorrectly is called forwardConsoleLogs, this is for backwards compatibility
@@ -248,7 +261,7 @@ export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig
248
261
  const enableLogTransport = config.logTransport !== false;
249
262
 
250
263
  // Only init datadog logs if something is using it.
251
- if (forwardErrorsToLogs === true || enableLogTransport === true) {
264
+ if (logsEnabled && (forwardErrorsToLogs === true || enableLogTransport === true)) {
252
265
  datadogLogs.init({
253
266
  site: config.site as any,
254
267
  clientToken: config.clientToken,
@@ -270,45 +283,67 @@ export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig
270
283
  }
271
284
 
272
285
  // Add the datadog log transport
273
- if (enableLogTransport) {
286
+ if (logsEnabled && enableLogTransport) {
274
287
  logTransports.push(datadogTransport(typeof config.logTransport === 'boolean' ? {} : config.logTransport));
275
288
  }
276
289
 
277
- datadogRum.init({
278
- enableExperimentalFeatures: ['feature_flags'],
279
- site: config.site as any,
280
- clientToken: config.clientToken,
281
- applicationId: config.applicationId,
282
- service: info.service,
283
- env: info.environment,
284
- version: config.version ?? info.version,
285
-
286
- usePartitionedCrossSiteSessionCookie: config.usePartitionedCrossSiteSessionCookie,
287
- // Use correct Datadog v6 SDK options
288
- sessionSampleRate: config.sessionSampleRate ?? config.rumSampleRate ?? config.sampleRate ?? 100,
289
- sessionReplaySampleRate: config.sessionReplaySampleRate?? config.replaySampleRate ?? 100,
290
-
291
- // Track interactions (Note: trackFrustrations is not available in Datadog v6)
292
- trackUserInteractions: config.trackUserInteractions ?? config.trackInteractions ?? false,
293
-
294
- useSecureSessionCookie: config.useSecureSessionCookie ?? !isLocalhost,
295
- // Note: useCrossSiteSessionCookie is not available in newer Datadog versions
296
- trackSessionAcrossSubdomains: config.trackSessionAcrossSubdomains,
297
- trackViewsManually: config.trackViewsManually ?? false,
298
- actionNameAttribute: config.actionNameAttribute ?? 'data-analytics-name',
299
- beforeSend: config.beforeSend,
300
-
301
- defaultPrivacyLevel: config.defaultPrivacyLevel ?? 'mask-user-input',
302
- allowedTracingUrls: config.allowedTracingUrls ?? config.allowedTrackingOrigins,
303
-
304
- excludedActivityUrls: config.excludedActivityUrls,
305
- });
306
-
307
- // Initialize frustration detector
308
- new DatadogFrustrationDetector(config);
290
+ if (rumEnabled) {
291
+ datadogRum.init({
292
+ enableExperimentalFeatures: ['feature_flags'],
293
+ site: config.site as any,
294
+ clientToken: config.clientToken,
295
+ applicationId: config.applicationId,
296
+ service: info.service,
297
+ env: info.environment,
298
+ version: config.version ?? info.version,
299
+
300
+ usePartitionedCrossSiteSessionCookie: config.usePartitionedCrossSiteSessionCookie,
301
+ // Use correct Datadog v6 SDK options
302
+ sessionSampleRate: config.sessionSampleRate ?? config.rumSampleRate ?? config.sampleRate ?? 100,
303
+ sessionReplaySampleRate: config.sessionReplaySampleRate ?? config.replaySampleRate ?? 100,
304
+
305
+ // Track interactions (Note: trackFrustrations is not available in Datadog v6)
306
+ trackUserInteractions: config.trackUserInteractions ?? config.trackInteractions ?? false,
307
+
308
+ useSecureSessionCookie: config.useSecureSessionCookie ?? !isLocalhost,
309
+ // Note: useCrossSiteSessionCookie is not available in newer Datadog versions
310
+ trackSessionAcrossSubdomains: config.trackSessionAcrossSubdomains,
311
+ trackViewsManually: config.trackViewsManually ?? false,
312
+ actionNameAttribute: config.actionNameAttribute ?? 'data-analytics-name',
313
+ beforeSend: config.beforeSend,
314
+
315
+ defaultPrivacyLevel: config.defaultPrivacyLevel ?? 'mask-user-input',
316
+ allowedTracingUrls: config.allowedTracingUrls ?? config.allowedTrackingOrigins,
317
+
318
+ excludedActivityUrls: config.excludedActivityUrls,
319
+ });
320
+
321
+ // Initialize frustration detector
322
+ new DatadogFrustrationDetector(config);
323
+ }
324
+
325
+ function normalizeErrorForLogs(error: ReportError) {
326
+ if (error instanceof Error) {
327
+ return {
328
+ message: error.message,
329
+ name: error.name,
330
+ stack: error.stack,
331
+ };
332
+ }
333
+
334
+ return {
335
+ message: String(error),
336
+ };
337
+ }
309
338
 
310
339
  const reporter: IReporter = {
311
340
  trackEvent: function (event: ReporterEvent): void {
341
+ if (!rumEnabled) {
342
+ return;
343
+ }
344
+ if (shouldSuppressAnalyticsEvent(event.message, config.ignoreTrackEventPatterns)) {
345
+ return;
346
+ }
312
347
  datadogRum.addAction(event.message, {
313
348
  level: event.level,
314
349
  ...event.metadata,
@@ -317,6 +352,9 @@ export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig
317
352
  });
318
353
  },
319
354
  addBreadcrumb: function (breadcrumb: ReporterBreadcrumb): void {
355
+ if (!rumEnabled) {
356
+ return;
357
+ }
320
358
  datadogRum.addAction(breadcrumb.message, {
321
359
  ...breadcrumb.metadata,
322
360
  category: breadcrumb.category,
@@ -325,20 +363,29 @@ export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig
325
363
  addMetadata: function (metadata: Metadata): void {
326
364
  for (const [key, value] of Object.entries(metadata)) {
327
365
  if (value !== null) {
328
- datadogRum.setGlobalContextProperty(key, value);
329
-
330
- // Note, this will add duplicate context data in logs.
331
- // But this is valuable for logs ingested outside of the browser logger.
332
- datadogLogs.setGlobalContextProperty(key, value);
366
+ if (rumEnabled) {
367
+ datadogRum.setGlobalContextProperty(key, value);
368
+ }
369
+ if (logsEnabled) {
370
+ // Note, this will add duplicate context data in logs.
371
+ // But this is valuable for logs ingested outside of the browser logger.
372
+ datadogLogs.setGlobalContextProperty(key, value);
373
+ }
333
374
  } else {
334
- datadogRum.removeGlobalContextProperty(key);
335
-
336
- // But this is valuable for logs ingested outside of the browser logger.
337
- datadogLogs.removeGlobalContextProperty(key);
375
+ if (rumEnabled) {
376
+ datadogRum.removeGlobalContextProperty(key);
377
+ }
378
+ if (logsEnabled) {
379
+ // But this is valuable for logs ingested outside of the browser logger.
380
+ datadogLogs.removeGlobalContextProperty(key);
381
+ }
338
382
  }
339
383
  }
340
384
  },
341
385
  setUser: function (user: ReportUser | null): void {
386
+ if (!rumEnabled) {
387
+ return;
388
+ }
342
389
  if (user) {
343
390
  datadogRum.setUser({
344
391
  ...user,
@@ -351,9 +398,15 @@ export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig
351
398
  }
352
399
  },
353
400
  setRouteName: function (routeName: string): void {
401
+ if (!rumEnabled) {
402
+ return;
403
+ }
354
404
  reporter.addMetadata({ routeName });
355
405
  },
356
406
  setPageName: function (pageName: string): void {
407
+ if (!rumEnabled) {
408
+ return;
409
+ }
357
410
  if (config.trackViewsManually) {
358
411
  datadogRum.startView(pageName);
359
412
  } else {
@@ -361,15 +414,35 @@ export function datadogReporter(info: ServiceInfo, config: DatadogReporterConfig
361
414
  }
362
415
  },
363
416
  reportError: function (error: ReportError, metadata?: Metadata): void {
364
- datadogRum.addError(error, metadata);
417
+ if (rumEnabled) {
418
+ datadogRum.addError(error, metadata);
419
+ return;
420
+ }
421
+ if (logsEnabled) {
422
+ const normalized = normalizeErrorForLogs(error);
423
+ datadogLogs.logger.error(normalized.message, {
424
+ ...metadata,
425
+ errorName: normalized.name,
426
+ errorStack: normalized.stack,
427
+ });
428
+ }
365
429
  },
366
430
  reportFeatureFlag: function (flag: ReporterFlag): void {
431
+ if (!rumEnabled) {
432
+ return;
433
+ }
367
434
  datadogRum.addFeatureFlagEvaluation(flag.name, flag.value);
368
435
  },
369
436
  recordSession: function (): void {
437
+ if (!rumEnabled) {
438
+ return;
439
+ }
370
440
  datadogRum.startSessionReplayRecording();
371
441
  },
372
442
  recordSessionStop: function (): void {
443
+ if (!rumEnabled) {
444
+ return;
445
+ }
373
446
  datadogRum.stopSessionReplayRecording();
374
447
  },
375
448
  };
@@ -154,6 +154,64 @@ describe('posthogReporter', () => {
154
154
  expect(posthogMock.stopSessionRecording).toHaveBeenCalled();
155
155
  });
156
156
 
157
+ it('suppresses configured trackEvent messages from PostHog analytics', () => {
158
+ const reporter = posthogReporter(
159
+ {
160
+ service: 'crimson-app-frontend',
161
+ application: 'crimson-app',
162
+ environment: 'production',
163
+ version: '1.2.3',
164
+ },
165
+ {
166
+ apiKey: 'ph_key',
167
+ apiHost: 'https://eu.i.posthog.com',
168
+ ignoreTrackEventPatterns: ['feedback fetch success'],
169
+ },
170
+ );
171
+
172
+ reporter.trackEvent({
173
+ message: 'feedback fetch success',
174
+ level: LogLevel.Info,
175
+ });
176
+
177
+ expect(posthogMock.capture).not.toHaveBeenCalled();
178
+
179
+ reporter.trackEvent({
180
+ message: 'message-sent',
181
+ level: LogLevel.Info,
182
+ });
183
+
184
+ expect(posthogMock.capture).toHaveBeenCalledWith('message-sent', {
185
+ message: 'message-sent',
186
+ level: LogLevel.Info,
187
+ });
188
+ });
189
+
190
+ it('does not suppress trackEvent messages unless configured', () => {
191
+ const reporter = posthogReporter(
192
+ {
193
+ service: 'crimson-app-frontend',
194
+ application: 'crimson-app',
195
+ environment: 'production',
196
+ version: '1.2.3',
197
+ },
198
+ {
199
+ apiKey: 'ph_key',
200
+ apiHost: 'https://eu.i.posthog.com',
201
+ },
202
+ );
203
+
204
+ reporter.trackEvent({
205
+ message: 'feedback fetch success',
206
+ level: LogLevel.Info,
207
+ });
208
+
209
+ expect(posthogMock.capture).toHaveBeenCalledWith('feedback fetch success', {
210
+ message: 'feedback fetch success',
211
+ level: LogLevel.Info,
212
+ });
213
+ });
214
+
157
215
  it('adds compatibility properties in before_send', () => {
158
216
  const beforeSend = jest.fn((captureResult) => captureResult);
159
217