diff --git a/lib/addons/prototypes/analytics.js b/lib/addons/prototypes/analytics.js index d89c288..6be2aac 100644 --- a/lib/addons/prototypes/analytics.js +++ b/lib/addons/prototypes/analytics.js @@ -21,6 +21,7 @@ class OptablePrebidAnalytics { // Store auction data this.auctions = {}; + this.missedAuctionIds = new Set(); this.maxAuctionDataSize = 20; sessionStorage.optableSessionDepth = (Number(sessionStorage?.optableSessionDepth) || 0) + 1; @@ -57,26 +58,25 @@ class OptablePrebidAnalytics { } setHooks(pbjs) { - this.log("Processing missed auctionEnd"); + this.log("Processing past events"); pbjs.getEvents().forEach((event) => { - if (event.eventType === "auctionEnd") { - this.log("auction missed"); + if (event.eventType === "auctionInit") { + this.missedAuctionIds.add(event.args.auctionId); + } else if (event.eventType === "auctionEnd") { + this.missedAuctionIds.delete(event.args.auctionId); + this.log(`auction ${event.args.auctionId} missed (completed before hook)`); this.trackAuctionEnd(event.args, true); } - if (event.eventType === "bidWon") { - this.log("bid won missed"); - this.trackBidWon(event.args, true); - } }); this.log("Hooking into Prebid.js events"); pbjs.onEvent("auctionEnd", (event) => { - this.log("auctionEnd event received"); - this.trackAuctionEnd(event); - }); - pbjs.onEvent("bidWon", (event) => { - this.log("bidWon event received"); - this.trackBidWon(event); + const missed = this.missedAuctionIds.has(event.auctionId); + if (missed) { + this.missedAuctionIds.delete(event.auctionId); + } + this.log(`auctionEnd event received, missed=${missed}`); + this.trackAuctionEnd(event, missed); }); } @@ -301,18 +301,6 @@ class OptablePrebidAnalytics { } } - trackBidWon(event, missed) { - const filteredEvent = { - auctionId: event.auctionId, - bidderCode: event.bidderCode, - bidId: event.requestId, - tenant: this.config.tenant, - missed, - }; - this.log("bidWon filtered event", filteredEvent); - this.sendToWitnessAPI("bid_won", filteredEvent); - } - /** * Clean up old auctions to prevent memory leaks */ @@ -330,6 +318,7 @@ class OptablePrebidAnalytics { */ clearData() { this.auctions = {}; + this.missedAuctionIds.clear(); this.log("All analytics data cleared"); } }