From ab23ec54fea94d92fc6cb35c055361d751a36e46 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Mon, 5 Oct 2026 00:31:02 +0300 Subject: [PATCH 1/2] feat(tracker): track interactions by default Rage clicks, dead clicks and form activity only reached the 32% of sites that opted in. Interaction tracking now runs unless a site sets trackInteractions: false or data-track-interactions="false". --- packages/tracker/src/index.ts | 2 +- packages/tracker/tests/interactions.spec.ts | 44 +++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/packages/tracker/src/index.ts b/packages/tracker/src/index.ts index 1f6915238..fbfa95a0a 100644 --- a/packages/tracker/src/index.ts +++ b/packages/tracker/src/index.ts @@ -119,7 +119,7 @@ export class Databuddy extends BaseTracker { } const scrollCleanup = initScrollDepthTracking(this); this.cleanupFns.push(scrollCleanup); - if (this.options.trackInteractions) { + if (this.options.trackInteractions !== false) { const interactionCleanup = initInteractionTracking(this); this.cleanupFns.push(interactionCleanup); } diff --git a/packages/tracker/tests/interactions.spec.ts b/packages/tracker/tests/interactions.spec.ts index 5963fbf90..1ba1ea95b 100644 --- a/packages/tracker/tests/interactions.spec.ts +++ b/packages/tracker/tests/interactions.spec.ts @@ -604,6 +604,50 @@ const SLOW_NAVIGATIONS = [ ]; test.describe("interaction frustration signals", () => { + async function rageClickUnresponsiveButton(page: Page) { + await page.click("button", { clickCount: 3 }); + return page.evaluate( + () => (window.__tracker as BaseTracker).rageClickCount + ); + } + + test("interaction tracking is on without any configuration", async ({ + page, + }) => { + await page.goto("/test"); + await page.evaluate(() => { + document.body.innerHTML = ``; + window.databuddyConfig = { + clientId: "test-interactions-default", + ignoreBotDetection: true, + }; + }); + await page.addScriptTag({ url: "/dist/databuddy-debug.js" }); + await expect + .poll(() => page.evaluate(() => Boolean(window.__tracker))) + .toBeTruthy(); + expect(await rageClickUnresponsiveButton(page)).toBe(1); + }); + + test('data-track-interactions="false" turns interaction tracking off', async ({ + page, + }) => { + await page.goto("/test"); + await page.evaluate(() => { + document.body.innerHTML = ``; + const script = document.createElement("script"); + script.src = "/dist/databuddy-debug.js"; + script.dataset.clientId = "test-interactions-opt-out"; + script.dataset.ignoreBotDetection = "true"; + script.dataset.trackInteractions = "false"; + document.head.append(script); + }); + await expect + .poll(() => page.evaluate(() => Boolean(window.__tracker))) + .toBeTruthy(); + expect(await rageClickUnresponsiveButton(page)).toBe(0); + }); + for (const { name, markup, act } of ORDINARY_CLICKS) { test(`${name} is neither a rage nor a dead click`, async ({ page }) => { await loadFixture(page, markup); From 3925d57bd41e8b3182dc9666fc6da33fc2294297 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Wed, 7 Oct 2026 14:31:04 +0300 Subject: [PATCH 2/2] test(tracker): declare interaction fixture button types --- packages/tracker/tests/interactions.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracker/tests/interactions.spec.ts b/packages/tracker/tests/interactions.spec.ts index 1ba1ea95b..e080d24c0 100644 --- a/packages/tracker/tests/interactions.spec.ts +++ b/packages/tracker/tests/interactions.spec.ts @@ -616,7 +616,7 @@ test.describe("interaction frustration signals", () => { }) => { await page.goto("/test"); await page.evaluate(() => { - document.body.innerHTML = ``; + document.body.innerHTML = ``; window.databuddyConfig = { clientId: "test-interactions-default", ignoreBotDetection: true, @@ -634,7 +634,7 @@ test.describe("interaction frustration signals", () => { }) => { await page.goto("/test"); await page.evaluate(() => { - document.body.innerHTML = ``; + document.body.innerHTML = ``; const script = document.createElement("script"); script.src = "/dist/databuddy-debug.js"; script.dataset.clientId = "test-interactions-opt-out";