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