MCPcopy Create free account
hub / github.com/Openpanel-dev/openpanel / parseUserAgent

Function parseUserAgent

packages/common/server/parser-user-agent.ts:243–288  ·  view source on GitHub ↗
(
  ua?: string | null,
  overrides?: Record<string, unknown>,
)

Source from the content-addressed store, hash-verified

241export type UserAgentInfo = ReturnType<typeof parseUserAgent>;
242export type UserAgentResult = ReturnType<typeof parseUserAgent>;
243export function parseUserAgent(
244 ua?: string | null,
245 overrides?: Record<string, unknown>,
246) {
247 if (!ua) return parsedServerUa;
248 const res = parse(ua);
249
250 if (isServer(res)) {
251 return parsedServerUa;
252 }
253
254 const model =
255 typeof overrides?.__model === 'string' && overrides?.__model
256 ? overrides?.__model
257 : res.device.model;
258
259 return {
260 os:
261 typeof overrides?.__os === 'string' && overrides?.__os
262 ? overrides?.__os
263 : res.os.name,
264 osVersion:
265 typeof overrides?.__osVersion === 'string' && overrides?.__osVersion
266 ? overrides?.__osVersion
267 : res.os.version,
268 browser:
269 typeof overrides?.__browser === 'string' && overrides?.__browser
270 ? overrides?.__browser
271 : res.browser.name,
272 browserVersion:
273 typeof overrides?.__browserVersion === 'string' &&
274 overrides?.__browserVersion
275 ? overrides?.__browserVersion
276 : res.browser.version,
277 device:
278 typeof overrides?.__device === 'string' && overrides?.__device
279 ? overrides?.__device
280 : res.device.type || getDevice(ua, model),
281 brand:
282 typeof overrides?.__brand === 'string' && overrides?.__brand
283 ? overrides?.__brand
284 : res.device.vendor,
285 model,
286 isServer: false,
287 } as const;
288}
289
290function isServer(res: UAParser.IResult) {
291 // Matches user agents like "Go-http-client/1.0" or "Go Http Client/1.0"

Callers 6

transformEventMethod · 0.90
updateProfileFunction · 0.90
handleTrackFunction · 0.90
handleIdentifyFunction · 0.90
postEventFunction · 0.90

Calls 3

parseFunction · 0.85
isServerFunction · 0.85
getDeviceFunction · 0.85

Tested by

no test coverage detected