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";