posthog-js
Version:
Posthog-js allows you to automatically capture usage and send events to PostHog.
82 lines • 3.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupSegmentIntegration = setupSegmentIntegration;
var logger_1 = require("@posthog/browser-common/utils/logger");
var constants_1 = require("../constants");
var core_1 = require("@posthog/core");
var uuidv7_1 = require("@posthog/browser-common/utils/uuidv7");
var logger = (0, logger_1.createLogger)('[SegmentIntegration]');
var createSegmentIntegration = function (posthog) {
if (typeof Promise === 'undefined' || !Promise.resolve) {
logger.warn('This browser does not have Promise support, and can not use the segment integration');
}
var enrichEvent = function (ctx, eventName) {
if (!eventName) {
return ctx;
}
if (!ctx.event.userId && ctx.event.anonymousId !== posthog.get_distinct_id()) {
// This is our only way of detecting that segment's analytics.reset() has been called so we also call it
logger.info('No userId set, resetting PostHog');
posthog.reset();
}
if (ctx.event.userId && ctx.event.userId !== posthog.get_distinct_id()) {
logger.info('UserId set, identifying with PostHog');
posthog.identify(ctx.event.userId);
}
var additionalProperties = posthog.calculateEventProperties(eventName, ctx.event.properties);
ctx.event.properties = Object.assign({}, additionalProperties, ctx.event.properties);
return ctx;
};
return {
name: 'PostHog JS',
type: 'enrichment',
version: '1.0.0',
isLoaded: function () { return true; },
// check and early return above
// eslint-disable-next-line compat/compat
load: function () { return Promise.resolve(); },
track: function (ctx) { return enrichEvent(ctx, ctx.event.event); },
page: function (ctx) { return enrichEvent(ctx, constants_1.EVENT_PAGEVIEW); },
identify: function (ctx) { return enrichEvent(ctx, constants_1.EVENT_IDENTIFY); },
screen: function (ctx) { return enrichEvent(ctx, '$screen'); },
};
};
function setupPostHogFromSegment(posthog, done) {
var segment = posthog.config.segment;
if (!segment) {
return done();
}
var bootstrapUser = function (user) {
// Use segments anonymousId instead
var getSegmentAnonymousId = function () { return user.anonymousId() || (0, uuidv7_1.uuidv7)(); };
posthog.config.get_device_id = getSegmentAnonymousId;
// If a segment user ID exists, set it as the distinct_id
if (user.id()) {
posthog.register({
distinct_id: user.id(),
$device_id: getSegmentAnonymousId(),
});
posthog.persistence.set_property(constants_1.USER_STATE, constants_1.USER_STATE_IDENTIFIED);
}
done();
};
var segmentUser = segment.user();
if ('then' in segmentUser && (0, core_1.isFunction)(segmentUser.then)) {
segmentUser.then(bootstrapUser);
}
else {
bootstrapUser(segmentUser);
}
}
function setupSegmentIntegration(posthog, done) {
var segment = posthog.config.segment;
if (!segment) {
return done();
}
setupPostHogFromSegment(posthog, function () {
segment.register(createSegmentIntegration(posthog)).then(function () {
done();
});
});
}
//# sourceMappingURL=segment-integration.js.map