diff --git a/packages/browser/src/backend.ts b/packages/browser/src/backend.ts index 3780ca4556ba..88d0bba7bc75 100644 --- a/packages/browser/src/backend.ts +++ b/packages/browser/src/backend.ts @@ -62,6 +62,7 @@ export class BrowserBackend extends BaseBackend { ...this._options.transportOptions, dsn: this._options.dsn, tunnel: this._options.tunnel, + sendClientReports: this._options.sendClientReports, _metadata: this._options._metadata, }; diff --git a/packages/browser/src/sdk.ts b/packages/browser/src/sdk.ts index 1cf6b5958edf..518052ac71ad 100644 --- a/packages/browser/src/sdk.ts +++ b/packages/browser/src/sdk.ts @@ -88,6 +88,9 @@ export function init(options: BrowserOptions = {}): void { if (options.autoSessionTracking === undefined) { options.autoSessionTracking = true; } + if (options.sendClientReports === undefined) { + options.sendClientReports = true; + } initAndBind(BrowserClient, options); diff --git a/packages/browser/src/transports/base.ts b/packages/browser/src/transports/base.ts index 20dce685324f..8fc983f180b2 100644 --- a/packages/browser/src/transports/base.ts +++ b/packages/browser/src/transports/base.ts @@ -67,6 +67,10 @@ export abstract class BaseTransport implements Transport { * @inheritDoc */ public recordLostEvent(type: Outcome): void { + if (!this.options.sendClientReport) { + return; + } + logger.log(`Adding ${type} outcome`); this._outcomes[type] = (this._outcomes[type] ?? 0) + 1; } @@ -75,6 +79,10 @@ export abstract class BaseTransport implements Transport { * Send outcomes as an envelope */ protected _flushOutcomes(): void { + if (!this.options.sendClientReport) { + return; + } + if (!navigator || typeof navigator.sendBeacon !== 'function') { logger.warn('Beacon API not available, skipping sending outcomes.'); return; diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index 9b42c48ed0e8..3f58c25ff8bd 100644 --- a/packages/types/src/options.ts +++ b/packages/types/src/options.ts @@ -132,6 +132,11 @@ export interface Options { */ autoSessionTracking?: boolean; + /** + * Automatically send SDK Client Report + */ + sendClientReports?: boolean; + /** * Initial data to populate scope. */ diff --git a/packages/types/src/transport.ts b/packages/types/src/transport.ts index f4d39f617ce8..97bacb97dd78 100644 --- a/packages/types/src/transport.ts +++ b/packages/types/src/transport.ts @@ -64,6 +64,8 @@ export interface TransportOptions { fetchParameters?: { [key: string]: string }; /** The envelope tunnel to use. */ tunnel?: string; + /** Automatically send SDK Client Report */ + sendClientReport?: boolean; /** * Set of metadata about the SDK that can be internally used to enhance envelopes and events, * and provide additional data about every request.