in src/lib/header-bidding/prebid/modules/analyticsAdapter.ts [132:229]
n: getBidderCode(args),
bid: args.requestId,
sid: args.adUnitCode,
cpm: args.cpm,
pb: args.pbCg,
cry: args.currency,
net: args.netRevenue,
did: args.adId,
cid: args.creativeId,
sz: args.size,
ttr: args.timeToRespond,
lid: args.dealId,
dsp: args.meta?.networkId,
adv: args.meta?.buyerId,
bri: args.meta?.brandId,
brn: args.meta?.brandName,
add: args.meta?.clickUrl,
});
return [event];
}
return null;
},
[EVENTS.NO_BID]: (adapter, args) => {
const duration = Date.now() - (adapter.context?.auctionTimeStart ?? 0);
const event = createEvent({
ev: 'nobid',
n: args.bidder ?? args.bidderCode,
bid: args.bidId ?? args.requestId,
sid: args.adUnitCode,
aid: args.auctionId,
ttr: duration,
});
return [event];
},
[EVENTS.AUCTION_END]: (adapter, args) => {
const duration = Date.now() - (adapter.context?.auctionTimeStart ?? 0);
const event = createEvent({
ev: 'end',
aid: args.auctionId,
ttr: duration,
});
return [event];
},
[EVENTS.BID_WON]: (_, args: BidArgs) => {
const event = createEvent({
ev: 'bidwon',
aid: args.auctionId,
bid: args.requestId,
});
return [event];
},
} as const satisfies Record<string, Handler>;
type AnalyticsPayload = {
v: number;
pv: string;
hb_ev: EventData[];
};
// Check if the payload is valid
function isPayloadValid(events: EventData[]): boolean {
return (
(events[0] && (events[0].ev === 'init' || events[0].ev === 'bidwon')) ??
false
);
}
const createPayload = (events: EventData[], pv: string): AnalyticsPayload => {
const payload = {
v: VERSION,
pv,
hb_ev: events,
};
if (!isPayloadValid(events)) {
reportError(
new Error('Invalid analytics payload'),
'commercial',
{},
{
invalidEventsList: JSON.stringify(events),
},
);
}
return payload;
};
const analyticsAdapter = Object.assign(adapter({ analyticsType: 'endpoint' }), {
sendPayload: async (
url: string,
payload: AnalyticsPayload,
): Promise<void> => {
const events = [...queue];
queue = [];
try {
const response = await fetch(url, {