UNPKG

n8n

Version:

n8n Workflow Automation Tool

139 lines 5.46 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PostHogClient = void 0; const api_types_1 = require("@n8n/api-types"); const config_1 = require("@n8n/config"); const di_1 = require("@n8n/di"); const n8n_core_1 = require("n8n-core"); const POSTHOG_GROUP_TYPE_INSTANCE = 'company'; const FLAGS_CACHE_TTL_MS = 10 * 60 * 1000; let PostHogClient = class PostHogClient { constructor(instanceSettings, globalConfig) { this.instanceSettings = instanceSettings; this.globalConfig = globalConfig; this.flagsCache = new Map(); } async init() { const { enabled, posthogConfig } = this.globalConfig.diagnostics; if (!enabled) { return; } const { PostHog } = await import('posthog-node'); this.postHog = new PostHog(posthogConfig.apiKey, { host: posthogConfig.apiHost, }); } async stop() { if (this.postHog) { return await this.postHog.shutdown(); } } track(payload) { if (!payload.userId || payload.userId === this.instanceSettings.instanceId) return; const instanceId = payload?.properties?.instance_id; this.postHog?.capture({ event: payload.event, distinctId: payload.userId, properties: payload.properties, ...(typeof instanceId === 'string' && { groups: { [POSTHOG_GROUP_TYPE_INSTANCE]: instanceId }, }), }); } groupIdentify({ instanceId, distinctId, properties, }) { if (!instanceId) return; this.postHog?.capture({ distinctId: distinctId ?? `${POSTHOG_GROUP_TYPE_INSTANCE}_${instanceId}`, event: '$groupidentify', properties: { $group_type: POSTHOG_GROUP_TYPE_INSTANCE, $group_key: instanceId, $group_set: properties, ...(!distinctId && { $process_person_profile: false }), }, groups: { [POSTHOG_GROUP_TYPE_INSTANCE]: instanceId, }, }); } identify({ distinctId, properties, }) { if (!distinctId) return; this.postHog?.identify({ distinctId, properties: properties ?? undefined, }); } async getFeatureFlags(user) { let flags = {}; try { flags = await this.fetchFlagsFromPostHog(user); } catch { } return this.applyEnvOverrides(flags); } async fetchFlagsFromPostHog(user) { if (!this.postHog) return {}; const { instanceId } = this.instanceSettings; const fullId = [instanceId, user.id].join('#'); const cached = this.flagsCache.get(fullId); if (cached && cached.expiresAt > Date.now()) { return cached.flags; } const evaluatedFlags = await this.postHog.evaluateFlags(fullId, { personProperties: { created_at_timestamp: user.createdAt.getTime().toString(), }, ...(instanceId && { groups: { [POSTHOG_GROUP_TYPE_INSTANCE]: instanceId } }), }); const flags = this.resolveFeatureFlagVariants(evaluatedFlags); if (Object.keys(flags).length > 0) { this.flagsCache.set(fullId, { flags, expiresAt: Date.now() + FLAGS_CACHE_TTL_MS }); } return flags; } resolveFeatureFlagVariants(evaluatedFlags) { const result = {}; if (!evaluatedFlags || !Array.isArray(evaluatedFlags.keys)) return result; for (const key of evaluatedFlags.keys) { try { result[key] = evaluatedFlags.getFlag(key); } catch { } } return result; } applyEnvOverrides(flags) { const overrides = {}; if (this.globalConfig.evaluation.collectionsEnabled) { overrides[api_types_1.EVAL_COLLECTIONS_FLAG] = true; } if (this.globalConfig.evaluation.configEvalsEnabled) { overrides[api_types_1.CONFIG_EVALUATIONS_FLAG] = api_types_1.CONFIG_EVALUATIONS_ENABLED_VARIANT; } if (this.globalConfig.evaluation.agentEvalsEnabled) { overrides[api_types_1.AGENT_EVALS_FLAG] = true; } return Object.keys(overrides).length === 0 ? flags : { ...flags, ...overrides }; } }; exports.PostHogClient = PostHogClient; exports.PostHogClient = PostHogClient = __decorate([ (0, di_1.Service)(), __metadata("design:paramtypes", [n8n_core_1.InstanceSettings, config_1.GlobalConfig]) ], PostHogClient); //# sourceMappingURL=index.js.map