@speckle/shared
Version:
Shared code between various Speckle JS packages
64 lines • 2.13 kB
JavaScript
/* 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