conversion: more robust fbp, fbc with header-based attempt

This commit is contained in:
Elijah Duffy
2025-12-18 22:06:23 -08:00
parent 764da5db2e
commit 0e1a449cb6
2 changed files with 19 additions and 5 deletions

View File

@@ -8,8 +8,9 @@ import type {
} from '$lib/types/conversion.js'; } from '$lib/types/conversion.js';
import { StatusCodes } from 'http-status-codes'; import { StatusCodes } from 'http-status-codes';
import { getFbpFbcFromCookies } from '../metapixel/fbc.ts';
const getEventIP = (request: Request, getClientAddress: () => string) => { export const getRequestIP = (request: Request, getClientAddress: () => string) => {
return ( return (
request.headers.get('x-forwarded-for') || request.headers.get('x-forwarded-for') ||
request.headers.get('cf-connecting-ip') || request.headers.get('cf-connecting-ip') ||
@@ -26,18 +27,21 @@ const getEventIP = (request: Request, getClientAddress: () => string) => {
export const createConversionRequestHandler: (control: ConversionControl) => RequestHandler = ( export const createConversionRequestHandler: (control: ConversionControl) => RequestHandler = (
control control
) => { ) => {
const handle: RequestHandler = async ({ request, getClientAddress }) => { const handle: RequestHandler = async ({ request, getClientAddress, cookies }) => {
try { try {
const body = (await request.json()) as ConversionRequestBody; const body = (await request.json()) as ConversionRequestBody;
// Build user data with IP and user agent // Build user data with IP and user agent
const ip = getEventIP(request, getClientAddress); const ip = getRequestIP(request, getClientAddress);
const ua = request.headers.get('user-agent'); const ua = request.headers.get('user-agent');
const { fbp, fbc } = getFbpFbcFromCookies(cookies);
const userData: ConversionUserData = { const userData: ConversionUserData = {
...body.user, ...body.user,
ip, ip,
ua: ua ?? body.user?.ua ?? undefined ua: ua ?? body.user?.ua ?? undefined,
fbc: body.user?.fbc ?? fbc,
fbp: body.user?.fbp ?? fbp
}; };
// Build custom data with UTM params if applicable // Build custom data with UTM params if applicable

View File

@@ -1,3 +1,4 @@
import type { Cookies } from '@sveltejs/kit';
import log from 'loglevel'; import log from 'loglevel';
export type EnsureFbcOptions = { export type EnsureFbcOptions = {
@@ -79,10 +80,19 @@ export function ensureFbc(options: EnsureFbcOptions = {}) {
} }
/** /**
* Helper to read both _fbp and _fbc for your CAPI payload. * Helper to read both _fbp and _fbc for your CAPI payload from browser cookies.
*/ */
export function getFbpFbc(): { fbp?: string; fbc?: string } { export function getFbpFbc(): { fbp?: string; fbc?: string } {
const fbp = getCookie('_fbp'); const fbp = getCookie('_fbp');
const fbc = getCookie('_fbc'); const fbc = getCookie('_fbc');
return { fbp, fbc }; return { fbp, fbc };
} }
/**
* Helper to read both _fbp and _fbc for your CAPI payload from cookies object.
*/
export function getFbpFbcFromCookies(cookies: Cookies): { fbp?: string; fbc?: string } {
const fbp = cookies.get('_fbp') || undefined;
const fbc = cookies.get('_fbc') || undefined;
return { fbp, fbc };
}