From e558f2d1a58b6f4cfc491ce9dad25cb7ec70ff8a Mon Sep 17 00:00:00 2001 From: Kiran K Date: Tue, 7 Oct 2025 11:13:19 +0530 Subject: [PATCH 1/3] Add support for `queryParams` --- packages/script/src/base.js | 44 ++++++++++++++++++++++++++++++++----- packages/web/src/generic.ts | 4 ++++ packages/web/src/types.ts | 8 +++++++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/packages/script/src/base.js b/packages/script/src/base.js index 6cfc9c1..1cc436d 100644 --- a/packages/script/src/base.js +++ b/packages/script/src/base.js @@ -62,10 +62,44 @@ const SHORT_DOMAIN = DOMAINS_CONFIG.refer; const ATTRIBUTION_MODEL = script.getAttribute('data-attribution-model') || 'last-click'; - const QUERY_PARAM = script.getAttribute('data-query-param') || 'via'; - const QUERY_PARAM_VALUE = new URLSearchParams(location.search).get( - QUERY_PARAM, - ); + + // Resolve query params from data-query-param and data-query-params + const QUERY_PARAMS = (() => { + const queryParam = script.getAttribute('data-query-param'); + const queryParams = script.getAttribute('data-query-params'); + + let resolvedQueryParams = ['via']; + + if (queryParam) { + resolvedQueryParams = [queryParam, ...resolvedQueryParams]; + } else if (queryParams) { + try { + resolvedQueryParams = [ + ...JSON.parse(queryParams), + ...resolvedQueryParams, + ]; + } catch (error) { + console.warn( + '[dubAnalytics] Failed to parse data-query-params.', + error, + ); + } + } + + return [...new Set(resolvedQueryParams)]; + })(); + + const QUERY_PARAM_VALUE = (() => { + const params = new URLSearchParams(location.search); + + for (const param of QUERY_PARAMS) { + if (params.get(param)) { + return params.get(param); + } + } + + return null; + })(); // Initialize global DubAnalytics object window.DubAnalytics = window.DubAnalytics || { @@ -269,7 +303,7 @@ o: COOKIE_OPTIONS, // was COOKIE_OPTIONS d: SHORT_DOMAIN, // was SHORT_DOMAIN m: ATTRIBUTION_MODEL, // was ATTRIBUTION_MODEL - p: QUERY_PARAM, // was QUERY_PARAM + p: QUERY_PARAMS, // was QUERY_PARAM v: QUERY_PARAM_VALUE, // was QUERY_PARAM_VALUE n: DOMAINS_CONFIG, // was DOMAINS_CONFIG k: PUBLISHABLE_KEY, diff --git a/packages/web/src/generic.ts b/packages/web/src/generic.ts index d6cce7b..e6075c0 100644 --- a/packages/web/src/generic.ts +++ b/packages/web/src/generic.ts @@ -79,6 +79,10 @@ function inject(props: AnalyticsProps): void { script.setAttribute('data-query-param', props.queryParam); } + if (props.queryParams) { + script.setAttribute('data-query-params', JSON.stringify(props.queryParams)); + } + if (props.scriptProps) { const { src: _, ...restProps } = props.scriptProps; // we already set the src above Object.assign(script, restProps); diff --git a/packages/web/src/types.ts b/packages/web/src/types.ts index 8076f02..939c820 100644 --- a/packages/web/src/types.ts +++ b/packages/web/src/types.ts @@ -143,9 +143,17 @@ export interface AnalyticsProps { * The query parameter to listen to for client-side click-tracking (e.g. `?via=john`, `?ref=jane`). * * @default 'via' + * @deprecated Use queryParams instead */ queryParam?: string; + /** + * The list of query parameters to listen to for client-side click-tracking (e.g. `?via=john`, `?ref=jane`). + * + * @default ['via'] + */ + queryParams?: string[]; + /** * Custom properties to pass to the script. * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement From b0aecf18c893b0e9f90022e5337aef92532b2462 Mon Sep 17 00:00:00 2001 From: Steven Tey Date: Tue, 7 Oct 2025 08:40:46 -0700 Subject: [PATCH 2/3] removed unused vars --- packages/script/src/base.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/script/src/base.js b/packages/script/src/base.js index 1cc436d..99c04ae 100644 --- a/packages/script/src/base.js +++ b/packages/script/src/base.js @@ -296,18 +296,15 @@ // Export minimal API with minified names window._dubAnalytics = { - c: cookieManager, // was cookieManager - i: DUB_ID_VAR, // was DUB_ID_VAR - h: HOSTNAME, // was HOSTNAME - a: API_HOST, // was API_HOST - o: COOKIE_OPTIONS, // was COOKIE_OPTIONS - d: SHORT_DOMAIN, // was SHORT_DOMAIN - m: ATTRIBUTION_MODEL, // was ATTRIBUTION_MODEL - p: QUERY_PARAMS, // was QUERY_PARAM - v: QUERY_PARAM_VALUE, // was QUERY_PARAM_VALUE - n: DOMAINS_CONFIG, // was DOMAINS_CONFIG - k: PUBLISHABLE_KEY, + c: cookieManager, qm: queueManager, + i: DUB_ID_VAR, + h: HOSTNAME, + a: API_HOST, + d: SHORT_DOMAIN, + v: QUERY_PARAM_VALUE, + n: DOMAINS_CONFIG, + k: PUBLISHABLE_KEY, }; // Initialize From ac9ef25cd6fc4006fb44aed149744a03aa54a6dc Mon Sep 17 00:00:00 2001 From: Steven Tey Date: Tue, 7 Oct 2025 10:23:16 -0700 Subject: [PATCH 3/3] 0.0.32 --- packages/script/package.json | 2 +- packages/web/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/script/package.json b/packages/script/package.json index d1745a6..f42ed14 100644 --- a/packages/script/package.json +++ b/packages/script/package.json @@ -1,6 +1,6 @@ { "name": "@dub/analytics-script", - "version": "0.0.31", + "version": "0.0.32", "main": "src/index.js", "files": [ "dist/analytics/script.js", diff --git a/packages/web/package.json b/packages/web/package.json index 68d76e4..0ce7554 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,6 +1,6 @@ { "name": "@dub/analytics", - "version": "0.0.31", + "version": "0.0.32", "description": "", "keywords": [ "analytics",