diff --git a/packages/signals/signals/src/core/client/__tests__/redact.test.ts b/packages/signals/signals/src/core/client/__tests__/redact.test.ts index 4489ba207..dfda6aea5 100644 --- a/packages/signals/signals/src/core/client/__tests__/redact.test.ts +++ b/packages/signals/signals/src/core/client/__tests__/redact.test.ts @@ -100,4 +100,15 @@ describe(redactSignalData, () => { }) expect(redactSignalData(signal)).toEqual(expected) }) + + it('should not mutate the original signal object', () => { + const originalSignal = createInteractionSignal({ + eventType: 'click', + target: { value: 'sensitiveData' }, + }) + const originalSignalCopy = JSON.parse(JSON.stringify(originalSignal)) + + redactSignalData(originalSignal) + expect(originalSignal).toEqual(originalSignalCopy) + }) }) diff --git a/packages/signals/signals/src/core/client/redact.ts b/packages/signals/signals/src/core/client/redact.ts index a232c1041..05b4dfe71 100644 --- a/packages/signals/signals/src/core/client/redact.ts +++ b/packages/signals/signals/src/core/client/redact.ts @@ -1,6 +1,7 @@ import { Signal } from '../../types' -export const redactSignalData = (signal: Signal): Signal => { +export const redactSignalData = (signalArg: Signal): Signal => { + const signal = structuredClone(signalArg) if (signal.type === 'instrumentation' || signal.type === 'userDefined') { return signal } else if (signal.type === 'interaction') {