diff --git a/.changeset/fancy-baboons-drum.md b/.changeset/fancy-baboons-drum.md new file mode 100644 index 000000000..4d51d3fee --- /dev/null +++ b/.changeset/fancy-baboons-drum.md @@ -0,0 +1,5 @@ +--- +"lingo.dev": patch +--- + +fix posthog diff --git a/packages/cli/src/cli/utils/observability.ts b/packages/cli/src/cli/utils/observability.ts index b98397f01..3f954750b 100644 --- a/packages/cli/src/cli/utils/observability.ts +++ b/packages/cli/src/cli/utils/observability.ts @@ -18,9 +18,8 @@ function determineDistinctId(email: string | null | undefined): { const orgId = getOrgId(); if (email) { - const hashedEmail = crypto.createHash("sha256").update(email).digest("hex"); return { - distinct_id: hashedEmail, + distinct_id: email, distinct_id_source: "email", org_id: orgId, }; @@ -72,6 +71,7 @@ export default function trackEvent( distinct_id: identityInfo.distinct_id, properties: { ...properties, + $set: { ...(properties?.$set || {}), ...(email ? { email } : {}) }, $lib: "lingo.dev-cli", $lib_version: process.env.npm_package_version || "unknown", tracking_version: TRACKING_VERSION, @@ -112,6 +112,33 @@ export default function trackEvent( req.write(payload); req.end(); + // TODO: remove after 2026-03-25 — temporary alias to merge old hashed distinct_ids with new raw email + if (email) { + const hashedEmail = crypto.createHash("sha256").update(email).digest("hex"); + const aliasData = JSON.stringify({ + api_key: POSTHOG_API_KEY, + event: "$create_alias", + distinct_id: email, + properties: { + alias: hashedEmail, + }, + timestamp: new Date().toISOString(), + }); + + const aliasReq = https.request({ + ...options, + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.byteLength(aliasData).toString(), + }, + }); + aliasReq.on("timeout", () => aliasReq.destroy()); + aliasReq.on("error", () => {}); + aliasReq.write(aliasData); + aliasReq.end(); + setTimeout(() => { if (!aliasReq.destroyed) aliasReq.destroy(); }, REQUEST_TIMEOUT_MS); + } + setTimeout(() => { if (!req.destroyed) { req.destroy();