conversion: more robust fbp, fbc with header-based attempt
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user