diff --git a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java index 5c7c468af8f..5fb26e698fd 100644 --- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java @@ -409,11 +409,14 @@ private static ExtBidPrebidVideo videoInfo(ExtBidPrebidVideo extBidPrebidVideo) private List extractFledge(IxBidResponse bidResponse) { return Optional.ofNullable(bidResponse) .map(IxBidResponse::getExt) - .map(IxExtBidResponse::getFledgeAuctionConfigs) - .orElse(Collections.emptyMap()) - .entrySet() + .map(IxExtBidResponse::getProtectedAudienceAuctionConfigs) + .orElse(Collections.emptyList()) .stream() - .map(e -> FledgeAuctionConfig.builder().impId(e.getKey()).config(e.getValue()).build()) + .filter(Objects::nonNull) + .map(ixAuctionConfig -> FledgeAuctionConfig.builder() + .impId(ixAuctionConfig.getBidId()) + .config(ixAuctionConfig.getConfig()) + .build()) .toList(); } } diff --git a/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java b/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java new file mode 100644 index 00000000000..709fab87429 --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java @@ -0,0 +1,14 @@ +package org.prebid.server.bidder.ix.model.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.Value; + +@Value(staticConstructor = "of") +public class AuctionConfigExtBidResponse { + + @JsonProperty("bidId") + String bidId; + + ObjectNode config; +} diff --git a/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java b/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java index c292317d22c..c586817df2c 100644 --- a/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java +++ b/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java @@ -1,15 +1,14 @@ package org.prebid.server.bidder.ix.model.response; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Value; -import java.util.Map; +import java.util.List; @Value(staticConstructor = "of") public class IxExtBidResponse { - @JsonProperty("fledge_auction_configs") - Map fledgeAuctionConfigs; + @JsonProperty("protectedAudienceAuctionConfigs") + List protectedAudienceAuctionConfigs; } diff --git a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java index 18f020f2bc0..35726f5a205 100644 --- a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java @@ -27,6 +27,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.prebid.server.VertxTest; import org.prebid.server.bidder.ix.model.request.IxDiag; +import org.prebid.server.bidder.ix.model.response.AuctionConfigExtBidResponse; import org.prebid.server.bidder.ix.model.response.IxBidResponse; import org.prebid.server.bidder.ix.model.response.IxExtBidResponse; import org.prebid.server.bidder.ix.model.response.NativeV11Wrapper; @@ -49,7 +50,6 @@ import org.prebid.server.version.PrebidVersionProvider; import java.util.List; -import java.util.Map; import java.util.function.Function; import java.util.function.UnaryOperator; @@ -778,7 +778,7 @@ public void makeBidderResponseShouldReturnFledgeAuctionConfig() throws JsonProce final IxBidResponse bidResponseWithFledge = IxBidResponse.builder() .cur(bidResponse.getCur()) .seatbid(bidResponse.getSeatbid()) - .ext(IxExtBidResponse.of(Map.of(impId, fledgeAuctionConfig))) + .ext(IxExtBidResponse.of(List.of(AuctionConfigExtBidResponse.of(impId, fledgeAuctionConfig)))) .build(); final BidderCall httpCall = givenHttpCall(bidRequest, mapper.writeValueAsString(bidResponseWithFledge)); diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json index 0c46e680fbc..1fc85c3cd79 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json @@ -8,6 +8,7 @@ "h": 250 }, "ext": { + "ae": 1, "ix": { "siteId": "10002" } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json index 8685c8ede1a..5be6fc4788c 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-response.json @@ -27,7 +27,47 @@ "ix": "{{ ix.response_time_ms }}" }, "prebid": { - "auctiontimestamp": 0 + "auctiontimestamp": 0, + "fledge": { + "auctionconfigs": [ + { + "impid": "imp_id", + "bidder": "ix", + "adapter": "ix", + "config": { + "seller": "https://test.casalemedia.com", + "decisionLogicUrl": "https://test.casalemedia.com/decision-logic.js", + "trustedScoringSignalsURL": "https://test.casalemedia.com/123", + "interestGroupBuyers": [ + "https://test.com" + ], + "sellerSignals": { + "callbackURL": "https://test.casalemedia.com/callback/1", + "debugURL": "https://test.casalemedia.com/debug/1", + "width": 300, + "height": 250 + }, + "sellerTimeout": 150, + "perBuyerSignals": { + "https://test.com": [ + { + "key": "value" + } + ] + }, + "perBuyerCurrencies": { + "*": "USD" + }, + "sellerCurrency": "USD", + "requestedSize": { + "width": 300, + "height": 250 + }, + "maxTrustedBiddingSignalsURLLength": 1000 + } + } + ] + } }, "tmaxrequest": 5000 } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json index 0658f90c813..ef303b14b8e 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json @@ -15,6 +15,7 @@ "h": 250 }, "ext": { + "ae": 1, "tid": "${json-unit.any-string}", "bidder": { "siteId": "10002" diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-response.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-response.json index 9d9d7035ed7..c62e7c626b9 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-response.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-response.json @@ -13,5 +13,43 @@ ], "seat": "seatId6" } - ] + ], + "ext": { + "protectedAudienceAuctionConfigs": [ + { + "bidId": "imp_id", + "config": { + "seller": "https://test.casalemedia.com", + "decisionLogicUrl": "https://test.casalemedia.com/decision-logic.js", + "trustedScoringSignalsURL": "https://test.casalemedia.com/123", + "interestGroupBuyers": [ + "https://test.com" + ], + "sellerSignals": { + "callbackURL": "https://test.casalemedia.com/callback/1", + "debugURL": "https://test.casalemedia.com/debug/1", + "width": 300, + "height": 250 + }, + "sellerTimeout": 150, + "perBuyerSignals": { + "https://test.com": [ + { + "key": "value" + } + ] + }, + "perBuyerCurrencies": { + "*": "USD" + }, + "sellerCurrency": "USD", + "requestedSize": { + "width": 300, + "height": 250 + }, + "maxTrustedBiddingSignalsURLLength": 1000 + } + } + ] + } }