UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

64 lines 2.13 kB
/* eslint-disable camelcase */ import Mixpanel from 'mixpanel'; import UAParser from 'ua-parser-js'; import { resolveMixpanelServerId } from '../core/helpers/tracking.js'; export const buildServerMixpanelClient = (params) => { const { tokenId, apiHostname, debug } = params; const client = Mixpanel.init(tokenId, { host: apiHostname, debug }); return client; }; export const buildBasePropertiesPayload = (params) => { const { hostApp, serverOrigin, speckleVersion } = params; return { server_id: resolveMixpanelServerId(new URL(serverOrigin).hostname), hostApp, speckleVersion }; }; export const buildPropertiesPayload = (params) => { const { distinctId, headers, query, remoteAddress } = params; const userProps = distinctId ? { distinct_id: distinctId } : {}; // User agent const userAgentString = headers?.['user-agent']; const uaParser = userAgentString ? new UAParser(userAgentString) : null; const uaProps = uaParser ? { $browser: uaParser.getBrowser().name, $device: uaParser.getDevice().model, $os: uaParser.getOS().name } : {}; // Referer const refererHeader = headers?.['referer']; const refererDomain = refererHeader ? new URL(refererHeader).host : null; const refererProps = { ...(refererHeader ? { $referrer: refererHeader } : {}), ...(refererDomain ? { $referring_domain: refererDomain } : {}) }; // Utm const utmKeys = [ 'utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term' ]; const utmProps = utmKeys.reduce((acc, key) => { const value = query?.[key]; return value ? { ...acc, [key]: value } : acc; }, {}); // Remote addr const remoteAddr = headers?.['x-forwarded-for'] || remoteAddress; const remoteAddrProps = remoteAddr ? { ip: remoteAddr } : {}; return { ...userProps, ...uaProps, ...refererProps, ...utmProps, ...remoteAddrProps }; }; //# sourceMappingURL=mixpanel.js.map