From 60a6dedc2ebf6befc4729c30c7910ed904fabd80 Mon Sep 17 00:00:00 2001 From: Omer Katzir Date: Wed, 31 Dec 2025 14:15:17 +0200 Subject: [PATCH 1/3] analytics | url-param-config, beacon fix --- src/modules/analytics.ts | 42 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/modules/analytics.ts b/src/modules/analytics.ts index 95b0a9c..4f17d62 100644 --- a/src/modules/analytics.ts +++ b/src/modules/analytics.ts @@ -13,7 +13,7 @@ import type { AuthModule } from "./auth.types"; import { generateUuid } from "../utils/common"; export const USER_HEARTBEAT_EVENT_NAME = "__user_heartbeat_event__"; -export const ANALYTICS_CONFIG_WINDOW_KEY = "base44_analytics_config"; +export const ANALYTICS_CONFIG_URL_PARAM_KEY = "analytics-disable"; export const ANALYTICS_SESSION_ID_LOCAL_STORAGE_KEY = "base44_analytics_session_id"; @@ -40,7 +40,7 @@ const analyticsSharedState = getSharedInstance( sessionContext: null as SessionContext | null, config: { ...defaultConfiguration, - ...getAnalyticsModuleOptionsFromWindow(), + ...getAnalyticsConfigFromUrlParams(), } as Required, }) ); @@ -81,23 +81,27 @@ export const createAnalyticsModule = ({ } as AnalyticsApiBatchRequest); }; - const flush = async (eventsData: TrackEventData[]) => { - const sessionContext_ = await getSessionContext(userAuthModule); - const events = eventsData.map( - transformEventDataToApiRequestData(sessionContext_) - ); + const beaconRequest = async (events: AnalyticsApiRequestData[]) => { const beaconPayload = JSON.stringify({ events }); try { - if ( + const blob = new Blob([beaconPayload], { type: "application/json" }); + return ( typeof navigator === "undefined" || beaconPayload.length > 60000 || - !navigator.sendBeacon(trackBatchUrl, beaconPayload) - ) { - // beacon didn't work, fallback to axios - await batchRequestFallback(events); - } + !navigator.sendBeacon(trackBatchUrl, blob) + ); } catch { - // TODO: think about retries if needed + return false; + } + }; + + const flush = async (eventsData: TrackEventData[]) => { + const sessionContext_ = await getSessionContext(userAuthModule); + const events = eventsData.map( + transformEventDataToApiRequestData(sessionContext_) + ); + if (!(await beaconRequest(events))) { + return batchRequestFallback(events); } }; @@ -256,11 +260,17 @@ async function getSessionContext( return analyticsSharedState.sessionContext; } -export function getAnalyticsModuleOptionsFromWindow(): +export function getAnalyticsConfigFromUrlParams(): | AnalyticsModuleOptions | undefined { if (typeof window === "undefined") return undefined; - return (window as any)[ANALYTICS_CONFIG_WINDOW_KEY]; + const urlParams = new URLSearchParams(window.location.search); + const analyticsDisable = urlParams.get(ANALYTICS_CONFIG_URL_PARAM_KEY); + const newUrlParams = new URLSearchParams(window.location.search); + newUrlParams.delete(ANALYTICS_CONFIG_URL_PARAM_KEY); + const newUrl = `${window.location.pathname}?${newUrlParams.toString()}`; + window.history.replaceState({}, document.title, newUrl); + return analyticsDisable === "true" ? { enabled: false } : undefined; } export function getAnalyticsSessionId(): string { From 6994d10dde04f07c8f48b346507032f5d0745a1e Mon Sep 17 00:00:00 2001 From: Omer Katzir Date: Wed, 31 Dec 2025 14:30:46 +0200 Subject: [PATCH 2/3] . --- src/modules/analytics.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/analytics.ts b/src/modules/analytics.ts index 4f17d62..ee29fd4 100644 --- a/src/modules/analytics.ts +++ b/src/modules/analytics.ts @@ -266,6 +266,8 @@ export function getAnalyticsConfigFromUrlParams(): if (typeof window === "undefined") return undefined; const urlParams = new URLSearchParams(window.location.search); const analyticsDisable = urlParams.get(ANALYTICS_CONFIG_URL_PARAM_KEY); + if (analyticsDisable == null || !analyticsDisable.length) return undefined; + const newUrlParams = new URLSearchParams(window.location.search); newUrlParams.delete(ANALYTICS_CONFIG_URL_PARAM_KEY); const newUrl = `${window.location.pathname}?${newUrlParams.toString()}`; From c6be34006f9a8c28d7a45754c6c75f6b4f5c90ce Mon Sep 17 00:00:00 2001 From: Omer Katzir Date: Wed, 31 Dec 2025 14:35:19 +0200 Subject: [PATCH 3/3] remove param --- src/modules/analytics.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/modules/analytics.ts b/src/modules/analytics.ts index ee29fd4..c3f3712 100644 --- a/src/modules/analytics.ts +++ b/src/modules/analytics.ts @@ -266,12 +266,19 @@ export function getAnalyticsConfigFromUrlParams(): if (typeof window === "undefined") return undefined; const urlParams = new URLSearchParams(window.location.search); const analyticsDisable = urlParams.get(ANALYTICS_CONFIG_URL_PARAM_KEY); + + // if the url param is not set, return undefined // if (analyticsDisable == null || !analyticsDisable.length) return undefined; + // remove the url param from the url // const newUrlParams = new URLSearchParams(window.location.search); newUrlParams.delete(ANALYTICS_CONFIG_URL_PARAM_KEY); - const newUrl = `${window.location.pathname}?${newUrlParams.toString()}`; - window.history.replaceState({}, document.title, newUrl); + const newUrl = + window.location.pathname + + (newUrlParams.toString() ? "?" + newUrlParams.toString() : ""); + window.history.replaceState({}, "", newUrl); + + // return the config object // return analyticsDisable === "true" ? { enabled: false } : undefined; }