capi: proper dev mode handling requiring test event code
This commit is contained in:
@@ -1,12 +1,8 @@
|
||||
import {
|
||||
CustomData,
|
||||
EventRequest,
|
||||
EventResponse,
|
||||
ServerEvent,
|
||||
UserData
|
||||
} from 'facebook-nodejs-business-sdk';
|
||||
import { CustomData, EventRequest, ServerEvent, UserData } from 'facebook-nodejs-business-sdk';
|
||||
import type { StandardEventName } from '../types/fbq.js';
|
||||
import type { ConversionUserData } from '$lib/types/conversion.js';
|
||||
import type { ConversionResponseBody, ConversionUserData } from '$lib/types/conversion.js';
|
||||
import { dev } from '$app/environment';
|
||||
import log from 'loglevel';
|
||||
|
||||
/**
|
||||
* Builds UserData for conversion events.
|
||||
@@ -90,7 +86,8 @@ export class ConversionControl {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a conversion event to Meta Pixel.
|
||||
* Sends a conversion event to Meta Pixel. Requires a test event code for
|
||||
* events to be sent to Meta when in development mode.
|
||||
*
|
||||
* @param eventName - The name of the standard event to send.
|
||||
* @param options - Additional options for the event.
|
||||
@@ -99,7 +96,7 @@ export class ConversionControl {
|
||||
async trackEvent(
|
||||
eventName: StandardEventName,
|
||||
options: ConversionEventOptions
|
||||
): Promise<EventResponse> {
|
||||
): Promise<ConversionResponseBody> {
|
||||
const event = new ServerEvent()
|
||||
.setEventName(eventName)
|
||||
.setEventTime(Math.floor(Date.now() / 1000))
|
||||
@@ -110,8 +107,35 @@ export class ConversionControl {
|
||||
if (options?.eventSourceURL) event.setEventSourceUrl(options.eventSourceURL);
|
||||
if (options?.customData) event.setCustomData(options.customData);
|
||||
|
||||
// If we're in dev mode and missing a test event code, log and exit
|
||||
if (dev && !this._testEventCode) {
|
||||
log.info(
|
||||
`[ConversionControl] ${eventName} event not sent - missing test event code in dev mode.`
|
||||
);
|
||||
return Promise.resolve({
|
||||
pixelID: this._pixelID,
|
||||
fbtrace_id: 'dev-mode-no-test-event-code',
|
||||
receivedEvents: 1,
|
||||
processedEvents: 0,
|
||||
messages: ['Event not sent - missing test event code in dev mode.']
|
||||
});
|
||||
}
|
||||
|
||||
const req = new EventRequest(this._accessToken, this._pixelID).setEvents([event]);
|
||||
if (this._testEventCode) req.setTestEventCode(this._testEventCode);
|
||||
return req.execute();
|
||||
const response = await req.execute();
|
||||
|
||||
const structuredResponse: ConversionResponseBody = {
|
||||
pixelID: response.id,
|
||||
fbtrace_id: response.fbtrace_id,
|
||||
receivedEvents: response.events_received,
|
||||
processedEvents: response.num_processed_entries,
|
||||
messages: response.messages
|
||||
};
|
||||
|
||||
log.debug(
|
||||
`[ConversionControl] Sent ${eventName}, Event response: ${JSON.stringify(structuredResponse)}`
|
||||
);
|
||||
return structuredResponse;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
import { json, type RequestHandler } from '@sveltejs/kit';
|
||||
import { buildConversionUserData, buildCustomData, ConversionControl } from './control.ts';
|
||||
import type {
|
||||
ConversionErrorResponseBody,
|
||||
ConversionRequestBody,
|
||||
ConversionResponseBody
|
||||
} from '$lib/types/conversion.js';
|
||||
import type { ConversionErrorResponseBody, ConversionRequestBody } from '$lib/types/conversion.js';
|
||||
|
||||
import { StatusCodes } from 'http-status-codes';
|
||||
|
||||
@@ -46,16 +42,7 @@ export const createConversionRequestHandler: (control: ConversionControl) => Req
|
||||
customData
|
||||
});
|
||||
|
||||
// Structure the response
|
||||
const structuredResponse: ConversionResponseBody = {
|
||||
pixelID: response.id,
|
||||
fbtrace_id: response.fbtrace_id,
|
||||
receivedEvents: response.events_received,
|
||||
processedEvents: response.num_processed_entries,
|
||||
messages: response.messages
|
||||
};
|
||||
|
||||
return json(structuredResponse, { status: StatusCodes.OK });
|
||||
return json(response, { status: StatusCodes.OK });
|
||||
} catch (e) {
|
||||
return json(
|
||||
{ error: e instanceof Error ? e.message : String(e) } as ConversionErrorResponseBody,
|
||||
|
||||
Reference in New Issue
Block a user