UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

73 lines 2.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildPropertiesPayload = exports.buildBasePropertiesPayload = exports.buildServerMixpanelClient = void 0; /* eslint-disable camelcase */ const mixpanel_1 = __importDefault(require("mixpanel")); const ua_parser_js_1 = __importDefault(require("ua-parser-js")); const tracking_js_1 = require("../core/helpers/tracking.js"); const buildServerMixpanelClient = (params) => { const { tokenId, apiHostname, debug } = params; const client = mixpanel_1.default.init(tokenId, { host: apiHostname, debug }); return client; }; exports.buildServerMixpanelClient = buildServerMixpanelClient; const buildBasePropertiesPayload = (params) => { const { hostApp, serverOrigin, speckleVersion } = params; return { server_id: (0, tracking_js_1.resolveMixpanelServerId)(new URL(serverOrigin).hostname), hostApp, speckleVersion }; }; exports.buildBasePropertiesPayload = buildBasePropertiesPayload; 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 ua_parser_js_1.default(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 }; }; exports.buildPropertiesPayload = buildPropertiesPayload; //# sourceMappingURL=mixpanel.js.map