From 2af2a591b44bb5f8bce6efd784555f019b94d60e Mon Sep 17 00:00:00 2001 From: BilalG1 Date: Tue, 14 Apr 2026 09:43:37 -0700 Subject: [PATCH] Skip analytics init on apps without persistent token store (#1336) Owned admin apps are constructed with `tokenStore: null`, which caused EventTracker/SessionRecorder flushes to throw from _ensurePersistentTokenStore() after #1331 removed the silencing. ## Summary by CodeRabbit * **Bug Fixes** * Improved analytics stability and privacy by restricting session recording and event tracking to environments with required persistent storage. * **Tests** * Adjusted a few end-to-end tests to skip when running against a local emulator to reduce spurious failures. --- .../backend/endpoints/api/v1/internal/feedback.test.ts | 8 +++++--- .../lib/stack-app/apps/implementations/client-app-impl.ts | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/e2e/tests/backend/endpoints/api/v1/internal/feedback.test.ts b/apps/e2e/tests/backend/endpoints/api/v1/internal/feedback.test.ts index f185ea93d..2fd592a3f 100644 --- a/apps/e2e/tests/backend/endpoints/api/v1/internal/feedback.test.ts +++ b/apps/e2e/tests/backend/endpoints/api/v1/internal/feedback.test.ts @@ -3,8 +3,10 @@ import { describe } from "vitest"; import { it } from "../../../../../helpers"; import { Auth, backendContext, createMailbox, niceBackendFetch, waitForOutboxEmailWithStatus } from "../../../../backend-helpers"; +const isLocalEmulator = process.env.NEXT_PUBLIC_STACK_IS_LOCAL_EMULATOR === "true"; + describe("POST /api/v1/internal/feedback", () => { - it("should send feedback from an authenticated user", async ({ expect }) => { + it.runIf(!isLocalEmulator)("should send feedback from an authenticated user", async ({ expect }) => { const senderEmail = backendContext.value.mailbox.emailAddress; const signInResult = await Auth.Otp.signIn(); const recipientMailbox = createMailbox("team@stack-auth.com"); @@ -44,7 +46,7 @@ describe("POST /api/v1/internal/feedback", () => { expect(messages[0].body?.text).toContain("Authenticated feedback from the dashboard."); }); - it("should send feedback without authentication (dev tool)", async ({ expect }) => { + it.runIf(!isLocalEmulator)("should send feedback without authentication (dev tool)", async ({ expect }) => { const recipientMailbox = createMailbox("team@stack-auth.com"); const senderEmail = `devtool-user-${randomUUID()}@example.com`; const subject = `[Support] ${senderEmail}`; @@ -81,7 +83,7 @@ describe("POST /api/v1/internal/feedback", () => { expect(messages[0].body?.text).toContain("Unauthenticated feedback from the dev tool."); }); - it("should send bug reports with correct label", async ({ expect }) => { + it.runIf(!isLocalEmulator)("should send bug reports with correct label", async ({ expect }) => { const recipientMailbox = createMailbox("team@stack-auth.com"); const reporterEmail = `bug-${randomUUID()}@example.com`; const subject = `[Bug Report] ${reporterEmail}`; diff --git a/packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts b/packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts index 75008972e..4422a824c 100644 --- a/packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts +++ b/packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts @@ -563,7 +563,7 @@ export class _StackClientAppImplIncomplete { @@ -573,7 +573,7 @@ export class _StackClientAppImplIncomplete {