feature(api): override user-agent information

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-11-19 11:13:24 +01:00
parent d36db071ec
commit 60525f8905
4 changed files with 15 additions and 12 deletions

View File

@@ -19,7 +19,7 @@ export async function updateProfile(
const projectId = request.projectId; const projectId = request.projectId;
const ip = getClientIp(request)!; const ip = getClientIp(request)!;
const ua = request.headers['user-agent']!; const ua = request.headers['user-agent']!;
const uaInfo = parseUserAgent(ua); const uaInfo = parseUserAgent(ua, properties);
const geo = await parseIp(ip); const geo = await parseIp(ip);
await upsertProfile({ await upsertProfile({

View File

@@ -273,7 +273,7 @@ async function identify({
geo: GeoLocation; geo: GeoLocation;
ua?: string; ua?: string;
}) { }) {
const uaInfo = parseUserAgent(ua); const uaInfo = parseUserAgent(ua, payload.properties);
await upsertProfile({ await upsertProfile({
...payload, ...payload,
id: payload.profileId, id: payload.profileId,

View File

@@ -59,7 +59,7 @@ export async function incomingEvent(job: Job<EventsQueuePayloadIncomingEvent>) {
const userAgent = headers['user-agent']; const userAgent = headers['user-agent'];
const sdkName = headers['openpanel-sdk-name']; const sdkName = headers['openpanel-sdk-name'];
const sdkVersion = headers['openpanel-sdk-version']; const sdkVersion = headers['openpanel-sdk-version'];
const uaInfo = parseUserAgent(userAgent); const uaInfo = parseUserAgent(userAgent, properties);
const baseEvent = { const baseEvent = {
name: body.name, name: body.name,
@@ -121,7 +121,7 @@ export async function incomingEvent(job: Job<EventsQueuePayloadIncomingEvent>) {
referrer: sessionEnd.payload?.referrer, referrer: sessionEnd.payload?.referrer,
referrerName: sessionEnd.payload?.referrerName, referrerName: sessionEnd.payload?.referrerName,
referrerType: sessionEnd.payload?.referrerType, referrerType: sessionEnd.payload?.referrerType,
}); }) as IServiceCreateEventPayload
if (sessionEnd.notFound) { if (sessionEnd.notFound) {
await createSessionEnd({ payload }); await createSessionEnd({ payload });

View File

@@ -68,7 +68,10 @@ const parse = (ua: string): UAParser.IResult => {
return res; return res;
}; };
export function parseUserAgent(ua?: string | null) { export function parseUserAgent(
ua?: string | null,
overrides?: Record<string, unknown>,
) {
if (!ua) return parsedServerUa; if (!ua) return parsedServerUa;
const res = parse(ua); const res = parse(ua);
@@ -77,13 +80,13 @@ export function parseUserAgent(ua?: string | null) {
} }
return { return {
os: res.os.name, os: overrides?.__os || res.os.name,
osVersion: res.os.version, osVersion: overrides?.__osVersion || res.os.version,
browser: res.browser.name, browser: overrides?.__browser || res.browser.name,
browserVersion: res.browser.version, browserVersion: overrides?.__browserVersion || res.browser.version,
device: res.device.type ?? getDevice(ua), device: overrides?.__device || res.device.type || getDevice(ua),
brand: res.device.vendor, brand: overrides?.__brand || res.device.vendor,
model: res.device.model, model: overrides?.__model || res.device.model,
isServer: false, isServer: false,
} as const; } as const;
} }