diff --git a/src/__tests__/extensions/replay/sessionrecording.test.ts b/src/__tests__/extensions/replay/sessionrecording.test.ts index 2b297c712..9eeef723c 100644 --- a/src/__tests__/extensions/replay/sessionrecording.test.ts +++ b/src/__tests__/extensions/replay/sessionrecording.test.ts @@ -2437,5 +2437,19 @@ describe('SessionRecording', () => { // even though still waiting for URL to trigger expect(sessionRecording['status']).toBe('active') }) + + it('disables recording when sampling rate is 0 regardless of event triggers', async () => { + sessionRecording.onRemoteConfig( + makeDecideResponse({ + sessionRecording: { + endpoint: '/s/', + eventTriggers: ['$exception'], + sampleRate: '0.00', // i.e. never send recording + }, + }) + ) + + expect(sessionRecording['status']).toBe('disabled') + }) }) }) diff --git a/src/extensions/replay/sessionrecording.ts b/src/extensions/replay/sessionrecording.ts index 7ba421a29..d23b1d3c4 100644 --- a/src/extensions/replay/sessionrecording.ts +++ b/src/extensions/replay/sessionrecording.ts @@ -397,6 +397,12 @@ export class SessionRecording { return 'disabled' } + // if sampling is set and the session is already decided to not be sampled + // then we should never be active + if (this.isSampled === false) { + return 'disabled' + } + if (this._urlBlocked) { return 'paused' }