httpCall, BidRequest bidRequest);
- /**
- * Compound Bidder response with bids and other data to be passed back.
- *
- * The errors should contain a list of errors which explain why this bidder's bids will be
- * "subpar" in some way. For example: the server response didn't have the expected format.
- */
- default CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
- final var result = makeBids(httpCall, bidRequest);
- return result != null
- ? CompositeBidderResponse.builder()
- .bids(result.getValue())
- .errors(result.getErrors())
- .build()
- : null;
- }
-
/**
* Extracts targeting from bidder-specific extension. It is safe to assume that {@code ext} is not null.
*/
diff --git a/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java b/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java
index 61e074ecb26..13cc63a666c 100644
--- a/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java
+++ b/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java
@@ -8,8 +8,8 @@
import io.vertx.core.MultiMap;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
-import org.prebid.server.auction.aliases.BidderAliases;
import org.prebid.server.auction.ExchangeService;
+import org.prebid.server.auction.aliases.BidderAliases;
import org.prebid.server.auction.model.BidRejectionReason;
import org.prebid.server.auction.model.BidRejectionTracker;
import org.prebid.server.auction.model.BidderRequest;
@@ -18,7 +18,6 @@
import org.prebid.server.bidder.model.BidderCallType;
import org.prebid.server.bidder.model.BidderError;
import org.prebid.server.bidder.model.BidderSeatBid;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.HttpResponse;
import org.prebid.server.bidder.model.Result;
@@ -30,8 +29,6 @@
import org.prebid.server.log.LoggerFactory;
import org.prebid.server.model.CaseInsensitiveMultiMap;
import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.vertx.httpclient.HttpClient;
import org.prebid.server.vertx.httpclient.model.HttpClientResponse;
@@ -191,9 +188,7 @@ private Future emptyBidderSeatBidWithErrors(List bid
"The bidder failed to generate any bid requests, but also failed to generate an error"))
: bidderErrors;
- return Future.succeededFuture(BidderSeatBid.builder()
- .errors(errors)
- .build());
+ return Future.succeededFuture(BidderSeatBid.builder().errors(errors).build());
}
/**
@@ -296,10 +291,7 @@ private Void processHttpCall(Bidder bidder,
return null;
}
- /**
- * Returns result based on response status code, list of {@link BidderBid}s and other data from bidder.
- */
- private static CompositeBidderResponse makeBids(Bidder bidder,
+ private static Result> makeBids(Bidder bidder,
BidderCall httpCall,
BidRequest bidRequest) {
@@ -309,13 +301,13 @@ private static CompositeBidderResponse makeBids(Bidder bidder,
final int statusCode = httpCall.getResponse().getStatusCode();
if (statusCode == HttpResponseStatus.NO_CONTENT.code()) {
- return CompositeBidderResponse.empty();
+ return Result.empty();
}
if (statusCode != HttpResponseStatus.OK.code()) {
return null;
}
- return bidder.makeBidderResponse(toHttpCallWithSafeResponseBody(httpCall), bidRequest);
+ return bidder.makeBids(toHttpCallWithSafeResponseBody(httpCall), bidRequest);
}
/**
@@ -346,8 +338,6 @@ private static class ResultBuilder {
private final Map, BidderCall> bidderCallsRecorded = new HashMap<>();
private final List bidsRecorded = new ArrayList<>();
private final List errorsRecorded = new ArrayList<>();
- private final List igiRecorded = new ArrayList<>();
- private final List fledgeRecorded = new ArrayList<>();
ResultBuilder(List> httpRequests,
List previousErrors,
@@ -362,17 +352,15 @@ private static class ResultBuilder {
this.mapper = mapper;
}
- void addHttpCall(BidderCall bidderCall, CompositeBidderResponse bidderResponse) {
+ void addHttpCall(BidderCall bidderCall, Result> bidderResponse) {
bidderCallsRecorded.put(bidderCall.getRequest(), bidderCall);
handleBids(bidderResponse);
handleBidderErrors(bidderResponse);
handleBidderCallError(bidderCall);
- handleIgis(bidderResponse);
- handleFledgeAuctionConfigs(bidderResponse);
}
- private void handleBids(CompositeBidderResponse bidderResponse) {
- final List bids = bidderResponse != null ? bidderResponse.getBids() : null;
+ private void handleBids(Result> bidderResponse) {
+ final List bids = bidderResponse != null ? bidderResponse.getValue() : null;
if (bids != null) {
bidsRecorded.addAll(bids);
completionTracker.processBids(bids);
@@ -380,7 +368,7 @@ private void handleBids(CompositeBidderResponse bidderResponse) {
}
}
- private void handleBidderErrors(CompositeBidderResponse bidderResponse) {
+ private void handleBidderErrors(Result> bidderResponse) {
final List bidderErrors = bidderResponse != null ? bidderResponse.getErrors() : null;
if (bidderErrors != null) {
errorsRecorded.addAll(bidderErrors);
@@ -425,18 +413,6 @@ private void handleBidderCallError(BidderCall bidderCall) {
bidRejectionTracker.rejectImps(requestedImpIds, reason);
}
- private void handleFledgeAuctionConfigs(CompositeBidderResponse bidderResponse) {
- Optional.ofNullable(bidderResponse)
- .map(CompositeBidderResponse::getFledgeAuctionConfigs)
- .ifPresent(fledgeRecorded::addAll);
- }
-
- private void handleIgis(CompositeBidderResponse bidderResponse) {
- Optional.ofNullable(bidderResponse)
- .map(CompositeBidderResponse::getIgi)
- .ifPresent(igiRecorded::addAll);
- }
-
BidderSeatBid toBidderSeatBid(boolean debugEnabled) {
final List> httpCalls = new ArrayList<>(bidderCallsRecorded.values());
httpRequests.stream()
@@ -454,8 +430,6 @@ BidderSeatBid toBidderSeatBid(boolean debugEnabled) {
.bids(bidsRecorded)
.httpCalls(extHttpCalls)
.errors(errors)
- .igi(igiRecorded)
- .fledgeAuctionConfigs(fledgeRecorded)
.build();
}
diff --git a/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java b/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java
index 605abaf6331..31b75e4980f 100644
--- a/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java
+++ b/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java
@@ -17,7 +17,6 @@
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.exception.PreBidException;
@@ -116,23 +115,13 @@ private static MultiMap resolveHeaders() {
}
@Override
- @Deprecated(since = "Not used, since Bidder.makeBidderResponse(...) was overridden.")
public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
- return Result.withError(BidderError.generic("Invalid method call"));
- }
-
- @Override
- public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
try {
- final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
final List errors = new ArrayList<>();
-
- return CompositeBidderResponse.builder()
- .bids(extractConsumableBids(bidRequest, bidResponse, errors))
- .errors(errors)
- .build();
+ final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
+ return Result.of(extractConsumableBids(bidRequest, bidResponse, errors), errors);
} catch (DecodeException e) {
- return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
+ return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}
diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidResponse.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidResponse.java
deleted file mode 100644
index d6f43ef4c86..00000000000
--- a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidResponse.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.prebid.server.bidder.criteo;
-
-import com.iab.openrtb.response.SeatBid;
-import lombok.Builder;
-import lombok.Value;
-
-import java.util.List;
-
-@Builder(toBuilder = true)
-@Value
-public class CriteoBidResponse {
-
- String id;
-
- List seatbid;
-
- String bidid;
-
- String cur;
-
- String customdata;
-
- Integer nbr;
-
- CriteoExtBidResponse ext;
-
-}
diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java
index 9bf68e89e24..1afc5d9fa98 100644
--- a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java
+++ b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java
@@ -4,13 +4,13 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.response.Bid;
+import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
import org.apache.commons.collections4.CollectionUtils;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.exception.PreBidException;
@@ -19,7 +19,6 @@
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
@@ -45,27 +44,18 @@ public Result>> makeHttpRequests(BidRequest bidRequ
}
@Override
- @Deprecated(forRemoval = true)
public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
- return Result.withError(BidderError.generic("Deprecated adapter method invoked"));
- }
-
- @Override
- public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
try {
- final CriteoBidResponse bidResponse = mapper.decodeValue(
- httpCall.getResponse().getBody(), CriteoBidResponse.class);
+ final BidResponse bidResponse = mapper.decodeValue(
+ httpCall.getResponse().getBody(), BidResponse.class);
- return CompositeBidderResponse.builder()
- .bids(extractBids(bidResponse))
- .igi(extractIgi(bidResponse))
- .build();
+ return Result.withValues(extractBids(bidResponse));
} catch (DecodeException | PreBidException e) {
- return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
+ return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}
- private List extractBids(CriteoBidResponse bidResponse) {
+ private List extractBids(BidResponse bidResponse) {
if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) {
return Collections.emptyList();
}
@@ -106,12 +96,4 @@ private ObjectNode makeExt(String networkName) {
.meta(ExtBidPrebidMeta.builder().networkName(networkName).build())
.build());
}
-
- private static List extractIgi(CriteoBidResponse bidResponse) {
- return Optional.ofNullable(bidResponse)
- .map(CriteoBidResponse::getExt)
- .map(CriteoExtBidResponse::getIgi)
- .filter(CollectionUtils::isNotEmpty)
- .orElse(Collections.emptyList());
- }
}
diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoExtBidResponse.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoExtBidResponse.java
deleted file mode 100644
index dda26a73ef7..00000000000
--- a/src/main/java/org/prebid/server/bidder/criteo/CriteoExtBidResponse.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.prebid.server.bidder.criteo;
-
-import lombok.Value;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-
-import java.util.List;
-
-@Value(staticConstructor = "of")
-public class CriteoExtBidResponse {
-
- List igi;
-}
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 fcfc8a729a3..7c0ad863a34 100644
--- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java
+++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java
@@ -15,19 +15,17 @@
import com.iab.openrtb.request.ntv.EventTrackingMethod;
import com.iab.openrtb.request.ntv.EventType;
import com.iab.openrtb.response.Bid;
+import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.EventTracker;
import com.iab.openrtb.response.Response;
import com.iab.openrtb.response.SeatBid;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.prebid.server.bidder.Bidder;
-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;
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.exception.PreBidException;
@@ -41,8 +39,6 @@
import org.prebid.server.proto.openrtb.ext.request.ix.ExtImpIx;
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.ObjectUtil;
@@ -243,29 +239,18 @@ private ObjectNode makeDiagData(ExtRequest extRequest, Set siteIds) {
}
@Override
- @Deprecated(since = "Not used, since Bidder.makeBidderResponse(...) was overridden.")
public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
- return Result.withError(BidderError.generic("Invalid method call"));
- }
-
- @Override
- public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
try {
- final IxBidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), IxBidResponse.class);
final List errors = new ArrayList<>();
-
- return CompositeBidderResponse.builder()
- .bids(extractBids(bidRequest, bidResponse, errors))
- .igi(extractIgi(bidResponse))
- .errors(errors)
- .build();
+ final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
+ return Result.of(extractBids(bidRequest, bidResponse, errors), errors);
} catch (DecodeException e) {
- return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
+ return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}
private List extractBids(BidRequest bidRequest,
- IxBidResponse bidResponse,
+ BidResponse bidResponse,
List errors) {
if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) {
@@ -283,7 +268,7 @@ private List extractBids(BidRequest bidRequest,
.toList();
}
- private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, IxBidResponse bidResponse, List errors) {
+ private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, BidResponse bidResponse, List errors) {
final BidType bidType;
try {
bidType = getBidType(bid, bidRequest.getImp());
@@ -368,8 +353,8 @@ private ExtBidPrebidVideo parseBidExtPrebidVideo(ObjectNode bidExt) {
private Bid updateBidWithVideoAttributes(Bid bid, ExtBidPrebidVideo extBidPrebidVideo) {
return CollectionUtils.isEmpty(bid.getCat()) && extBidPrebidVideo != null
? bid.toBuilder()
- .cat(Collections.singletonList(extBidPrebidVideo.getPrimaryCategory()))
- .build()
+ .cat(Collections.singletonList(extBidPrebidVideo.getPrimaryCategory()))
+ .build()
: bid;
}
@@ -428,17 +413,4 @@ private static ExtBidPrebidVideo videoInfo(ExtBidPrebidVideo extBidPrebidVideo)
? ExtBidPrebidVideo.of(extBidPrebidVideo.getDuration(), null)
: null;
}
-
- private List extractIgi(IxBidResponse bidResponse) {
- final List igs = Optional.ofNullable(bidResponse)
- .map(IxBidResponse::getExt)
- .map(IxExtBidResponse::getProtectedAudienceAuctionConfigs)
- .orElse(Collections.emptyList())
- .stream()
- .filter(Objects::nonNull)
- .map(config -> ExtIgiIgs.builder().impId(config.getBidId()).config(config.getConfig()).build())
- .toList();
-
- return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build());
- }
}
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
deleted file mode 100644
index 709fab87429..00000000000
--- a/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java
+++ /dev/null
@@ -1,14 +0,0 @@
-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/IxBidResponse.java b/src/main/java/org/prebid/server/bidder/ix/model/response/IxBidResponse.java
deleted file mode 100644
index 0bbbace5f81..00000000000
--- a/src/main/java/org/prebid/server/bidder/ix/model/response/IxBidResponse.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.prebid.server.bidder.ix.model.response;
-
-import com.iab.openrtb.response.SeatBid;
-import lombok.Builder;
-import lombok.Value;
-
-import java.util.List;
-
-@Builder(toBuilder = true)
-@Value
-public class IxBidResponse {
-
- String id;
-
- List seatbid;
-
- String bidid;
-
- String cur;
-
- String customdata;
-
- Integer nbr;
-
- IxExtBidResponse ext;
-}
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
deleted file mode 100644
index c586817df2c..00000000000
--- a/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.prebid.server.bidder.ix.model.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Value;
-
-import java.util.List;
-
-@Value(staticConstructor = "of")
-public class IxExtBidResponse {
-
- @JsonProperty("protectedAudienceAuctionConfigs")
- List protectedAudienceAuctionConfigs;
-
-}
diff --git a/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java b/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java
index a82d6a72e63..adb208364ab 100644
--- a/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java
+++ b/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java
@@ -3,24 +3,19 @@
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.response.Bid;
+import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
import org.apache.commons.collections4.CollectionUtils;
import org.prebid.server.bidder.Bidder;
-import org.prebid.server.bidder.medianet.model.response.InterestGroupAuctionIntent;
-import org.prebid.server.bidder.medianet.model.response.MedianetBidResponse;
-import org.prebid.server.bidder.medianet.model.response.MedianetBidResponseExt;
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.exception.PreBidException;
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.proto.openrtb.ext.response.BidType;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
@@ -29,7 +24,6 @@
import java.util.Collections;
import java.util.List;
import java.util.Objects;
-import java.util.Optional;
public class MedianetBidder implements Bidder {
@@ -46,34 +40,23 @@ public Result>> makeHttpRequests(BidRequest bidRequ
return Result.withValue(BidderUtil.defaultRequest(bidRequest, endpointUrl, mapper));
}
- /**
- * @deprecated for this bidder in favor of @link{makeBidderResponse} which supports additional response data
- */
@Override
- @Deprecated(forRemoval = true)
public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
- return Result.withError(BidderError.generic("Deprecated adapter method invoked"));
- }
-
- @Override
- public final CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
- final MedianetBidResponse bidResponse;
+ final BidResponse bidResponse;
try {
- bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), MedianetBidResponse.class);
+ bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
} catch (DecodeException e) {
- return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
+ return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
final List errors = new ArrayList<>();
- return CompositeBidderResponse.builder()
- .bids(extractBids(httpCall.getRequest().getPayload(), bidResponse, errors))
- .igi(extractIgi(bidResponse))
- .errors(errors)
- .build();
+ return Result.of(extractBids(httpCall.getRequest().getPayload(), bidResponse, errors), errors);
}
- private static List extractBids(BidRequest bidRequest, MedianetBidResponse bidResponse,
+ private static List extractBids(BidRequest bidRequest,
+ BidResponse bidResponse,
List errors) {
+
if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) {
return Collections.emptyList();
}
@@ -135,18 +118,4 @@ private static BidType resolveBidTypeFromImpId(String impId, List imps) {
return BidType.banner;
}
-
- private static List extractIgi(MedianetBidResponse bidResponse) {
- final List igs = Optional.ofNullable(bidResponse)
- .map(MedianetBidResponse::getExt)
- .map(MedianetBidResponseExt::getIgi)
- .orElse(Collections.emptyList())
- .stream()
- .map(InterestGroupAuctionIntent::getIgs)
- .flatMap(Collection::stream)
- .map(igiIgs -> ExtIgiIgs.builder().impId(igiIgs.getImpId()).config(igiIgs.getConfig()).build())
- .toList();
-
- return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build());
- }
}
diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionBuyer.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionBuyer.java
deleted file mode 100644
index 04340fd8321..00000000000
--- a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionBuyer.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.prebid.server.bidder.medianet.model.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.Value;
-
-@Value
-public class InterestGroupAuctionBuyer {
-
- String origin;
-
- @JsonProperty("maxbid")
- Double maxBid;
-
- @JsonProperty("cur")
- String currency;
-
- @JsonProperty("pbs")
- String buyerSignals;
-
- @JsonProperty("ps")
- ObjectNode prioritySignals;
-}
diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionIntent.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionIntent.java
deleted file mode 100644
index e060c1fb5dd..00000000000
--- a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionIntent.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.prebid.server.bidder.medianet.model.response;
-
-import lombok.Builder;
-import lombok.Value;
-
-import java.util.List;
-
-@Builder
-@Value
-public class InterestGroupAuctionIntent {
-
- List igb;
-
- List igs;
-}
diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionSeller.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionSeller.java
deleted file mode 100644
index 15ae3ade13b..00000000000
--- a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionSeller.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.prebid.server.bidder.medianet.model.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.Builder;
-import lombok.Value;
-
-@Builder
-@Value
-public class InterestGroupAuctionSeller {
-
- @JsonProperty(value = "impid")
- String impId;
-
- ObjectNode config;
-}
diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponse.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponse.java
deleted file mode 100644
index 4677294e6fc..00000000000
--- a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponse.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.prebid.server.bidder.medianet.model.response;
-
-import com.iab.openrtb.response.SeatBid;
-import lombok.Builder;
-import lombok.Value;
-
-import java.util.List;
-
-@Value
-@Builder
-public class MedianetBidResponse {
-
- String id;
-
- List seatbid;
-
- String bidid;
-
- String cur;
-
- String customdata;
-
- Integer nbr;
-
- MedianetBidResponseExt ext;
-}
diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponseExt.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponseExt.java
deleted file mode 100644
index 2ce5775704c..00000000000
--- a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponseExt.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.prebid.server.bidder.medianet.model.response;
-
-import lombok.Value;
-
-import java.util.List;
-
-@Value(staticConstructor = "of")
-public class MedianetBidResponseExt {
-
- List igi;
-}
diff --git a/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java b/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java
index 8022b8667f1..4b760c40cd5 100644
--- a/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java
+++ b/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java
@@ -4,8 +4,6 @@
import lombok.Value;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig;
import java.util.Collections;
import java.util.List;
@@ -54,13 +52,6 @@ public class BidderSeatBid {
@Builder.Default
List warnings = Collections.emptyList();
- @Deprecated
- @Builder.Default
- List fledgeAuctionConfigs = Collections.emptyList();
-
- @Builder.Default
- List igi = Collections.emptyList();
-
public BidderSeatBid with(List bids) {
return toBuilder().bids(bids).build();
}
diff --git a/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java b/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java
index 38c9f86433c..9186e03f04b 100644
--- a/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java
+++ b/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java
@@ -3,8 +3,6 @@
import lombok.Value;
import org.prebid.server.auction.model.BidInfo;
import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig;
import java.util.List;
@@ -19,18 +17,11 @@ public class BidderSeatBidInfo {
List warnings;
- @Deprecated(forRemoval = true)
- List fledgeAuctionConfigs;
-
- List igi;
-
public BidderSeatBidInfo with(List bids) {
return BidderSeatBidInfo.of(
bids,
this.httpCalls,
this.errors,
- this.warnings,
- this.fledgeAuctionConfigs,
- this.igi);
+ this.warnings);
}
}
diff --git a/src/main/java/org/prebid/server/bidder/model/CompositeBidderResponse.java b/src/main/java/org/prebid/server/bidder/model/CompositeBidderResponse.java
deleted file mode 100644
index 75a71e0864a..00000000000
--- a/src/main/java/org/prebid/server/bidder/model/CompositeBidderResponse.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.prebid.server.bidder.model;
-
-import lombok.Builder;
-import lombok.Value;
-import org.prebid.server.bidder.Bidder;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Composite bidder response (bids + other data) returned by a {@link Bidder}.
- */
-@Value
-@Builder(toBuilder = true)
-public class CompositeBidderResponse {
-
- @Builder.Default
- List bids = Collections.emptyList();
-
- @Builder.Default
- List errors = Collections.emptyList();
-
- /**
- * FLEDGE interest group bids passback
- */
- List fledgeAuctionConfigs;
-
- List igi;
-
- public static CompositeBidderResponse empty() {
- return builder().build();
- }
-
- public static CompositeBidderResponse withError(BidderError error) {
- return builder().errors(Collections.singletonList(error)).build();
- }
-}
diff --git a/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java b/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java
index 00a8c8dc3fb..6483b491a61 100644
--- a/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java
+++ b/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java
@@ -5,6 +5,7 @@
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.response.Bid;
+import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
@@ -13,13 +14,10 @@
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.bidder.openx.model.OpenxImpType;
import org.prebid.server.bidder.openx.proto.OpenxBidExt;
-import org.prebid.server.bidder.openx.proto.OpenxBidResponse;
-import org.prebid.server.bidder.openx.proto.OpenxBidResponseExt;
import org.prebid.server.bidder.openx.proto.OpenxRequestExt;
import org.prebid.server.bidder.openx.proto.OpenxVideoExt;
import org.prebid.server.exception.PreBidException;
@@ -33,8 +31,6 @@
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
@@ -45,7 +41,6 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -90,29 +85,15 @@ public Result>> makeHttpRequests(BidRequest bidRequ
}
@Override
- public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
+ public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
try {
- final OpenxBidResponse bidResponse = mapper.decodeValue(
- httpCall.getResponse().getBody(), OpenxBidResponse.class);
-
- return CompositeBidderResponse.builder()
- .bids(extractBids(bidRequest, bidResponse))
- .igi(extractIgi(bidResponse))
- .build();
+ final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
+ return Result.withValues(extractBids(bidRequest, bidResponse));
} catch (DecodeException e) {
- return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
+ return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}
- /**
- * @deprecated for this bidder in favor of @link{makeBidderResponse} which supports additional response data
- */
- @Override
- @Deprecated(forRemoval = true)
- public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
- return Result.withError(BidderError.generic("Deprecated adapter method invoked"));
- }
-
private List makeRequests(
BidRequest bidRequest,
List bannerImps,
@@ -206,9 +187,9 @@ private BidRequest createSingleRequest(List imps, BidRequest bidRequest, Li
return CollectionUtils.isNotEmpty(processedImps)
? bidRequest.toBuilder()
- .imp(processedImps)
- .ext(makeReqExt(imps.getFirst()))
- .build()
+ .imp(processedImps)
+ .ext(makeReqExt(imps.getFirst()))
+ .build()
: null;
}
@@ -273,13 +254,13 @@ private ObjectNode makeImpExt(ObjectNode impExt, boolean addCustomParams) {
return openxImpExt;
}
- private List extractBids(BidRequest bidRequest, OpenxBidResponse bidResponse) {
+ private List extractBids(BidRequest bidRequest, BidResponse bidResponse) {
return bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())
? Collections.emptyList()
: bidsFromResponse(bidRequest, bidResponse);
}
- private List bidsFromResponse(BidRequest bidRequest, OpenxBidResponse bidResponse) {
+ private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) {
final Map impIdToBidType = impIdToBidType(bidRequest);
final String bidCurrency = StringUtils.isNotBlank(bidResponse.getCur())
@@ -325,19 +306,6 @@ private static BidType getBidType(Bid bid, Map impIdToBidType)
};
}
- private static List extractIgi(OpenxBidResponse bidResponse) {
- final List igs = Optional.ofNullable(bidResponse)
- .map(OpenxBidResponse::getExt)
- .map(OpenxBidResponseExt::getFledgeAuctionConfigs)
- .orElse(Collections.emptyMap())
- .entrySet()
- .stream()
- .map(ext -> ExtIgiIgs.builder().impId(ext.getKey()).config(ext.getValue()).build())
- .toList();
-
- return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build());
- }
-
private ObjectNode getBidExt(Bid bid) {
final ObjectNode ext = bid.getExt();
if (ext == null) {
diff --git a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponse.java b/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponse.java
deleted file mode 100644
index 9be5a61e30d..00000000000
--- a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.prebid.server.bidder.openx.proto;
-
-import com.iab.openrtb.response.SeatBid;
-import lombok.Builder;
-import lombok.Value;
-
-import java.util.List;
-
-@Value
-@Builder
-public class OpenxBidResponse {
-
- String id;
-
- List seatbid;
-
- String cur;
-
- Integer nbr;
-
- OpenxBidResponseExt ext;
-}
diff --git a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponseExt.java b/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponseExt.java
deleted file mode 100644
index c52ad9ef9c4..00000000000
--- a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponseExt.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.prebid.server.bidder.openx.proto;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.Value;
-
-import java.util.Map;
-
-@Value(staticConstructor = "of")
-public class OpenxBidResponseExt {
-
- @JsonProperty("fledge_auction_configs")
- Map fledgeAuctionConfigs;
-}
diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java
index 7b8be79fa7d..16c3f27e2f5 100644
--- a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java
+++ b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java
@@ -11,6 +11,7 @@
import com.iab.openrtb.request.Publisher;
import com.iab.openrtb.request.Site;
import com.iab.openrtb.response.Bid;
+import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
@@ -23,7 +24,6 @@
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
-import org.prebid.server.bidder.model.CompositeBidderResponse;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.bidder.pubmatic.model.request.PubmaticBidderImpExt;
@@ -31,8 +31,6 @@
import org.prebid.server.bidder.pubmatic.model.request.PubmaticMarketplace;
import org.prebid.server.bidder.pubmatic.model.request.PubmaticWrapper;
import org.prebid.server.bidder.pubmatic.model.response.PubmaticBidExt;
-import org.prebid.server.bidder.pubmatic.model.response.PubmaticBidResponse;
-import org.prebid.server.bidder.pubmatic.model.response.PubmaticExtBidResponse;
import org.prebid.server.bidder.pubmatic.model.response.VideoCreativeInfo;
import org.prebid.server.exception.PreBidException;
import org.prebid.server.json.DecodeException;
@@ -48,8 +46,6 @@
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta;
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgi;
-import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.StreamUtil;
@@ -79,7 +75,6 @@ public class PubmaticBidder implements Bidder {
private static final String ACAT_EXT_REQUEST = "acat";
private static final String WRAPPER_EXT_REQUEST = "wrapper";
private static final String BIDDER_NAME = "pubmatic";
- private static final String AE = "ae";
private static final String GP_ID = "gpid";
private static final String SKADN = "skadn";
private static final String IMP_EXT_PBADSLOT = "pbadslot";
@@ -182,8 +177,8 @@ private List extractAcat(JsonNode bidderParams) {
return acatNode != null && acatNode.isArray()
? Arrays.stream(mapper.mapper().convertValue(acatNode, String[].class))
- .map(StringUtils::stripToEmpty)
- .toList()
+ .map(StringUtils::stripToEmpty)
+ .toList()
: null;
}
@@ -330,9 +325,6 @@ private ObjectNode makeKeywords(PubmaticBidderImpExt impExt) {
putExtBidderKeywords(keywordsNode, extBidder);
putExtDataKeywords(keywordsNode, impExt.getData(), extBidder.getDctr());
- if (impExt.getAe() != null) {
- keywordsNode.put(AE, impExt.getAe());
- }
if (impExt.getGpId() != null) {
keywordsNode.put(GP_ID, impExt.getGpId());
}
@@ -393,9 +385,9 @@ private static String buildDctrPart(Map.Entry dctrPart) {
: null;
final String arrayAsString = valueAsString == null && value.isArray()
? StreamUtil.asStream(value.elements())
- .map(JsonNode::asText)
- .map(StringUtils::trim)
- .collect(Collectors.joining(","))
+ .map(JsonNode::asText)
+ .map(StringUtils::trim)
+ .collect(Collectors.joining(","))
: null;
final String valuePart = ObjectUtils.firstNonNull(valueAsString, arrayAsString);
@@ -417,8 +409,8 @@ private String extractAdUnitCode(ObjectNode extData) {
return AD_SERVER_GAM.equals(adServerName) && StringUtils.isNotEmpty(adServerAdSlot)
? adServerAdSlot
: Optional.ofNullable(extData.get(IMP_EXT_PBADSLOT))
- .map(JsonNode::asText)
- .orElse(null);
+ .map(JsonNode::asText)
+ .orElse(null);
}
private PubmaticExtDataAdServer extractAdServer(ObjectNode extData) {
@@ -492,16 +484,16 @@ private BidRequest modifyBidRequest(BidRequest request,
private static Site modifySite(Site site, String publisherId) {
return publisherId != null && site != null
? site.toBuilder()
- .publisher(modifyPublisher(site.getPublisher(), publisherId))
- .build()
+ .publisher(modifyPublisher(site.getPublisher(), publisherId))
+ .build()
: site;
}
private static App modifyApp(App app, String publisherId) {
return publisherId != null && app != null
? app.toBuilder()
- .publisher(modifyPublisher(app.getPublisher(), publisherId))
- .build()
+ .publisher(modifyPublisher(app.getPublisher(), publisherId))
+ .build()
: app;
}
@@ -536,39 +528,25 @@ private HttpRequest makeHttpRequest(BidRequest request) {
return BidderUtil.defaultRequest(request, endpointUrl, mapper);
}
- /**
- * @deprecated for this bidder in favor of @link{makeBidderResponse} which supports additional response data
- */
@Override
- @Deprecated(forRemoval = true)
public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) {
- return Result.withError(BidderError.generic("Deprecated adapter method invoked"));
- }
-
- @Override
- public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) {
try {
- final PubmaticBidResponse bidResponse = mapper.decodeValue(
- httpCall.getResponse().getBody(), PubmaticBidResponse.class);
final List errors = new ArrayList<>();
-
- return CompositeBidderResponse.builder()
- .bids(extractBids(bidResponse, errors))
- .igi(extractIgi(bidResponse))
- .errors(errors)
- .build();
+ final BidResponse bidResponse = mapper.decodeValue(
+ httpCall.getResponse().getBody(), BidResponse.class);
+ return Result.of(extractBids(bidResponse, errors), errors);
} catch (DecodeException | PreBidException e) {
- return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage()));
+ return Result.withError(BidderError.badServerResponse(e.getMessage()));
}
}
- private List extractBids(PubmaticBidResponse bidResponse, List bidderErrors) {
+ private List extractBids(BidResponse bidResponse, List bidderErrors) {
return bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())
? Collections.emptyList()
: bidsFromResponse(bidResponse, bidderErrors);
}
- private List bidsFromResponse(PubmaticBidResponse bidResponse, List bidderErrors) {
+ private List bidsFromResponse(BidResponse bidResponse, List bidderErrors) {
return bidResponse.getSeatbid().stream()
.filter(Objects::nonNull)
.map(SeatBid::getBid)
@@ -686,17 +664,4 @@ private static Integer getDealPriority(PubmaticBidExt bidExt) {
.map(PubmaticBidExt::getPrebidDealPriority)
.orElse(null);
}
-
- private static List extractIgi(PubmaticBidResponse bidResponse) {
- final List igs = Optional.ofNullable(bidResponse)
- .map(PubmaticBidResponse::getExt)
- .map(PubmaticExtBidResponse::getFledgeAuctionConfigs)
- .orElse(Collections.emptyMap())
- .entrySet()
- .stream()
- .map(config -> ExtIgiIgs.builder().impId(config.getKey()).config(config.getValue()).build())
- .toList();
-
- return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build());
- }
}
diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java
index 0a248ff8a5b..ef58f131a04 100644
--- a/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java
+++ b/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java
@@ -12,8 +12,6 @@ public class PubmaticBidderImpExt {
ObjectNode data;
- Integer ae;
-
@JsonProperty("gpid")
String gpId;
diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticBidResponse.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticBidResponse.java
deleted file mode 100644
index b421e7f1b4a..00000000000
--- a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticBidResponse.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.prebid.server.bidder.pubmatic.model.response;
-
-import com.iab.openrtb.response.SeatBid;
-import lombok.Builder;
-import lombok.Value;
-
-import java.util.List;
-
-@Builder(toBuilder = true)
-@Value
-public class PubmaticBidResponse {
-
- String id;
-
- List seatbid;
-
- String bidid;
-
- String cur;
-
- String customdata;
-
- Integer nbr;
-
- PubmaticExtBidResponse ext;
-
-}
diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticExtBidResponse.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticExtBidResponse.java
deleted file mode 100644
index d2c531a23b5..00000000000
--- a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticExtBidResponse.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.prebid.server.bidder.pubmatic.model.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import lombok.Value;
-
-import java.util.Map;
-
-@Value(staticConstructor = "of")
-public class PubmaticExtBidResponse {
-
- @JsonProperty("fledge_auction_configs")
- Map fledgeAuctionConfigs;
-
-}
diff --git a/src/main/java/org/prebid/server/handler/SetuidHandler.java b/src/main/java/org/prebid/server/handler/SetuidHandler.java
index e1c8cf8a890..0771e55fa31 100644
--- a/src/main/java/org/prebid/server/handler/SetuidHandler.java
+++ b/src/main/java/org/prebid/server/handler/SetuidHandler.java
@@ -230,7 +230,7 @@ private void validateSetuidContext(SetuidContext setuidContext) {
final TcfContext tcfContext = setuidContext.getPrivacyContext().getTcfContext();
if (tcfContext.isInGdprScope() && !tcfContext.isConsentValid()) {
- metrics.updateUserSyncTcfInvalidMetric(usersyncer.getCookieFamilyName());
+ metrics.updateUserSyncTcfInvalidMetric(setuidContext.getBidder());
throw new InvalidRequestException("Consent string is invalid");
}
@@ -254,7 +254,6 @@ private void respondByTcfResponse(AsyncResult hostTcfResponseRe
final TcfContext tcfContext = setuidContext.getPrivacyContext().getTcfContext();
final RoutingContext routingContext = setuidContext.getRoutingContext();
- final String cookieFamilyName = setuidContext.getUsersyncer().getCookieFamilyName();
if (hostTcfResponseResult.succeeded()) {
final CompositeFuture compositeFuture = hostTcfResponseResult.result();
@@ -272,7 +271,7 @@ private void respondByTcfResponse(AsyncResult hostTcfResponseRe
if (hostVendorTcfResponse.isVendorAllowed() && isBidderVendorAllowed) {
respondWithCookie(setuidContext);
} else {
- metrics.updateUserSyncTcfBlockedMetric(cookieFamilyName);
+ metrics.updateUserSyncTcfBlockedMetric(setuidContext.getBidder());
final HttpResponseStatus status = new HttpResponseStatus(UNAVAILABLE_FOR_LEGAL_REASONS,
"Unavailable for legal reasons");
@@ -287,7 +286,7 @@ private void respondByTcfResponse(AsyncResult hostTcfResponseRe
}
} else {
final Throwable error = hostTcfResponseResult.cause();
- metrics.updateUserSyncTcfBlockedMetric(cookieFamilyName);
+ metrics.updateUserSyncTcfBlockedMetric(setuidContext.getBidder());
handleErrors(error, routingContext, tcfContext);
}
}
@@ -304,7 +303,7 @@ private void respondWithCookie(SetuidContext setuidContext) {
.forEach(routingContext.response()::addCookie);
if (uidsCookieUpdateResult.isUpdated()) {
- metrics.updateUserSyncSetsMetric(cookieFamilyName);
+ metrics.updateUserSyncSetsMetric(setuidContext.getBidder());
}
final int statusCode = HttpResponseStatus.OK.code();
HttpUtil.executeSafely(routingContext, Endpoint.setuid, buildCookieResponseConsumer(setuidContext, statusCode));
diff --git a/src/main/java/org/prebid/server/hooks/execution/HookStageExecutor.java b/src/main/java/org/prebid/server/hooks/execution/HookStageExecutor.java
index 4f8a1f3f209..1761e402351 100644
--- a/src/main/java/org/prebid/server/hooks/execution/HookStageExecutor.java
+++ b/src/main/java/org/prebid/server/hooks/execution/HookStageExecutor.java
@@ -26,6 +26,7 @@
import org.prebid.server.hooks.execution.model.ExecutionGroup;
import org.prebid.server.hooks.execution.model.ExecutionPlan;
import org.prebid.server.hooks.execution.model.HookExecutionContext;
+import org.prebid.server.hooks.execution.model.HookHttpEndpoint;
import org.prebid.server.hooks.execution.model.HookId;
import org.prebid.server.hooks.execution.model.HookStageExecutionResult;
import org.prebid.server.hooks.execution.model.Stage;
@@ -57,7 +58,6 @@
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.model.CaseInsensitiveMultiMap;
-import org.prebid.server.model.Endpoint;
import org.prebid.server.settings.model.Account;
import org.prebid.server.settings.model.AccountHooksConfiguration;
import org.prebid.server.settings.model.HooksAdminConfig;
@@ -193,7 +193,7 @@ public Future> executeEntrypointStag
AuctionContext auctionContext) {
final HookExecutionContext context = auctionContext.getHookExecutionContext();
- final Endpoint endpoint = context.getEndpoint();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
return stageExecutor(StageWithHookType.ENTRYPOINT, ENTITY_HTTP_REQUEST, context)
.withExecutionPlan(planForEntrypointStage(endpoint))
@@ -212,12 +212,9 @@ public Future> executeRawAuction
final BidRequest bidRequest = auctionContext.getBidRequest();
final Account account = auctionContext.getAccount();
final HookExecutionContext context = auctionContext.getHookExecutionContext();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
- final Endpoint endpoint = context.getEndpoint();
-
- return this
- .stageExecutor(
- StageWithHookType.RAW_AUCTION_REQUEST, ENTITY_AUCTION_REQUEST, context, account, endpoint)
+ return stageExecutor(StageWithHookType.RAW_AUCTION_REQUEST, ENTITY_AUCTION_REQUEST, context, account, endpoint)
.withInitialPayload(AuctionRequestPayloadImpl.of(bidRequest))
.withInvocationContextProvider(auctionInvocationContextProvider(endpoint, auctionContext))
.withRejectAllowed(true)
@@ -231,12 +228,10 @@ public Future> executeProcessedA
final BidRequest bidRequest = auctionContext.getBidRequest();
final Account account = auctionContext.getAccount();
final HookExecutionContext context = auctionContext.getHookExecutionContext();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
- final Endpoint endpoint = context.getEndpoint();
-
- return this
- .stageExecutor(
- StageWithHookType.PROCESSED_AUCTION_REQUEST, ENTITY_AUCTION_REQUEST, context, account, endpoint)
+ return stageExecutor(
+ StageWithHookType.PROCESSED_AUCTION_REQUEST, ENTITY_AUCTION_REQUEST, context, account, endpoint)
.withInitialPayload(AuctionRequestPayloadImpl.of(bidRequest))
.withInvocationContextProvider(auctionInvocationContextProvider(endpoint, auctionContext))
.withRejectAllowed(true)
@@ -245,17 +240,16 @@ public Future> executeProcessedA
}
public Future> executeBidderRequestStage(
- BidderRequest bidderRequest, AuctionContext auctionContext) {
+ BidderRequest bidderRequest,
+ AuctionContext auctionContext) {
final Account account = auctionContext.getAccount();
final HookExecutionContext context = auctionContext.getHookExecutionContext();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
final String bidder = bidderRequest.getBidder();
- final Endpoint endpoint = context.getEndpoint();
-
- return this
- .stageExecutor(StageWithHookType.BIDDER_REQUEST, bidder, context, account, endpoint)
+ return stageExecutor(StageWithHookType.BIDDER_REQUEST, bidder, context, account, endpoint)
.withInitialPayload(BidderRequestPayloadImpl.of(bidderRequest.getBidRequest()))
.withInvocationContextProvider(bidderInvocationContextProvider(endpoint, auctionContext, bidder))
.withRejectAllowed(true)
@@ -269,14 +263,12 @@ public Future> executeRawBidderR
final Account account = auctionContext.getAccount();
final HookExecutionContext context = auctionContext.getHookExecutionContext();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
final List bids = bidderResponse.getSeatBid().getBids();
final String bidder = bidderResponse.getBidder();
- final Endpoint endpoint = context.getEndpoint();
-
- return this
- .stageExecutor(StageWithHookType.RAW_BIDDER_RESPONSE, bidder, context, account, endpoint)
+ return stageExecutor(StageWithHookType.RAW_BIDDER_RESPONSE, bidder, context, account, endpoint)
.withInitialPayload(BidderResponsePayloadImpl.of(bids))
.withInvocationContextProvider(bidderInvocationContextProvider(endpoint, auctionContext, bidder))
.withRejectAllowed(true)
@@ -290,12 +282,11 @@ public Future> executeProcessedB
final Account account = auctionContext.getAccount();
final HookExecutionContext context = auctionContext.getHookExecutionContext();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
final List bids = bidderResponse.getSeatBid().getBids();
final String bidder = bidderResponse.getBidder();
- final Endpoint endpoint = context.getEndpoint();
-
return stageExecutor(StageWithHookType.PROCESSED_BIDDER_RESPONSE, bidder, context, account, endpoint)
.withInitialPayload(BidderResponsePayloadImpl.of(bids))
.withInvocationContextProvider(bidderInvocationContextProvider(endpoint, auctionContext, bidder))
@@ -310,12 +301,14 @@ public Future> execute
final Account account = auctionContext.getAccount();
final HookExecutionContext context = auctionContext.getHookExecutionContext();
-
- final Endpoint endpoint = context.getEndpoint();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
return stageExecutor(
- StageWithHookType.ALL_PROCESSED_BID_RESPONSES, ENTITY_ALL_PROCESSED_BID_RESPONSES,
- context, account, endpoint)
+ StageWithHookType.ALL_PROCESSED_BID_RESPONSES,
+ ENTITY_ALL_PROCESSED_BID_RESPONSES,
+ context,
+ account,
+ endpoint)
.withInitialPayload(AllProcessedBidResponsesPayloadImpl.of(bidderResponses))
.withInvocationContextProvider(auctionInvocationContextProvider(endpoint, auctionContext))
.withRejectAllowed(false)
@@ -329,8 +322,7 @@ public Future> executeAuctionRe
final Account account = ObjectUtils.defaultIfNull(auctionContext.getAccount(), EMPTY_ACCOUNT);
final HookExecutionContext context = auctionContext.getHookExecutionContext();
-
- final Endpoint endpoint = context.getEndpoint();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
return stageExecutor(StageWithHookType.AUCTION_RESPONSE, ENTITY_AUCTION_RESPONSE, context, account, endpoint)
.withInitialPayload(AuctionResponsePayloadImpl.of(bidResponse))
@@ -345,8 +337,7 @@ public Future> executeExitpointStage(
final Account account = ObjectUtils.defaultIfNull(auctionContext.getAccount(), EMPTY_ACCOUNT);
final HookExecutionContext context = auctionContext.getHookExecutionContext();
-
- final Endpoint endpoint = context.getEndpoint();
+ final HookHttpEndpoint endpoint = context.getEndpoint();
return stageExecutor(StageWithHookType.EXITPOINT, ENTITY_HTTP_RESPONSE, context, account, endpoint)
.withInitialPayload(ExitpointPayloadImpl.of(responseHeaders, responseBody))
@@ -371,7 +362,7 @@ private StageExecutor modulesExecutionForAccount(Account account) {
return DefaultedMap.defaultedMap(resultModulesExecution, !isConfigToInvokeRequired);
}
- private StageExecutionPlan planForEntrypointStage(Endpoint endpoint) {
+ private StageExecutionPlan planForEntrypointStage(HookHttpEndpoint endpoint) {
return effectiveStagePlanFrom(ExecutionPlan.empty(), endpoint, Stage.entrypoint);
}
- private StageExecutionPlan planForStage(Account account, Endpoint endpoint, Stage stage) {
+ private StageExecutionPlan planForStage(Account account, HookHttpEndpoint endpoint, Stage stage) {
return effectiveStagePlanFrom(effectiveExecutionPlanFor(account), endpoint, stage);
}
- private StageExecutionPlan effectiveStagePlanFrom(
- ExecutionPlan accountExecutionPlan, Endpoint endpoint, Stage stage) {
+ private StageExecutionPlan effectiveStagePlanFrom(ExecutionPlan accountExecutionPlan,
+ HookHttpEndpoint endpoint,
+ Stage stage) {
final StageExecutionPlan hostStageExecutionPlan = stagePlanFrom(hostExecutionPlan, endpoint, stage);
final StageExecutionPlan accountStageExecutionPlan = stagePlanFrom(accountExecutionPlan, endpoint, stage);
@@ -428,7 +420,10 @@ private StageExecutionPlan effectiveStagePlanFrom(
return StageExecutionPlan.of(combinedGroups);
}
- private static StageExecutionPlan stagePlanFrom(ExecutionPlan executionPlan, Endpoint endpoint, Stage stage) {
+ private static StageExecutionPlan stagePlanFrom(ExecutionPlan executionPlan,
+ HookHttpEndpoint endpoint,
+ Stage stage) {
+
return MapUtils.emptyIfNull(executionPlan.getEndpoints())
.getOrDefault(endpoint, EndpointExecutionPlan.empty())
.getStages()
@@ -471,23 +466,23 @@ private HookProvider hookCatalog.hookById(hookId, stage);
}
- private InvocationContextProvider invocationContextProvider(Endpoint endpoint) {
+ private InvocationContextProvider invocationContextProvider(HookHttpEndpoint endpoint) {
return (timeout, hookId, moduleContext) -> invocationContext(endpoint, timeout);
}
- private InvocationContextImpl invocationContext(Endpoint endpoint, Long timeout) {
- return InvocationContextImpl.of(createTimeout(timeout), endpoint);
+ private InvocationContextImpl invocationContext(HookHttpEndpoint endpoint, Long timeout) {
+ return InvocationContextImpl.of(createTimeout(timeout), endpoint.httpMethod(), endpoint.endpoint());
}
private InvocationContextProvider auctionInvocationContextProvider(
- Endpoint endpoint,
+ HookHttpEndpoint endpoint,
AuctionContext auctionContext) {
return (timeout, hookId, moduleContext) -> auctionInvocationContext(
endpoint, timeout, auctionContext, hookId, moduleContext);
}
- private AuctionInvocationContextImpl auctionInvocationContext(Endpoint endpoint,
+ private AuctionInvocationContextImpl auctionInvocationContext(HookHttpEndpoint endpoint,
Long timeout,
AuctionContext auctionContext,
HookId hookId,
@@ -502,7 +497,7 @@ private AuctionInvocationContextImpl auctionInvocationContext(Endpoint endpoint,
}
private InvocationContextProvider bidderInvocationContextProvider(
- Endpoint endpoint,
+ HookHttpEndpoint endpoint,
AuctionContext auctionContext,
String bidder) {
@@ -561,7 +556,6 @@ private static boolean isABTestApplicable(ABTest abTest, String account) {
}
//todo: should it be more strict? e.g. allowing rejecting only imps/bids on the particular stages
-
private HookStageExecutionResult rejectAll(AuctionContext auctionContext,
HookStageExecutionResult result) {
diff --git a/src/main/java/org/prebid/server/hooks/execution/model/ExecutionPlan.java b/src/main/java/org/prebid/server/hooks/execution/model/ExecutionPlan.java
index 7137cef162d..f9407738165 100644
--- a/src/main/java/org/prebid/server/hooks/execution/model/ExecutionPlan.java
+++ b/src/main/java/org/prebid/server/hooks/execution/model/ExecutionPlan.java
@@ -1,8 +1,9 @@
package org.prebid.server.hooks.execution.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Value;
-import org.prebid.server.model.Endpoint;
+import org.prebid.server.json.deserializer.ExecutionPlanEndpointsConfigDeserializer;
import java.util.List;
import java.util.Map;
@@ -15,7 +16,8 @@ public class ExecutionPlan {
@JsonProperty("abtests")
List abTests;
- Map endpoints;
+ @JsonDeserialize(using = ExecutionPlanEndpointsConfigDeserializer.class)
+ Map endpoints;
public static ExecutionPlan empty() {
return EMPTY;
diff --git a/src/main/java/org/prebid/server/hooks/execution/model/HookExecutionContext.java b/src/main/java/org/prebid/server/hooks/execution/model/HookExecutionContext.java
index 32129252d41..27bae4d1c4e 100644
--- a/src/main/java/org/prebid/server/hooks/execution/model/HookExecutionContext.java
+++ b/src/main/java/org/prebid/server/hooks/execution/model/HookExecutionContext.java
@@ -1,7 +1,6 @@
package org.prebid.server.hooks.execution.model;
import lombok.Value;
-import org.prebid.server.model.Endpoint;
import java.util.EnumMap;
import java.util.HashMap;
@@ -11,13 +10,13 @@
@Value(staticConstructor = "of")
public class HookExecutionContext {
- Endpoint endpoint;
+ HookHttpEndpoint endpoint;
EnumMap> stageOutcomes;
Map moduleContexts = new HashMap<>();
- public static HookExecutionContext of(Endpoint endpoint) {
+ public static HookExecutionContext of(HookHttpEndpoint endpoint) {
return of(endpoint, new EnumMap<>(Stage.class));
}
}
diff --git a/src/main/java/org/prebid/server/hooks/execution/model/HookHttpEndpoint.java b/src/main/java/org/prebid/server/hooks/execution/model/HookHttpEndpoint.java
new file mode 100644
index 00000000000..67e76a513ce
--- /dev/null
+++ b/src/main/java/org/prebid/server/hooks/execution/model/HookHttpEndpoint.java
@@ -0,0 +1,35 @@
+package org.prebid.server.hooks.execution.model;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import io.vertx.core.http.HttpMethod;
+import org.prebid.server.model.Endpoint;
+
+public enum HookHttpEndpoint {
+
+ POST_AUCTION(HttpMethod.POST, Endpoint.openrtb2_auction),
+ AMP(HttpMethod.GET, Endpoint.openrtb2_amp),
+ VIDEO(HttpMethod.POST, Endpoint.openrtb2_video);
+
+ private final HttpMethod httpMethod;
+
+ private final Endpoint endpoint;
+
+ HookHttpEndpoint(HttpMethod httpMethod, Endpoint endpoint) {
+ this.httpMethod = httpMethod;
+ this.endpoint = endpoint;
+ }
+
+ public HttpMethod httpMethod() {
+ return httpMethod;
+ }
+
+ public Endpoint endpoint() {
+ return endpoint;
+ }
+
+ @JsonValue
+ @Override
+ public String toString() {
+ return httpMethod.name() + " " + endpoint.value();
+ }
+}
diff --git a/src/main/java/org/prebid/server/hooks/execution/v1/InvocationContextImpl.java b/src/main/java/org/prebid/server/hooks/execution/v1/InvocationContextImpl.java
index 99399d5ba6b..84ea304caee 100644
--- a/src/main/java/org/prebid/server/hooks/execution/v1/InvocationContextImpl.java
+++ b/src/main/java/org/prebid/server/hooks/execution/v1/InvocationContextImpl.java
@@ -1,5 +1,6 @@
package org.prebid.server.hooks.execution.v1;
+import io.vertx.core.http.HttpMethod;
import lombok.Value;
import lombok.experimental.Accessors;
import org.prebid.server.execution.timeout.Timeout;
@@ -12,5 +13,7 @@ public class InvocationContextImpl implements InvocationContext {
Timeout timeout;
+ HttpMethod httpMethod;
+
Endpoint endpoint;
}
diff --git a/src/main/java/org/prebid/server/hooks/v1/InvocationContext.java b/src/main/java/org/prebid/server/hooks/v1/InvocationContext.java
index 22493ea8a07..45eba0ce959 100644
--- a/src/main/java/org/prebid/server/hooks/v1/InvocationContext.java
+++ b/src/main/java/org/prebid/server/hooks/v1/InvocationContext.java
@@ -1,5 +1,6 @@
package org.prebid.server.hooks.v1;
+import io.vertx.core.http.HttpMethod;
import org.prebid.server.execution.timeout.Timeout;
import org.prebid.server.model.Endpoint;
@@ -7,5 +8,7 @@ public interface InvocationContext {
Timeout timeout();
+ HttpMethod httpMethod();
+
Endpoint endpoint();
}
diff --git a/src/main/java/org/prebid/server/json/deserializer/ExecutionPlanEndpointsConfigDeserializer.java b/src/main/java/org/prebid/server/json/deserializer/ExecutionPlanEndpointsConfigDeserializer.java
new file mode 100644
index 00000000000..837163ea6bc
--- /dev/null
+++ b/src/main/java/org/prebid/server/json/deserializer/ExecutionPlanEndpointsConfigDeserializer.java
@@ -0,0 +1,133 @@
+package org.prebid.server.json.deserializer;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import io.vertx.core.http.HttpMethod;
+import org.prebid.server.hooks.execution.model.EndpointExecutionPlan;
+import org.prebid.server.hooks.execution.model.HookHttpEndpoint;
+import org.prebid.server.log.Logger;
+import org.prebid.server.log.LoggerFactory;
+import org.prebid.server.model.Endpoint;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ExecutionPlanEndpointsConfigDeserializer
+ extends StdDeserializer