From 0444461385be2fbfbd7ec334b8f18b6cc722a9db Mon Sep 17 00:00:00 2001 From: Jesse Winton Date: Wed, 29 Jan 2025 12:18:15 -0500 Subject: [PATCH 1/2] more reliable fingerprint? --- src/routes/+layout.server.ts | 38 ++++++++++++++---------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index dc7c23f40e..6e4393de97 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -1,38 +1,30 @@ import crypto from 'node:crypto'; -import { posthogServerClient } from '$lib/experiments'; import { getAllChangelogEntries } from './changelog/utils'; export const trailingSlash = 'never'; -const generateDistinctId = (fingerprintData: Record) => { - return crypto.createHash('sha256').update(JSON.stringify(fingerprintData)).digest('hex'); +const generateDistinctId = (request: Request, clientAddress?: string) => { + const headers = Object.fromEntries(request.headers); + + const identifiers = [ + clientAddress || 'unknown-ip', + headers['user-agent'] || 'unknown-ua', + + !clientAddress ? Math.random().toString() : '', + request.headers.get('cookie')?.match(/sessionid=([^;]+)/)?.[1] || '' + ].join('|'); + + return crypto.createHash('sha256').update(identifiers).digest('hex'); }; export const load = async ({ request, getClientAddress }) => { - const clientAddress = getClientAddress(); - const headers = Object.fromEntries(request.headers); - const fingerprintData = { - ip: clientAddress, - userAgent: headers['user-agent'], - acceptLanguage: headers['accept-language'], - platform: headers['sec-ch-ua-platform'], - mobile: headers['sec-ch-ua-mobile'], - browserBrand: headers['sec-ch-ua'] - }; - - const distinctId = generateDistinctId(fingerprintData); - const ctaVariant = await posthogServerClient?.getFeatureFlag('cta-copy_ab-test', distinctId); + const distinctId = generateDistinctId(request, getClientAddress()); + // const ctaVariant = await posthogServerClient?.getFeatureFlag('cta-copy_ab-test', distinctId); - const ctaCopy = - ctaVariant === 'start-building_variant' - ? 'Start building' - : ctaVariant === 'start-for-free_variant' - ? 'Start for free' - : 'Get started'; + console.log('distinctId', distinctId); return { - ctaCopy, distinctId, changelogEntries: (await getAllChangelogEntries()).length }; From ee694f2ea18df8036c9b929280bb05ec95f1a014 Mon Sep 17 00:00:00 2001 From: Jesse Winton Date: Wed, 29 Jan 2025 13:38:09 -0500 Subject: [PATCH 2/2] put stuff back --- src/routes/+layout.server.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index 6e4393de97..a99452b098 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -20,11 +20,17 @@ const generateDistinctId = (request: Request, clientAddress?: string) => { export const load = async ({ request, getClientAddress }) => { const distinctId = generateDistinctId(request, getClientAddress()); - // const ctaVariant = await posthogServerClient?.getFeatureFlag('cta-copy_ab-test', distinctId); + const ctaVariant = await posthogServerClient?.getFeatureFlag('cta-copy_ab-test', distinctId); - console.log('distinctId', distinctId); + const ctaCopy = + ctaVariant === 'start-building_variant' + ? 'Start building' + : ctaVariant === 'start-for-free_variant' + ? 'Start for free' + : 'Get started'; return { + ctaCopy, distinctId, changelogEntries: (await getAllChangelogEntries()).length };