From 12f8b83ef4670f2161acf0b95be50b67237f9d90 Mon Sep 17 00:00:00 2001 From: luke-belton Date: Wed, 26 Nov 2025 11:00:49 +0000 Subject: [PATCH 1/2] refactor sensitive data capture --- .../src/__tests__/autocapture-utils.test.ts | 157 ++++++++---------- .../browser/src/__tests__/autocapture.test.ts | 102 +++++++++--- packages/browser/src/autocapture-utils.ts | 71 +++----- packages/browser/src/autocapture.ts | 22 +-- 4 files changed, 181 insertions(+), 171 deletions(-) diff --git a/packages/browser/src/__tests__/autocapture-utils.test.ts b/packages/browser/src/__tests__/autocapture-utils.test.ts index 0049cd2e3f..631af23091 100644 --- a/packages/browser/src/__tests__/autocapture-utils.test.ts +++ b/packages/browser/src/__tests__/autocapture-utils.test.ts @@ -1,11 +1,8 @@ /// -import sinon from 'sinon' - import { getSafeText, - shouldCaptureDomEvent, - shouldCaptureElement, + shouldAutocaptureEvent, isSensitiveElement, shouldCaptureValue, isAngularStyleAttr, @@ -14,6 +11,8 @@ import { getElementsChainString, getClassNames, makeSafeText, + isExplicitNoCapture, + isExplicitCapture, } from '../autocapture-utils' import { document } from '../utils/globals' import { makeMouseEvent } from './autocapture.test' @@ -121,6 +120,30 @@ describe(`Autocapture utility functions`, () => { el.innerHTML = `Mixed "double" and 'single' quotes` expect(getSafeText(el)).toBe(`Mixed "double" and 'single' quotes`) }) + + it(`should collect text from sensitive elements with ph-include class`, () => { + const input = document!.createElement(`input`) + input.className = `ph-include` + input.appendChild(document.createTextNode(`Hello world`)) + document!.body.appendChild(input) + expect(getSafeText(input)).toBe(`Hello world`) + }) + + it(`shouldn't collect text from elements with ph-no-capture class`, () => { + const el = document!.createElement(`div`) + el.className = `ph-no-capture` + el.innerHTML = `Hello world` + document!.body.appendChild(el) + expect(getSafeText(el)).toBe(``) + }) + + it(`shouldn't collect text from elements with ph-sensitive class`, () => { + const el = document!.createElement(`div`) + el.className = `ph-sensitive` + el.innerHTML = `Hello world` + document!.body.appendChild(el) + expect(getSafeText(el)).toBe(``) + }) }) describe(`makeSafeText`, () => { @@ -175,7 +198,7 @@ describe(`Autocapture utility functions`, () => { describe(`shouldCaptureDomEvent`, () => { it(`should capture "submit" events on
elements`, () => { expect( - shouldCaptureDomEvent(document!.createElement(`form`), { + shouldAutocaptureEvent(document!.createElement(`form`), { type: `submit`, } as unknown as Event) ).toBe(true) @@ -183,14 +206,14 @@ describe(`Autocapture utility functions`, () => { it.each([`input`, `SELECT`, `textarea`])(`should capture "change" events on <%s> elements`, (tagName) => { expect( - shouldCaptureDomEvent(document!.createElement(tagName), { + shouldAutocaptureEvent(document!.createElement(tagName), { type: `change`, } as unknown as Event) ).toBe(true) }) it.each([`A`, `a`])(`should capture "click" events on <%s> elements`, (tagName) => { - expect(shouldCaptureDomEvent(document!.createElement(tagName), makeMouseEvent({}))).toBe(true) + expect(shouldAutocaptureEvent(document!.createElement(tagName), makeMouseEvent({}))).toBe(true) }) it(`should capture "click" events on