From 60525f89059ba413172ea41f1af34c19bc567125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Tue, 19 Nov 2024 11:13:24 +0100 Subject: [PATCH] feature(api): override user-agent information --- .../api/src/controllers/profile.controller.ts | 2 +- apps/api/src/controllers/track.controller.ts | 2 +- apps/worker/src/jobs/events.incoming-event.ts | 4 ++-- packages/common/server/parser-user-agent.ts | 19 +++++++++++-------- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/apps/api/src/controllers/profile.controller.ts b/apps/api/src/controllers/profile.controller.ts index 1be194d5..6e9acd75 100644 --- a/apps/api/src/controllers/profile.controller.ts +++ b/apps/api/src/controllers/profile.controller.ts @@ -19,7 +19,7 @@ export async function updateProfile( const projectId = request.projectId; const ip = getClientIp(request)!; const ua = request.headers['user-agent']!; - const uaInfo = parseUserAgent(ua); + const uaInfo = parseUserAgent(ua, properties); const geo = await parseIp(ip); await upsertProfile({ diff --git a/apps/api/src/controllers/track.controller.ts b/apps/api/src/controllers/track.controller.ts index 9361c86d..dd979767 100644 --- a/apps/api/src/controllers/track.controller.ts +++ b/apps/api/src/controllers/track.controller.ts @@ -273,7 +273,7 @@ async function identify({ geo: GeoLocation; ua?: string; }) { - const uaInfo = parseUserAgent(ua); + const uaInfo = parseUserAgent(ua, payload.properties); await upsertProfile({ ...payload, id: payload.profileId, diff --git a/apps/worker/src/jobs/events.incoming-event.ts b/apps/worker/src/jobs/events.incoming-event.ts index c04688f7..66592f73 100644 --- a/apps/worker/src/jobs/events.incoming-event.ts +++ b/apps/worker/src/jobs/events.incoming-event.ts @@ -59,7 +59,7 @@ export async function incomingEvent(job: Job) { const userAgent = headers['user-agent']; const sdkName = headers['openpanel-sdk-name']; const sdkVersion = headers['openpanel-sdk-version']; - const uaInfo = parseUserAgent(userAgent); + const uaInfo = parseUserAgent(userAgent, properties); const baseEvent = { name: body.name, @@ -121,7 +121,7 @@ export async function incomingEvent(job: Job) { referrer: sessionEnd.payload?.referrer, referrerName: sessionEnd.payload?.referrerName, referrerType: sessionEnd.payload?.referrerType, - }); + }) as IServiceCreateEventPayload if (sessionEnd.notFound) { await createSessionEnd({ payload }); diff --git a/packages/common/server/parser-user-agent.ts b/packages/common/server/parser-user-agent.ts index 013c1c44..13de58f6 100644 --- a/packages/common/server/parser-user-agent.ts +++ b/packages/common/server/parser-user-agent.ts @@ -68,7 +68,10 @@ const parse = (ua: string): UAParser.IResult => { return res; }; -export function parseUserAgent(ua?: string | null) { +export function parseUserAgent( + ua?: string | null, + overrides?: Record, +) { if (!ua) return parsedServerUa; const res = parse(ua); @@ -77,13 +80,13 @@ export function parseUserAgent(ua?: string | null) { } return { - os: res.os.name, - osVersion: res.os.version, - browser: res.browser.name, - browserVersion: res.browser.version, - device: res.device.type ?? getDevice(ua), - brand: res.device.vendor, - model: res.device.model, + os: overrides?.__os || res.os.name, + osVersion: overrides?.__osVersion || res.os.version, + browser: overrides?.__browser || res.browser.name, + browserVersion: overrides?.__browserVersion || res.browser.version, + device: overrides?.__device || res.device.type || getDevice(ua), + brand: overrides?.__brand || res.device.vendor, + model: overrides?.__model || res.device.model, isServer: false, } as const; }