UNPKG

@dash0/sdk-web

Version:

Dash0's Web SDK to collect telemetry from end-users' web browsers

52 lines (44 loc) 1.67 kB
import { generateUniqueId, nav, NO_VALUE_FALLBACK, WEB_EVENT_ID_BYTES, win } from "../utils"; import { BROWSER_TAB_ID, NETWORK_CONNECTION_TYPE, PAGE_URL_ATTR_PREFIX, SESSION_ID, WEB_EVENT_ID, WINDOW_HEIGHT, WINDOW_WIDTH, } from "../semantic-conventions"; import { sessionId } from "../api/session"; import { vars } from "../vars"; import { addAttribute } from "../utils/otel"; import { addUrlAttributes } from "./url"; import { tabId } from "../utils/tab-id"; import { KeyValue } from "../types/otlp"; type Options = { /** * Override url to be used instead of window.location.href */ url?: string | URL; }; export function addCommonAttributes(attributes: KeyValue[], options?: Options): void { if (attributes.find((attribute) => attribute.key === WEB_EVENT_ID) === undefined) { addAttribute(attributes, WEB_EVENT_ID, generateUniqueId(WEB_EVENT_ID_BYTES)); } for (let i = 0; i < vars.signalAttributes.length; i++) { attributes.push(vars.signalAttributes[i]!); } addUrlAttributes(attributes, options?.url ?? win?.location.href ?? NO_VALUE_FALLBACK, PAGE_URL_ATTR_PREFIX); if (sessionId) { addAttribute(attributes, SESSION_ID, sessionId); } if (tabId) { addAttribute(attributes, BROWSER_TAB_ID, tabId); } addAttribute(attributes, WINDOW_WIDTH, win?.innerWidth ?? NO_VALUE_FALLBACK); addAttribute(attributes, WINDOW_HEIGHT, win?.innerHeight ?? NO_VALUE_FALLBACK); // @ts-expect-error -- TypeScript is not aware of navigator.connection.effectiveType const connectionType = nav?.connection?.effectiveType; if (connectionType) { addAttribute(attributes, NETWORK_CONNECTION_TYPE, connectionType); } }