diff --git a/src/lib/click-query-params.ts b/src/lib/click-query-params.ts index 56d337f..3ba9657 100644 --- a/src/lib/click-query-params.ts +++ b/src/lib/click-query-params.ts @@ -1,4 +1,4 @@ -const CLICK_QUERY_PARAM_ALLOWLIST = ['u'] as const; +const CLICK_QUERY_PARAM_ALLOWLIST = ['userId', 'path'] as const; type ClickQueryParamKey = typeof CLICK_QUERY_PARAM_ALLOWLIST[number]; diff --git a/src/lib/fingerprint.test.ts b/src/lib/fingerprint.test.ts index 846d4be..5d3e355 100644 --- a/src/lib/fingerprint.test.ts +++ b/src/lib/fingerprint.test.ts @@ -403,7 +403,7 @@ describe('recordInstallEvent', () => { click_id: 'click-merge', link_id: 'link-merge', clicked_at: clickTime, - click_query_params: { u: 'abc' }, + click_query_params: { userId: 'study3144', path: '/invite', u: 'abc' }, attribution_window_hours: 24, ip_address: '24.5.10.250', user_agent: @@ -440,12 +440,17 @@ describe('recordInstallEvent', () => { expect(result.match).not.toBeNull(); expect(result.deepLinkData.deepLinkParameters).toEqual({ pid: 'recommend_user', - u: 'abc', + userId: 'study3144', + path: '/invite', }); expect(result.deepLinkData.customParameters).toEqual({ pid: 'recommend_user', - u: 'abc', + userId: 'study3144', + path: '/invite', + }); + expect(result.deepLinkData.clickQueryParameters).toEqual({ + userId: 'study3144', + path: '/invite', }); - expect(result.deepLinkData.clickQueryParameters).toEqual({ u: 'abc' }); }); }); diff --git a/src/lib/fingerprint.ts b/src/lib/fingerprint.ts index c0da968..4254053 100644 --- a/src/lib/fingerprint.ts +++ b/src/lib/fingerprint.ts @@ -1,5 +1,6 @@ import crypto from 'crypto'; import { db } from './database.js'; +import { extractAllowedClickQueryParams } from './click-query-params.js'; /** * Device fingerprint data structure @@ -263,13 +264,14 @@ function normalizeClickQueryParams(value: unknown): Record { if (typeof source !== 'object' || Array.isArray(source)) return {}; - const result: Record = {}; + const queryLike: Record = {}; for (const [k, v] of Object.entries(source as Record)) { - if (typeof v === 'string') { - result[k] = v; + if (typeof v === 'string' && v.length > 0) { + queryLike[k] = v; } } - return result; + + return extractAllowedClickQueryParams(queryLike); } function scoreFingerprintMatch(