From a0f7d09bce9ad84fd5bef56096025bee22f1ca33 Mon Sep 17 00:00:00 2001 From: Creeperkatze Date: Sun, 4 Oct 2026 17:32:36 +0200 Subject: [PATCH 1/2] fix(analytics): keep frontend metadata separate from optional arguments --- .../analytics/modules/analytics/client.ts | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/analytics/modules/analytics/client.ts b/packages/analytics/modules/analytics/client.ts index 51b45e347..1a1e2d5a7 100644 --- a/packages/analytics/modules/analytics/client.ts +++ b/packages/analytics/modules/analytics/client.ts @@ -17,13 +17,10 @@ type AnalyticsMessage = { [K in keyof Analytics]: { fn: K; args: Parameters; + meta: AnalyticsEventMetadata; }; }[keyof Analytics]; -type AnalyticsMethod = - | ((...args: Parameters) => void) - | undefined; - type MethodForwarder = ( fn: K, ) => (...args: Parameters) => Promise; @@ -270,8 +267,29 @@ function createBackgroundAnalytics( // Listen for messages from the rest of the extension browser.runtime.onConnect.addListener((port) => { if (port.name === ANALYTICS_PORT) { - port.onMessage.addListener(({ fn, args }: AnalyticsMessage) => { - void (analytics[fn] as AnalyticsMethod)?.(...args); + port.onMessage.addListener((message: AnalyticsMessage) => { + const { meta } = message; + // Pass every argument explicitly, so meta doesn't shift into an omitted optional one + switch (message.fn) { + case 'identify': + return void analytics.identify( + message.args[0], + message.args[1], + meta, + ); + case 'page': + return void analytics.page(message.args[0], meta); + case 'track': + return void analytics.track(message.args[0], message.args[1], meta); + case 'captureException': + return void analytics.captureException( + message.args[0], + message.args[1], + meta, + ); + case 'setEnabled': + return void analytics.setEnabled(message.args[0]); + } }); } }); @@ -296,7 +314,7 @@ function createFrontendAnalytics(): Analytics { const methodForwarder: MethodForwarder = (fn) => (...args) => { - port.postMessage({ fn, args: [...args, getFrontendMetadata()] }); + port.postMessage({ fn, args, meta: getFrontendMetadata() }); return Promise.resolve(); }; From 636f55c94335ca0ec21903fa4c4a386c5535b77f Mon Sep 17 00:00:00 2001 From: Creeperkatze Date: Sun, 11 Oct 2026 13:08:09 +0200 Subject: [PATCH 2/2] refactor(analytics): simplify frontend message handler --- packages/analytics/modules/analytics/client.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/analytics/modules/analytics/client.ts b/packages/analytics/modules/analytics/client.ts index 1a1e2d5a7..f149fc074 100644 --- a/packages/analytics/modules/analytics/client.ts +++ b/packages/analytics/modules/analytics/client.ts @@ -268,27 +268,23 @@ function createBackgroundAnalytics( browser.runtime.onConnect.addListener((port) => { if (port.name === ANALYTICS_PORT) { port.onMessage.addListener((message: AnalyticsMessage) => { - const { meta } = message; + const { meta, fn } = message; // Pass every argument explicitly, so meta doesn't shift into an omitted optional one - switch (message.fn) { + switch (fn) { case 'identify': - return void analytics.identify( - message.args[0], - message.args[1], - meta, - ); + return analytics.identify(message.args[0], message.args[1], meta); case 'page': - return void analytics.page(message.args[0], meta); + return analytics.page(message.args[0], meta); case 'track': - return void analytics.track(message.args[0], message.args[1], meta); + return analytics.track(message.args[0], message.args[1], meta); case 'captureException': - return void analytics.captureException( + return analytics.captureException( message.args[0], message.args[1], meta, ); case 'setEnabled': - return void analytics.setEnabled(message.args[0]); + return analytics.setEnabled(message.args[0]); } }); }