From 13412d5d55a7c80ed2aaa8702e5b13edb241bc92 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Tue, 22 Nov 2022 14:03:46 +0530
Subject: [PATCH 01/17] Adding local run command
---
devcontainer.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/devcontainer.md b/devcontainer.md
index 824356d802b..84b4151d0ec 100644
--- a/devcontainer.md
+++ b/devcontainer.md
@@ -65,3 +65,6 @@ above each test function.
- Remote container commands popup by clicking on _Dev Container: Go_ at bottom left
- `F1` -> type _rebuild container_ to restart with a fresh container
- `F1` -> `^`-`\`` to toggle terminal
+
+
+PBS_GDPR_DEFAULT_VALUE=0 go run main.go --alsologtostderr
\ No newline at end of file
From 6d7d54a840fccf9999cf734042d75939c90de0e3 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Tue, 22 Nov 2022 14:58:41 +0530
Subject: [PATCH 02/17] Adding bidder
---
adapters/infytvhb/infytvhb.go | 137 +++++++++
adapters/infytvhb/infytvhb_test.go | 21 ++
.../infytvhb/infytvhbtest/exemplary/app.json | 258 ++++++++++++++++
.../infytvhbtest/exemplary/video.json | 280 ++++++++++++++++++
.../supplemental/bad-response.json | 202 +++++++++++++
.../supplemental/empty-seatbid.json | 207 +++++++++++++
.../infytvhbtest/supplemental/status-204.json | 196 ++++++++++++
.../infytvhbtest/supplemental/status-400.json | 202 +++++++++++++
.../infytvhbtest/supplemental/status-503.json | 195 ++++++++++++
.../supplemental/unexpected-status.json | 201 +++++++++++++
adapters/infytvhb/params_test.go | 44 +++
exchange/adapter_builders.go | 2 +
openrtb_ext/bidders.go | 2 +
openrtb_ext/imp_infytvhb.go | 16 +
static/bidder-info/infytvhb.yaml | 17 ++
static/bidder-params/infytvhb.json | 53 ++++
16 files changed, 2033 insertions(+)
create mode 100644 adapters/infytvhb/infytvhb.go
create mode 100644 adapters/infytvhb/infytvhb_test.go
create mode 100644 adapters/infytvhb/infytvhbtest/exemplary/app.json
create mode 100644 adapters/infytvhb/infytvhbtest/exemplary/video.json
create mode 100644 adapters/infytvhb/infytvhbtest/supplemental/bad-response.json
create mode 100644 adapters/infytvhb/infytvhbtest/supplemental/empty-seatbid.json
create mode 100644 adapters/infytvhb/infytvhbtest/supplemental/status-204.json
create mode 100644 adapters/infytvhb/infytvhbtest/supplemental/status-400.json
create mode 100644 adapters/infytvhb/infytvhbtest/supplemental/status-503.json
create mode 100644 adapters/infytvhb/infytvhbtest/supplemental/unexpected-status.json
create mode 100644 adapters/infytvhb/params_test.go
create mode 100644 openrtb_ext/imp_infytvhb.go
create mode 100644 static/bidder-info/infytvhb.yaml
create mode 100644 static/bidder-params/infytvhb.json
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
new file mode 100644
index 00000000000..81705b493e1
--- /dev/null
+++ b/adapters/infytvhb/infytvhb.go
@@ -0,0 +1,137 @@
+package infytvhb
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/http"
+
+ "github.com/prebid/openrtb/v17/openrtb2"
+ "github.com/prebid/prebid-server/adapters"
+ "github.com/prebid/prebid-server/config"
+ "github.com/prebid/prebid-server/errortypes"
+ "github.com/prebid/prebid-server/openrtb_ext"
+)
+
+type adapter struct {
+ endpoint string
+}
+
+// Builder builds a new instance of the Foo adapter for the given bidder with the given config.
+func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
+ bidder := &adapter{
+ endpoint: config.Endpoint,
+ }
+ return bidder, nil
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+ requestJSON, err := json.Marshal(request)
+ if err != nil {
+ return nil, []error{err}
+ }
+
+ requestData := &adapters.RequestData{
+ Method: "POST",
+ Uri: a.endpoint,
+ Body: requestJSON,
+ }
+
+ return []*adapters.RequestData{requestData}, nil
+}
+
+func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+ if response.StatusCode == http.StatusNoContent {
+ return nil, nil
+ }
+
+ if response.StatusCode == http.StatusBadRequest {
+ return nil, []error{&errortypes.BadInput{
+ Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode),
+ }}
+ }
+
+ if response.StatusCode != http.StatusOK {
+ return nil, []error{&errortypes.BadServerResponse{
+ Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode),
+ }}
+ }
+ var bidResp openrtb2.BidResponse
+ if infyExt, err := getImpressionExt(&internalRequest.Imp[0]); err == nil {
+ if infyExt.EndpointType == "VAST_URL" {
+ bidResp = openrtb2.BidResponse{
+ ID: internalRequest.ID,
+ SeatBid: []openrtb2.SeatBid{
+ {
+ Bid: []openrtb2.Bid{
+ {
+ ID: internalRequest.ID,
+ AdM: string(response.Body),
+ Price: infyExt.Floor,
+ ImpID: internalRequest.Imp[0].ID,
+ CID: "c_" + internalRequest.ID,
+ CrID: "cr_" + internalRequest.ID,
+ },
+ },
+ },
+ },
+ }
+ } else {
+ if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ return nil, []error{err}
+ }
+ }
+ }
+
+ bidsCapacity := 1
+ if len(bidResp.SeatBid) > 0 {
+ bidsCapacity = len(bidResp.SeatBid[0].Bid)
+ }
+ bidResponse := adapters.NewBidderResponseWithBidsCapacity(bidsCapacity)
+
+ for _, sb := range bidResp.SeatBid {
+ for i := range sb.Bid {
+ if bidType, err := getMediaTypeForBid(&sb.Bid[i]); err == nil {
+ // resolveMacros(&sb.Bid[i])
+ bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
+ Bid: &sb.Bid[i],
+ BidType: bidType,
+ })
+ }
+ }
+ }
+
+ return bidResponse, nil
+}
+
+// getMediaTypeForBid determines which type of bid.
+func getMediaTypeForBid(bid *openrtb2.Bid) (openrtb_ext.BidType, error) {
+ return openrtb_ext.BidTypeVideo, nil
+}
+
+// resolveMacros resolves OpenRTB macros in nurl and adm
+// func resolveMacros(bid *openrtb2.Bid) {
+// if bid == nil {
+// return
+// }
+// price := strconv.FormatFloat(bid.Price, 'f', -1, 64)
+// bid.NURL = strings.Replace(bid.NURL, "${AUCTION_PRICE}", price, -1)
+// bid.AdM = strings.Replace(bid.AdM, "${AUCTION_PRICE}", price, -1)
+// }
+
+// getImpressionExt parses and return first imp ext or nil
+func getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtInfytvHb, error) {
+ var bidderExt adapters.ExtImpBidder
+ if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ return nil, &errortypes.BadInput{
+ Message: err.Error(),
+ }
+ }
+
+ var extImpInfyTV openrtb_ext.ExtInfytvHb
+ if err := json.Unmarshal(bidderExt.Bidder, &extImpInfyTV); err != nil {
+ return nil, &errortypes.BadInput{
+ Message: err.Error(),
+ }
+ }
+ return &extImpInfyTV, nil
+}
diff --git a/adapters/infytvhb/infytvhb_test.go b/adapters/infytvhb/infytvhb_test.go
new file mode 100644
index 00000000000..9ca6d088015
--- /dev/null
+++ b/adapters/infytvhb/infytvhb_test.go
@@ -0,0 +1,21 @@
+package infytvhb
+
+import (
+ "testing"
+
+ "github.com/prebid/prebid-server/adapters/adapterstest"
+ "github.com/prebid/prebid-server/config"
+ "github.com/prebid/prebid-server/openrtb_ext"
+)
+
+func TestJsonSamples(t *testing.T) {
+ bidder, buildErr := Builder(openrtb_ext.BidderInfyTVHb, config.Adapter{
+ Endpoint: "https://test.infy.tv/pbs/openrtb"},
+ config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+
+ if buildErr != nil {
+ t.Fatalf("Builder returned unexpected error %v", buildErr)
+ }
+
+ adapterstest.RunJSONBidderTest(t, "infytvhbtest", bidder)
+}
diff --git a/adapters/infytvhb/infytvhbtest/exemplary/app.json b/adapters/infytvhb/infytvhbtest/exemplary/app.json
new file mode 100644
index 00000000000..d4426bf7bde
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/exemplary/app.json
@@ -0,0 +1,258 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "publisherId": "IY1014",
+ "placementId": "1999"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "publisherId": "IY1014",
+ "placementId": "1999"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "bidid": "ccbd63285c0e7b69602d90319bda6be4",
+ "seatbid": [
+ {
+ "bid": [
+ {
+ "id": "7f6c6d6ba432059a5305815a8d740283",
+ "impid": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "price": 0.1,
+ "nurl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=nurl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "burl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=burl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "adm": "846500:00:16",
+ "adomain": [
+ "test.com"
+ ],
+ "cat": [
+ "IAB24"
+ ],
+ "cid": "1IP31",
+ "crid": "1KS13",
+ "w": 0,
+ "h": 0,
+ "ext": {
+ "mediaType": "video"
+ }
+ }
+ ],
+ "seat": "1"
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "7f6c6d6ba432059a5305815a8d740283",
+ "impid": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "price": 0.1,
+ "nurl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=nurl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "burl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=burl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "adm": "846500:00:16",
+ "adomain": [
+ "test.com"
+ ],
+ "cat": [
+ "IAB24"
+ ],
+ "cid": "1IP31",
+ "crid": "1KS13",
+ "ext": {
+ "mediaType": "video"
+ }
+ },
+ "type": "video"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/exemplary/video.json b/adapters/infytvhb/infytvhbtest/exemplary/video.json
new file mode 100644
index 00000000000..7eb9c80080c
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/exemplary/video.json
@@ -0,0 +1,280 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "publisherId": "IY1014",
+ "placementId": "1999"
+ }
+ }
+ }
+ ],
+ "site": {
+ "id": "1c94d85ea1a55ebf3325a82935240614",
+ "domain": "kiwilimon.com",
+ "cat": [
+ "IAB1",
+ "IAB2",
+ "IAB3",
+ "IAB4",
+ "IAB5",
+ "IAB6",
+ "IAB7",
+ "IAB8",
+ "IAB9",
+ "IAB10",
+ "IAB11",
+ "IAB13",
+ "IAB14",
+ "IAB15",
+ "IAB17",
+ "IAB18"
+ ],
+ "page": "https://kiwilimon.com/",
+ "publisher": {
+ "id": "866d6b3a4a483ed4a454a1acaa588852"
+ },
+ "ext": {
+ "amp": 0
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "publisherId": "IY1014",
+ "placementId": "1999"
+ }
+ }
+ }
+ ],
+ "site": {
+ "id": "1c94d85ea1a55ebf3325a82935240614",
+ "domain": "kiwilimon.com",
+ "cat": [
+ "IAB1",
+ "IAB2",
+ "IAB3",
+ "IAB4",
+ "IAB5",
+ "IAB6",
+ "IAB7",
+ "IAB8",
+ "IAB9",
+ "IAB10",
+ "IAB11",
+ "IAB13",
+ "IAB14",
+ "IAB15",
+ "IAB17",
+ "IAB18"
+ ],
+ "page": "https://kiwilimon.com/",
+ "publisher": {
+ "id": "866d6b3a4a483ed4a454a1acaa588852"
+ },
+ "ext": {
+ "amp": 0
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "bidid": "ccbd63285c0e7b69602d90319bda6be4",
+ "seatbid": [
+ {
+ "bid": [
+ {
+ "id": "7f6c6d6ba432059a5305815a8d740283",
+ "impid": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "price": 0.1,
+ "nurl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=nurl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "burl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=burl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "adm": "846500:00:16",
+ "adomain": [
+ "test.com"
+ ],
+ "cat": [
+ "IAB24"
+ ],
+ "cid": "1IP31",
+ "crid": "1KS13",
+ "w": 0,
+ "h": 0,
+ "ext": {
+ "mediaType": "video"
+ }
+ }
+ ],
+ "seat": "1"
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "7f6c6d6ba432059a5305815a8d740283",
+ "impid": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "price": 0.1,
+ "nurl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=nurl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "burl": "http://us-east-edge1.e-volution.ai/?c=rtb&m=burl&auctionId=ccbd63285c0e7b69602d90319bda6be4&price=${AUCTION_PRICE}",
+ "adm": "846500:00:16",
+ "adomain": [
+ "test.com"
+ ],
+ "cat": [
+ "IAB24"
+ ],
+ "cid": "1IP31",
+ "crid": "1KS13",
+ "ext": {
+ "mediaType": "video"
+ }
+ },
+ "type": "video"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/supplemental/bad-response.json b/adapters/infytvhb/infytvhbtest/supplemental/bad-response.json
new file mode 100644
index 00000000000..5141cdca702
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/supplemental/bad-response.json
@@ -0,0 +1,202 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": ""
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Bad response, json: cannot unmarshal string into Go value of type openrtb2.BidResponse",
+ "comparison": "literal"
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/supplemental/empty-seatbid.json b/adapters/infytvhb/infytvhbtest/supplemental/empty-seatbid.json
new file mode 100644
index 00000000000..0db426fc478
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/supplemental/empty-seatbid.json
@@ -0,0 +1,207 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "a1580f2f-be6d-11eb-a150-d094662c1c35",
+ "bidid": "359da97d0384d8a14767029c18fd840d",
+ "seatbid": [],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Empty seatbid",
+ "comparison": "literal"
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/supplemental/status-204.json b/adapters/infytvhb/infytvhbtest/supplemental/status-204.json
new file mode 100644
index 00000000000..f432e241ac1
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/supplemental/status-204.json
@@ -0,0 +1,196 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 204,
+ "body": {}
+ }
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/supplemental/status-400.json b/adapters/infytvhb/infytvhbtest/supplemental/status-400.json
new file mode 100644
index 00000000000..44d55575128
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/supplemental/status-400.json
@@ -0,0 +1,202 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 400,
+ "body": "The Key has a different ad format"
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Bad Request. \"The Key has a different ad format\"",
+ "comparison": "literal"
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/supplemental/status-503.json b/adapters/infytvhb/infytvhbtest/supplemental/status-503.json
new file mode 100644
index 00000000000..310ad85e8ce
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/supplemental/status-503.json
@@ -0,0 +1,195 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 503
+ }
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhbtest/supplemental/unexpected-status.json b/adapters/infytvhb/infytvhbtest/supplemental/unexpected-status.json
new file mode 100644
index 00000000000..bfb4b3f9b0b
--- /dev/null
+++ b/adapters/infytvhb/infytvhbtest/supplemental/unexpected-status.json
@@ -0,0 +1,201 @@
+{
+ "mockBidRequest": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://test.infy.tv/pbs/openrtb",
+ "body": {
+ "id": "6d773e60ab245243a04217d5f7e9e786",
+ "imp": [
+ {
+ "id": "bfb2dd46a5e63a0a84711c20fd8ce9e1",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/ogg",
+ "video/webm"
+ ],
+ "minduration": 3,
+ "maxduration": 3000,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6,
+ 7,
+ 8
+ ],
+ "w": 480,
+ "h": 320,
+ "linearity": 1,
+ "playbackmethod": [
+ 2
+ ],
+ "pos": 0
+ },
+ "bidfloor": 0.40404,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "exp": 3600,
+ "ext": {
+ "bidder": {
+ "key": "test_video"
+ }
+ }
+ }
+ ],
+ "app": {
+ "id": "AA88S0101",
+ "name": "Crunchyroll",
+ "bundle": "com.adrise.crunchyroll",
+ "storeurl": "https://channelstore.roku.com/details/d11368f0934f695ff350af56600d8ccb",
+ "cat": [
+ "IAB1"
+ ],
+ "privacypolicy": 1,
+ "publisher": {
+ "id": "IY1002",
+ "name": "The View Point",
+ "domain": "krushmedia.com"
+ },
+ "content": {
+ "language": "en"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
+ "geo": {
+ "lat": 20.6668,
+ "lon": -103.3918,
+ "accuracy": 5,
+ "country": "MEX",
+ "region": "JAL",
+ "zip": "45186"
+ },
+ "dnt": 0,
+ "lmt": 0,
+ "ip": "187.152.119.145",
+ "devicetype": 2,
+ "os": "Windows",
+ "osv": "10",
+ "carrier": "Telmex"
+ },
+ "test": 1,
+ "at": 1,
+ "tmax": 500,
+ "cur": [
+ "USD"
+ ],
+ "source": {
+ "tid": "42da74bc-88c5-40ea-8187-9070a34e8e10"
+ },
+ "regs": {
+ "ext": {
+ "gdpr": 0
+ }
+ }
+ }
+ },
+ "mockResponse": {
+ "status": 401
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Something went wrong, please contact your Account Manager. Status Code: [ 401 ] ",
+ "comparison": "literal"
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/infytvhb/params_test.go b/adapters/infytvhb/params_test.go
new file mode 100644
index 00000000000..beba085a64c
--- /dev/null
+++ b/adapters/infytvhb/params_test.go
@@ -0,0 +1,44 @@
+package infytvhb
+
+import (
+ "encoding/json"
+ "testing"
+
+ "github.com/prebid/prebid-server/openrtb_ext"
+)
+
+func TestValidParams(t *testing.T) {
+ validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+ if err != nil {
+ t.Fatalf("Failed to fetch the json schema. %v", err)
+ }
+
+ for _, p := range validParams {
+ if err := validator.Validate(openrtb_ext.BidderInfyTV, json.RawMessage(p)); err != nil {
+ t.Errorf("Schema rejected valid params: %s", p)
+ }
+ }
+}
+
+func TestInvalidParams(t *testing.T) {
+ validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+ if err != nil {
+ t.Fatalf("Failed to fetch the json schema. %v", err)
+ }
+
+ for _, p := range invalidParams {
+ if err := validator.Validate(openrtb_ext.BidderInfyTV, json.RawMessage(p)); err == nil {
+ t.Errorf("Schema allowed invalid params: %s", p)
+ }
+ }
+}
+
+var validParams = []string{
+ `{"publisherId": "1598991608990"}`,
+ `{"publisherId": "1598991608990", "placementId": "9999"}`,
+}
+
+var invalidParams = []string{
+ `{"publisherId": 42}`,
+ `{"publisherId": 42, "placementId":9898}`,
+}
diff --git a/exchange/adapter_builders.go b/exchange/adapter_builders.go
index f4d747333e3..66c98c66a8e 100755
--- a/exchange/adapter_builders.go
+++ b/exchange/adapter_builders.go
@@ -80,6 +80,7 @@ import (
"github.com/prebid/prebid-server/adapters/impactify"
"github.com/prebid/prebid-server/adapters/improvedigital"
"github.com/prebid/prebid-server/adapters/infytv"
+ "github.com/prebid/prebid-server/adapters/infytvhb"
"github.com/prebid/prebid-server/adapters/inmobi"
"github.com/prebid/prebid-server/adapters/interactiveoffers"
"github.com/prebid/prebid-server/adapters/invibes"
@@ -242,6 +243,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
openrtb_ext.BidderImpactify: impactify.Builder,
openrtb_ext.BidderImprovedigital: improvedigital.Builder,
openrtb_ext.BidderInfyTV: infytv.Builder,
+ openrtb_ext.BidderInfyTVHb: infytvhb.Builder,
openrtb_ext.BidderInMobi: inmobi.Builder,
openrtb_ext.BidderInteractiveoffers: interactiveoffers.Builder,
openrtb_ext.BidderInvibes: invibes.Builder,
diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go
index b4baf3d7f4b..6e924e948f6 100644
--- a/openrtb_ext/bidders.go
+++ b/openrtb_ext/bidders.go
@@ -162,6 +162,7 @@ const (
BidderImpactify BidderName = "impactify"
BidderImprovedigital BidderName = "improvedigital"
BidderInfyTV BidderName = "infytv"
+ BidderInfyTVHb BidderName = "infytvhb"
BidderInMobi BidderName = "inmobi"
BidderInteractiveoffers BidderName = "interactiveoffers"
BidderInvibes BidderName = "invibes"
@@ -331,6 +332,7 @@ func CoreBidderNames() []BidderName {
BidderImpactify,
BidderImprovedigital,
BidderInfyTV,
+ BidderInfyTVHb,
BidderInMobi,
BidderInteractiveoffers,
BidderInvibes,
diff --git a/openrtb_ext/imp_infytvhb.go b/openrtb_ext/imp_infytvhb.go
new file mode 100644
index 00000000000..fb7644e4a28
--- /dev/null
+++ b/openrtb_ext/imp_infytvhb.go
@@ -0,0 +1,16 @@
+package openrtb_ext
+
+type ExtInfytvHb struct {
+ DspID string `json:"dsp_id"`
+ CustomerID string `json:"customer_id"`
+ TagID string `json:"tag_id"`
+ EndpointID string `json:"endpoint_id"`
+ DealID string `json:"deal_id"`
+ Base string `json:"base"`
+ Path string `json:"path"`
+ DspType string `json:"dsp_type"`
+ MinCpm float64 `json:"min_cpm"`
+ MaxCpm float64 `json:"max_cpm"`
+ EndpointType string `json:"type"`
+ Floor float64 `json:"floor_price"`
+}
diff --git a/static/bidder-info/infytvhb.yaml b/static/bidder-info/infytvhb.yaml
new file mode 100644
index 00000000000..563c506e0b1
--- /dev/null
+++ b/static/bidder-info/infytvhb.yaml
@@ -0,0 +1,17 @@
+maintainer:
+ email: tech+hb@infy.tv
+modifyingVastXmlAllowed: true
+endpoint: "https://nxs.infy.tv/pbs/openrtb"
+capabilities:
+ app:
+ mediaTypes:
+ - banner
+ - video
+ - audio
+ - native
+ site:
+ mediaTypes:
+ - banner
+ - video
+ - audio
+ - native
\ No newline at end of file
diff --git a/static/bidder-params/infytvhb.json b/static/bidder-params/infytvhb.json
new file mode 100644
index 00000000000..63152429d20
--- /dev/null
+++ b/static/bidder-params/infytvhb.json
@@ -0,0 +1,53 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "InfyTV_HB Adapter Params",
+ "description": "A schema which validates params accepted by the InfyTV adapter",
+ "type": "object",
+ "properties": {
+ "dsp_id": {
+ "type": "string",
+ "description": "dsp_id"
+ },
+ "customer_id": {
+ "type": "string",
+ "description": "customer_id"
+ },
+ "tag_id": {
+ "type": "string",
+ "description": "customer_id"
+ },
+ "endpoint_id": {
+ "type": "string",
+ "description": "endpoint_id"
+ },
+ "deal_id": {
+ "type": "string",
+ "description": "deal_id"
+ },
+ "base": {
+ "type": "string",
+ "description": "customer_id"
+ },
+ "path": {
+ "type": "string",
+ "description": "customer_id"
+ },
+ "dsp_type": {
+ "type": "string",
+ "description": "customer_id"
+ },
+ "min_cpm": {
+ "type": "number",
+ "description": "customer_id"
+ },
+ "max_cpm": {
+ "type": "number",
+ "description": "customer_id"
+ }
+ },
+ "required": [
+ "dsp_id",
+ "customer_id",
+ "endpoint_id"
+ ]
+}
\ No newline at end of file
From c94573cbd26a5da55e8d45d2dc483fcf6dc0b804 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Tue, 22 Nov 2022 19:05:13 +0530
Subject: [PATCH 03/17] Update
---
adapters/infytvhb/infytvhb.go | 67 +++++++++++++++++++++++++++++------
1 file changed, 57 insertions(+), 10 deletions(-)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 81705b493e1..84516ca42ed 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -25,18 +25,65 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server co
}
func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
- requestJSON, err := json.Marshal(request)
- if err != nil {
- return nil, []error{err}
- }
+ var requests []*adapters.RequestData
+ var errors []error
- requestData := &adapters.RequestData{
- Method: "POST",
- Uri: a.endpoint,
- Body: requestJSON,
- }
+ for _, imp := range request.Imp {
+ var endpoint string
+
+ headers := http.Header{}
+ headers.Add("Content-Type", "application/json;charset=utf-8")
+ headers.Add("Accept", "application/json")
+ headers.Add("x-openrtb-version", "2.5")
+
+ if request.Device != nil {
+ if len(request.Device.UA) > 0 {
+ headers.Add("User-Agent", request.Device.UA)
+ }
+
+ if len(request.Device.IPv6) > 0 {
+ headers.Add("X-Forwarded-For", request.Device.IPv6)
+ }
- return []*adapters.RequestData{requestData}, nil
+ if len(request.Device.IP) > 0 {
+ headers.Add("X-Forwarded-For", request.Device.IP)
+ }
+ }
+
+ if infyExt, err := getImpressionExt(&imp); err == nil {
+ endpoint = infyExt.Base
+
+ reqCopy := *request
+ reqCopy.Imp = []openrtb2.Imp{}
+ reqCopy.Test = 0
+ imp.Ext = nil
+ imp.PMP = nil
+ reqCopy.Imp = append(reqCopy.Imp, imp)
+ reqCopy.Ext = nil
+ requestJSON, err := json.Marshal(reqCopy)
+ if err != nil {
+ errors = append(errors, err)
+ continue
+ }
+ if infyExt.EndpointType == "VAST_URL" {
+ requestData := &adapters.RequestData{
+ Method: "GET",
+ Uri: endpoint,
+ }
+ requests = append(requests, requestData)
+ } else {
+ requestData := &adapters.RequestData{
+ Method: "POST",
+ Uri: endpoint,
+ Body: requestJSON,
+ Headers: headers,
+ }
+ requests = append(requests, requestData)
+ }
+ }
+
+ }
+ return requests, errors
}
func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
From 8de2aedbfdc31c258e3797cd04e974c27918012e Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Tue, 6 Dec 2022 21:22:00 +0530
Subject: [PATCH 04/17] Updating connector
---
README.md | 5 +++++
adapters/infytvhb/infytvhb.go | 4 +++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index e88a4b265a5..356b0c789c8 100644
--- a/README.md
+++ b/README.md
@@ -68,3 +68,8 @@ Or better yet, [open a pull request](https://github.com/prebid/prebid-server/com
The quickest way to start developing Prebid Server in a reproducible environment isolated from your host OS
is by using Visual Studio Code with [Remote Container Setup](devcontainer.md).
+
+
+
+`docker build --platform linux/x86_64 -t infytv/infy:hb-2.0.0 .`
+`docker push infytv/infy:hb-2.0.0`
\ No newline at end of file
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 84516ca42ed..6861a4f4c24 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -57,7 +57,8 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
reqCopy.Imp = []openrtb2.Imp{}
reqCopy.Test = 0
imp.Ext = nil
- imp.PMP = nil
+ // imp.PMP = nil
+ imp.BidFloor = infyExt.Floor
reqCopy.Imp = append(reqCopy.Imp, imp)
reqCopy.Ext = nil
requestJSON, err := json.Marshal(reqCopy)
@@ -110,6 +111,7 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
SeatBid: []openrtb2.SeatBid{
{
Bid: []openrtb2.Bid{
+ //TODO: update this by parsing VAST
{
ID: internalRequest.ID,
AdM: string(response.Body),
From 7c7de1beca740675dd5d92ee6161d54e26c35ec3 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Mon, 27 Feb 2023 12:52:44 +0530
Subject: [PATCH 05/17] Adding GAM support
---
adapters/infytvhb/infytvhb.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 6861a4f4c24..5a0a2630285 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -66,7 +66,8 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
errors = append(errors, err)
continue
}
- if infyExt.EndpointType == "VAST_URL" {
+
+ if infyExt.EndpointType == "VAST_URL" || infyExt.EndpointType == "GAM" {
requestData := &adapters.RequestData{
Method: "GET",
Uri: endpoint,
From 77abfc6a6ae451ba5e1ae380c01081d0e7fdf9e3 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Thu, 11 May 2023 12:11:56 +0530
Subject: [PATCH 06/17] updating creative id logic
---
adapters/infytvhb/infytvhb.go | 2 --
1 file changed, 2 deletions(-)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 5a0a2630285..2dcd712950d 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -118,8 +118,6 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
AdM: string(response.Body),
Price: infyExt.Floor,
ImpID: internalRequest.Imp[0].ID,
- CID: "c_" + internalRequest.ID,
- CrID: "cr_" + internalRequest.ID,
},
},
},
From 3db96a0736361bfd3dcd38ff5cdcd4d0e19e4a20 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Fri, 12 May 2023 13:18:08 +0530
Subject: [PATCH 07/17] Added require params
---
adapters/infytvhb/infytvhb.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 2dcd712950d..d970fe14969 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -118,6 +118,8 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
AdM: string(response.Body),
Price: infyExt.Floor,
ImpID: internalRequest.Imp[0].ID,
+ CID: "-",
+ CrID: "-",
},
},
},
From 55d0f0536bad2f1ef3873efc565d32965803d5c8 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Thu, 1 Jun 2023 12:38:30 +0530
Subject: [PATCH 08/17] infy config
---
Dockerfile | 2 +-
README.md | 2 +-
devcontainer.md | 4 +++-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 80269c908df..2679d9efd74 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -18,7 +18,7 @@ ENV CGO_ENABLED 0
COPY ./ ./
RUN go mod tidy
RUN go mod vendor
-ARG TEST="true"
+ARG TEST="false"
RUN if [ "$TEST" != "false" ]; then ./validate.sh ; fi
RUN go build -mod=vendor -ldflags "-X github.com/prebid/prebid-server/version.Ver=`git describe --tags | sed 's/^v//'` -X github.com/prebid/prebid-server/version.Rev=`git rev-parse HEAD`" .
diff --git a/README.md b/README.md
index 77100253817..d1edc42b65f 100644
--- a/README.md
+++ b/README.md
@@ -72,4 +72,4 @@ is by using Visual Studio Code with [Remote Container Setup](devcontainer.md).
`docker build --platform linux/x86_64 -t infytv/infy:hb-2.0.0 .`
-`docker push infytv/infy:hb-2.0.0`
\ No newline at end of file
+`docker push infytv/infy:hb-2.0.0`
diff --git a/devcontainer.md b/devcontainer.md
index 84b4151d0ec..e10f44fc65a 100644
--- a/devcontainer.md
+++ b/devcontainer.md
@@ -67,4 +67,6 @@ above each test function.
- `F1` -> `^`-`\`` to toggle terminal
-PBS_GDPR_DEFAULT_VALUE=0 go run main.go --alsologtostderr
\ No newline at end of file
+PBS_GDPR_DEFAULT_VALUE=0 go run main.go --alsologtostderr
+
+export PATH=/Users/nayan/sdk/go1.19.3/bin:$PATH
From ddd00e1970bfae9a1bac0d04c2dfb0d9a965fe97 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Thu, 1 Jun 2023 16:23:25 +0530
Subject: [PATCH 09/17] adding missing cid and crid
---
adapters/infytvhb/infytvhb.go | 15 +++++++++++++--
go.mod | 1 +
go.sum | 2 ++
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index d970fe14969..5d186447787 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -5,7 +5,7 @@ import (
"fmt"
"net/http"
- "github.com/prebid/openrtb/v17/openrtb2"
+ "github.com/prebid/openrtb/v19/openrtb2"
"github.com/prebid/prebid-server/adapters"
"github.com/prebid/prebid-server/config"
"github.com/prebid/prebid-server/errortypes"
@@ -66,7 +66,6 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
errors = append(errors, err)
continue
}
-
if infyExt.EndpointType == "VAST_URL" || infyExt.EndpointType == "GAM" {
requestData := &adapters.RequestData{
Method: "GET",
@@ -74,6 +73,8 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
}
requests = append(requests, requestData)
} else {
+ fmt.Printf("endpoint: %v\n", endpoint)
+ fmt.Printf("requestJSON: %v\n", string(requestJSON))
requestData := &adapters.RequestData{
Method: "POST",
Uri: endpoint,
@@ -129,6 +130,16 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
if err := json.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{err}
}
+ for i, sb := range bidResp.SeatBid {
+ for j, b := range sb.Bid {
+ if b.CID == "" {
+ bidResp.SeatBid[i].Bid[j].CID = "-"
+ }
+ if b.CrID == "" {
+ bidResp.SeatBid[i].Bid[j].CrID = "-"
+ }
+ }
+ }
}
}
diff --git a/go.mod b/go.mod
index 14aae8de87b..48f3975a4df 100644
--- a/go.mod
+++ b/go.mod
@@ -21,6 +21,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/prebid/go-gdpr v1.11.0
github.com/prebid/go-gpp v0.1.1
+ github.com/prebid/openrtb/v17 v17.1.0
github.com/prebid/openrtb/v19 v19.0.0
github.com/prometheus/client_golang v1.12.1
github.com/prometheus/client_model v0.2.0
diff --git a/go.sum b/go.sum
index 8e64faa69aa..ebe17330482 100644
--- a/go.sum
+++ b/go.sum
@@ -396,6 +396,8 @@ github.com/prebid/go-gdpr v1.11.0 h1:QbMjscuw3Ul0mDVWeMy5tP0Kii6lmTSSVhV6fm8rY9s
github.com/prebid/go-gdpr v1.11.0/go.mod h1:mPZAdkRxn+iuSjaUuJAi9+0SppBOdM1PCzv/55UH3pY=
github.com/prebid/go-gpp v0.1.1 h1:uTMJ+eHmKWL9WvDuxFT4LDoOeJW1yOsfWITqi49ZuY0=
github.com/prebid/go-gpp v0.1.1/go.mod h1:b0TLoVln+HXFD9L9xeimxIH3FN8WDKPJ42auslxEkow=
+github.com/prebid/openrtb/v17 v17.1.0 h1:sFdufdVv9zuoDLuo2/I863lSP9QlEqtZZQyDz5OXPhY=
+github.com/prebid/openrtb/v17 v17.1.0/go.mod h1:nMj7j6aTIopCG91Wv3nuzcFTc7YRSOzuzdPxal+FY50=
github.com/prebid/openrtb/v19 v19.0.0 h1:NA7okrg7KcvL5wEg6yI0mAyujpyfkC8XSQr3h5ocN88=
github.com/prebid/openrtb/v19 v19.0.0/go.mod h1:jK+/g4Dh5vOnNl0Nh7isbZlub29aJYyrtoBkjmhzTIg=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
From 2078e74656f03b2a84cd249a4a6d8d3259f7674a Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Thu, 1 Jun 2023 16:41:20 +0530
Subject: [PATCH 10/17] Removed logs
---
adapters/infytvhb/infytvhb.go | 2 --
1 file changed, 2 deletions(-)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 5d186447787..9f791672a86 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -73,8 +73,6 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
}
requests = append(requests, requestData)
} else {
- fmt.Printf("endpoint: %v\n", endpoint)
- fmt.Printf("requestJSON: %v\n", string(requestJSON))
requestData := &adapters.RequestData{
Method: "POST",
Uri: endpoint,
From 612328a8c05a63ef194b703274c5693002d0fe47 Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Fri, 2 Jun 2023 12:49:53 +0530
Subject: [PATCH 11/17] improve performance
---
adapters/infytvhb/infytvhb.go | 143 +++++++++++++++++-----------------
1 file changed, 72 insertions(+), 71 deletions(-)
diff --git a/adapters/infytvhb/infytvhb.go b/adapters/infytvhb/infytvhb.go
index 9f791672a86..c6eba3e77b5 100644
--- a/adapters/infytvhb/infytvhb.go
+++ b/adapters/infytvhb/infytvhb.go
@@ -28,27 +28,27 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
var requests []*adapters.RequestData
var errors []error
- for _, imp := range request.Imp {
- var endpoint string
-
- headers := http.Header{}
- headers.Add("Content-Type", "application/json;charset=utf-8")
- headers.Add("Accept", "application/json")
- headers.Add("x-openrtb-version", "2.5")
-
- if request.Device != nil {
- if len(request.Device.UA) > 0 {
- headers.Add("User-Agent", request.Device.UA)
- }
+ headers := http.Header{}
+ headers.Add("Content-Type", "application/json;charset=utf-8")
+ headers.Add("Accept", "application/json")
+ headers.Add("x-openrtb-version", "2.5")
+
+ if request.Device != nil {
+ if len(request.Device.UA) > 0 {
+ headers.Add("User-Agent", request.Device.UA)
+ }
- if len(request.Device.IPv6) > 0 {
- headers.Add("X-Forwarded-For", request.Device.IPv6)
- }
+ if len(request.Device.IPv6) > 0 {
+ headers.Add("X-Forwarded-For", request.Device.IPv6)
+ }
- if len(request.Device.IP) > 0 {
- headers.Add("X-Forwarded-For", request.Device.IP)
- }
+ if len(request.Device.IP) > 0 {
+ headers.Add("X-Forwarded-For", request.Device.IP)
}
+ }
+
+ for _, imp := range request.Imp {
+ var endpoint string
if infyExt, err := getImpressionExt(&imp); err == nil {
endpoint = infyExt.Base
@@ -90,76 +90,77 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
if response.StatusCode == http.StatusNoContent {
return nil, nil
- }
-
- if response.StatusCode == http.StatusBadRequest {
+ } else if response.StatusCode == http.StatusBadRequest {
return nil, []error{&errortypes.BadInput{
Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode),
}}
- }
-
- if response.StatusCode != http.StatusOK {
+ } else if response.StatusCode != http.StatusOK {
return nil, []error{&errortypes.BadServerResponse{
Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode),
}}
}
- var bidResp openrtb2.BidResponse
- if infyExt, err := getImpressionExt(&internalRequest.Imp[0]); err == nil {
- if infyExt.EndpointType == "VAST_URL" {
- bidResp = openrtb2.BidResponse{
- ID: internalRequest.ID,
- SeatBid: []openrtb2.SeatBid{
- {
- Bid: []openrtb2.Bid{
- //TODO: update this by parsing VAST
- {
- ID: internalRequest.ID,
- AdM: string(response.Body),
- Price: infyExt.Floor,
- ImpID: internalRequest.Imp[0].ID,
- CID: "-",
- CrID: "-",
+
+ if len(internalRequest.Imp) > 0 {
+ var bidResp openrtb2.BidResponse
+ impression := &internalRequest.Imp[0]
+ if infyExt, err := getImpressionExt(impression); err == nil {
+ if infyExt.EndpointType == "VAST_URL" {
+ bidResp = openrtb2.BidResponse{
+ ID: internalRequest.ID,
+ SeatBid: []openrtb2.SeatBid{
+ {
+ Bid: []openrtb2.Bid{
+ //TODO: update this by parsing VAST
+ {
+ ID: internalRequest.ID,
+ AdM: string(response.Body),
+ Price: infyExt.Floor,
+ ImpID: internalRequest.Imp[0].ID,
+ CID: "-",
+ CrID: "-",
+ },
},
},
},
- },
- }
- } else {
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
- return nil, []error{err}
- }
- for i, sb := range bidResp.SeatBid {
- for j, b := range sb.Bid {
- if b.CID == "" {
- bidResp.SeatBid[i].Bid[j].CID = "-"
- }
- if b.CrID == "" {
- bidResp.SeatBid[i].Bid[j].CrID = "-"
+ }
+ } else {
+ if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ return nil, []error{err}
+ }
+ for i, sb := range bidResp.SeatBid {
+ for j := range sb.Bid {
+ b := &bidResp.SeatBid[i].Bid[j]
+ if b.CID == "" {
+ b.CID = "-"
+ }
+ if b.CrID == "" {
+ b.CrID = "-"
+ }
}
}
}
}
- }
-
- bidsCapacity := 1
- if len(bidResp.SeatBid) > 0 {
- bidsCapacity = len(bidResp.SeatBid[0].Bid)
- }
- bidResponse := adapters.NewBidderResponseWithBidsCapacity(bidsCapacity)
-
- for _, sb := range bidResp.SeatBid {
- for i := range sb.Bid {
- if bidType, err := getMediaTypeForBid(&sb.Bid[i]); err == nil {
- // resolveMacros(&sb.Bid[i])
- bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
- Bid: &sb.Bid[i],
- BidType: bidType,
- })
+ bidsCapacity := 1
+ if len(bidResp.SeatBid) > 0 {
+ bidsCapacity = len(bidResp.SeatBid[0].Bid)
+ }
+ bidResponse := adapters.NewBidderResponseWithBidsCapacity(bidsCapacity)
+
+ for _, sb := range bidResp.SeatBid {
+ for i := range sb.Bid {
+ if bidType, err := getMediaTypeForBid(&sb.Bid[i]); err == nil {
+ // resolveMacros(&sb.Bid[i])
+ bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
+ Bid: &sb.Bid[i],
+ BidType: bidType,
+ })
+ }
}
}
- }
- return bidResponse, nil
+ return bidResponse, nil
+ }
+ return nil, nil
}
// getMediaTypeForBid determines which type of bid.
From ce7ef274fcb553d813a6f95318a460a35a154dcd Mon Sep 17 00:00:00 2001
From: infytvcode <104983807+infytvcode@users.noreply.github.com>
Date: Fri, 20 Oct 2023 12:52:11 +0530
Subject: [PATCH 12/17] Adding missing property
---
openrtb_ext/bidders.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go
index 805ce67b272..5312b5ac4e7 100644
--- a/openrtb_ext/bidders.go
+++ b/openrtb_ext/bidders.go
@@ -113,6 +113,7 @@ var coreBidderNames []BidderName = []BidderName{
BidderImpactify,
BidderImprovedigital,
BidderInfyTV,
+ BidderInfyTVHb,
BidderInMobi,
BidderInteractiveoffers,
BidderInvibes,
From 126029645e035d4e837c2313af7d6afbcdf36767 Mon Sep 17 00:00:00 2001
From: Meet Shah
Date: Wed, 19 Feb 2025 15:16:38 +0530
Subject: [PATCH 13/17] Squashed commit of the following:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
commit b962448f14e348cec4cb226d5e4bb943db1cd1c9
Author: PGAMSSP <142323401+PGAMSSP@users.noreply.github.com>
Date: Wed Nov 27 00:28:47 2024 +0200
PgamSSP: Add GVL vendor ID (#4056)
commit 45743ca883d7b581f195ef15df534ff429762d4d
Author: Copper6SSP
Date: Wed Nov 27 00:16:36 2024 +0200
Copper6ssp: Add GVL vendor ID (#4072)
commit 34d2cf4316f49f531e96dacc01c0bf79167f9b03
Author: Isha Bharti
Date: Wed Nov 27 03:26:29 2024 +0530
Pubmatic: Declare support for OpenRTB 2.6 (#4078)
commit b7229831ed8d65727c49badf776fb41113c1a97f
Author: bhainesnexxen <146981622+bhainesnexxen@users.noreply.github.com>
Date: Tue Nov 26 13:40:29 2024 -0800
Unruly: Remove indicated support for gzip (#4028)
Co-authored-by: Brian Haines
commit 748ccd05dc92c15504583bc9ce655a9cf2cf31a2
Author: Patrick McCann
Date: Tue Nov 26 16:31:10 2024 -0500
Reserve IGS name (#4073)
commit 56b72c1f281dcbd3bc885e1cae3e11f73a8842e1
Author: Eugene Dorfman
Date: Tue Nov 26 22:13:29 2024 +0100
Pass through unknown imp.ext values to adapters (#3878)
Co-authored-by: AntonYPost
commit d52eb402de0fb19fc7ffb5077fa83b06e4d418f9
Author: Jeff Mahoney
Date: Fri Nov 22 14:05:08 2024 -0500
Sharethrough adapter: adding declared support for oRTB 2.6 (#4066)
commit 4bcf529cfedd92bb22fae6a0febe6c7ff03e07c8
Author: driftpixelai <166716541+driftpixelai@users.noreply.github.com>
Date: Fri Nov 22 20:01:56 2024 +0200
Driftpixel: Add default cookie sync endpoint (#3973)
commit 3f413a0868e1f0ea79876584597d90976bdec163
Author: ashishshinde-pubm <109787960+ashishshinde-pubm@users.noreply.github.com>
Date: Fri Nov 22 22:59:03 2024 +0530
Modules: Add bidder response to raw bidder response stage payload (#3882)
commit 95895a1b007af484f0f912de1e09c6e0719280ed
Author: Nikhil Vaidya <102963966+pm-nikhil-vaidya@users.noreply.github.com>
Date: Fri Nov 22 22:45:27 2024 +0530
Floors: Modify fetchrate to usefetchdatarate (#3972)
commit 2099424654ccdf8fb51b2a627446c2d8bd51a6a4
Author: linux019
Date: Fri Nov 22 05:19:59 2024 +0200
Fix cache init and update timeouts in stored requests (#4027)
commit f9877520cae8079bfef633501d081687a0671bbc
Author: Bugxyb
Date: Fri Nov 22 10:48:55 2024 +0800
AlgoriX: Add GVL vendor ID (#4068)
Co-authored-by: xunyunbo
commit 3406b59a231bff311f05fb9049dcf9ec5a136eb6
Author: Scott Kay
Date: Thu Nov 21 15:39:59 2024 -0500
Pass "req.ext.prebid.targeting.includebrandcategory" To Bidders (#3817)
commit 8b757fe4b81e67d314434b43769c4c9507d477a3
Author: Michel Chrétien
Date: Thu Nov 21 17:35:09 2024 +0100
Fix: imp ext prebid adunitcode unintentionally dropped (#4064)
commit 63af8af36f5deabad3ebd70f5931f37a69c55941
Author: Rafael Taveira <103446145+rafataveira@users.noreply.github.com>
Date: Wed Nov 13 10:27:32 2024 -0600
New Adapter: Nativo (#3790)
commit 24ba83b367de1cb313ea2e9b6f67f7b7c7a52ee2
Author: Krushmedia <71434282+Krushmedia@users.noreply.github.com>
Date: Wed Nov 13 18:17:23 2024 +0200
Krushmedia: Update user sync urls (#3979)
commit 181d523d2dd00dac1e517c6bfc0ae9e908f10082
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Nov 13 11:07:13 2024 -0500
Fix: Delete user.ext.prebid.buyeruids after extraction (#4049)
commit 106f6e450a2f6ab3ce986299468b9f657f4a0826
Author: IQZoneAdx <88879712+IQZoneAdx@users.noreply.github.com>
Date: Mon Nov 4 23:54:00 2024 +0200
IQzone: Add user sync (#3971)
commit 34035447654e1a91ba11095c25c9d67cb51200d7
Author: PGAMSSP <142323401+PGAMSSP@users.noreply.github.com>
Date: Mon Nov 4 23:30:59 2024 +0200
PgamSSP: Add currency converter (#3907)
commit a788661f45ac5399cc33f656cfca7a3f1ee8d107
Author: MartinGumGum <109325501+MartinGumGum@users.noreply.github.com>
Date: Mon Nov 4 11:14:07 2024 -0800
GumGum: Override the default currency (#3928)
commit 6e150f36c341d006d3426d813d7beaf420d9651d
Author: Scott Kay
Date: Thu Oct 31 13:31:57 2024 -0400
Increment Package Version To v3 (#4029)
commit 5b11f59bdde56d7b22678efb4b3dfb2da9c62a7f
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Oct 30 15:41:51 2024 -0400
Adapters: Update to use jsonutil unmarshal (#4021)
Co-authored-by: VeronikaSolovei9
commit 3907f1ae0c786fb887574134fb0edcf247976f36
Author: Scott Kay
Date: Wed Oct 30 13:16:49 2024 -0400
Remove Default Request Hardcoded Aliases (#4020)
commit df58baff01da6946cd7f075a10790cd1c52ea1f0
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Oct 29 21:05:07 2024 -0400
Cookie Sync: Use max when limit is 0 (#4022)
commit db2a872e4e1ceead524d2894013f298c8b499533
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Oct 29 17:20:57 2024 -0400
ORTB 2.6: Full support with down convert for 2.5 adapters (#4019)
Co-authored-by: hhhjort <31041505+hhhjort@users.noreply.github.com>
Co-authored-by: Veronika Solovei
commit 14197618936578fda6f019e21fa7b40504abc083
Author: Scott Kay
Date: Tue Oct 29 16:35:05 2024 -0400
Rename Blacklisted Apps to Blocked Apps (#3620)
commit ddf897c861bfb9cd026834161c43e53287120ff1
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Tue Oct 29 14:07:49 2024 -0400
Update Cookie Sync Chooser Debug Message to match Java (#3558)
commit a23380f23fd5792c951f0440c7a55a8e055cc839
Author: Mohammad Nurul Islam Shihan <93646635+ishihanvcs@users.noreply.github.com>
Date: Tue Oct 29 21:34:31 2024 +0600
ImproveDigital: Remove placementKey & addtlconsent parsing (#3728)
commit 03a4abdf04b3176fcb394ca173fedd1b6beba0ff
Author: Alex Maltsev
Date: Tue Oct 22 22:26:45 2024 +0300
Sample: Fix prebid js loading bug on sample html page (#3792)
commit 18f679834a60cdb243afd3b7a17fd10dc020a53f
Author: Sebastien Boisvert
Date: Tue Oct 22 15:15:07 2024 -0400
Bump Go version to 1.22 in dev containers config (#3983)
commit bcf6491f94c685fefc22f222e96c65a5cdd38344
Author: sindhuja-sridharan <148382298+sindhuja-sridharan@users.noreply.github.com>
Date: Thu Oct 17 15:20:45 2024 -0600
GumGum: Declare ORTB 2.6 support (#3985)
commit 451bc449e09be5aa5310e865bc3904fa92ad3474
Author: Bluesea <129151981+blueseasx@users.noreply.github.com>
Date: Thu Oct 17 03:12:50 2024 +0800
BlueSea: Add site capability (#3910)
Co-authored-by: prebid-bluesea
commit 8134328c03de3b8d4618c027dd6caf1c063a00a6
Author: Boris Yu
Date: Wed Oct 16 21:08:50 2024 +0300
Displayio: Make imp.bidfloor optional (#3959)
commit b56923c28d20f05cc0b8d4d0a340233b4ed03840
Author: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Date: Tue Oct 15 21:49:39 2024 +0200
RTB House: Resolve AUCTION_PRICE macro (#3901)
commit cbe987664b8b36a63620ac9fd88ef3a4731c1892
Author: Irakli Gotsiridze
Date: Tue Oct 15 23:30:17 2024 +0400
enable gzip (#3946)
commit 5fcbbbfb17d4029bf60f03c7919490dfcdd98874
Author: Patrick Loughrey
Date: Tue Oct 15 15:19:47 2024 -0400
Triplelift: Adding flag for 2.6 support (#3966)
commit c37951a3be2494623bffbed352137eed98bf7b1b
Author: ym-winston <46379634+ym-winston@users.noreply.github.com>
Date: Tue Oct 15 15:18:54 2024 -0400
update yieldmo.yaml to indicate support for ortb 2.6 (#3968)
commit 9bb9b3db2135b0085e8b1f3608eb1da73871e6b7
Author: bhainesnexxen <146981622+bhainesnexxen@users.noreply.github.com>
Date: Tue Oct 15 12:09:33 2024 -0700
Unruly: Indicate Support for OpenRTB 2.6 (#3984)
commit 87d4412b6c8e01a011c8b258274a87c37c7760bc
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Oct 9 19:08:14 2024 +0000
Refactor: Move privacy init up (#3958)
commit 64584f60f0922ef9b285089469d667424e33d395
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Oct 8 19:52:25 2024 +0000
Refactor: Remove getAuctionBidderRequests (#3957)
commit d54c3ed22d437a590092870e611903208f840969
Author: ysfbsf
Date: Tue Oct 8 15:42:40 2024 +0200
New Adapter: Missena (#3761)
commit 8689e0df95b9449a22d28eb5c56bbe9fc53f719c
Author: Nick
Date: Mon Oct 7 10:39:59 2024 -0400
Sonobi: native and currency conversion support (#3889)
Co-authored-by: bansawbanchee
commit f27bcefd0ffa351a1b844f26cc5d6250fd071c64
Author: dkornet-ad <169174147+dkornet-ad@users.noreply.github.com>
Date: Thu Oct 3 09:33:54 2024 +0300
New Adapter: Bidmatic (#3731)
authored by @dkornet-ad
commit 6c154e0f7f86d63227026506cf38872f6fe61cb1
Author: Alexander Pykhteyev
Date: Wed Sep 25 23:08:23 2024 +0700
New Adapter: Streamlyn (#3900)
Co-authored-by: apykhteyev
commit 53f51a6668ba7c1309915e5bd3feaabcac4cd771
Author: przemkaczmarek <167743744+przemkaczmarek@users.noreply.github.com>
Date: Wed Sep 25 17:53:07 2024 +0200
GPC: Set extension based on header (#3895)
commit c42fe53a22b85dc0d2d651963158e92e8ce288ce
Author: bkaneyama
Date: Wed Sep 25 07:46:01 2024 -0700
InMobi: mtype support (#3921)
commit 8b1b96e59003f7743d0e86301a87d9455e8592c1
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Sep 25 14:22:18 2024 +0000
Add docs build readme (#3930)
commit 4462fcef3555e5d37cabecbbc12e8c98bd56ec30
Author: Eugene Dorfman
Date: Wed Sep 25 16:11:45 2024 +0200
51degrees module (#3893)
commit 11b6546f5bffe2737cdf0eb6c9a98d346e138504
Author: Alex Maltsev
Date: Mon Sep 23 16:54:18 2024 +0300
Rubicon: Pass PBS host info to XAPI (#3903)
commit 93368cc9c4327be60622dae321e06bbfdb1e971f
Author: rtuschkany <35923908+rtuschkany@users.noreply.github.com>
Date: Thu Sep 19 23:45:32 2024 +0200
ConnectAd: String/int fix (#3925)
commit 905b3a5a29682ed74e9dc5e4c5e2404778ff9f08
Author: ShriprasadM
Date: Thu Sep 19 18:30:20 2024 +0530
Log non bid reasons in bidder framework (#2891)
Co-authored-by: Shriprasad Marathe
Co-authored-by: ashish.shinde
Co-authored-by: dhruv.sonone
commit 3c4527e9790e19647f12237f59875a5bbe61cfa3
Author: Mikael Lundin
Date: Wed Sep 18 13:38:49 2024 +0200
Adnuntius: Return DSA in bid response (#3777)
commit 640b97c1e0c2286e98252794762926ad4fc8ce38
Author: lm-ved <105272141+lm-ved@users.noreply.github.com>
Date: Mon Sep 16 12:17:54 2024 +0530
LemmaDigital: change endpoint (#3862)
commit 3e24be7950bea48b960a3d68206083e4995cd97b
Author: Alexander Pykhteyev
Date: Sat Sep 14 04:04:09 2024 +0700
New Adapter: TGM (#3848)
Co-authored-by: apykhteyev
commit ffdd75f6fe1f24cf8ed7891b6af7b65afbda9761
Author: Robert Kawecki
Date: Thu Sep 12 21:52:51 2024 +0200
New Adapter: AdTonos (#3853)
commit c02ee8c13280f72e173fee2adae441b92fb218ae
Author: Laurentiu Badea
Date: Thu Sep 12 12:34:46 2024 -0700
Update exchange json tests with correct hb_pb_cat_dur (#3836)
commit 7613ff5a2aa304522854ac1b61dafd780caea8d7
Author: Laurentiu Badea
Date: Thu Sep 12 12:27:07 2024 -0700
Update adapter json test framework to validate BidVideo (#3835)
commit 6cbedf0319f6b82946bfde02f8cdc4875f518a69
Author: schubert-sc <144821265+schubert-sc@users.noreply.github.com>
Date: Wed Sep 11 19:41:53 2024 +0300
Smartx: Declare OpenRTB 2.6 support (#3896)
commit e0a21d0c355ccc6cc903259a3435c7939151e66c
Author: qt-io <104574052+qt-io@users.noreply.github.com>
Date: Wed Sep 11 19:31:58 2024 +0300
QT: Add tcfeu support (#3892)
Co-authored-by: qt-io
commit b920cca0c426eed97e44ea17d28dfbf4dd8f868d
Author: Yanivplaydigo <165155195+Yanivplaydigo@users.noreply.github.com>
Date: Wed Sep 11 19:19:12 2024 +0300
Playdigo: Add tcfeu support (#3890)
commit 6a011ed23d02a181d9ed487c105967ed91b98edf
Author: ccorbo
Date: Wed Sep 11 09:53:54 2024 -0400
Update github.com/rs/cors to v1.11.0 (#3884)
Co-authored-by: Chris Corbo
commit ec6a45d2b6772b32c04053504a3422c571f9fb06
Author: Steffen Müller <449563+steffenmllr@users.noreply.github.com>
Date: Wed Sep 4 15:51:44 2024 +0200
Agma: Allow app.bundle to be used as selector for apps (#3780)
commit 8237f7fec597ac15b893eb2f8715744cfaee4590
Author: Scott Kay
Date: Tue Sep 3 14:34:56 2024 -0400
Refactor Bid Splitter Privacy Functions (#3645)
commit f7caea51241fa0ac427d4789a60efbff9b36b9ab
Author: Brian Schmidt
Date: Fri Aug 30 06:47:45 2024 -0700
OpenX: indicate support for OpenRTB 2.6 (#3879)
commit e825553a70ce9143a821c851eb7d77b2b01a2830
Author: Ben Oraki <46795400+BenOraki@users.noreply.github.com>
Date: Fri Aug 30 16:36:22 2024 +0300
New Adapter: Oraki (#3839)
commit 2e2b49fb166c0b6f95692a58ca662a8cf3d178a9
Author: escalax
Date: Fri Aug 30 16:28:04 2024 +0300
New Adapter: Escalax (#3798)
commit 4ea0e33a37c77b2167c72a1448a975d1841fb58a
Author: Copper6SSP
Date: Fri Aug 30 16:18:46 2024 +0300
New Adapter: Copper6SSP (#3755)
commit 8d7117d948879d0cf44b2513a9beec3bf6404012
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Aug 27 13:23:34 2024 -0400
Revert "New Module: 51Degrees (#3650)" (#3888)
This reverts commit 2606e7529f36aca8e645fc38814ba9924baba8a9.
commit 84a8162205b1aacaec18ceedd9cb0b99796818b7
Author: Anand Venkatraman
Date: Thu Aug 22 16:14:32 2024 +0530
PulsePoint: ortb 2.6 version and gpp support (#3874)
authored by @anand-venkatraman
commit bd85ba414df00ba971015773ef67ccecb6f7792c
Author: Nick Llerandi
Date: Thu Aug 22 02:15:12 2024 -0400
specifies ortb 2.6 support (#3) (#3876)
commit 54f875981f54964410b9e5370a421f7d25af116f
Author: dtbarne <7635750+dtbarne@users.noreply.github.com>
Date: Wed Aug 21 07:26:30 2024 -0500
Update mobilefuse.yaml to indicate support for OpenRTB 2.6 and GPP (#3871)
commit 59a5b07ed07f91fec6e51ee21e57e1de6099d4b5
Author: mwang-sticky
Date: Wed Aug 21 20:26:15 2024 +0800
freewheel-adapter: support 2.6 (#3873)
commit a556e2d3479d53509dffd21bd0e23689332a87a8
Author: Dubyk Danylo <45672370+CTMBNara@users.noreply.github.com>
Date: Wed Aug 21 15:23:39 2024 +0300
Fix currency conversion bug. (#3867)
Co-authored-by: ddubyk
commit d16171226aacf9d3aeaf4426c10e499fcd57d9eb
Author: Pubrise
Date: Wed Aug 21 12:43:39 2024 +0300
new adapter (#3833)
authored by @Pubrise
commit e8509e659034f406b1aa0c728742b63ea565a04e
Author: bretg
Date: Wed Aug 21 05:40:26 2024 -0400
declare support for ORTB 2.6 (#3872)
authored by @bretg
commit 6be724459440c9e8fdc2f94eeff5df8280c8750e
Author: Saar Amrani
Date: Wed Aug 21 12:37:59 2024 +0300
Update Vidazoo bidder info for GPP support (#3869)
commit e4bd6d3675111a973c100694af84f6764fc21f1e
Author: gg-natalia <148577437+gg-natalia@users.noreply.github.com>
Date: Sun Aug 18 06:52:28 2024 -0300
ADTS-455 remove video validations (#3842)
authored by @gg-natalia
commit 2606e7529f36aca8e645fc38814ba9924baba8a9
Author: James Rosewell
Date: Fri Aug 16 14:20:22 2024 +0100
New Module: 51Degrees (#3650)
Co-authored-by: James Rosewell
Co-authored-by: Marin Miletic
Co-authored-by: Sarana-Anna
Co-authored-by: Eugene Dorfman
Co-authored-by: Krasilchuk Yaroslav
commit 0e9b234a8b6faa7a3a105ab5662aa047c8798574
Author: Antonios Sarhanis
Date: Tue Aug 13 18:28:44 2024 +1000
Use format=prebid on adserver requests. (#3846)
commit 4d64623dd680bfd9add95fbf2c65b5b224f2b64a
Author: ownAdx <135326256+ownAdx-prebid@users.noreply.github.com>
Date: Mon Aug 12 18:51:53 2024 +0530
OwnAdx: Bidder param and URL updates (#3813)
Co-authored-by: Hina Yadav
commit 2a19924a0076a6a501acb47ec42f80ba5bc19abc
Author: ahmadlob <109217988+ahmadlob@users.noreply.github.com>
Date: Mon Aug 12 16:09:23 2024 +0300
taboola-support-app-in-prebid-server (#3795)
commit 4f177cae3b1ca96a9e9ed5145610eb6ab9ada42e
Author: benben2001 <145416009+benben2001@users.noreply.github.com>
Date: Mon Aug 12 21:07:38 2024 +0800
New Adapter: MeloZen (#3784)
commit ce331a7d67fb26a09a4c3a15ec02fc75a2935c76
Author: Scott Kay
Date: Thu Aug 8 14:28:25 2024 -0400
Fix: Aliases Of Bidders With UserSync Supports Declared Only (#3850)
commit 211f13ada532b8a6bd9576dc490f4300d0393b2b
Author: Ilia Medvedev
Date: Thu Aug 8 17:34:27 2024 +0400
New Adapter: Filmzie (#3758)
authored by @imedvedko
commit cba6221243159fefc06c3a7193d9bc3cdcce1ca0
Author: SmartHubSolutions <87376145+SmartHubSolutions@users.noreply.github.com>
Date: Thu Aug 8 15:48:00 2024 +0300
SmartHub: add alias VimayX (#3760)
commit dabc3862eec070236dd8a4bc9571e2eeee334673
Author: Yanivplaydigo <165155195+Yanivplaydigo@users.noreply.github.com>
Date: Wed Aug 7 17:02:28 2024 +0300
Playdigo: Add user sync (#3797)
commit 804334a3528381004c32832e0bb7a1329dfea0db
Author: metax-kehan <115962296+metax-kehan@users.noreply.github.com>
Date: Wed Aug 7 01:16:51 2024 +0800
New Adapter: MetaX (#3712)
commit e8e2848f04a6bdfc4739ca8bebdeb5d2054ac571
Author: SmartHubSolutions <87376145+SmartHubSolutions@users.noreply.github.com>
Date: Tue Aug 6 20:06:13 2024 +0300
SmartHub: add alias FelixAds (#3837)
authored by @SmartHubSolutions
commit efc1e8b194a532605d13a457a24d44c1d7d1764d
Author: andre-gielow-ttd <124626380+andre-gielow-ttd@users.noreply.github.com>
Date: Tue Aug 6 12:59:15 2024 -0400
New Adapter: TheTradeDesk (#3738)
commit c3d8379c0583dcfdcad53db34130290972dc7441
Author: dkornet-ad <169174147+dkornet-ad@users.noreply.github.com>
Date: Tue Aug 6 17:49:42 2024 +0300
Adtelligent: ext aid type (#3676)
authored by @dkornet-ad
commit c50e264b3c525b74fba81e316dbab004b78e9f60
Author: Laurentiu Badea
Date: Tue Aug 6 02:27:18 2024 -0700
OpenX: return cat/dur for video bids (#3834)
commit 8b13ebcb54fbaf521665d696485b2b59986f7d54
Author: edandavi
Date: Mon Aug 5 19:03:03 2024 +0300
consumable adapter - use configured endpoint instead of hardcoded value (#3783)
authored by @edandavi
commit 7c92e10701a338dfede742fcc0269ec3b62d16a0
Author: qt-io <104574052+qt-io@users.noreply.github.com>
Date: Thu Aug 1 20:00:51 2024 +0300
New Adapter: QT (#3696)
authored by @qt-io
commit 843a81cf0fe7771b4220b9bf10dcd7a57c579169
Author: Vincent
Date: Tue Jul 30 23:11:16 2024 +0200
Criteo: Add support for paapi (#3759)
Co-authored-by: v.raybaud
commit ed3e4a121e289526f495ccf005634b13c5e75c33
Author: Zhongshi Xi
Date: Mon Jul 29 16:21:06 2024 -0400
Gracefully shutdown analytics module/runner (#3335)
commit 466ff838b669f45a1de7a70d0f33fe113e3430cb
Author: Ruslan S.
Date: Tue Jul 30 03:51:44 2024 +0800
Smaato: Add DOOH support (#3751)
commit 55094fe8f0c8621a0c595858e291db59301757d6
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Jul 29 11:36:16 2024 -0400
Fix: Triplelift Native add site.publisher nil check (#3824)
commit 83bce5acd411fc2db39317dc77b53a626c985f6a
Author: Aaron Price <67345931+AaronColbyPrice@users.noreply.github.com>
Date: Thu Jul 25 05:58:01 2024 -0700
PBS Go: 2024 Doc updates including endpoint and ortb support version (#3724)
Co-authored-by: aarprice@publicisgroupe.net
commit 382f793e658906d5b1dfe244515401db7314adbf
Author: rtuschkany <35923908+rtuschkany@users.noreply.github.com>
Date: Thu Jul 25 14:56:01 2024 +0200
ConenctAd Adapter Update (#3715)
commit 536821f25e148c063e66e09d0892ce3f1b69720e
Author: Patrick Loughrey
Date: Wed Jul 24 12:37:36 2024 -0400
Triplelift Native: Mapping tag_code (#3745)
commit d1596c817e7080cc2e2a15e6b0b3893ef4be27f1
Author: Ruslan S.
Date: Wed Jul 24 21:46:37 2024 +0800
Smaato: Change server response type (#3734)
commit 115f77317c7484cf73710f86d30f4ecb9a76214a
Author: BIGOAds
Date: Wed Jul 24 21:34:40 2024 +0800
New Adapter: bigoad (#3711)
Co-authored-by: linzhucheng
commit f087eeaafec84ade9dca2b7a1851f5f73bde51df
Author: Laurentiu Badea
Date: Wed Jul 24 05:41:36 2024 -0700
OpenX: accept incoming string fields to support Prebid.js 9 (#3668)
commit 0f5a1fe23db348a7de010f16d7b4b951f307abd4
Author: Adprime <64427228+Adprime@users.noreply.github.com>
Date: Mon Jul 22 13:02:33 2024 +0300
Adprime: add userSync (#3770)
Co-authored-by: Aiholkin
commit da658e787f536d21769a49316d7d2c5dff39e323
Author: Tactics Technology LLC
Date: Mon Jul 22 03:02:08 2024 -0700
CPMStar: add gvlVendorID (#3779)
commit 0a3271dc7808d8da9d49c018deea365eaa53bc14
Author: Boris Yu
Date: Mon Jul 22 12:53:25 2024 +0300
New Adapter: Displayio (#3691)
authored by @xdevel
commit 5fefeaaed05e9ce9feeec34b8231ac1bd025f021
Author: Tetiana Volkova <126241934+tetianaatsmaato@users.noreply.github.com>
Date: Thu Jul 18 17:35:11 2024 +0200
Smaato: Add DSA support tests (#3749)
commit a1b4451ac2e5b3890a46922aa8892c29f4281891
Author: MarinaZhuravlevaCriteo
Date: Thu Jul 18 22:14:15 2024 +0700
Criteo: Add support for native (#3709)
commit 99431ad83fa7546d8e8d60acc3feae77c815f37f
Author: Abdulbaki Çam <71071893+bakicam@users.noreply.github.com>
Date: Wed Jul 3 20:38:17 2024 +0300
New Adapter: Admatic (#3654)
Co-authored-by: Faruk Çam
commit 670e1d4d0d30fa22c46a9059c68fddbde95d701c
Author: BizzClick <73241175+BizzClick@users.noreply.github.com>
Date: Mon Jul 1 12:24:29 2024 +0300
Bizzclick: rename bizzclick to blasto (#3688)
commit a907ecb1f13a0de23f44d8f6d5d26c0a3d5b28fc
Author: Anand Venkatraman
Date: Mon Jul 1 14:53:33 2024 +0530
PulsePoint: Marking cp/ct params to be either String or Int (#3677)
commit 80a90dd32635f087563d5e9e51593a7313a3913b
Author: IgorKulemzin <65122039+IgorKulemzin@users.noreply.github.com>
Date: Mon Jul 1 11:45:41 2024 +0300
OpenWeb: Adapter Refactor + New Endpoint (#3670)
Co-authored-by: Zdravko Kosanovic
Co-authored-by: Dedi Sidi
commit 8784615f24129f751c2e83b738180a089ac015dc
Author: SiddhantAgrawal
Date: Mon Jul 1 13:45:13 2024 +0530
InMobi: include iframe & native for M-Web (#3682)
Co-authored-by: Siddhant Kumar Agrawal
Co-authored-by: Siddhant Kumar Agrawal
commit 09a3dd4c3d9005babe88868c1fdc029f630cf857
Author: Saar Amrani
Date: Mon Jul 1 10:54:47 2024 +0300
New Adapter: Vidazoo (#3698)
commit 057e25d6ab740d636dd27a2f1d6d3ae90c349427
Author: sergeykcointraffic <158448507+sergeykcointraffic@users.noreply.github.com>
Date: Sat Jun 29 01:01:56 2024 +0800
New Adapter: Сointraffic (#3647)
Co-authored-by: Aleksandr Štšepelin
commit 07f3ee24245daac300565a38d62550663ac3d6ea
Author: redaguermas
Date: Thu Jun 27 06:45:38 2024 -0700
Nobid: Add iframe sync support (#3732)
Co-authored-by: Reda Guermas
commit 2a8483bce5654c19b42e890bff956a5728fe48a5
Author: Dmitry Savintsev
Date: Wed Jun 26 20:29:27 2024 +0200
IX: save/restore global var in test (#3638)
Signed-off-by: Dmitry S
commit 3295c4119324f6d33d1d9851872cd9b2e594f3f3
Author: Scott Kay
Date: Wed Jun 26 12:10:20 2024 -0400
AppNexus: Forward GPID (#3767)
commit 9f2caf930dd8874ff762df95eed837a30cc0ff29
Author: Nick Jacob
Date: Tue Jun 25 08:19:11 2024 -0400
add support for setting seat (bidderCode) override + demand source in bid meta (#3733)
authored by @nickjacob
commit fe5557528809056335e53c4959c91452fbf8cf03
Author: ownAdx <135326256+ownAdx-prebid@users.noreply.github.com>
Date: Tue Jun 25 17:46:48 2024 +0530
OwnAdx: Add cookie sync (#3713)
Co-authored-by: Hina Yadav
commit 817afeb8d448a43c8665d436e68549df75a824ec
Author: Ruslan S
Date: Tue Jun 25 01:41:07 2024 +0800
Gitignore changes (#3752)
commit 8500d569c4be11545b6e81fe6e2c048b8b4533a5
Author: 方思敏 <506374983@qq.com>
Date: Mon Jun 24 17:43:07 2024 +0800
New Adapter : MediaGo (#3705)
* Add MediaGo bidder adapter
* update getBidType
* MediaGo bidder add test covarage and update some logic
* Change the EP's domain macro replacement to let the Publisher modify the config.
* change mediago docs
* change mediago docs
* 1. follow Go's comment convention
2. remove the unsupported formats instead of leaving them as comments
commit 4dc40058f8f117b39d975da83170bb45db6f67de
Author: driftpixelai <166716541+driftpixelai@users.noreply.github.com>
Date: Mon Jun 17 05:26:15 2024 -0700
New Adapter: Driftpixel (#3684)
commit fb15da3ae96efbf92ca7bbd61b3c18ee15031d2d
Author: Brett Bloxom <38990705+BrettBlox@users.noreply.github.com>
Date: Mon Jun 17 01:54:02 2024 -0600
New Adapter: Concert (#3651)
commit 2aa6aea88f798714a8f2bba1808869efd33bb067
Author: Wls-demo <67785512+Wls-demo@users.noreply.github.com>
Date: Mon Jun 17 10:38:32 2024 +0300
Boldwin: update maintainer email (#3701)
Co-authored-by: Wls-demo
commit a812221ced16aad3f27949810f1109c39b7f63f7
Author: Dmitry Savintsev
Date: Tue Jun 11 21:26:18 2024 +0200
Fix semgrep issue with dgryski Go ruleset (#3719)
commit 1979036892546cedace3999037626b62fdb6a45b
Author: Dmitry Savintsev
Date: Tue Jun 11 19:23:39 2024 +0200
Fix golangci-lint issues (#3679)
commit 2d2bf71aa3b2db5f55bc290028d5ae99252c22ec
Author: Vungle-GordonTian <115982294+Vungle-GordonTian@users.noreply.github.com>
Date: Tue Jun 11 22:24:50 2024 +0800
Vungle: Rename from liftoff (#3727)
commit e13d786d5ec2db1ffd2206f25546f2f41ed62e78
Author: Scott Kay
Date: Fri Jun 7 12:16:07 2024 -0400
Upgrade To Go 1.22 (#3686)
commit 7702a78118cf56ebf2a4e998f4757b01640ef404
Author: Ruslan S
Date: Wed Jun 5 19:07:22 2024 +0800
Smaato: Add ORTB2.6 tests (#3646)
commit 32fdbc4be35375912ac886ca05f7318c06995e0c
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Jun 4 21:07:45 2024 -0400
Imp FPD: Skip bidder params and native validation (#3720)
commit ecf317144863d7aa9e5e7ea5c454e4c246d5ad8e
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Jun 4 16:33:23 2024 -0400
Fix: Expect Array Overwrites in Imp FPD Tests (#3725)
commit c4fde39c25918f8931c720cde5a5375578be5dc1
Author: Scott Kay
Date: Tue Jun 4 13:36:18 2024 -0400
FPD: Don't Merge Arrays (#3708)
commit 37bcf01d9faf8c19c7837340e04563815ea46feb
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Jun 3 22:16:19 2024 -0400
Bidder-specific imp FPD (#3704)
commit 2b8e8cd96d08dafcff0f4d6400602876f2660b95
Author: ym-winston <46379634+ym-winston@users.noreply.github.com>
Date: Sun Jun 2 01:13:13 2024 -0400
Yieldmo: Add bid floor currency conversion (#3697)
commit c528d182af1f5701b1605b2bd688594a9ddfde75
Author: SmartHubSolutions <87376145+SmartHubSolutions@users.noreply.github.com>
Date: Fri May 31 17:02:26 2024 +0300
new alias tredio (#3707)
co-authored by @SmartHubSolutions
commit ff9aed5138ad69a47d4ef8052d100bf4a89e8e6c
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed May 29 14:31:41 2024 -0400
Move imp validation into ortb package (#3685)
commit 9133d2cf25d4a3ef4300495bd258a47f8997866c
Author: Aman Jain <34913883+amanpatniajmer@users.noreply.github.com>
Date: Mon May 27 10:59:44 2024 +0530
Medianet: Adds mtype support to be used as BidType (#3658)
Co-authored-by: Aman Jain
Co-authored-by: rajatgoyal2510
commit 72d040b29703e868dc95a923f974bef652ae4e6e
Author: 李向军 <401154047@qq.com>
Date: Thu May 23 18:35:43 2024 +0800
Yeahmobi: Fix video bug (#3680)
Co-authored-by: @lxj15398019970
commit 93bf6516aab94fca26b649b05a9c97ae36a64336
Author: Zhongshi Xi
Date: Thu May 23 05:28:24 2024 -0400
Hello World Sample (#3326)
Co-authored-by: Bret Gorsline
commit 83e12ea767fc24f24c684f0d4ae359d3ed7868e9
Author: pm-avinash-kapre <112699665+AvinashKapre@users.noreply.github.com>
Date: Wed May 22 19:07:27 2024 +0530
pubmatic: Pass imp.ext.gpid to SSP (#3669)
commit 884b0d0611563f9dabe84990c05e38b3d5c4401f
Author: SmartHubSolutions <87376145+SmartHubSolutions@users.noreply.github.com>
Date: Wed May 22 16:37:14 2024 +0300
SmartHub: add jdpmedia alias (#3689)
commit a939c4b16a4fd67f64f24ecbe01556155762bd43
Author: bhainesnexxen <146981622+bhainesnexxen@users.noreply.github.com>
Date: Wed May 22 04:13:41 2024 -0700
Unruly: dynamic bid response array size (#3644)
Co-authored-by: Brian Haines
commit 01e9f6d04642a614d18407181526626a27210db9
Author: ecdrsvc <82906140+ecdrsvc@users.noreply.github.com>
Date: Wed May 22 06:20:39 2024 -0400
set geoscope to CAN (#3687)
commit e3ce0ecf7e6f70791d7f00f84fea81e05e7fa3af
Author: SerhiiNahornyi
Date: Wed May 22 12:19:39 2024 +0200
Rubicon: Remove `buyeruid` logic (#3683)
commit d3f5db1b28e3e7104009901e587938da65047df6
Author: CPMStar
Date: Wed May 22 03:17:37 2024 -0700
CPMStar: use iframe based usersync (#3660)
commit 2c39db78b15d4fa42c4882d6be278c4716fba0cc
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Thu May 9 14:32:16 2024 -0400
Fix: Set bid meta adaptercode to adapter name (#3661)
commit 6cef5f90b58ea207925112513eb9878d1c82ab90
Author: SmartHubSolutions <87376145+SmartHubSolutions@users.noreply.github.com>
Date: Tue May 7 08:39:46 2024 +0300
Update SmartHub adapter and add alias Markapp (#3627)
authored by @SmartHubSolutions
commit 692ff3a99eaa639f62141f8581fb42354f9f99d2
Author: Dmitry Savintsev
Date: Mon May 6 19:12:27 2024 +0200
Fix issues flagged by golangci-lint (#3621)
commit 8cce68a9556cc77ca16a8d746e49686f3d8cf40b
Author: ashishshinde-pubm <109787960+ashishshinde-pubm@users.noreply.github.com>
Date: Thu May 2 22:58:51 2024 +0530
Capture SeatNonBids for rejected bids due to floor enforcement (#3625)
commit cee7a5719edb0f265a39599ace4b42f400399ea1
Author: bhainesnexxen <146981622+bhainesnexxen@users.noreply.github.com>
Date: Thu May 2 01:42:35 2024 -0700
Unruly: bid.dur support (#3643)
Co-authored-by: Brian Haines
commit 6fa583e8b8c9221088bc85b548fdcadd7af13f20
Author: Yanivplaydigo <165155195+Yanivplaydigo@users.noreply.github.com>
Date: Thu May 2 11:11:59 2024 +0300
Playdigo: new adapter (#3636)
commit 6520bacc398e80739c1aa55c533215cbce4b7392
Author: mwang-sticky
Date: Thu May 2 16:11:35 2024 +0800
Freewheel: add video dur and cat (#3640)
commit bc89164de1ea415ccc8d6ff2b5aacdea161e04f2
Author: product-trustedstack <141160331+product-trustedstack@users.noreply.github.com>
Date: Thu May 2 12:45:40 2024 +0530
New Adapter: Trustedstack (#3618)
authored by @product-trustedstack
commit 8d643626e9226212d0f8880ae7210611c7be27a8
Author: Scott Kay
Date: Tue Apr 30 13:48:50 2024 -0400
Refactor Request Alias Parsing In Request Splitter (#3619)
commit 49e22c5a2295daf7e5267affa9a5e427f8ae8fe0
Author: Scott Kay
Date: Tue Apr 30 12:32:02 2024 -0400
Flipp + Alkimi: Minor Refactoring (#3622)
commit 848572b7b2cd5532a6cdef2ef5e0cfa38b7dcdb1
Author: bretg
Date: Tue Apr 30 11:46:13 2024 -0400
Mobfoxpb: Update contact (#3628)
commit 98fa3aa6a405f2f7f1655cfd945f3dcf4677647c
Author: PGAMSSP <142323401+PGAMSSP@users.noreply.github.com>
Date: Tue Apr 30 18:25:20 2024 +0300
PgamSSP: gpp support (#3630)
commit 4d8e88eca6c922efc31ff2bf9e1b61e40ffa30ac
Author: ccorbo
Date: Tue Apr 30 11:10:40 2024 -0400
IX: indicate support for OpenRTB 2.6 (#3642)
Co-authored-by: Chris Corbo
commit 74fbb38cfa4f101ebb27c91efacd60c3c02c1d40
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Tue Apr 30 07:47:26 2024 -0700
Configurable Stored Request Fetch Timeout (#3614)
commit b89fe4abee8e9e97f36475e7fd9c9608c46608b5
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Apr 29 16:32:01 2024 -0400
CPMStar: Fix test by specifying returned imps (#3649)
commit 30082c04295370d46d57db4526c80be8f52806f2
Author: CPMStar
Date: Mon Apr 29 00:42:47 2024 -0700
CPMStar: Fixed for loop index reference bug (#3604)
commit 5da25e3e52e833467dc9da5e269f0d96397188d9
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri Apr 26 14:46:16 2024 -0400
Bump golang.org/x/net from 0.17.0 to 0.23.0 (#3635)
commit 379445ba56e7ff850dd2357c2c045232e46120d5
Author: Dhruv Sonone <83747371+Pubmatic-Dhruv-Sonone@users.noreply.github.com>
Date: Sat Apr 27 00:00:44 2024 +0530
Event tracker injection (#3339)
commit 36dea2cb9dae4c792e2710b13dad4430ee8e2a31
Author: Scott Kay
Date: Fri Apr 26 14:23:05 2024 -0400
Refactor FPD Merge Functions (#3601)
commit ecb50e71d2ca7edd9ff7174e910703f67412b0b5
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Thu Apr 25 13:03:41 2024 -0400
Fix: Inject default DSA before auction request is rebuilt (#3639)
commit 5e7c8240a8e73e2e74707d9062bb972b7c06f4fc
Author: johnwier <49074029+johnwier@users.noreply.github.com>
Date: Thu Apr 25 02:37:33 2024 -0700
Conversant: Make requests in USD (#3611)
Co-authored-by: johwier
commit 440ba5ca14f23d5054a1950a0c77485ecf32202f
Author: readpeak-user <63640438+readpeak-user@users.noreply.github.com>
Date: Thu Apr 25 12:08:10 2024 +0300
New Adapter: Readpeak (#3610)
Co-authored-by: Tuomo Tilli
commit 74ff6ae220dbdc5a8052f48cd40638d9f7ee2dab
Author: teqblaze <162988436+teqblaze@users.noreply.github.com>
Date: Thu Apr 25 09:09:10 2024 +0300
New Adapter: Loyal (#3586)
Co-authored-by: loyal
commit 78dd64d7488848689e2e71c71ac78f6863eee3bf
Author: Denis Logachov
Date: Thu Apr 25 08:55:43 2024 +0300
Adkernel: bid.mtype support (#3631)
commit e8ff959425081f968c7582d78556a9ac16a2e241
Author: xmgiddev <133856186+xmgiddev@users.noreply.github.com>
Date: Thu Apr 25 08:49:12 2024 +0300
MgidX: Update config info (#3633)
Co-authored-by: gaudeamus
Co-authored-by: Evgeny Nagorny
Co-authored-by: xmgiddev <>
commit ca83a83f4a96f23180e4cbd0704d76ca58c4aa3a
Author: Zdravko Kosanović <41286499+zkosanovic@users.noreply.github.com>
Date: Mon Apr 22 12:32:40 2024 +0200
Rise: Add placementId parameter to bidder ext (#3626)
commit 763551963dd3208dde6f9bf35b31ef76cc83814f
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Apr 16 15:49:31 2024 -0400
Metrics: Add per adapter metric indicating when buyeruid was scrubbed (#3623)
commit 5bfa34dd6f9b0f43d8cd2237956ff062854f834e
Author: César Fernández
Date: Tue Apr 16 07:53:15 2024 +0200
Axonix: Add userSync (#3598)
commit 3206e99914ce259106a80d4644b64d9ab5200f09
Author: Jeff Mahoney
Date: Mon Apr 15 04:08:30 2024 -0400
Update sharethrough.yaml (#3624)
commit 2cc2c90a09708de6fe5cdbf5d798a08db0b806d9
Author: Saurabh Narkhede <108730956+pm-saurabh-narkhede@users.noreply.github.com>
Date: Thu Apr 11 01:17:49 2024 +0530
Add ImpIds in RequestData for associated Impressions (#3364)
commit 9cd1b3dcba890a6ee6daa2ba4622c0b4008ddd6a
Author: Zhongshi Xi
Date: Wed Apr 10 13:29:15 2024 -0400
Local stored response fetching (#3600)
commit 12802fae0876ccfb328be1110eb9d433e322eca8
Author: Scott Kay
Date: Tue Apr 9 18:04:29 2024 -0400
EIDs Should Not Require Unique Sources (#3607)
commit b42841e94abac057f7af53b0eca6689b3d70df23
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Apr 9 16:26:38 2024 -0400
DSA: Inject default in bid requests if not present (#3540)
commit a35a6687f25561857a21648e2423db6d2d6373f0
Author: onetag-dev <38786435+onetag-dev@users.noreply.github.com>
Date: Mon Apr 8 08:14:51 2024 +0200
Onetag: add redirect userSync support (#3612)
Co-authored-by: lorenzob
commit e982bfebedb696f9bce57a3018cc7592cf62fec1
Author: Nilesh Chate <97721111+pm-nilesh-chate@users.noreply.github.com>
Date: Thu Apr 4 00:53:25 2024 +0530
Privacy Sandbox: Topics in headers (#3393)
commit fb0384bb94352f13607d22d52781e8bd01ea328d
Author: psmrt <162991810+psmrt@users.noreply.github.com>
Date: Wed Apr 3 11:55:34 2024 +0530
New adapter: Smrtconnect (#3571)
Co-authored-by: pragnesh
commit 47c9434db5a41c41bcb63cee369c7eae10db84e0
Author: Jaydeep Mohite <30924180+pm-jaydeep-mohite@users.noreply.github.com>
Date: Tue Apr 2 22:50:24 2024 +0530
Floors: Update FloorsSchemaVersion data type from string to int (#3592)
commit 9070008fa4d16dc71f0a33087e84d2e74c82bd8f
Author: Rajesh Koilpillai
Date: Mon Apr 1 23:19:11 2024 +0530
Update README.md (#3603)
commit cfb9d2eaaf24bacfe369ceb3864a80ab75c2b2f4
Author: Nilesh Chate <97721111+pm-nilesh-chate@users.noreply.github.com>
Date: Mon Apr 1 23:05:30 2024 +0530
Fix: TestAmpBadRequests (#3546)
commit c72ffe4db7067fa8f6658493ccdbf53a1585101c
Author: Veronika Solovei
Date: Wed Mar 27 11:20:40 2024 -0700
Fix for NPE for nil request in analytics module (#3599)
commit 67c487d1bec5dbd737ab7b8cce7047e087436456
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Tue Mar 26 14:35:37 2024 -0400
Make Targeting in Response Optional (#3574)
commit 25a4466577deba21f1490d883c07679fe2716948
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Tue Mar 26 13:19:51 2024 -0400
Add Ext.Prebid.Analytics Support (#3563)
* Setup and TODOs
* updateReqWrapperForAnalytics setup
* Add updateReqWrapper code to build. Update comments
* Updates to handle copying
* Add tests for updateReqWrapper function
* Add full tests, remove unnecessary code
* Remove some comments
* Fix comment
* Clean up
* Address comments
* Clone prep
* fix test
* Update tests, add clone request for update func
* Improve tests, simplify update function
* Remove secondMockAnalytics
commit a6267d76911d8baeb9d9e9b3ab634496102ed8d6
Author: Aditya Mahendrakar
Date: Mon Mar 25 10:23:10 2024 -0700
Make admin listener configurable (#3520)
* Make admin listener configurable
Admin listener is made configurable by adding `admin_enabled`.
It is enabled by default.
Making it configurable allows a host company to not run the listener
on admin port if they desire to do so.
* move Enabled to a separate Admin struct
commit 94148bf12714a77c0f05b000bc98c1f7ea98f5cf
Author: Dmitry Savintsev
Date: Mon Mar 25 18:22:49 2024 +0100
Fix semgrep dgryski.semgrep-go issues (#3511)
* fix semgrep dgryski.semgrep-go issues
Fix most of the semgrep issues with the
http://semgrep.dev/r/dgryski.semgrep-go ruleset
(`semgrep --config http://semgrep.dev/r/dgryski.semgrep-go`).
Left the issue with Content-Type text/plain on json.Encode
in endpoints/openrtb2/amp_auction.go since changing to
application/json breaks the AMP unit tests, and issues
with the pointer receiver for MarshalJSON in usersync/cookie.go.
Fix #3509.
Signed-off-by: Dmitry S
* add comment about legacy text/plain content type
Signed-off-by: Dmitry S
* fix semgrep dgryski issue with w.Write, add nosemgrep
Signed-off-by: Dmitry S
* add nosemgrep ignore for marshal-json-pointer-receiver
---------
Signed-off-by: Dmitry S
commit 54874d0dc30a286333917b296fb612e7c4ba26d6
Author: Dmitry Savintsev
Date: Wed Mar 20 18:58:59 2024 +0100
add 'debug' and 'integration' to sample requests (#3575)
Description in
openrtb2/sample-requests/valid-whole/exemplary/all-ext.json
says: "This demonstrates all of the OpenRTB extensions supported by
Prebid Server."
However, ext.prebid.debug and ext.prebid.integration, documented in
https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#openrtb-extensions
are currently missing. Add them for completeness.
Signed-off-by: Dmitry S
commit 82ba5856f836c0910319eec94b4a6eadfc9409a2
Author: linux019
Date: Mon Mar 18 20:10:27 2024 +0200
Fix: Panic in bid adjustments (#3547)
* #3543 fix panic in bids adjustment
* add a test for empty ext.prebid and account with enabled bid adjustments
* add more tests for bid adjustments
* remove extra space
---------
Co-authored-by: oaleksieiev
commit 6cc298c7742154c59068eafb493838aff28bf6b1
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon Mar 18 14:06:31 2024 -0400
Bump google.golang.org/protobuf from 1.30.0 to 1.33.0 (#3573)
Bumps google.golang.org/protobuf from 1.30.0 to 1.33.0.
---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
commit 1484a46cfd8f0019f27402a21913a485b3bce7c0
Author: JonGoSonobi
Date: Mon Mar 18 08:45:22 2024 -0400
Sonobi: Added consent macros to the user sync url (#3572)
commit 82cb3e84959975eef78e42fb2258003298a97c36
Author: Ashish Garg
Date: Mon Mar 18 16:36:14 2024 +0530
Fix yandex properties file (#3568)
commit db3415592c3126f7c76fdaa2f631aa215b2c9071
Author: Adserver.Online <61009237+adserver-online@users.noreply.github.com>
Date: Mon Mar 18 07:43:29 2024 +0200
New Adapter: Aso (#3565)
Co-authored-by: dev
commit 4870355f3ecfe7b32b275d5bf9ab7edbb991c51f
Author: linux019
Date: Wed Mar 13 19:26:48 2024 +0200
Fix loading of default bid adjustments for "account_defaults" (#3555)
* Default account bid adjustments was not loaded
* add a test for account_defaults.bidadjustments
---------
Co-authored-by: oaleksieiev
commit e78ffb48a6b7afd7be56959a6a60fa20056783de
Author: Steffen Müller
Date: Tue Mar 12 18:16:09 2024 +0100
New Analytics Adapter: agma (#3400)
* Init agma
* Updated imports from v19 to v20
* Change default url
* Fixed typo in README
* Fixed buffers typo in readme
* Check for Market Research Puropse on Consent
* Fix Typo in sruct
* Removes errir check on buffer write
* Extract App and Sites lookup into an extra function
* Adds test for checking the StatusCode
commit c13178991cbdd2ee8c62531c17295cbd85f103c1
Author: xmgiddev <133856186+xmgiddev@users.noreply.github.com>
Date: Tue Mar 12 11:10:09 2024 +0200
MgidX Bid Adapter: add disabled param (#3562)
Co-authored-by: gaudeamus
Co-authored-by: Evgeny Nagorny
Co-authored-by: xmgiddev <>
commit 063101a09ba1ab43c2ba76cf60af7cec5c120b0e
Author: e-volution-tech <61746103+e-volution-tech@users.noreply.github.com>
Date: Tue Mar 12 11:10:03 2024 +0200
Evolution Bid Adapter: add iframe to userSync (#3561)
commit 40fd4fffba95c0b919155792a6aacea498a74ce9
Author: Scott Kay
Date: Mon Mar 11 13:32:11 2024 -0400
Extract FPD Merge To Separate Package (#3533)
commit 0362eb44e417f0cf1d9387a3795bba671a579068
Author: dengxinjing <43231655+dengxinjing@users.noreply.github.com>
Date: Thu Mar 7 17:22:42 2024 +0800
New Adapter: Roulax (#3447)
Co-authored-by: dengxinjing
commit e2a9806c37fdddd19b732d869ef1ab441e681a0f
Author: IQZoneAdx <88879712+IQZoneAdx@users.noreply.github.com>
Date: Thu Mar 7 10:25:17 2024 +0200
iqzone get media type from mtype bid property (#3557)
commit aff36081afe301ea1dd39e89a35053e02935c321
Author: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Date: Thu Mar 7 09:06:02 2024 +0100
RTB House: regional endpoints (#3551)
commit 7c4f5f11bf767f946f6c0dd99a108203c0da1bd7
Author: mustafa kemal
Date: Thu Mar 7 10:54:52 2024 +0300
New Adapter: Theadx (#3498)
Co-authored-by: mku
commit 4b1ca6b470863901bed03075ef9915acc24a018a
Author: Nilesh Chate <97721111+pm-nilesh-chate@users.noreply.github.com>
Date: Tue Mar 5 21:57:44 2024 +0530
Privacy Sandbox: support testing label header (#3381)
commit 05a1293ec8a7a3f44f5045b9f09809868f0a477e
Author: Scott Kay
Date: Tue Mar 5 02:26:43 2024 -0500
Generate Bid ID Test Hardening (#3491)
commit 0b5d04e78c38cdee1a7f9dfcb5958a6647cab338
Author: Dmitry Savintsev
Date: Mon Mar 4 22:14:42 2024 +0100
do normal 'go vet' as it works now (#3550)
commit 93137cdccb52a5e6cc58d2d773e921e09e1e9436
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Mar 4 15:59:23 2024 -0500
Convert GDPR bidder name types to string to accommodate analytics (#3554)
commit 82caa3781e21728450b605a8b73381f6daafeaf7
Author: Mikael Lundin
Date: Mon Mar 4 07:30:03 2024 +0100
Send site ext as key values to allow targeting and pick the first eid to solve eids for Schibsted. (#3530)
commit ecdff687b32728cbc801e0e6f5ae64dcb4d20018
Author: Aman Jain <34913883+amanpatniajmer@users.noreply.github.com>
Date: Mon Mar 4 11:55:45 2024 +0530
Medianet: Upgrades to OpenRTB 2.6 (#3548)
Co-authored-by: Aman Jain
Co-authored-by: rajatgoyal2510
commit 4fb7be0e12a85d7e8867086b696097aa5404b9b7
Author: SerhiiNahornyi
Date: Fri Mar 1 07:55:07 2024 +0200
Rubicon: Remove api validation (#3493)
commit 7db3d9f8be2316513c09492a40569cc3c5e89ca2
Author: dzhang-criteo <87757739+dzhang-criteo@users.noreply.github.com>
Date: Thu Feb 29 14:11:09 2024 +0100
TheMediaGrid: Add GPP macros (#3545)
authored by @dzhang-criteo
commit e8267b8cc8376b63ff9c8498b775a56c00b83de4
Author: guscarreon
Date: Wed Feb 28 14:48:36 2024 -0500
Use Json compacter in the bidders/params endpoint (#3395)
commit fd920153517a33a37271c623ce5ea5ecf8f234c4
Author: dzhang-criteo <87757739+dzhang-criteo@users.noreply.github.com>
Date: Wed Feb 28 14:49:22 2024 +0100
Criteo: add GPP macros (#3544)
commit 9f8a9c45b00701964826000331de0eb86394a469
Author: Dmitry Savintsev
Date: Tue Feb 27 23:24:19 2024 +0100
Reformat structures to use key names (#3524)
Signed-off-by: Dmitry S
commit 11decc200677979abc6f36763a38519dd8a626ae
Author: linux019
Date: Tue Feb 27 21:51:35 2024 +0200
Fix modules template and builder (#3534)
Co-authored-by: oaleksieiev
commit d13dfc58e8d0c5e4f9f5412ad433f54f3e558b22
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Feb 27 14:27:21 2024 -0500
DSA: Bid response adrender, behalf & paid validations (#3523)
commit 030da80c908945f4b23a17778c67c7a18a4ba0e6
Author: pm-avinash-kapre <112699665+AvinashKapre@users.noreply.github.com>
Date: Tue Feb 27 22:00:58 2024 +0530
Fix: Pubstack memory leak (#3541)
commit 17b7082a9d2d8fc2e0a6a15bc836e2e5227eeafe
Author: ahmadlob <109217988+ahmadlob@users.noreply.github.com>
Date: Mon Feb 26 20:46:39 2024 +0200
Taboola: Fix gpp query param (#3515)
commit 14fcbb780bc649da67d927a834b425872de35ffb
Author: Aditya Mahendrakar
Date: Thu Feb 22 17:30:21 2024 -0800
Update prebid.org url to https (#3529)
commit 1d96d891dfd7789dfd87ad37a7610f2adb31bb32
Author: Zdravko Kosanović <41286499+zkosanovic@users.noreply.github.com>
Date: Fri Feb 23 05:23:52 2024 +0400
MinuteMedia: Add GPP macros (#3497)
commit b945d09c608ea27cf7bd94e337a1dc775b1cde3a
Author: Hendrick Musche <107099114+sag-henmus@users.noreply.github.com>
Date: Fri Feb 23 02:00:35 2024 +0100
SeedingAlliance: Deprecate seatId in favor of accountId (#3486)
commit c9131abdbcb18aa620fd80b0978340cb1ddb897e
Author: Dmitry Savintsev
Date: Thu Feb 22 21:11:21 2024 +0100
Add formatcheck Make target (#3480)
Signed-off-by: Dmitry S
commit 24a23d3202f26cbf68875578ffa16123775db12b
Author: Zdravko Kosanović <41286499+zkosanovic@users.noreply.github.com>
Date: Thu Feb 22 09:59:47 2024 +0400
Rise: Add GPP macros (#3496)
commit 5ae5e05ee6f56eea9e603c1d8e1bc69c099351d0
Author: bretg
Date: Thu Feb 22 00:59:30 2024 -0500
adf regional endpoints (#3503)
commit 57783356f5f99d3e12478c350da396b56b636a47
Author: bretg
Date: Thu Feb 22 00:51:22 2024 -0500
Update BMTM maintainer address (#3483)
commit 33b466ec1dd9ed9a70220a13e81c42605c61d773
Author: Philip Watson
Date: Thu Feb 22 18:50:09 2024 +1300
Stroeercore: support DSA (#3495)
commit 5900d36c7769b7d341648306b76ea6bbd7fad5b3
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Feb 21 20:09:24 2024 -0500
DSA: Use seat nonbid code 300 (#3531)
commit 18e9b5071dbb011d84ade3662d834d8ddd6f8122
Author: ccorbo
Date: Wed Feb 21 01:32:26 2024 -0500
feat: add dsa test [PB-2423] (#3510)
Co-authored-by: Chris Corbo
commit 21bf61171c2fa6529ac2a326b5c0043fcdde313b
Author: Dmitry Savintsev
Date: Wed Feb 21 05:54:33 2024 +0100
Fix go vet 'composite literals with unkeyed fields' (#3522)
commit a06a2ebb13cae1e45dba87db057f0ebb73f1864a
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Feb 20 15:22:18 2024 -0500
DSA: Remove bids missing DSA object when required (#3487)
commit a4f5c119a87e706edd8d8ff3fce368d226973a24
Author: Dmitry Savintsev
Date: Tue Feb 20 18:45:21 2024 +0100
Fix go vet composite literals with unkeyed fields (#3507)
commit 8e5a7857e2397eb2e8a73820af605301adb7fac8
Author: bold-win <157734532+bold-win@users.noreply.github.com>
Date: Mon Feb 19 09:54:00 2024 +0100
New adapter: BoldwinX (#3430)
Co-authored-by: boldwin
commit cff2fe11da00d0367eca8f87fc6abb3cd31aea23
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Fri Feb 16 06:25:17 2024 -0800
Targeting: Add alwaysincludedeals flag (#3454)
commit 34cfa9487d7316ae1168df89f1246997d7174cca
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Thu Feb 15 13:16:41 2024 -0800
Remove extra buffer from GZIP compression (#3494)
commit c35f67b20818711bd6f6e3b67981a011370fbcb4
Author: Onkar Hanumante
Date: Thu Feb 15 21:22:31 2024 +0530
Fix: Release workflow permissions (#3506)
commit 902d26234aab2d450627dbbc43e01edaf030b46e
Author: Onkar Hanumante
Date: Thu Feb 15 12:02:54 2024 +0530
Add log lines in release workflow (#3504)
commit e37154baae4a2c3ffe53ad08a7644c908d4ce3ad
Author: Lion Pierau
Date: Wed Feb 14 21:53:39 2024 +0100
Yieldlab: Add Digital Service Act (DSA) handling (#3473)
commit 2b10083e80e5945df31a37ec06d58d8acf9a6f28
Author: Dmitry Savintsev
Date: Wed Feb 14 19:56:13 2024 +0100
Fix function godoc comment (#3502)
commit 9110a6a2286c3c5d16588c0017798094315b7998
Author: Onkar Hanumante
Date: Wed Feb 14 18:56:44 2024 +0530
Update trivy check workflow to use node 20 actions (#3472)
commit b3c75875ef3691be5588308048263e35d993a11a
Author: Jeremy Sadwith
Date: Wed Feb 14 05:51:16 2024 -0500
Kargo Bidder-Info: Adding GPP macros (#3490)
commit 97021b43588b70645c593d1db821569d1259730d
Author: Onkar Hanumante
Date: Wed Feb 14 11:28:03 2024 +0530
Update release workflow to use actions with node 20 support (#3478)
commit 8826556a98e8bcb762b9c1eeb8b30542b697e712
Author: Onkar Hanumante
Date: Wed Feb 14 10:19:09 2024 +0530
Update code semgrep workflow to use actions with node 20 support (#3471)
commit 27c99f963ff2696715ca96b3bcafb4e7847f928e
Author: rajatgoyal2510
Date: Tue Feb 13 21:08:52 2024 +0530
Medianet: enable gzip and update usersync url (#3489)
Co-authored-by: Aman Jain
commit 2da77b0ecb697c42b63be937826ce0647623e332
Author: Onkar Hanumante
Date: Tue Feb 13 21:03:11 2024 +0530
Update issue tracking workflow to use actions with node version 20 support (#3479)
commit 61a0fac155b936cefcfbc24b97b69461bfbb8dae
Author: Onkar Hanumante
Date: Tue Feb 13 20:55:56 2024 +0530
Update validate pull request workflows to use node 20 actions (#3474)
commit 2848f6b9c150a9884c1d78d993f9c57009e1d649
Author: Mohammad Nurul Islam Shihan <93646635+ishihanvcs@users.noreply.github.com>
Date: Tue Feb 13 16:23:51 2024 +0600
ImproveDigital: Bad-Input Error (#3469)
commit cb3fd3cf309bdd8282ae5f5d9b05516811f60ce5
Author: Onkar Hanumante
Date: Mon Feb 12 23:56:33 2024 +0530
Update code coverage workflow to use node 20 actions (#3470)
commit 969313298bb4e644f672c5f9007ccb6245520e5a
Author: ym-prasanth <80693980+ym-prasanth@users.noreply.github.com>
Date: Thu Feb 8 01:50:38 2024 -0500
Add gpp support for user sync (#3442)
authored by: @ym-prasanth
commit 535d1f7b543312230229385678555703d2658851
Author: Adprime <64427228+Adprime@users.noreply.github.com>
Date: Wed Feb 7 07:48:58 2024 +0200
Adprime: Add mtype (#3439)
Co-authored-by: Aiholkin
commit 86bddad11be00c8537d71b0a6e975cacd0b081d8
Author: AdView
Date: Tue Feb 6 13:42:30 2024 +0800
AdView: support multi imps request & formattype tag for bid response (#3355)
authored by: @AdviewOpen
commit 3e5918d626b40c90da1937ceeeb235a3e99ddd8e
Author: Wls-demo <67785512+Wls-demo@users.noreply.github.com>
Date: Mon Feb 5 08:40:55 2024 +0200
Boldwin: get bid type from bid.mtype (#3433)
commit 48e5e4d2199c133f6925d6be87f0a5c922b69301
Author: ashishshinde-pubm <109787960+ashishshinde-pubm@users.noreply.github.com>
Date: Thu Feb 1 23:36:46 2024 +0530
Capture SeatNonBids for rejected creatives due to insecurity and invalid size (#3376)
commit 929ba616c7ee35b834df42c66cde1a893f5ced34
Author: Scott Kay
Date: Tue Jan 30 14:55:38 2024 -0500
Update Go-GPP Library (#3425)
commit 34046526e75dc9f397e49e572ef5ab39519f098f
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Jan 30 09:20:07 2024 -0500
Fix: Update Adelement OpenRTB lib to v20 (#3436)
commit ab87692921c3d60220364f083c87d99540701ac7
Author: allar15 <60257866+allar15@users.noreply.github.com>
Date: Tue Jan 30 15:46:25 2024 +0300
Nextmillennium: add video support & fix server object (#3417)
commit 723d2d07b29eb46d577220566bb97a1da0c33808
Author: radadiapg <77797977+radadiapg@users.noreply.github.com>
Date: Tue Jan 30 18:01:54 2024 +0530
New adapter: Adelement (#3420)
commit dcc2c37b04b2bfe4339cf8ecbaf87e1beb522e6b
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Mon Jan 29 13:37:49 2024 -0800
Add $0 Bid Price Warning only if in Debug Mode (#3397)
commit 728bc13f8a508d744338c653f3fab6fa2db0133b
Author: Scott Kay
Date: Mon Jan 29 15:10:20 2024 -0500
Fix OpenRTB 202309 Merge Conflict (#3434)
commit dd07431ef54c38a2617c04e76b3e7bda9c21f569
Author: Scott Kay
Date: Mon Jan 29 14:21:20 2024 -0500
Update to OpenRTB 2.6-202309 (#3387)
commit 70875811a9203426f3f2ab900277a00c44f8fad4
Author: Jaydeep Mohite <30924180+pm-jaydeep-mohite@users.noreply.github.com>
Date: Mon Jan 29 23:47:05 2024 +0530
Floors: Add FetchRate to select source of floors from request or dynamically fetched (#3380)
commit 0c2865730d948b3d14f2527f0c32820c5935aafa
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Thu Jan 25 12:55:36 2024 -0800
Optimize GZIP Compression (#3411)
commit 73b895ecb76eca052a71cbcb341d4bef5b4d80c0
Author: Onkar Hanumante
Date: Fri Jan 26 00:06:47 2024 +0530
Skip coverage tests if more than two adapters were modified (#3423)
Co-authored-by: onkar hanumante
commit 8bd778cd00dd7051342b4056971fb250b2fdfc18
Author: Veronika Solovei
Date: Thu Jan 25 07:53:13 2024 -0800
Use TransmitUserFPD and TransmitPreciseGeo activities in analytics (#3331)
commit 106f22d6152f4bebaebdc6aeeed8572bf1a91f97
Author: Viktor Chernodub <37013688+chernodub@users.noreply.github.com>
Date: Thu Jan 25 16:56:34 2024 +0300
Yandex: add adapter (#3419)
commit 1ac3fbe456d097f260323cb1036da2fc74797a82
Author: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Date: Thu Jan 25 07:23:14 2024 +0100
RTBHouse: app support (#3422)
commit 498955bcd5c242866a9b05886ac4e703cc850b2f
Author: Veronika Solovei
Date: Tue Jan 23 13:30:58 2024 -0800
Fix race condition in modularity test (#3421)
commit ed5e887bec59ffe90c31bd81bc9cd2a019a38572
Author: linux019
Date: Tue Jan 23 21:00:57 2024 +0200
Remove MarshalJSON on BidderName (#3394)
Co-authored-by: oaleksieiev
commit 446667bf519fa017846180afafc25003203002b5
Author: kalidas-alkimi <92875788+kalidas-alkimi@users.noreply.github.com>
Date: Tue Jan 23 18:48:05 2024 +0000
Alkimi: Update user sync URL from dev to prod (#3414)
commit eb060ace20e198b0524aed9227f8c085dfffde4a
Author: aishwaryapatil
Date: Tue Jan 23 13:35:52 2024 -0500
yahooAds: Update maintainer email address (#3410)
Co-authored-by: “apatil05” <“aishwarya.patil@yahooinc.com”>
commit 896c16544c31734e839eb8103a0055b56024bf68
Author: Scott Kay
Date: Tue Jan 23 13:26:04 2024 -0500
Update ReadMe with docker build platform option (#3412)
commit bff383b14357317f244c4d5dcf2cb7cbb7f66477
Author: Jeremy Sadwith
Date: Tue Jan 23 01:47:33 2024 -0500
Kargo: Update bidder-info (#3404)
commit ae291f907a9cf0742934b11472731d3e7e9fd58f
Author: Andrea Tumbarello
Date: Tue Jan 23 07:44:49 2024 +0100
AIDEM: Added use to macros library (#3403)
Co-authored-by: Giovanni Sollazzo
Co-authored-by: AndreaC <67786179+darkstarac@users.noreply.github.com>
Co-authored-by: darkstar
Co-authored-by: AndreaT
commit 2ae62cf29c122bcc152b5bdab07817041a4b7e23
Author: Pubmatic-Supriya-Patil <131644110+Pubmatic-Supriya-Patil@users.noreply.github.com>
Date: Tue Jan 23 03:35:10 2024 +0530
Fix: Enable deals for soft aliases (#3391)
commit daebdcc43389a8b357551b20427e4d50fbe00a00
Author: Zdravko Kosanović <41286499+zkosanovic@users.noreply.github.com>
Date: Mon Jan 22 14:45:17 2024 +0400
New adapter: MinuteMedia (#3399)
commit 18aa5382a162a4d39eeed3d27deb999283ca9cad
Author: Denis Logachov
Date: Mon Jan 22 08:26:45 2024 +0200
Adkernel: Add multiformat imp splitting (#3390)
authored by @ckbo3hrk
commit b806a53b4b8045b106004ac7d86700368c619582
Author: 李向军 <401154047@qq.com>
Date: Mon Jan 22 13:11:27 2024 +0800
New Adapter: zMaticoo (#3349)
Co-authored-by: adam
commit c09ad1acddd9c0cbbf367bcbd32644015b805ab5
Author: Denis Logachov
Date: Thu Jan 18 07:27:48 2024 +0200
Unsecure endpoint (#3398)
commit 7b36ec668a03302b8ff17a6f2ded7ab9f5e34b45
Author: kalidas-alkimi <92875788+kalidas-alkimi@users.noreply.github.com>
Date: Thu Jan 18 05:27:11 2024 +0000
Alkimi: Added User sync URL (#3407)
commit 6195581a83392ceb4787ad9e05e96d6430477429
Author: BizzClick <73241175+BizzClick@users.noreply.github.com>
Date: Thu Jan 18 07:26:37 2024 +0200
Bizzclick: adapter update, add new host param (#3347)
commit fda9f06100a6674c390f22f8a59d9558c135c1f1
Author: Scott Kay
Date: Wed Jan 17 18:41:14 2024 -0500
Readme Update (#3246)
commit 27b2ff663be24a71c7e9e6f79045272a2e78f1f0
Author: Veronika Solovei
Date: Tue Jan 16 11:50:12 2024 -0800
Added TransmitPreciseGeo activity handling in modules (#3348)
commit 3789cf91b8e9906d8716000b68817d51971d1559
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Thu Jan 11 22:06:27 2024 -0800
Allow Bidder to Override Callback Type in /setuid (#3301)
commit 03314e14fc36db4544276ceb2048bc44ba55d5aa
Author: bretg
Date: Thu Jan 11 02:06:01 2024 -0500
Update contact info for iqzone (#3360)
authored by @bretg
commit 967b88241f930eb6f1fdf3d64ce35c200c30feed
Author: bretg
Date: Thu Jan 11 02:05:25 2024 -0500
Update contact info for iqx (#3365)
authored by: @minaguib
commit f347436dc33023e08914a51dc28331f75025c908
Author: Maxime Liege <56251840+github-maxime-liege@users.noreply.github.com>
Date: Thu Jan 11 08:04:45 2024 +0100
Change email support for Teads adapter (#3386)
authored by: @github-maxime-liege
commit c49e8eac6289f27db32bb23a7f9803bd46904009
Author: bretg
Date: Mon Jan 8 16:37:24 2024 -0500
Bidder geo scope in-line documentation (#3311)
commit 0f89ed6dd370f42e7a72aa584f4b48a26789c877
Author: svamiftah <125688973+svamiftah@users.noreply.github.com>
Date: Thu Jan 4 11:15:48 2024 +0000
New Adapter: SovrnXSP (#3312)
commit 98b0f349dba1d77b8b8d38e1366deca4a106d942
Author: Eugene <73837230+orlov-e@users.noreply.github.com>
Date: Thu Jan 4 13:11:23 2024 +0200
smartyads: added vendor id to spec (#3383)
commit bd483bb8f838593566463bb1a418cbe75df23d05
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed Jan 3 13:41:32 2024 -0500
Bump golang.org/x/crypto from 0.14.0 to 0.17.0 (#3361)
commit 2e7f73a566622ad1cea970100e348029d838866d
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Jan 3 13:29:38 2024 -0500
Fix: increase tmax in flakey modularity test (#3370)
commit 71f20302f7436cd2c707b58f0cc237c2f8d56677
Author: Bryan DeLong
Date: Wed Dec 27 06:29:21 2023 -0500
Consumable: App video and audio support (#3338)
commit c773b0f1a0c282d12ba46a0b6be2a98be107cd3e
Author: JacobKlein26 <42449375+JacobKlein26@users.noreply.github.com>
Date: Thu Dec 21 08:58:24 2023 -0500
Nextmillennium: add extra_info support (#3351)
commit 0c444d0408cddc6e6a11156f9e60ca9cfdb5ad23
Author: bretg
Date: Wed Dec 20 07:40:48 2023 -0500
Rise allows vast modification (#3369)
commit 37f0f46de34c9b52b1a8e61cd8ecb0569bb09d2f
Author: kmdevops <126434358+kmdevops@users.noreply.github.com>
Date: Tue Dec 19 19:25:28 2023 +0100
DXKulture: Change domain (#3345)
commit b0daa14b98bbb6bb602c4343ad1fa6f01ec581d8
Author: JuanM <96113351+juanmartinengo@users.noreply.github.com>
Date: Mon Dec 18 07:56:00 2023 +0100
Stroeercore: Support video (#3314)
Co-authored-by: juanm
Co-authored-by: docech
commit 91a495f961ebc5066ae175539a4f99a8ead9a309
Author: bretg
Date: Mon Dec 18 01:55:18 2023 -0500
Rubicon adapter: enable endpoint compression (#3346)
commit 869a3e599253ef181f8eca99c6cc7eef51b91436
Author: Anton Babak <76536883+AntoxaAntoxic@users.noreply.github.com>
Date: Mon Dec 18 07:54:48 2023 +0100
Add Magnite Alias for Rubicon Bidder (#3354)
commit ec873dcc87a93c380733c5cd96a75d1b12f920d8
Author: Veronika Solovei
Date: Mon Dec 11 13:38:33 2023 -0800
Modules activities (#3057)
commit 96445436a008457bed0e919557201304726b57df
Author: Hendrick Musche <107099114+sag-henmus@users.noreply.github.com>
Date: Thu Dec 7 13:12:37 2023 +0100
seedingAlliance: make suntContent alias, add finative alias and add seatId bidder param in seedingAlliance (#3309)
co-authored by @sag-henmus
commit 8128b24579aa5cebf1f4e99f1054c04201e28b69
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Tue Dec 5 13:29:58 2023 -0500
Add Flag for Host to Enabled/Disable Bidder from Usersync (#3285)
commit 3f42b892c0b81eca1501b7712729b0de2ed4150c
Author: Vungle-GordonTian <115982294+Vungle-GordonTian@users.noreply.github.com>
Date: Tue Dec 5 22:53:22 2023 +0800
Liftoff: Add site support and fill seat (#3327)
co-authored by @Vungle-GordonTian
commit 005a2d176c0e133a52384c21ca6c026d8bc03644
Author: Hugo Lindström
Date: Tue Dec 5 15:50:43 2023 +0100
New Adapter: Relevant Digital (#3216)
co-authored by: @hugolm84
commit db74611cb6148b63ba106bbe519b90392e756afd
Author: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Date: Tue Dec 5 07:28:55 2023 +0100
RTBHouse: native support (renewal) (#3328)
commit c7f3e2298d9236fbff6ad79cf888ffe78c1ade6a
Author: Alexander Pykhteyev
Date: Tue Dec 5 13:18:20 2023 +0700
Add Embi media adapter (#3325)
Co-authored-by: apykhteyev
commit 1fe320f0d29dd01fb46a71f5abaecd754f204b24
Author: Ahmet Faruk Karakus <65093478+ahmetfaruk59@users.noreply.github.com>
Date: Tue Dec 5 09:17:37 2023 +0300
HuaweiAds: add popular sizes for video native (#3324)
commit 4de96b2061774465107a6785f7f4e05a4ce06c1a
Author: ashishshinde-pubm <109787960+ashishshinde-pubm@users.noreply.github.com>
Date: Tue Dec 5 00:10:46 2023 +0530
Fix: single bid processing from alternatebiddercode (#3313)
commit e2da4460646849c02a89c76325b96ec284969bf5
Author: ashishshinde-pubm <109787960+ashishshinde-pubm@users.noreply.github.com>
Date: Fri Dec 1 23:27:38 2023 +0530
Fix: setuid endpoint sets cookie when both GDPR and GPP are set (#3165)
commit a6dea2f26d0dcf9e20c30de8297dad8931a319ee
Author: ym-prasanth <80693980+ym-prasanth@users.noreply.github.com>
Date: Thu Nov 30 05:47:42 2023 -0500
Yieldmo: Get bid type from bid.ext.mediatype in bid response (#3295)
commit b7d474ff6b0b34c4c18cfa43c5a104d4a134ee16
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Tue Nov 28 11:42:12 2023 -0500
Fix: Adhese handle 200 response with empty array body (#3323)
commit d82c99733d7f0a41e5f15af95c8a5e45ab60177c
Author: Wls-demo <67785512+Wls-demo@users.noreply.github.com>
Date: Tue Nov 28 11:20:51 2023 +0200
Boldwin: add user sync url (#3316)
commit df072ff78891c49a2e011dcb7dcb2f5f0d9c6d7f
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Mon Nov 27 17:19:58 2023 -0500
Allow bidders to skip sync for GDPR/GPP (#3265)
commit 020a7ddd8a7597582b4fd87fd56afa27a5013df6
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Nov 27 16:48:38 2023 -0500
Fix: refactor flakey category dedupe test (#3310)
commit 9cf8accf4350f9149a88789efcb9df406fb55e3c
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Nov 27 16:42:58 2023 -0500
Fix: flakey deal tier test (#3322)
commit fb5e8492da15733e9035adfc54029bcb9494944e
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Mon Nov 27 18:19:49 2023 +0530
Migrate freewheelsspold alias of frewheelssp to use new pattern (#3204)
commit 7558fde3a48ea520308edcd68c77f62a1af20416
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Mon Nov 27 18:18:36 2023 +0530
Migrate trustx alias of grid to use new pattern (#3206)
commit eb79f41e6574e6f922876ae04f657dc60e2ff3f9
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Mon Nov 27 12:26:32 2023 +0530
Migrate yahoossp alias of yahooAds to use new pattern (#3208)
* Migrate yahoossp alias of yahooAds to use new pattern
Co-authored-by: Scott Kay
commit 4cc2faacfcef931da1d3ad8233a23d2e4b255ffc
Author: ccorbo
Date: Thu Nov 23 02:10:18 2023 -0500
IX: add privacy sandbox support (#3252)
Co-authored-by: Chris Corbo
commit 6f5b03e03fc9e62cd86f093b6650e823853a3217
Author: Ahmet Faruk Karakus <65093478+ahmetfaruk59@users.noreply.github.com>
Date: Thu Nov 23 09:56:37 2023 +0300
Huaweiads: Remove empty image assets from response (#3308)
commit 54039e9288d7697a10b2ecaccff88419c42881c3
Author: Gena
Date: Thu Nov 23 08:19:30 2023 +0200
Add indicue adapter (#3291)
commit 8419142b7f7cd7157878f4c1397a67ede789e923
Author: Louis Billaut
Date: Thu Nov 23 07:05:12 2023 +0100
bliink: iframe added to usersync (#3243)
Co-authored-by: louisbillaut
Co-authored-by: samous
Co-authored-by: nowfeel
commit 686921136188dfda55b357455cc2b04822ae0fe9
Author: guscarreon
Date: Mon Nov 20 13:13:43 2023 -0500
Adapter Name Case Insensitive: dealTier (#3218)
commit e5c920a3d8d4fe80c698a02f6cda245065d01b20
Author: Nilesh Chate <97721111+pm-nilesh-chate@users.noreply.github.com>
Date: Mon Nov 20 22:50:40 2023 +0530
Pass currency converter to modules (#3278)
commit 06e1145971c81c66c884a77b1fe2cf0752d1d2f0
Author: kalidas-alkimi <92875788+kalidas-alkimi@users.noreply.github.com>
Date: Mon Nov 20 12:38:58 2023 +0000
New Adapter: Alkimi (#3247)
co-authored by @kalidas-alkimi @pro-nsk
commit 1e89053b4780a81fe99242daf153875d4e509fbb
Author: Maxime Liege <56251840+github-maxime-liege@users.noreply.github.com>
Date: Mon Nov 20 10:02:09 2023 +0100
Change endpoint for Teads adapter (#3303)
commit ea01ccff4100235f8af425011785ad7adfdb4a9d
Author: Vungle-GordonTian <115982294+Vungle-GordonTian@users.noreply.github.com>
Date: Mon Nov 20 17:01:24 2023 +0800
update contact email address (#3298)
commit 94d86825acf52c25ea9ca648d9a4fc5b09e72c03
Author: Witek Galecki <49022890+wgalecki@users.noreply.github.com>
Date: Mon Nov 20 09:07:54 2023 +0100
adquery: added device ip and ua to bidder request (#1) (#3288)
commit 01f3320e4ea1a6c794418817ae80ad9d107835a6
Author: Simple Magic Software
Date: Mon Nov 20 02:30:36 2023 -0500
New Adapter: oms (#3264)
Co-authored-by: yfcr
commit cad9097fd5731c5042a13747eb5220152e6a7a5d
Author: Hasan Kanjee <55110940+hasan-kanjee@users.noreply.github.com>
Date: Mon Nov 20 01:27:55 2023 -0500
Flipp: abide by privacy concerns when using flippExt userKey (#3250)
commit 515b9372f850f856c8c2f8875c624aa9b9816512
Author: Ahmet Faruk Karakus <65093478+ahmetfaruk59@users.noreply.github.com>
Date: Mon Nov 20 09:06:20 2023 +0300
HuaweiAds: Increase fill rate for native ads (#3279)
co-authored by @ahmetfaruk59
commit f5f1e072180de52d1f17d9f51cc5e7c38785ca99
Author: BrightMountainMedia <69471268+BrightMountainMediaInc@users.noreply.github.com>
Date: Sat Nov 18 03:45:53 2023 +0530
BMTM: app support (#3280)
commit 7e06aae947489da90eb3020e4cd36a62bb9485ca
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Sat Nov 18 03:37:05 2023 +0530
Migrate epsilon alias of conversant to use new pattern (#3207)
commit 21ee27b948dc501184ea666847de14cbeb1e9de3
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Sat Nov 18 02:49:54 2023 +0530
Migrate synacormedia alias of imds to use new pattern (#3205)
commit 738884f7cc4182f712d679df800f13e847f1ccac
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Sat Nov 18 02:36:36 2023 +0530
Migrate yahooAdvertising alias of yahooAds to use new pattern (#3203)
commit 9693797b3d0eb81c71e86c967b5604d202b9a269
Author: gg-natalia <148577437+gg-natalia@users.noreply.github.com>
Date: Thu Nov 16 15:59:47 2023 -0300
GumGum: Add product parameter (#3253)
commit 832fbf2d7c3f207d0e86807536045369b79b30d1
Author: Nilesh Chate <97721111+pm-nilesh-chate@users.noreply.github.com>
Date: Fri Nov 17 00:23:11 2023 +0530
PubMatic: Support hardcoded alias (#3224)
commit 79d2f27870c928c410c8159947a596a6bd2550e6
Author: abermanov-zeta <95416296+abermanov-zeta@users.noreply.github.com>
Date: Thu Nov 16 19:24:06 2023 +0100
Zeta Global SSP: Update endpoints (#3201)
commit 6a20c0e1945df1a46690a26aaf79183b321318fb
Author: Veronika Solovei
Date: Thu Nov 16 10:16:36 2023 -0800
Privacy scrubber refactoring (#3108)
commit 905436f335c9cbb20a3a827adb64a87aa6a25627
Author: AlexBVolcy <74930484+AlexBVolcy@users.noreply.github.com>
Date: Thu Nov 16 09:59:53 2023 -0800
Add debug flag to cookie sync endpoint (#3107)
commit b904b530658aefa13739d6afd5acb38c04c09ed4
Author: ccorbo
Date: Thu Nov 16 12:47:54 2023 -0500
fix: pass through bid.prebid.meta, currently it is being dropped (#3100)
Co-authored-by: Chris Corbo
commit f9f5546542aa76672156d9220100e18dfc6996e0
Author: Veronika Solovei
Date: Thu Nov 16 09:20:00 2023 -0800
Modularity: Make request wrapper accessible in bidder request hook (#3096)
commit fb94284028447674c65eef901cb7d42665d4e521
Author: Nikhil Vaidya <102963966+pm-nikhil-vaidya@users.noreply.github.com>
Date: Thu Nov 16 22:27:01 2023 +0530
Floors: Dynamic fetch (#2732)
commit ee0869d21d31a7a2891e31e3c2b8bf75e08e600e
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu Nov 16 11:34:24 2023 -0500
Bump google.golang.org/grpc from 1.53.0 to 1.56.3 (#3258)
commit ea04a390902c9a793f3667827b0e1912d25af13e
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu Nov 16 10:02:41 2023 -0500
Bump golang.org/x/net from 0.7.0 to 0.17.0 (#3202)
commit 180eb410cb9f6e1751621797171cec7fa2096122
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Wed Nov 15 13:47:22 2023 -0500
Fix: Revert JSON lib used to prepare /bidders/params response (#3300)
commit f52dbb192288d677044733f1f12b0e9c12e9ed50
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Nov 13 23:51:25 2023 -0500
Fix: use bidder info fs config as base when merging overrides (#3289)
commit 909926477ee48c0f2dffbbe2663649e4c586c75c
Author: Veronika Solovei
Date: Mon Nov 13 10:24:34 2023 -0800
Fix for null string unmarshal error (#3284)
commit 5941d46efe3a59015750e56d293838b44c309701
Author: ashishshinde-pubm <109787960+ashishshinde-pubm@users.noreply.github.com>
Date: Mon Nov 13 23:36:39 2023 +0530
Fix: BidderInfo OpenRTB field data lost on start up (#3178)
commit b200357f116b7c5ece866bf21f5c62e002787b0a
Author: guscarreon
Date: Tue Oct 31 11:57:02 2023 -0400
Increment to V2 in Dockerfile and Makefile (#3272)
commit 72463be04b6e9a5b969839024f43899fd8be533f
Author: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Date: Mon Oct 30 15:21:56 2023 -0400
Revert "RTBHouse: native support (#3212)" (#3271)
This reverts commit 2540dd884950f6c582d01263479f3e7973cda2eb.
commit 3834c22f6c39035d529aede3a059fcff78489c38
Author: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com>
Date: Mon Oct 30 23:58:14 2023 +0530
Revert "Rubicon: Add `imp[].ext.rp.rtb.formats` logic (#3255)" (#3268)
This reverts commit 8e9f3f359416289a8b988f5d2403daf68edc4593.
commit 8e9f3f359416289a8b988f5d2403daf68edc4593
Author: SerhiiNahornyi
Date: Mon Oct 30 14:19:46 2023 +0200
Rubicon: Add `imp[].ext.rp.rtb.formats` logic (#3255)
commit 2540dd884950f6c582d01263479f3e7973cda2eb
Author: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Date: Mon Oct 30 09:00:24 2023 +0100
RTBHouse: native support (#3212)
commit ec729e6e5d50a1306d76332fda52108b9d313c1d
Author: Scott Kay
Date: Fri Oct 20 16:22:32 2023 -0400
Increment Package Version To V2 (#3245)
commit 6b98a812c2d8adf69e9ff45eaeb108f8097231f3
Author: guscarreon
Date: Fri Oct 20 14:26:41 2023 -0400
Adapter Name Case Insensitive: alternate bidder codes (#3229)
commit 53e0adcaf0af3203fd4e235d1f4fe4a4cce80a79
Author: Veronika Solovei
Date: Fri Oct 20 08:24:10 2023 -0700
Adapter Name Case Insensitive: Stored Bid Responses (#3197)
---
.devcontainer/devcontainer.json | 2 +-
.github/workflows/adapter-code-coverage.yml | 36 +-
.../workflows/helpers/pull-request-utils.js | 27 +-
.github/workflows/issue_prioritization.yml | 2 +-
.github/workflows/release.yml | 25 +-
.github/workflows/security.yml | 4 +-
.github/workflows/semgrep.yml | 23 +-
.github/workflows/validate-merge.yml | 6 +-
.github/workflows/validate.yml | 6 +-
.gitignore | 12 +-
Dockerfile | 18 +-
Makefile | 8 +-
README.md | 124 +-
account/account.go | 25 +-
account/account_test.go | 54 +-
adapters/33across/33across.go | 30 +-
adapters/33across/33across_test.go | 6 +-
.../exemplary/bidresponse-defaults.json | 3 +-
.../exemplary/instream-video-defaults.json | 3 +-
.../33acrosstest/exemplary/multi-format.json | 3 +-
.../exemplary/multi-imp-banner.json | 9 +-
.../exemplary/optional-params.json | 3 +-
.../exemplary/outstream-video-defaults.json | 3 +-
.../33acrosstest/exemplary/site-banner.json | 3 +-
.../33acrosstest/exemplary/site-video.json | 3 +-
.../multi-imp-mixed-validation.json | 3 +-
.../supplemental/status-not-ok.json | 3 +-
.../video-validation-fail-size-null.json | 29 +
.../video-validation-fail-size-partial.json | 30 +
.../video-validation-fail-size-zero.json | 31 +
adapters/33across/params_test.go | 2 +-
adapters/aax/aax.go | 16 +-
adapters/aax/aax_test.go | 6 +-
.../aax/aaxtest/exemplary/multi-format.json | 3 +-
.../aax/aaxtest/exemplary/multi-imps.json | 3 +-
adapters/aax/aaxtest/exemplary/no-bid.json | 3 +-
.../aaxtest/exemplary/optional-params.json | 3 +-
.../aax/aaxtest/exemplary/simple-banner.json | 3 +-
.../aax/aaxtest/exemplary/simple-video.json | 3 +-
...valid-req-400-status-code-bad-request.json | 3 +-
.../invalid-resp-diff-imp-id.json | 3 +-
.../invalid-resp-multi-imp-type.json | 3 +-
.../valid-req-200-bid-response-from-aax.json | 3 +-
.../valid-req-204-response-from-aax.json | 3 +-
adapters/aax/params_test.go | 2 +-
adapters/aceex/aceex.go | 20 +-
adapters/aceex/aceex_test.go | 6 +-
.../aceex/aceextest/exemplary/banner-app.json | 3 +-
.../aceex/aceextest/exemplary/banner-web.json | 3 +-
.../aceex/aceextest/exemplary/native-app.json | 3 +-
.../aceex/aceextest/exemplary/native-web.json | 3 +-
.../aceex/aceextest/exemplary/video-app.json | 3 +-
.../aceex/aceextest/exemplary/video-web.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/aceex/params_test.go | 2 +-
adapters/acuityads/acuityads.go | 20 +-
adapters/acuityads/acuityads_test.go | 6 +-
.../acuityadstest/exemplary/banner-app.json | 3 +-
.../acuityadstest/exemplary/banner-web.json | 3 +-
.../acuityadstest/exemplary/native-app.json | 3 +-
.../acuityadstest/exemplary/native-web.json | 3 +-
.../acuityadstest/exemplary/video-app.json | 3 +-
.../acuityadstest/exemplary/video-web.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/acuityads/params_test.go | 2 +-
adapters/adapterstest/adapter_test_util.go | 2 +-
adapters/adapterstest/test_json.go | 44 +-
adapters/adelement/adelement.go | 141 +
adapters/adelement/adelement_test.go | 28 +
.../adelementtest/exemplary/audio-app.json | 91 +
.../adelementtest/exemplary/audio-web.json | 91 +
.../adelementtest/exemplary/banner-app.json | 140 +
.../adelementtest/exemplary/banner-web.json | 128 +
.../adelementtest}/exemplary/native-app.json | 42 +-
.../adelementtest}/exemplary/native-web.json | 42 +-
.../adelementtest/exemplary/video-app.json | 150 +
.../adelementtest/exemplary/video-web.json | 148 +
.../supplemental/empty-seatbid-array.json | 120 +
.../invalid-aceex-ext-object.json} | 0
.../supplemental/invalid-response.json | 25 +-
.../supplemental/status-code-bad-request.json | 10 +-
.../supplemental/status-code-no-content.json | 8 +-
.../supplemental/status-code-other-error.json | 10 +-
.../status-code-service-unavailable.json | 10 +-
adapters/adf/adf.go | 22 +-
adapters/adf/adf_test.go | 6 +-
.../adf/adftest/exemplary/dynamic-tag.json | 3 +-
.../adf/adftest/exemplary/multi-format.json | 3 +-
.../adf/adftest/exemplary/multi-native.json | 3 +-
...gle-banner-pricetype-gross-extend-ext.json | 3 +-
.../single-banner-pricetype-gross.json | 3 +-
.../single-banner-pricetype-net.json | 3 +-
.../adf/adftest/exemplary/single-banner.json | 3 +-
.../adf/adftest/exemplary/single-native.json | 3 +-
.../adf/adftest/exemplary/single-video.json | 3 +-
...nners-different-pricetypes-extend-ext.json | 3 +-
.../two-banners-different-pricetypes.json | 3 +-
.../adf/adftest/supplemental/bad-request.json | 3 +-
.../adftest/supplemental/empty-response.json | 3 +-
.../supplemental/invalid-imp-mediatype.json | 3 +-
.../adftest/supplemental/nobid-response.json | 3 +-
.../adftest/supplemental/server-error.json | 3 +-
.../supplemental/unparsable-response.json | 5 +-
adapters/adf/params_test.go | 2 +-
adapters/adgeneration/adgeneration.go | 19 +-
adapters/adgeneration/adgeneration_test.go | 11 +-
.../exemplary/single-banner-android.json | 3 +-
.../exemplary/single-banner-ios.json | 3 +-
.../exemplary/single-banner.json | 3 +-
.../supplemental/204-bid-response.json | 3 +-
.../supplemental/400-bid-response.json | 3 +-
.../supplemental/no-bid-response.json | 3 +-
adapters/adgeneration/params_test.go | 2 +-
adapters/adhese/adhese.go | 31 +-
adapters/adhese/adhese_test.go | 6 +-
.../adhesetest/exemplary/banner-internal.json | 3 +-
.../adhesetest/exemplary/banner-market.json | 3 +-
.../exemplary/banner-video-internal.json | 3 +-
.../adhese/adhesetest/exemplary/video.json | 4 +-
.../req-invalid-empty-imp-ext.json | 4 +-
.../supplemental/req-invalid-no-imp-ext.json | 4 +-
.../supplemental/res-invalid-height.json | 5 +-
.../supplemental/res-invalid-no-body.json | 7 +-
.../supplemental/res-invalid-no-origin.json | 3 +-
.../supplemental/res-invalid-price.json | 5 +-
.../res-invalid-status-not-ok.json | 3 +-
.../supplemental/res-invalid-width.json | 5 +-
.../supplemental/res-no_bids_200.json | 55 +
...{res-no_bids.json => res-no_bids_204.json} | 3 +-
.../res-no_impression_counter.json | 3 +-
adapters/adhese/params_test.go | 2 +-
adapters/adhese/utils.go | 2 +-
adapters/adkernel/adkernel.go | 147 +-
adapters/adkernel/adkernel_test.go | 8 +-
.../exemplary/multiformat-impression.json | 90 +-
.../exemplary/single-banner-impression.json | 9 +-
.../exemplary/single-video-impression.json | 9 +-
adapters/adkernelAdn/adkernelAdn.go | 24 +-
adapters/adkernelAdn/adkernelAdn_test.go | 6 +-
.../exemplary/multiformat-impression.json | 3 +-
.../exemplary/single-banner-impression.json | 3 +-
.../exemplary/single-video-impression.json | 3 +-
.../supplemental/204status.json | 3 +-
.../supplemental/http-err-status.json | 3 +-
.../two-impressions-two-seatbids.json | 3 +-
.../supplemental/wrong-imp-ext-1.json | 4 +-
adapters/adman/adman.go | 18 +-
adapters/adman/adman_test.go | 6 +-
.../admantest/exemplary/simple-banner.json | 3 +-
.../admantest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../admantest/supplemental/bad-imp-ext.json | 4 +-
.../admantest/supplemental/bad_response.json | 5 +-
.../admantest/supplemental/no-imp-ext-1.json | 2 +-
.../admantest/supplemental/no-imp-ext-2.json | 4 +-
.../admantest/supplemental/status-204.json | 3 +-
.../admantest/supplemental/status-404.json | 3 +-
adapters/adman/params_test.go | 2 +-
adapters/admatic/admatic.go | 139 +
adapters/admatic/admatic_test.go | 29 +
.../admatic/admatictest/exemplary/banner.json | 96 +
.../admatictest/exemplary/multiple-imps.json | 181 +
.../admatic/admatictest/exemplary/native.json | 86 +
.../exemplary/optional-params.json | 100 +
.../admatic/admatictest/exemplary/video.json | 94 +
.../admatictest/supplemental/bad-request.json | 66 +
.../multiple-imps-with-error.json | 119 +
.../response-200-without-body.json | 64 +
.../supplemental/response-204.json | 59 +
.../supplemental/server-error.json | 65 +
adapters/admatic/params_test.go | 56 +
adapters/admixer/admixer.go | 18 +-
adapters/admixer/admixer_test.go | 6 +-
.../exemplary/optional-params.json | 3 +-
.../exemplary/simple-app-audio.json | 3 +-
.../exemplary/simple-app-banner.json | 3 +-
.../exemplary/simple-app-native.json | 3 +-
.../exemplary/simple-app-video.json | 3 +-
.../exemplary/simple-site-audio.json | 3 +-
.../exemplary/simple-site-banner.json | 3 +-
.../exemplary/simple-site-native.json | 3 +-
.../exemplary/simple-site-video.json | 3 +-
.../supplemental/bad-dsp-request-example.json | 3 +-
.../dsp-server-internal-error-example.json | 3 +-
.../unknown-status-code-example.json | 3 +-
adapters/admixer/params_test.go | 2 +-
adapters/adnuntius/adnuntius.go | 131 +-
adapters/adnuntius/adnuntius_test.go | 8 +-
.../exemplary/simple-banner.json | 5 +-
.../supplemental/check-dealId.json | 5 +-
...heck-dsa-advertiser-legalName-omitted.json | 133 +
.../check-dsa-advertiser-legalName.json | 134 +
.../check-dsa-advertiser-omitted.json | 123 +
.../supplemental/check-gdpr.json | 5 +-
.../supplemental/check-gross-bids.json | 5 +-
.../supplemental/check-net-bids.json | 5 +-
.../check-noCookies-parameter.json | 5 +-
.../supplemental/check-noCookies.json | 5 +-
.../supplemental/check-order-multi-imp.json | 9 +-
.../supplemental/check-price-type-error.json | 2 +-
.../supplemental/check-userId.json | 5 +-
.../supplemental/empty-regs-ext.json | 5 +-
.../supplemental/empty-regs.json | 5 +-
.../supplemental/height-error.json | 7 +-
.../supplemental/invalid-regs-ext.json | 46 +
.../supplemental/max-deals-test.json | 7 +-
.../supplemental/send-header-information.json | 5 +-
.../adnuntiustest/supplemental/site-ext.json | 114 +
.../supplemental/size-check.json | 5 +-
.../supplemental/status-400.json | 5 +-
.../supplemental/test-networks.json | 5 +-
.../adnuntiustest/supplemental/user-ext.json | 113 +
.../supplemental/width-error.json | 7 +-
adapters/adnuntius/params_test.go | 2 +-
adapters/adocean/adocean.go | 26 +-
adapters/adocean/adocean_test.go | 6 +-
.../exemplary/multi-banner-impression.json | 3 +-
.../exemplary/single-banner-impression.json | 3 +-
.../adocean/adoceantest/supplemental/app.json | 5 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/encode-error.json | 3 +-
.../supplemental/network-error.json | 3 +-
.../adoceantest/supplemental/no-bid.json | 6 +-
.../adoceantest/supplemental/no-sizes.json | 6 +-
.../supplemental/requests-merge.json | 6 +-
adapters/adocean/params_test.go | 2 +-
adapters/adoppler/adoppler.go | 42 +-
adapters/adoppler/adoppler_test.go | 6 +-
.../adopplertest/exemplary/custom-client.json | 3 +-
.../exemplary/default-client.json | 3 +-
.../adopplertest/exemplary/multiimp.json | 9 +-
.../supplemental/bad-request.json | 3 +-
.../supplemental/duplicate-imp.json | 6 +-
.../supplemental/invalid-impid.json | 3 +-
.../supplemental/invalid-response.json | 5 +-
.../supplemental/invalid-video-ext.json | 8 +-
.../adopplertest/supplemental/no-bid.json | 3 +-
.../supplemental/server-error.json | 3 +-
adapters/adot/adot.go | 20 +-
adapters/adot/adot_test.go | 10 +-
.../adottest/exemplary/simple-banner.json | 3 +-
.../exemplary/simple-interstitial.json | 3 +-
.../adottest/exemplary/simple-native.json | 3 +-
.../adot/adottest/exemplary/simple-video.json | 3 +-
.../supplemental/ext-bidder-empty.json | 3 +-
.../ext-bidder-publisher-path.json | 3 +-
.../adottest/supplemental/simple-audio.json | 3 +-
.../supplemental/simple-parallax.json | 3 +-
.../adottest/supplemental/status_204.json | 3 +-
.../adottest/supplemental/status_400.json | 3 +-
.../adottest/supplemental/status_500.json | 3 +-
.../supplemental/unmarshal_error.json | 5 +-
adapters/adot/params_test.go | 2 +-
adapters/adpone/adpone.go | 18 +-
adapters/adpone/adpone_test.go | 6 +-
.../adponetest/exemplary/simple-banner.json | 3 +-
.../adponetest/supplemental/bad_response.json | 5 +-
.../adponetest/supplemental/status_204.json | 3 +-
.../adponetest/supplemental/status_400.json | 3 +-
.../adponetest/supplemental/status_418.json | 3 +-
adapters/adprime/adprime.go | 48 +-
adapters/adprime/adprime_test.go | 6 +-
.../adprimetest/exemplary/simple-banner.json | 5 +-
.../adprimetest/exemplary/simple-native.json | 5 +-
.../adprimetest/exemplary/simple-video.json | 5 +-
.../exemplary/simple-web-banner.json | 5 +-
.../adprimetest/exemplary/withAudiences.json | 5 +-
.../adprimetest/exemplary/withKeywords.json | 5 +-
.../adprimetest/supplemental/bad-imp-ext.json | 4 +-
.../supplemental/bad_media_type.json | 5 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/no-imp-ext-1.json | 2 +-
.../supplemental/no-imp-ext-2.json | 4 +-
.../adprimetest/supplemental/status-204.json | 3 +-
.../adprimetest/supplemental/status-400.json | 3 +-
.../adprimetest/supplemental/status-404.json | 3 +-
adapters/adprime/params_test.go | 2 +-
adapters/adquery/adquery.go | 53 +-
adapters/adquery/adquery_test.go | 9 +-
.../adquery/adquerytest/exemplary/empty.json | 9 +-
.../adquerytest/exemplary/many-imps.json | 61 +-
.../adquerytest/exemplary/no-currency.json | 40 +-
.../adquery/adquerytest/exemplary/ok.json | 41 +-
.../exemplary/single-imp-banner-format.json | 32 +-
.../adquerytest/supplemental/data-null.json | 18 +-
.../invalid-numerical-values.json | 54 +-
.../supplemental/malformed-ext.json | 2 +-
.../supplemental/malformed-resp.json | 40 +-
.../supplemental/mediatype-unknown.json | 40 +-
.../supplemental/mediatype-video.json | 40 +-
.../adquerytest/supplemental/no-device.json | 129 +
.../supplemental/no-imp-banner-measures.json | 18 +-
.../supplemental/no-imp-banner.json | 18 +-
.../adquerytest/supplemental/no-site.json | 131 +
.../supplemental/resp-bad-request.json | 36 +-
.../supplemental/resp-no-content.json | 29 +-
.../supplemental/resp-server-error.json | 36 +-
adapters/adquery/params_test.go | 2 +-
adapters/adquery/types.go | 5 +-
adapters/adrino/adrino.go | 14 +-
adapters/adrino/adrino_test.go | 6 +-
.../adrino/adrinotest/exemplary/no-bid.json | 3 +-
.../adrinotest/exemplary/single-native.json | 3 +-
.../adrinotest/supplemental/unknown-hash.json | 3 +-
adapters/adrino/params_test.go | 2 +-
adapters/adsinteractive/adsinteractive.go | 14 +-
.../adsinteractive/adsinteractive_test.go | 6 +-
.../adsinteractivetest/exemplary/banner.json | 3 +-
.../supplemental/bad-request-400.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/no-content-204.json | 3 +-
.../supplemental/service-unavailable-503.json | 3 +-
adapters/adsinteractive/params_test.go | 2 +-
adapters/adtarget/adtarget.go | 32 +-
adapters/adtarget/adtarget_test.go | 6 +-
.../exemplary/media-type-mapping.json | 3 +-
.../adtargettest/exemplary/simple-banner.json | 3 +-
.../adtargettest/exemplary/simple-video.json | 3 +-
.../supplemental/explicit-dimensions.json | 3 +-
.../supplemental/wrong-impression-ext.json | 2 +-
.../wrong-impression-mapping.json | 3 +-
adapters/adtarget/params_test.go | 14 +-
adapters/adtelligent/adtelligent.go | 31 +-
adapters/adtelligent/adtelligent_test.go | 6 +-
.../exemplary/media-type-mapping.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../supplemental/explicit-dimensions.json | 3 +-
.../supplemental/wrong-impression-ext.json | 2 +-
.../wrong-impression-mapping.json | 3 +-
adapters/adtelligent/params_test.go | 14 +-
adapters/adtonos/adtonos.go | 143 +
adapters/adtonos/adtonos_test.go | 30 +
.../exemplary/simple-audio-with-mtype.json | 115 +
.../adtonostest/exemplary/simple-audio.json | 113 +
.../adtonostest/exemplary/simple-video.json | 113 +
.../wrong-impression-mapping.json | 103 +
adapters/adtonos/params_test.go | 43 +
adapters/adtrgtme/adtrgtme.go | 18 +-
adapters/adtrgtme/adtrgtme_test.go | 6 +-
.../adtrgtmetest/exemplary/banner-app.json | 9 +-
.../adtrgtmetest/exemplary/banner-web.json | 9 +-
.../supplemental/banner-app-headers-ipv6.json | 3 +-
.../supplemental/banner-web-headers-ipv6.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/not-found-imp.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../status-code-internal-server-error.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../status-code-service-unavaliable.json | 3 +-
.../status-code-temporary-redirect.json | 3 +-
.../unsupported-bid-type-native.json | 3 +-
.../unsupported-bid-type-video.json | 3 +-
adapters/adtrgtme/params_test.go | 2 +-
adapters/advangelists/advangelists.go | 24 +-
adapters/advangelists/advangelists_test.go | 6 +-
.../advangeliststest/exemplary/banner.json | 3 +-
.../advangeliststest/exemplary/video.json | 3 +-
adapters/advangelists/params_test.go | 3 +-
adapters/adview/adview.go | 160 +-
adapters/adview/adview_test.go | 6 +-
.../exemplary/banner-app-format.json | 15 +-
.../banner-app-resp-no-formattype.json | 151 +
.../adviewtest/exemplary/banner-app.json | 15 +-
.../adviewtest/exemplary/native-app.json | 15 +-
.../adviewtest/exemplary/video-app.json | 15 +-
.../adviewtest/supplemental/bad-request.json | 3 +-
.../supplemental/empty-response.json | 3 +-
.../supplemental/nobid-response.json | 3 +-
.../adviewtest/supplemental/server-error.json | 3 +-
.../supplemental/unparsable-response.json | 5 +-
adapters/adview/params_test.go | 2 +-
adapters/adxcg/adxcg.go | 14 +-
adapters/adxcg/adxcg_test.go | 6 +-
.../exemplary/simple-banner-currency.json | 3 +-
.../adxcgtest/exemplary/simple-banner.json | 3 +-
.../adxcgtest/exemplary/simple-native.json | 3 +-
.../adxcgtest/exemplary/simple-video.json | 3 +-
.../adxcgtest/supplemental/bad_response.json | 5 +-
.../adxcgtest/supplemental/status_204.json | 3 +-
.../adxcgtest/supplemental/status_400.json | 3 +-
.../adxcgtest/supplemental/status_418.json | 3 +-
adapters/adyoulike/adyoulike.go | 14 +-
adapters/adyoulike/adyoulike_test.go | 6 +-
.../exemplary/currency-conversion.json | 3 +-
.../exemplary/multiformat-impression.json | 3 +-
.../supplemental/invalid-bid-response.json | 5 +-
.../supplemental/status-bad-request.json | 3 +-
.../supplemental/status-no-content.json | 3 +-
.../status-service-unavailable.json | 3 +-
.../supplemental/status-unknown.json | 3 +-
adapters/adyoulike/params_test.go | 2 +-
adapters/aidem/aidem.go | 66 +-
adapters/aidem/aidem_test.go | 10 +-
.../aidemtest/exemplary/multi-format.json | 5 +-
.../exemplary/multi-imps-multi-bid.json | 5 +-
.../exemplary/multi-imps-single-bid.json | 5 +-
.../aidem/aidemtest/exemplary/no-bid.json | 5 +-
.../aidemtest/exemplary/optional-params.json | 5 +-
.../aidemtest/exemplary/simple-banner.json | 5 +-
.../aidemtest/exemplary/simple-video.json | 5 +-
...valid-req-400-status-code-bad-request.json | 5 +-
...nvalid-res-200-status-code-empty-bids.json | 5 +-
.../invalid-resp-multi-imp-type.json | 5 +-
...valid-req-200-bid-response-from-aidem.json | 5 +-
.../valid-req-204-response-from-aidem.json | 5 +-
adapters/aidem/params_test.go | 2 +-
adapters/aja/aja.go | 18 +-
adapters/aja/aja_test.go | 6 +-
.../exemplary/banner-multiple-imps.json | 6 +-
adapters/aja/ajatest/exemplary/video.json | 3 +-
.../supplemental/invalid-bid-type.json | 3 +-
.../supplemental/invalid-ext-bidder.json | 2 +-
.../aja/ajatest/supplemental/invalid-ext.json | 2 +-
.../supplemental/status-bad-request.json | 3 +-
.../status-internal-server-error.json | 3 +-
.../supplemental/status-no-content.json | 3 +-
adapters/algorix/algorix.go | 27 +-
adapters/algorix/algorix_test.go | 6 +-
.../exemplary/sample-banner-euc.json | 3 +-
.../exemplary/sample-banner-use.json | 3 +-
.../sample-banner-with-mediatype.json | 3 +-
.../sample-banner-with-palcementid.json | 3 +-
.../algorixtest/exemplary/sample-banner.json | 3 +-
.../algorixtest/exemplary/sample-native.json | 3 +-
.../algorixtest/exemplary/sample-nobid.json | 3 +-
.../exemplary/sample-rewarded-video.json | 3 +-
.../algorixtest/exemplary/sample-video.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../multiformat-no-mediatype-response.json | 3 +-
.../sample-banner-with-other-mediatype.json | 3 +-
.../algorixtest/supplemental/status_400.json | 3 +-
.../algorixtest/supplemental/status_500.json | 3 +-
adapters/algorix/params_test.go | 3 +-
adapters/alkimi/alkimi.go | 195 ++
adapters/alkimi/alkimi_test.go | 57 +
.../alkimitest/exemplary/simple-audio.json | 144 +
.../alkimitest/exemplary/simple-banner.json | 151 +
.../alkimitest/exemplary/simple-video.json | 148 +
.../supplemental/bad_media_type.json | 109 +
.../alkimitest/supplemental/bad_response.json | 102 +
.../alkimitest/supplemental/status-204.json | 97 +
.../supplemental/status-not-200.json | 102 +
adapters/alkimi/params_test.go | 48 +
adapters/amx/amx.go | 39 +-
adapters/amx/amx_test.go | 39 +-
.../amx/amxtest/exemplary/app-simple.json | 3 +-
.../amxtest/exemplary/display-multiple.json | 9 +-
.../amx/amxtest/exemplary/simple-native.json | 3 +-
.../amx/amxtest/exemplary/video-simple.json | 3 +-
.../amx/amxtest/exemplary/web-simple.json | 3 +-
.../amxtest/supplemental/204-response.json | 3 +-
.../amxtest/supplemental/400-response.json | 3 +-
.../amxtest/supplemental/500-response.json | 3 +-
adapters/amx/params_test.go | 2 +-
adapters/apacdex/apacdex.go | 20 +-
adapters/apacdex/apacdex_test.go | 6 +-
.../exemplary/banner-and-video.json | 3 +-
.../apacdex/apacdextest/exemplary/banner.json | 3 +-
.../apacdex/apacdextest/exemplary/video.json | 3 +-
.../supplemental/explicit-dimensions.json | 3 +-
.../invalid-response-no-bids.json | 3 +-
.../invalid-response-unmarshall-error.json | 7 +-
.../supplemental/server-error-code.json | 3 +-
.../supplemental/server-no-content.json | 3 +-
.../supplemental/wrong-bid-ext.json | 3 +-
.../supplemental/wrong-impression-ext.json | 2 +-
adapters/apacdex/params_test.go | 2 +-
adapters/appnexus/appnexus.go | 127 +-
adapters/appnexus/appnexus_test.go | 6 +-
.../appnexustest/amp/simple-banner.json | 3 +-
.../appnexustest/amp/simple-video.json | 3 +-
.../exemplary/dynamic-keywords-params.json | 3 +-
.../appnexustest/exemplary/native-1.1.json | 3 +-
.../exemplary/optional-params.json | 3 +-
.../exemplary/schain-24-other-ext.json | 3 +-
.../appnexustest/exemplary/schain-24.json | 3 +-
.../exemplary/schain-25-other-ext.json | 3 +-
.../appnexustest/exemplary/schain-25.json | 3 +-
.../simple-banner-foreign-currency.json | 3 +-
.../appnexustest/exemplary/simple-banner.json | 3 +-
.../appnexustest/exemplary/simple-video.json | 3 +-
.../exemplary/string-keywords-params.json | 3 +-
.../exemplary/video-invalid-category.json | 3 +-
.../supplemental/displaymanager-test.json | 3 +-
.../supplemental/explicit-dimensions.json | 3 +-
.../appnexustest/supplemental/gpid.json | 154 +
.../supplemental/invalid-bid-type.json | 3 +-
.../supplemental/legacy-params.json | 3 +-
.../appnexustest/supplemental/multi-bid.json | 3 +-
.../placement-id-as-string-test.json | 3 +-
.../request-ext-appnexus-existing.json | 3 +-
.../supplemental/reserve-ignored.json | 3 +-
.../supplemental/reserve-test.json | 3 +-
.../appnexustest/supplemental/status-400.json | 3 +-
.../supplemental/usePmtRule-test.json | 3 +-
.../video/video-brand-category.json | 3 +-
...deo-no-adpodid-two-imps-different-pod.json | 3 +-
.../video-same-adpodid-two-imps-same-pod.json | 3 +-
adapters/appnexus/models.go | 10 +-
adapters/appnexus/params_test.go | 2 +-
adapters/appush/appush.go | 18 +-
adapters/appush/appush_test.go | 6 +-
.../appushtest/exemplary/endpointId.json | 3 +-
.../appushtest/exemplary/simple-banner.json | 3 +-
.../appushtest/exemplary/simple-native.json | 3 +-
.../appushtest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../appushtest/supplemental/bad_response.json | 5 +-
.../appushtest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/appush/params_test.go | 2 +-
adapters/aso/aso.go | 154 +
adapters/aso/aso_test.go | 29 +
.../aso/asotest/exemplary/app-banner.json | 126 +
.../exemplary/app-multi-impressions.json | 249 ++
.../aso/asotest/exemplary/app-native.json | 112 +
adapters/aso/asotest/exemplary/app-video.json | 136 +
.../aso/asotest/exemplary/site-banner.json | 130 +
.../aso/asotest/exemplary/site-native.json | 113 +
.../aso/asotest/exemplary/site-video.json | 136 +
.../supplemental/bad-request-no-bidder.json | 25 +
.../supplemental/bad-request-no-ext.json | 22 +
.../aso/asotest/supplemental/bad-request.json | 52 +
.../asotest/supplemental/empty-response.json | 42 +
.../supplemental/media-type-absent.json} | 51 +-
.../supplemental/media-type-mapping.json | 101 +
.../asotest/supplemental/server-error.json | 49 +
.../supplemental/unparsable-response.json | 49 +
adapters/aso/params_test.go | 47 +
.../exemplary/banner-app.json | 3 +-
.../exemplary/interstitial.json | 3 +-
.../exemplary/native-1.1.json | 3 +-
.../audienceNetworktest/exemplary/video.json | 3 +-
.../exemplary/video_consented_providers.json | 3 +-
.../supplemental/banner-format-only.json | 3 +-
.../supplemental/invalid-adm.json | 5 +-
.../supplemental/missing-adm-bidid.json | 3 +-
.../supplemental/missing-adm.json | 3 +-
.../supplemental/multi-imp.json | 6 +-
.../supplemental/no-bid-204.json | 3 +-
.../supplemental/server-error-500.json | 3 +-
.../supplemental/split-placementId.json | 3 +-
adapters/audienceNetwork/facebook.go | 76 +-
adapters/audienceNetwork/facebook_test.go | 8 +-
adapters/automatad/automatad.go | 14 +-
adapters/automatad/automatad_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../supplemental/bad-request.json | 3 +-
.../supplemental/error-500-request.json | 3 +-
.../supplemental/no-content.json | 3 +-
adapters/automatad/params_test.go | 2 +-
adapters/avocet/avocet.go | 21 +-
adapters/avocet/avocet_test.go | 15 +-
.../avocet/avocettest/exemplary/banner.json | 3 +-
.../avocet/avocettest/exemplary/video.json | 3 +-
adapters/axis/axis.go | 16 +-
adapters/axis/axis_test.go | 6 +-
.../axistest/exemplary/simple-banner.json | 3 +-
.../axistest/exemplary/simple-native.json | 3 +-
.../axis/axistest/exemplary/simple-video.json | 3 +-
.../axistest/exemplary/simple-web-banner.json | 3 +-
.../axistest/supplemental/bad_media_type.json | 3 +-
.../axistest/supplemental/bad_response.json | 5 +-
.../axistest/supplemental/status-204.json | 3 +-
.../axistest/supplemental/status-not-200.json | 3 +-
adapters/axis/params_test.go | 2 +-
adapters/axonix/axonix.go | 20 +-
adapters/axonix/axonix_test.go | 6 +-
.../exemplary/banner-and-video.json | 3 +-
.../exemplary/banner-video-native.json | 3 +-
.../axonixtest/exemplary/simple-banner.json | 3 +-
.../axonixtest/exemplary/simple-video.json | 3 +-
.../supplemental/bad-response-no-body.json | 7 +-
.../supplemental/status-bad-request.json | 3 +-
.../supplemental/status-no-content.json | 3 +-
.../supplemental/unexpected-status-code.json | 3 +-
.../supplemental/valid-extension.json | 3 +-
.../supplemental/valid-with-device.json | 3 +-
adapters/axonix/params_test.go | 2 +-
adapters/beachfront/beachfront.go | 62 +-
adapters/beachfront/beachfront_test.go | 6 +-
.../exemplary/adm-video-app.json | 3 +-
.../beachfronttest/exemplary/adm-video.json | 3 +-
.../beachfronttest/exemplary/banner.json | 6 +-
.../beachfronttest/exemplary/nurl-video.json | 3 +-
.../adm-video-app-alphanum-bundle.json | 3 +-
.../adm-video-app-malformed-bundle.json | 3 +-
.../supplemental/adm-video-by-explicit.json | 3 +-
.../supplemental/adm-video-no-cat.json | 3 +-
.../supplemental/adm-video-no-ip.json | 3 +-
.../supplemental/adm-video-no-size.json | 125 +
.../supplemental/adm-video-partial-size.json | 126 +
.../supplemental/adm-video-schain.json | 3 +-
.../adm-video-zero-size-partial.json | 127 +
.../supplemental/adm-video-zero-size.json | 127 +
.../supplemental/banner-204-with-body.json | 3 +-
.../supplemental/banner-204.json | 3 +-
.../banner-and-adm-video-by-explicit.json | 6 +-
...video-expected-204-response-on-banner.json | 6 +-
.../supplemental/banner-and-adm-video.json | 6 +-
.../supplemental/banner-and-nurl-video.json | 6 +-
.../supplemental/banner-bad-request-400.json | 6 +-
.../supplemental/banner-schain.json | 6 +-
...er_response_unmarshal_error_adm_video.json | 3 +-
...idder_response_unmarshal_error_banner.json | 6 +-
...r_response_unmarshal_error_nurl_video.json | 3 +-
.../currency-adm-video-converted.json | 3 +-
.../currency-adm-video-ext-wins.json | 3 +-
.../currency-adm-video-imp-wins.json | 3 +-
...rrency-adm-video-warning-and-fallback.json | 3 +-
.../currency-adm-video-zero-by-min-both.json | 3 +-
.../currency-adm-video-zero-by-min-ext.json | 3 +-
.../currency-adm-video-zero-by-min-imp.json | 3 +-
.../internal-server-error-500.json | 3 +-
.../supplemental/six-nine-combo.json | 15 +-
.../supplemental/two-four-combo.json | 9 +-
.../supplemental/unmarshal-error-banner.json | 2 +-
.../supplemental/unmarshal-error-video.json | 2 +-
adapters/beachfront/params_test.go | 2 +-
adapters/beintoo/beintoo.go | 30 +-
adapters/beintoo/beintoo_test.go | 6 +-
.../beintootest/exemplary/minimal-banner.json | 3 +-
.../supplemental/add-bidfloor.json | 3 +-
.../supplemental/build-banner-object.json | 3 +-
.../invalid-response-no-bids.json | 3 +-
.../invalid-response-unmarshall-error.json | 7 +-
.../supplemental/server-error-code.json | 3 +-
.../supplemental/server-no-content.json | 3 +-
.../site-domain-and-url-correctly-parsed.json | 3 +-
adapters/beintoo/params_test.go | 2 +-
adapters/bematterfull/bematterfull.go | 22 +-
.../bematterfulltest/exemplary/banner.json | 6 +-
.../bematterfulltest/exemplary/native.json | 3 +-
.../bematterfulltest/exemplary/video.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/empty-mediatype.json | 3 +-
.../supplemental/empty-seatbid-0-bid.json | 3 +-
.../supplemental/empty-seatbid.json | 3 +-
.../invalid-ext-bidder-object.json | 2 +-
.../supplemental/invalid-ext-object.json | 2 +-
.../supplemental/invalid-mediatype.json | 3 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-400.json | 3 +-
.../supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
.../bematterfull/bematterfulltest_test.go | 6 +-
adapters/bematterfull/params_test.go | 2 +-
adapters/between/between.go | 30 +-
adapters/between/between_test.go | 6 +-
.../betweentest/exemplary/multi-request.json | 3 +-
.../betweentest/exemplary/secure-detect.json | 3 +-
.../exemplary/simple-site-banner.json | 3 +-
.../supplemental/bad-dsp-request-example.json | 3 +-
.../supplemental/bad-response-body.json | 5 +-
.../dsp-server-internal-error-example.json | 3 +-
.../betweentest/supplemental/no-bids.json | 3 +-
.../unknown-status-code-example.json | 3 +-
adapters/between/params_test.go | 2 +-
adapters/beyondmedia/beyondmedia.go | 18 +-
adapters/beyondmedia/beyondmedia_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/beyondmedia/params_test.go | 2 +-
adapters/bidder.go | 13 +-
adapters/bidmachine/bidmachine.go | 24 +-
adapters/bidmachine/bidmachine_test.go | 6 +-
.../rewarded_interstitial_no_battr.json | 3 +-
.../rewarded_interstitial_w_battr.json | 3 +-
.../exemplary/rewarded_video_no_battr.json | 3 +-
.../exemplary/rewarded_video_w_battr.json | 3 +-
.../exemplary/simple_banner.json | 3 +-
.../exemplary/simple_interstitial.json | 3 +-
.../exemplary/simple_video.json | 3 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-400.json | 3 +-
.../supplemental/status-403.json | 3 +-
.../supplemental/status-408.json | 3 +-
.../supplemental/status-500.json | 3 +-
.../supplemental/status-502.json | 3 +-
.../supplemental/status-503.json | 3 +-
.../supplemental/status-504.json | 3 +-
adapters/bidmachine/params_test.go | 2 +-
adapters/bidmatic/bidmatic.go | 207 ++
adapters/bidmatic/bidmatic_test.go | 23 +
.../exemplary/media-type-mapping.json | 91 +
.../bidmatictest/exemplary/simple-banner.json | 98 +
.../bidmatictest/exemplary/simple-video.json} | 16 +-
.../supplemental/explicit-dimensions.json | 60 +
.../supplemental/imp-ext-empty.json | 21 +
.../supplemental/wrong-impression-ext.json | 26 +
.../wrong-impression-mapping.json | 11 +-
.../supplemental/wrong-response.json | 65 +
adapters/bidmatic/params_test.go | 64 +
adapters/bidmyadz/bidmyadz.go | 16 +-
adapters/bidmyadz/bidmyadz_test.go | 6 +-
.../bidmyadztest/exemplary/banner.json | 3 +-
.../bidmyadztest/exemplary/native.json | 3 +-
.../bidmyadztest/exemplary/video.json | 3 +-
.../supplemental/missing-mediatype.json | 7 +-
.../supplemental/response-without-bids.json | 6 +-
.../response-without-seatbid.json | 3 +-
.../bidmyadztest/supplemental/status-204.json | 3 +-
.../bidmyadztest/supplemental/status-400.json | 3 +-
.../status-service-unavailable.json | 3 +-
.../supplemental/status-unknown.json | 3 +-
adapters/bidmyadz/params_test.go | 2 +-
adapters/bidscube/bidscube.go | 16 +-
adapters/bidscube/bidscube_test.go | 6 +-
.../bidscubetest/exemplary/simple-banner.json | 3 +-
.../bidscubetest/exemplary/simple-native.json | 3 +-
.../bidscubetest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_bidtype_response.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/bad_status_code.json | 3 +-
.../supplemental/imp_ext_string.json | 2 +-
.../bidscubetest/supplemental/status-204.json | 3 +-
.../bidscubetest/supplemental/status-404.json | 3 +-
adapters/bidscube/params_test.go | 2 +-
adapters/bidstack/bidstack.go | 16 +-
adapters/bidstack/bidstack_test.go | 8 +-
.../exemplary/simple-app-video.json | 3 +-
.../bidstacktest/supplemental/status-204.json | 3 +-
.../bidstacktest/supplemental/status-400.json | 3 +-
.../bidstacktest/supplemental/status-404.json | 3 +-
adapters/bidstack/params_test.go | 2 +-
adapters/bigoad/bigoad.go | 157 +
adapters/bigoad/bigoad_test.go | 29 +
.../bigoadtest/exemplary/banner_app.json | 186 ++
.../bigoadtest/exemplary/banner_web.json | 135 +
.../bigoadtest/exemplary/native_app.json | 147 +
.../bigoadtest/exemplary/native_web.json | 134 +
.../bigoadtest/exemplary/video_app.json | 160 +
.../bigoadtest/exemplary/video_web.json | 158 +
.../supplemental/empty_seatbid.json | 125 +
.../supplemental/invalid_mtype.json | 164 +
.../supplemental/invalid_request.json | 31 +
.../invalid_request_bigo_ext.json | 37 +
.../supplemental/invalid_response.json | 111 +
.../params_test.go => bigoad/param_test.go} | 17 +-
.../bizzclick.go => blasto/blasto.go} | 37 +-
.../blasto_test.go} | 16 +-
.../blastotest}/exemplary/banner-app.json | 11 +-
.../blastotest}/exemplary/banner-web.json | 42 +-
.../exemplary/default-host-param.json | 153 +
.../blastotest/exemplary/native-app.json | 149 +
.../blastotest/exemplary/native-web.json | 136 +
.../blastotest}/exemplary/video-app.json | 17 +-
.../blastotest}/exemplary/video-web.json | 13 +-
.../supplemental/empty-seatbid-array.json | 22 +-
.../invalid-blasto-ext-object.json | 29 +
.../supplemental/invalid-response.json | 115 +
.../supplemental/status-code-bad-request.json | 96 +
.../supplemental/status-code-no-content.json | 79 +
.../supplemental/status-code-other-error.json | 84 +
.../status-code-service-unavailable.json | 84 +
adapters/{bizzclick => blasto}/params_test.go | 12 +-
adapters/bliink/bliink.go | 14 +-
adapters/bliink/bliink_test.go | 6 +-
.../bliink/bliinktest/exemplary/banner.json | 3 +-
.../exemplary/banner_native_video.json | 3 +-
.../bliink/bliinktest/exemplary/native.json | 3 +-
.../bliink/bliinktest/exemplary/video.json | 3 +-
.../supplemental/multiple_format_request.json | 3 +-
.../supplemental/no_seat_bid_in_response.json | 3 +-
.../supplemental/status_bad_request.json | 3 +-
.../supplemental/status_no_content.json | 3 +-
.../supplemental/status_not_ok.json | 3 +-
adapters/bliink/params_test.go | 3 +-
adapters/blue/blue.go | 14 +-
adapters/blue/blue_test.go | 6 +-
.../bluetest/exemplary/simple-web-banner.json | 3 +-
.../204-response-from-target.json | 3 +-
.../400-response-from-target.json | 3 +-
.../500-response-from-target.json | 3 +-
.../bluetest/supplemental/bad_response.json | 5 +-
adapters/bluesea/bluesea.go | 22 +-
adapters/bluesea/bluesea_test.go | 6 +-
.../bluesea/blueseatest/exemplary/banner.json | 3 +-
.../bluesea/blueseatest/exemplary/native.json | 3 +-
.../bluesea/blueseatest/exemplary/nobid.json | 3 +-
.../blueseatest/exemplary/site-banner.json | 133 +
.../blueseatest/exemplary/site-native.json | 133 +
.../blueseatest/exemplary/site-video.json | 163 +
.../bluesea/blueseatest/exemplary/video.json | 3 +-
.../supplemental/invalid-media-type.json | 3 +-
.../supplemental/malformed-body-response.json | 3 +-
.../supplemental/status-400-response.json | 3 +-
adapters/bluesea/params_test.go | 2 +-
adapters/bmtm/brightmountainmedia.go | 18 +-
adapters/bmtm/brightmountainmedia_test.go | 6 +-
.../exemplary/app-banner.json | 106 +
.../exemplary/app-video.json | 116 +
.../exemplary/banner.json | 3 +-
.../exemplary/multi-imp.json | 6 +-
.../exemplary/video.json | 3 +-
.../multi-imp-mixed-validation.json | 3 +-
.../supplemental/status-not-ok.json | 3 +-
adapters/bmtm/params_test.go | 2 +-
adapters/boldwin/boldwin.go | 47 +-
adapters/boldwin/boldwin_test.go | 6 +-
.../boldwintest/exemplary/endpointId.json | 5 +-
.../boldwintest/exemplary/simple-banner.json | 5 +-
.../boldwintest/exemplary/simple-native.json | 5 +-
.../boldwintest/exemplary/simple-video.json | 5 +-
.../exemplary/simple-web-banner.json | 5 +-
.../supplemental/bad_media_type.json | 5 +-
.../supplemental/bad_response.json | 5 +-
.../boldwintest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/boldwin/params_test.go | 2 +-
adapters/brave/brave.go | 20 +-
adapters/brave/brave_test.go | 6 +-
.../brave/bravetest/exemplary/banner-app.json | 3 +-
.../brave/bravetest/exemplary/banner-web.json | 3 +-
.../brave/bravetest/exemplary/native-app.json | 3 +-
.../brave/bravetest/exemplary/native-web.json | 3 +-
.../brave/bravetest/exemplary/video-app.json | 3 +-
.../brave/bravetest/exemplary/video-web.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/brave/params_test.go | 2 +-
adapters/bwx/bwx.go | 160 +
adapters/bwx/bwx_test.go | 34 +
adapters/bwx/bwxtest/exemplary/banner.json | 283 ++
adapters/bwx/bwxtest/exemplary/native.json | 165 +
adapters/bwx/bwxtest/exemplary/video.json | 205 ++
.../bwxtest/supplemental/bad-response.json | 107 +
.../bwxtest/supplemental/empty-mediatype.json | 191 ++
.../supplemental/empty-seatbid-0-bid.json | 112 +
.../bwxtest/supplemental/empty-seatbid.json | 112 +
.../invalid-ext-bidder-object.json | 49 +
.../supplemental/invalid-ext-object.json | 47 +
.../supplemental/invalid-mediatype.json | 188 ++
.../bwx/bwxtest/supplemental/status-204.json | 101 +
.../bwx/bwxtest/supplemental/status-400.json | 107 +
.../bwx/bwxtest/supplemental/status-503.json | 106 +
.../supplemental/unexpected-status.json | 107 +
adapters/bwx/params_test.go | 54 +
.../exemplary/banner-and-video-app.json | 3 +-
.../exemplary/banner-and-video-site.json | 3 +-
.../exemplary/banner-app.json | 3 +-
.../exemplary/minimal-banner.json | 3 +-
.../exemplary/video-app.json | 3 +-
.../exemplary/video-ctv.json | 3 +-
.../exemplary/video-site.json | 3 +-
.../supplemental/add-bidfloor.json | 3 +-
.../app-domain-and-url-correctly-parsed.json | 3 +-
.../app-storeUrl-correctly-parsed.json | 3 +-
.../bad-imp-video-missing-partial-sizes.json | 146 +
.../bad-imp-video-zero-sizes.json | 38 +
.../supplemental/build-banner-object.json | 3 +-
.../supplemental/build-video-object.json | 3 +-
.../invalid-response-no-bids.json | 3 +-
.../invalid-response-unmarshall-error.json | 7 +-
.../supplemental/server-error-code.json | 3 +-
.../supplemental/server-no-content.json | 3 +-
.../site-domain-and-url-correctly-parsed.json | 3 +-
.../cadent_aperture_mx/cadentaperturemx.go | 38 +-
.../cadentaperturemx_test.go | 8 +-
adapters/cadent_aperture_mx/params_test.go | 2 +-
adapters/ccx/ccx.go | 14 +-
adapters/ccx/ccx_test.go | 6 +-
.../ccx/ccxtest/exemplary/multi-banner.json | 3 +-
.../ccx/ccxtest/exemplary/simple-banner.json | 3 +-
.../204-response-from-target.json | 3 +-
.../400-response-from-target.json | 3 +-
.../500-response-from-target.json | 3 +-
adapters/ccx/params_test.go | 2 +-
adapters/cointraffic/cointraffic.go | 79 +
adapters/cointraffic/cointraffic_test.go | 51 +
.../exemplary/simple-banner.json | 158 +
.../supplemental/bad-request.json | 70 +
.../cointraffictest/supplemental/no-bid.json | 65 +
.../supplemental/server-error.json | 70 +
adapters/cointraffic/params_test.go | 51 +
adapters/coinzilla/coinzilla.go | 14 +-
adapters/coinzilla/coinzilla_test.go | 6 +-
.../exemplary/multi-banners.json | 3 +-
.../coinzillatest/exemplary/multi-imp.json | 3 +-
.../exemplary/single-banner.json | 3 +-
.../supplemental/bad-request.json | 3 +-
.../coinzillatest/supplemental/no-bid.json | 3 +-
adapters/coinzilla/params_test.go | 2 +-
adapters/colossus/colossus.go | 16 +-
adapters/colossus/colossus_test.go | 6 +-
.../exemplary/simple-banner-groupId.json | 3 +-
.../exemplary/simple-banner-without-ext.json | 3 +-
.../colossustest/exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native-without-ext.json | 3 +-
.../colossustest/exemplary/simple-native.json | 3 +-
.../exemplary/simple-video-without-ext.json | 3 +-
.../colossustest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/bad_status_code.json | 3 +-
.../colossustest/supplemental/status-204.json | 3 +-
.../colossustest/supplemental/status-404.json | 3 +-
adapters/colossus/params_test.go | 2 +-
adapters/compass/compass.go | 18 +-
adapters/compass/compass_test.go | 6 +-
.../compasstest/exemplary/endpointId.json | 3 +-
.../compasstest/exemplary/simple-banner.json | 3 +-
.../compasstest/exemplary/simple-native.json | 3 +-
.../compasstest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../compasstest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/compass/params_test.go | 2 +-
adapters/concert/concert.go | 140 +
adapters/concert/concert_test.go | 20 +
.../concert/concerttest/exemplary/audio.json | 119 +
.../concert/concerttest/exemplary/banner.json | 139 +
.../concert/concerttest/exemplary/video.json | 129 +
adapters/concert/params_test.go | 51 +
adapters/connectad/connectad.go | 30 +-
adapters/connectad/connectad_test.go | 6 +-
.../exemplary/optional-params.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../connectadtest/supplemental/204.json | 3 +-
.../supplemental/badresponse.json | 5 +-
.../supplemental/banner-multi.json | 3 +-
.../connectadtest/supplemental/err500.json | 3 +-
.../connectadtest/supplemental/ipv6.json | 3 +-
.../connectadtest/supplemental/no_device.json | 3 +-
.../connectadtest/supplemental/no_dnt.json | 3 +-
.../connectadtest/supplemental/no_ext.json | 4 +-
adapters/connectad/params_test.go | 6 +-
adapters/consumable/adtypes.go | 64 -
adapters/consumable/consumable.go | 393 +--
.../consumable/exemplary/app-audio.json | 114 +
.../consumable/exemplary/app-banner.json | 112 +
.../consumable/exemplary/app-video.json | 127 +
.../consumable/exemplary/simple-banner.json | 136 +-
.../supplemental/app-audio-bad-params.json | 37 +
.../supplemental/app-banner-no-ad.json | 76 +
.../supplemental/app-video-no-media-type.json | 111 +
.../supplemental/bad-dsp-request-example.json | 79 +
.../dsp-server-internal-error-example.json | 79 +
.../simple-banner-content-meta.json | 120 +-
.../supplemental/simple-banner-coppa.json | 113 +-
.../supplemental/simple-banner-eids.json | 166 +-
.../supplemental/simple-banner-gdpr-2.json | 115 +-
.../supplemental/simple-banner-gdpr-3.json | 122 +-
.../supplemental/simple-banner-gdpr.json | 129 +-
.../supplemental/simple-banner-gpp.json | 128 +-
.../supplemental/simple-banner-meta.json | 117 +-
.../simple-banner-no-impressionUrl.json | 133 +-
.../supplemental/simple-banner-no-params.json | 43 +
.../supplemental/simple-banner-schain.json | 135 +-
.../simple-banner-us-privacy.json | 122 +-
.../unknown-status-code-example.json | 79 +
adapters/consumable/consumable_test.go | 96 +-
adapters/consumable/instant.go | 21 -
adapters/consumable/params_test.go | 4 +-
adapters/consumable/retrieveAd.go | 10 -
adapters/conversant/conversant.go | 45 +-
adapters/conversant/conversant_test.go | 6 +-
.../conversanttest/exemplary/banner.json | 3 +-
.../conversanttest/exemplary/simple_app.json | 3 +-
.../conversanttest/exemplary/video.json | 30 +-
.../supplemental/server_badresponse.json | 3 +-
.../supplemental/server_nocontent.json | 3 +-
.../supplemental/server_unknownstatus.json | 3 +-
.../supplemental/test_params.json | 3 +-
adapters/copper6ssp/copper6ssp.go | 158 +
adapters/copper6ssp/copper6ssp_test.go | 20 +
.../copper6ssptest/exemplary/endpointId.json | 136 +
.../exemplary/multi-format.json | 105 +
.../copper6ssptest/exemplary/multi-imp.json | 253 ++
.../exemplary/simple-banner.json | 136 +
.../exemplary/simple-native.json | 120 +
.../exemplary/simple-video.json | 131 +
.../exemplary/simple-web-banner.json | 136 +
.../supplemental/bad_media_type.json | 83 +
.../supplemental/bad_response.json | 85 +
.../supplemental/no-valid-bidder-param.json | 42 +
.../supplemental/no-valid-imp-ext.json | 38 +
.../supplemental/status-204.json | 80 +
.../supplemental/status-not-200.json | 85 +
adapters/copper6ssp/params_test.go | 47 +
adapters/cpmstar/cpmstar.go | 26 +-
adapters/cpmstar/cpmstar_test.go | 6 +-
.../exemplary/banner-and-video.json | 3 +-
.../cpmstar/cpmstartest/exemplary/banner.json | 3 +-
.../exemplary/multiple-banners.json | 154 +
.../cpmstar/cpmstartest/exemplary/video.json | 3 +-
.../supplemental/explicit-dimensions.json | 3 +-
.../invalid-response-no-bids.json | 3 +-
.../invalid-response-unmarshall-error.json | 7 +-
.../supplemental/server-error-code.json | 3 +-
.../supplemental/server-no-content.json | 3 +-
.../supplemental/wrong-impression-ext.json | 4 +-
.../wrong-impression-mapping.json | 3 +-
adapters/cpmstar/params_test.go | 2 +-
adapters/criteo/criteo.go | 62 +-
adapters/criteo/criteo_test.go | 42 +-
.../exemplary/simple-banner-cookie-uid.json | 3 +-
.../exemplary/simple-banner-inapp.json | 3 +-
.../simple-banner-multiple-bids.json | 3 +-
.../exemplary/simple-banner-paapi.json | 176 +
.../exemplary/simple-banner-uid.json | 3 +-
.../exemplary/simple-multi-type-banner.json | 3 +-
.../exemplary/simple-multi-type-video.json | 3 +-
.../criteotest/exemplary/simple-native.json | 94 +
.../criteotest/exemplary/simple-video.json | 3 +-
.../204-response-from-target.json | 3 +-
.../400-response-from-target.json | 3 +-
.../500-response-from-target.json | 3 +-
.../supplemental/simple-banner-with-ipv6.json | 3 +-
adapters/criteo/params_test.go | 2 +-
adapters/cwire/cwire.go | 14 +-
adapters/cwire/cwire_test.go | 6 +-
.../cwiretest/exemplary/banner-imp-ext.json | 3 +-
.../cwire/cwiretest/exemplary/banner.json | 3 +-
.../cwire/cwiretest/supplemental/204.json | 3 +-
.../cwire/cwiretest/supplemental/500.json | 3 +-
.../cwiretest/supplemental/badresponse.json | 3 +-
adapters/cwire/params_test.go | 2 +-
adapters/datablocks/datablocks.go | 22 +-
adapters/datablocks/datablocks_test.go | 6 +-
.../exemplary/multi-request.json | 3 +-
.../datablockstest/exemplary/native.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../supplemental/bad-response-body.json | 5 +-
.../supplemental/bad-server-response.json | 3 +-
.../supplemental/missing-ext.json | 4 +-
.../supplemental/no-content-response.json | 3 +-
adapters/decenterads/decenterads.go | 16 +-
adapters/decenterads/decenterads_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/bad_status_code.json | 3 +-
.../supplemental/imp_ext_string.json | 2 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-404.json | 3 +-
adapters/decenterads/params_test.go | 2 +-
adapters/deepintent/deepintent.go | 22 +-
adapters/deepintent/deepintent_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../deepintenttest/supplemental/no_ext-1.json | 2 +-
.../deepintenttest/supplemental/no_ext.json | 4 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-404.json | 3 +-
.../deepintenttest/supplemental/wrongimp.json | 3 +-
adapters/deepintent/params_test.go | 2 +-
adapters/definemedia/definemedia.go | 18 +-
adapters/definemedia/definemedia_test.go | 6 +-
.../exemplary/sample-conative-banner.json | 3 +-
.../exemplary/sample-conative-native.json | 3 +-
.../supplemental/nobid-response.json | 3 +-
.../supplemental/nocontent-response.json | 3 +-
.../supplemental/status_400.json | 3 +-
.../supplemental/status_418.json | 3 +-
.../supplemental/unmarshal-error.json | 5 +-
.../supplemental/unsupported-type.json | 3 +-
adapters/definemedia/params_test.go | 2 +-
adapters/dianomi/dianomi.go | 22 +-
adapters/dianomi/dianomi_test.go | 6 +-
.../dianomitest/exemplary/multi-format.json | 3 +-
.../dianomitest/exemplary/multi-native.json | 3 +-
...gle-banner-pricetype-gross-extend-ext.json | 3 +-
.../single-banner-pricetype-gross.json | 3 +-
.../single-banner-pricetype-net.json | 3 +-
.../dianomitest/exemplary/single-banner.json | 3 +-
.../dianomitest/exemplary/single-native.json | 3 +-
.../dianomitest/exemplary/single-video.json | 3 +-
...nners-different-pricetypes-extend-ext.json | 3 +-
.../two-banners-different-pricetypes.json | 3 +-
.../dianomitest/supplemental/bad-request.json | 3 +-
.../supplemental/empty-response.json | 3 +-
.../supplemental/invalid-imp-mediatype.json | 3 +-
.../supplemental/nobid-response.json | 3 +-
.../supplemental/server-error.json | 3 +-
.../supplemental/unparsable-response.json | 5 +-
adapters/dianomi/params_test.go | 2 +-
adapters/displayio/displayio.go | 189 ++
adapters/displayio/displayio_test.go | 22 +
.../displayiotest/exemplary/multi-format.json | 147 +
.../displayiotest/exemplary/multi-imp.json | 211 ++
.../exemplary/simple-banner.json | 117 +
.../displayiotest/exemplary/simple-video.json | 124 +
.../supplemental/bad-response.json | 77 +
.../supplemental/currency-conversion.json | 95 +
.../displayiotest/supplemental/ext.json | 30 +
.../supplemental/nobid-response.json | 72 +
.../supplemental/response-code-invalid.json | 74 +
.../supplemental/seatbid-response.json | 77 +
.../supplemental/unexpected-media-type.json | 105 +
adapters/displayio/params_test.go | 48 +
adapters/dmx/dmx.go | 61 +-
adapters/dmx/dmx_test.go | 14 +-
.../dmx/dmxtest/exemplary/idfa-to-app-id.json | 3 +-
.../exemplary/imp-populated-banner.json | 3 +-
.../exemplary/missing-width-height.json | 3 +-
.../dmx/dmxtest/exemplary/simple-app.json | 3 +-
.../dmx/dmxtest/exemplary/simple-banner.json | 3 +-
.../dmx/dmxtest/exemplary/simple-video.json | 3 +-
adapters/dmx/params_test.go | 3 +-
adapters/driftpixel/driftpixel.go | 160 +
adapters/driftpixel/driftpixel_test.go | 34 +
.../driftpixeltest/exemplary/banner.json | 283 ++
.../exemplary/multi-format.json | 397 +++
.../exemplary/multi-imp-banner.json | 283 ++
.../driftpixeltest/exemplary/native.json | 165 +
.../driftpixeltest/exemplary/video.json | 205 ++
.../supplemental/bad-response.json | 107 +
.../supplemental/empty-mediatype.json | 191 ++
.../supplemental/empty-seatbid-0-bid.json | 112 +
.../supplemental/empty-seatbid.json | 112 +
.../invalid-ext-bidder-object.json | 49 +
.../supplemental/invalid-ext-object.json | 47 +
.../supplemental/invalid-mediatype.json | 188 ++
.../supplemental/status-204.json | 101 +
.../supplemental/status-400.json | 107 +
.../supplemental/status-503.json | 106 +
.../supplemental/unexpected-status.json | 107 +
adapters/driftpixel/params_test.go | 54 +
adapters/dxkulture/dxkulture.go | 18 +-
adapters/dxkulture/dxkulture_test.go | 6 +-
.../dxkulturetest/exemplary/banner.json | 5 +-
.../exemplary/empty-site-domain-ref.json | 5 +-
.../dxkulturetest/exemplary/ipv6.json | 5 +-
.../exemplary/video-test-request.json | 5 +-
.../dxkulturetest/exemplary/video.json | 5 +-
.../supplemental/invalid-imp-ext-bidder.json | 2 +-
.../supplemental/invalid-imp-ext.json | 2 +-
.../supplemental/invalid-response.json | 5 +-
.../dxkulturetest/supplemental/no-mtype.json | 5 +-
.../supplemental/status-code-bad-request.json | 5 +-
.../supplemental/status-code-no-content.json | 5 +-
.../supplemental/status-code-other-error.json | 5 +-
adapters/dxkulture/params_test.go | 2 +-
adapters/e_volution/evolution.go | 18 +-
adapters/e_volution/evolution_test.go | 6 +-
.../exemplary/banner-without-mediatype.json | 3 +-
.../evolutiontest/exemplary/banner.json | 3 +-
.../evolutiontest/exemplary/native.json | 3 +-
.../evolutiontest/exemplary/video.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/empty-seatbid.json | 3 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-400.json | 3 +-
.../supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/e_volution/params_test.go | 2 +-
adapters/edge226/edge226.go | 16 +-
adapters/edge226/edge226_test.go | 6 +-
.../edge226test/exemplary/endpointId.json | 3 +-
.../edge226test/exemplary/simple-banner.json | 3 +-
.../edge226test/exemplary/simple-native.json | 3 +-
.../edge226test/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../edge226test/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/edge226/params_test.go | 2 +-
adapters/emtv/emtv.go | 18 +-
adapters/emtv/emtv_test.go | 6 +-
.../emtv/emtvtest/exemplary/endpointId.json | 3 +-
.../emtvtest/exemplary/simple-banner.json | 3 +-
.../emtvtest/exemplary/simple-native.json | 3 +-
.../emtv/emtvtest/exemplary/simple-video.json | 3 +-
.../emtvtest/exemplary/simple-web-banner.json | 3 +-
.../emtvtest/supplemental/bad_media_type.json | 3 +-
.../emtvtest/supplemental/bad_response.json | 5 +-
.../emtvtest/supplemental/status-204.json | 3 +-
.../emtvtest/supplemental/status-not-200.json | 3 +-
adapters/emtv/params_test.go | 2 +-
adapters/eplanning/eplanning.go | 25 +-
adapters/eplanning/eplanning_test.go | 8 +-
.../exemplary/simple-banner-2.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../eplanningtest/exemplary/two-banners.json | 3 +-
.../app-domain-and-url-correctly-parsed.json | 3 +-
.../supplemental/bad-imp-ext.json | 2 +-
...anner-2-sizes-in-priority-list-mobile.json | 3 +-
...nner-3-sizes-in-priority-list-desktop.json | 3 +-
...anner-3-sizes-in-priority-list-mobile.json | 3 +-
...er-3-sizes-inout-priority-list-mobile.json | 3 +-
...nner-4-sizes-in-priority-list-desktop.json | 3 +-
.../banner-no-size-sends-1x1.json | 3 +-
.../invalid-response-no-bids.json | 3 +-
.../invalid-response-unmarshall-error.json | 7 +-
.../supplemental/server-bad-request.json | 3 +-
.../supplemental/server-error-code.json | 3 +-
.../supplemental/server-no-content.json | 3 +-
.../site-domain-and-url-correctly-parsed.json | 3 +-
.../site-page-and-url-correctly-parsed.json | 3 +-
...eo_outstream-only-send-video-instream.json | 3 +-
...d-1_video_instream-send-only-instream.json | 3 +-
...1_video_outstream-send-only-outstream.json | 3 +-
...am-and-1_outstream-send-only-instream.json | 3 +-
.../supplemental/two-imps-video-instream.json | 3 +-
.../video-no-placement-send-vctx-2.json | 3 +-
.../video-no-size-send-640x480.json | 3 +-
.../video-partial-size-send-640x480.json | 72 +
.../video-placement-1-send-vctx-1.json | 3 +-
.../video-placement-no-1-send-vctx-2.json | 3 +-
.../video-zero-size-send-640x480.json | 73 +
adapters/epom/epom.go | 14 +-
adapters/epom/epom_test.go | 6 +-
.../epomtest/exemplary/simple-app-banner.json | 3 +-
.../epomtest/exemplary/simple-app-native.json | 3 +-
.../epomtest/exemplary/simple-app-video.json | 3 +-
.../exemplary/simple-site-banner.json | 3 +-
.../exemplary/simple-site-native.json | 3 +-
.../epomtest/exemplary/simple-site-video.json | 3 +-
.../bad-response-bad-request-error.json | 3 +-
.../bad-response-no-bid-obj-error.json | 3 +-
.../bad-response-no-seatbid-error.json | 3 +-
.../bad-response-server-internal-error.json | 3 +-
.../bad-response-unexpected-error.json | 3 +-
adapters/escalax/escalax.go | 163 +
adapters/escalax/escalax_test.go | 28 +
.../escalaxtest/exemplary/banner-app.json | 155 +
.../escalaxtest/exemplary/banner-web.json | 203 ++
.../escalaxtest/exemplary/native-app.json | 151 +
.../escalaxtest/exemplary/native-web.json | 138 +
.../escalaxtest/exemplary/video-app.json | 164 +
.../escalaxtest/exemplary/video-web.json | 162 +
.../supplemental/bad_media_type.json | 139 +
.../supplemental/empty-seatbid-array.json | 133 +
.../invalid-bidder-ext-object.json | 33 +
.../supplemental/invalid-ext-object.json | 31 +
.../supplemental/invalid-response.json | 115 +
.../supplemental/status-code-bad-request.json | 96 +
.../supplemental/status-code-other-error.json | 84 +
adapters/escalax/params_test.go | 52 +
adapters/flipp/flipp.go | 77 +-
adapters/flipp/flipp_params.go | 2 +-
adapters/flipp/flipp_test.go | 66 +-
.../exemplary/simple-banner-dtx.json | 3 +-
...ple-banner-native-param-transmit-eids.json | 182 +
...simple-banner-native-param-user-coppa.json | 178 +
.../simple-banner-native-param-user-gdpr.json | 178 +
.../simple-banner-native-param-user.json | 8 +-
.../exemplary/simple-banner-native.json | 3 +-
.../flipptest/supplemental/bad-response.json | 5 +-
.../supplemental/status-not-200.json | 3 +-
adapters/flipp/params_test.go | 2 +-
adapters/freewheelssp/freewheelssp.go | 35 +-
adapters/freewheelssp/freewheelssp_test.go | 7 +-
.../freewheelssptest/exemplary/multi-imp.json | 33 +-
.../exemplary/single-imp.json | 3 +-
.../exemplary/string-single-imp.json | 3 +-
.../supplemental/204-bid-response.json | 3 +-
.../supplemental/503-bid-response.json | 3 +-
adapters/frvradn/frvradn.go | 20 +-
adapters/frvradn/frvradn_test.go | 9 +-
.../frvradn/frvradntest/exemplary/banner.json | 3 +-
.../frvradn/frvradntest/exemplary/native.json | 3 +-
.../frvradn/frvradntest/exemplary/video.json | 3 +-
.../frvradn/frvradntest/supplemental/204.json | 3 +-
.../frvradn/frvradntest/supplemental/400.json | 3 +-
.../frvradn/frvradntest/supplemental/503.json | 3 +-
.../supplemental/currency_converter.json | 3 +-
.../supplemental/empty_object_response.json | 3 +-
.../supplemental/empty_reponse.json | 3 +-
.../supplemental/missing_bid_ext.json | 3 +-
.../supplemental/unknown_imp_media_type.json | 3 +-
adapters/frvradn/params_test.go | 2 +-
adapters/gamma/gamma.go | 29 +-
adapters/gamma/gamma_test.go | 6 +-
.../exemplary/banner-and-video-and-audio.json | 6 +-
.../gammatest/exemplary/simple-banner.json | 3 +-
.../gammatest/exemplary/valid-extension.json | 3 +-
.../exemplary/valid-full-params.json | 3 +-
.../gammatest/supplemental/bad-request.json | 3 +-
.../supplemental/bad-response-no-body.json | 7 +-
.../gammatest/supplemental/ignore-imp.json | 6 +-
.../gammatest/supplemental/missing-adm.json | 3 +-
.../supplemental/nobid-signaling.json | 3 +-
.../supplemental/status-forbidden.json | 3 +-
.../supplemental/status-no-content.json | 3 +-
adapters/gamma/params_test.go | 2 +-
adapters/gamoshi/gamoshi.go | 20 +-
adapters/gamoshi/gamoshi_test.go | 6 +-
.../exemplary/banner-and-audio.json | 3 +-
.../exemplary/banner-and-video.json | 3 +-
.../exemplary/banner-native-audio.json | 3 +-
.../exemplary/banner-video-native.json | 3 +-
.../gamoshitest/exemplary/simple-banner.json | 3 +-
.../gamoshitest/exemplary/simple-video.json | 3 +-
.../exemplary/valid-extension.json | 3 +-
.../exemplary/valid-with-device.json | 3 +-
.../exemplary/video-and-audio.json | 3 +-
.../supplemental/bad-response-no-body.json | 7 +-
.../supplemental/status-bad-request.json | 3 +-
.../supplemental/status-no-content.json | 3 +-
.../supplemental/unexpected-status-code.json | 3 +-
adapters/gamoshi/params_test.go | 2 +-
adapters/globalsun/globalsun.go | 14 +-
adapters/globalsun/globalsun_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native.json | 3 +-
.../globalsuntest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/globalsun/params_test.go | 2 +-
adapters/gothamads/gothamads.go | 20 +-
adapters/gothamads/gothamads_test.go | 6 +-
.../gothamadstest/exemplary/banner-app.json | 3 +-
.../gothamadstest/exemplary/banner-web.json | 3 +-
.../gothamadstest/exemplary/native-app.json | 3 +-
.../gothamadstest/exemplary/native-web.json | 3 +-
.../gothamadstest/exemplary/video-app.json | 3 +-
.../gothamadstest/exemplary/video-web.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../invalid-bidder-ext-object.json | 2 +-
.../invalid-gotham-ext-object.json | 2 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/gothamads/params_test.go | 2 +-
adapters/grid/grid.go | 40 +-
adapters/grid/grid_test.go | 6 +-
.../gridtest/exemplary/multitype-banner.json | 3 +-
.../gridtest/exemplary/multitype-native.json | 3 +-
.../gridtest/exemplary/multitype-video.json | 3 +-
.../gridtest/exemplary/native-as-string.json | 3 +-
.../gridtest/exemplary/simple-banner.json | 3 +-
.../gridtest/exemplary/simple-native.json | 3 +-
.../grid/gridtest/exemplary/simple-video.json | 3 +-
.../gridtest/exemplary/with-ext-keywords.json | 3 +-
.../gridtest/exemplary/with-keywords.json | 3 +-
.../exemplary/with-mixed-keywords.json | 3 +-
.../exemplary/with-site-keywords.json | 3 +-
.../exemplary/with-siteuser-keywords.json | 3 +-
.../exemplary/with-user-keywords.json | 3 +-
.../grid/gridtest/exemplary/with_gpid.json | 3 +-
.../supplemental/bad_bidder_request.json | 2 +-
.../supplemental/bad_ext_request.json | 2 +-
.../gridtest/supplemental/bad_response.json | 5 +-
.../gridtest/supplemental/status_204.json | 3 +-
.../gridtest/supplemental/status_400.json | 3 +-
.../gridtest/supplemental/status_418.json | 3 +-
adapters/gumgum/gumgum.go | 55 +-
adapters/gumgum/gumgum_test.go | 6 +-
.../gumgum/gumgumtest/exemplary/banner.json | 3 +-
.../gumgum/gumgumtest/exemplary/video.json | 3 +-
.../supplemental/banner-only-in-format.json | 3 +-
.../banner-with-pubId-product-params.json | 105 +
.../supplemental/banner-with-pubId.json | 3 +-
.../supplemental/banner-with-site.json | 3 +-
.../supplemental/banner-with-slot-param.json | 3 +-
.../supplemental/convert-currency.json | 111 +
.../supplemental/missing-video-params.json | 36 -
.../supplemental/video-partial-size.json | 105 +
.../supplemental/video-with-irisid.json | 3 +-
.../supplemental/video-zero-size.json | 107 +
adapters/gumgum/params_test.go | 7 +-
adapters/huaweiads/huaweiads.go | 158 +-
adapters/huaweiads/huaweiads_test.go | 6 +-
.../huaweiadstest/exemplary/banner1.json | 3 +-
.../exemplary/banner1_without_userext.json | 3 +-
.../huaweiadstest/exemplary/banner2.json | 3 +-
.../huaweiadstest/exemplary/banner3.json | 3 +-
.../exemplary/banner4_mccmnc.json | 3 +-
.../exemplary/banner5_user_geo.json | 3 +-
.../huaweiadstest/exemplary/banner6_imei.json | 3 +-
.../exemplary/bannerAppPromotionType.json | 3 +-
.../exemplary/bannerNonIntegerMccmnc.json | 3 +-
.../exemplary/bannerNotAppPromotionType.json | 3 +-
.../exemplary/bannerTestExtraInfo1.json | 3 +-
.../exemplary/bannerTestExtraInfo2.json | 3 +-
.../exemplary/bannerTestExtraInfo3.json | 3 +-
.../exemplary/bannerWrongMccmnc.json | 3 +-
.../exemplary/interstitialBannerType.json | 3 +-
.../exemplary/interstitialVideoType.json | 3 +-
.../exemplary/nativeIncludeVideo.json | 26 +-
.../exemplary/nativeMultiSizesByRange.json | 307 ++
.../exemplary/nativeMultiSizesByRatio.json | 307 ++
.../exemplary/nativeSingleImage.json | 20 +-
.../exemplary/nativeThreeImage.json | 25 +-
.../nativeThreeImageIncludeIcon.json | 14 +-
.../exemplary/rewardedVideo.json | 3 +-
.../exemplary/rewardedVideo1.json | 3 +-
.../exemplary/rewardedVideo2.json | 3 +-
.../exemplary/rewardedVideo3.json | 3 +-
.../exemplary/rewardedVideo4.json | 3 +-
.../huaweiadstest/exemplary/rollVideo.json | 3 +-
.../huaweiadstest/exemplary/video.json | 3 +-
.../supplemental/bad_response.json | 3 +-
.../supplemental/bad_response_400.json | 3 +-
.../supplemental/bad_response_503.json | 3 +-
.../bad_response_dont_find_impid.json | 3 +-
.../bad_response_incorrect_huawei_adtype.json | 3 +-
.../supplemental/bad_response_not_intent.json | 3 +-
.../supplemental/bad_response_not_native.json | 43 +-
.../bad_response_retcode30_204.json | 3 +-
.../bad_response_retcode_210.json | 3 +-
.../bad_response_retcode_408.json | 3 +-
.../bad_response_retcode_500.json | 3 +-
.../supplemental/missing_deviceid2.json | 2 +-
.../supplemental/missing_video_size.json | 337 ++
.../supplemental/zero_video_size.json | 339 ++
adapters/huaweiads/params_test.go | 3 +-
adapters/imds/imds.go | 24 +-
adapters/imds/imds_test.go | 6 +-
.../imdstest/exemplary/simple-banner.json | 3 +-
.../imds/imdstest/exemplary/simple-video.json | 3 +-
.../imdstest/supplemental/audio_response.json | 3 +-
.../imdstest/supplemental/bad_response.json | 5 +-
.../imdstest/supplemental/bad_seat_id.json | 2 +-
.../supplemental/native_response.json | 3 +-
.../imdstest/supplemental/one_bad_ext.json | 3 +-
.../imdstest/supplemental/status_204.json | 3 +-
.../imdstest/supplemental/status_400.json | 3 +-
.../imdstest/supplemental/status_500.json | 3 +-
adapters/imds/params_test.go | 2 +-
adapters/impactify/impactify.go | 16 +-
adapters/impactify/impactify_test.go | 6 +-
.../exemplary/sample_banner.json | 3 +-
.../impactifytest/exemplary/sample_video.json | 3 +-
.../supplemental/bad_response.json | 3 +-
.../impactifytest/supplemental/buyeruid.json | 3 +-
.../impactifytest/supplemental/headers.json | 3 +-
.../supplemental/headers_ip.json | 3 +-
.../impactifytest/supplemental/http_204.json | 3 +-
.../impactifytest/supplemental/http_400.json | 3 +-
.../impactifytest/supplemental/http_500.json | 3 +-
.../supplemental/negative_price.json | 3 +-
.../supplemental/no_seat_bid.json | 3 +-
.../not_supported_media_type.json | 3 +-
.../impactifytest/supplemental/referer.json | 3 +-
adapters/impactify/params_test.go | 2 +-
adapters/improvedigital/improvedigital.go | 102 +-
.../improvedigital/improvedigital_test.go | 6 +-
.../exemplary/app-multi.json | 9 +-
.../improvedigitaltest/exemplary/audio.json | 3 +-
.../improvedigitaltest/exemplary/native.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/site-multi.json | 9 +-
.../supplemental/ad-server-url.json | 3 +-
.../supplemental/addtl-consent.json | 94 -
.../supplemental/bad_response.json | 5 +-
.../supplemental/dealid.json | 15 +-
.../supplemental/foreign-currency.json | 3 +-
.../missing_and_unsupported_mtype.json | 9 +-
.../supplemental/multi-seatbid.json | 3 +-
.../supplemental/nobid-debug.json | 3 +-
.../supplemental/nobid.json | 3 +-
.../supplemental/noseatbid.json | 3 +-
.../supplemental/rewarded-inventory.json | 9 +-
.../supplemental/status_204.json | 3 +-
.../supplemental/status_400.json | 3 +-
.../supplemental/status_418.json | 3 +-
.../supplemental/wrong_impid.json | 3 +-
adapters/improvedigital/params_test.go | 6 +-
adapters/infoawarebidder.go | 8 +-
adapters/infoawarebidder_test.go | 10 +-
adapters/infytv/infytv.go | 14 +-
adapters/infytv/infytv_test.go | 6 +-
adapters/infytv/infytvtest/exemplary/app.json | 3 +-
.../infytv/infytvtest/exemplary/video.json | 3 +-
.../infytvtest/supplemental/bad-response.json | 5 +-
.../supplemental/empty-seatbid.json | 3 +-
.../infytvtest/supplemental/status-204.json | 3 +-
.../infytvtest/supplemental/status-400.json | 3 +-
.../infytvtest/supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/infytv/params_test.go | 2 +-
adapters/inmobi/inmobi.go | 46 +-
adapters/inmobi/inmobi_test.go | 6 +-
.../exemplary/simple-app-banner.json | 7 +-
.../exemplary/simple-app-native.json | 7 +-
.../exemplary/simple-app-video.json | 7 +-
.../exemplary/simple-web-banner.json | 7 +-
.../exemplary/simple-web-native.json | 106 +
.../exemplary/simple-web-video.json | 7 +-
.../inmobi/inmobitest/supplemental/204.json | 3 +-
.../inmobi/inmobitest/supplemental/400.json | 3 +-
.../supplemental/banner-format-coersion.json | 7 +-
.../supplemental/invalid-mtype.json | 97 +
.../interactiveoffers/interactiveoffers.go | 20 +-
.../interactiveoffers_test.go | 6 +-
.../exemplary/goodmultiplebidrequest.json | 3 +-
.../exemplary/goodsinglebidrequest.json | 3 +-
.../supplemental/204.json | 3 +-
.../supplemental/400.json | 3 +-
.../supplemental/not200.json | 3 +-
.../supplemental/wrongjsonresponse.json | 5 +-
adapters/interactiveoffers/params_test.go | 3 +-
adapters/invibes/invibes.go | 34 +-
adapters/invibes/invibes_test.go | 6 +-
adapters/invibes/invibestest/amp/amp-ad.json | 3 +-
.../invibestest/exemplary/advanced-ad.json | 3 +-
.../invibestest/exemplary/basic-ad.json | 3 +-
.../invibes/invibestest/exemplary/no-ad.json | 3 +-
.../invibestest/exemplary/test-ad.json | 3 +-
.../supplemental/request-error-servererr.json | 3 +-
.../request-error-statuscode.json | 3 +-
adapters/invibes/params_test.go | 2 +-
adapters/iqx/iqx.go | 20 +-
adapters/iqx/iqxtest_test.go | 6 +-
.../iqx/iqzonextest/exemplary/banner.json | 6 +-
.../iqx/iqzonextest/exemplary/native.json | 3 +-
adapters/iqx/iqzonextest/exemplary/video.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/empty-mediatype.json | 3 +-
.../supplemental/empty-seatbid-0-bid.json | 3 +-
.../supplemental/empty-seatbid.json | 3 +-
.../invalid-ext-bidder-object.json | 2 +-
.../supplemental/invalid-ext-object.json | 2 +-
.../supplemental/invalid-mediatype.json | 3 +-
.../iqzonextest/supplemental/status-204.json | 3 +-
.../iqzonextest/supplemental/status-400.json | 3 +-
.../iqzonextest/supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/iqx/params_test.go | 2 +-
adapters/iqzone/iqzone.go | 47 +-
adapters/iqzone/iqzone_test.go | 6 +-
.../iqzonetest/exemplary/endpointId.json | 5 +-
.../iqzonetest/exemplary/simple-banner.json | 5 +-
.../iqzonetest/exemplary/simple-native.json | 7 +-
.../iqzonetest/exemplary/simple-video.json | 5 +-
.../exemplary/simple-web-banner.json | 5 +-
.../supplemental/bad_media_type.json | 5 +-
.../iqzonetest/supplemental/bad_response.json | 5 +-
.../iqzonetest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/iqzone/params_test.go | 2 +-
adapters/ix/ix.go | 94 +-
adapters/ix/ix_test.go | 159 +-
.../ixtest/exemplary/additional-consent.json | 3 +-
adapters/ix/ixtest/exemplary/app-site-id.json | 3 +-
.../ix/ixtest/exemplary/banner-no-format.json | 3 +-
adapters/ix/ixtest/exemplary/fledge.json | 172 +
.../multi-format-with-ext-prebid-type.json | 3 +-
.../exemplary/multi-format-with-mtype.json | 3 +-
.../multi-imp-multi-size-requests.json | 3 +-
.../ixtest/exemplary/multi-imp-requests.json | 3 +-
adapters/ix/ixtest/exemplary/multibid.json | 3 +-
.../ix/ixtest/exemplary/multiple-siteIds.json | 3 +-
.../native-eventtrackers-compat-12.json | 3 +-
adapters/ix/ixtest/exemplary/no-pub-id.json | 3 +-
adapters/ix/ixtest/exemplary/no-pub.json | 3 +-
.../ix/ixtest/exemplary/simple-audio.json | 3 +-
.../exemplary/simple-banner-multi-size.json | 3 +-
.../ix/ixtest/exemplary/simple-native.json | 3 +-
.../ix/ixtest/exemplary/simple-video.json | 3 +-
.../ix/ixtest/exemplary/structured-pod.json | 3 +-
.../supplemental/app-site-id-publisher.json | 3 +-
.../ixtest/supplemental/bad-ext-bidder.json | 2 +-
.../ix/ixtest/supplemental/bad-ext-ix.json | 4 +-
.../ix/ixtest/supplemental/bad-fledge.json | 135 +
.../ix/ixtest/supplemental/bad-imp-id.json | 3 +-
.../ix/ixtest/supplemental/bad-request.json | 3 +-
.../supplemental/bad-response-body.json | 5 +-
.../ix/ixtest/supplemental/dsa-request.json | 194 ++
.../ix/ixtest/supplemental/fledge-no-bid.json | 138 +
.../multi-imp-requests-error.json | 5 +-
.../native-eventtrackers-empty.json | 3 +-
.../native-eventtrackers-missing.json | 3 +-
.../ixtest/supplemental/native-missing.json | 3 +-
.../ix/ixtest/supplemental/no-content.json | 3 +-
.../ix/ixtest/supplemental/not-found.json | 3 +-
adapters/ix/ixtest/supplemental/sid.json | 3 +-
adapters/ix/params_test.go | 2 +-
adapters/jixie/jixie.go | 14 +-
adapters/jixie/jixie_test.go | 6 +-
.../exemplary/banner-and-video-site.json | 3 +-
.../jixietest/supplemental/add-accountid.json | 3 +-
.../jixietest/supplemental/add-extraprop.json | 3 +-
.../jixietest/supplemental/add-userid.json | 3 +-
adapters/jixie/params_test.go | 2 +-
adapters/kargo/kargo.go | 16 +-
adapters/kargo/kargo_test.go | 6 +-
.../kargo/kargotest/exemplary/banner.json | 3 +-
.../kargo/kargotest/exemplary/native.json | 3 +-
adapters/kargo/kargotest/exemplary/video.json | 3 +-
.../supplemental/status-bad-request.json | 9 +-
.../supplemental/status-no-content.json | 3 +-
adapters/kargo/params_test.go | 2 +-
adapters/kayzen/kayzen.go | 20 +-
adapters/kayzen/kayzen_test.go | 6 +-
.../kayzentest/exemplary/banner-app.json | 3 +-
.../kayzentest/exemplary/banner-web.json | 3 +-
.../kayzentest/exemplary/native-app.json | 3 +-
.../kayzentest/exemplary/native-web.json | 3 +-
.../kayzentest/exemplary/video-app.json | 3 +-
.../kayzentest/exemplary/video-web.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
adapters/kayzen/params_test.go | 2 +-
adapters/kidoz/kidoz.go | 18 +-
adapters/kidoz/kidoz_test.go | 12 +-
.../kidoztest/exemplary/simple-banner.json | 3 +-
.../kidoztest/exemplary/simple-video.json | 3 +-
.../kidoz/kidoztest/supplemental/bad-bid.json | 3 +-
.../supplemental/bidder-marshal.json | 2 +-
.../kidoztest/supplemental/ext-marshal.json | 2 +-
.../kidoztest/supplemental/status-204.json | 3 +-
.../kidoztest/supplemental/status-400.json | 3 +-
.../kidoztest/supplemental/status-403.json | 3 +-
.../kidoztest/supplemental/status-408.json | 3 +-
.../kidoztest/supplemental/status-500.json | 3 +-
.../kidoztest/supplemental/status-502.json | 3 +-
.../kidoztest/supplemental/status-503.json | 3 +-
.../kidoztest/supplemental/status-504.json | 3 +-
adapters/kidoz/params_test.go | 2 +-
adapters/kiviads/kiviads.go | 18 +-
adapters/kiviads/kiviads_test.go | 6 +-
.../kiviadstest/exemplary/endpointId.json | 3 +-
.../kiviadstest/exemplary/simple-banner.json | 3 +-
.../kiviadstest/exemplary/simple-native.json | 3 +-
.../kiviadstest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../kiviadstest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/kiviads/params_test.go | 2 +-
adapters/krushmedia/krushmedia.go | 20 +-
adapters/krushmedia/krushmedia_test.go | 6 +-
.../krushmediatest/exemplary/banner-app.json | 3 +-
.../krushmediatest/exemplary/banner-web.json | 3 +-
.../krushmediatest/exemplary/native-app.json | 3 +-
.../krushmediatest/exemplary/native-web.json | 3 +-
.../krushmediatest/exemplary/video-app.json | 3 +-
.../krushmediatest/exemplary/video-web.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/krushmedia/params_test.go | 2 +-
adapters/lemmadigital/lemmadigital.go | 27 +-
adapters/lemmadigital/lemmadigital_test.go | 8 +-
.../lemmadigitaltest/exemplary/banner.json | 5 +-
.../lemmadigitaltest/exemplary/multi-imp.json | 5 +-
.../lemmadigitaltest/exemplary/video.json | 5 +-
.../supplemental/empty-seatbid-array.json | 5 +-
.../invalid-ld-ext-bidder-object.json | 4 +-
.../supplemental/invalid-ld-ext-object.json | 4 +-
.../supplemental/invalid-response.json | 7 +-
.../supplemental/status-code-bad-request.json | 5 +-
.../supplemental/status-code-no-content.json | 5 +-
.../supplemental/status-code-other-error.json | 5 +-
adapters/lemmadigital/params_test.go | 2 +-
adapters/liftoff/liftoff_test.go | 21 -
.../LimelightDigitaltest/exemplary/audio.json | 3 +-
.../exemplary/banner.json | 3 +-
.../exemplary/multibid.json | 6 +-
.../exemplary/native.json | 3 +-
.../LimelightDigitaltest/exemplary/video.json | 3 +-
.../supplemental/204.json | 3 +-
.../supplemental/503.json | 3 +-
.../supplemental/additional_fields.json | 3 +-
.../supplemental/currency_converter.json | 3 +-
.../supplemental/empty_object_response.json | 3 +-
.../supplemental/empty_reponse.json | 3 +-
.../supplemental/publisher_id_string.json | 3 +-
.../supplemental/unknown_bid_impid.json | 3 +-
.../supplemental/unknown_imp_media_type.json | 3 +-
adapters/limelightDigital/limelightDigital.go | 22 +-
.../limelightDigital/limelightDigital_test.go | 9 +-
adapters/limelightDigital/params_test.go | 2 +-
adapters/lm_kiviads/lmkiviads.go | 22 +-
adapters/lm_kiviads/lmkiviads_test.go | 6 +-
.../lmkiviadstest/exemplary/banner.json | 6 +-
.../lmkiviadstest/exemplary/native.json | 3 +-
.../lmkiviadstest/exemplary/video.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/empty-mediatype.json | 3 +-
.../supplemental/empty-seatbid-0-bid.json | 3 +-
.../supplemental/empty-seatbid.json | 3 +-
.../invalid-ext-bidder-object.json | 2 +-
.../supplemental/invalid-ext-object.json | 2 +-
.../supplemental/invalid-mediatype.json | 3 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-400.json | 3 +-
.../supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/lm_kiviads/params_test.go | 2 +-
adapters/lockerdome/lockerdome.go | 18 +-
adapters/lockerdome/lockerdome_test.go | 6 +-
.../exemplary/simple-banner-multiple.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/empty_seatbid.json | 3 +-
.../supplemental/status_204.json | 3 +-
.../supplemental/status_400.json | 3 +-
.../supplemental/status_418.json | 3 +-
adapters/lockerdome/params_test.go | 2 +-
adapters/logan/logan.go | 16 +-
adapters/logan/logan_test.go | 6 +-
.../logantest/exemplary/simple-banner.json | 3 +-
.../logantest/exemplary/simple-native.json | 3 +-
.../logantest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../logantest/supplemental/bad_response.json | 5 +-
.../logantest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/logan/params_test.go | 2 +-
adapters/logicad/logicad.go | 20 +-
adapters/logicad/logicad_test.go | 6 +-
.../logicad/logicadtest/exemplary/banner.json | 3 +-
.../logicad/logicadtest/supplemental/ext.json | 4 +-
.../supplemental/multiImpSameTid.json | 3 +-
.../supplemental/responseCode.json | 3 +-
.../supplemental/responseNoBid.json | 3 +-
.../logicadtest/supplemental/responsebid.json | 3 +-
.../logicadtest/supplemental/site.json | 3 +-
adapters/logicad/params_test.go | 3 +-
adapters/loyal/loyal.go | 165 +
adapters/loyal/loyal_test.go | 20 +
.../loyal/loyaltest/exemplary/endpointId.json | 134 +
.../loyaltest/exemplary/multi-format.json | 105 +
.../loyal/loyaltest/exemplary/multi-imp.json | 249 ++
.../loyaltest/exemplary/simple-banner.json | 134 +
.../loyaltest/exemplary/simple-native.json | 118 +
.../loyaltest/exemplary/simple-video.json | 129 +
.../exemplary/simple-web-banner.json | 134 +
.../supplemental/bad_media_type.json | 83 +
.../loyaltest/supplemental/bad_response.json | 85 +
.../supplemental/no-valid-impressions.json | 20 +
.../loyaltest/supplemental/status-204.json | 80 +
.../supplemental/status-not-200.json | 85 +
adapters/loyal/params_test.go | 47 +
adapters/lunamedia/lunamedia.go | 22 +-
adapters/lunamedia/lunamedia_test.go | 6 +-
.../lunamediatest/exemplary/banner.json | 3 +-
.../lunamediatest/exemplary/video.json | 3 +-
.../lunamediatest/supplemental/compat.json | 3 +-
.../lunamediatest/supplemental/ext.json | 4 +-
.../supplemental/responseCode.json | 3 +-
.../supplemental/responsebid.json | 3 +-
.../lunamediatest/supplemental/site.json | 3 +-
adapters/lunamedia/params_test.go | 3 +-
adapters/mabidder/mabidder.go | 12 +-
adapters/mabidder/mabidder_test.go | 6 +-
.../exemplary/simple-app-banner.json | 3 +-
.../supplemental/bad-request-example.json | 3 +-
.../supplemental/bad-response-malformed.json | 7 +-
.../supplemental/bad-response-status-500.json | 3 +-
.../supplemental/no-content-response.json | 3 +-
adapters/mabidder/params_test.go | 2 +-
adapters/madvertise/madvertise.go | 22 +-
adapters/madvertise/madvertise_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 4 +-
.../supplemental/display-site-test.json | 3 +-
.../supplemental/required-ext.json | 4 +-
.../supplemental/response-204.json | 3 +-
.../supplemental/response-400.json | 3 +-
.../supplemental/response-500.json | 3 +-
adapters/madvertise/params_test.go | 2 +-
adapters/marsmedia/marsmedia.go | 18 +-
adapters/marsmedia/marsmedia_test.go | 6 +-
.../exemplary/simple-banner-int-param.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../marsmediatest/exemplary/simple-video.json | 3 +-
.../exemplary/valid-extension.json | 3 +-
.../supplemental/missing-param.json | 2 +-
adapters/marsmedia/params_test.go | 2 +-
adapters/mediago/mediago.go | 211 ++
adapters/mediago/mediago_test.go | 28 +
.../exemplary/sample-banner-apac.json | 114 +
.../exemplary/sample-banner-euc.json | 114 +
...anner-fallback-to-first-imp-to-get-ep.json | 94 +
.../exemplary/sample-banner-use.json | 114 +
.../mediagotest/exemplary/sample-banner.json | 112 +
.../mediagotest/exemplary/sample-native.json | 91 +
.../mediagotest/exemplary/sample-nobid.json | 62 +
.../exemplary/sample-with-mtype.json | 152 +
.../supplemental/bad_400_reponse.json | 65 +
.../supplemental/bad_500_reponse.json | 66 +
.../mediagotest/supplemental/bad_imp_ext.json | 25 +
.../supplemental/bad_impext_bidder.json | 27 +
.../supplemental/bad_request_no_token.json | 30 +
.../supplemental/bad_response.json | 66 +
.../bad_response_error_mtype.json | 134 +
adapters/mediago/params_test.go | 50 +
adapters/medianet/medianet.go | 39 +-
adapters/medianet/medianet_test.go | 6 +-
.../medianettest/exemplary/multi-format.json | 3 +-
.../medianettest/exemplary/multi-imps.json | 9 +-
.../medianettest/exemplary/no-bid.json | 3 +-
.../exemplary/optional-params.json | 3 +-
.../medianettest/exemplary/simple-banner.json | 9 +-
.../medianettest/exemplary/simple-video.json | 9 +-
...valid-req-400-status-code-bad-request.json | 3 +-
.../valid-req-200-bid-response-from-mnet.json | 17 +-
.../valid-req-204-response-from-mnet.json | 3 +-
adapters/medianet/params_test.go | 2 +-
adapters/melozen/melozen.go | 186 ++
adapters/melozen/melozen_test.go | 30 +
.../melozentest/exemplary/app-banner.json | 132 +
.../melozentest/exemplary/app-native.json | 100 +
.../melozentest/exemplary/app-video.json | 137 +
.../melozentest/exemplary/multi-imps.json | 239 ++
.../melozentest/exemplary/web-banner.json | 138 +
.../melozentest/exemplary/web-video.json | 129 +
.../supplemental/bad-media-type-request.json | 28 +
.../melozentest/supplemental/no-fill.json | 90 +
.../supplemental/response-status-400.json | 95 +
.../supplemental/response-status-not-200.json | 84 +
.../supplemental/wrong-bid-ext.json | 85 +
adapters/melozen/params_test.go | 50 +
adapters/metax/metax.go | 195 ++
adapters/metax/metax_test.go | 214 ++
.../metaxtest/exemplary/app-formats.json | 156 +
.../metax/metaxtest/exemplary/app-imps.json | 351 ++
.../metax/metaxtest/exemplary/no-bid.json | 92 +
.../metaxtest/exemplary/no-seat-bid.json | 99 +
.../metax/metaxtest/exemplary/no-seat.json | 94 +
.../metaxtest/exemplary/simple-app-audio.json | 110 +
.../exemplary/simple-app-banner.json | 122 +
.../exemplary/simple-app-native.json | 99 +
.../metaxtest/exemplary/simple-app-video.json | 130 +
.../exemplary/simple-site-audio.json | 110 +
.../exemplary/simple-site-banner.json | 122 +
.../exemplary/simple-site-native.json | 99 +
.../exemplary/simple-site-video.json | 130 +
.../supplemental/invalid-adunit-error.json | 35 +
.../supplemental/invalid-ext-bidder.json | 32 +
.../metaxtest/supplemental/invalid-ext.json | 30 +
.../supplemental/invalid-publisher-error.json | 35 +
.../metaxtest/supplemental/resp-bad-json.json | 80 +
.../supplemental/resp-bad-markuptype.json | 100 +
.../metaxtest/supplemental/status-400.json | 80 +
.../metaxtest/supplemental/status-500.json | 80 +
.../metaxtest/supplemental/status-503.json | 80 +
adapters/metax/params_test.go | 60 +
adapters/mgid/mgid.go | 20 +-
adapters/mgid/mgid_test.go | 6 +-
.../mgidtest/exemplary/noplacementid.json | 3 +-
.../mgidtest/exemplary/simple-banner.json | 3 +-
.../exemplary/simple-banner_no_device.json | 3 +-
.../simple-banner_no_device_no_site.json | 3 +-
.../exemplary/simple-banner_with_crtype.json | 3 +-
.../mgidtest/supplemental/status_204.json | 3 +-
.../mgidtest/supplemental/status_not200.json | 3 +-
.../mgid/mgidtest/supplemental/video.json | 3 +-
adapters/mgidX/mgidX.go | 18 +-
adapters/mgidX/mgidX_test.go | 6 +-
.../mgidX/mgidXtest/exemplary/endpointId.json | 3 +-
.../mgidXtest/exemplary/simple-banner.json | 3 +-
.../mgidXtest/exemplary/simple-native.json | 3 +-
.../mgidXtest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../mgidXtest/supplemental/bad_response.json | 5 +-
.../mgidXtest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/mgidX/params_test.go | 2 +-
adapters/minutemedia/minutemedia.go | 123 +
adapters/minutemedia/minutemedia_test.go | 24 +
.../exemplary/banner-and-video-app.json | 252 ++
.../exemplary/banner-and-video-gdpr.json | 216 ++
.../exemplary/banner-and-video-site.json | 234 ++
.../exemplary/banner-and-video.json | 194 ++
.../exemplary/simple-banner.json | 118 +
.../exemplary/simple-video.json | 139 +
.../supplemental/bad-request.json | 106 +
.../supplemental/missing-bidder.json | 48 +
.../supplemental/missing-extension.json | 47 +
.../supplemental/missing-mtype.json | 150 +
adapters/missena/missena.go | 216 ++
adapters/missena/missena_test.go | 21 +
.../missenatest/exemplary/multiple-imps.json | 129 +
.../exemplary/simple-banner-ipv6.json | 105 +
.../missenatest/exemplary/simple-banner.json | 105 +
.../exemplary/valid-imp-error-imp.json | 129 +
.../supplemental/error-ext-bidder.json | 25 +
.../supplemental/error-imp-ext.json | 23 +
.../missenatest/supplemental/status-204.json | 83 +
.../missenatest/supplemental/status-400.json | 89 +
.../supplemental/status-not-200.json | 89 +
adapters/missena/params_test.go | 50 +
adapters/mobfoxpb/mobfoxpb.go | 16 +-
adapters/mobfoxpb/mobfoxpb_test.go | 6 +-
.../exemplary/simple-banner-direct-route.json | 3 +-
.../exemplary/simple-banner-rtb-route.json | 3 +-
.../exemplary/simple-video-direct-route.json | 3 +-
.../exemplary/simple-video-rtb-route.json | 3 +-
.../simple-web-banner-direct-route.json | 3 +-
.../simple-web-banner-rtb-route.json | 3 +-
.../supplemental/bad-imp-ext.json | 2 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/bad_status_code.json | 3 +-
.../supplemental/imp_ext_empty_object.json | 2 +-
.../supplemental/imp_ext_string.json | 2 +-
.../supplemental/missmatch_bid_id.json | 3 +-
.../mobfoxpbtest/supplemental/status-204.json | 3 +-
.../mobfoxpbtest/supplemental/status-404.json | 3 +-
adapters/mobfoxpb/params_test.go | 2 +-
adapters/mobilefuse/mobilefuse.go | 28 +-
adapters/mobilefuse/mobilefuse_test.go | 6 +-
.../exemplary/multi-format.json | 3 +-
.../exemplary/multi-imps-multi-format.json | 3 +-
.../mobilefusetest/exemplary/multi-imps.json | 3 +-
.../mobilefusetest/exemplary/no-bid.json | 3 +-
.../exemplary/optional-params.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../mobilefusetest/exemplary/skadn.json | 3 +-
.../supplemental/bad-ext-bidder.json | 2 +-
.../mobilefusetest/supplemental/bad-ext.json | 2 +-
.../supplemental/bad-status-code.json | 3 +-
.../supplemental/server-error-response.json | 3 +-
adapters/mobilefuse/params_test.go | 2 +-
adapters/motorik/motorik.go | 20 +-
adapters/motorik/motorik_test.go | 6 +-
.../motoriktest/exemplary/banner-app.json | 3 +-
.../motoriktest/exemplary/banner-web.json | 3 +-
.../motoriktest/exemplary/native-app.json | 3 +-
.../motoriktest/exemplary/native-web.json | 3 +-
.../motoriktest/exemplary/video-app.json | 3 +-
.../motoriktest/exemplary/video-web.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../invalid-bidder-ext-object.json | 2 +-
.../invalid-motorik-ext-object.json | 2 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/motorik/params_test.go | 2 +-
adapters/nativo/nativo.go | 96 +
adapters/nativo/nativo_test.go | 21 +
.../nativotest/exemplary/banner-app.json | 133 +
.../nativotest/exemplary/banner-web.json | 121 +
.../nativotest/exemplary/native-app.json | 130 +
.../nativotest/exemplary/native-web.json | 117 +
.../nativotest/exemplary/video-app.json | 143 +
.../nativotest/exemplary/video-web.json | 141 +
...-different-impID-response-from-nativo.json | 81 +
.../204-response-from-nativo.json | 53 +
.../400-response-from-nativo.json | 58 +
.../500-response-from-nativo.json | 58 +
adapters/nextmillennium/nextmillennium.go | 86 +-
.../nextmillennium/nextmillennium_test.go | 19 +-
.../exemplary/banner-empty-group-id.json | 20 +-
.../exemplary/banner-with-group-id.json | 20 +-
.../exemplary/banner-with-group-id_app.json | 20 +-
.../exemplary/banner-with-only-width.json | 20 +-
.../exemplary/banner-with-wh.json | 20 +-
.../exemplary/banner-wo-domain.json | 20 +-
.../exemplary/banner-wo-size.json | 20 +-
.../nextmillenniumtest/exemplary/banner.json | 20 +-
.../exemplary/empty-banner-obj.json | 20 +-
.../nextmillenniumtest/exemplary/video.json | 119 +
.../supplemental/empty-seatbid.json | 10 +-
.../supplemental/error-response.json | 10 +-
.../nextmillenniumtest/supplemental/ext.json | 4 +-
.../supplemental/no-content.json | 10 +-
adapters/nextmillennium/params_test.go | 2 +-
adapters/nobid/nobid.go | 16 +-
adapters/nobid/nobid_test.go | 6 +-
.../nobid/nobidtest/exemplary/banner.json | 3 +-
.../nobidtest/supplemental/bad-mediatype.json | 3 +-
.../nobidtest/supplemental/bad-request.json | 3 +-
.../nobidtest/supplemental/bad-response.json | 3 +-
.../nobidtest/supplemental/no-content.json | 3 +-
.../supplemental/notok-response.json | 3 +-
adapters/nobid/params_test.go | 2 +-
adapters/oms/oms.go | 83 +
adapters/oms/oms_test.go | 20 +
.../exemplary/simple-banner-cookie-uid.json | 129 +
.../simple-banner-multiple-bids.json | 217 ++
.../omstest/exemplary/simple-banner-uid.json | 150 +
.../exemplary/simple-multi-type-banner.json | 162 +
.../204-response-from-target.json | 86 +
.../400-response-from-target.json | 91 +
.../500-response-from-target.json | 91 +
.../supplemental/simple-banner-with-ipv6.json | 143 +
adapters/oms/params_test.go | 56 +
adapters/onetag/onetag.go | 20 +-
adapters/onetag/onetag_test.go | 6 +-
.../onetag/onetagtest/exemplary/no-bid.json | 3 +-
.../onetagtest/exemplary/simple-banner.json | 3 +-
.../onetagtest/exemplary/simple-native.json | 3 +-
.../onetagtest/exemplary/simple-video.json | 3 +-
.../supplemental/internal-server-error.json | 3 +-
.../supplemental/wrong-impression-id.json | 3 +-
adapters/onetag/params_test.go | 2 +-
adapters/openweb/openweb.go | 212 +-
adapters/openweb/openweb_test.go | 8 +-
.../exemplary/multiple-imps-same-aid.json | 174 -
.../openwebtest/exemplary/simple-banner.json | 137 +-
.../openwebtest/exemplary/simple-video.json | 24 +-
.../supplemental/missing-mtype.json | 93 +
...lid-imps.json => missing-org-and-aid.json} | 6 +-
.../supplemental/missing-placement-id.json | 29 +
.../openwebtest/supplemental/status-500.json | 65 -
adapters/openweb/params_test.go | 16 +-
adapters/openx/openx.go | 49 +-
adapters/openx/openx_test.go | 10 +-
.../openxtest/exemplary/fledge-no-bids.json | 3 +-
.../openx/openxtest/exemplary/fledge.json | 3 +-
.../exemplary/imp-ext-passthrough.json | 3 +-
.../openxtest/exemplary/optional-params.json | 9 +-
.../openxtest/exemplary/simple-banner.json | 3 +-
.../openxtest/exemplary/simple-video.json | 17 +-
.../openxtest/exemplary/video-rewarded.json | 10 +-
.../openxtest/supplemental/multi-imp.json | 29 +-
adapters/openx/params_test.go | 10 +-
adapters/operaads/operaads.go | 29 +-
adapters/operaads/operaads_test.go | 6 +-
.../operaadstest/exemplary/multiformat.json | 6 +-
.../operaadstest/exemplary/native.json | 3 +-
.../operaadstest/exemplary/simple-banner.json | 3 +-
.../operaadstest/exemplary/video.json | 3 +-
.../operaadstest/supplemental/badrequest.json | 3 +-
.../supplemental/miss-native.json | 3 +-
.../operaadstest/supplemental/nocontent.json | 3 +-
.../supplemental/unexcept-statuscode.json | 3 +-
adapters/operaads/params_test.go | 2 +-
adapters/oraki/oraki.go | 153 +
adapters/oraki/oraki_test.go | 20 +
.../oraki/orakitest/exemplary/endpointId.json | 136 +
.../orakitest/exemplary/multi-format.json | 105 +
.../oraki/orakitest/exemplary/multi-imp.json | 253 ++
.../orakitest/exemplary/simple-banner.json | 136 +
.../orakitest/exemplary/simple-native.json | 120 +
.../orakitest/exemplary/simple-video.json | 131 +
.../exemplary/simple-web-banner.json | 136 +
.../supplemental/bad_media_type.json | 83 +
.../orakitest/supplemental/bad_response.json | 85 +
.../orakitest/supplemental/status-204.json | 80 +
.../supplemental/status-not-200.json | 85 +
adapters/oraki/params_test.go | 47 +
adapters/orbidder/orbidder.go | 18 +-
adapters/orbidder/orbidder_test.go | 10 +-
.../multibid-multi-format-with-mtype.json | 3 +-
.../exemplary/simple-app-banner.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../exemplary/simple-web-native.json | 3 +-
.../supplemental/dsp-bad-request-example.json | 3 +-
.../dsp-bad-response-example.json | 3 +-
.../dsp-internal-server-error-example.json | 3 +-
.../dsp-invalid-accountid-example.json | 3 +-
.../supplemental/ext-unmarshall-error.json | 2 +-
.../supplemental/no-content-response.json | 3 +-
.../supplemental/valid-and-invalid-imps.json | 7 +-
adapters/orbidder/params_test.go | 2 +-
adapters/outbrain/outbrain.go | 24 +-
adapters/outbrain/outbrain_test.go | 6 +-
.../outbraintest/exemplary/banner.json | 3 +-
.../outbraintest/exemplary/native.json | 3 +-
.../outbraintest/exemplary/video.json | 3 +-
.../supplemental/app_request.json | 3 +-
.../outbraintest/supplemental/eids.json | 3 +-
.../supplemental/general_params.json | 3 +-
.../supplemental/optional_params.json | 3 +-
.../outbraintest/supplemental/status_204.json | 3 +-
.../outbraintest/supplemental/status_400.json | 3 +-
.../outbraintest/supplemental/status_418.json | 3 +-
adapters/outbrain/params_test.go | 2 +-
adapters/ownadx/ownadx.go | 38 +-
adapters/ownadx/ownadx_test.go | 11 +-
.../ownadx/ownadxtest/exemplary/banner.json | 3 +-
.../ownadx/ownadxtest/exemplary/video.json | 3 +-
.../supplemental/bad-server-response.json | 3 +-
.../ownadxtest/supplemental/bid-empty-.json | 3 +-
.../ownadxtest/supplemental/bidext-type.json | 3 +-
.../supplemental/http-status-204.json | 3 +-
.../supplemental/http-status-400.json | 3 +-
.../supplemental/seatbid-empty-.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/pangle/pangle.go | 20 +-
adapters/pangle/pangle_test.go | 6 +-
.../pangletest/exemplary/app_banner.json | 3 +-
.../exemplary/app_banner_instl.json | 3 +-
.../pangletest/exemplary/app_native.json | 3 +-
.../pangletest/exemplary/app_video_instl.json | 3 +-
.../exemplary/app_video_rewarded.json | 3 +-
.../supplemental/appid_placementid_check.json | 3 +-
.../supplemental/pangle_ext_check.json | 3 +-
.../supplemental/response_code_204.json | 3 +-
.../supplemental/response_code_400.json | 3 +-
.../supplemental/response_code_non_200.json | 3 +-
.../supplemental/unrecognized_adtype.json | 3 +-
adapters/pangle/param_test.go | 2 +-
adapters/pgamssp/params_test.go | 2 +-
adapters/pgamssp/pgamssp.go | 28 +-
adapters/pgamssp/pgamssp_test.go | 6 +-
.../exemplary/convert_currency.json | 154 +
.../pgamssptest/exemplary/endpointId.json | 3 +-
.../pgamssptest/exemplary/simple-banner.json | 3 +-
.../pgamssptest/exemplary/simple-native.json | 3 +-
.../pgamssptest/exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../pgamssptest/supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/playdigo/params_test.go | 47 +
adapters/playdigo/playdigo.go | 161 +
adapters/playdigo/playdigo_test.go | 20 +
.../playdigotest/exemplary/endpointId.json | 136 +
.../playdigotest/exemplary/multi-format.json | 105 +
.../playdigotest/exemplary/multi-imp.json | 253 ++
.../playdigotest/exemplary/simple-banner.json | 136 +
.../playdigotest/exemplary/simple-native.json | 120 +
.../playdigotest/exemplary/simple-video.json | 131 +
.../exemplary/simple-web-banner.json | 136 +
.../supplemental/bad_media_type.json | 83 +
.../supplemental/bad_response.json | 85 +
.../supplemental/no-valid-impressions.json | 20 +
.../playdigotest/supplemental/status-204.json | 80 +
.../supplemental/status-not-200.json | 85 +
adapters/pubmatic/params_test.go | 2 +-
adapters/pubmatic/pubmatic.go | 54 +-
adapters/pubmatic/pubmatic_test.go | 10 +-
.../pubmatictest/exemplary/banner.json | 3 +-
.../pubmatictest/exemplary/fledge.json | 3 +-
.../pubmatictest/exemplary/native.json | 3 +-
.../pubmatictest/exemplary/video.json | 6 +-
.../pubmatictest/supplemental/app.json | 7 +-
.../supplemental/dctrAndPmZoneID.json | 3 +-
.../pubmatictest/supplemental/extra-bid.json | 3 +-
.../supplemental/gptSlotNameInImpExt.json | 3 +-
.../gptSlotNameInImpExtPbAdslot.json | 3 +-
.../{impExtData.json => impExt.json} | 9 +-
.../supplemental/multiplemedia.json | 3 +-
.../supplemental/native_invalid_adm.json | 3 +-
.../pubmatictest/supplemental/nilReqExt.json | 3 +-
.../pubmatictest/supplemental/noAdSlot.json | 3 +-
.../supplemental/pmZoneIDInKeywords.json | 3 +-
.../supplemental/reqBidderParams.json | 3 +-
.../supplemental/trimPublisherID.json | 3 +-
adapters/pubnative/pubnative.go | 23 +-
adapters/pubnative/pubnative_test.go | 6 +-
.../pubnativetest/exemplary/native.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../pubnativetest/exemplary/video.json | 3 +-
adapters/pubrise/params_test.go | 47 +
adapters/pubrise/pubrise.go | 160 +
adapters/pubrise/pubrise_test.go | 20 +
.../pubrisetest/exemplary/endpointId.json | 136 +
.../pubrisetest/exemplary/multi-format.json | 105 +
.../pubrisetest/exemplary/multi-imp.json | 253 ++
.../pubrisetest/exemplary/simple-banner.json | 136 +
.../pubrisetest/exemplary/simple-native.json | 120 +
.../pubrisetest/exemplary/simple-video.json | 131 +
.../exemplary/simple-web-banner.json | 136 +
.../supplemental/bad_media_type.json | 83 +
.../supplemental/bad_response.json | 85 +
.../supplemental/no-valid-impressions.json | 20 +
.../pubrisetest/supplemental/status-204.json | 80 +
.../supplemental/status-not-200.json | 85 +
adapters/pulsepoint/params_test.go | 9 +-
adapters/pulsepoint/pulsepoint.go | 50 +-
adapters/pulsepoint/pulsepoint_test.go | 6 +-
.../pulsepointtest/exemplary/banner-app.json | 3 +-
.../banner-string-bidder-params.json | 102 +
.../pulsepointtest/exemplary/banner.json | 3 +-
.../exemplary/empty-pub-node-app.json | 3 +-
.../exemplary/empty-pub-node-site.json | 3 +-
.../pulsepointtest/exemplary/multi-imps.json | 3 +-
.../pulsepointtest/exemplary/native.json | 3 +-
.../pulsepointtest/exemplary/video.json | 3 +-
.../supplemental/bad-bid-data.json | 7 +-
.../supplemental/bad-input.json | 3 +-
.../bad-prebid-params-missing-param.json | 31 +
.../supplemental/bad-prebid-params.json | 4 +-
.../supplemental/bad-prebid.ext.json | 2 +-
.../pulsepointtest/supplemental/error.json | 3 +-
.../supplemental/impid-mismatch.json | 3 +-
.../pulsepointtest/supplemental/passback.json | 3 +-
adapters/pwbid/params_test.go | 2 +-
adapters/pwbid/pwbid.go | 14 +-
adapters/pwbid/pwbid_test.go | 6 +-
.../pwbid/pwbidtest/exemplary/banner.json | 3 +-
.../pwbid/pwbidtest/exemplary/native.json | 3 +-
.../pwbidtest/exemplary/optional-params.json | 3 +-
adapters/pwbid/pwbidtest/exemplary/video.json | 3 +-
.../response-200-without-body.json | 7 +-
.../pwbidtest/supplemental/response-204.json | 3 +-
.../pwbidtest/supplemental/response-400.json | 3 +-
.../pwbidtest/supplemental/response-500.json | 3 +-
adapters/qt/params_test.go | 47 +
adapters/qt/qt.go | 153 +
adapters/qt/qt_test.go | 20 +
adapters/qt/qttest/exemplary/endpointId.json | 136 +
.../qt/qttest/exemplary/multi-format.json | 105 +
adapters/qt/qttest/exemplary/multi-imp.json | 253 ++
.../qt/qttest/exemplary/simple-banner.json | 136 +
.../qt/qttest/exemplary/simple-native.json | 120 +
.../qt/qttest/exemplary/simple-video.json | 131 +
.../qttest/exemplary/simple-web-banner.json | 136 +
.../qttest/supplemental/bad_media_type.json | 83 +
.../qt/qttest/supplemental/bad_response.json | 85 +
.../qt/qttest/supplemental/status-204.json | 80 +
.../qttest/supplemental/status-not-200.json | 85 +
adapters/readpeak/params_test.go | 51 +
adapters/readpeak/readpeak.go | 162 +
adapters/readpeak/readpeak_test.go | 21 +
.../readpeaktest/exemplary/banner.json | 130 +
.../readpeaktest/exemplary/banner_app.json | 128 +
.../exemplary/banner_multiple_imps.json | 200 ++
.../readpeaktest/exemplary/native.json | 118 +
.../supplemental/banner_without_mtype.json | 115 +
.../supplemental/bid_response_204.json | 72 +
.../supplemental/bid_response_400.json | 100 +
.../supplemental/bid_response_500.json | 100 +
adapters/relevantdigital/params_test.go | 42 +
adapters/relevantdigital/relevantdigital.go | 332 ++
.../relevantdigital/relevantdigital_test.go | 28 +
.../exemplary/simple-audio.json | 117 +
.../exemplary/simple-banner.json | 207 ++
.../exemplary/simple-native.json | 119 +
.../exemplary/simple-video.json | 186 ++
.../supplemental/invalidBidMType.json | 100 +
.../invalidBidMTypeParsesExt.json | 158 +
.../supplemental/invalidBidType.json | 103 +
.../supplemental/invalidParam.json | 42 +
.../supplemental/invalidRequestCount.json | 39 +
adapters/response.go | 2 +-
adapters/response_test.go | 2 +-
adapters/revcontent/revcontent.go | 14 +-
adapters/revcontent/revcontent_test.go | 6 +-
.../revcontenttest/exemplary/no-bid.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/status_400.json | 3 +-
.../supplemental/status_500.json | 3 +-
adapters/richaudience/params_test.go | 2 +-
adapters/richaudience/richaudience.go | 26 +-
adapters/richaudience/richaudience_test.go | 10 +-
.../exemplary/single-banner-app.json | 3 +-
.../single-banner-defaultCurrency.json | 3 +-
.../exemplary/single-banner-deviceConfig.json | 3 +-
.../exemplary/single-banner-extUser.json | 3 +-
.../exemplary/single-banner-floorPrice.json | 3 +-
.../exemplary/single-banner-iPv6.json | 3 +-
.../exemplary/single-banner-nil-device.json | 3 +-
.../exemplary/single-banner-nosecure.json | 3 +-
.../exemplary/single-banner-setCurrency.json | 3 +-
.../exemplary/single-banner-sitePage.json | 3 +-
.../exemplary/single-banner.json | 3 +-
.../exemplary/single-video.json | 3 +-
.../supplemental/bidTypeNotAssigned.json | 3 +-
.../supplemental/responseBlank.json | 3 +-
.../supplemental/statusCode400.json | 3 +-
.../supplemental/statusCodeError.json | 3 +-
.../supplemental/unexpectedStatusCode.json | 3 +-
.../supplemental/videoSizePartial.json | 42 +
.../supplemental/videoSizeZero.json | 43 +
adapters/rise/rise.go | 16 +-
adapters/rise/rise_test.go | 6 +-
.../exemplary/banner-and-video-app.json | 3 +-
.../exemplary/banner-and-video-gdpr.json | 3 +-
.../exemplary/banner-and-video-site.json | 3 +-
.../risetest/exemplary/banner-and-video.json | 3 +-
.../exemplary/simple-banner-both-ids.json | 3 +-
.../risetest/exemplary/simple-banner.json | 3 +-
.../rise/risetest/exemplary/simple-video.json | 3 +-
.../risetest/supplemental/bad-request.json | 3 +-
.../risetest/supplemental/missing-bidder.json | 4 +-
.../supplemental/missing-extension.json | 4 +-
.../risetest/supplemental/missing-mtype.json | 3 +-
adapters/roulax/roulax.go | 118 +
adapters/roulax/roulax_test.go | 24 +
.../roulaxtest/exemplary/simple-banner.json | 116 +
.../roulaxtest/exemplary/simple-native.json | 98 +
.../roulaxtest/exemplary/simple-video.json | 122 +
.../supplemental/no-bid-response.json | 80 +
adapters/rtbhouse/rtbhouse.go | 95 +-
adapters/rtbhouse/rtbhouse_test.go | 6 +-
.../rtbhousetest/exemplary/app_banner.json | 99 +
.../rtbhousetest/exemplary/app_native.json | 113 +
.../exemplary/banner-resolve-macros.json | 87 +
.../bidfloor-as-bidder-param-without-cur.json | 131 +
.../exemplary/bidfloor-as-bidder-param.json | 134 +
.../bidfloor-as-impbidfloor-with-cur.json | 131 +
.../bidfloor-as-impbidfloor-without-cur.json | 129 +
.../exemplary/currency-conversion.json | 123 -
.../native-with-deprecated-native-prop.json | 101 +
.../native-with-proper-native-response.json | 101 +
.../rtbhousetest/exemplary/simple-banner.json | 9 +-
...bidfloors-given-param-and-impbidfloor.json | 133 +
.../supplemental/bad_response.json | 5 +-
...ner-native-req-faulty-mtype-in-native.json | 142 +
.../faulty-request-bidder-params.json | 30 +
.../faulty-request-no-impext.json | 25 +
.../native-with-faulty-adm-native-prop.json | 91 +
.../native-with-faulty-adm-response.json | 91 +
.../supplemental/simple-banner-bad-mtype.json | 95 +
.../supplemental/simple-banner-no-mtype.json | 94 +
.../rtbhousetest/supplemental/status_204.json | 3 +-
.../rtbhousetest/supplemental/status_400.json | 3 +-
.../rtbhousetest/supplemental/status_418.json | 3 +-
adapters/rubicon/rubicon.go | 97 +-
adapters/rubicon/rubicon_test.go | 112 +-
.../exemplary/25-26-transition-period.json | 8 +-
.../rubicontest/exemplary/app-imp-fpd.json | 8 +-
.../exemplary/bidonmultiformat.json | 16 +-
.../exemplary/flexible-schema.json | 8 +-
.../exemplary/hardcode-secure.json | 8 +-
.../exemplary/non-bidonmultiformat.json | 8 +-
.../rubicontest/exemplary/simple-banner.json | 8 +-
.../rubicontest/exemplary/simple-native.json | 8 +-
.../rubicontest/exemplary/simple-video.json | 8 +-
.../rubicontest/exemplary/site-imp-fpd.json | 8 +-
.../rubicontest/exemplary/user-fpd.json | 8 +-
.../supplemental/invalid-bidder-ext.json | 2 +-
.../supplemental/no-site-content-data.json | 8 +-
.../supplemental/no-site-content.json | 8 +-
adapters/sa_lunamedia/params_test.go | 2 +-
adapters/sa_lunamedia/salunamedia.go | 16 +-
adapters/sa_lunamedia/salunamedia_test.go | 6 +-
.../salunamediatest/exemplary/banner.json | 3 +-
.../salunamediatest/exemplary/native.json | 3 +-
.../salunamediatest/exemplary/video.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/empty-seatbid.json | 3 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-400.json | 3 +-
.../supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/screencore/params_test.go | 2 +-
adapters/screencore/screencore.go | 20 +-
adapters/screencore/screencore_test.go | 6 +-
.../screencoretest/exemplary/banner-app.json | 3 +-
.../screencoretest/exemplary/banner-web.json | 3 +-
.../screencoretest/exemplary/native-app.json | 3 +-
.../screencoretest/exemplary/native-web.json | 3 +-
.../screencoretest/exemplary/video-app.json | 3 +-
.../screencoretest/exemplary/video-web.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../invalid-bidder-ext-object.json | 2 +-
.../supplemental/invalid-response.json | 3 +-
.../invalid-screencore-ext-object.json | 2 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/seedingAlliance/params_test.go | 6 +-
adapters/seedingAlliance/seedingAlliance.go | 63 +-
.../seedingAlliance/seedingAlliance_test.go | 51 +-
.../seedingAlliancetest/exemplary/banner.json | 5 +-
.../exemplary/banner_with_account.json | 145 +
.../banner_with_account_and_seat.json | 147 +
.../exemplary/banner_with_seat.json} | 11 +-
.../seedingAlliancetest/exemplary/native.json | 5 +-
.../supplemental/invalid_tag_id.json | 2 +-
.../supplemental/status_bad_request.json | 5 +-
.../supplemental/status_no_content.json | 5 +-
.../supplemental/status_not_ok.json | 5 +-
adapters/sharethrough/params_test.go | 2 +-
adapters/sharethrough/sharethrough.go | 26 +-
adapters/sharethrough/sharethrough_test.go | 6 +-
.../exemplary/app-banner.json | 3 +-
.../exemplary/app-native.json | 3 +-
.../sharethroughtest/exemplary/app-video.json | 3 +-
.../exemplary/web-banner.json | 3 +-
.../sharethroughtest/exemplary/web-video.json | 3 +-
.../supplemental/error-bad-request.json | 3 +-
.../supplemental/error-internal-server.json | 3 +-
.../supplemental/multi-imp.json | 6 +-
.../supplemental/multiformat-impression.json | 9 +-
.../supplemental/no-fill.json | 3 +-
.../sharethroughtest/supplemental/schain.json | 3 +-
adapters/silvermob/params_test.go | 2 +-
adapters/silvermob/silvermob.go | 20 +-
adapters/silvermob/silvermob_test.go | 6 +-
.../silvermobtest/exemplary/banner-app.json | 3 +-
.../exemplary/banner-multi-app.json | 6 +-
.../silvermobtest/exemplary/native-app.json | 3 +-
.../silvermobtest/exemplary/video-app.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 5 +-
.../invalid-silvermob-ext-object.json | 2 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/silverpush/devicetype.go | 2 +-
adapters/silverpush/params_test.go | 2 +-
adapters/silverpush/silverpush.go | 27 +-
adapters/silverpush/silverpush_test.go | 10 +-
.../exemplary/banner-bidfloor-zero.json | 3 +-
.../exemplary/banner-device-ctv-.json | 3 +-
.../exemplary/banner-device-site.json | 3 +-
.../silverpushtest/exemplary/banner-eids.json | 3 +-
.../exemplary/banner-iOS-ua.json | 3 +-
.../exemplary/banner-windows-ua.json | 3 +-
.../banner-without-site-publisher.json | 3 +-
.../exemplary/banner-without-w-h.json | 3 +-
.../silverpushtest/exemplary/banner.json | 3 +-
.../exemplary/banner_without_publisher.json | 3 +-
.../exemplary/video-bidfloor-zero.json | 3 +-
.../silverpushtest/exemplary/video.json | 3 +-
.../exemplary/video_min_max_duration.json | 3 +-
.../supplemental/bad-eids-value.json | 3 +-
.../supplemental/bad-imp-ext-bidder.json | 2 +-
.../supplemental/bad-imp-ext.json | 2 +-
.../supplemental/bad-response-unmarshal.json | 5 +-
.../supplemental/status-204-resp.json | 3 +-
.../supplemental/status-400-resp.json | 3 +-
.../supplemental/status-500-resp.json | 3 +-
adapters/smaato/banner.go | 22 +
adapters/smaato/banner_test.go | 42 +
adapters/smaato/image.go | 49 -
adapters/smaato/image_test.go | 51 -
adapters/smaato/native.go | 6 +-
adapters/smaato/params_test.go | 2 +-
adapters/smaato/richmedia.go | 49 -
adapters/smaato/richmedia_test.go | 48 -
adapters/smaato/smaato.go | 134 +-
adapters/smaato/smaato_test.go | 21 +-
.../exemplary/multiple-impressions-skadn.json | 24 +-
.../exemplary/multiple-impressions.json | 24 +-
.../exemplary/multiple-media-types-skadn.json | 24 +-
.../exemplary/multiple-media-types.json | 24 +-
.../smaato/smaatotest/exemplary/native.json | 66 +-
.../exemplary/simple-banner-app.json | 16 +-
...Media-app.json => simple-banner-dooh.json} | 66 +-
.../simple-banner-eids.json} | 47 +-
.../exemplary/simple-banner-skadn.json | 16 +-
.../smaatotest/exemplary/simple-banner.json | 78 +-
.../smaatotest/exemplary/video-app.json | 10 +-
.../smaatotest/exemplary/video-dooh.json | 225 ++
.../smaato/smaatotest/exemplary/video.json | 80 +-
.../supplemental/bad-adm-response.json | 172 -
.../bad-adtype-header-response.json | 9 +-
.../bad-expires-header-response.json | 14 +-
.../bad-imp-banner-format-request.json | 28 -
.../bad-status-code-response.json | 9 +-
.../supplemental/banner-w-and-h.json | 14 +-
.../curl-nil-response.json} | 54 +-
.../supplemental/expires-header-response.json | 14 +-
...est.json => no-app-site-dooh-request.json} | 2 +-
.../supplemental/no-bid-response.json | 9 +-
.../supplemental/no-consent-info-request.json | 16 +-
.../outdated-expires-header-response.json | 14 +-
.../video/multiple-adpods-skadn.json | 18 +-
.../smaatotest/video/multiple-adpods.json | 18 +-
.../smaatotest/video/single-adpod-skadn.json | 10 +-
.../smaato/smaatotest/video/single-adpod.json | 10 +-
...e.json => bad-adtype-header-response.json} | 70 +-
.../bad-bid-ext-response.json | 10 +-
adapters/smartadserver/params_test.go | 2 +-
adapters/smartadserver/smartadserver.go | 18 +-
adapters/smartadserver/smartadserver_test.go | 6 +-
.../exemplary/multi-banner.json | 6 +-
.../exemplary/native-app.json | 4 +-
.../exemplary/native-web.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../supplemental/request-site-recreated.json | 3 +-
.../response-200-without-body.json | 7 +-
.../supplemental/response-204.json | 3 +-
.../supplemental/response-400.json | 3 +-
.../supplemental/response-500.json | 3 +-
adapters/smarthub/params_test.go | 2 +-
adapters/smarthub/smarthub.go | 22 +-
adapters/smarthub/smarthub_test.go | 8 +-
.../smarthubtest/exemplary/banner.json | 5 +-
.../smarthubtest/exemplary/native.json | 5 +-
.../smarthubtest/exemplary/video.json | 5 +-
.../supplemental/bad-response.json | 7 +-
.../supplemental/empty-seatbid-0-bid.json | 5 +-
.../supplemental/empty-seatbid.json | 5 +-
.../smarthubtest/supplemental/status-204.json | 5 +-
.../smarthubtest/supplemental/status-400.json | 5 +-
.../smarthubtest/supplemental/status-503.json | 5 +-
.../supplemental/unexpected-status.json | 5 +-
.../supplemental/wrong-bidtype.json | 5 +-
adapters/smartrtb/smartrtb.go | 23 +-
adapters/smartrtb/smartrtb_test.go | 6 +-
.../smartrtbtest/exemplary/banner.json | 3 +-
.../smartrtbtest/exemplary/video.json | 3 +-
.../supplemental/bad-bidder-ext.json | 4 +-
.../supplemental/bad-imp-ext.json | 4 +-
.../supplemental/bad-pub-value.json | 2 +-
.../supplemental/bad-request.json | 3 +-
.../supplemental/invalid-bid-ext.json | 3 +-
.../supplemental/invalid-bid-format.json | 3 +-
.../supplemental/invalid-bid-json.json | 5 +-
.../supplemental/invalid-imp-ext.json | 2 +-
.../smartrtbtest/supplemental/nobid.json | 3 +-
.../supplemental/non-http-ok.json | 3 +-
adapters/smartx/params_test.go | 2 +-
adapters/smartx/smartx.go | 12 +-
adapters/smartx/smartx_test.go | 6 +-
.../smartx/smartxtest/exemplary/01-video.json | 3 +-
.../smartxtest/exemplary/02-consent.json | 3 +-
.../smartxtest/exemplary/03-device.json | 3 +-
.../02-internal-server-error.json | 3 +-
.../03-missing-bidder-in-response.json | 3 +-
adapters/smartyads/params_test.go | 2 +-
adapters/smartyads/smartyads.go | 20 +-
adapters/smartyads/smartyads_test.go | 6 +-
.../smartyadstest/exemplary/banner-app.json | 3 +-
.../smartyadstest/exemplary/banner-web.json | 3 +-
.../smartyadstest/exemplary/native-app.json | 3 +-
.../smartyadstest/exemplary/native-web.json | 3 +-
.../smartyadstest/exemplary/video-app.json | 3 +-
.../smartyadstest/exemplary/video-web.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/smilewanted/params_test.go | 2 +-
adapters/smilewanted/smilewanted.go | 16 +-
adapters/smilewanted/smilewanted_test.go | 6 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../supplemental/bad-server-response.json | 5 +-
.../supplemental/status-code-204.json | 3 +-
.../supplemental/status-code-400.json | 3 +-
.../supplemental/unexpected-status-code.json | 3 +-
adapters/smrtconnect/smrtconnect.go | 146 +
adapters/smrtconnect/smrtconnect_test.go | 28 +
.../smrtconnecttest/exemplary/audio-app.json | 91 +
.../smrtconnecttest/exemplary/audio-web.json | 91 +
.../smrtconnecttest/exemplary/banner-app.json | 140 +
.../exemplary/banner-multiple-bids.json | 229 ++
.../smrtconnecttest/exemplary/banner-web.json | 128 +
.../smrtconnecttest/exemplary/native-app.json | 137 +
.../smrtconnecttest/exemplary/native-web.json | 125 +
.../smrtconnecttest/exemplary/video-app.json | 150 +
.../smrtconnecttest/exemplary/video-web.json | 148 +
.../supplemental/empty-seatbid-array.json | 120 +
.../invalid-aceex-ext-object.json | 29 +
.../supplemental/invalid-response.json | 95 +
.../supplemental/status-code-bad-request.json | 93 +
.../supplemental/status-code-no-content.json | 69 +
.../supplemental/status-code-other-error.json | 79 +
.../status-code-service-unavailable.json | 79 +
adapters/sonobi/params_test.go | 2 +-
adapters/sonobi/sonobi.go | 59 +-
adapters/sonobi/sonobi_test.go | 6 +-
.../sonobi/sonobitest/exemplary/banner.json | 5 +-
.../sonobi/sonobitest/exemplary/native.json | 143 +
.../sonobi/sonobitest/exemplary/no-bid.json | 5 +-
.../supplemental/currency-conversion.json | 172 +
adapters/sovrn/sovrn.go | 18 +-
adapters/sovrn/sovrn_test.go | 6 +-
.../sovrntest/exemplary/multi-banner.json | 3 +-
.../sovrn/sovrntest/exemplary/no-bid.json | 3 +-
.../sovrntest/exemplary/simple-banner.json | 3 +-
.../sovrntest/supplemental/adunitcode.json | 3 +-
.../sovrntest/supplemental/blank-device.json | 3 +-
.../both-custom-default-bidfloor.json | 3 +-
.../supplemental/camel-case-tagId.json | 3 +-
.../sovrn/sovrntest/supplemental/fpd.json | 3 +-
.../sovrn/sovrntest/supplemental/gdpr.json | 3 +-
.../supplemental/invalid-adunitcode.json | 3 +-
.../supplemental/invalid-imp-id.json | 3 +-
.../sovrntest/supplemental/no-bidfloor.json | 3 +-
.../sovrn/sovrntest/supplemental/no-user.json | 3 +-
.../supplemental/only-custom-bidfloor.json | 3 +-
.../supplemental/only-default-bidfloor.json | 3 +-
.../with-both-custom-default-bidfloor.json | 3 +-
.../with-only-custom-bidfloor.json | 3 +-
.../with-only-default-bidfloor.json | 3 +-
.../sovrn/sovrntest/video/full-video.json | 3 +-
.../sovrntest/video/multi-banner-video.json | 3 +-
.../sovrn/sovrntest/video/multi-video.json | 3 +-
adapters/sovrn/sovrntest/video/no-bid.json | 3 +-
.../sovrn/sovrntest/video/simple-video.json | 3 +-
adapters/sovrnXsp/params_test.go | 56 +
adapters/sovrnXsp/sovrnXsp.go | 174 +
adapters/sovrnXsp/sovrnXsp_test.go | 20 +
.../sovrnXsptest/exemplary/banner.json | 120 +
.../sovrnXsptest/exemplary/native.json | 110 +
.../sovrnXsptest/exemplary/video.json | 122 +
.../supplemental/request-no-matching-imp.json | 30 +
.../supplemental/response-empty-seat.json | 83 +
.../supplemental/response-http-error.json | 85 +
.../supplemental/response-invalid-crtype.json | 104 +
.../supplemental/response-nobid.json | 80 +
adapters/sspBC/sspbc.go | 29 +-
adapters/sspBC/sspbc_test.go | 6 +-
.../exemplary/banner-fromtemplate.json | 3 +-
.../banner-preformatted-multiple-imps.json | 3 +-
.../banner-preformatted-onecode.json | 3 +-
.../exemplary/banner-preformatted.json | 3 +-
.../sspbctest/supplemental/bad_response.json | 5 +-
.../bad_response_with_incorrect_impid.json | 3 +-
.../bad_response_without_adm.json | 3 +-
.../request_with_diffrent_siteid.json | 3 +-
...request_with_incorrect_imp_bidder_ext.json | 3 +-
.../request_with_incorrect_imp_ext.json | 3 +-
...request_with_standard_and_onecode_imp.json | 3 +-
.../supplemental/request_with_test.json | 3 +-
.../request_without_banner_format.json | 3 +-
.../supplemental/request_without_ext_id.json | 3 +-
.../request_without_ext_site_id.json | 3 +-
.../sspbctest/supplemental/status_204.json | 3 +-
.../sspbctest/supplemental/status_400.json | 3 +-
adapters/stroeerCore/params_test.go | 3 +-
adapters/stroeerCore/stroeercore.go | 69 +-
adapters/stroeerCore/stroeercore_test.go | 6 +-
.../stroeercoretest/exemplary/dsa.json | 203 ++
.../exemplary/mobile-banner-single.json | 9 +-
.../exemplary/site-banner-multi.json | 15 +-
.../exemplary/site-banner-single.json | 9 +-
.../exemplary/site-multi-format-single.json | 147 +
.../exemplary/site-multi-types.json | 187 ++
.../exemplary/site-video-single.json | 117 +
.../supplemental/bad-server-response.json | 3 +-
.../supplemental/unknown-bid-media-type.json | 194 ++
adapters/suntContent/suntContent.go | 145 -
adapters/suntContent/suntContent_test.go | 194 --
.../suntContenttest/exemplary/native.json | 109 -
.../supplemental/invalid_tag_id.json | 30 -
.../supplemental/status_bad_request.json | 72 -
adapters/taboola/params_test.go | 3 +-
adapters/taboola/taboola.go | 51 +-
adapters/taboola/taboola_test.go | 10 +-
.../taboola/taboolatest/exemplary/banner.json | 3 +-
.../bannerAppRequest.json} | 18 +-
.../exemplary/bannerResolveMacro.json | 3 +-
.../multiFormatImpressionsRequest.json | 6 +-
.../taboola/taboolatest/exemplary/native.json | 3 +-
.../exemplary/nativeResolveMacro.json | 3 +-
.../taboolatest/exemplary/withPageType.json | 3 +-
.../taboolatest/exemplary/withPosition.json | 3 +-
.../bidParamsOverrideRequestFields.json | 3 +-
.../supplemental/bidderServerError.json | 3 +-
.../supplemental/emptyReponseFromBidder.json | 3 +-
.../incorrectResponseImpMapping.json | 3 +-
.../supplemental/multiImpressionsRequest.json | 3 +-
.../supplemental/noValidImpression.json | 2 +-
.../supplemental/optionalParamsProvided.json | 3 +-
.../supplemental/unexpectedStatusCode.json | 3 +-
adapters/tappx/params_test.go | 3 +-
adapters/tappx/tappx.go | 30 +-
adapters/tappx/tappx_test.go | 11 +-
.../single-banner-impression-extra.json | 3 +-
...ngle-banner-impression-future-feature.json | 3 +-
.../exemplary/single-banner-impression.json | 3 +-
.../exemplary/single-banner-site.json | 3 +-
.../exemplary/single-video-impression.json | 3 +-
.../exemplary/single-video-site.json | 3 +-
.../tappxtest/supplemental/204status.json | 3 +-
.../tappxtest/supplemental/bidfloor.json | 3 +-
.../supplemental/http-err-status.json | 3 +-
.../supplemental/http-err-status2.json | 3 +-
adapters/teads/teads.go | 20 +-
adapters/teads/teads_test.go | 13 +-
.../exemplary/simple-banner-with-format.json | 5 +-
.../teadstest/exemplary/simple-banner.json | 5 +-
.../teadstest/exemplary/simple-video.json | 5 +-
.../supplemental/bid-id-does-not-match.json | 5 +-
.../supplemental/currency-empty-string.json | 5 +-
.../supplemental/no-impression-response.json | 5 +-
.../supplemental/renderer-name-empty.json | 5 +-
.../supplemental/renderer-version-empty.json | 5 +-
.../teadstest/supplemental/status-400.json | 5 +-
.../teadstest/supplemental/status-500.json | 5 +-
adapters/telaria/params_test.go | 3 +-
adapters/telaria/telaria.go | 23 +-
adapters/telaria/telaria_test.go | 6 +-
.../exemplary/multiple-video-web.json | 3 +-
.../exemplary/multiple-vidoe-app.json | 3 +-
.../telariatest/exemplary/video-app.json | 3 +-
.../telariatest/exemplary/video-web.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/theadx/params_test.go | 66 +
adapters/theadx/theadx.go | 150 +
adapters/theadx/theadx_test.go | 20 +
.../theadxtest/exemplary/dynamic-tag.json | 101 +
.../theadxtest/exemplary/multi-format.json | 163 +
.../theadxtest/exemplary/multi-native.json | 129 +
.../theadxtest/exemplary/single-banner.json | 106 +
.../theadxtest/exemplary/single-native.json | 101 +
.../theadxtest/exemplary/single-video.json | 104 +
.../theadxtest/supplemental/bad-request.json | 49 +
.../supplemental/empty-response.json | 43 +
.../supplemental/nobid-response.json | 50 +
.../theadxtest/supplemental/server-error.json | 50 +
.../supplemental/unparsable-response.json | 50 +
adapters/thetradedesk/params_test.go | 53 +
adapters/thetradedesk/thetradedesk.go | 197 ++
adapters/thetradedesk/thetradedesk_test.go | 385 +++
.../exemplary/simple-banner-inapp.json | 144 +
...mple-banner-multiple-bids-and-formats.json | 231 ++
.../simple-banner-multiple-bids.json | 215 ++
.../exemplary/simple-banner.json | 142 +
.../exemplary/simple-empty-publisherId.json | 142 +
.../exemplary/simple-multi-type-banner.json | 151 +
.../exemplary/simple-multi-type-video.json | 151 +
.../exemplary/simple-native.json | 115 +
.../exemplary/simple-video.json | 154 +
.../200-response-from-target.json | 105 +
.../204-response-from-target.json | 105 +
.../400-response-from-target.json | 105 +
.../500-response-from-target.json | 105 +
.../supplemental/invalid-mtype.json | 86 +
.../supplemental/invalid-publisher.json | 45 +
adapters/tpmn/params_test.go | 3 +-
adapters/tpmn/tpmn.go | 12 +-
adapters/tpmn/tpmn_test.go | 6 +-
.../tpmntest/exemplary/simple-banner.json | 3 +-
.../tpmntest/exemplary/simple-native.json | 3 +-
.../exemplary/simple-site-banner.json | 3 +-
.../exemplary/simple-site-native.json | 3 +-
.../tpmntest/exemplary/simple-site-video.json | 3 +-
.../tpmn/tpmntest/exemplary/simple-video.json | 3 +-
.../tpmntest/supplemental/bad-imp-ext.json | 3 +-
.../tpmntest/supplemental/bad_response.json | 5 +-
.../tpmntest/supplemental/no-imp-ext.json | 5 +-
.../tpmntest/supplemental/status-204.json | 3 +-
.../tpmntest/supplemental/status-404.json | 3 +-
adapters/trafficgate/params_test.go | 2 +-
adapters/trafficgate/trafficgate.go | 32 +-
adapters/trafficgate/trafficgate_test.go | 6 +-
.../exemplary/multiple-imps.json | 3 +-
.../exemplary/simple-audio.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_bidtype_response.json | 3 +-
.../supplemental/bad_ext_response.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/bad_status_code.json | 3 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-404.json | 3 +-
adapters/triplelift/triplelift.go | 22 +-
adapters/triplelift/triplelift_test.go | 6 +-
.../exemplary/optional-params.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../triplelifttest/supplemental/badext.json | 2 +-
.../supplemental/badextbidder.json | 2 +-
.../supplemental/badresponseext.json | 5 +-
.../supplemental/badstatuscode.json | 3 +-
.../supplemental/notgoodstatuscode.json | 3 +-
.../supplemental/video-format-11.json | 3 +-
.../supplemental/video-format-12.json | 3 +-
.../supplemental/video-format-17.json | 3 +-
adapters/triplelift_native/params_test.go | 53 +
.../triplelift_native/triplelift_native.go | 61 +-
.../triplelift_native_test.go | 6 +-
.../exemplary/app-msn-no-tag-code.json | 112 +
.../exemplary/app-msn.json | 112 +
.../triplelift_nativetest/exemplary/app.json | 112 +
.../exemplary/optional-params.json | 56 -
.../exemplary/site-msn-no-tag-code.json | 112 +
.../exemplary/site-msn.json | 112 +
.../triplelift_nativetest/exemplary/site.json | 112 +
.../supplemental/app-no-publisher.json | 25 +
.../supplemental/app-publisher-no-domain.json | 60 +
.../supplemental/badext.json | 2 +-
.../supplemental/badextbidder.json | 2 +-
.../supplemental/badresponseext.json | 3 +-
.../supplemental/badstatuscode.json | 3 +-
.../effective-publisher-allowed.json | 122 +
.../effective-publisher-not-allowed.json | 36 +
.../supplemental/no-imp-ext-data.json | 85 +
.../supplemental/notgoodstatuscode.json | 86 -
.../supplemental/site-no-publisher.json | 25 +
.../site-publisher-no-domain.json | 62 +
adapters/trustedstack/params_test.go | 54 +
adapters/trustedstack/trustedstack.go | 109 +
adapters/trustedstack/trustedstack_test.go | 31 +
.../exemplary/multi-format.json | 84 +
.../exemplary/multi-imps.json | 135 +
.../trustedstacktest/exemplary/no-bid.json} | 37 +-
.../exemplary/optional-params.json} | 43 +-
.../exemplary/simple-banner.json | 101 +
.../exemplary/simple-native.json | 91 +
.../exemplary/simple-video.json | 104 +
...valid-req-400-status-code-bad-request.json | 97 +
...valid-req-500-status-code-bad-request.json | 98 +
...alid-req-200-incorrect-response-mtype.json | 125 +
...eq-200-bid-response-from-trustedstack.json | 133 +
...lid-req-200-incorrect-response-format.json | 121 +
...id-req-204-response-from-trustedstack.json | 67 +
adapters/ucfunnel/params_test.go | 2 +-
adapters/ucfunnel/ucfunnel.go | 20 +-
adapters/ucfunnel/ucfunnel_test.go | 53 +-
adapters/undertone/params_test.go | 3 +-
adapters/undertone/undertone.go | 16 +-
adapters/undertone/undertone_test.go | 7 +-
.../exemplary/multi-imp-app-request.json | 3 +-
.../exemplary/multi-imp-site-request.json | 3 +-
.../supplemental/badrequest.json | 3 +-
.../supplemental/internalerror.json | 3 +-
.../undertonetest/supplemental/nocontent.json | 3 +-
adapters/unicorn/params_test.go | 2 +-
adapters/unicorn/unicorn.go | 20 +-
adapters/unicorn/unicorn_test.go | 6 +-
.../banner-app-no-app-publisher.json | 3 +-
.../exemplary/banner-app-no-mediaid.json | 3 +-
.../exemplary/banner-app-no-publisherid.json | 3 +-
.../exemplary/banner-app-no-source.json | 3 +-
.../exemplary/banner-app-with-ip.json | 3 +-
.../exemplary/banner-app-with-ipv6.json | 3 +-
.../exemplary/banner-app-without-ext.json | 3 +-
.../banner-app-without-placementid.json | 3 +-
.../unicorntest/exemplary/banner-app.json | 3 +-
.../exemplary/banner-app_with_fpd.json | 3 +-
.../exemplary/banner-app_with_no_fpd.json | 3 +-
.../unicorn/unicorntest/supplemental/204.json | 3 +-
.../unicorn/unicorntest/supplemental/400.json | 3 +-
.../unicorn/unicorntest/supplemental/500.json | 3 +-
.../supplemental/cannot-parse-accountid.json | 4 +-
.../unicorntest/supplemental/no-imp-ext.json | 4 +-
adapters/unruly/params_test.go | 2 +-
adapters/unruly/unruly.go | 30 +-
adapters/unruly/unruly_test.go | 6 +-
.../exemplary/banner-and-video-app.json | 3 +-
.../exemplary/banner-and-video-gdpr.json | 3 +-
.../exemplary/banner-and-video-site.json | 3 +-
.../exemplary/banner-and-video.json | 3 +-
.../unrulytest/exemplary/simple-banner.json | 3 +-
.../unrulytest/exemplary/simple-video.json | 13 +-
.../supplemental/no-matching-impid.json | 3 +-
.../supplemental/status-code-204.json | 3 +-
.../supplemental/status-code-400.json | 3 +-
.../supplemental/status-code-401.json | 3 +-
adapters/vidazoo/params_test.go | 42 +
adapters/vidazoo/vidazoo.go | 134 +
adapters/vidazoo/vidazoo_test.go | 24 +
.../vidazoo/vidazootest/exemplary/banner.json | 127 +
.../vidazootest/exemplary/multi-imp.json | 265 ++
.../vidazoo/vidazootest/exemplary/video.json | 154 +
.../vidazootest/supplemental/bad-request.json | 65 +
.../supplemental/internal-error.json | 65 +
.../vidazootest/supplemental/no-content.json | 60 +
.../supplemental/unknown-bid-type.json | 109 +
adapters/videobyte/params_test.go | 2 +-
adapters/videobyte/videobyte.go | 18 +-
adapters/videobyte/videobyte_test.go | 4 +-
.../videobytetest/exemplary/banner.json | 3 +-
.../exemplary/empty-placement-network.json | 3 +-
.../exemplary/empty-site-domain-ref.json | 3 +-
.../videobytetest/exemplary/multi-format.json | 3 +-
.../videobytetest/exemplary/multi-imp.json | 6 +-
.../videobytetest/exemplary/video.json | 3 +-
.../supplemental/invalid-imp-ext-bidder.json | 2 +-
.../supplemental/invalid-imp-ext.json | 2 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
adapters/videoheroes/params_test.go | 2 +-
adapters/videoheroes/videoheroes.go | 20 +-
adapters/videoheroes/videoheroes_test.go | 6 +-
.../videoheroestest/exemplary/banner-app.json | 3 +-
.../videoheroestest/exemplary/banner-web.json | 3 +-
.../videoheroestest/exemplary/native-app.json | 3 +-
.../videoheroestest/exemplary/native-web.json | 3 +-
.../videoheroestest/exemplary/video-app.json | 3 +-
.../videoheroestest/exemplary/video-web.json | 3 +-
.../supplemental/empty-seatbid-array.json | 3 +-
.../supplemental/invalid-response.json | 3 +-
.../supplemental/status-code-bad-request.json | 3 +-
.../supplemental/status-code-no-content.json | 3 +-
.../supplemental/status-code-other-error.json | 3 +-
.../status-code-service-unavailable.json | 3 +-
adapters/vidoomy/params_test.go | 2 +-
adapters/vidoomy/vidoomy.go | 21 +-
adapters/vidoomy/vidoomy_test.go | 6 +-
.../multi-impression-video-banner.json | 6 +-
.../exemplary/simple-app-banner.json | 3 +-
.../vidoomytest/exemplary/simple-banner.json | 3 +-
.../exemplary/simple-site-video.json | 3 +-
.../supplemental/server-error.json | 3 +-
.../server-response-wrong-impid.json | 3 +-
.../simple-banner-no-response.json | 3 +-
adapters/visiblemeasures/params_test.go | 2 +-
adapters/visiblemeasures/visiblemeasures.go | 18 +-
.../visiblemeasures/visiblemeasures_test.go | 6 +-
.../exemplary/endpointId.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../exemplary/simple-web-banner.json | 3 +-
.../supplemental/bad_media_type.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../supplemental/status-204.json | 3 +-
.../supplemental/status-not-200.json | 3 +-
adapters/visx/params_test.go | 2 +-
adapters/visx/visx.go | 16 +-
adapters/visx/visx_test.go | 6 +-
.../visx/visxtest/exemplary/headers_ipv4.json | 3 +-
.../visx/visxtest/exemplary/headers_ipv6.json | 3 +-
.../exemplary/multitype-banner-response.json | 3 +-
.../exemplary/multitype-video-response.json | 3 +-
.../visxtest/exemplary/simple-banner.json | 3 +-
.../visx/visxtest/exemplary/simple-video.json | 3 +-
.../visxtest/exemplary/with_currency.json | 3 +-
.../visxtest/supplemental/bad_response.json | 5 +-
.../visxtest/supplemental/status_204.json | 3 +-
.../visxtest/supplemental/status_400.json | 3 +-
.../visxtest/supplemental/status_418.json | 3 +-
.../visxtest/supplemental/wrong_imp_type.json | 3 +-
.../visxtest/supplemental/wrong_impid.json | 3 +-
adapters/vox/params_test.go | 2 +-
adapters/vox/vox.go | 13 +-
adapters/vox/vox_test.go | 6 +-
adapters/vox/voxtest/exemplary/banner.json | 3 +-
adapters/vox/voxtest/exemplary/video.json | 3 +-
.../response_204_to_nocontent.json | 3 +-
.../supplemental/response_500_to_error.json | 3 +-
adapters/vrtcal/params_test.go | 2 +-
adapters/vrtcal/vrtcal.go | 14 +-
adapters/vrtcal/vrtcal_test.go | 6 +-
.../vrtcaltest/exemplary/simple-banner.json | 3 +-
.../vrtcaltest/exemplary/simple-native.json | 3 +-
.../vrtcaltest/exemplary/simple-video.json | 3 +-
.../exemplary/web-simple-banner.json | 3 +-
.../exemplary/web-simple-native.json | 3 +-
.../exemplary/web-simple-video.json | 3 +-
.../supplemental/unsupported_return_type.json | 3 +-
adapters/{liftoff => vungle}/param_test.go | 8 +-
.../{liftoff/liftoff.go => vungle/vungle.go} | 51 +-
adapters/vungle/vungle_test.go | 21 +
.../exemplary/app_video_instl.json | 8 +-
.../exemplary/app_video_rewarded.json | 8 +-
.../exemplary/site_video_instl.json | 153 +
.../exemplary/site_video_rewarded.json | 146 +
.../supplemental/appid_placementid_check.json | 8 +-
.../missing_appid_or_placementid.json | 5 +-
.../no_site_or_app_video_rewarded.json | 48 +
.../supplemental/response_code_204.json | 5 +-
.../supplemental/response_code_400.json | 5 +-
.../supplemental/response_code_non_200.json | 5 +-
.../supplemental/vungle_ext_check.json} | 8 +-
adapters/xeworks/params_test.go | 2 +-
adapters/xeworks/xeworks.go | 22 +-
adapters/xeworks/xeworks_test.go | 6 +-
.../xeworks/xeworkstest/exemplary/banner.json | 6 +-
.../xeworks/xeworkstest/exemplary/native.json | 3 +-
.../xeworks/xeworkstest/exemplary/video.json | 3 +-
.../supplemental/bad-response.json | 5 +-
.../supplemental/empty-mediatype.json | 3 +-
.../supplemental/empty-seatbid-0-bid.json | 3 +-
.../supplemental/empty-seatbid.json | 3 +-
.../invalid-ext-bidder-object.json | 2 +-
.../supplemental/invalid-ext-object.json | 2 +-
.../supplemental/invalid-mediatype.json | 3 +-
.../xeworkstest/supplemental/status-204.json | 3 +-
.../xeworkstest/supplemental/status-400.json | 3 +-
.../xeworkstest/supplemental/status-503.json | 3 +-
.../supplemental/unexpected-status.json | 3 +-
adapters/yahooAds/params_test.go | 2 +-
adapters/yahooAds/yahooAds.go | 29 +-
adapters/yahooAds/yahooAds_test.go | 6 +-
.../exemplary/simple-app-banner.json | 3 +-
.../yahooAdstest/exemplary/simple-banner.json | 3 +-
.../yahooAdstest/exemplary/simple-video.json | 3 +-
.../non-supported-requests-bids-ignored.json | 3 +-
.../supplemental/server-error.json | 3 +-
.../server-response-wrong-impid.json | 3 +-
.../simple-banner-gpp-overwrite.json | 3 +-
.../supplemental/simple-banner-gpp.json | 3 +-
...nner-ignore-width-when-height-missing.json | 3 +-
adapters/yandex/params_test.go | 87 +
adapters/yandex/yandex.go | 341 ++
adapters/yandex/yandex_test.go | 29 +
.../yandex/yandextest/exemplary/native.json | 135 +
.../yandextest/exemplary/simple-banner.json | 135 +
.../multiple-imps-some-malformed.json | 146 +
.../supplemental/multiple-imps.json | 237 ++
.../simple-banner-empty-response.json | 101 +
.../simple-banner-empty-seatbid.json | 106 +
.../supplemental/simple-banner-sizes.json | 233 ++
.../simple-banner-status-400.json | 102 +
.../simple-banner-unknown-imp.json | 125 +
.../simple-banner-unparsable-body.json | 102 +
.../supplemental/unknown-banner.json | 32 +
adapters/yeahmobi/params_test.go | 3 +-
adapters/yeahmobi/yeahmobi.go | 56 +-
adapters/yeahmobi/yeahmobi_test.go | 6 +-
.../yeahmobitest/exemplary/no-bid.json | 3 +-
.../yeahmobitest/exemplary/simple-banner.json | 3 +-
.../exemplary/simple-native-1.1.json | 3 +-
.../yeahmobitest/exemplary/simple-native.json | 3 +-
.../yeahmobitest/exemplary/simple-video.json | 43 +-
.../supplemental/bad_imp_ext.json | 2 +-
.../supplemental/bad_imp_ext_bidder.json | 2 +-
.../supplemental/bad_response.json | 5 +-
.../yeahmobitest/supplemental/status_400.json | 3 +-
.../yeahmobitest/supplemental/status_500.json | 3 +-
adapters/yieldlab/params_test.go | 2 +-
adapters/yieldlab/types.go | 57 +-
adapters/yieldlab/yieldlab.go | 152 +-
adapters/yieldlab/yieldlab_test.go | 100 +-
.../yieldlabtest/exemplary/banner.json | 3 +-
.../yieldlab/yieldlabtest/exemplary/dsa.json | 170 +
.../yieldlab/yieldlabtest/exemplary/gdpr.json | 3 +-
.../yieldlabtest/exemplary/mixed_types.json | 3 +-
.../exemplary/multiple_impressions.json | 3 +-
.../yieldlabtest/exemplary/schain.json | 3 +-
.../exemplary/schain_multiple_nodes.json | 3 +-
.../yieldlabtest/exemplary/video.json | 3 +-
.../yieldlabtest/exemplary/video_app.json | 3 +-
.../yieldlabtest/supplemental/dsa_empty.json | 128 +
.../supplemental/dsa_empty_transparency.json | 140 +
.../supplemental/invalid_reg_ext.json | 67 +
adapters/yieldmo/params_test.go | 2 +-
adapters/yieldmo/yieldmo.go | 107 +-
adapters/yieldmo/yieldmo_test.go | 6 +-
.../yieldmotest/exemplary/app-banner.json | 15 +-
.../yieldmotest/exemplary/app_video.json | 15 +-
.../yieldmotest/exemplary/simple-banner.json | 33 +-
.../yieldmotest/exemplary/simple_video.json | 15 +-
.../exemplary/valid_currency_conversion.json | 150 +
.../yieldmotest/exemplary/with_gpid.json | 15 +-
.../supplemental/unsupported_currency.json | 109 +
adapters/yieldone/params_test.go | 3 +-
adapters/yieldone/yieldone.go | 18 +-
adapters/yieldone/yieldone_test.go | 6 +-
.../yieldonetest/exemplary/simple-banner.json | 3 +-
.../yieldonetest/exemplary/simple-video.json | 3 +-
.../supplemental/bad_response.json | 5 +-
.../yieldonetest/supplemental/status_204.json | 3 +-
.../yieldonetest/supplemental/status_400.json | 3 +-
.../yieldonetest/supplemental/status_418.json | 3 +-
adapters/zeroclickfraud/zeroclickfraud.go | 23 +-
.../zeroclickfraud/zeroclickfraud_test.go | 6 +-
.../exemplary/multi-request.json | 3 +-
.../zeroclickfraudtest/exemplary/native.json | 3 +-
.../exemplary/simple-banner.json | 3 +-
.../exemplary/simple-video.json | 3 +-
.../supplemental/bad-response-body.json | 5 +-
.../supplemental/bad-server-response.json | 3 +-
.../supplemental/missing-ext.json | 4 +-
.../supplemental/missing-extparam.json | 4 +-
.../supplemental/no-content-response.json | 3 +-
.../exemplary/banner.json | 5 +-
.../exemplary/no-bid.json | 5 +-
.../zeta_global_ssp-test/exemplary/video.json | 5 +-
.../supplemental/bad-request.json | 5 +-
.../supplemental/invalid-bid-type.json | 5 +-
.../supplemental/no-bid-type.json.json | 5 +-
.../supplemental/server-error.json | 5 +-
adapters/zeta_global_ssp/zeta_global_ssp.go | 16 +-
.../zeta_global_ssp/zeta_global_ssp_test.go | 8 +-
adapters/zmaticoo/params_test.go | 48 +
adapters/zmaticoo/zmaticoo.go | 152 +
adapters/zmaticoo/zmaticoo_test.go | 20 +
.../zmaticootest/exemplary/no-bid.json | 59 +
.../zmaticootest/exemplary/simple-banner.json | 94 +
.../exemplary/simple-native-1.1.json | 84 +
.../zmaticootest/exemplary/simple-native.json | 84 +
.../zmaticootest/exemplary/simple-video.json | 92 +
.../supplemental/bad_imp_ext.json | 21 +
.../supplemental/bad_imp_ext_bidder.json | 27 +
.../supplemental/bad_response.json | 64 +
.../supplemental/empty_imp_ext_bidder.json} | 25 +-
.../zmaticootest/supplemental/status_400.json | 64 +
.../zmaticootest/supplemental/status_500.json | 64 +
adservertargeting/adservertargeting.go | 4 +-
adservertargeting/adservertargeting_test.go | 8 +-
adservertargeting/reqcache.go | 4 +-
adservertargeting/requestcache_test.go | 2 +-
adservertargeting/requestlookup.go | 7 +-
adservertargeting/requestlookup_test.go | 4 +-
adservertargeting/respdataprocessor.go | 10 +-
adservertargeting/respdataprocessor_test.go | 6 +-
adservertargeting/utils.go | 7 +-
amp/parse.go | 16 +-
amp/parse_test.go | 208 +-
analytics/agma/README.md | 28 +
analytics/agma/agma_module.go | 271 ++
analytics/agma/agma_module_test.go | 735 ++++
analytics/agma/model.go | 50 +
analytics/agma/model_test.go | 46 +
analytics/agma/sender.go | 84 +
analytics/agma/sender_test.go | 133 +
analytics/build/build.go | 143 +-
analytics/build/build_test.go | 445 ++-
analytics/core.go | 9 +-
analytics/filesystem/file_module.go | 33 +-
analytics/filesystem/file_module_test.go | 31 +-
analytics/filesystem/model.go | 10 +-
analytics/pubstack/configupdate.go | 2 +-
analytics/pubstack/eventchannel/sender.go | 4 +-
analytics/pubstack/helpers/json.go | 6 +-
analytics/pubstack/helpers/json_test.go | 4 +-
analytics/pubstack/helpers/model.go | 10 +-
analytics/pubstack/pubstack_module.go | 12 +-
analytics/pubstack/pubstack_module_test.go | 6 +-
analytics/runner.go | 3 +-
bidadjustment/apply.go | 6 +-
bidadjustment/apply_test.go | 6 +-
bidadjustment/build_rules.go | 12 +-
bidadjustment/build_rules_test.go | 260 +-
bidadjustment/validate.go | 2 +-
bidadjustment/validate_test.go | 2 +-
config/account.go | 86 +-
config/account_test.go | 172 +-
config/bidderinfo.go | 159 +-
config/bidderinfo_test.go | 293 +-
config/compression.go | 2 +-
config/compression_test.go | 2 +-
config/config.go | 223 +-
config/config_test.go | 512 ++-
config/events.go | 8 +-
currency/currency.go | 42 +
currency/currency_mock.go | 20 +
currency/currency_test.go | 199 ++
currency/rate_converter.go | 9 +-
currency/rate_converter_test.go | 2 +-
currency/rates_test.go | 2 +-
currency/validation.go | 4 +-
currency/validation_test.go | 4 +-
docs/build/README.md | 110 +
docs/developers/configuration.md | 160 +-
docs/developers/features.md | 12 -
docs/endpoints.md | 1 -
dsa/validate.go | 103 +
dsa/validate_test.go | 396 +++
dsa/writer.go | 33 +
dsa/writer_test.go | 189 ++
endpoints/cookie_sync.go | 207 +-
endpoints/cookie_sync_test.go | 656 +++-
endpoints/currency_rates.go | 4 +-
endpoints/currency_rates_test.go | 2 +-
endpoints/events/account_test.go | 8 +-
endpoints/events/event.go | 29 +-
endpoints/events/event_test.go | 14 +-
endpoints/events/vtrack.go | 51 +-
endpoints/events/vtrack_test.go | 12 +-
endpoints/getuids.go | 4 +-
endpoints/getuids_test.go | 2 +-
endpoints/info/bidders.go | 68 +-
endpoints/info/bidders_detail.go | 52 +-
endpoints/info/bidders_detail_test.go | 226 +-
endpoints/info/bidders_test.go | 237 +-
endpoints/openrtb2/amp_auction.go | 109 +-
endpoints/openrtb2/amp_auction_test.go | 448 ++-
endpoints/openrtb2/auction.go | 920 ++---
endpoints/openrtb2/auction_benchmark_test.go | 32 +-
endpoints/openrtb2/auction_test.go | 2013 ++++++-----
endpoints/openrtb2/interstitial.go | 8 +-
endpoints/openrtb2/interstitial_test.go | 4 +-
...simple.json => default-request-alias.json} | 12 +-
.../sample-requests/aliased/hard-alias.json | 62 +
.../aliased/request-alias.json | 61 +
.../alternate-bidder-code.json | 67 +
.../addtl-consent-through-query.json | 3 +-
.../gdpr-ccpa-through-query.json | 7 +-
...dpr-legacy-tcf2-consent-through-query.json | 11 +-
.../gdpr-tcf1-consent-through-query.json | 7 +-
.../gdpr-tcf2-consent-through-query.json | 11 +-
.../ortb-2.5-to-2.6-upconvert.json | 305 ++
.../blocked-app.json} | 4 +-
.../disabled/good/partial.json | 2 +-
.../hooks/auction_bidder_reject.json | 2 +-
.../hooks/auction_bidder_response_reject.json | 2 +-
.../hooks/auction_entrypoint_reject.json | 2 +-
...tion_processed_auction_request_reject.json | 2 +-
.../auction_raw_auction_request_reject.json | 2 +-
....json => imp-ext-prebid-bidder-empty.json} | 5 +-
.../invalid-whole/imp-ext-unknown-bidder.json | 2 +-
.../invalid-whole/invalid-bidder-params.json | 38 +
.../invalid-whole/regs-ext-gdpr-string.json | 48 -
.../invalid-whole/regs-ext-malformed.json | 2 +-
...pr-invalid.json => regs-gdpr-invalid.json} | 6 +-
...empty.json => user-eids-source-empty.json} | 13 +-
...mpty.json => user-eids-uids-id-empty.json} | 15 +-
...ssing.json => user-eids-uids-missing.json} | 12 +-
.../invalid-whole/user-ext-consent-int.json | 2 +-
.../user-ext-eids-source-duplicate.json | 49 -
.../user-gdpr-consent-invalid.json | 2 +-
.../exemplary/all-ext-case-insensitive.json | 6 +-
.../valid-whole/exemplary/all-ext.json | 2 +
.../valid-whole/exemplary/device-sua.json | 100 +
.../exemplary/ortb-2.5-to-2.6-upconvert.json | 393 +++
.../ortb-2.6-to-2.5-downconvert.json | 417 +++
.../valid-whole/exemplary/simple.json | 12 +-
.../valid-whole/exemplary/source-schain.json | 91 +
.../targeting-optional-all-false.json | 69 +
...targeting-optional-includeformat-only.json | 89 +
.../targeting-optional-includeformat.json | 69 +
.../exemplary/user-ext-eids-empty.json | 101 +-
.../user-ext-eids-source-duplicate.json | 76 +
.../exemplary/user-ext-prebid-buyeruids.json | 170 +
.../supplementary/gdpr-conflict.json | 5 +-
.../supplementary/gdpr-conflict2.json | 5 +-
...ed-bid-resp-case-matching-bidder-name.json | 39 +
...d-resp-case-not-matching-bidder-name.json} | 2 +-
...red-bid-resp-non-existing-bidder-name.json | 34 +
.../imp-with-stored-bid-resp.json | 6 +-
.../req-ext-bidder-params-merge.json | 1 -
...n => req-ext-bidder-params-promotion.json} | 8 +-
.../supplementary/req-ext-bidder-params.json | 1 -
.../req-two-imps-stored-bid-responses.json | 10 +-
...with-and-without-stored-bid-responses.json | 4 +-
.../supplementary/us-privacy-invalid.json | 4 +-
.../video_invalid_sample_negative_tmax.json | 87 +
endpoints/openrtb2/test_utils.go | 191 +-
endpoints/openrtb2/video_auction.go | 84 +-
endpoints/openrtb2/video_auction_test.go | 185 +-
endpoints/setuid.go | 49 +-
endpoints/setuid_test.go | 112 +-
endpoints/version.go | 2 +-
errortypes/code.go | 6 +-
errortypes/errortypes.go | 56 +-
errortypes/scope.go | 19 +
errortypes/scope_test.go | 37 +
exchange/adapter_builders.go | 462 +--
exchange/adapter_util.go | 10 +-
exchange/adapter_util_test.go | 14 +-
exchange/auction.go | 38 +-
exchange/auction_response.go | 4 +-
exchange/auction_test.go | 80 +-
exchange/bidder.go | 139 +-
exchange/bidder_test.go | 339 +-
exchange/bidder_validate_bids.go | 36 +-
exchange/bidder_validate_bids_test.go | 34 +-
exchange/entities/entities.go | 5 +-
exchange/events.go | 12 +-
exchange/events_test.go | 6 +-
exchange/exchange.go | 232 +-
exchange/exchange_test.go | 1618 +++++----
.../exchangetest/alternate-bidder-codes.json | 260 ++
.../exchangetest/append-bidder-names.json | 12 +-
.../exchangetest/bid-consolidation-test.json | 6 +
.../bid-ext-prebid-collision.json | 2 +
exchange/exchangetest/bid-ext.json | 2 +
exchange/exchangetest/bid-id-invalid.json | 197 --
exchange/exchangetest/bid-id-valid.json | 190 --
...e_validation_enforce_one_bid_rejected.json | 26 +
...id_response_validation_enforce_secure.json | 44 +
...bid_response_validation_warn_creative.json | 4 +
.../bid_response_validation_warn_secure.json | 4 +
.../exchangetest/ccpa-featureflag-on.json | 11 +-
exchange/exchangetest/debuglog_disabled.json | 12 +-
exchange/exchangetest/debuglog_enabled.json | 12 +-
.../exchangetest/dsa-default-ignored.json | 146 +
exchange/exchangetest/dsa-default.json | 205 ++
exchange/exchangetest/dsa-not-required.json | 133 +
exchange/exchangetest/dsa-required.json | 218 ++
.../eidpermissions-allowed-alias.json | 2 +
...dpermissions-allowed-case-insensitive.json | 2 +
.../exchangetest/eidpermissions-allowed.json | 2 +
.../exchangetest/eidpermissions-denied.json | 24 +-
.../events-bid-account-off-request-off.json | 4 +
.../events-bid-account-off-request-on.json | 4 +
.../events-bid-account-on-request-off.json | 4 +
.../events-vast-account-off-request-off.json | 6 +
.../events-vast-account-off-request-on.json | 16 +-
.../events-vast-account-on-request-off.json | 6 +
.../extra-bids-with-aliases-adaptercode.json | 8 -
exchange/exchangetest/extra-bids.json | 12 -
...rtydata-amp-imp-ext-one-prebid-bidder.json | 2 +
...ydata-imp-ext-multiple-prebid-bidders.json | 4 +
...stpartydata-imp-ext-one-prebid-bidder.json | 2 +
.../firstpartydata-multibidder-user-eids.json | 239 ++
...firstpartydata-user-eids-req-user-nil.json | 203 ++
...stpartydata-user-nileids-req-user-nil.json | 163 +
exchange/exchangetest/fledge-with-bids.json | 2 +
.../exchangetest/floors_deal_enforcement.json | 147 +
exchange/exchangetest/floors_enforcement.json | 33 +-
.../exchangetest/generate-bid-id-error.json | 203 ++
.../exchangetest/generate-bid-id-many.json | 170 +
.../exchangetest/generate-bid-id-one.json | 129 +
exchange/exchangetest/imp-fpd-invalid.json | 55 +
.../imp-fpd-multiple-bidders.json | 202 ++
.../exchangetest/imp-fpd-multiple-imp.json | 290 ++
.../imp-fpd-skipped-validation.json | 137 +
.../exchangetest/include-brand-category.json | 12 +-
...epricegranularity-banner-video-native.json | 6 +
.../mediatypepricegranularity-native.json | 4 +
.../multi-bid-default-bid-limit.json | 10 -
.../multi-bids-different-ortb-versions.json | 276 ++
exchange/exchangetest/multi-bids-error.json | 12 -
.../exchangetest/multi-bids-mixed-case.json | 12 -
.../multi-bids-with-extra-bids.json | 12 -
exchange/exchangetest/multi-bids.json | 12 -
.../exchangetest/passthrough_imp_only.json | 4 +
.../passthrough_root_and_imp.json | 2 +
.../exchangetest/passthrough_root_only.json | 2 +
.../request-ext-prebid-filtering.json | 2 +
.../request-imp-ext-prebid-filtering.json | 2 +
.../request-multi-bidders-debug-info.json | 2 +
.../request-multi-bidders-one-no-resp.json | 2 +
.../exchangetest/schain-host-and-request.json | 39 +-
exchange/exchangetest/schain-host-only.json | 27 +-
.../targeting-always-include-deals.json | 291 ++
.../targeting-cache-vast-banner.json | 2 +
.../exchangetest/targeting-cache-vast.json | 2 +
.../exchangetest/targeting-cache-zero.json | 2 +
exchange/exchangetest/targeting-mobile.json | 8 +
.../exchangetest/targeting-no-winners.json | 8 +
.../exchangetest/targeting-only-winners.json | 8 +
.../exchangetest/targeting-with-winners.json | 8 +
exchange/gdpr.go | 27 +-
exchange/gdpr_test.go | 66 +-
exchange/non_bid_reason.go | 55 +-
exchange/non_bid_reason_test.go | 65 +
exchange/price_granularity.go | 5 +-
exchange/price_granularity_test.go | 6 +-
exchange/seat_non_bids.go | 60 +-
exchange/seat_non_bids_test.go | 535 ++-
exchange/targeting.go | 37 +-
exchange/targeting_test.go | 109 +-
exchange/tmax_adjustments.go | 2 +-
exchange/tmax_adjustments_test.go | 2 +-
exchange/utils.go | 895 ++---
exchange/utils_test.go | 2967 +++++++++++------
experiment/adscert/inprocesssigner.go | 5 +-
experiment/adscert/remotesigner.go | 5 +-
experiment/adscert/signer.go | 3 +-
experiment/adscert/signer_test.go | 5 +-
firstpartydata/extmerger.go | 60 -
firstpartydata/extmerger_test.go | 109 -
firstpartydata/first_party_data.go | 185 +-
firstpartydata/first_party_data_test.go | 902 +----
floors/enforce.go | 10 +-
floors/enforce_test.go | 14 +-
floors/fetcher.go | 335 ++
floors/fetcher_test.go | 1307 ++++++++
floors/floors.go | 128 +-
floors/floors_test.go | 1579 +++++++--
floors/rule.go | 18 +-
floors/rule_test.go | 25 +-
floors/validate.go | 6 +-
floors/validate_test.go | 51 +-
gdpr/aggregated_config.go | 10 +-
gdpr/aggregated_config_test.go | 42 +-
gdpr/basic_enforcement.go | 13 +-
gdpr/basic_enforcement_test.go | 17 +-
gdpr/full_enforcement.go | 9 +-
gdpr/full_enforcement_test.go | 67 +-
gdpr/gdpr.go | 8 +-
gdpr/gdpr_test.go | 6 +-
gdpr/impl.go | 49 +-
gdpr/impl_test.go | 51 +-
gdpr/purpose_config.go | 17 +-
gdpr/purpose_config_test.go | 92 +-
gdpr/purpose_enforcer.go | 12 +-
gdpr/purpose_enforcer_test.go | 56 +-
gdpr/signal.go | 2 +-
gdpr/vendorlist-fetching.go | 2 +-
gdpr/vendorlist-fetching_test.go | 4 +-
go.mod | 42 +-
go.sum | 69 +-
hooks/empty_plan.go | 4 +-
hooks/hookanalytics/analytics_test.go | 2 +-
hooks/hookexecution/context.go | 16 +-
hooks/hookexecution/enricher.go | 6 +-
hooks/hookexecution/enricher_test.go | 10 +-
hooks/hookexecution/errors.go | 2 +-
hooks/hookexecution/execution.go | 60 +-
hooks/hookexecution/execution_test.go | 235 ++
hooks/hookexecution/executor.go | 66 +-
hooks/hookexecution/executor_test.go | 139 +-
hooks/hookexecution/mocks_test.go | 42 +-
hooks/hookexecution/outcome.go | 2 +-
hooks/hookexecution/test_utils.go | 2 +-
hooks/hookstage/allprocessedbidresponses.go | 4 +-
hooks/hookstage/auctionresponse.go | 2 +-
hooks/hookstage/bidderrequest.go | 20 +-
hooks/hookstage/bidderrequest_mutations.go | 13 +-
hooks/hookstage/invocation.go | 2 +-
hooks/hookstage/processedauctionrequest.go | 12 +-
hooks/hookstage/rawbidderresponse.go | 11 +-
.../hookstage/rawbidderresponse_mutations.go | 7 +-
hooks/plan.go | 4 +-
hooks/plan_test.go | 6 +-
hooks/repo.go | 2 +-
hooks/repo_test.go | 2 +-
injector/injector.go | 401 +++
injector/injector_test.go | 455 +++
macros/macros.go | 6 +
macros/provider.go | 23 +-
macros/provider_test.go | 16 +-
macros/replacer.go | 4 +-
macros/string_index_based_replacer.go | 11 +-
macros/string_index_based_replacer_test.go | 47 +-
main.go | 21 +-
main_test.go | 2 +-
metrics/config/metrics.go | 19 +-
metrics/config/metrics_test.go | 31 +-
metrics/go_metrics.go | 24 +-
metrics/go_metrics_test.go | 68 +-
metrics/metrics.go | 11 +-
metrics/metrics_mock.go | 7 +-
metrics/prometheus/preload.go | 10 +-
metrics/prometheus/prometheus.go | 23 +-
metrics/prometheus/prometheus_test.go | 59 +-
modules/builder.go | 6 +-
.../fiftyonedegrees/devicedetection/README.md | 255 ++
.../devicedetection/account_info_extractor.go | 37 +
.../account_info_extractor_test.go | 74 +
.../devicedetection/account_validator.go | 28 +
.../devicedetection/account_validator_test.go | 71 +
.../fiftyonedegrees/devicedetection/config.go | 80 +
.../devicedetection/config_test.go | 119 +
.../devicedetection/context.go | 8 +
.../devicedetection/device_detector.go | 157 +
.../devicedetection/device_detector_test.go | 190 ++
.../devicedetection/device_info_extractor.go | 121 +
.../device_info_extractor_test.go | 130 +
.../devicedetection/evidence_extractor.go | 118 +
.../evidence_extractor_test.go | 256 ++
.../devicedetection/fiftyone_device_types.go | 77 +
.../fiftyone_device_types_test.go | 90 +
.../hook_auction_entrypoint.go | 27 +
.../hook_raw_auction_request.go | 173 +
.../fiftyonedegrees/devicedetection/models.go | 66 +
.../devicedetection/models_test.go | 63 +
.../fiftyonedegrees/devicedetection/module.go | 107 +
.../devicedetection/module_test.go | 703 ++++
.../request_headers_extractor.go | 47 +
.../request_headers_extractor_test.go | 118 +
.../devicedetection/sample/pbs.json | 84 +
.../devicedetection/sample/request_data.json | 114 +
.../devicedetection/sua_payload_extractor.go | 144 +
modules/generator/builder.tmpl | 17 +-
modules/generator/buildergen.go | 21 +-
modules/helpers.go | 4 +-
modules/moduledeps/deps.go | 9 +-
modules/modules.go | 8 +-
modules/modules_test.go | 8 +-
modules/prebid/ortb2blocking/analytics.go | 4 +-
modules/prebid/ortb2blocking/config.go | 4 +-
modules/prebid/ortb2blocking/config_test.go | 2 +-
.../ortb2blocking/hook_bidderrequest.go | 30 +-
.../ortb2blocking/hook_raw_bidder_response.go | 16 +-
modules/prebid/ortb2blocking/module.go | 6 +-
modules/prebid/ortb2blocking/module_test.go | 427 +--
modules/prebid/ortb2blocking/utils.go | 4 +-
openrtb_ext/alternatebiddercodes.go | 31 +-
openrtb_ext/alternatebiddercodes_test.go | 148 +
openrtb_ext/bid.go | 8 +
openrtb_ext/bid_request_video.go | 2 +-
openrtb_ext/bidders.go | 136 +-
openrtb_ext/bidders_validate_test.go | 2 +-
openrtb_ext/convert_down.go | 30 +-
openrtb_ext/convert_down_test.go | 90 +-
openrtb_ext/convert_up.go | 4 +-
openrtb_ext/convert_up_test.go | 6 +-
openrtb_ext/deal_tier.go | 10 +-
openrtb_ext/deal_tier_test.go | 71 +-
openrtb_ext/device.go | 2 +-
openrtb_ext/device_test.go | 2 +-
openrtb_ext/floors.go | 66 +-
openrtb_ext/floors_test.go | 262 ++
openrtb_ext/imp.go | 16 +
openrtb_ext/imp_adelement.go | 5 +
openrtb_ext/imp_admatic.go | 6 +
openrtb_ext/imp_adtarget.go | 10 +-
openrtb_ext/imp_adtelligent.go | 10 +-
openrtb_ext/imp_adtonos.go | 5 +
openrtb_ext/imp_aidem.go | 8 +-
openrtb_ext/imp_alkimi.go | 9 +
openrtb_ext/imp_appnexus.go | 2 +-
openrtb_ext/imp_appnexus_test.go | 2 +-
openrtb_ext/imp_aso.go | 5 +
openrtb_ext/imp_bidmatic.go | 11 +
openrtb_ext/imp_bigoad.go | 5 +
.../{imp_bizzclick.go => imp_blasto.go} | 4 +-
openrtb_ext/imp_bwx.go | 6 +
openrtb_ext/imp_cointraffic.go | 5 +
openrtb_ext/imp_concert.go | 9 +
openrtb_ext/imp_connectad.go | 8 +-
openrtb_ext/imp_consumable.go | 3 +-
openrtb_ext/imp_copper6ssp.go | 6 +
openrtb_ext/imp_displayio.go | 7 +
openrtb_ext/imp_driftpixel.go | 6 +
openrtb_ext/imp_escalax.go | 6 +
openrtb_ext/imp_freewheelssp.go | 2 +-
openrtb_ext/imp_gumgum.go | 9 +-
openrtb_ext/imp_loyal.go | 6 +
openrtb_ext/imp_mediago.go | 13 +
openrtb_ext/imp_melozen.go | 5 +
openrtb_ext/imp_metax.go | 7 +
openrtb_ext/imp_minutemedia.go | 6 +
openrtb_ext/imp_missena.go | 7 +
openrtb_ext/imp_oms.go | 6 +
openrtb_ext/imp_openweb.go | 7 +-
openrtb_ext/imp_openx.go | 6 +-
openrtb_ext/imp_oraki.go | 6 +
openrtb_ext/imp_playdigo.go | 6 +
openrtb_ext/imp_pubrise.go | 6 +
openrtb_ext/imp_pulsepoint.go | 8 +-
openrtb_ext/imp_qt.go | 6 +
openrtb_ext/imp_readpeak.go | 8 +
openrtb_ext/imp_relevantdigital.go | 8 +
openrtb_ext/imp_rise.go | 1 +
openrtb_ext/imp_roulax.go | 6 +
openrtb_ext/imp_seedingAlliance.go | 4 +-
openrtb_ext/imp_smrtconnect.go | 5 +
openrtb_ext/imp_sovrnXsp.go | 8 +
openrtb_ext/imp_suntContent.go | 5 -
openrtb_ext/imp_theadx.go | 12 +
openrtb_ext/imp_thetradedesk.go | 8 +
openrtb_ext/imp_trustedstack.go | 6 +
openrtb_ext/imp_vidazoo.go | 6 +
openrtb_ext/{imp_liftoff.go => imp_vungle.go} | 2 +-
openrtb_ext/imp_yandex.go | 16 +
openrtb_ext/imp_zmaticoo.go | 7 +
openrtb_ext/multibid_test.go | 2 +-
openrtb_ext/regs.go | 49 +
openrtb_ext/regs_test.go | 97 +
openrtb_ext/request.go | 88 +-
openrtb_ext/request_test.go | 6 +-
openrtb_ext/request_wrapper.go | 184 +-
openrtb_ext/request_wrapper_test.go | 456 ++-
openrtb_ext/response.go | 15 +-
openrtb_ext/site_test.go | 4 +-
openrtb_ext/source.go | 2 +-
openrtb_ext/supplyChain.go | 4 +-
openrtb_ext/supplyChain_test.go | 4 +-
openrtb_ext/user.go | 2 +-
ortb/clone.go | 206 +-
ortb/clone_test.go | 701 ++--
ortb/default.go | 34 +-
ortb/default_test.go | 41 +-
ortb/request_validator.go | 195 ++
ortb/request_validator_audio.go | 34 +
ortb/request_validator_audio_test.go | 99 +
ortb/request_validator_banner.go | 95 +
ortb/request_validator_banner_test.go | 288 ++
ortb/request_validator_native.go | 273 ++
ortb/request_validator_native_test.go | 428 +++
ortb/request_validator_pmp.go | 20 +
ortb/request_validator_pmp_test.go | 103 +
ortb/request_validator_test.go | 299 ++
ortb/request_validator_video.go | 34 +
ortb/request_validator_video_test.go | 111 +
pbs/usersync.go | 6 +-
prebid_cache_client/client.go | 4 +-
prebid_cache_client/client_test.go | 8 +-
privacy/activitycontrol.go | 11 +-
privacy/activitycontrol_test.go | 32 +-
privacy/ccpa/consentwriter.go | 13 +-
privacy/ccpa/consentwriter_test.go | 15 +-
privacy/ccpa/parsedpolicy.go | 2 +-
privacy/ccpa/policy.go | 31 +-
privacy/ccpa/policy_test.go | 45 +-
privacy/enforcement.go | 92 -
privacy/enforcement_test.go | 393 ---
privacy/gdpr/consentwriter.go | 28 +-
privacy/gdpr/consentwriter_test.go | 30 +-
privacy/lmt/ios.go | 6 +-
privacy/lmt/ios_test.go | 4 +-
privacy/lmt/policy.go | 2 +-
privacy/lmt/policy_test.go | 2 +-
privacy/rule_condition_test.go | 4 +-
privacy/scrubber.go | 331 +-
privacy/scrubber_test.go | 850 ++---
privacy/writer.go | 2 +-
privacy/writer_test.go | 2 +-
privacysandbox/topics.go | 228 ++
privacysandbox/topics_test.go | 722 ++++
router/admin.go | 6 +-
router/aspects/request_timeout_handler.go | 4 +-
.../aspects/request_timeout_handler_test.go | 8 +-
router/bidder_params_tests/appnexus.json | 27 +
router/router.go | 188 +-
router/router_test.go | 97 +-
router/test_aliases.json | 12 -
sample/001_banner/app.yaml | 20 +
sample/001_banner/pbjs.html | 121 +
sample/001_banner/stored_request.json | 28 +
sample/001_banner/stored_response.json | 46 +
sample/README.md | 65 +
sample/docker-compose.yml | 20 +
schain/schain.go | 4 +-
schain/schain_test.go | 4 +-
schain/schainwriter.go | 38 +-
schain/schainwriter_test.go | 359 +-
scripts/check_coverage.sh | 3 +-
server/listener.go | 2 +-
server/listener_test.go | 4 +-
server/prometheus.go | 4 +-
server/server.go | 26 +-
server/server_test.go | 28 +-
server/ssl/ssl_test.go | 2 +-
static/bidder-info/33across.yaml | 5 +-
static/bidder-info/adelement.yaml | 18 +
static/bidder-info/adf.yaml | 8 +
static/bidder-info/adkernel.yaml | 9 +-
static/bidder-info/admatic.yaml | 20 +
static/bidder-info/adprime.yaml | 7 +
static/bidder-info/adquery.yaml | 13 +-
static/bidder-info/adtonos.yaml | 24 +
static/bidder-info/aidem.yaml | 4 +-
static/bidder-info/algorix.yaml | 1 +
static/bidder-info/alkimi.yaml | 19 +
static/bidder-info/aso.yaml | 21 +
static/bidder-info/axonix.yaml | 4 +
static/bidder-info/bcmint.yaml | 10 +
static/bidder-info/bidgency.yaml | 10 +
static/bidder-info/bidmatic.yaml | 18 +
static/bidder-info/bigoad.yaml | 26 +
static/bidder-info/blasto.yaml | 23 +
static/bidder-info/bliink.yaml | 3 +
static/bidder-info/bluesea.yaml | 6 +
static/bidder-info/bmtm.yaml | 6 +-
static/bidder-info/boldwin.yaml | 6 +-
static/bidder-info/bwx.yaml | 19 +
static/bidder-info/cointraffic.yaml | 10 +
static/bidder-info/concert.yaml | 18 +
static/bidder-info/connectad.yaml | 21 +-
static/bidder-info/consumable.yaml | 3 +
static/bidder-info/conversant.yaml | 8 +-
static/bidder-info/copper6ssp.yaml | 22 +
static/bidder-info/cpmstar.yaml | 6 +-
static/bidder-info/criteo.yaml | 6 +-
static/bidder-info/displayio.yaml | 16 +
static/bidder-info/driftpixel.yaml | 18 +
static/bidder-info/dxkulture.yaml | 6 +-
static/bidder-info/e_volution.yaml | 4 +-
static/bidder-info/embimedia.yaml | 2 +
static/bidder-info/epsilon.yaml | 16 +-
static/bidder-info/escalax.yaml | 18 +
static/bidder-info/felixads.yaml | 2 +
static/bidder-info/filmzie.yaml | 1 +
static/bidder-info/finative.yaml | 2 +
static/bidder-info/freewheel-ssp.yaml | 15 +-
static/bidder-info/freewheelssp.yaml | 5 +-
static/bidder-info/grid.yaml | 2 +-
static/bidder-info/gumgum.yaml | 3 +
static/bidder-info/imds.yaml | 4 +
static/bidder-info/indicue.yaml | 9 +
static/bidder-info/inmobi.yaml | 5 +-
static/bidder-info/iqx.yaml | 4 +-
static/bidder-info/iqzone.yaml | 10 +-
static/bidder-info/ix.yaml | 1 +
static/bidder-info/jdpmedia.yaml | 5 +
static/bidder-info/kargo.yaml | 7 +-
static/bidder-info/krushmedia.yaml | 5 +-
static/bidder-info/lemmadigital.yaml | 8 +-
static/bidder-info/lockerdome.yaml | 3 +
static/bidder-info/loyal.yaml | 16 +
static/bidder-info/lunamedia.yaml | 2 +
static/bidder-info/mabidder.yaml | 5 +-
static/bidder-info/magnite.yaml | 1 +
static/bidder-info/markapp.yaml | 5 +
static/bidder-info/mediago.yaml | 26 +
static/bidder-info/medianet.yaml | 5 +-
static/bidder-info/melozen.yaml | 19 +
static/bidder-info/metax.yaml | 18 +
static/bidder-info/mgidX.yaml | 6 +-
static/bidder-info/minutemedia.yaml | 18 +
static/bidder-info/missena.yaml | 16 +
static/bidder-info/mobfoxpb.yaml | 2 +-
static/bidder-info/mobilefuse.yaml | 9 +-
static/bidder-info/nativo.yaml | 22 +
static/bidder-info/nextmillennium.yaml | 3 +
static/bidder-info/nobid.yaml | 3 +
static/bidder-info/oms.yaml | 11 +
static/bidder-info/onetag.yaml | 5 +-
static/bidder-info/openweb.yaml | 10 +-
static/bidder-info/openx.yaml | 3 +
static/bidder-info/oraki.yaml | 18 +
static/bidder-info/ownadx.yaml | 8 +-
static/bidder-info/pgamssp.yaml | 3 +-
static/bidder-info/playdigo.yaml | 24 +
static/bidder-info/pubmatic.yaml | 1 +
static/bidder-info/pubrise.yaml | 21 +
static/bidder-info/pulsepoint.yaml | 3 +
static/bidder-info/qt.yaml | 19 +
static/bidder-info/readpeak.yaml | 15 +
static/bidder-info/relevantdigital.yaml | 17 +
static/bidder-info/rise.yaml | 4 +-
.../{bizzclick.yaml => roulax.yaml} | 4 +-
static/bidder-info/rtbhouse.yaml | 16 +
static/bidder-info/rubicon.yaml | 18 +-
static/bidder-info/seedingAlliance.yaml | 2 +-
static/bidder-info/sharethrough.yaml | 4 +-
static/bidder-info/smaato.yaml | 2 +
static/bidder-info/smarthub.yaml | 2 +-
static/bidder-info/smartx.yaml | 2 +
static/bidder-info/smartyads.yaml | 1 +
static/bidder-info/smrtconnect.yaml | 20 +
static/bidder-info/sonobi.yaml | 7 +-
static/bidder-info/sovrn.yaml | 1 +
static/bidder-info/sovrnXsp.yaml | 12 +
static/bidder-info/streamlyn.yaml | 2 +
static/bidder-info/stroeerCore.yaml | 2 +
static/bidder-info/suntContent.yaml | 12 +-
static/bidder-info/synacormedia.yaml | 14 +-
static/bidder-info/taboola.yaml | 4 +-
static/bidder-info/teads.yaml | 4 +-
static/bidder-info/tgm.yaml | 1 +
static/bidder-info/theadx.yaml | 23 +
static/bidder-info/thetradedesk.yaml | 23 +
static/bidder-info/tredio.yaml | 5 +
static/bidder-info/triplelift.yaml | 8 +-
static/bidder-info/triplelift_native.yaml | 6 +-
static/bidder-info/trustedstack.yaml | 24 +
static/bidder-info/trustx.yaml | 14 +-
static/bidder-info/unruly.yaml | 7 +-
static/bidder-info/vidazoo.yaml | 20 +
static/bidder-info/vimayx.yaml | 2 +
.../bidder-info/{liftoff.yaml => vungle.yaml} | 5 +-
static/bidder-info/yahooAds.yaml | 2 +-
static/bidder-info/yahooAdvertising.yaml | 14 +-
static/bidder-info/yahoossp.yaml | 12 +-
static/bidder-info/yandex.yaml | 13 +
static/bidder-info/yieldmo.yaml | 4 +-
static/bidder-info/zeta_global_ssp.yaml | 4 +-
static/bidder-info/zmaticoo.yaml | 9 +
static/bidder-params/adelement.json | 14 +
static/bidder-params/admatic.json | 20 +
static/bidder-params/adtarget.json | 5 +-
static/bidder-params/adtelligent.json | 5 +-
static/bidder-params/adtonos.json | 14 +
static/bidder-params/alkimi.json | 28 +
static/bidder-params/aso.json | 13 +
static/bidder-params/bidmatic.json | 29 +
static/bidder-params/bigoad.json | 13 +
.../{bizzclick.json => blasto.json} | 13 +-
static/bidder-params/bwx.json | 21 +
static/bidder-params/cointraffic.json | 16 +
static/bidder-params/concert.json | 38 +
static/bidder-params/connectad.json | 46 +-
static/bidder-params/consumable.json | 10 +-
static/bidder-params/copper6ssp.json | 22 +
static/bidder-params/displayio.json | 25 +
static/bidder-params/driftpixel.json | 21 +
static/bidder-params/epsilon.json | 54 -
static/bidder-params/escalax.json | 22 +
static/bidder-params/freewheel-ssp.json | 15 -
static/bidder-params/gumgum.json | 6 +-
static/bidder-params/improvedigital.json | 21 +-
static/bidder-params/loyal.json | 23 +
static/bidder-params/mediago.json | 24 +
static/bidder-params/melozen.json | 14 +
static/bidder-params/metax.json | 19 +
static/bidder-params/minutemedia.json | 14 +
static/bidder-params/missena.json | 24 +
static/bidder-params/nativo.json | 7 +
static/bidder-params/oms.json | 14 +
static/bidder-params/openweb.json | 33 +-
static/bidder-params/openx.json | 8 +-
static/bidder-params/oraki.json | 22 +
static/bidder-params/ownadx.json | 7 +-
static/bidder-params/playdigo.json | 23 +
static/bidder-params/pubrise.json | 22 +
static/bidder-params/pulsepoint.json | 10 +-
static/bidder-params/qt.json | 22 +
static/bidder-params/readpeak.json | 25 +
static/bidder-params/relevantdigital.json | 29 +
static/bidder-params/rise.json | 16 +-
static/bidder-params/roulax.json | 19 +
static/bidder-params/seedingAlliance.json | 8 +
static/bidder-params/smrtconnect.json | 14 +
static/bidder-params/sovrnXsp.json | 27 +
static/bidder-params/suntContent.json | 16 -
static/bidder-params/synacormedia.json | 19 -
static/bidder-params/theadx.json | 32 +
static/bidder-params/thetradedesk.json | 13 +
static/bidder-params/triplelift_native.json | 1 +
static/bidder-params/trustedstack.json | 22 +
static/bidder-params/trustx.json | 13 -
static/bidder-params/vidazoo.json | 16 +
.../{liftoff.json => vungle.json} | 4 +-
static/bidder-params/yahooAdvertising.json | 19 -
static/bidder-params/yahoossp.json | 19 -
static/bidder-params/yandex.json | 33 +
static/bidder-params/zmaticoo.json | 22 +
static/index.html | 2 +-
.../backends/db_fetcher/fetcher.go | 6 +-
.../backends/db_fetcher/fetcher_test.go | 2 +-
.../backends/db_provider/db_provider.go | 2 +-
.../backends/db_provider/db_provider_mock.go | 2 +-
.../backends/db_provider/mysql_dbprovider.go | 2 +-
.../db_provider/mysql_dbprovider_test.go | 2 +-
.../db_provider/postgres_dbprovider.go | 2 +-
.../db_provider/postgres_dbprovider_test.go | 2 +-
.../backends/empty_fetcher/fetcher.go | 4 +-
.../backends/file_fetcher/fetcher.go | 14 +-
.../backends/file_fetcher/fetcher_test.go | 83 +-
.../test/stored_responses/bar.json | 4 +
.../test/stored_responses/escaped.json | 1 +
.../backends/http_fetcher/fetcher.go | 7 +-
.../backends/http_fetcher/fetcher_test.go | 6 +-
stored_requests/caches/cachestest/reliable.go | 2 +-
stored_requests/caches/memory/cache.go | 2 +-
stored_requests/caches/memory/cache_test.go | 4 +-
stored_requests/config/config.go | 30 +-
stored_requests/config/config_test.go | 16 +-
stored_requests/data/by_id/accounts/test.json | 2 +-
stored_requests/events/api/api.go | 4 +-
stored_requests/events/api/api_test.go | 6 +-
stored_requests/events/database/database.go | 14 +-
.../events/database/database_test.go | 8 +-
stored_requests/events/events.go | 2 +-
stored_requests/events/events_test.go | 4 +-
stored_requests/events/http/http.go | 87 +-
stored_requests/events/http/http_test.go | 2 +-
stored_requests/fetcher.go | 2 +-
stored_requests/fetcher_test.go | 4 +-
stored_responses/stored_responses.go | 134 +-
stored_responses/stored_responses_test.go | 641 ++--
usersync/chooser.go | 71 +-
usersync/chooser_test.go | 306 +-
usersync/cookie.go | 8 +-
usersync/cookie_test.go | 8 +-
usersync/decoder.go | 2 +-
usersync/encoder.go | 2 +-
usersync/syncer.go | 36 +-
usersync/syncer_test.go | 38 +-
usersync/syncersbuilder.go | 8 +-
usersync/syncersbuilder_test.go | 4 +-
util/httputil/httputil.go | 2 +-
util/httputil/httputil_test.go | 2 +-
util/jsonutil/jsonutil.go | 39 +-
util/jsonutil/jsonutil_test.go | 82 +
util/jsonutil/merge.go | 176 +
util/jsonutil/merge_test.go | 470 +++
util/maputil/maputil.go | 13 -
util/maputil/maputil_test.go | 26 -
util/ptrutil/ptrutil.go | 9 +
util/ptrutil/ptrutil_test.go | 45 +
util/sliceutil/clone.go | 12 -
util/sliceutil/clone_test.go | 39 -
util/stringutil/stringutil_test.go | 6 +-
util/task/ticker_task_test.go | 2 +-
validate.sh | 2 +-
version/xprebidheader.go | 4 +-
version/xprebidheader_test.go | 6 +-
3865 files changed, 117979 insertions(+), 22039 deletions(-)
create mode 100644 adapters/33across/33acrosstest/supplemental/video-validation-fail-size-null.json
create mode 100644 adapters/33across/33acrosstest/supplemental/video-validation-fail-size-partial.json
create mode 100644 adapters/33across/33acrosstest/supplemental/video-validation-fail-size-zero.json
create mode 100644 adapters/adelement/adelement.go
create mode 100644 adapters/adelement/adelement_test.go
create mode 100644 adapters/adelement/adelementtest/exemplary/audio-app.json
create mode 100644 adapters/adelement/adelementtest/exemplary/audio-web.json
create mode 100644 adapters/adelement/adelementtest/exemplary/banner-app.json
create mode 100644 adapters/adelement/adelementtest/exemplary/banner-web.json
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/exemplary/native-app.json (83%)
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/exemplary/native-web.json (82%)
create mode 100644 adapters/adelement/adelementtest/exemplary/video-app.json
create mode 100644 adapters/adelement/adelementtest/exemplary/video-web.json
create mode 100644 adapters/adelement/adelementtest/supplemental/empty-seatbid-array.json
rename adapters/{bizzclick/bizzclicktest/supplemental/invalid-bizzclick-ext-object.json => adelement/adelementtest/supplemental/invalid-aceex-ext-object.json} (100%)
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/supplemental/invalid-response.json (77%)
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/supplemental/status-code-bad-request.json (87%)
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/supplemental/status-code-no-content.json (87%)
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/supplemental/status-code-other-error.json (83%)
rename adapters/{bizzclick/bizzclicktest => adelement/adelementtest}/supplemental/status-code-service-unavailable.json (83%)
create mode 100644 adapters/adhese/adhesetest/supplemental/res-no_bids_200.json
rename adapters/adhese/adhesetest/supplemental/{res-no_bids.json => res-no_bids_204.json} (91%)
create mode 100644 adapters/admatic/admatic.go
create mode 100644 adapters/admatic/admatic_test.go
create mode 100644 adapters/admatic/admatictest/exemplary/banner.json
create mode 100644 adapters/admatic/admatictest/exemplary/multiple-imps.json
create mode 100644 adapters/admatic/admatictest/exemplary/native.json
create mode 100644 adapters/admatic/admatictest/exemplary/optional-params.json
create mode 100644 adapters/admatic/admatictest/exemplary/video.json
create mode 100644 adapters/admatic/admatictest/supplemental/bad-request.json
create mode 100644 adapters/admatic/admatictest/supplemental/multiple-imps-with-error.json
create mode 100644 adapters/admatic/admatictest/supplemental/response-200-without-body.json
create mode 100644 adapters/admatic/admatictest/supplemental/response-204.json
create mode 100644 adapters/admatic/admatictest/supplemental/server-error.json
create mode 100644 adapters/admatic/params_test.go
create mode 100644 adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName-omitted.json
create mode 100644 adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName.json
create mode 100644 adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-omitted.json
create mode 100644 adapters/adnuntius/adnuntiustest/supplemental/invalid-regs-ext.json
create mode 100644 adapters/adnuntius/adnuntiustest/supplemental/site-ext.json
create mode 100644 adapters/adnuntius/adnuntiustest/supplemental/user-ext.json
create mode 100644 adapters/adquery/adquerytest/supplemental/no-device.json
create mode 100644 adapters/adquery/adquerytest/supplemental/no-site.json
create mode 100644 adapters/adtonos/adtonos.go
create mode 100644 adapters/adtonos/adtonos_test.go
create mode 100644 adapters/adtonos/adtonostest/exemplary/simple-audio-with-mtype.json
create mode 100644 adapters/adtonos/adtonostest/exemplary/simple-audio.json
create mode 100644 adapters/adtonos/adtonostest/exemplary/simple-video.json
create mode 100644 adapters/adtonos/adtonostest/supplemental/wrong-impression-mapping.json
create mode 100644 adapters/adtonos/params_test.go
create mode 100644 adapters/adview/adviewtest/exemplary/banner-app-resp-no-formattype.json
create mode 100644 adapters/alkimi/alkimi.go
create mode 100644 adapters/alkimi/alkimi_test.go
create mode 100644 adapters/alkimi/alkimitest/exemplary/simple-audio.json
create mode 100644 adapters/alkimi/alkimitest/exemplary/simple-banner.json
create mode 100644 adapters/alkimi/alkimitest/exemplary/simple-video.json
create mode 100644 adapters/alkimi/alkimitest/supplemental/bad_media_type.json
create mode 100644 adapters/alkimi/alkimitest/supplemental/bad_response.json
create mode 100644 adapters/alkimi/alkimitest/supplemental/status-204.json
create mode 100644 adapters/alkimi/alkimitest/supplemental/status-not-200.json
create mode 100644 adapters/alkimi/params_test.go
create mode 100644 adapters/appnexus/appnexustest/supplemental/gpid.json
create mode 100644 adapters/aso/aso.go
create mode 100644 adapters/aso/aso_test.go
create mode 100644 adapters/aso/asotest/exemplary/app-banner.json
create mode 100644 adapters/aso/asotest/exemplary/app-multi-impressions.json
create mode 100644 adapters/aso/asotest/exemplary/app-native.json
create mode 100644 adapters/aso/asotest/exemplary/app-video.json
create mode 100644 adapters/aso/asotest/exemplary/site-banner.json
create mode 100644 adapters/aso/asotest/exemplary/site-native.json
create mode 100644 adapters/aso/asotest/exemplary/site-video.json
create mode 100644 adapters/aso/asotest/supplemental/bad-request-no-bidder.json
create mode 100644 adapters/aso/asotest/supplemental/bad-request-no-ext.json
create mode 100644 adapters/aso/asotest/supplemental/bad-request.json
create mode 100644 adapters/aso/asotest/supplemental/empty-response.json
rename adapters/{openweb/openwebtest/supplemental/status-400.json => aso/asotest/supplemental/media-type-absent.json} (52%)
create mode 100644 adapters/aso/asotest/supplemental/media-type-mapping.json
create mode 100644 adapters/aso/asotest/supplemental/server-error.json
create mode 100644 adapters/aso/asotest/supplemental/unparsable-response.json
create mode 100644 adapters/aso/params_test.go
create mode 100644 adapters/beachfront/beachfronttest/supplemental/adm-video-no-size.json
create mode 100644 adapters/beachfront/beachfronttest/supplemental/adm-video-partial-size.json
create mode 100644 adapters/beachfront/beachfronttest/supplemental/adm-video-zero-size-partial.json
create mode 100644 adapters/beachfront/beachfronttest/supplemental/adm-video-zero-size.json
create mode 100644 adapters/bidmatic/bidmatic.go
create mode 100644 adapters/bidmatic/bidmatic_test.go
create mode 100644 adapters/bidmatic/bidmatictest/exemplary/media-type-mapping.json
create mode 100644 adapters/bidmatic/bidmatictest/exemplary/simple-banner.json
rename adapters/{openweb/openwebtest/supplemental/status-204.json => bidmatic/bidmatictest/exemplary/simple-video.json} (78%)
create mode 100644 adapters/bidmatic/bidmatictest/supplemental/explicit-dimensions.json
create mode 100644 adapters/bidmatic/bidmatictest/supplemental/imp-ext-empty.json
create mode 100644 adapters/bidmatic/bidmatictest/supplemental/wrong-impression-ext.json
rename adapters/{openweb/openwebtest => bidmatic/bidmatictest}/supplemental/wrong-impression-mapping.json (88%)
create mode 100644 adapters/bidmatic/bidmatictest/supplemental/wrong-response.json
create mode 100644 adapters/bidmatic/params_test.go
create mode 100644 adapters/bigoad/bigoad.go
create mode 100644 adapters/bigoad/bigoad_test.go
create mode 100644 adapters/bigoad/bigoadtest/exemplary/banner_app.json
create mode 100644 adapters/bigoad/bigoadtest/exemplary/banner_web.json
create mode 100644 adapters/bigoad/bigoadtest/exemplary/native_app.json
create mode 100644 adapters/bigoad/bigoadtest/exemplary/native_web.json
create mode 100644 adapters/bigoad/bigoadtest/exemplary/video_app.json
create mode 100644 adapters/bigoad/bigoadtest/exemplary/video_web.json
create mode 100644 adapters/bigoad/bigoadtest/supplemental/empty_seatbid.json
create mode 100644 adapters/bigoad/bigoadtest/supplemental/invalid_mtype.json
create mode 100644 adapters/bigoad/bigoadtest/supplemental/invalid_request.json
create mode 100644 adapters/bigoad/bigoadtest/supplemental/invalid_request_bigo_ext.json
create mode 100644 adapters/bigoad/bigoadtest/supplemental/invalid_response.json
rename adapters/{suntContent/params_test.go => bigoad/param_test.go} (67%)
rename adapters/{bizzclick/bizzclick.go => blasto/blasto.go} (81%)
rename adapters/{bizzclick/bizzclick_test.go => blasto/blasto_test.go} (52%)
rename adapters/{bizzclick/bizzclicktest => blasto/blastotest}/exemplary/banner-app.json (93%)
rename adapters/{bizzclick/bizzclicktest => blasto/blastotest}/exemplary/banner-web.json (87%)
create mode 100644 adapters/blasto/blastotest/exemplary/default-host-param.json
create mode 100644 adapters/blasto/blastotest/exemplary/native-app.json
create mode 100644 adapters/blasto/blastotest/exemplary/native-web.json
rename adapters/{bizzclick/bizzclicktest => blasto/blastotest}/exemplary/video-app.json (92%)
rename adapters/{bizzclick/bizzclicktest => blasto/blastotest}/exemplary/video-web.json (93%)
rename adapters/{bizzclick/bizzclicktest => blasto/blastotest}/supplemental/empty-seatbid-array.json (89%)
create mode 100644 adapters/blasto/blastotest/supplemental/invalid-blasto-ext-object.json
create mode 100644 adapters/blasto/blastotest/supplemental/invalid-response.json
create mode 100644 adapters/blasto/blastotest/supplemental/status-code-bad-request.json
create mode 100644 adapters/blasto/blastotest/supplemental/status-code-no-content.json
create mode 100644 adapters/blasto/blastotest/supplemental/status-code-other-error.json
create mode 100644 adapters/blasto/blastotest/supplemental/status-code-service-unavailable.json
rename adapters/{bizzclick => blasto}/params_test.go (68%)
create mode 100644 adapters/bluesea/blueseatest/exemplary/site-banner.json
create mode 100644 adapters/bluesea/blueseatest/exemplary/site-native.json
create mode 100644 adapters/bluesea/blueseatest/exemplary/site-video.json
create mode 100644 adapters/bmtm/brightmountainmediatest/exemplary/app-banner.json
create mode 100644 adapters/bmtm/brightmountainmediatest/exemplary/app-video.json
create mode 100644 adapters/bwx/bwx.go
create mode 100644 adapters/bwx/bwx_test.go
create mode 100644 adapters/bwx/bwxtest/exemplary/banner.json
create mode 100644 adapters/bwx/bwxtest/exemplary/native.json
create mode 100644 adapters/bwx/bwxtest/exemplary/video.json
create mode 100644 adapters/bwx/bwxtest/supplemental/bad-response.json
create mode 100644 adapters/bwx/bwxtest/supplemental/empty-mediatype.json
create mode 100644 adapters/bwx/bwxtest/supplemental/empty-seatbid-0-bid.json
create mode 100644 adapters/bwx/bwxtest/supplemental/empty-seatbid.json
create mode 100644 adapters/bwx/bwxtest/supplemental/invalid-ext-bidder-object.json
create mode 100644 adapters/bwx/bwxtest/supplemental/invalid-ext-object.json
create mode 100644 adapters/bwx/bwxtest/supplemental/invalid-mediatype.json
create mode 100644 adapters/bwx/bwxtest/supplemental/status-204.json
create mode 100644 adapters/bwx/bwxtest/supplemental/status-400.json
create mode 100644 adapters/bwx/bwxtest/supplemental/status-503.json
create mode 100644 adapters/bwx/bwxtest/supplemental/unexpected-status.json
create mode 100644 adapters/bwx/params_test.go
create mode 100644 adapters/cadent_aperture_mx/cadent_aperture_mxtest/supplemental/bad-imp-video-missing-partial-sizes.json
create mode 100644 adapters/cadent_aperture_mx/cadent_aperture_mxtest/supplemental/bad-imp-video-zero-sizes.json
create mode 100644 adapters/cointraffic/cointraffic.go
create mode 100644 adapters/cointraffic/cointraffic_test.go
create mode 100644 adapters/cointraffic/cointraffictest/exemplary/simple-banner.json
create mode 100644 adapters/cointraffic/cointraffictest/supplemental/bad-request.json
create mode 100644 adapters/cointraffic/cointraffictest/supplemental/no-bid.json
create mode 100644 adapters/cointraffic/cointraffictest/supplemental/server-error.json
create mode 100644 adapters/cointraffic/params_test.go
create mode 100644 adapters/concert/concert.go
create mode 100644 adapters/concert/concert_test.go
create mode 100644 adapters/concert/concerttest/exemplary/audio.json
create mode 100644 adapters/concert/concerttest/exemplary/banner.json
create mode 100644 adapters/concert/concerttest/exemplary/video.json
create mode 100644 adapters/concert/params_test.go
delete mode 100644 adapters/consumable/adtypes.go
create mode 100644 adapters/consumable/consumable/exemplary/app-audio.json
create mode 100644 adapters/consumable/consumable/exemplary/app-banner.json
create mode 100644 adapters/consumable/consumable/exemplary/app-video.json
create mode 100644 adapters/consumable/consumable/supplemental/app-audio-bad-params.json
create mode 100644 adapters/consumable/consumable/supplemental/app-banner-no-ad.json
create mode 100644 adapters/consumable/consumable/supplemental/app-video-no-media-type.json
create mode 100644 adapters/consumable/consumable/supplemental/bad-dsp-request-example.json
create mode 100644 adapters/consumable/consumable/supplemental/dsp-server-internal-error-example.json
create mode 100644 adapters/consumable/consumable/supplemental/simple-banner-no-params.json
create mode 100644 adapters/consumable/consumable/supplemental/unknown-status-code-example.json
delete mode 100644 adapters/consumable/instant.go
delete mode 100644 adapters/consumable/retrieveAd.go
create mode 100644 adapters/copper6ssp/copper6ssp.go
create mode 100644 adapters/copper6ssp/copper6ssp_test.go
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/endpointId.json
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/multi-format.json
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/multi-imp.json
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/simple-banner.json
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/simple-native.json
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/simple-video.json
create mode 100644 adapters/copper6ssp/copper6ssptest/exemplary/simple-web-banner.json
create mode 100644 adapters/copper6ssp/copper6ssptest/supplemental/bad_media_type.json
create mode 100644 adapters/copper6ssp/copper6ssptest/supplemental/bad_response.json
create mode 100644 adapters/copper6ssp/copper6ssptest/supplemental/no-valid-bidder-param.json
create mode 100644 adapters/copper6ssp/copper6ssptest/supplemental/no-valid-imp-ext.json
create mode 100644 adapters/copper6ssp/copper6ssptest/supplemental/status-204.json
create mode 100644 adapters/copper6ssp/copper6ssptest/supplemental/status-not-200.json
create mode 100644 adapters/copper6ssp/params_test.go
create mode 100644 adapters/cpmstar/cpmstartest/exemplary/multiple-banners.json
create mode 100644 adapters/criteo/criteotest/exemplary/simple-banner-paapi.json
create mode 100644 adapters/criteo/criteotest/exemplary/simple-native.json
create mode 100644 adapters/displayio/displayio.go
create mode 100644 adapters/displayio/displayio_test.go
create mode 100644 adapters/displayio/displayiotest/exemplary/multi-format.json
create mode 100644 adapters/displayio/displayiotest/exemplary/multi-imp.json
create mode 100644 adapters/displayio/displayiotest/exemplary/simple-banner.json
create mode 100644 adapters/displayio/displayiotest/exemplary/simple-video.json
create mode 100644 adapters/displayio/displayiotest/supplemental/bad-response.json
create mode 100644 adapters/displayio/displayiotest/supplemental/currency-conversion.json
create mode 100644 adapters/displayio/displayiotest/supplemental/ext.json
create mode 100644 adapters/displayio/displayiotest/supplemental/nobid-response.json
create mode 100644 adapters/displayio/displayiotest/supplemental/response-code-invalid.json
create mode 100644 adapters/displayio/displayiotest/supplemental/seatbid-response.json
create mode 100644 adapters/displayio/displayiotest/supplemental/unexpected-media-type.json
create mode 100644 adapters/displayio/params_test.go
create mode 100644 adapters/driftpixel/driftpixel.go
create mode 100644 adapters/driftpixel/driftpixel_test.go
create mode 100644 adapters/driftpixel/driftpixeltest/exemplary/banner.json
create mode 100644 adapters/driftpixel/driftpixeltest/exemplary/multi-format.json
create mode 100644 adapters/driftpixel/driftpixeltest/exemplary/multi-imp-banner.json
create mode 100644 adapters/driftpixel/driftpixeltest/exemplary/native.json
create mode 100644 adapters/driftpixel/driftpixeltest/exemplary/video.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/bad-response.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/empty-mediatype.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/empty-seatbid-0-bid.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/empty-seatbid.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/invalid-ext-bidder-object.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/invalid-ext-object.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/invalid-mediatype.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/status-204.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/status-400.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/status-503.json
create mode 100644 adapters/driftpixel/driftpixeltest/supplemental/unexpected-status.json
create mode 100644 adapters/driftpixel/params_test.go
create mode 100644 adapters/eplanning/eplanningtest/supplemental/video-partial-size-send-640x480.json
create mode 100644 adapters/eplanning/eplanningtest/supplemental/video-zero-size-send-640x480.json
create mode 100644 adapters/escalax/escalax.go
create mode 100644 adapters/escalax/escalax_test.go
create mode 100644 adapters/escalax/escalaxtest/exemplary/banner-app.json
create mode 100644 adapters/escalax/escalaxtest/exemplary/banner-web.json
create mode 100644 adapters/escalax/escalaxtest/exemplary/native-app.json
create mode 100644 adapters/escalax/escalaxtest/exemplary/native-web.json
create mode 100644 adapters/escalax/escalaxtest/exemplary/video-app.json
create mode 100644 adapters/escalax/escalaxtest/exemplary/video-web.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/bad_media_type.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/empty-seatbid-array.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/invalid-bidder-ext-object.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/invalid-ext-object.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/invalid-response.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/status-code-bad-request.json
create mode 100644 adapters/escalax/escalaxtest/supplemental/status-code-other-error.json
create mode 100644 adapters/escalax/params_test.go
create mode 100644 adapters/flipp/flipptest/exemplary/simple-banner-native-param-transmit-eids.json
create mode 100644 adapters/flipp/flipptest/exemplary/simple-banner-native-param-user-coppa.json
create mode 100644 adapters/flipp/flipptest/exemplary/simple-banner-native-param-user-gdpr.json
create mode 100644 adapters/gumgum/gumgumtest/supplemental/banner-with-pubId-product-params.json
create mode 100644 adapters/gumgum/gumgumtest/supplemental/convert-currency.json
delete mode 100644 adapters/gumgum/gumgumtest/supplemental/missing-video-params.json
create mode 100644 adapters/gumgum/gumgumtest/supplemental/video-partial-size.json
create mode 100644 adapters/gumgum/gumgumtest/supplemental/video-zero-size.json
create mode 100644 adapters/huaweiads/huaweiadstest/exemplary/nativeMultiSizesByRange.json
create mode 100644 adapters/huaweiads/huaweiadstest/exemplary/nativeMultiSizesByRatio.json
create mode 100644 adapters/huaweiads/huaweiadstest/supplemental/missing_video_size.json
create mode 100644 adapters/huaweiads/huaweiadstest/supplemental/zero_video_size.json
delete mode 100644 adapters/improvedigital/improvedigitaltest/supplemental/addtl-consent.json
create mode 100644 adapters/inmobi/inmobitest/exemplary/simple-web-native.json
create mode 100644 adapters/inmobi/inmobitest/supplemental/invalid-mtype.json
create mode 100644 adapters/ix/ixtest/exemplary/fledge.json
create mode 100644 adapters/ix/ixtest/supplemental/bad-fledge.json
create mode 100644 adapters/ix/ixtest/supplemental/dsa-request.json
create mode 100644 adapters/ix/ixtest/supplemental/fledge-no-bid.json
delete mode 100644 adapters/liftoff/liftoff_test.go
create mode 100644 adapters/loyal/loyal.go
create mode 100644 adapters/loyal/loyal_test.go
create mode 100644 adapters/loyal/loyaltest/exemplary/endpointId.json
create mode 100644 adapters/loyal/loyaltest/exemplary/multi-format.json
create mode 100644 adapters/loyal/loyaltest/exemplary/multi-imp.json
create mode 100644 adapters/loyal/loyaltest/exemplary/simple-banner.json
create mode 100644 adapters/loyal/loyaltest/exemplary/simple-native.json
create mode 100644 adapters/loyal/loyaltest/exemplary/simple-video.json
create mode 100644 adapters/loyal/loyaltest/exemplary/simple-web-banner.json
create mode 100644 adapters/loyal/loyaltest/supplemental/bad_media_type.json
create mode 100644 adapters/loyal/loyaltest/supplemental/bad_response.json
create mode 100644 adapters/loyal/loyaltest/supplemental/no-valid-impressions.json
create mode 100644 adapters/loyal/loyaltest/supplemental/status-204.json
create mode 100644 adapters/loyal/loyaltest/supplemental/status-not-200.json
create mode 100644 adapters/loyal/params_test.go
create mode 100644 adapters/mediago/mediago.go
create mode 100644 adapters/mediago/mediago_test.go
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-banner-apac.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-banner-euc.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-banner-fallback-to-first-imp-to-get-ep.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-banner-use.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-banner.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-native.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-nobid.json
create mode 100644 adapters/mediago/mediagotest/exemplary/sample-with-mtype.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_400_reponse.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_500_reponse.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_imp_ext.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_impext_bidder.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_request_no_token.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_response.json
create mode 100644 adapters/mediago/mediagotest/supplemental/bad_response_error_mtype.json
create mode 100644 adapters/mediago/params_test.go
create mode 100644 adapters/melozen/melozen.go
create mode 100644 adapters/melozen/melozen_test.go
create mode 100644 adapters/melozen/melozentest/exemplary/app-banner.json
create mode 100644 adapters/melozen/melozentest/exemplary/app-native.json
create mode 100644 adapters/melozen/melozentest/exemplary/app-video.json
create mode 100644 adapters/melozen/melozentest/exemplary/multi-imps.json
create mode 100644 adapters/melozen/melozentest/exemplary/web-banner.json
create mode 100644 adapters/melozen/melozentest/exemplary/web-video.json
create mode 100644 adapters/melozen/melozentest/supplemental/bad-media-type-request.json
create mode 100644 adapters/melozen/melozentest/supplemental/no-fill.json
create mode 100644 adapters/melozen/melozentest/supplemental/response-status-400.json
create mode 100644 adapters/melozen/melozentest/supplemental/response-status-not-200.json
create mode 100644 adapters/melozen/melozentest/supplemental/wrong-bid-ext.json
create mode 100644 adapters/melozen/params_test.go
create mode 100644 adapters/metax/metax.go
create mode 100644 adapters/metax/metax_test.go
create mode 100644 adapters/metax/metaxtest/exemplary/app-formats.json
create mode 100644 adapters/metax/metaxtest/exemplary/app-imps.json
create mode 100644 adapters/metax/metaxtest/exemplary/no-bid.json
create mode 100644 adapters/metax/metaxtest/exemplary/no-seat-bid.json
create mode 100644 adapters/metax/metaxtest/exemplary/no-seat.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-app-audio.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-app-banner.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-app-native.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-app-video.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-site-audio.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-site-banner.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-site-native.json
create mode 100644 adapters/metax/metaxtest/exemplary/simple-site-video.json
create mode 100644 adapters/metax/metaxtest/supplemental/invalid-adunit-error.json
create mode 100644 adapters/metax/metaxtest/supplemental/invalid-ext-bidder.json
create mode 100644 adapters/metax/metaxtest/supplemental/invalid-ext.json
create mode 100644 adapters/metax/metaxtest/supplemental/invalid-publisher-error.json
create mode 100644 adapters/metax/metaxtest/supplemental/resp-bad-json.json
create mode 100644 adapters/metax/metaxtest/supplemental/resp-bad-markuptype.json
create mode 100644 adapters/metax/metaxtest/supplemental/status-400.json
create mode 100644 adapters/metax/metaxtest/supplemental/status-500.json
create mode 100644 adapters/metax/metaxtest/supplemental/status-503.json
create mode 100644 adapters/metax/params_test.go
create mode 100644 adapters/minutemedia/minutemedia.go
create mode 100644 adapters/minutemedia/minutemedia_test.go
create mode 100644 adapters/minutemedia/minutemediatest/exemplary/banner-and-video-app.json
create mode 100644 adapters/minutemedia/minutemediatest/exemplary/banner-and-video-gdpr.json
create mode 100644 adapters/minutemedia/minutemediatest/exemplary/banner-and-video-site.json
create mode 100644 adapters/minutemedia/minutemediatest/exemplary/banner-and-video.json
create mode 100644 adapters/minutemedia/minutemediatest/exemplary/simple-banner.json
create mode 100644 adapters/minutemedia/minutemediatest/exemplary/simple-video.json
create mode 100644 adapters/minutemedia/minutemediatest/supplemental/bad-request.json
create mode 100644 adapters/minutemedia/minutemediatest/supplemental/missing-bidder.json
create mode 100644 adapters/minutemedia/minutemediatest/supplemental/missing-extension.json
create mode 100644 adapters/minutemedia/minutemediatest/supplemental/missing-mtype.json
create mode 100644 adapters/missena/missena.go
create mode 100644 adapters/missena/missena_test.go
create mode 100644 adapters/missena/missenatest/exemplary/multiple-imps.json
create mode 100644 adapters/missena/missenatest/exemplary/simple-banner-ipv6.json
create mode 100644 adapters/missena/missenatest/exemplary/simple-banner.json
create mode 100644 adapters/missena/missenatest/exemplary/valid-imp-error-imp.json
create mode 100644 adapters/missena/missenatest/supplemental/error-ext-bidder.json
create mode 100644 adapters/missena/missenatest/supplemental/error-imp-ext.json
create mode 100644 adapters/missena/missenatest/supplemental/status-204.json
create mode 100644 adapters/missena/missenatest/supplemental/status-400.json
create mode 100644 adapters/missena/missenatest/supplemental/status-not-200.json
create mode 100644 adapters/missena/params_test.go
create mode 100644 adapters/nativo/nativo.go
create mode 100644 adapters/nativo/nativo_test.go
create mode 100644 adapters/nativo/nativotest/exemplary/banner-app.json
create mode 100644 adapters/nativo/nativotest/exemplary/banner-web.json
create mode 100644 adapters/nativo/nativotest/exemplary/native-app.json
create mode 100644 adapters/nativo/nativotest/exemplary/native-web.json
create mode 100644 adapters/nativo/nativotest/exemplary/video-app.json
create mode 100644 adapters/nativo/nativotest/exemplary/video-web.json
create mode 100755 adapters/nativo/nativotest/supplemental/200-different-impID-response-from-nativo.json
create mode 100755 adapters/nativo/nativotest/supplemental/204-response-from-nativo.json
create mode 100755 adapters/nativo/nativotest/supplemental/400-response-from-nativo.json
create mode 100755 adapters/nativo/nativotest/supplemental/500-response-from-nativo.json
create mode 100644 adapters/nextmillennium/nextmillenniumtest/exemplary/video.json
create mode 100644 adapters/oms/oms.go
create mode 100644 adapters/oms/oms_test.go
create mode 100755 adapters/oms/omstest/exemplary/simple-banner-cookie-uid.json
create mode 100644 adapters/oms/omstest/exemplary/simple-banner-multiple-bids.json
create mode 100755 adapters/oms/omstest/exemplary/simple-banner-uid.json
create mode 100644 adapters/oms/omstest/exemplary/simple-multi-type-banner.json
create mode 100755 adapters/oms/omstest/supplemental/204-response-from-target.json
create mode 100755 adapters/oms/omstest/supplemental/400-response-from-target.json
create mode 100755 adapters/oms/omstest/supplemental/500-response-from-target.json
create mode 100755 adapters/oms/omstest/supplemental/simple-banner-with-ipv6.json
create mode 100644 adapters/oms/params_test.go
delete mode 100644 adapters/openweb/openwebtest/exemplary/multiple-imps-same-aid.json
create mode 100644 adapters/openweb/openwebtest/supplemental/missing-mtype.json
rename adapters/openweb/openwebtest/supplemental/{no-valid-imps.json => missing-org-and-aid.json} (78%)
create mode 100644 adapters/openweb/openwebtest/supplemental/missing-placement-id.json
delete mode 100644 adapters/openweb/openwebtest/supplemental/status-500.json
create mode 100644 adapters/oraki/oraki.go
create mode 100644 adapters/oraki/oraki_test.go
create mode 100644 adapters/oraki/orakitest/exemplary/endpointId.json
create mode 100644 adapters/oraki/orakitest/exemplary/multi-format.json
create mode 100644 adapters/oraki/orakitest/exemplary/multi-imp.json
create mode 100644 adapters/oraki/orakitest/exemplary/simple-banner.json
create mode 100644 adapters/oraki/orakitest/exemplary/simple-native.json
create mode 100644 adapters/oraki/orakitest/exemplary/simple-video.json
create mode 100644 adapters/oraki/orakitest/exemplary/simple-web-banner.json
create mode 100644 adapters/oraki/orakitest/supplemental/bad_media_type.json
create mode 100644 adapters/oraki/orakitest/supplemental/bad_response.json
create mode 100644 adapters/oraki/orakitest/supplemental/status-204.json
create mode 100644 adapters/oraki/orakitest/supplemental/status-not-200.json
create mode 100644 adapters/oraki/params_test.go
create mode 100644 adapters/pgamssp/pgamssptest/exemplary/convert_currency.json
create mode 100644 adapters/playdigo/params_test.go
create mode 100644 adapters/playdigo/playdigo.go
create mode 100644 adapters/playdigo/playdigo_test.go
create mode 100644 adapters/playdigo/playdigotest/exemplary/endpointId.json
create mode 100644 adapters/playdigo/playdigotest/exemplary/multi-format.json
create mode 100644 adapters/playdigo/playdigotest/exemplary/multi-imp.json
create mode 100644 adapters/playdigo/playdigotest/exemplary/simple-banner.json
create mode 100644 adapters/playdigo/playdigotest/exemplary/simple-native.json
create mode 100644 adapters/playdigo/playdigotest/exemplary/simple-video.json
create mode 100644 adapters/playdigo/playdigotest/exemplary/simple-web-banner.json
create mode 100644 adapters/playdigo/playdigotest/supplemental/bad_media_type.json
create mode 100644 adapters/playdigo/playdigotest/supplemental/bad_response.json
create mode 100644 adapters/playdigo/playdigotest/supplemental/no-valid-impressions.json
create mode 100644 adapters/playdigo/playdigotest/supplemental/status-204.json
create mode 100644 adapters/playdigo/playdigotest/supplemental/status-not-200.json
rename adapters/pubmatic/pubmatictest/supplemental/{impExtData.json => impExt.json} (96%)
create mode 100644 adapters/pubrise/params_test.go
create mode 100644 adapters/pubrise/pubrise.go
create mode 100644 adapters/pubrise/pubrise_test.go
create mode 100644 adapters/pubrise/pubrisetest/exemplary/endpointId.json
create mode 100644 adapters/pubrise/pubrisetest/exemplary/multi-format.json
create mode 100644 adapters/pubrise/pubrisetest/exemplary/multi-imp.json
create mode 100644 adapters/pubrise/pubrisetest/exemplary/simple-banner.json
create mode 100644 adapters/pubrise/pubrisetest/exemplary/simple-native.json
create mode 100644 adapters/pubrise/pubrisetest/exemplary/simple-video.json
create mode 100644 adapters/pubrise/pubrisetest/exemplary/simple-web-banner.json
create mode 100644 adapters/pubrise/pubrisetest/supplemental/bad_media_type.json
create mode 100644 adapters/pubrise/pubrisetest/supplemental/bad_response.json
create mode 100644 adapters/pubrise/pubrisetest/supplemental/no-valid-impressions.json
create mode 100644 adapters/pubrise/pubrisetest/supplemental/status-204.json
create mode 100644 adapters/pubrise/pubrisetest/supplemental/status-not-200.json
create mode 100644 adapters/pulsepoint/pulsepointtest/exemplary/banner-string-bidder-params.json
create mode 100644 adapters/pulsepoint/pulsepointtest/supplemental/bad-prebid-params-missing-param.json
create mode 100644 adapters/qt/params_test.go
create mode 100644 adapters/qt/qt.go
create mode 100644 adapters/qt/qt_test.go
create mode 100644 adapters/qt/qttest/exemplary/endpointId.json
create mode 100644 adapters/qt/qttest/exemplary/multi-format.json
create mode 100644 adapters/qt/qttest/exemplary/multi-imp.json
create mode 100644 adapters/qt/qttest/exemplary/simple-banner.json
create mode 100644 adapters/qt/qttest/exemplary/simple-native.json
create mode 100644 adapters/qt/qttest/exemplary/simple-video.json
create mode 100644 adapters/qt/qttest/exemplary/simple-web-banner.json
create mode 100644 adapters/qt/qttest/supplemental/bad_media_type.json
create mode 100644 adapters/qt/qttest/supplemental/bad_response.json
create mode 100644 adapters/qt/qttest/supplemental/status-204.json
create mode 100644 adapters/qt/qttest/supplemental/status-not-200.json
create mode 100644 adapters/readpeak/params_test.go
create mode 100644 adapters/readpeak/readpeak.go
create mode 100644 adapters/readpeak/readpeak_test.go
create mode 100644 adapters/readpeak/readpeaktest/exemplary/banner.json
create mode 100644 adapters/readpeak/readpeaktest/exemplary/banner_app.json
create mode 100644 adapters/readpeak/readpeaktest/exemplary/banner_multiple_imps.json
create mode 100644 adapters/readpeak/readpeaktest/exemplary/native.json
create mode 100644 adapters/readpeak/readpeaktest/supplemental/banner_without_mtype.json
create mode 100644 adapters/readpeak/readpeaktest/supplemental/bid_response_204.json
create mode 100644 adapters/readpeak/readpeaktest/supplemental/bid_response_400.json
create mode 100644 adapters/readpeak/readpeaktest/supplemental/bid_response_500.json
create mode 100644 adapters/relevantdigital/params_test.go
create mode 100644 adapters/relevantdigital/relevantdigital.go
create mode 100644 adapters/relevantdigital/relevantdigital_test.go
create mode 100644 adapters/relevantdigital/relevantdigitaltest/exemplary/simple-audio.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/exemplary/simple-banner.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/exemplary/simple-native.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/exemplary/simple-video.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/supplemental/invalidBidMType.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/supplemental/invalidBidMTypeParsesExt.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/supplemental/invalidBidType.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/supplemental/invalidParam.json
create mode 100644 adapters/relevantdigital/relevantdigitaltest/supplemental/invalidRequestCount.json
create mode 100644 adapters/richaudience/richaudiencetest/supplemental/videoSizePartial.json
create mode 100644 adapters/richaudience/richaudiencetest/supplemental/videoSizeZero.json
create mode 100644 adapters/roulax/roulax.go
create mode 100644 adapters/roulax/roulax_test.go
create mode 100644 adapters/roulax/roulaxtest/exemplary/simple-banner.json
create mode 100644 adapters/roulax/roulaxtest/exemplary/simple-native.json
create mode 100644 adapters/roulax/roulaxtest/exemplary/simple-video.json
create mode 100644 adapters/roulax/roulaxtest/supplemental/no-bid-response.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/app_banner.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/app_native.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/banner-resolve-macros.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/bidfloor-as-bidder-param-without-cur.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/bidfloor-as-bidder-param.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/bidfloor-as-impbidfloor-with-cur.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/bidfloor-as-impbidfloor-without-cur.json
delete mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/currency-conversion.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/native-with-deprecated-native-prop.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/native-with-proper-native-response.json
create mode 100644 adapters/rtbhouse/rtbhousetest/exemplary/two-bidfloors-given-param-and-impbidfloor.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/banner-native-req-faulty-mtype-in-native.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/faulty-request-bidder-params.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/faulty-request-no-impext.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/native-with-faulty-adm-native-prop.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/native-with-faulty-adm-response.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/simple-banner-bad-mtype.json
create mode 100644 adapters/rtbhouse/rtbhousetest/supplemental/simple-banner-no-mtype.json
create mode 100644 adapters/seedingAlliance/seedingAlliancetest/exemplary/banner_with_account.json
create mode 100644 adapters/seedingAlliance/seedingAlliancetest/exemplary/banner_with_account_and_seat.json
rename adapters/{suntContent/suntContenttest/exemplary/banner.json => seedingAlliance/seedingAlliancetest/exemplary/banner_with_seat.json} (94%)
create mode 100644 adapters/smaato/banner.go
create mode 100644 adapters/smaato/banner_test.go
delete mode 100644 adapters/smaato/image.go
delete mode 100644 adapters/smaato/image_test.go
delete mode 100644 adapters/smaato/richmedia.go
delete mode 100644 adapters/smaato/richmedia_test.go
rename adapters/smaato/smaatotest/exemplary/{simple-banner-richMedia-app.json => simple-banner-dooh.json} (78%)
rename adapters/smaato/smaatotest/{supplemental/adtype-header-response.json => exemplary/simple-banner-eids.json} (81%)
create mode 100644 adapters/smaato/smaatotest/exemplary/video-dooh.json
delete mode 100644 adapters/smaato/smaatotest/supplemental/bad-adm-response.json
delete mode 100644 adapters/smaato/smaatotest/supplemental/bad-imp-banner-format-request.json
rename adapters/smaato/smaatotest/{exemplary/simple-banner-richMedia.json => supplemental/curl-nil-response.json} (81%)
rename adapters/smaato/smaatotest/supplemental/{no-app-site-request.json => no-app-site-dooh-request.json} (92%)
rename adapters/smaato/smaatotest/videosupplemental/{bad-adm-response.json => bad-adtype-header-response.json} (77%)
create mode 100644 adapters/smrtconnect/smrtconnect.go
create mode 100644 adapters/smrtconnect/smrtconnect_test.go
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/audio-app.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/audio-web.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/banner-app.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/banner-multiple-bids.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/banner-web.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/native-app.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/native-web.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/video-app.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/exemplary/video-web.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/empty-seatbid-array.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/invalid-aceex-ext-object.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/invalid-response.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/status-code-bad-request.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/status-code-no-content.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/status-code-other-error.json
create mode 100644 adapters/smrtconnect/smrtconnecttest/supplemental/status-code-service-unavailable.json
create mode 100644 adapters/sonobi/sonobitest/exemplary/native.json
create mode 100644 adapters/sonobi/sonobitest/supplemental/currency-conversion.json
create mode 100644 adapters/sovrnXsp/params_test.go
create mode 100644 adapters/sovrnXsp/sovrnXsp.go
create mode 100644 adapters/sovrnXsp/sovrnXsp_test.go
create mode 100644 adapters/sovrnXsp/sovrnXsptest/exemplary/banner.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/exemplary/native.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/exemplary/video.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/supplemental/request-no-matching-imp.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/supplemental/response-empty-seat.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/supplemental/response-http-error.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/supplemental/response-invalid-crtype.json
create mode 100644 adapters/sovrnXsp/sovrnXsptest/supplemental/response-nobid.json
create mode 100644 adapters/stroeerCore/stroeercoretest/exemplary/dsa.json
create mode 100644 adapters/stroeerCore/stroeercoretest/exemplary/site-multi-format-single.json
create mode 100644 adapters/stroeerCore/stroeercoretest/exemplary/site-multi-types.json
create mode 100644 adapters/stroeerCore/stroeercoretest/exemplary/site-video-single.json
create mode 100644 adapters/stroeerCore/stroeercoretest/supplemental/unknown-bid-media-type.json
delete mode 100644 adapters/suntContent/suntContent.go
delete mode 100644 adapters/suntContent/suntContent_test.go
delete mode 100644 adapters/suntContent/suntContenttest/exemplary/native.json
delete mode 100644 adapters/suntContent/suntContenttest/supplemental/invalid_tag_id.json
delete mode 100644 adapters/suntContent/suntContenttest/supplemental/status_bad_request.json
rename adapters/taboola/taboolatest/{supplemental/emptySiteInRequest.json => exemplary/bannerAppRequest.json} (92%)
create mode 100644 adapters/theadx/params_test.go
create mode 100644 adapters/theadx/theadx.go
create mode 100644 adapters/theadx/theadx_test.go
create mode 100644 adapters/theadx/theadxtest/exemplary/dynamic-tag.json
create mode 100644 adapters/theadx/theadxtest/exemplary/multi-format.json
create mode 100644 adapters/theadx/theadxtest/exemplary/multi-native.json
create mode 100644 adapters/theadx/theadxtest/exemplary/single-banner.json
create mode 100644 adapters/theadx/theadxtest/exemplary/single-native.json
create mode 100644 adapters/theadx/theadxtest/exemplary/single-video.json
create mode 100644 adapters/theadx/theadxtest/supplemental/bad-request.json
create mode 100644 adapters/theadx/theadxtest/supplemental/empty-response.json
create mode 100644 adapters/theadx/theadxtest/supplemental/nobid-response.json
create mode 100644 adapters/theadx/theadxtest/supplemental/server-error.json
create mode 100644 adapters/theadx/theadxtest/supplemental/unparsable-response.json
create mode 100644 adapters/thetradedesk/params_test.go
create mode 100644 adapters/thetradedesk/thetradedesk.go
create mode 100644 adapters/thetradedesk/thetradedesk_test.go
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-banner-inapp.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-banner-multiple-bids-and-formats.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-banner-multiple-bids.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-banner.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-empty-publisherId.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-multi-type-banner.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-multi-type-video.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-native.json
create mode 100644 adapters/thetradedesk/thetradedesktest/exemplary/simple-video.json
create mode 100644 adapters/thetradedesk/thetradedesktest/supplemental/200-response-from-target.json
create mode 100644 adapters/thetradedesk/thetradedesktest/supplemental/204-response-from-target.json
create mode 100644 adapters/thetradedesk/thetradedesktest/supplemental/400-response-from-target.json
create mode 100644 adapters/thetradedesk/thetradedesktest/supplemental/500-response-from-target.json
create mode 100644 adapters/thetradedesk/thetradedesktest/supplemental/invalid-mtype.json
create mode 100644 adapters/thetradedesk/thetradedesktest/supplemental/invalid-publisher.json
create mode 100644 adapters/triplelift_native/params_test.go
create mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/app-msn-no-tag-code.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/app-msn.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/app.json
delete mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/optional-params.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/site-msn-no-tag-code.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/site-msn.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/exemplary/site.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/app-no-publisher.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/app-publisher-no-domain.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/effective-publisher-allowed.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/effective-publisher-not-allowed.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/no-imp-ext-data.json
delete mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/notgoodstatuscode.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/site-no-publisher.json
create mode 100644 adapters/triplelift_native/triplelift_nativetest/supplemental/site-publisher-no-domain.json
create mode 100644 adapters/trustedstack/params_test.go
create mode 100644 adapters/trustedstack/trustedstack.go
create mode 100644 adapters/trustedstack/trustedstack_test.go
create mode 100644 adapters/trustedstack/trustedstacktest/exemplary/multi-format.json
create mode 100644 adapters/trustedstack/trustedstacktest/exemplary/multi-imps.json
rename adapters/{suntContent/suntContenttest/supplemental/status_no_content.json => trustedstack/trustedstacktest/exemplary/no-bid.json} (61%)
rename adapters/{suntContent/suntContenttest/supplemental/status_not_ok.json => trustedstack/trustedstacktest/exemplary/optional-params.json} (56%)
create mode 100644 adapters/trustedstack/trustedstacktest/exemplary/simple-banner.json
create mode 100644 adapters/trustedstack/trustedstacktest/exemplary/simple-native.json
create mode 100644 adapters/trustedstack/trustedstacktest/exemplary/simple-video.json
create mode 100644 adapters/trustedstack/trustedstacktest/supplemental/invalid-req-400-status-code-bad-request.json
create mode 100644 adapters/trustedstack/trustedstacktest/supplemental/invalid-req-500-status-code-bad-request.json
create mode 100644 adapters/trustedstack/trustedstacktest/supplemental/ivalid-req-200-incorrect-response-mtype.json
create mode 100644 adapters/trustedstack/trustedstacktest/supplemental/valid-req-200-bid-response-from-trustedstack.json
create mode 100644 adapters/trustedstack/trustedstacktest/supplemental/valid-req-200-incorrect-response-format.json
create mode 100755 adapters/trustedstack/trustedstacktest/supplemental/valid-req-204-response-from-trustedstack.json
create mode 100644 adapters/vidazoo/params_test.go
create mode 100644 adapters/vidazoo/vidazoo.go
create mode 100644 adapters/vidazoo/vidazoo_test.go
create mode 100644 adapters/vidazoo/vidazootest/exemplary/banner.json
create mode 100644 adapters/vidazoo/vidazootest/exemplary/multi-imp.json
create mode 100644 adapters/vidazoo/vidazootest/exemplary/video.json
create mode 100644 adapters/vidazoo/vidazootest/supplemental/bad-request.json
create mode 100644 adapters/vidazoo/vidazootest/supplemental/internal-error.json
create mode 100644 adapters/vidazoo/vidazootest/supplemental/no-content.json
create mode 100644 adapters/vidazoo/vidazootest/supplemental/unknown-bid-type.json
rename adapters/{liftoff => vungle}/param_test.go (78%)
rename adapters/{liftoff/liftoff.go => vungle/vungle.go} (69%)
create mode 100644 adapters/vungle/vungle_test.go
rename adapters/{liftoff/liftofftest => vungle/vungletest}/exemplary/app_video_instl.json (95%)
rename adapters/{liftoff/liftofftest => vungle/vungletest}/exemplary/app_video_rewarded.json (95%)
create mode 100644 adapters/vungle/vungletest/exemplary/site_video_instl.json
create mode 100644 adapters/vungle/vungletest/exemplary/site_video_rewarded.json
rename adapters/{liftoff/liftofftest => vungle/vungletest}/supplemental/appid_placementid_check.json (95%)
rename adapters/{liftoff/liftofftest => vungle/vungletest}/supplemental/missing_appid_or_placementid.json (96%)
create mode 100644 adapters/vungle/vungletest/supplemental/no_site_or_app_video_rewarded.json
rename adapters/{liftoff/liftofftest => vungle/vungletest}/supplemental/response_code_204.json (96%)
rename adapters/{liftoff/liftofftest => vungle/vungletest}/supplemental/response_code_400.json (96%)
rename adapters/{liftoff/liftofftest => vungle/vungletest}/supplemental/response_code_non_200.json (96%)
rename adapters/{liftoff/liftofftest/supplemental/liftoff_ext_check.json => vungle/vungletest/supplemental/vungle_ext_check.json} (95%)
create mode 100644 adapters/yandex/params_test.go
create mode 100644 adapters/yandex/yandex.go
create mode 100644 adapters/yandex/yandex_test.go
create mode 100644 adapters/yandex/yandextest/exemplary/native.json
create mode 100644 adapters/yandex/yandextest/exemplary/simple-banner.json
create mode 100644 adapters/yandex/yandextest/supplemental/multiple-imps-some-malformed.json
create mode 100644 adapters/yandex/yandextest/supplemental/multiple-imps.json
create mode 100644 adapters/yandex/yandextest/supplemental/simple-banner-empty-response.json
create mode 100644 adapters/yandex/yandextest/supplemental/simple-banner-empty-seatbid.json
create mode 100644 adapters/yandex/yandextest/supplemental/simple-banner-sizes.json
create mode 100644 adapters/yandex/yandextest/supplemental/simple-banner-status-400.json
create mode 100644 adapters/yandex/yandextest/supplemental/simple-banner-unknown-imp.json
create mode 100644 adapters/yandex/yandextest/supplemental/simple-banner-unparsable-body.json
create mode 100644 adapters/yandex/yandextest/supplemental/unknown-banner.json
create mode 100644 adapters/yieldlab/yieldlabtest/exemplary/dsa.json
create mode 100644 adapters/yieldlab/yieldlabtest/supplemental/dsa_empty.json
create mode 100644 adapters/yieldlab/yieldlabtest/supplemental/dsa_empty_transparency.json
create mode 100644 adapters/yieldlab/yieldlabtest/supplemental/invalid_reg_ext.json
create mode 100644 adapters/yieldmo/yieldmotest/exemplary/valid_currency_conversion.json
create mode 100644 adapters/yieldmo/yieldmotest/supplemental/unsupported_currency.json
create mode 100644 adapters/zmaticoo/params_test.go
create mode 100644 adapters/zmaticoo/zmaticoo.go
create mode 100644 adapters/zmaticoo/zmaticoo_test.go
create mode 100644 adapters/zmaticoo/zmaticootest/exemplary/no-bid.json
create mode 100644 adapters/zmaticoo/zmaticootest/exemplary/simple-banner.json
create mode 100644 adapters/zmaticoo/zmaticootest/exemplary/simple-native-1.1.json
create mode 100644 adapters/zmaticoo/zmaticootest/exemplary/simple-native.json
create mode 100644 adapters/zmaticoo/zmaticootest/exemplary/simple-video.json
create mode 100644 adapters/zmaticoo/zmaticootest/supplemental/bad_imp_ext.json
create mode 100644 adapters/zmaticoo/zmaticootest/supplemental/bad_imp_ext_bidder.json
create mode 100644 adapters/zmaticoo/zmaticootest/supplemental/bad_response.json
rename adapters/{triplelift_native/triplelift_nativetest/supplemental/nopub.json => zmaticoo/zmaticootest/supplemental/empty_imp_ext_bidder.json} (52%)
create mode 100644 adapters/zmaticoo/zmaticootest/supplemental/status_400.json
create mode 100644 adapters/zmaticoo/zmaticootest/supplemental/status_500.json
create mode 100644 analytics/agma/README.md
create mode 100644 analytics/agma/agma_module.go
create mode 100644 analytics/agma/agma_module_test.go
create mode 100644 analytics/agma/model.go
create mode 100644 analytics/agma/model_test.go
create mode 100644 analytics/agma/sender.go
create mode 100644 analytics/agma/sender_test.go
create mode 100644 currency/currency.go
create mode 100644 currency/currency_mock.go
create mode 100644 currency/currency_test.go
create mode 100644 docs/build/README.md
delete mode 100644 docs/developers/features.md
delete mode 100644 docs/endpoints.md
create mode 100644 dsa/validate.go
create mode 100644 dsa/validate_test.go
create mode 100644 dsa/writer.go
create mode 100644 dsa/writer_test.go
rename endpoints/openrtb2/sample-requests/aliased/{simple.json => default-request-alias.json} (76%)
create mode 100644 endpoints/openrtb2/sample-requests/aliased/hard-alias.json
create mode 100644 endpoints/openrtb2/sample-requests/aliased/request-alias.json
create mode 100644 endpoints/openrtb2/sample-requests/alternate-bidder-code/alternate-bidder-code.json
create mode 100644 endpoints/openrtb2/sample-requests/amp/valid-supplementary/ortb-2.5-to-2.6-upconvert.json
rename endpoints/openrtb2/sample-requests/{blacklisted/blacklisted-app.json => blocked/blocked-app.json} (96%)
rename endpoints/openrtb2/sample-requests/invalid-whole/{unknown-bidder.json => imp-ext-prebid-bidder-empty.json} (80%)
create mode 100644 endpoints/openrtb2/sample-requests/invalid-whole/invalid-bidder-params.json
delete mode 100644 endpoints/openrtb2/sample-requests/invalid-whole/regs-ext-gdpr-string.json
rename endpoints/openrtb2/sample-requests/invalid-whole/{regs-ext-gdpr-invalid.json => regs-gdpr-invalid.json} (86%)
rename endpoints/openrtb2/sample-requests/invalid-whole/{user-ext-eids-uids-id-empty.json => user-eids-source-empty.json} (63%)
rename endpoints/openrtb2/sample-requests/invalid-whole/{user-ext-eids-source-empty.json => user-eids-uids-id-empty.json} (62%)
rename endpoints/openrtb2/sample-requests/invalid-whole/{user-ext-eids-uids-missing.json => user-eids-uids-missing.json} (70%)
delete mode 100644 endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-duplicate.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/device-sua.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/ortb-2.5-to-2.6-upconvert.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/ortb-2.6-to-2.5-downconvert.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/source-schain.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/targeting-optional-all-false.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/targeting-optional-includeformat-only.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/targeting-optional-includeformat.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/user-ext-eids-source-duplicate.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/exemplary/user-ext-prebid-buyeruids.json
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/supplementary/imp-with-stored-bid-resp-case-matching-bidder-name.json
rename endpoints/openrtb2/sample-requests/valid-whole/supplementary/{imp-with-stored-bid-resp-insensitive-bidder-name.json => imp-with-stored-bid-resp-case-not-matching-bidder-name.json} (94%)
create mode 100644 endpoints/openrtb2/sample-requests/valid-whole/supplementary/imp-with-stored-bid-resp-non-existing-bidder-name.json
rename endpoints/openrtb2/sample-requests/valid-whole/supplementary/{req-ext-bidder-params-backward-compatible-merge.json => req-ext-bidder-params-promotion.json} (94%)
create mode 100644 endpoints/openrtb2/sample-requests/video/video_invalid_sample_negative_tmax.json
create mode 100644 errortypes/scope.go
create mode 100644 errortypes/scope_test.go
create mode 100644 exchange/exchangetest/alternate-bidder-codes.json
delete mode 100644 exchange/exchangetest/bid-id-invalid.json
delete mode 100644 exchange/exchangetest/bid-id-valid.json
create mode 100644 exchange/exchangetest/dsa-default-ignored.json
create mode 100644 exchange/exchangetest/dsa-default.json
create mode 100644 exchange/exchangetest/dsa-not-required.json
create mode 100644 exchange/exchangetest/dsa-required.json
create mode 100644 exchange/exchangetest/firstpartydata-multibidder-user-eids.json
create mode 100644 exchange/exchangetest/firstpartydata-user-eids-req-user-nil.json
create mode 100644 exchange/exchangetest/firstpartydata-user-nileids-req-user-nil.json
create mode 100644 exchange/exchangetest/floors_deal_enforcement.json
create mode 100644 exchange/exchangetest/generate-bid-id-error.json
create mode 100644 exchange/exchangetest/generate-bid-id-many.json
create mode 100644 exchange/exchangetest/generate-bid-id-one.json
create mode 100644 exchange/exchangetest/imp-fpd-invalid.json
create mode 100644 exchange/exchangetest/imp-fpd-multiple-bidders.json
create mode 100644 exchange/exchangetest/imp-fpd-multiple-imp.json
create mode 100644 exchange/exchangetest/imp-fpd-skipped-validation.json
create mode 100644 exchange/exchangetest/multi-bids-different-ortb-versions.json
create mode 100644 exchange/exchangetest/targeting-always-include-deals.json
create mode 100644 exchange/non_bid_reason_test.go
delete mode 100644 firstpartydata/extmerger.go
delete mode 100644 firstpartydata/extmerger_test.go
create mode 100644 floors/fetcher.go
create mode 100644 floors/fetcher_test.go
create mode 100644 hooks/hookexecution/execution_test.go
create mode 100644 injector/injector.go
create mode 100644 injector/injector_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/README.md
create mode 100644 modules/fiftyonedegrees/devicedetection/account_info_extractor.go
create mode 100644 modules/fiftyonedegrees/devicedetection/account_info_extractor_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/account_validator.go
create mode 100644 modules/fiftyonedegrees/devicedetection/account_validator_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/config.go
create mode 100644 modules/fiftyonedegrees/devicedetection/config_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/context.go
create mode 100644 modules/fiftyonedegrees/devicedetection/device_detector.go
create mode 100644 modules/fiftyonedegrees/devicedetection/device_detector_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/device_info_extractor.go
create mode 100644 modules/fiftyonedegrees/devicedetection/device_info_extractor_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/evidence_extractor.go
create mode 100644 modules/fiftyonedegrees/devicedetection/evidence_extractor_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/fiftyone_device_types.go
create mode 100644 modules/fiftyonedegrees/devicedetection/fiftyone_device_types_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/hook_auction_entrypoint.go
create mode 100644 modules/fiftyonedegrees/devicedetection/hook_raw_auction_request.go
create mode 100644 modules/fiftyonedegrees/devicedetection/models.go
create mode 100644 modules/fiftyonedegrees/devicedetection/models_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/module.go
create mode 100644 modules/fiftyonedegrees/devicedetection/module_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/request_headers_extractor.go
create mode 100644 modules/fiftyonedegrees/devicedetection/request_headers_extractor_test.go
create mode 100644 modules/fiftyonedegrees/devicedetection/sample/pbs.json
create mode 100644 modules/fiftyonedegrees/devicedetection/sample/request_data.json
create mode 100644 modules/fiftyonedegrees/devicedetection/sua_payload_extractor.go
create mode 100644 openrtb_ext/imp_adelement.go
create mode 100644 openrtb_ext/imp_admatic.go
create mode 100644 openrtb_ext/imp_adtonos.go
create mode 100644 openrtb_ext/imp_alkimi.go
create mode 100644 openrtb_ext/imp_aso.go
create mode 100644 openrtb_ext/imp_bidmatic.go
create mode 100644 openrtb_ext/imp_bigoad.go
rename openrtb_ext/{imp_bizzclick.go => imp_blasto.go} (51%)
create mode 100644 openrtb_ext/imp_bwx.go
create mode 100644 openrtb_ext/imp_cointraffic.go
create mode 100644 openrtb_ext/imp_concert.go
create mode 100644 openrtb_ext/imp_copper6ssp.go
create mode 100644 openrtb_ext/imp_displayio.go
create mode 100644 openrtb_ext/imp_driftpixel.go
create mode 100644 openrtb_ext/imp_escalax.go
create mode 100644 openrtb_ext/imp_loyal.go
create mode 100644 openrtb_ext/imp_mediago.go
create mode 100644 openrtb_ext/imp_melozen.go
create mode 100644 openrtb_ext/imp_metax.go
create mode 100644 openrtb_ext/imp_minutemedia.go
create mode 100644 openrtb_ext/imp_missena.go
create mode 100644 openrtb_ext/imp_oms.go
create mode 100644 openrtb_ext/imp_oraki.go
create mode 100644 openrtb_ext/imp_playdigo.go
create mode 100644 openrtb_ext/imp_pubrise.go
create mode 100644 openrtb_ext/imp_qt.go
create mode 100644 openrtb_ext/imp_readpeak.go
create mode 100644 openrtb_ext/imp_relevantdigital.go
create mode 100644 openrtb_ext/imp_roulax.go
create mode 100644 openrtb_ext/imp_smrtconnect.go
create mode 100644 openrtb_ext/imp_sovrnXsp.go
delete mode 100644 openrtb_ext/imp_suntContent.go
create mode 100644 openrtb_ext/imp_theadx.go
create mode 100644 openrtb_ext/imp_thetradedesk.go
create mode 100644 openrtb_ext/imp_trustedstack.go
create mode 100644 openrtb_ext/imp_vidazoo.go
rename openrtb_ext/{imp_liftoff.go => imp_vungle.go} (85%)
create mode 100644 openrtb_ext/imp_yandex.go
create mode 100644 openrtb_ext/imp_zmaticoo.go
create mode 100644 openrtb_ext/regs_test.go
create mode 100644 ortb/request_validator.go
create mode 100644 ortb/request_validator_audio.go
create mode 100644 ortb/request_validator_audio_test.go
create mode 100644 ortb/request_validator_banner.go
create mode 100644 ortb/request_validator_banner_test.go
create mode 100644 ortb/request_validator_native.go
create mode 100644 ortb/request_validator_native_test.go
create mode 100644 ortb/request_validator_pmp.go
create mode 100644 ortb/request_validator_pmp_test.go
create mode 100644 ortb/request_validator_test.go
create mode 100644 ortb/request_validator_video.go
create mode 100644 ortb/request_validator_video_test.go
delete mode 100644 privacy/enforcement.go
delete mode 100644 privacy/enforcement_test.go
create mode 100644 privacysandbox/topics.go
create mode 100644 privacysandbox/topics_test.go
create mode 100644 router/bidder_params_tests/appnexus.json
delete mode 100644 router/test_aliases.json
create mode 100644 sample/001_banner/app.yaml
create mode 100644 sample/001_banner/pbjs.html
create mode 100644 sample/001_banner/stored_request.json
create mode 100644 sample/001_banner/stored_response.json
create mode 100644 sample/README.md
create mode 100644 sample/docker-compose.yml
create mode 100644 static/bidder-info/adelement.yaml
create mode 100644 static/bidder-info/admatic.yaml
create mode 100644 static/bidder-info/adtonos.yaml
create mode 100644 static/bidder-info/alkimi.yaml
create mode 100644 static/bidder-info/aso.yaml
create mode 100644 static/bidder-info/bcmint.yaml
create mode 100644 static/bidder-info/bidgency.yaml
create mode 100644 static/bidder-info/bidmatic.yaml
create mode 100644 static/bidder-info/bigoad.yaml
create mode 100644 static/bidder-info/blasto.yaml
create mode 100644 static/bidder-info/bwx.yaml
create mode 100644 static/bidder-info/cointraffic.yaml
create mode 100644 static/bidder-info/concert.yaml
create mode 100644 static/bidder-info/copper6ssp.yaml
create mode 100644 static/bidder-info/displayio.yaml
create mode 100644 static/bidder-info/driftpixel.yaml
create mode 100644 static/bidder-info/embimedia.yaml
create mode 100644 static/bidder-info/escalax.yaml
create mode 100644 static/bidder-info/felixads.yaml
create mode 100644 static/bidder-info/filmzie.yaml
create mode 100644 static/bidder-info/finative.yaml
create mode 100644 static/bidder-info/indicue.yaml
create mode 100644 static/bidder-info/jdpmedia.yaml
create mode 100644 static/bidder-info/loyal.yaml
create mode 100644 static/bidder-info/magnite.yaml
create mode 100644 static/bidder-info/markapp.yaml
create mode 100644 static/bidder-info/mediago.yaml
create mode 100644 static/bidder-info/melozen.yaml
create mode 100644 static/bidder-info/metax.yaml
create mode 100644 static/bidder-info/minutemedia.yaml
create mode 100644 static/bidder-info/missena.yaml
create mode 100644 static/bidder-info/nativo.yaml
create mode 100644 static/bidder-info/oms.yaml
create mode 100644 static/bidder-info/oraki.yaml
create mode 100644 static/bidder-info/playdigo.yaml
create mode 100644 static/bidder-info/pubrise.yaml
create mode 100644 static/bidder-info/qt.yaml
create mode 100644 static/bidder-info/readpeak.yaml
create mode 100644 static/bidder-info/relevantdigital.yaml
rename static/bidder-info/{bizzclick.yaml => roulax.yaml} (54%)
create mode 100644 static/bidder-info/smrtconnect.yaml
create mode 100644 static/bidder-info/sovrnXsp.yaml
create mode 100644 static/bidder-info/streamlyn.yaml
create mode 100644 static/bidder-info/tgm.yaml
create mode 100644 static/bidder-info/theadx.yaml
create mode 100644 static/bidder-info/thetradedesk.yaml
create mode 100644 static/bidder-info/tredio.yaml
create mode 100644 static/bidder-info/trustedstack.yaml
create mode 100644 static/bidder-info/vidazoo.yaml
create mode 100644 static/bidder-info/vimayx.yaml
rename static/bidder-info/{liftoff.yaml => vungle.yaml} (72%)
create mode 100644 static/bidder-info/yandex.yaml
create mode 100644 static/bidder-info/zmaticoo.yaml
create mode 100644 static/bidder-params/adelement.json
create mode 100644 static/bidder-params/admatic.json
create mode 100644 static/bidder-params/adtonos.json
create mode 100644 static/bidder-params/alkimi.json
create mode 100644 static/bidder-params/aso.json
create mode 100644 static/bidder-params/bidmatic.json
create mode 100644 static/bidder-params/bigoad.json
rename static/bidder-params/{bizzclick.json => blasto.json} (66%)
create mode 100644 static/bidder-params/bwx.json
create mode 100644 static/bidder-params/cointraffic.json
create mode 100644 static/bidder-params/concert.json
create mode 100644 static/bidder-params/copper6ssp.json
create mode 100644 static/bidder-params/displayio.json
create mode 100644 static/bidder-params/driftpixel.json
delete mode 100644 static/bidder-params/epsilon.json
create mode 100644 static/bidder-params/escalax.json
delete mode 100644 static/bidder-params/freewheel-ssp.json
create mode 100644 static/bidder-params/loyal.json
create mode 100644 static/bidder-params/mediago.json
create mode 100644 static/bidder-params/melozen.json
create mode 100644 static/bidder-params/metax.json
create mode 100644 static/bidder-params/minutemedia.json
create mode 100644 static/bidder-params/missena.json
create mode 100644 static/bidder-params/nativo.json
create mode 100644 static/bidder-params/oms.json
create mode 100644 static/bidder-params/oraki.json
create mode 100644 static/bidder-params/playdigo.json
create mode 100644 static/bidder-params/pubrise.json
create mode 100644 static/bidder-params/qt.json
create mode 100644 static/bidder-params/readpeak.json
create mode 100644 static/bidder-params/relevantdigital.json
create mode 100644 static/bidder-params/roulax.json
create mode 100644 static/bidder-params/smrtconnect.json
create mode 100644 static/bidder-params/sovrnXsp.json
delete mode 100644 static/bidder-params/suntContent.json
delete mode 100644 static/bidder-params/synacormedia.json
create mode 100644 static/bidder-params/theadx.json
create mode 100644 static/bidder-params/thetradedesk.json
create mode 100644 static/bidder-params/trustedstack.json
delete mode 100644 static/bidder-params/trustx.json
create mode 100644 static/bidder-params/vidazoo.json
rename static/bidder-params/{liftoff.json => vungle.json} (89%)
delete mode 100644 static/bidder-params/yahooAdvertising.json
delete mode 100644 static/bidder-params/yahoossp.json
create mode 100644 static/bidder-params/yandex.json
create mode 100644 static/bidder-params/zmaticoo.json
create mode 100644 stored_requests/backends/file_fetcher/test/stored_responses/bar.json
create mode 100644 stored_requests/backends/file_fetcher/test/stored_responses/escaped.json
create mode 100644 util/jsonutil/merge.go
create mode 100644 util/jsonutil/merge_test.go
create mode 100644 util/ptrutil/ptrutil_test.go
delete mode 100644 util/sliceutil/clone.go
delete mode 100644 util/sliceutil/clone_test.go
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index ebf6f614df3..f9bb82598ff 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -6,7 +6,7 @@
"dockerfile": "Dockerfile",
"args": {
// Update the VARIANT arg to pick a version of Go
- "VARIANT": "1.20",
+ "VARIANT": "1.22",
// Options
"INSTALL_NODE": "false",
"NODE_VERSION": "lts/*"
diff --git a/.github/workflows/adapter-code-coverage.yml b/.github/workflows/adapter-code-coverage.yml
index b4c3f0745d6..37936a1d17d 100644
--- a/.github/workflows/adapter-code-coverage.yml
+++ b/.github/workflows/adapter-code-coverage.yml
@@ -1,29 +1,32 @@
-name: Adapter code coverage
+name: Adapter Code Coverage
+
on:
pull_request_target:
paths: ["adapters/*/*.go"]
+
permissions:
pull-requests: write
contents: write
+
jobs:
run-coverage:
runs-on: ubuntu-latest
steps:
- name: Install Go
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
- go-version: 1.20.5
+ go-version: 1.22.3
- - name: Checkout pull request branch
- uses: actions/checkout@v3
+ - name: Checkout Code
+ uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - name: Get adapter directories
+ - name: Discover Adapter Directories
id: get_directories
- uses: actions/github-script@v6
+ uses: actions/github-script@v7
with:
result-encoding: string
script: |
@@ -36,10 +39,11 @@ jobs:
return ""
}
const helper = utils.diffHelper({github, context})
- const files = await helper.getDirectories(directoryExtractor)
- return files.length == 0 ? "" : JSON.stringify(files);
+ const directories = await helper.getDirectories(directoryExtractor)
+ // run coverage for maximum of 2 directories
+ return (directories.length == 0 || directories.length > 2) ? "" : JSON.stringify(directories)
- - name: Run coverage tests
+ - name: Run Coverage Tests
id: run_coverage
if: steps.get_directories.outputs.result != ''
run: |
@@ -66,14 +70,14 @@ jobs:
cd ..
rm -f -r ./*
- - name: Checkout coverage-preview branch
- uses: actions/checkout@v3
+ - name: Checkout Coverage Preview Branch
+ uses: actions/checkout@v4
with:
fetch-depth: 0
ref: coverage-preview
repository: prebid/prebid-server
- - name: Commit coverage files to coverage-preview branch
+ - name: Upload Coverage Results
if: steps.run_coverage.outputs.coverage_dir != ''
id: commit_coverage
run: |
@@ -87,13 +91,13 @@ jobs:
git push origin coverage-preview
echo "remote_coverage_preview_dir=${directory}" >> $GITHUB_OUTPUT
- - name: Checkout master branch
+ - name: Checkout Master Branch
if: steps.get_directories.outputs.result != ''
run: git checkout master
- - name: Add coverage summary to pull request
+ - name: Add Coverage Summary To Pull Request
if: steps.run_coverage.outputs.coverage_dir != '' && steps.commit_coverage.outputs.remote_coverage_preview_dir != ''
- uses: actions/github-script@v6
+ uses: actions/github-script@v7
with:
script: |
const utils = require('./.github/workflows/helpers/pull-request-utils.js')
diff --git a/.github/workflows/helpers/pull-request-utils.js b/.github/workflows/helpers/pull-request-utils.js
index 941ae5b6953..73c80396473 100644
--- a/.github/workflows/helpers/pull-request-utils.js
+++ b/.github/workflows/helpers/pull-request-utils.js
@@ -1,7 +1,9 @@
const synchronizeEvent = "synchronize",
openedEvent = "opened",
completedStatus = "completed",
- resultSize = 100
+ resultSize = 100,
+ adminPermission = "admin",
+ writePermission = "write"
class diffHelper {
constructor(input) {
@@ -407,8 +409,31 @@ class coverageHelper {
}
}
+class userHelper {
+ constructor(input) {
+ this.owner = input.context.repo.owner
+ this.repo = input.context.repo.repo
+ this.github = input.github
+ this.user = input.user
+ }
+
+ /*
+ Checks if the user has write permissions for the repository
+ @returns {boolean} - returns true if the user has write permissions, otherwise false
+ */
+ async hasWritePermissions() {
+ const { data } = await this.github.rest.repos.getCollaboratorPermissionLevel({
+ owner: this.owner,
+ repo: this.repo,
+ username: this.user,
+ })
+ return data.permission === writePermission || data.permission === adminPermission
+ }
+}
+
module.exports = {
diffHelper: (input) => new diffHelper(input),
semgrepHelper: (input) => new semgrepHelper(input),
coverageHelper: (input) => new coverageHelper(input),
+ userHelper: (input) => new userHelper(input),
}
diff --git a/.github/workflows/issue_prioritization.yml b/.github/workflows/issue_prioritization.yml
index 3843507b26e..ec58073d653 100644
--- a/.github/workflows/issue_prioritization.yml
+++ b/.github/workflows/issue_prioritization.yml
@@ -10,7 +10,7 @@ jobs:
steps:
- name: Generate token
id: generate_token
- uses: tibdex/github-app-token@36464acb844fc53b9b8b2401da68844f6b05ebb0
+ uses: tibdex/github-app-token@v2.1.0
with:
app_id: ${{ secrets.PBS_PROJECT_APP_ID }}
private_key: ${{ secrets.PBS_PROJECT_APP_PEM }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f1d2b10c41c..d3559732077 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -25,13 +25,25 @@ jobs:
permissions:
contents: read
steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ repository: ${{ github.repository }}
+ ref: master
- name: Check user permission
- uses: actions-cool/check-user-permission@v2.2.0
+ uses: actions/github-script@v7
id: check
with:
- require: 'write'
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ result-encoding: string
+ script: |
+ const utils = require('./.github/workflows/helpers/pull-request-utils.js')
+ const helper = utils.userHelper({github, context, user: '${{ github.actor }}'})
+ const hasPermission = await helper.hasWritePermissions()
+ return hasPermission
outputs:
- hasWritePermission: ${{ steps.check.outputs.require-result }}
+ hasWritePermission: ${{ steps.check.outputs.result }}
build-master:
name: Build master
@@ -40,7 +52,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@master
+ uses: actions/checkout@v4
with:
fetch-depth: 0
repository: ${{ github.repository }}
@@ -52,13 +64,12 @@ jobs:
publish-tag:
name: Publish tag
needs: build-master
- if: contains(needs.check-permission.outputs.hasWritePermission, 'true')
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout Prebid Server
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Create & publish tag
@@ -111,7 +122,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Prebid Server
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build image
diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml
index baa10b93963..09a0fd56791 100644
--- a/.github/workflows/security.yml
+++ b/.github/workflows/security.yml
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Checkout Code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
# Resolves to empty string for push events and falls back to HEAD.
ref: ${{ github.event.pull_request.head.sha }}
@@ -29,6 +29,6 @@ jobs:
severity: 'CRITICAL,HIGH'
- name: Upload Results To GitHub Security Tab
- uses: github/codeql-action/upload-sarif@v2
+ uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'
\ No newline at end of file
diff --git a/.github/workflows/semgrep.yml b/.github/workflows/semgrep.yml
index 565bb9b871a..55fba5ee287 100644
--- a/.github/workflows/semgrep.yml
+++ b/.github/workflows/semgrep.yml
@@ -1,23 +1,26 @@
-name: Adapter semgrep checks
+name: Adapter Semgrep Check
+
on:
pull_request_target:
paths: ["adapters/*/*.go"]
+
permissions:
pull-requests: write
+
jobs:
semgrep-check:
runs-on: ubuntu-latest
steps:
- - name: Checkout repo
- uses: actions/checkout@v3
+ - name: Checkout Code
+ uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - name: Calculate diff
+ - name: Calculate Code Diff
id: calculate_diff
- uses: actions/github-script@v6
+ uses: actions/github-script@v7
with:
result-encoding: string
script: |
@@ -29,7 +32,7 @@ jobs:
const helper = utils.diffHelper({github, context, fileNameFilter, event: "${{github.event.action}}", testName: "${{github.job}}"})
return await helper.buildDiff()
- - name: Should run semgrep
+ - name: Check For Changes
id: should_run_semgrep
run: |
hasChanges=$(echo '${{ steps.calculate_diff.outputs.result }}' | jq .pullRequest.hasChanges)
@@ -41,7 +44,7 @@ jobs:
pip3 install semgrep==1.22.0
semgrep --version
- - name: Run semgrep tests
+ - name: Run Semgrep
id: run_semgrep_tests
if: contains(steps.should_run_semgrep.outputs.hasChanges, 'true')
run: |
@@ -49,10 +52,10 @@ jobs:
outputs=$(semgrep --gitlab-sast --config=.semgrep/adapter $unqouted_string | jq '[.vulnerabilities[] | {"file": .location.file, "severity": .severity, "start": .location.start_line, "end": .location.end_line, "message": (.message | gsub("\\n"; "\n"))}]' | jq -c | jq -R)
echo "semgrep_result=${outputs}" >> "$GITHUB_OUTPUT"
- - name: Add pull request comment
+ - name: Add Pull Request Comment
id: add_pull_request_comment
if: contains(steps.should_run_semgrep.outputs.hasChanges, 'true')
- uses: actions/github-script@v6.4.1
+ uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
result-encoding: string
@@ -66,7 +69,7 @@ jobs:
const { previousScan, currentScan } = await helper.addReviewComments()
return previousScan.unAddressedComments + currentScan.newComments
- - name: Adapter semgrep checks result
+ - name: Check Results
if: contains(steps.should_run_semgrep.outputs.hasChanges, 'true')
run: |
if [ "${{steps.add_pull_request_comment.outputs.result}}" -ne "0" ]; then
diff --git a/.github/workflows/validate-merge.yml b/.github/workflows/validate-merge.yml
index 07f1bacaa45..d58a924d984 100644
--- a/.github/workflows/validate-merge.yml
+++ b/.github/workflows/validate-merge.yml
@@ -10,12 +10,12 @@ jobs:
steps:
- name: Install Go
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
- go-version: 1.20.5
+ go-version: 1.22.3
- name: Checkout Merged Branch
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Validate
run: |
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index 9047e1f468f..e40b165b8b3 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -10,18 +10,18 @@ jobs:
validate:
strategy:
matrix:
- go-version: [1.19.x, 1.20.x]
+ go-version: [1.21.x, 1.22.x]
os: [ubuntu-20.04]
runs-on: ${{ matrix.os }}
steps:
- name: Install Go
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Checkout Code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
# Resolves to empty string for push events and falls back to HEAD.
ref: ${{ github.event.pull_request.head.sha }}
diff --git a/.gitignore b/.gitignore
index 4e298f2a3d9..8e22128eae6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ _obj
_test
.cover/
.idea/
+.vscode/
# Architecture specific extensions/prefixes
*.[568vq]
@@ -30,8 +31,8 @@ vendor
# build artifacts
prebid-server
-build
-debug
+/build
+/debug
__debug_bin
# config files
@@ -42,11 +43,8 @@ inventory_url.yaml
analytics/config/testFiles/
analytics/filesystem/testFiles/
-# autogenerated version file
-# static/version.txt
-
-.idea/
-.vscode/
+# autogenerated files
+prebid-server.iml
# autogenerated mac file
diff --git a/Dockerfile b/Dockerfile
index 883cf395497..df5d0a9899f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,24 +3,28 @@ RUN apt-get update && \
apt-get -y upgrade && \
apt-get install -y wget
WORKDIR /tmp
-RUN wget https://dl.google.com/go/go1.20.5.linux-amd64.tar.gz && \
- tar -xf go1.20.5.linux-amd64.tar.gz && \
+RUN wget https://dl.google.com/go/go1.22.3.linux-amd64.tar.gz && \
+ tar -xf go1.22.3.linux-amd64.tar.gz && \
mv go /usr/local
RUN mkdir -p /app/prebid-server/
WORKDIR /app/prebid-server/
ENV GOROOT=/usr/local/go
ENV PATH=$GOROOT/bin:$PATH
ENV GOPROXY="https://proxy.golang.org"
+
+# Installing gcc as cgo uses it to build native code of some modules
RUN apt-get update && \
- apt-get install -y git && \
+ apt-get install -y git gcc && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
-ENV CGO_ENABLED 0
+
+# CGO must be enabled because some modules depend on native C code
+ENV CGO_ENABLED 1
COPY ./ ./
RUN go mod tidy
RUN go mod vendor
ARG TEST="false"
RUN if [ "$TEST" != "false" ]; then ./validate.sh ; fi
-RUN go build -mod=vendor -ldflags "-X github.com/prebid/prebid-server/version.Ver=`git describe --tags | sed 's/^v//'` -X github.com/prebid/prebid-server/version.Rev=`git rev-parse HEAD`" .
+RUN go build -mod=vendor -ldflags "-X github.com/prebid/prebid-server/v3/version.Ver=`git describe --tags | sed 's/^v//'` -X github.com/prebid/prebid-server/v3/version.Rev=`git rev-parse HEAD`" .
FROM ubuntu:20.04 AS release
LABEL maintainer="hans.hjort@xandr.com"
@@ -30,8 +34,10 @@ RUN chmod a+xr prebid-server
COPY static static/
COPY stored_requests/data stored_requests/data
RUN chmod -R a+r static/ stored_requests/data
+
+# Installing libatomic1 as it is a runtime dependency for some modules
RUN apt-get update && \
- apt-get install -y ca-certificates mtr && \
+ apt-get install -y ca-certificates mtr libatomic1 && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN adduser prebid_user
USER prebid_user
diff --git a/Makefile b/Makefile
index b5b7281e5ed..8b68afe3bee 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,7 @@ test: deps
ifeq "$(adapter)" ""
./validate.sh
else
- go test github.com/prebid/prebid-server/adapters/$(adapter) -bench=.
+ go test github.com/prebid/prebid-server/v3/adapters/$(adapter) -bench=.
endif
# build-modules generates modules/builder.go file which provides a list of all available modules
@@ -32,4 +32,8 @@ image:
# format runs format
format:
- ./scripts/format.sh -f true
\ No newline at end of file
+ ./scripts/format.sh -f true
+
+# formatcheck runs format for diagnostics, without modifying the code
+formatcheck:
+ ./scripts/format.sh -f false
diff --git a/README.md b/README.md
index e2490378b86..83358e0f861 100644
--- a/README.md
+++ b/README.md
@@ -2,79 +2,114 @@
[](https://goreportcard.com/report/github.com/prebid/prebid-server)

-# Prebid Server
+
+
+
+
-Prebid Server is an open source implementation of Server-Side Header Bidding.
-It is managed by [Prebid.org](https://prebid.org/about/),
-and upholds the principles from the [Prebid Code of Conduct](https://prebid.org/code-of-conduct/).
+Prebid Server is an open-source solution for running real-time advertising auctions in the cloud. This project is part of the Prebid ecosystem, seamlessly integrating with Prebid.js and the Prebid Mobile SDKs to deliver world-class header bidding for any ad format and for any type of digital media.
-This project does not support the same set of Bidders as Prebid.js, although there is overlap.
-The current set can be found in the [adapters](./adapters) package. If you don't see the one you want, feel free to [contribute it](https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html).
+## Getting Started
+- [What is Prebid Server](https://docs.prebid.org/prebid-server/overview/prebid-server-overview.html)
+- [Intro to Header Bidding](https://docs.prebid.org/overview/intro-to-header-bidding.html)
+- [Header Bidding with Prebid](https://docs.prebid.org/overview/intro.html#header-bidding-with-prebid)
+- [API Endpoints](https://docs.prebid.org/prebid-server/endpoints/pbs-endpoint-overview.html)
+
+## Configuring
-For more information, see:
+When hosting Prebid Server or developing locally, **you must set a default GDPR value**. This configuration determines whether GDPR is enabled when no regulatory signal is available in the request, where a value of `"0"` disables it by default and a value of `"1"` enables it. This is required as there is no consensus on a good default.
-- [What is Prebid?](https://docs.prebid.org/overview/intro.html)
-- [Prebid Server Overview](https://docs.prebid.org/prebid-server/overview/prebid-server-overview.html)
-- [Current Bidders](https://docs.prebid.org/dev-docs/pbs-bidders.html)
+Refer to the [configuration guide](docs/developers/configuration.md) for additional information and a list of available configuration options.
-Please consider [registering your Prebid Server](https://docs.prebid.org/prebid-server/hosting/pbs-hosting.html#optional-registration) to get on the mailing list for updates, etc.
+## Hosting Prebid Server
+> [!NOTE]
+> Please consider [registering as a Prebid Server host](https://docs.prebid.org/prebid-server/hosting/pbs-hosting.html#optional-registration) to join the mailing list for updates and feedback.
-## Installation
+The quickest way to host Prebid Server is to deploy our [official Docker image](https://hub.docker.com/r/prebid/prebid-server). If you're hosting the container with Kubernetes, you can configure Prebid Server with environment variables [using a pod file](https://kubernetes.io/docs/tasks/inject-data-application/define-interdependent-environment-variables/) or [using a config map](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables). Alternatively, you can use a configuration file [embedded in a config map](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#populate-a-volume-with-data-stored-in-a-configmap) which Prebid Server will read from at the path `/etc/config`.
-First install [Go](https://golang.org/doc/install) version 1.19 or newer.
+For deploying a fork, you can create a custom Docker container using the command:
+``` bash
+docker build --platform linux/amd64 -t prebid-server .
+```
+or compile a standalone binary using the command:
+``` bash
+go build .
+```
+**Note:** if building from source there are a couple dependencies to be aware of:
+1. *Compile-time*. Some modules ship native code that requires `cgo` (comes with the `go` compiler) being enabled - by default it is and environment variable `CGO_ENABLED=1` do NOT set it to `0`.
+2. *Compile-time*. `cgo` depends on the C-compiler, which usually is `gcc`, but can be changed by setting the value of `CC` env var, f.e. `CC=clang`. On ubuntu `gcc` can be installed via `sudo apt-get install gcc`.
+3. *Runtime*. Some modules require `libatomic`. On ubuntu it is installed by running `sudo apt-get install libatomic1`. `libatomic1` is a dependency of `gcc`, so if you are building with `gcc` and running on the same machine, it is likely that `libatomic1` is already installed.
-Note that prebid-server is using [Go modules](https://blog.golang.org/using-go-modules).
-We officially support the most recent two major versions of the Go runtime. However, if you'd like to use a version <1.13 and are inside GOPATH `GO111MODULE` needs to be set to `GO111MODULE=on`.
+Ensure that you deploy the `/static` directory, as Prebid Server requires those files at startup.
-Download and prepare Prebid Server:
+## Developing
-```bash
-cd YOUR_DIRECTORY
-git clone https://github.com/prebid/prebid-server src/github.com/prebid/prebid-server
-cd src/github.com/prebid/prebid-server
+Prebid Server requires [Go](https://go.dev) version 1.21 or newer. You can develop on any operating system that Go supports; however, please note that our helper scripts are written in bash.
+
+1. Clone The Repository
+``` bash
+git clone git@github.com:prebid/prebid-server.git
+cd prebid-server
```
-Run the automated tests:
+3. Download Dependencies
+``` bash
+go mod download
+```
+3. Verify Tests Pass
```bash
./validate.sh
```
-Or just run the server locally:
-
+4. Run The Server
```bash
-go build .
-./prebid-server
+go run .
```
-Run format:
-```
-make format
-```
-or
-```bash
-./scripts/format.sh -f true
-```
+By default, Prebid Server will attach to port 8000. To confirm the server is running, visit `http://localhost:8000/` in your web browser.
-Load the landing page in your browser at `http://localhost:8000/`.
-For the full API reference, see [the endpoint documentation](https://docs.prebid.org/prebid-server/endpoints/pbs-endpoint-overview.html)
+### Code Style
+To maintain consistency in the project's code, please:
+
+- Follow the recommendations set by [Effective Go](https://go.dev/doc/effective_go). This article provides a comprehensive guide on how to write idiomatic Go code, covering topics such as naming and formatting. Many IDEs will automatically format your code upon save. If you need to manaully format your code, either run the bash script or execute the make step:
+ ```
+ ./scripts/format.sh -f true
+ ```
+ ```
+ make format
+ ```
-## Go Modules
+- Prefer small functions with descriptive names instead of complex functions with comments. This approach helps make the code more readable, maintainable, and testable.
-The packages within this repository are intended to be used as part of the Prebid Server compiled binary. If you
-choose to import Prebid Server packages in other projects, please understand we make no promises on the stability
-of exported types.
+- Do not discard errors. You should implement appropriate error handling, such as gracefully falling back to a default behavior or bubbling up an error.
+
+### IDE Recommendation
+
+An option for developing Prebid Server in a reproducible environment isolated from your host OS is using Visual Studio Code with [Remote Container Setup](devcontainer.md). This is a recommendation, not a requirement. This approach is especially useful if you are developing on Windows, since the Remote Container runs within WSL providing you with the capability to execute bash scripts.
+
+## Importing Prebid Server
+
+Prebid Server is not currently intended to be imported by other projects. Go Modules is used to manage dependencies, which also makes it possible to import Prebid Server packages. This is not supported. We offer no guarantees regarding the stability of packages and do not adhere to semantic versioning guidelines.
## Contributing
+> [!IMPORTANT]
+> All contributions must follow the [Prebid Code of Conduct](https://prebid.org/code-of-conduct/) and the [Prebid Module Rules](https://docs.prebid.org/dev-docs/module-rules.html).
-Want to [add an adapter](https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html)? Found a bug? Great!
+### Bid Adapter
+Bid Adapters transform OpenRTB requests and responses for communicating with a bidding server. This may be as simple as a passthrough or as complex as mapping to a custom data model. We invite you to contribute an adapter for your company. Consult our guide on [building a bid adapter](https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html) for more information.
-Report bugs, request features, and suggest improvements [on Github](https://github.com/prebid/prebid-server/issues).
+### Analytics Module
+Analytics Modules enable business intelligence tools to collect data from Prebid Server to provide publishers and hosts with valuable insights into their header bidding traffic. We welcome you to contribute a module for your platform. Refer to our guide on [building an analytics module](https://docs.prebid.org/prebid-server/developers/pbs-build-an-analytics-adapter.html) for further information.
-Or better yet, [open a pull request](https://github.com/prebid/prebid-server/compare) with the changes you'd like to see.
+### Auction Module
+Auction Modules allow hosts to extend the behavior of Prebid Server at specfic spots in the auction pipeline using existing modules or by developing custom functionality. Auction Modules may provide creative validation, traffic optimization, and real time data services among many other potential uses. We welcome vendors and community members to contribute modules that publishers and hosts may find useful. Consult our guide on [building an auction module](https://docs.prebid.org/prebid-server/developers/add-a-module.html) for more information.
-## IDE Recommendations
+### Feature
+We welcome everyone to contribute to this project by implementing a specification or by proposing a new feature. Please review the [prioritized project board](https://github.com/orgs/prebid/projects/4), where you can select an issue labeled "Ready For Dev". To avoid redundant effort, kindly leave a comment on the issue stating your intention to take it on. To propose a feature, [open a new issue](https://github.com/prebid/prebid-server/issues/new/choose) with as much detail as possible for consideration by the Prebid Server Committee.
+### Bug Fix
+Bug reports may be submitted by [opening a new issue](https://github.com/prebid/prebid-server/issues/new/choose) and describing the error in detail with the steps to reproduce and example data. A member of the core development team will validate the bug and discuss next steps. You're encouraged to open an exploratory draft pull request to either demonstrate the bug by adding a test or offering a potential fix.
The quickest way to start developing Prebid Server in a reproducible environment isolated from your host OS
is by using Visual Studio Code with [Remote Container Setup](devcontainer.md).
@@ -82,3 +117,6 @@ is by using Visual Studio Code with [Remote Container Setup](devcontainer.md).
`docker build --platform linux/x86_64 -t infytv/infy:hb-2.0.0 .`
`docker push infytv/infy:hb-2.0.0`
+## Learning Materials
+
+To understand more about how Prebid Server in Go works and quickly spins up sample instances, refer to the `sample` folder which describes various structured and integrated examples. The examples are designed to run on any platform that supports `docker` container.
diff --git a/account/account.go b/account/account.go
index 1f5a3feee14..0087548cc79 100644
--- a/account/account.go
+++ b/account/account.go
@@ -6,20 +6,20 @@ import (
"github.com/prebid/go-gdpr/consentconstants"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/metrics"
- "github.com/prebid/prebid-server/openrtb_ext"
- "github.com/prebid/prebid-server/stored_requests"
- "github.com/prebid/prebid-server/util/iputil"
- "github.com/prebid/prebid-server/util/jsonutil"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/metrics"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/stored_requests"
+ "github.com/prebid/prebid-server/v3/util/iputil"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
// GetAccount looks up the config.Account object referenced by the given accountID, with access rules applied
func GetAccount(ctx context.Context, cfg *config.Configuration, fetcher stored_requests.AccountFetcher, accountID string, me metrics.MetricsEngine) (account *config.Account, errs []error) {
if cfg.AccountRequired && accountID == metrics.PublisherUnknown {
return nil, []error{&errortypes.AcctRequired{
- Message: fmt.Sprintf("Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host."),
+ Message: "Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host.",
}}
}
@@ -32,7 +32,7 @@ func GetAccount(ctx context.Context, cfg *config.Configuration, fetcher stored_r
}
if cfg.AccountRequired && cfg.AccountDefaults.Disabled {
errs = append(errs, &errortypes.AcctRequired{
- Message: fmt.Sprintf("Prebid-server could not verify the Account ID. Please reach out to the prebid server host."),
+ Message: "Prebid-server could not verify the Account ID. Please reach out to the prebid server host.",
})
return nil, errs
}
@@ -49,6 +49,11 @@ func GetAccount(ctx context.Context, cfg *config.Configuration, fetcher stored_r
Message: fmt.Sprintf("The prebid-server account config for account id \"%s\" is malformed. Please reach out to the prebid server host.", accountID),
}}
}
+ if err := config.UnpackDSADefault(account.Privacy.DSA); err != nil {
+ return nil, []error{&errortypes.MalformedAcct{
+ Message: fmt.Sprintf("The prebid-server account config DSA for account id \"%s\" is malformed. Please reach out to the prebid server host.", accountID),
+ }}
+ }
// Fill in ID if needed, so it can be left out of account definition
if len(account.ID) == 0 {
@@ -111,7 +116,7 @@ func setDerivedConfig(account *config.Account) {
if pc.VendorExceptions == nil {
continue
}
- pc.VendorExceptionMap = make(map[openrtb_ext.BidderName]struct{})
+ pc.VendorExceptionMap = make(map[string]struct{})
for _, v := range pc.VendorExceptions {
pc.VendorExceptionMap[v] = struct{}{}
}
diff --git a/account/account_test.go b/account/account_test.go
index 7a242f21188..c8b17b53ff8 100644
--- a/account/account_test.go
+++ b/account/account_test.go
@@ -6,18 +6,26 @@ import (
"fmt"
"testing"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/metrics"
- "github.com/prebid/prebid-server/openrtb_ext"
- "github.com/prebid/prebid-server/stored_requests"
- "github.com/prebid/prebid-server/util/iputil"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/metrics"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/stored_requests"
+ "github.com/prebid/prebid-server/v3/util/iputil"
+ "github.com/prebid/prebid-server/v3/util/ptrutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
+var (
+ validDSA = `{\"dsarequired\":1,\"pubrender\":2,\"transparency\":[{\"domain\":\"test.com\"}]}`
+ invalidDSA = `{\"dsarequired\":\"invalid\",\"pubrender\":2,\"transparency\":[{\"domain\":\"test.com\"}]}`
+)
+
var mockAccountData = map[string]json.RawMessage{
"valid_acct": json.RawMessage(`{"disabled":false}`),
+ "valid_acct_dsa": json.RawMessage(`{"disabled":false, "privacy": {"dsa": {"default": "` + validDSA + `"}}}`),
+ "invalid_acct_dsa": json.RawMessage(`{"disabled":false, "privacy": {"dsa": {"default": "` + invalidDSA + `"}}}`),
"invalid_acct_ipv6_ipv4": json.RawMessage(`{"disabled":false, "privacy": {"ipv6": {"anon_keep_bits": -32}, "ipv4": {"anon_keep_bits": -16}}}`),
"disabled_acct": json.RawMessage(`{"disabled":true}`),
"malformed_acct": json.RawMessage(`{"disabled":"invalid type"}`),
@@ -36,6 +44,16 @@ func (af mockAccountFetcher) FetchAccount(ctx context.Context, accountDefaultsJS
}
func TestGetAccount(t *testing.T) {
+ validDSA := &openrtb_ext.ExtRegsDSA{
+ Required: ptrutil.ToPtr[int8](1),
+ PubRender: ptrutil.ToPtr[int8](2),
+ Transparency: []openrtb_ext.ExtBidDSATransparency{
+ {
+ Domain: "test.com",
+ },
+ },
+ }
+
unknown := metrics.PublisherUnknown
testCases := []struct {
accountID string
@@ -44,7 +62,8 @@ func TestGetAccount(t *testing.T) {
// account_defaults.disabled
disabled bool
// checkDefaultIP indicates IPv6 and IPv6 should be set to default values
- checkDefaultIP bool
+ wantDefaultIP bool
+ wantDSA *openrtb_ext.ExtRegsDSA
// expected error, or nil if account should be found
err error
}{
@@ -66,7 +85,13 @@ func TestGetAccount(t *testing.T) {
{accountID: "valid_acct", required: false, disabled: true, err: nil},
{accountID: "valid_acct", required: true, disabled: true, err: nil},
- {accountID: "invalid_acct_ipv6_ipv4", required: true, disabled: false, err: nil, checkDefaultIP: true},
+ {accountID: "valid_acct_dsa", required: false, disabled: false, wantDSA: validDSA, err: nil},
+ {accountID: "valid_acct_dsa", required: true, disabled: false, wantDSA: validDSA, err: nil},
+ {accountID: "valid_acct_dsa", required: false, disabled: true, wantDSA: validDSA, err: nil},
+ {accountID: "valid_acct_dsa", required: true, disabled: true, wantDSA: validDSA, err: nil},
+
+ {accountID: "invalid_acct_ipv6_ipv4", required: true, disabled: false, err: nil, wantDefaultIP: true},
+ {accountID: "invalid_acct_dsa", required: false, disabled: false, err: &errortypes.MalformedAcct{}},
// pubID given and matches a host account explicitly disabled (Disabled: true on account json)
{accountID: "disabled_acct", required: false, disabled: false, err: &errortypes.AccountDisabled{}},
@@ -111,10 +136,13 @@ func TestGetAccount(t *testing.T) {
assert.Nil(t, account, "return account must be nil on error")
assert.IsType(t, test.err, errors[0], "error is of unexpected type")
}
- if test.checkDefaultIP {
+ if test.wantDefaultIP {
assert.Equal(t, account.Privacy.IPv6Config.AnonKeepBits, iputil.IPv6DefaultMaskingBitSize, "ipv6 should be set to default value")
assert.Equal(t, account.Privacy.IPv4Config.AnonKeepBits, iputil.IPv4DefaultMaskingBitSize, "ipv4 should be set to default value")
}
+ if test.wantDSA != nil {
+ assert.Equal(t, test.wantDSA, account.Privacy.DSA.DefaultUnpacked)
+ }
})
}
}
@@ -122,7 +150,7 @@ func TestGetAccount(t *testing.T) {
func TestSetDerivedConfig(t *testing.T) {
tests := []struct {
description string
- purpose1VendorExceptions []openrtb_ext.BidderName
+ purpose1VendorExceptions []string
feature1VendorExceptions []openrtb_ext.BidderName
basicEnforcementVendors []string
enforceAlgo string
@@ -134,11 +162,11 @@ func TestSetDerivedConfig(t *testing.T) {
},
{
description: "One purpose 1 vendor exception",
- purpose1VendorExceptions: []openrtb_ext.BidderName{"appnexus"},
+ purpose1VendorExceptions: []string{"appnexus"},
},
{
description: "Multiple purpose 1 vendor exceptions",
- purpose1VendorExceptions: []openrtb_ext.BidderName{"appnexus", "rubicon"},
+ purpose1VendorExceptions: []string{"appnexus", "rubicon"},
},
{
description: "Nil feature 1 vendor exceptions",
@@ -192,7 +220,7 @@ func TestSetDerivedConfig(t *testing.T) {
setDerivedConfig(&account)
- purpose1ExceptionMapKeys := make([]openrtb_ext.BidderName, 0)
+ purpose1ExceptionMapKeys := make([]string, 0)
for k := range account.GDPR.Purpose1.VendorExceptionMap {
purpose1ExceptionMapKeys = append(purpose1ExceptionMapKeys, k)
}
diff --git a/adapters/33across/33across.go b/adapters/33across/33across.go
index 26349e8426b..94ddf1f91fd 100644
--- a/adapters/33across/33across.go
+++ b/adapters/33across/33across.go
@@ -5,12 +5,13 @@ import (
"fmt"
"net/http"
- "github.com/prebid/openrtb/v19/adcom1"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/adcom1"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type TtxAdapter struct {
@@ -76,7 +77,7 @@ func (a *TtxAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapter
// Skip over imps whose extensions cannot be read since
// we cannot glean Prod or ZoneID which are required to
// group together. However let's not block request creation.
- if err := json.Unmarshal(impCopy.Ext, &impExt); err == nil {
+ if err := jsonutil.Unmarshal(impCopy.Ext, &impExt); err == nil {
impKey := impExt.Ttx.Prod + impExt.Ttx.Zoneid
groupedImps[impKey] = append(groupedImps[impKey], impCopy)
} else {
@@ -114,6 +115,7 @@ func (a *TtxAdapter) makeRequest(request openrtb2.BidRequest, impList []openrtb2
Uri: a.endpoint,
Body: reqJSON,
Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
}, nil
}
@@ -125,14 +127,14 @@ func makeImps(imp openrtb2.Imp) (openrtb2.Imp, error) {
}
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return openrtb2.Imp{}, &errortypes.BadInput{
Message: err.Error(),
}
}
var ttxExt openrtb_ext.ExtImp33across
- if err := json.Unmarshal(bidderExt.Bidder, &ttxExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &ttxExt); err != nil {
return openrtb2.Imp{}, &errortypes.BadInput{
Message: err.Error(),
}
@@ -176,7 +178,7 @@ func makeReqExt(request *openrtb2.BidRequest) ([]byte, error) {
var reqExt reqExt
if len(request.Ext) > 0 {
- if err := json.Unmarshal(request.Ext, &reqExt); err != nil {
+ if err := jsonutil.Unmarshal(request.Ext, &reqExt); err != nil {
return nil, err
}
}
@@ -214,7 +216,7 @@ func (a *TtxAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequ
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{err}
}
@@ -225,7 +227,7 @@ func (a *TtxAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequ
var bidExt bidExt
var bidType openrtb_ext.BidType
- if err := json.Unmarshal(sb.Bid[i].Ext, &bidExt); err != nil {
+ if err := jsonutil.Unmarshal(sb.Bid[i].Ext, &bidExt); err != nil {
bidType = openrtb_ext.BidTypeBanner
} else {
bidType = getBidType(bidExt)
@@ -243,8 +245,8 @@ func (a *TtxAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequ
func validateVideoParams(video *openrtb2.Video, prod string) (*openrtb2.Video, error) {
videoCopy := *video
- if videoCopy.W == 0 ||
- videoCopy.H == 0 ||
+ if (videoCopy.W == nil || *videoCopy.W == 0) ||
+ (videoCopy.H == nil || *videoCopy.H == 0) ||
videoCopy.Protocols == nil ||
videoCopy.MIMEs == nil ||
videoCopy.PlaybackMethod == nil {
diff --git a/adapters/33across/33across_test.go b/adapters/33across/33across_test.go
index bdc546a9627..3ed177deacd 100644
--- a/adapters/33across/33across_test.go
+++ b/adapters/33across/33across_test.go
@@ -3,9 +3,9 @@ package ttx
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestJsonSamples(t *testing.T) {
diff --git a/adapters/33across/33acrosstest/exemplary/bidresponse-defaults.json b/adapters/33across/33acrosstest/exemplary/bidresponse-defaults.json
index 50fba69bde1..9f6a28e6d19 100644
--- a/adapters/33across/33acrosstest/exemplary/bidresponse-defaults.json
+++ b/adapters/33across/33acrosstest/exemplary/bidresponse-defaults.json
@@ -61,7 +61,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/exemplary/instream-video-defaults.json b/adapters/33across/33acrosstest/exemplary/instream-video-defaults.json
index c99e535cdb7..9b7c717153f 100644
--- a/adapters/33across/33acrosstest/exemplary/instream-video-defaults.json
+++ b/adapters/33across/33acrosstest/exemplary/instream-video-defaults.json
@@ -59,7 +59,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/exemplary/multi-format.json b/adapters/33across/33acrosstest/exemplary/multi-format.json
index 3315ff72559..af09bb75cb6 100644
--- a/adapters/33across/33acrosstest/exemplary/multi-format.json
+++ b/adapters/33across/33acrosstest/exemplary/multi-format.json
@@ -64,7 +64,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/exemplary/multi-imp-banner.json b/adapters/33across/33acrosstest/exemplary/multi-imp-banner.json
index db03a001526..c0b6166548b 100644
--- a/adapters/33across/33acrosstest/exemplary/multi-imp-banner.json
+++ b/adapters/33across/33acrosstest/exemplary/multi-imp-banner.json
@@ -97,7 +97,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id1","test-imp-id2"]
},
"mockResponse": {
"status": 200,
@@ -172,7 +173,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id3"]
},
"mockResponse": {
"status": 200,
@@ -233,7 +235,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id4"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/exemplary/optional-params.json b/adapters/33across/33acrosstest/exemplary/optional-params.json
index f429f9458a7..f6171b3f242 100644
--- a/adapters/33across/33acrosstest/exemplary/optional-params.json
+++ b/adapters/33across/33acrosstest/exemplary/optional-params.json
@@ -50,7 +50,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/33across/33acrosstest/exemplary/outstream-video-defaults.json b/adapters/33across/33acrosstest/exemplary/outstream-video-defaults.json
index fdd422c7a63..7044a145a7c 100644
--- a/adapters/33across/33acrosstest/exemplary/outstream-video-defaults.json
+++ b/adapters/33across/33acrosstest/exemplary/outstream-video-defaults.json
@@ -58,7 +58,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/exemplary/site-banner.json b/adapters/33across/33acrosstest/exemplary/site-banner.json
index 552daf25224..e55a92ed887 100644
--- a/adapters/33across/33acrosstest/exemplary/site-banner.json
+++ b/adapters/33across/33acrosstest/exemplary/site-banner.json
@@ -49,7 +49,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/exemplary/site-video.json b/adapters/33across/33acrosstest/exemplary/site-video.json
index 3cf44775efb..12170cb77d2 100644
--- a/adapters/33across/33acrosstest/exemplary/site-video.json
+++ b/adapters/33across/33acrosstest/exemplary/site-video.json
@@ -61,7 +61,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/supplemental/multi-imp-mixed-validation.json b/adapters/33across/33acrosstest/supplemental/multi-imp-mixed-validation.json
index a2bc7890e96..3aaa6e94e90 100644
--- a/adapters/33across/33acrosstest/supplemental/multi-imp-mixed-validation.json
+++ b/adapters/33across/33acrosstest/supplemental/multi-imp-mixed-validation.json
@@ -58,7 +58,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id1"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/33across/33acrosstest/supplemental/status-not-ok.json b/adapters/33across/33acrosstest/supplemental/status-not-ok.json
index 2c7fcd013f3..668e8a0bbae 100644
--- a/adapters/33across/33acrosstest/supplemental/status-not-ok.json
+++ b/adapters/33across/33acrosstest/supplemental/status-not-ok.json
@@ -49,7 +49,8 @@
}
],
"site": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 400,
diff --git a/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-null.json b/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-null.json
new file mode 100644
index 00000000000..c9389fb86c2
--- /dev/null
+++ b/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-null.json
@@ -0,0 +1,29 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "video": {
+ "protocols": [2],
+ "playbackmethod": [2],
+ "mimes": ["foo", "bar"]
+ },
+ "ext": {
+ "bidder": {
+ "siteId": "fake-site-id",
+ "productId": "siab"
+ }
+ }
+ }
+ ],
+ "site": {}
+ },
+
+ "expectedMakeRequestsErrors": [
+ {
+ "value": "One or more invalid or missing video field(s) w, h, protocols, mimes, playbackmethod",
+ "comparison": "literal"
+ }
+ ]
+}
diff --git a/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-partial.json b/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-partial.json
new file mode 100644
index 00000000000..230eaac05df
--- /dev/null
+++ b/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-partial.json
@@ -0,0 +1,30 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "video": {
+ "h": 100,
+ "protocols": [2],
+ "playbackmethod": [2],
+ "mimes": ["foo", "bar"]
+ },
+ "ext": {
+ "bidder": {
+ "siteId": "fake-site-id",
+ "productId": "siab"
+ }
+ }
+ }
+ ],
+ "site": {}
+ },
+
+ "expectedMakeRequestsErrors": [
+ {
+ "value": "One or more invalid or missing video field(s) w, h, protocols, mimes, playbackmethod",
+ "comparison": "literal"
+ }
+ ]
+}
diff --git a/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-zero.json b/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-zero.json
new file mode 100644
index 00000000000..32927e2b455
--- /dev/null
+++ b/adapters/33across/33acrosstest/supplemental/video-validation-fail-size-zero.json
@@ -0,0 +1,31 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "video": {
+ "w": 0,
+ "h": 0,
+ "protocols": [2],
+ "playbackmethod": [2],
+ "mimes": ["foo", "bar"]
+ },
+ "ext": {
+ "bidder": {
+ "siteId": "fake-site-id",
+ "productId": "siab"
+ }
+ }
+ }
+ ],
+ "site": {}
+ },
+
+ "expectedMakeRequestsErrors": [
+ {
+ "value": "One or more invalid or missing video field(s) w, h, protocols, mimes, playbackmethod",
+ "comparison": "literal"
+ }
+ ]
+}
diff --git a/adapters/33across/params_test.go b/adapters/33across/params_test.go
index 2d488c4148c..3169a1d9944 100644
--- a/adapters/33across/params_test.go
+++ b/adapters/33across/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
// This file actually intends to test static/bidder-params/33across.json
diff --git a/adapters/aax/aax.go b/adapters/aax/aax.go
index 86994c6dea2..10969559658 100644
--- a/adapters/aax/aax.go
+++ b/adapters/aax/aax.go
@@ -6,11 +6,12 @@ import (
"net/http"
"net/url"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type adapter struct {
@@ -38,6 +39,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.E
Uri: a.endpoint,
Body: reqJson,
Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
}}, errs
}
@@ -62,7 +64,7 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{err}
}
@@ -95,7 +97,7 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server co
func getMediaTypeForImp(bid openrtb2.Bid, imps []openrtb2.Imp) (openrtb_ext.BidType, error) {
var bidExt aaxResponseBidExt
- err := json.Unmarshal(bid.Ext, &bidExt)
+ err := jsonutil.Unmarshal(bid.Ext, &bidExt)
if err == nil {
switch bidExt.AdCodeType {
case "banner":
diff --git a/adapters/aax/aax_test.go b/adapters/aax/aax_test.go
index 6a5eaed5dfe..ad24a2d62e1 100644
--- a/adapters/aax/aax_test.go
+++ b/adapters/aax/aax_test.go
@@ -5,9 +5,9 @@ import (
"github.com/stretchr/testify/assert"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestJsonSamples(t *testing.T) {
diff --git a/adapters/aax/aaxtest/exemplary/multi-format.json b/adapters/aax/aaxtest/exemplary/multi-format.json
index 493f268ccf5..dd757882b7a 100644
--- a/adapters/aax/aaxtest/exemplary/multi-format.json
+++ b/adapters/aax/aaxtest/exemplary/multi-format.json
@@ -68,7 +68,8 @@
}
}
]
- }
+ },
+ "impIDs":["1"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/aax/aaxtest/exemplary/multi-imps.json b/adapters/aax/aaxtest/exemplary/multi-imps.json
index 9ad02293e95..25b39323456 100644
--- a/adapters/aax/aaxtest/exemplary/multi-imps.json
+++ b/adapters/aax/aaxtest/exemplary/multi-imps.json
@@ -80,7 +80,8 @@
}
}
]
- }
+ },
+ "impIDs":["1","2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aax/aaxtest/exemplary/no-bid.json b/adapters/aax/aaxtest/exemplary/no-bid.json
index 2ffbdac7e93..e2a6ac2a1d7 100644
--- a/adapters/aax/aaxtest/exemplary/no-bid.json
+++ b/adapters/aax/aaxtest/exemplary/no-bid.json
@@ -46,7 +46,8 @@
}
}
]
- }
+ },
+ "impIDs":["1"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/aax/aaxtest/exemplary/optional-params.json b/adapters/aax/aaxtest/exemplary/optional-params.json
index 37458ed6d0e..b8c2a264c89 100644
--- a/adapters/aax/aaxtest/exemplary/optional-params.json
+++ b/adapters/aax/aaxtest/exemplary/optional-params.json
@@ -48,7 +48,8 @@
}
}
]
- }
+ },
+ "impIDs":["1"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/aax/aaxtest/exemplary/simple-banner.json b/adapters/aax/aaxtest/exemplary/simple-banner.json
index 7e8c0fce1d8..f7eb36b3fc7 100644
--- a/adapters/aax/aaxtest/exemplary/simple-banner.json
+++ b/adapters/aax/aaxtest/exemplary/simple-banner.json
@@ -46,7 +46,8 @@
}
}
]
- }
+ },
+ "impIDs":["1"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aax/aaxtest/exemplary/simple-video.json b/adapters/aax/aaxtest/exemplary/simple-video.json
index 6ee8d3d8bfe..7e11ee52126 100644
--- a/adapters/aax/aaxtest/exemplary/simple-video.json
+++ b/adapters/aax/aaxtest/exemplary/simple-video.json
@@ -52,7 +52,8 @@
}
}
]
- }
+ },
+ "impIDs":["1"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aax/aaxtest/supplemental/invalid-req-400-status-code-bad-request.json b/adapters/aax/aaxtest/supplemental/invalid-req-400-status-code-bad-request.json
index 276e0fc381a..0091c1aa2ab 100644
--- a/adapters/aax/aaxtest/supplemental/invalid-req-400-status-code-bad-request.json
+++ b/adapters/aax/aaxtest/supplemental/invalid-req-400-status-code-bad-request.json
@@ -80,7 +80,8 @@
"buyeruid": "0000-000-000-0000"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 400
diff --git a/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json b/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json
index 2d9d02d66ba..28894b288ad 100644
--- a/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json
+++ b/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json
@@ -86,7 +86,8 @@
"gdpr": 0
}
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json b/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json
index b0a0b750ab1..087e5ff63ae 100644
--- a/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json
+++ b/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json
@@ -112,7 +112,8 @@
"gdpr": 0
}
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aax/aaxtest/supplemental/valid-req-200-bid-response-from-aax.json b/adapters/aax/aaxtest/supplemental/valid-req-200-bid-response-from-aax.json
index bad8743488c..72243d19696 100644
--- a/adapters/aax/aaxtest/supplemental/valid-req-200-bid-response-from-aax.json
+++ b/adapters/aax/aaxtest/supplemental/valid-req-200-bid-response-from-aax.json
@@ -86,7 +86,8 @@
"gdpr": 0
}
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aax/aaxtest/supplemental/valid-req-204-response-from-aax.json b/adapters/aax/aaxtest/supplemental/valid-req-204-response-from-aax.json
index db8219029ff..3076cc842d2 100644
--- a/adapters/aax/aaxtest/supplemental/valid-req-204-response-from-aax.json
+++ b/adapters/aax/aaxtest/supplemental/valid-req-204-response-from-aax.json
@@ -54,7 +54,8 @@
"id": "imp-id"
}
]
- }
+ },
+ "impIDs":["imp-id"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/aax/params_test.go b/adapters/aax/params_test.go
index edf9fb6fc48..0f93a063e65 100644
--- a/adapters/aax/params_test.go
+++ b/adapters/aax/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
// This file actually intends to test static/bidder-params/aax.json
diff --git a/adapters/aceex/aceex.go b/adapters/aceex/aceex.go
index 61863f0b8a8..73a040bbe56 100644
--- a/adapters/aceex/aceex.go
+++ b/adapters/aceex/aceex.go
@@ -6,12 +6,13 @@ import (
"net/http"
"text/template"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/macros"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type adapter struct {
@@ -84,18 +85,19 @@ func (a *adapter) MakeRequests(
Body: reqJSON,
Uri: url,
Headers: getHeaders(openRTBRequest),
+ ImpIDs: openrtb_ext.GetImpIDs(openRTBRequest.Imp),
}}, nil
}
func (a *adapter) getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtAceex, error) {
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, &errortypes.BadInput{
Message: "ext.bidder not provided",
}
}
var aceexExt openrtb_ext.ExtAceex
- if err := json.Unmarshal(bidderExt.Bidder, &aceexExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &aceexExt); err != nil {
return nil, &errortypes.BadInput{
Message: "ext.bidder not provided",
}
@@ -150,7 +152,7 @@ func (a *adapter) MakeBids(
responseBody := bidderRawResponse.Body
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(responseBody, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(responseBody, &bidResp); err != nil {
return nil, []error{&errortypes.BadServerResponse{
Message: "Bad Server Response",
}}
diff --git a/adapters/aceex/aceex_test.go b/adapters/aceex/aceex_test.go
index ec0e0fec710..7aef7dd93f7 100644
--- a/adapters/aceex/aceex_test.go
+++ b/adapters/aceex/aceex_test.go
@@ -3,9 +3,9 @@ package aceex
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
diff --git a/adapters/aceex/aceextest/exemplary/banner-app.json b/adapters/aceex/aceextest/exemplary/banner-app.json
index f6509699ad0..f83826b0188 100644
--- a/adapters/aceex/aceextest/exemplary/banner-app.json
+++ b/adapters/aceex/aceextest/exemplary/banner-app.json
@@ -94,7 +94,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/exemplary/banner-web.json b/adapters/aceex/aceextest/exemplary/banner-web.json
index cf0d69bed7f..8b90d477666 100644
--- a/adapters/aceex/aceextest/exemplary/banner-web.json
+++ b/adapters/aceex/aceextest/exemplary/banner-web.json
@@ -82,7 +82,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/exemplary/native-app.json b/adapters/aceex/aceextest/exemplary/native-app.json
index 3e8d0fe2b96..b5daeb94bcb 100644
--- a/adapters/aceex/aceextest/exemplary/native-app.json
+++ b/adapters/aceex/aceextest/exemplary/native-app.json
@@ -94,7 +94,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/exemplary/native-web.json b/adapters/aceex/aceextest/exemplary/native-web.json
index a0c220ef74c..5874d8591a5 100644
--- a/adapters/aceex/aceextest/exemplary/native-web.json
+++ b/adapters/aceex/aceextest/exemplary/native-web.json
@@ -83,7 +83,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/exemplary/video-app.json b/adapters/aceex/aceextest/exemplary/video-app.json
index cc27ad608f3..95bff875682 100644
--- a/adapters/aceex/aceextest/exemplary/video-app.json
+++ b/adapters/aceex/aceextest/exemplary/video-app.json
@@ -104,7 +104,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/exemplary/video-web.json b/adapters/aceex/aceextest/exemplary/video-web.json
index a15590860c9..eac6c195d58 100644
--- a/adapters/aceex/aceextest/exemplary/video-web.json
+++ b/adapters/aceex/aceextest/exemplary/video-web.json
@@ -92,7 +92,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/supplemental/empty-seatbid-array.json b/adapters/aceex/aceextest/supplemental/empty-seatbid-array.json
index e53e6252135..dc0ac9be496 100644
--- a/adapters/aceex/aceextest/supplemental/empty-seatbid-array.json
+++ b/adapters/aceex/aceextest/supplemental/empty-seatbid-array.json
@@ -104,7 +104,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/supplemental/invalid-response.json b/adapters/aceex/aceextest/supplemental/invalid-response.json
index c1d62068089..ec96f10a2ce 100644
--- a/adapters/aceex/aceextest/supplemental/invalid-response.json
+++ b/adapters/aceex/aceextest/supplemental/invalid-response.json
@@ -95,7 +95,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/aceex/aceextest/supplemental/status-code-bad-request.json b/adapters/aceex/aceextest/supplemental/status-code-bad-request.json
index 553a9264a10..4af8bb55792 100644
--- a/adapters/aceex/aceextest/supplemental/status-code-bad-request.json
+++ b/adapters/aceex/aceextest/supplemental/status-code-bad-request.json
@@ -76,7 +76,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 400
diff --git a/adapters/aceex/aceextest/supplemental/status-code-no-content.json b/adapters/aceex/aceextest/supplemental/status-code-no-content.json
index c669c3ce450..c907f8615b6 100644
--- a/adapters/aceex/aceextest/supplemental/status-code-no-content.json
+++ b/adapters/aceex/aceextest/supplemental/status-code-no-content.json
@@ -57,7 +57,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/aceex/aceextest/supplemental/status-code-other-error.json b/adapters/aceex/aceextest/supplemental/status-code-other-error.json
index 18892fe5e71..0c05ae9bc9f 100644
--- a/adapters/aceex/aceextest/supplemental/status-code-other-error.json
+++ b/adapters/aceex/aceextest/supplemental/status-code-other-error.json
@@ -62,7 +62,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 306
diff --git a/adapters/aceex/aceextest/supplemental/status-code-service-unavailable.json b/adapters/aceex/aceextest/supplemental/status-code-service-unavailable.json
index 9c244ce36d5..4f3071b610d 100644
--- a/adapters/aceex/aceextest/supplemental/status-code-service-unavailable.json
+++ b/adapters/aceex/aceextest/supplemental/status-code-service-unavailable.json
@@ -62,7 +62,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 503
diff --git a/adapters/aceex/params_test.go b/adapters/aceex/params_test.go
index 220adb23379..c09e2683073 100644
--- a/adapters/aceex/params_test.go
+++ b/adapters/aceex/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
var validParams = []string{
diff --git a/adapters/acuityads/acuityads.go b/adapters/acuityads/acuityads.go
index 4370beb72d1..e05ded95e80 100644
--- a/adapters/acuityads/acuityads.go
+++ b/adapters/acuityads/acuityads.go
@@ -6,12 +6,13 @@ import (
"net/http"
"text/template"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/macros"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type AcuityAdsAdapter struct {
@@ -84,18 +85,19 @@ func (a *AcuityAdsAdapter) MakeRequests(
Body: reqJSON,
Uri: url,
Headers: getHeaders(openRTBRequest),
+ ImpIDs: openrtb_ext.GetImpIDs(openRTBRequest.Imp),
}}, nil
}
func (a *AcuityAdsAdapter) getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtAcuityAds, error) {
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, &errortypes.BadInput{
Message: "ext.bidder not provided",
}
}
var acuityAdsExt openrtb_ext.ExtAcuityAds
- if err := json.Unmarshal(bidderExt.Bidder, &acuityAdsExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &acuityAdsExt); err != nil {
return nil, &errortypes.BadInput{
Message: "ext.bidder not provided",
}
@@ -154,7 +156,7 @@ func (a *AcuityAdsAdapter) MakeBids(
responseBody := bidderRawResponse.Body
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(responseBody, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(responseBody, &bidResp); err != nil {
return nil, []error{&errortypes.BadServerResponse{
Message: "Bad Server Response",
}}
diff --git a/adapters/acuityads/acuityads_test.go b/adapters/acuityads/acuityads_test.go
index ea9d4f24352..b19abd3f7d9 100644
--- a/adapters/acuityads/acuityads_test.go
+++ b/adapters/acuityads/acuityads_test.go
@@ -3,9 +3,9 @@ package acuityads
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
diff --git a/adapters/acuityads/acuityadstest/exemplary/banner-app.json b/adapters/acuityads/acuityadstest/exemplary/banner-app.json
index 526f1ea69ac..2cf1e4849e8 100644
--- a/adapters/acuityads/acuityadstest/exemplary/banner-app.json
+++ b/adapters/acuityads/acuityadstest/exemplary/banner-app.json
@@ -95,7 +95,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/exemplary/banner-web.json b/adapters/acuityads/acuityadstest/exemplary/banner-web.json
index f4616bc4030..9968ce3fe6b 100644
--- a/adapters/acuityads/acuityadstest/exemplary/banner-web.json
+++ b/adapters/acuityads/acuityadstest/exemplary/banner-web.json
@@ -83,7 +83,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/exemplary/native-app.json b/adapters/acuityads/acuityadstest/exemplary/native-app.json
index f10a0a9af4d..6022d6487f8 100644
--- a/adapters/acuityads/acuityadstest/exemplary/native-app.json
+++ b/adapters/acuityads/acuityadstest/exemplary/native-app.json
@@ -95,7 +95,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/exemplary/native-web.json b/adapters/acuityads/acuityadstest/exemplary/native-web.json
index 96b3ca06aec..a9333bc667f 100644
--- a/adapters/acuityads/acuityadstest/exemplary/native-web.json
+++ b/adapters/acuityads/acuityadstest/exemplary/native-web.json
@@ -83,7 +83,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/exemplary/video-app.json b/adapters/acuityads/acuityadstest/exemplary/video-app.json
index 4130602db47..4e51426b670 100644
--- a/adapters/acuityads/acuityadstest/exemplary/video-app.json
+++ b/adapters/acuityads/acuityadstest/exemplary/video-app.json
@@ -105,7 +105,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/exemplary/video-web.json b/adapters/acuityads/acuityadstest/exemplary/video-web.json
index 2efeffec320..fad814fdee9 100644
--- a/adapters/acuityads/acuityadstest/exemplary/video-web.json
+++ b/adapters/acuityads/acuityadstest/exemplary/video-web.json
@@ -93,7 +93,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/supplemental/empty-seatbid-array.json b/adapters/acuityads/acuityadstest/supplemental/empty-seatbid-array.json
index b822421ad4f..d1af6aac4b1 100644
--- a/adapters/acuityads/acuityadstest/supplemental/empty-seatbid-array.json
+++ b/adapters/acuityads/acuityadstest/supplemental/empty-seatbid-array.json
@@ -105,7 +105,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/supplemental/invalid-response.json b/adapters/acuityads/acuityadstest/supplemental/invalid-response.json
index 16ba7ada294..129dca5112e 100644
--- a/adapters/acuityads/acuityadstest/supplemental/invalid-response.json
+++ b/adapters/acuityads/acuityadstest/supplemental/invalid-response.json
@@ -96,7 +96,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/acuityads/acuityadstest/supplemental/status-code-bad-request.json b/adapters/acuityads/acuityadstest/supplemental/status-code-bad-request.json
index 87b72b07f68..391df714b9e 100644
--- a/adapters/acuityads/acuityadstest/supplemental/status-code-bad-request.json
+++ b/adapters/acuityads/acuityadstest/supplemental/status-code-bad-request.json
@@ -77,7 +77,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 400
diff --git a/adapters/acuityads/acuityadstest/supplemental/status-code-no-content.json b/adapters/acuityads/acuityadstest/supplemental/status-code-no-content.json
index 130710db361..0d4fe2b20e8 100644
--- a/adapters/acuityads/acuityadstest/supplemental/status-code-no-content.json
+++ b/adapters/acuityads/acuityadstest/supplemental/status-code-no-content.json
@@ -58,7 +58,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/acuityads/acuityadstest/supplemental/status-code-other-error.json b/adapters/acuityads/acuityadstest/supplemental/status-code-other-error.json
index 52042483b2c..78c2d39f3a4 100644
--- a/adapters/acuityads/acuityadstest/supplemental/status-code-other-error.json
+++ b/adapters/acuityads/acuityadstest/supplemental/status-code-other-error.json
@@ -63,7 +63,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 306
diff --git a/adapters/acuityads/acuityadstest/supplemental/status-code-service-unavailable.json b/adapters/acuityads/acuityadstest/supplemental/status-code-service-unavailable.json
index 634b07cab33..45faf7a12fe 100644
--- a/adapters/acuityads/acuityadstest/supplemental/status-code-service-unavailable.json
+++ b/adapters/acuityads/acuityadstest/supplemental/status-code-service-unavailable.json
@@ -63,7 +63,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 503
diff --git a/adapters/acuityads/params_test.go b/adapters/acuityads/params_test.go
index 892fe9a646d..756dda3ea1e 100644
--- a/adapters/acuityads/params_test.go
+++ b/adapters/acuityads/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
var validParams = []string{
diff --git a/adapters/adapterstest/adapter_test_util.go b/adapters/adapterstest/adapter_test_util.go
index 46527356fe2..d58437b8fd8 100644
--- a/adapters/adapterstest/adapter_test_util.go
+++ b/adapters/adapterstest/adapter_test_util.go
@@ -8,7 +8,7 @@ import (
"net/http"
- "github.com/prebid/openrtb/v19/openrtb2"
+ "github.com/prebid/openrtb/v20/openrtb2"
)
// OrtbMockService Represents a scaffolded OpenRTB service.
diff --git a/adapters/adapterstest/test_json.go b/adapters/adapterstest/test_json.go
index 39b1e945f7d..c2124abfcad 100644
--- a/adapters/adapterstest/test_json.go
+++ b/adapters/adapterstest/test_json.go
@@ -8,13 +8,16 @@ import (
"os"
"path/filepath"
"regexp"
+ "strings"
"testing"
+ "github.com/google/go-cmp/cmp"
+ "github.com/google/go-cmp/cmp/cmpopts"
"github.com/mitchellh/copystructure"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/currency"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/currency"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
"github.com/yudai/gojsondiff"
"github.com/yudai/gojsondiff/formatter"
@@ -200,6 +203,7 @@ type httpRequest struct {
Body json.RawMessage `json:"body"`
Uri string `json:"uri"`
Headers http.Header `json:"headers"`
+ ImpIDs []string `json:"impIDs"`
}
type httpResponse struct {
@@ -223,9 +227,10 @@ type expectedBidResponse struct {
}
type expectedBid struct {
- Bid json.RawMessage `json:"bid"`
- Type string `json:"type"`
- Seat string `json:"seat"`
+ Bid json.RawMessage `json:"bid"`
+ Type string `json:"type"`
+ Seat string `json:"seat"`
+ Video json.RawMessage `json:"video,omitempty"`
}
// ---------------------------------------
@@ -269,6 +274,10 @@ func assertErrorList(t *testing.T, description string, actual []error, expected
if matched, _ := regexp.MatchString(expected[i].Value, actual[i].Error()); !matched {
t.Errorf(`%s error[%d] had wrong message. Expected match with regex "%s", got "%s"`, description, i, expected[i].Value, actual[i].Error())
}
+ } else if expected[i].Comparison == "startswith" {
+ if !strings.HasPrefix(actual[i].Error(), expected[i].Value) {
+ t.Errorf(`%s error[%d] had wrong message. Expected to start with "%s", got "%s"`, description, i, expected[i].Value, actual[i].Error())
+ }
} else {
t.Fatalf(`invalid comparison type "%s"`, expected[i].Comparison)
}
@@ -318,6 +327,15 @@ func diffHttpRequests(description string, actual *adapters.RequestData, expected
return err
}
}
+
+ if len(expected.ImpIDs) < 1 {
+ return fmt.Errorf(`expected.ImpIDs must contain at least one imp ID`)
+ }
+
+ opt := cmpopts.SortSlices(func(a, b string) bool { return a < b })
+ if !cmp.Equal(expected.ImpIDs, actual.ImpIDs, opt) {
+ return fmt.Errorf(`%s actual.ImpIDs "%q" do not match expected "%q"`, description, actual.ImpIDs, expected.ImpIDs)
+ }
return diffJson(description, actual.Body, expected.Body)
}
@@ -330,6 +348,9 @@ func diffBids(t *testing.T, description string, actual *adapters.TypedBid, expec
assert.Equal(t, string(expected.Seat), string(actual.Seat), fmt.Sprintf(`%s.seat "%s" does not match expected "%s."`, description, string(actual.Seat), string(expected.Seat)))
assert.Equal(t, string(expected.Type), string(actual.BidType), fmt.Sprintf(`%s.type "%s" does not match expected "%s."`, description, string(actual.BidType), string(expected.Type)))
assert.NoError(t, diffOrtbBids(fmt.Sprintf("%s.bid", description), actual.Bid, expected.Bid))
+ if expected.Video != nil {
+ assert.NoError(t, diffBidVideo(fmt.Sprintf("%s.video", description), actual.BidVideo, expected.Video))
+ }
}
// diffOrtbBids compares the actual Bid made by the adapter to the expectation from the JSON file.
@@ -346,6 +367,15 @@ func diffOrtbBids(description string, actual *openrtb2.Bid, expected json.RawMes
return diffJson(description, actualJson, expected)
}
+func diffBidVideo(description string, actual *openrtb_ext.ExtBidPrebidVideo, expected json.RawMessage) error {
+ actualJson, err := json.Marshal(actual)
+ if err != nil {
+ return fmt.Errorf("%s failed to marshal actual Bid Video into JSON. %v", description, err)
+ }
+
+ return diffJson(description, actualJson, []byte(expected))
+}
+
// diffJson compares two JSON byte arrays for structural equality. It will produce an error if either
// byte array is not actually JSON.
func diffJson(description string, actual []byte, expected []byte) error {
diff --git a/adapters/adelement/adelement.go b/adapters/adelement/adelement.go
new file mode 100644
index 00000000000..11b79ad37b7
--- /dev/null
+++ b/adapters/adelement/adelement.go
@@ -0,0 +1,141 @@
+package adelement
+
+import (
+ "encoding/json"
+ "fmt"
+ "text/template"
+
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
+)
+
+type adapter struct {
+ endpoint *template.Template
+}
+
+// Builder builds a new instance of the Adelement adapter for the given bidder with the given config.
+func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
+ template, err := template.New("endpointTemplate").Parse(config.Endpoint)
+ if err != nil {
+ return nil, fmt.Errorf("unable to parse endpoint url template: %v", err)
+ }
+
+ bidder := &adapter{
+ endpoint: template,
+ }
+ return bidder, nil
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+ adelementExt, err := getImpressionExt(&request.Imp[0])
+ if err != nil {
+ return nil, []error{err}
+ }
+
+ url, err := a.buildEndpointURL(adelementExt)
+ if err != nil {
+ return nil, []error{err}
+ }
+
+ requestJSON, err := json.Marshal(request)
+ if err != nil {
+ return nil, []error{err}
+ }
+
+ requestData := &adapters.RequestData{
+ Method: "POST",
+ Uri: url,
+ Body: requestJSON,
+ ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
+ }
+
+ return []*adapters.RequestData{requestData}, nil
+}
+
+func getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtAdelement, error) {
+ var bidderExt adapters.ExtImpBidder
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ return nil, &errortypes.BadInput{
+ Message: "ext.bidder not provided",
+ }
+ }
+ var adelementExt openrtb_ext.ExtAdelement
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adelementExt); err != nil {
+ return nil, &errortypes.BadInput{
+ Message: "ext.bidder not provided",
+ }
+ }
+ imp.Ext = nil
+ return &adelementExt, nil
+}
+
+func (a *adapter) buildEndpointURL(params *openrtb_ext.ExtAdelement) (string, error) {
+ endpointParams := macros.EndpointTemplateParams{SupplyId: params.SupplyId}
+ return macros.ResolveMacros(a.endpoint, endpointParams)
+}
+
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+ if adapters.IsResponseStatusCodeNoContent(responseData) {
+ return nil, nil
+ }
+
+ if err := adapters.CheckResponseStatusCodeForErrors(responseData); err != nil {
+ return nil, []error{err}
+ }
+
+ var response openrtb2.BidResponse
+ if err := jsonutil.Unmarshal(responseData.Body, &response); err != nil {
+ return nil, []error{&errortypes.BadServerResponse{
+ Message: "Bad Server Response",
+ }}
+ }
+
+ if len(response.SeatBid) == 0 {
+ return nil, []error{&errortypes.BadServerResponse{
+ Message: "Empty SeatBid array",
+ }}
+ }
+
+ var bidErrs []error
+ bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
+ bidResponse.Currency = response.Cur
+ for _, seatBid := range response.SeatBid {
+ for i := range seatBid.Bid {
+ bid := seatBid.Bid[i]
+ bidType, err := getBidType(bid)
+ if err != nil {
+ // could not determinate media type, append an error and continue with the next bid.
+ bidErrs = append(bidErrs, err)
+ continue
+ }
+ bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
+ Bid: &bid,
+ BidType: bidType,
+ })
+ }
+ }
+ return bidResponse, bidErrs
+}
+
+func getBidType(bid openrtb2.Bid) (openrtb_ext.BidType, error) {
+ // determinate media type by bid response field mtype
+ switch bid.MType {
+ case openrtb2.MarkupBanner:
+ return openrtb_ext.BidTypeBanner, nil
+ case openrtb2.MarkupVideo:
+ return openrtb_ext.BidTypeVideo, nil
+ case openrtb2.MarkupAudio:
+ return openrtb_ext.BidTypeAudio, nil
+ case openrtb2.MarkupNative:
+ return openrtb_ext.BidTypeNative, nil
+ }
+
+ return "", &errortypes.BadInput{
+ Message: fmt.Sprintf("Could not define media type for impression: %s", bid.ImpID),
+ }
+}
diff --git a/adapters/adelement/adelement_test.go b/adapters/adelement/adelement_test.go
new file mode 100644
index 00000000000..2cfa599f803
--- /dev/null
+++ b/adapters/adelement/adelement_test.go
@@ -0,0 +1,28 @@
+package adelement
+
+import (
+ "testing"
+
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestJsonSamples(t *testing.T) {
+ bidder, buildErr := Builder(openrtb_ext.BidderAdelement, config.Adapter{
+ Endpoint: "http://test.adelement.com/openrtb2/auction?supply_id={{.SupplyId}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 196})
+
+ if buildErr != nil {
+ t.Fatalf("Builder returned unexpected error %v", buildErr)
+ }
+
+ adapterstest.RunJSONBidderTest(t, "adelementtest", bidder)
+}
+
+func TestEndpointTemplateMalformed(t *testing.T) {
+ _, buildErr := Builder(openrtb_ext.BidderAdelement, config.Adapter{
+ Endpoint: "{{Malformed}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 196})
+
+ assert.Error(t, buildErr)
+}
diff --git a/adapters/adelement/adelementtest/exemplary/audio-app.json b/adapters/adelement/adelementtest/exemplary/audio-app.json
new file mode 100644
index 00000000000..2e67d460680
--- /dev/null
+++ b/adapters/adelement/adelementtest/exemplary/audio-app.json
@@ -0,0 +1,91 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "app": {
+ "bundle": "com.prebid"
+ },
+ "device": {
+ "ifa":"ec943cb9-61ec-460f-a925-6489c3fcc4e3"
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "audio": {
+ "mimes": ["audio/mp4"],
+ "protocols": [9,10]
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "test-request-id",
+ "app": {
+ "bundle": "com.prebid"
+ },
+ "device": {
+ "ifa":"ec943cb9-61ec-460f-a925-6489c3fcc4e3"
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "audio": {
+ "mimes": ["audio/mp4"],
+ "protocols": [9,10]
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id",
+ "seatbid": [
+ {
+ "seat": "adelement",
+ "bid": [{
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id",
+ "price": 0.500000,
+ "adm": "some-test-ad",
+ "crid": "test-crid",
+ "mtype": 3
+ }]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id",
+ "price": 0.5,
+ "adm": "some-test-ad",
+ "crid": "test-crid",
+ "mtype": 3
+ },
+ "type": "audio"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/adelement/adelementtest/exemplary/audio-web.json b/adapters/adelement/adelementtest/exemplary/audio-web.json
new file mode 100644
index 00000000000..7bb39f3cb06
--- /dev/null
+++ b/adapters/adelement/adelementtest/exemplary/audio-web.json
@@ -0,0 +1,91 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "site": {
+ "page": "prebid.org"
+ },
+ "user": {
+ "buyeruid": "be5e209ad46927520000000000000000"
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "audio": {
+ "mimes": ["audio/mp4"],
+ "protocols": [9,10]
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "test-request-id",
+ "site": {
+ "page": "prebid.org"
+ },
+ "user": {
+ "buyeruid": "be5e209ad46927520000000000000000"
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "audio": {
+ "mimes": ["audio/mp4"],
+ "protocols": [9,10]
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id",
+ "seatbid": [
+ {
+ "seat": "adelement",
+ "bid": [{
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id",
+ "price": 0.500000,
+ "adm": "some-test-ad",
+ "crid": "test-crid",
+ "mtype": 3
+ }]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id",
+ "price": 0.5,
+ "adm": "some-test-ad",
+ "crid": "test-crid",
+ "mtype": 3
+ },
+ "type": "audio"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/adelement/adelementtest/exemplary/banner-app.json b/adapters/adelement/adelementtest/exemplary/banner-app.json
new file mode 100644
index 00000000000..c714ca7416e
--- /dev/null
+++ b/adapters/adelement/adelementtest/exemplary/banner-app.json
@@ -0,0 +1,140 @@
+{
+ "mockBidRequest": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "tmax": 1000,
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "app": {
+ "publisher": {
+ "id": "123456789"
+ },
+ "cat": [
+ "IAB22-1"
+ ],
+ "bundle": "com.app.awesome",
+ "name": "Awesome App",
+ "domain": "awesomeapp.com",
+ "id": "123456789"
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "banner": {
+ "w": 320,
+ "h": 50
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "banner": {
+ "w": 320,
+ "h": 50
+ },
+ "tagid": "ogTAGID"
+ }
+ ],
+ "app": {
+ "id": "123456789",
+ "name": "Awesome App",
+ "bundle": "com.app.awesome",
+ "domain": "awesomeapp.com",
+ "cat": [
+ "IAB22-1"
+ ],
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "tmax": 1000
+ },
+ "impIDs": ["some-impression-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "awesome-resp-id",
+ "seatbid": [
+ {
+ "bid": [
+ {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "1",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "adomain": [
+ "awesome.com"
+ ],
+ "crid": "20",
+ "w": 320,
+ "h": 50,
+ "mtype": 1
+ }
+ ],
+ "seat": "adelement"
+ }
+ ],
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "adelement": 154
+ },
+ "tmaxrequest": 1000
+ }
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids": [
+ {
+ "bid": {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "1",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "adomain": [
+ "awesome.com"
+ ],
+ "crid": "20",
+ "w": 320,
+ "h": 50,
+ "mtype": 1
+ },
+ "type": "banner"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/adelement/adelementtest/exemplary/banner-web.json b/adapters/adelement/adelementtest/exemplary/banner-web.json
new file mode 100644
index 00000000000..a1706cbc323
--- /dev/null
+++ b/adapters/adelement/adelementtest/exemplary/banner-web.json
@@ -0,0 +1,128 @@
+{
+ "mockBidRequest": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "tmax": 1000,
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "site": {
+ "page": "test.com",
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "banner": {
+ "w":320,
+ "h":50
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "banner": {
+ "w":320,
+ "h":50
+ }
+ }
+ ],
+ "site": {
+ "page": "test.com",
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "tmax": 1000
+ },
+ "impIDs": ["some-impression-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "awesome-resp-id",
+ "seatbid": [
+ {
+ "bid": [
+ {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "1",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "adomain": [
+ "awesome.com"
+ ],
+ "crid": "20",
+ "w": 320,
+ "h": 50,
+ "mtype": 1
+ }
+ ],
+ "seat": "adelement"
+ }
+ ],
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "adelement": 154
+ },
+ "tmaxrequest": 1000
+ }
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids":[
+ {
+ "bid": {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "1",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "crid": "20",
+ "adomain": [
+ "awesome.com"
+ ],
+ "w": 320,
+ "h": 50,
+ "mtype": 1
+ },
+ "type": "banner"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/bizzclick/bizzclicktest/exemplary/native-app.json b/adapters/adelement/adelementtest/exemplary/native-app.json
similarity index 83%
rename from adapters/bizzclick/bizzclicktest/exemplary/native-app.json
rename to adapters/adelement/adelementtest/exemplary/native-app.json
index 764f6006049..9b957456e6c 100644
--- a/adapters/bizzclick/bizzclicktest/exemplary/native-app.json
+++ b/adapters/adelement/adelementtest/exemplary/native-app.json
@@ -33,8 +33,7 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "supply_id": "1"
}
}
}
@@ -43,24 +42,7 @@
"httpCalls": [
{
"expectedRequest": {
- "headers": {
- "Content-Type": [
- "application/json;charset=utf-8"
- ],
- "Accept": [
- "application/json"
- ],
- "X-Openrtb-Version": [
- "2.5"
- ],
- "User-Agent": [
- "test-user-agent"
- ],
- "X-Forwarded-For": [
- "123.123.123.123"
- ]
- },
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"device": {
@@ -95,7 +77,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 200,
@@ -112,14 +95,20 @@
"adomain": [
"awesome.com"
],
- "crid": "20"
+ "crid": "20",
+ "mtype": 4
}
],
- "type": "native",
- "seat": "bizzclick"
+ "seat": "adelement"
}
],
- "cur": "USD"
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "adelement": 154
+ },
+ "tmaxrequest": 1000
+ }
}
}
}
@@ -136,7 +125,8 @@
"crid": "20",
"adomain": [
"awesome.com"
- ]
+ ],
+ "mtype": 4
},
"type": "native"
}
diff --git a/adapters/bizzclick/bizzclicktest/exemplary/native-web.json b/adapters/adelement/adelementtest/exemplary/native-web.json
similarity index 82%
rename from adapters/bizzclick/bizzclicktest/exemplary/native-web.json
rename to adapters/adelement/adelementtest/exemplary/native-web.json
index 04a33e6f6b0..92e4eb9aa46 100644
--- a/adapters/bizzclick/bizzclicktest/exemplary/native-web.json
+++ b/adapters/adelement/adelementtest/exemplary/native-web.json
@@ -27,8 +27,8 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "host": "ep1",
+ "supply_id": "1"
}
}
}
@@ -37,24 +37,7 @@
"httpCalls": [
{
"expectedRequest": {
- "headers": {
- "Content-Type": [
- "application/json;charset=utf-8"
- ],
- "Accept": [
- "application/json"
- ],
- "X-Openrtb-Version": [
- "2.5"
- ],
- "User-Agent": [
- "test-user-agent"
- ],
- "X-Forwarded-For": [
- "2607:fb90:f27:4512:d800:cb23:a603:e245"
- ]
- },
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"device": {
@@ -83,7 +66,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 200,
@@ -100,13 +84,20 @@
"adomain": [
"awesome.com"
],
- "crid": "20"
+ "crid": "20",
+ "mtype": 4
}
],
- "seat": "bizzclick"
+ "seat": "acuityads"
}
],
- "cur": "USD"
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "acuityads": 154
+ },
+ "tmaxrequest": 1000
+ }
}
}
}
@@ -123,7 +114,8 @@
"crid": "20",
"adomain": [
"awesome.com"
- ]
+ ],
+ "mtype": 4
},
"type": "native"
}
diff --git a/adapters/adelement/adelementtest/exemplary/video-app.json b/adapters/adelement/adelementtest/exemplary/video-app.json
new file mode 100644
index 00000000000..700f74341ff
--- /dev/null
+++ b/adapters/adelement/adelementtest/exemplary/video-app.json
@@ -0,0 +1,150 @@
+{
+ "mockBidRequest": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "tmax": 1000,
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "app": {
+ "publisher": {
+ "id": "123456789"
+ },
+ "cat": [
+ "IAB22-1"
+ ],
+ "bundle": "com.app.awesome",
+ "name": "Awesome App",
+ "domain": "awesomeapp.com",
+ "id": "123456789"
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "video": {
+ "mimes": [
+ "video/mp4"
+ ],
+ "w": 640,
+ "h": 480,
+ "minduration": 120,
+ "maxduration": 150
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "video": {
+ "mimes": [
+ "video/mp4"
+ ],
+ "minduration": 120,
+ "maxduration": 150,
+ "w": 640,
+ "h": 480
+ },
+ "tagid": "ogTAGID"
+ }
+ ],
+ "app": {
+ "id": "123456789",
+ "name": "Awesome App",
+ "bundle": "com.app.awesome",
+ "domain": "awesomeapp.com",
+ "cat": [
+ "IAB22-1"
+ ],
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "tmax": 1000
+ },
+ "impIDs": ["some-impression-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "awesome-resp-id",
+ "seatbid": [
+ {
+ "bid": [
+ {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "some-impression-id",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "adomain": [
+ "awesome.com"
+ ],
+ "crid": "20",
+ "w": 1280,
+ "h": 720,
+ "mtype": 2
+ }
+ ],
+ "seat": "adelement"
+ }
+ ],
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "adelement": 154
+ },
+ "tmaxrequest": 1000
+ }
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids":[
+ {
+ "bid": {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "some-impression-id",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "crid": "20",
+ "adomain": [
+ "awesome.com"
+ ],
+ "w": 1280,
+ "h": 720,
+ "mtype": 2
+ },
+ "type": "video"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/adelement/adelementtest/exemplary/video-web.json b/adapters/adelement/adelementtest/exemplary/video-web.json
new file mode 100644
index 00000000000..0351a7ebcd2
--- /dev/null
+++ b/adapters/adelement/adelementtest/exemplary/video-web.json
@@ -0,0 +1,148 @@
+{
+ "mockBidRequest": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "tmax": 1000,
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "site": {
+ "page": "test.com",
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "video": {
+ "mimes": [
+ "video/mp4"
+ ],
+ "w": 640,
+ "h": 480,
+ "minduration": 120,
+ "maxduration": 150
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "video": {
+ "mimes": [
+ "video/mp4"
+ ],
+ "minduration": 120,
+ "maxduration": 150,
+ "w": 640,
+ "h": 480
+ }
+ }
+ ],
+ "site": {
+ "page": "test.com",
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "tmax": 1000
+ },
+ "impIDs": ["some-impression-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "awesome-resp-id",
+ "seatbid": [
+ {
+ "bid": [
+ {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "some-impression-id",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "adomain": [
+ "awesome.com"
+ ],
+ "crid": "20",
+ "w": 1280,
+ "h": 720,
+ "mtype": 2,
+ "ext": {
+ "prebid": {
+ "type": "video"
+ }
+ }
+ }
+ ],
+ "seat": "adelement"
+ }
+ ],
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "adelement": 154
+ },
+ "tmaxrequest": 1000
+ }
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids": [
+ {
+ "bid": {
+ "id": "a3ae1b4e2fc24a4fb45540082e98e161",
+ "impid": "some-impression-id",
+ "price": 3.5,
+ "adm": "awesome-markup",
+ "adomain": [
+ "awesome.com"
+ ],
+ "crid": "20",
+ "w": 1280,
+ "h": 720,
+ "mtype": 2,
+ "ext": {
+ "prebid": {
+ "type": "video"
+ }
+ }
+ },
+ "type":"video"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/adelement/adelementtest/supplemental/empty-seatbid-array.json b/adapters/adelement/adelementtest/supplemental/empty-seatbid-array.json
new file mode 100644
index 00000000000..ff7a2540f87
--- /dev/null
+++ b/adapters/adelement/adelementtest/supplemental/empty-seatbid-array.json
@@ -0,0 +1,120 @@
+{
+ "mockBidRequest": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "tmax": 1000,
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "app": {
+ "publisher": {
+ "id": "123456789"
+ },
+ "cat": [
+ "IAB22-1"
+ ],
+ "bundle": "com.app.awesome",
+ "name": "Awesome App",
+ "domain": "awesomeapp.com",
+ "id": "123456789"
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "tagid": "ogTAGID",
+ "video": {
+ "mimes": [
+ "video/mp4"
+ ],
+ "w": 640,
+ "h": 480,
+ "minduration": 120,
+ "maxduration": 150
+ },
+ "ext": {
+ "bidder": {
+ "supply_id": "1"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
+ "body": {
+ "id": "some-request-id",
+ "device": {
+ "ua": "test-user-agent",
+ "ip": "123.123.123.123",
+ "language": "en",
+ "dnt": 0
+ },
+ "imp": [
+ {
+ "id": "some-impression-id",
+ "video": {
+ "mimes": [
+ "video/mp4"
+ ],
+ "minduration": 120,
+ "maxduration": 150,
+ "w": 640,
+ "h": 480
+ },
+ "tagid": "ogTAGID"
+ }
+ ],
+ "app": {
+ "id": "123456789",
+ "name": "Awesome App",
+ "bundle": "com.app.awesome",
+ "domain": "awesomeapp.com",
+ "cat": [
+ "IAB22-1"
+ ],
+ "publisher": {
+ "id": "123456789"
+ }
+ },
+ "user": {
+ "buyeruid": "awesome-user"
+ },
+ "tmax": 1000
+ },
+ "impIDs": ["some-impression-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "awesome-resp-id",
+ "seatbid": [
+ ],
+ "cur": "USD",
+ "ext": {
+ "responsetimemillis": {
+ "adelement": 154
+ },
+ "tmaxrequest": 1000
+ }
+ }
+ }
+ }
+ ],
+ "mockResponse": {
+ "status": 200,
+ "body": "invalid response"
+ },
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Empty SeatBid array",
+ "comparison": "literal"
+ }
+ ]
+}
diff --git a/adapters/bizzclick/bizzclicktest/supplemental/invalid-bizzclick-ext-object.json b/adapters/adelement/adelementtest/supplemental/invalid-aceex-ext-object.json
similarity index 100%
rename from adapters/bizzclick/bizzclicktest/supplemental/invalid-bizzclick-ext-object.json
rename to adapters/adelement/adelementtest/supplemental/invalid-aceex-ext-object.json
diff --git a/adapters/bizzclick/bizzclicktest/supplemental/invalid-response.json b/adapters/adelement/adelementtest/supplemental/invalid-response.json
similarity index 77%
rename from adapters/bizzclick/bizzclicktest/supplemental/invalid-response.json
rename to adapters/adelement/adelementtest/supplemental/invalid-response.json
index 57f36d3a372..e70dccfdb0f 100644
--- a/adapters/bizzclick/bizzclicktest/supplemental/invalid-response.json
+++ b/adapters/adelement/adelementtest/supplemental/invalid-response.json
@@ -34,8 +34,7 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "supply_id": "1"
}
}
}
@@ -44,24 +43,7 @@
"httpCalls": [{
"expectedRequest": {
- "headers": {
- "Content-Type": [
- "application/json;charset=utf-8"
- ],
- "Accept": [
- "application/json"
- ],
- "X-Openrtb-Version": [
- "2.5"
- ],
- "User-Agent": [
- "test-user-agent"
- ],
- "X-Forwarded-For": [
- "123.123.123.123"
- ]
- },
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"device": {
@@ -96,7 +78,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/bizzclick/bizzclicktest/supplemental/status-code-bad-request.json b/adapters/adelement/adelementtest/supplemental/status-code-bad-request.json
similarity index 87%
rename from adapters/bizzclick/bizzclicktest/supplemental/status-code-bad-request.json
rename to adapters/adelement/adelementtest/supplemental/status-code-bad-request.json
index f0a3b91ae3c..008c17da1d9 100644
--- a/adapters/bizzclick/bizzclicktest/supplemental/status-code-bad-request.json
+++ b/adapters/adelement/adelementtest/supplemental/status-code-bad-request.json
@@ -33,8 +33,7 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "supply_id": "1"
}
}
}
@@ -43,7 +42,7 @@
"httpCalls": [{
"expectedRequest": {
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"imp": [
@@ -77,7 +76,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 400
@@ -86,7 +86,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "Unexpected status code: [ 400 ]",
+ "value": "Unexpected status code: 400. Run with request.debug = 1 for more info",
"comparison": "literal"
}
]
diff --git a/adapters/bizzclick/bizzclicktest/supplemental/status-code-no-content.json b/adapters/adelement/adelementtest/supplemental/status-code-no-content.json
similarity index 87%
rename from adapters/bizzclick/bizzclicktest/supplemental/status-code-no-content.json
rename to adapters/adelement/adelementtest/supplemental/status-code-no-content.json
index 62aecf58c31..eeecb9bef23 100644
--- a/adapters/bizzclick/bizzclicktest/supplemental/status-code-no-content.json
+++ b/adapters/adelement/adelementtest/supplemental/status-code-no-content.json
@@ -23,8 +23,7 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "supply_id": "1"
}
}
}]
@@ -32,7 +31,7 @@
"httpCalls": [{
"expectedRequest": {
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"imp": [{
@@ -58,7 +57,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/bizzclick/bizzclicktest/supplemental/status-code-other-error.json b/adapters/adelement/adelementtest/supplemental/status-code-other-error.json
similarity index 83%
rename from adapters/bizzclick/bizzclicktest/supplemental/status-code-other-error.json
rename to adapters/adelement/adelementtest/supplemental/status-code-other-error.json
index 398f0b67ee0..b142d0c0796 100644
--- a/adapters/bizzclick/bizzclicktest/supplemental/status-code-other-error.json
+++ b/adapters/adelement/adelementtest/supplemental/status-code-other-error.json
@@ -25,8 +25,7 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "supply_id": "1"
}
}
}
@@ -35,7 +34,7 @@
"httpCalls": [{
"expectedRequest": {
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"imp": [
@@ -63,7 +62,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 306
@@ -72,7 +72,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "Unexpected status code: [ 306 ]. Run with request.debug = 1 for more info",
+ "value": "Unexpected status code: 306. Run with request.debug = 1 for more info",
"comparison": "literal"
}
]
diff --git a/adapters/bizzclick/bizzclicktest/supplemental/status-code-service-unavailable.json b/adapters/adelement/adelementtest/supplemental/status-code-service-unavailable.json
similarity index 83%
rename from adapters/bizzclick/bizzclicktest/supplemental/status-code-service-unavailable.json
rename to adapters/adelement/adelementtest/supplemental/status-code-service-unavailable.json
index 733b5f3f83b..545afa63b11 100644
--- a/adapters/bizzclick/bizzclicktest/supplemental/status-code-service-unavailable.json
+++ b/adapters/adelement/adelementtest/supplemental/status-code-service-unavailable.json
@@ -25,8 +25,7 @@
},
"ext": {
"bidder": {
- "accountId": "accountId",
- "placementId": "placementId"
+ "supply_id": "1"
}
}
}
@@ -35,7 +34,7 @@
"httpCalls": [{
"expectedRequest": {
- "uri": "http://us.example.com/bid?rtb_seat_id=placementId&secret_key=accountId",
+ "uri": "http://test.adelement.com/openrtb2/auction?supply_id=1",
"body": {
"id": "some-request-id",
"imp": [
@@ -63,7 +62,8 @@
"buyeruid": "awesome-user"
},
"tmax": 1000
- }
+ },
+ "impIDs": ["some-impression-id"]
},
"mockResponse": {
"status": 503
@@ -72,7 +72,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "Something went wrong, please contact your Account Manager. Status Code: [ 503 ] ",
+ "value": "Unexpected status code: 503. Run with request.debug = 1 for more info",
"comparison": "literal"
}
]
diff --git a/adapters/adf/adf.go b/adapters/adf/adf.go
index 7ff817559cc..08fb9b8bb4a 100644
--- a/adapters/adf/adf.go
+++ b/adapters/adf/adf.go
@@ -5,11 +5,12 @@ import (
"fmt"
"net/http"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type adapter struct {
@@ -36,7 +37,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
for _, imp := range request.Imp {
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
errors = append(errors, &errortypes.BadInput{
Message: err.Error(),
})
@@ -44,7 +45,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
}
var adfImpExt openrtb_ext.ExtImpAdf
- if err := json.Unmarshal(bidderExt.Bidder, &adfImpExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adfImpExt); err != nil {
errors = append(errors, &errortypes.BadInput{
Message: err.Error(),
})
@@ -65,7 +66,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
var err error
if len(request.Ext) > 0 {
- if err = json.Unmarshal(request.Ext, &requestExt); err != nil {
+ if err = jsonutil.Unmarshal(request.Ext, &requestExt); err != nil {
errors = append(errors, err)
}
}
@@ -91,6 +92,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte
Method: "POST",
Uri: a.endpoint,
Body: requestJSON,
+ ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
}
return []*adapters.RequestData{requestData}, errors
@@ -116,7 +118,7 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
}
var response openrtb2.BidResponse
- if err := json.Unmarshal(responseData.Body, &response); err != nil {
+ if err := jsonutil.Unmarshal(responseData.Body, &response); err != nil {
return nil, []error{err}
}
@@ -143,7 +145,7 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) {
if bid.Ext != nil {
var bidExt openrtb_ext.ExtBid
- err := json.Unmarshal(bid.Ext, &bidExt)
+ err := jsonutil.Unmarshal(bid.Ext, &bidExt)
if err == nil && bidExt.Prebid != nil {
return openrtb_ext.ParseBidType(string(bidExt.Prebid.Type))
}
diff --git a/adapters/adf/adf_test.go b/adapters/adf/adf_test.go
index bf8af8d6845..21e8a769c15 100644
--- a/adapters/adf/adf_test.go
+++ b/adapters/adf/adf_test.go
@@ -3,9 +3,9 @@ package adf
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestJsonSamples(t *testing.T) {
diff --git a/adapters/adf/adftest/exemplary/dynamic-tag.json b/adapters/adf/adftest/exemplary/dynamic-tag.json
index be366a24807..9770bc07832 100644
--- a/adapters/adf/adftest/exemplary/dynamic-tag.json
+++ b/adapters/adf/adftest/exemplary/dynamic-tag.json
@@ -88,7 +88,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id","test-imp-id2"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/adf/adftest/exemplary/multi-format.json b/adapters/adf/adftest/exemplary/multi-format.json
index b0e9d98f440..ffea1b185be 100644
--- a/adapters/adf/adftest/exemplary/multi-format.json
+++ b/adapters/adf/adftest/exemplary/multi-format.json
@@ -87,7 +87,8 @@
},
"tagid": "828783"
}]
- }
+ },
+ "impIDs":["test-imp-id-1","test-imp-id-2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/multi-native.json b/adapters/adf/adftest/exemplary/multi-native.json
index 6c9279b7db6..6b9f72b214f 100644
--- a/adapters/adf/adftest/exemplary/multi-native.json
+++ b/adapters/adf/adftest/exemplary/multi-native.json
@@ -55,7 +55,8 @@
},
"tagid": "828783"
}]
- }
+ },
+ "impIDs":["test-imp-id-1","test-imp-id-2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/single-banner-pricetype-gross-extend-ext.json b/adapters/adf/adftest/exemplary/single-banner-pricetype-gross-extend-ext.json
index 0cd03c75bb5..777842d3e08 100644
--- a/adapters/adf/adftest/exemplary/single-banner-pricetype-gross-extend-ext.json
+++ b/adapters/adf/adftest/exemplary/single-banner-pricetype-gross-extend-ext.json
@@ -73,7 +73,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/single-banner-pricetype-gross.json b/adapters/adf/adftest/exemplary/single-banner-pricetype-gross.json
index 2fb7cf24c5a..98781cd1285 100644
--- a/adapters/adf/adftest/exemplary/single-banner-pricetype-gross.json
+++ b/adapters/adf/adftest/exemplary/single-banner-pricetype-gross.json
@@ -63,7 +63,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/single-banner-pricetype-net.json b/adapters/adf/adftest/exemplary/single-banner-pricetype-net.json
index cb4b5f8a1f4..bd716bac1b3 100644
--- a/adapters/adf/adftest/exemplary/single-banner-pricetype-net.json
+++ b/adapters/adf/adftest/exemplary/single-banner-pricetype-net.json
@@ -63,7 +63,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/single-banner.json b/adapters/adf/adftest/exemplary/single-banner.json
index 2fc869024c1..d4017c1e85d 100644
--- a/adapters/adf/adftest/exemplary/single-banner.json
+++ b/adapters/adf/adftest/exemplary/single-banner.json
@@ -56,7 +56,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/single-native.json b/adapters/adf/adftest/exemplary/single-native.json
index 347c4aebcc6..ec3c465727c 100644
--- a/adapters/adf/adftest/exemplary/single-native.json
+++ b/adapters/adf/adftest/exemplary/single-native.json
@@ -52,7 +52,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/single-video.json b/adapters/adf/adftest/exemplary/single-video.json
index 2e8c0f953e2..f6e2eb2441e 100644
--- a/adapters/adf/adftest/exemplary/single-video.json
+++ b/adapters/adf/adftest/exemplary/single-video.json
@@ -56,7 +56,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/two-banners-different-pricetypes-extend-ext.json b/adapters/adf/adftest/exemplary/two-banners-different-pricetypes-extend-ext.json
index 59e380d5f2e..4e524ec1905 100644
--- a/adapters/adf/adftest/exemplary/two-banners-different-pricetypes-extend-ext.json
+++ b/adapters/adf/adftest/exemplary/two-banners-different-pricetypes-extend-ext.json
@@ -102,7 +102,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id","test-imp-id2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/exemplary/two-banners-different-pricetypes.json b/adapters/adf/adftest/exemplary/two-banners-different-pricetypes.json
index 918ef3ca7f3..24c8d98beae 100644
--- a/adapters/adf/adftest/exemplary/two-banners-different-pricetypes.json
+++ b/adapters/adf/adftest/exemplary/two-banners-different-pricetypes.json
@@ -92,7 +92,8 @@
"w": 1920,
"h": 800
}
- }
+ },
+ "impIDs":["test-imp-id","test-imp-id2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/supplemental/bad-request.json b/adapters/adf/adftest/supplemental/bad-request.json
index 7424eae4656..f32f10056f8 100644
--- a/adapters/adf/adftest/supplemental/bad-request.json
+++ b/adapters/adf/adftest/supplemental/bad-request.json
@@ -31,7 +31,8 @@
},
"tagid": "12345"
}]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 400
diff --git a/adapters/adf/adftest/supplemental/empty-response.json b/adapters/adf/adftest/supplemental/empty-response.json
index b2d6eab97fe..96772c03c67 100644
--- a/adapters/adf/adftest/supplemental/empty-response.json
+++ b/adapters/adf/adftest/supplemental/empty-response.json
@@ -31,7 +31,8 @@
},
"tagid": "12345"
}]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json b/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
index 5dab8c36fa2..eb3935851cb 100644
--- a/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
+++ b/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
@@ -48,7 +48,8 @@
},
"tagid": "12345"
}]
- }
+ },
+ "impIDs":["test-imp-id","test-imp-id-2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/supplemental/nobid-response.json b/adapters/adf/adftest/supplemental/nobid-response.json
index 57dd2d5c626..800666615dd 100644
--- a/adapters/adf/adftest/supplemental/nobid-response.json
+++ b/adapters/adf/adftest/supplemental/nobid-response.json
@@ -31,7 +31,8 @@
},
"tagid": "12345"
}]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adf/adftest/supplemental/server-error.json b/adapters/adf/adftest/supplemental/server-error.json
index 15604ad2189..1983498093e 100644
--- a/adapters/adf/adftest/supplemental/server-error.json
+++ b/adapters/adf/adftest/supplemental/server-error.json
@@ -31,7 +31,8 @@
},
"tagid": "12345"
}]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 500,
diff --git a/adapters/adf/adftest/supplemental/unparsable-response.json b/adapters/adf/adftest/supplemental/unparsable-response.json
index 091f05cea22..5a89ff2dd3b 100644
--- a/adapters/adf/adftest/supplemental/unparsable-response.json
+++ b/adapters/adf/adftest/supplemental/unparsable-response.json
@@ -31,7 +31,8 @@
},
"tagid": "12345"
}]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
@@ -42,7 +43,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "json: cannot unmarshal string into Go value of type openrtb2.BidResponse",
+ "value": "expect { or n, but found \"",
"comparison": "literal"
}
]
diff --git a/adapters/adf/params_test.go b/adapters/adf/params_test.go
index 0b05519df3b..9b3fd7b3e31 100644
--- a/adapters/adf/params_test.go
+++ b/adapters/adf/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
// This file actually intends to test static/bidder-params/adf.json
diff --git a/adapters/adgeneration/adgeneration.go b/adapters/adgeneration/adgeneration.go
index a2a10ed51f2..31e27b862a9 100644
--- a/adapters/adgeneration/adgeneration.go
+++ b/adapters/adgeneration/adgeneration.go
@@ -1,7 +1,6 @@
package adgeneration
import (
- "encoding/json"
"errors"
"fmt"
"net/http"
@@ -10,11 +9,12 @@ import (
"strconv"
"strings"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type AdgenerationAdapter struct {
@@ -77,6 +77,7 @@ func (adg *AdgenerationAdapter) MakeRequests(request *openrtb2.BidRequest, reqIn
Uri: bidRequestUri,
Body: nil,
Headers: headers,
+ ImpIDs: []string{request.Imp[index].ID},
}
bidRequestArray = append(bidRequestArray, bidRequest)
}
@@ -148,10 +149,10 @@ func (adg *AdgenerationAdapter) getRawQuery(id string, request *openrtb2.BidRequ
func unmarshalExtImpAdgeneration(imp *openrtb2.Imp) (*openrtb_ext.ExtImpAdgeneration, error) {
var bidderExt adapters.ExtImpBidder
var adgExt openrtb_ext.ExtImpAdgeneration
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, err
}
- if err := json.Unmarshal(bidderExt.Bidder, &adgExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adgExt); err != nil {
return nil, err
}
if adgExt.Id == "" {
@@ -202,7 +203,7 @@ func (adg *AdgenerationAdapter) MakeBids(internalRequest *openrtb2.BidRequest, e
}}
}
var bidResp adgServerResponse
- err := json.Unmarshal(response.Body, &bidResp)
+ err := jsonutil.Unmarshal(response.Body, &bidResp)
if err != nil {
return nil, []error{err}
}
diff --git a/adapters/adgeneration/adgeneration_test.go b/adapters/adgeneration/adgeneration_test.go
index c204fbd320d..e12ed431f04 100644
--- a/adapters/adgeneration/adgeneration_test.go
+++ b/adapters/adgeneration/adgeneration_test.go
@@ -4,11 +4,11 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
@@ -259,6 +259,7 @@ func checkBidResponse(t *testing.T, bidderResponse *adapters.BidderResponse, exp
var expectedCrID string = "Dummy_supership.jp"
var extectedDealID string = "test-deal-id"
+ //nolint: staticcheck // false positive SA5011: possible nil pointer dereference
assert.Equal(t, expectedCurrency, bidderResponse.Currency)
assert.Equal(t, 1, len(bidderResponse.Bids))
assert.Equal(t, expectedID, bidderResponse.Bids[0].Bid.ID)
diff --git a/adapters/adgeneration/adgenerationtest/exemplary/single-banner-android.json b/adapters/adgeneration/adgenerationtest/exemplary/single-banner-android.json
index 487d44692e0..1753abc7127 100644
--- a/adapters/adgeneration/adgenerationtest/exemplary/single-banner-android.json
+++ b/adapters/adgeneration/adgenerationtest/exemplary/single-banner-android.json
@@ -75,7 +75,8 @@
"X-Forwarded-For": [
"0.0.0.0"
]
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse":{
"status": 200,
diff --git a/adapters/adgeneration/adgenerationtest/exemplary/single-banner-ios.json b/adapters/adgeneration/adgenerationtest/exemplary/single-banner-ios.json
index e0ff64c453d..836cfde35c0 100644
--- a/adapters/adgeneration/adgenerationtest/exemplary/single-banner-ios.json
+++ b/adapters/adgeneration/adgenerationtest/exemplary/single-banner-ios.json
@@ -75,7 +75,8 @@
"X-Forwarded-For": [
"0.0.0.0"
]
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse":{
"status": 200,
diff --git a/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json b/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json
index cd68e32cd09..1ad91f8fabf 100644
--- a/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json
+++ b/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json
@@ -73,7 +73,8 @@
"X-Forwarded-For": [
"0.0.0.0"
]
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse":{
"status": 200,
diff --git a/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json b/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json
index 8d1ab442154..8adf7442976 100644
--- a/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json
+++ b/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json
@@ -66,7 +66,8 @@
"User-Agent": [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
]
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json b/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json
index dc7c41d0f6b..c4459aca972 100644
--- a/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json
+++ b/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json
@@ -66,7 +66,8 @@
"User-Agent": [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
]
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse": {
"status": 400,
diff --git a/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json b/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json
index 523806a9f3c..58ed36e5d23 100644
--- a/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json
+++ b/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json
@@ -66,7 +66,8 @@
"User-Agent": [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
]
- }
+ },
+ "impIDs":["some-impression-id"]
},
"mockResponse":{
"status": 200,
diff --git a/adapters/adgeneration/params_test.go b/adapters/adgeneration/params_test.go
index 062d122ac08..bdef4ec1d05 100644
--- a/adapters/adgeneration/params_test.go
+++ b/adapters/adgeneration/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestValidParams(t *testing.T) {
diff --git a/adapters/adhese/adhese.go b/adapters/adhese/adhese.go
index 9c84676c379..181cc661e46 100644
--- a/adapters/adhese/adhese.go
+++ b/adapters/adhese/adhese.go
@@ -10,12 +10,13 @@ import (
"strings"
"text/template"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/macros"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type AdheseAdapter struct {
@@ -32,7 +33,7 @@ func extractTargetParameters(parameters openrtb_ext.ExtImpAdhese) string {
}
var parametersAsString = ""
var targetParsed map[string]interface{}
- err := json.Unmarshal(parameters.Keywords, &targetParsed)
+ err := jsonutil.Unmarshal(parameters.Keywords, &targetParsed)
if err != nil {
return ""
}
@@ -59,7 +60,7 @@ func extractTargetParameters(parameters openrtb_ext.ExtImpAdhese) string {
func extractGdprParameter(request *openrtb2.BidRequest) string {
if request.User != nil {
var extUser openrtb_ext.ExtUser
- if err := json.Unmarshal(request.User.Ext, &extUser); err == nil {
+ if err := jsonutil.Unmarshal(request.User.Ext, &extUser); err == nil {
return "/xt" + extUser.Consent
}
}
@@ -94,13 +95,13 @@ func (a *AdheseAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adap
var imp = &request.Imp[0]
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
errs = append(errs, WrapReqError("Request could not be parsed as ExtImpBidder due to: "+err.Error()))
return nil, errs
}
var params openrtb_ext.ExtImpAdhese
- if err := json.Unmarshal(bidderExt.Bidder, ¶ms); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, ¶ms); err != nil {
errs = append(errs, WrapReqError("Request could not be parsed as ExtImpAdhese due to: "+err.Error()))
return nil, errs
}
@@ -124,6 +125,7 @@ func (a *AdheseAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adap
return []*adapters.RequestData{{
Method: "GET",
Uri: complete_url,
+ ImpIDs: []string{imp.ID},
}}, errs
}
@@ -137,20 +139,23 @@ func (a *AdheseAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalR
var bidResponse openrtb2.BidResponse
var adheseBidResponseArray []AdheseBid
- if err := json.Unmarshal(response.Body, &adheseBidResponseArray); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &adheseBidResponseArray); err != nil {
return nil, []error{err, WrapServerError(fmt.Sprintf("Response %v could not be parsed as generic Adhese bid.", string(response.Body)))}
}
+ if len(adheseBidResponseArray) == 0 {
+ return nil, nil
+ }
var adheseBid = adheseBidResponseArray[0]
if adheseBid.Origin == "JERLICIA" {
var extArray []AdheseExt
var originDataArray []AdheseOriginData
- if err := json.Unmarshal(response.Body, &extArray); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &extArray); err != nil {
return nil, []error{err, WrapServerError(fmt.Sprintf("Response %v could not be parsed to JERLICIA ext.", string(response.Body)))}
}
- if err := json.Unmarshal(response.Body, &originDataArray); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &originDataArray); err != nil {
return nil, []error{err, WrapServerError(fmt.Sprintf("Response %v could not be parsed to JERLICIA origin data.", string(response.Body)))}
}
bidResponse = convertAdheseBid(adheseBid, extArray[0], originDataArray[0])
diff --git a/adapters/adhese/adhese_test.go b/adapters/adhese/adhese_test.go
index d09a29ee9bd..b8abd82a06f 100644
--- a/adapters/adhese/adhese_test.go
+++ b/adapters/adhese/adhese_test.go
@@ -3,9 +3,9 @@ package adhese
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
diff --git a/adapters/adhese/adhesetest/exemplary/banner-internal.json b/adapters/adhese/adhesetest/exemplary/banner-internal.json
index 50efe4a656d..4d9b2d80093 100644
--- a/adapters/adhese/adhesetest/exemplary/banner-internal.json
+++ b/adapters/adhese/adhesetest/exemplary/banner-internal.json
@@ -45,7 +45,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy/xzdum-my"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy/xzdum-my",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adhese/adhesetest/exemplary/banner-market.json b/adapters/adhese/adhesetest/exemplary/banner-market.json
index 340e6d87223..97240c67fda 100644
--- a/adapters/adhese/adhesetest/exemplary/banner-market.json
+++ b/adapters/adhese/adhesetest/exemplary/banner-market.json
@@ -38,7 +38,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy"
+ "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adhese/adhesetest/exemplary/banner-video-internal.json b/adapters/adhese/adhesetest/exemplary/banner-video-internal.json
index bd9203c2509..72182bea90c 100644
--- a/adapters/adhese/adhesetest/exemplary/banner-video-internal.json
+++ b/adapters/adhese/adhesetest/exemplary/banner-video-internal.json
@@ -42,7 +42,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adhese/adhesetest/exemplary/video.json b/adapters/adhese/adhesetest/exemplary/video.json
index 134e3add52d..2c77d7f2229 100644
--- a/adapters/adhese/adhesetest/exemplary/video.json
+++ b/adapters/adhese/adhesetest/exemplary/video.json
@@ -1,6 +1,7 @@
{
"mockBidRequest": {
"imp": [{
+ "id":"test-imp-id",
"ext": {
"bidder": {
"account": "demo",
@@ -20,7 +21,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall",
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adhese/adhesetest/supplemental/req-invalid-empty-imp-ext.json b/adapters/adhese/adhesetest/supplemental/req-invalid-empty-imp-ext.json
index e98823b2914..9169847be35 100644
--- a/adapters/adhese/adhesetest/supplemental/req-invalid-empty-imp-ext.json
+++ b/adapters/adhese/adhesetest/supplemental/req-invalid-empty-imp-ext.json
@@ -31,8 +31,8 @@
"expectedBidResponses": [],
"expectedMakeRequestsErrors": [
{
- "value": "Request could not be parsed as ExtImpAdhese due to: unexpected end of JSON input",
- "comparison": "literal"
+ "value": "Request could not be parsed as ExtImpAdhese due to: expect { or n, but found",
+ "comparison": "startswith"
}
]
}
\ No newline at end of file
diff --git a/adapters/adhese/adhesetest/supplemental/req-invalid-no-imp-ext.json b/adapters/adhese/adhesetest/supplemental/req-invalid-no-imp-ext.json
index bcb891719ae..76f5315c1cb 100644
--- a/adapters/adhese/adhesetest/supplemental/req-invalid-no-imp-ext.json
+++ b/adapters/adhese/adhesetest/supplemental/req-invalid-no-imp-ext.json
@@ -30,8 +30,8 @@
"expectedBidResponses": [],
"expectedMakeRequestsErrors": [
{
- "value": "Request could not be parsed as ExtImpBidder due to: unexpected end of JSON input",
- "comparison": "literal"
+ "value": "Request could not be parsed as ExtImpBidder due to: expect { or n, but found",
+ "comparison": "startswith"
}
]
}
\ No newline at end of file
diff --git a/adapters/adhese/adhesetest/supplemental/res-invalid-height.json b/adapters/adhese/adhesetest/supplemental/res-invalid-height.json
index 1e11df2f4c4..4c7989cb56b 100644
--- a/adapters/adhese/adhesetest/supplemental/res-invalid-height.json
+++ b/adapters/adhese/adhesetest/supplemental/res-invalid-height.json
@@ -38,7 +38,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy"
+ "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
@@ -81,7 +82,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "json: cannot unmarshal number into Go struct field AdheseBid.height of type string",
+ "value": "cannot unmarshal adhese.AdheseBid.Height: expects \" or n, but found 9",
"comparison": "literal"
}, {
"value": "Response (.*\n.*)+ could not be parsed as generic Adhese bid",
diff --git a/adapters/adhese/adhesetest/supplemental/res-invalid-no-body.json b/adapters/adhese/adhesetest/supplemental/res-invalid-no-body.json
index f970476450f..1ec91d9ad0a 100644
--- a/adapters/adhese/adhesetest/supplemental/res-invalid-no-body.json
+++ b/adapters/adhese/adhesetest/supplemental/res-invalid-no-body.json
@@ -42,7 +42,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200
@@ -52,8 +53,8 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "unexpected end of JSON input",
- "comparison": "literal"
+ "value": "decode slice: expect [ or n, but found",
+ "comparison": "startswith"
},{
"value": "Response could not be parsed as generic Adhese bid.",
"comparison": "literal"
diff --git a/adapters/adhese/adhesetest/supplemental/res-invalid-no-origin.json b/adapters/adhese/adhesetest/supplemental/res-invalid-no-origin.json
index 636e30741bb..886849bde46 100644
--- a/adapters/adhese/adhesetest/supplemental/res-invalid-no-origin.json
+++ b/adapters/adhese/adhesetest/supplemental/res-invalid-no-origin.json
@@ -42,7 +42,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adhese/adhesetest/supplemental/res-invalid-price.json b/adapters/adhese/adhesetest/supplemental/res-invalid-price.json
index f23bf0f7cb1..7fcbc298876 100644
--- a/adapters/adhese/adhesetest/supplemental/res-invalid-price.json
+++ b/adapters/adhese/adhesetest/supplemental/res-invalid-price.json
@@ -38,7 +38,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy"
+ "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
@@ -81,7 +82,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "json: cannot unmarshal number into Go struct field CPMValues.*\\.amount of type string",
+ "value": "cannot unmarshal adhese.CPMValues.Amount: expects \" or n, but found 1",
"comparison": "regex"
}, {
"value": "Response (.*\n.*)+ could not be parsed as generic Adhese bid",
diff --git a/adapters/adhese/adhesetest/supplemental/res-invalid-status-not-ok.json b/adapters/adhese/adhesetest/supplemental/res-invalid-status-not-ok.json
index 96f17b15b32..4234986dd68 100644
--- a/adapters/adhese/adhesetest/supplemental/res-invalid-status-not-ok.json
+++ b/adapters/adhese/adhesetest/supplemental/res-invalid-status-not-ok.json
@@ -42,7 +42,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 501,
diff --git a/adapters/adhese/adhesetest/supplemental/res-invalid-width.json b/adapters/adhese/adhesetest/supplemental/res-invalid-width.json
index 77b23d347af..139a5c598a1 100644
--- a/adapters/adhese/adhesetest/supplemental/res-invalid-width.json
+++ b/adapters/adhese/adhesetest/supplemental/res-invalid-width.json
@@ -38,7 +38,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy"
+ "uri": "https://ads-market.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xfdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
@@ -81,7 +82,7 @@
"expectedBidResponses": [],
"expectedMakeBidsErrors": [
{
- "value": "json: cannot unmarshal number into Go struct field AdheseBid.width of type string",
+ "value": "cannot unmarshal adhese.AdheseBid.Width: expects \" or n, but found 7",
"comparison": "literal"
}, {
"value": "Response (.*\n.*)+ could not be parsed as generic Adhese bid",
diff --git a/adapters/adhese/adhesetest/supplemental/res-no_bids_200.json b/adapters/adhese/adhesetest/supplemental/res-no_bids_200.json
new file mode 100644
index 00000000000..f8b0b5f17cd
--- /dev/null
+++ b/adapters/adhese/adhesetest/supplemental/res-no_bids_200.json
@@ -0,0 +1,55 @@
+{
+ "mockBidRequest": {
+ "id": "test-req",
+ "user": {
+ "ext": {
+ "consent" : "dummy"
+ }
+ },
+ "imp": [
+ {
+ "id": "test-req",
+ "banner": {
+ "format": [
+ {
+ "w": 300,
+ "h": 250
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "account": "demo",
+ "location": "_adhese_prebid_demo_",
+ "format": "leaderboard",
+ "targets":
+ {
+ "ci": ["gent", "brussels"],
+ "ag": ["55"],
+ "tl": ["all"]
+ }
+ }
+ }
+ }
+ ],
+ "site": {
+ "id": "test",
+ "publisher": {
+ "id": "123"
+ }
+ }
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": []
+ }
+ }
+ ],
+ "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/adhese/adhesetest/supplemental/res-no_bids.json b/adapters/adhese/adhesetest/supplemental/res-no_bids_204.json
similarity index 91%
rename from adapters/adhese/adhesetest/supplemental/res-no_bids.json
rename to adapters/adhese/adhesetest/supplemental/res-no_bids_204.json
index c9630049f02..e678406a75f 100644
--- a/adapters/adhese/adhesetest/supplemental/res-no_bids.json
+++ b/adapters/adhese/adhesetest/supplemental/res-no_bids_204.json
@@ -42,7 +42,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/adhese/adhesetest/supplemental/res-no_impression_counter.json b/adapters/adhese/adhesetest/supplemental/res-no_impression_counter.json
index 99af5671f4b..20539464aa5 100644
--- a/adapters/adhese/adhesetest/supplemental/res-no_impression_counter.json
+++ b/adapters/adhese/adhesetest/supplemental/res-no_impression_counter.json
@@ -42,7 +42,8 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy"
+ "uri": "https://ads-demo.adhese.com/json/sl_adhese_prebid_demo_-leaderboard/ag55/cigent;brussels/tlall/xtdummy",
+ "impIDs":["test-req"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adhese/params_test.go b/adapters/adhese/params_test.go
index 45024749b2d..b8ca161d57d 100644
--- a/adapters/adhese/params_test.go
+++ b/adapters/adhese/params_test.go
@@ -5,7 +5,7 @@ import (
"fmt"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestValidParams(t *testing.T) {
diff --git a/adapters/adhese/utils.go b/adapters/adhese/utils.go
index 4a6c79c8e94..a6b7d7aae8d 100644
--- a/adapters/adhese/utils.go
+++ b/adapters/adhese/utils.go
@@ -1,6 +1,6 @@
package adhese
-import "github.com/prebid/openrtb/v19/openrtb2"
+import "github.com/prebid/openrtb/v20/openrtb2"
type AdheseOriginData struct {
Priority string `json:"priority"`
diff --git a/adapters/adkernel/adkernel.go b/adapters/adkernel/adkernel.go
index 5fae001d7dd..443da423fc9 100644
--- a/adapters/adkernel/adkernel.go
+++ b/adapters/adkernel/adkernel.go
@@ -5,14 +5,24 @@ import (
"fmt"
"net/http"
"strconv"
+ "strings"
"text/template"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/macros"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
+)
+
+const (
+ mf_suffix = "__mf"
+ mf_suffix_banner = "b" + mf_suffix
+ mf_suffix_video = "v" + mf_suffix
+ mf_suffix_audio = "a" + mf_suffix
+ mf_suffix_native = "n" + mf_suffix
)
type adkernelAdapter struct {
@@ -78,9 +88,6 @@ func validateImpression(imp *openrtb2.Imp, impExt *openrtb_ext.ExtImpAdkernel) e
if impExt.ZoneId < 1 {
return newBadInputError(fmt.Sprintf("Invalid zoneId value: %d. Ignoring imp id=%s", impExt.ZoneId, imp.ID))
}
- if imp.Video == nil && imp.Banner == nil && imp.Native == nil {
- return newBadInputError(fmt.Sprintf("Invalid imp id=%s. Expected imp.banner / imp.video / imp.native", imp.ID))
- }
return nil
}
@@ -90,65 +97,86 @@ func dispatchImpressions(imps []openrtb2.Imp, impsExt []openrtb_ext.ExtImpAdkern
errors := make([]error, 0)
for idx := range imps {
imp := imps[idx]
- err := compatImpression(&imp)
- if err != nil {
- errors = append(errors, err)
- continue
- }
+ imp.Ext = nil
impExt := impsExt[idx]
if res[impExt] == nil {
res[impExt] = make([]openrtb2.Imp, 0)
}
- res[impExt] = append(res[impExt], imp)
+ if isMultiFormatImp(&imp) {
+ splImps := splitMultiFormatImp(&imp)
+ res[impExt] = append(res[impExt], splImps...)
+ } else {
+ res[impExt] = append(res[impExt], imp)
+ }
}
return res, errors
}
-// Alter impression info to comply with adkernel platform requirements
-func compatImpression(imp *openrtb2.Imp) error {
- imp.Ext = nil //do not forward ext to adkernel platform
- if imp.Banner != nil {
- return compatBannerImpression(imp)
- }
+func isMultiFormatImp(imp *openrtb2.Imp) bool {
+ count := 0
if imp.Video != nil {
- return compatVideoImpression(imp)
+ count++
+ }
+ if imp.Audio != nil {
+ count++
+ }
+ if imp.Banner != nil {
+ count++
}
if imp.Native != nil {
- return compatNativeImpression(imp)
+ count++
}
- return newBadInputError("Invalid impression")
+ return count > 1
}
-func compatBannerImpression(imp *openrtb2.Imp) error {
- imp.Audio = nil
- imp.Video = nil
- imp.Native = nil
- return nil
-}
+func splitMultiFormatImp(imp *openrtb2.Imp) []openrtb2.Imp {
+ splitImps := make([]openrtb2.Imp, 0, 4)
+ if imp.Banner != nil {
+ impCopy := *imp
+ impCopy.Video = nil
+ impCopy.Native = nil
+ impCopy.Audio = nil
+ impCopy.ID += mf_suffix_banner
+ splitImps = append(splitImps, impCopy)
+ }
+ if imp.Video != nil {
+ impCopy := *imp
+ impCopy.Banner = nil
+ impCopy.Native = nil
+ impCopy.Audio = nil
+ impCopy.ID += mf_suffix_video
+ splitImps = append(splitImps, impCopy)
+ }
-func compatVideoImpression(imp *openrtb2.Imp) error {
- imp.Banner = nil
- imp.Audio = nil
- imp.Native = nil
- return nil
-}
+ if imp.Native != nil {
+ impCopy := *imp
+ impCopy.Banner = nil
+ impCopy.Video = nil
+ impCopy.Audio = nil
+ impCopy.ID += mf_suffix_native
+ splitImps = append(splitImps, impCopy)
+ }
-func compatNativeImpression(imp *openrtb2.Imp) error {
- imp.Banner = nil
- imp.Audio = nil
- imp.Video = nil
- return nil
+ if imp.Audio != nil {
+ impCopy := *imp
+ impCopy.Banner = nil
+ impCopy.Video = nil
+ impCopy.Native = nil
+ impCopy.ID += mf_suffix_audio
+ splitImps = append(splitImps, impCopy)
+ }
+ return splitImps
}
func getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtImpAdkernel, error) {
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, &errortypes.BadInput{
Message: err.Error(),
}
}
var adkernelExt openrtb_ext.ExtImpAdkernel
- if err := json.Unmarshal(bidderExt.Bidder, &adkernelExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adkernelExt); err != nil {
return nil, &errortypes.BadInput{
Message: err.Error(),
}
@@ -177,7 +205,8 @@ func (adapter *adkernelAdapter) buildAdapterRequest(prebidBidRequest *openrtb2.B
Method: "POST",
Uri: url,
Body: reqJSON,
- Headers: headers}, nil
+ Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(imps)}, nil
}
func createBidRequest(prebidBidRequest *openrtb2.BidRequest, params *openrtb_ext.ExtImpAdkernel, imps []openrtb2.Imp) *openrtb2.BidRequest {
@@ -215,7 +244,7 @@ func (adapter *adkernelAdapter) MakeBids(internalRequest *openrtb2.BidRequest, e
}
}
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{
newBadServerResponseError(fmt.Sprintf("Bad server response: %d", err)),
}
@@ -232,22 +261,38 @@ func (adapter *adkernelAdapter) MakeBids(internalRequest *openrtb2.BidRequest, e
bidResponse.Currency = bidResp.Cur
for i := 0; i < len(seatBid.Bid); i++ {
bid := seatBid.Bid[i]
+ if strings.HasSuffix(bid.ImpID, mf_suffix) {
+ sfxStart := len(bid.ImpID) - len(mf_suffix) - 1
+ bid.ImpID = bid.ImpID[:sfxStart]
+ }
+ bidType, err := getMediaTypeForBid(&bid)
+ if err != nil {
+ return nil, []error{err}
+ }
bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
Bid: &bid,
- BidType: getMediaTypeForImpID(bid.ImpID, internalRequest.Imp),
+ BidType: bidType,
})
}
return bidResponse, nil
}
// getMediaTypeForImp figures out which media type this bid is for
-func getMediaTypeForImpID(impID string, imps []openrtb2.Imp) openrtb_ext.BidType {
- for _, imp := range imps {
- if imp.ID == impID && imp.Banner != nil {
- return openrtb_ext.BidTypeBanner
+func getMediaTypeForBid(bid *openrtb2.Bid) (openrtb_ext.BidType, error) {
+ switch bid.MType {
+ case openrtb2.MarkupBanner:
+ return openrtb_ext.BidTypeBanner, nil
+ case openrtb2.MarkupAudio:
+ return openrtb_ext.BidTypeAudio, nil
+ case openrtb2.MarkupNative:
+ return openrtb_ext.BidTypeNative, nil
+ case openrtb2.MarkupVideo:
+ return openrtb_ext.BidTypeVideo, nil
+ default:
+ return "", &errortypes.BadServerResponse{
+ Message: fmt.Sprintf("Unsupported MType %d", bid.MType),
}
}
- return openrtb_ext.BidTypeVideo
}
func newBadInputError(message string) error {
diff --git a/adapters/adkernel/adkernel_test.go b/adapters/adkernel/adkernel_test.go
index ae35f712400..f874e92d57e 100644
--- a/adapters/adkernel/adkernel_test.go
+++ b/adapters/adkernel/adkernel_test.go
@@ -3,15 +3,15 @@ package adkernel
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
func TestJsonSamples(t *testing.T) {
bidder, buildErr := Builder(openrtb_ext.BidderAdkernel, config.Adapter{
- Endpoint: "https://pbs.adksrv.com/hb?zone={{.ZoneID}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+ Endpoint: "http://pbs.adksrv.com/hb?zone={{.ZoneID}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
if buildErr != nil {
t.Fatalf("Builder returned unexpected error %v", buildErr)
diff --git a/adapters/adkernel/adkerneltest/exemplary/multiformat-impression.json b/adapters/adkernel/adkerneltest/exemplary/multiformat-impression.json
index b8fd88dcdae..de40a0e94a1 100644
--- a/adapters/adkernel/adkerneltest/exemplary/multiformat-impression.json
+++ b/adapters/adkernel/adkerneltest/exemplary/multiformat-impression.json
@@ -14,6 +14,10 @@
"banner" : {
"format": [{"w": 300,"h": 250}]
},
+ "native" : {
+ "request": "{native: \"request\"}",
+ "ver": "1.2"
+ },
"ext": {
"bidder": {
"zoneId": 102,
@@ -36,15 +40,30 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://pbs.adksrv.com/hb?zone=102",
+ "uri": "http://pbs.adksrv.com/hb?zone=102",
"body": {
"id": "0000000000001",
"imp": [
{
- "id": "multi-adunit",
+ "id": "multi-adunitb__mf",
"banner": {
"format": [{"w": 300, "h": 250}]
}
+ },
+ {
+ "id": "multi-adunitv__mf",
+ "video": {
+ "mimes": ["video/mp4"],
+ "w": 640,
+ "h": 480
+ }
+ },
+ {
+ "id": "multi-adunitn__mf",
+ "native" : {
+ "request": "{native: \"request\"}",
+ "ver": "1.2"
+ }
}
],
"app": {
@@ -54,7 +73,8 @@
"user": {
"buyeruid": "A-38327932832"
}
- }
+ },
+ "impIDs":["multi-adunitb__mf", "multi-adunitv__mf", "multi-adunitn__mf"]
},
"mockResponse": {
"status": 200,
@@ -65,12 +85,39 @@
"bid": [
{
"id": "bid02",
- "impid": "multi-adunit",
+ "impid": "multi-adunitb__mf",
"price": 2.25,
"cid": "1001",
"crid": "2002",
"adid": "2002",
"adm": "",
+ "mtype": 1,
+ "adomain": [
+ "tag-example.com"
+ ]
+ },
+ {
+ "id": "bid03",
+ "impid": "multi-adunitn__mf",
+ "price": 1.25,
+ "cid": "601",
+ "crid": "702",
+ "adid": "702",
+ "adm": "",
+ "mtype": 4,
+ "adomain": [
+ "tag-example.com"
+ ]
+ },
+ {
+ "id": "bid04",
+ "impid": "multi-adunita__mf",
+ "price": 1.0,
+ "cid": "161",
+ "crid": "172",
+ "adid": "172",
+ "nurl": "http://adkernel.com/win?f=nurl",
+ "mtype": 3,
"adomain": [
"tag-example.com"
]
@@ -98,9 +145,42 @@
],
"cid": "1001",
"adid": "2002",
- "crid": "2002"
+ "crid": "2002",
+ "mtype": 1
},
"type": "banner"
+ },
+ {
+ "bid": {
+ "id": "bid03",
+ "impid": "multi-adunit",
+ "price": 1.25,
+ "adm": "",
+ "adomain": [
+ "tag-example.com"
+ ],
+ "cid": "601",
+ "crid": "702",
+ "adid": "702",
+ "mtype": 4
+ },
+ "type": "native"
+ },
+ {
+ "bid": {
+ "id": "bid04",
+ "impid": "multi-adunit",
+ "price": 1.0,
+ "nurl": "http://adkernel.com/win?f=nurl",
+ "adomain": [
+ "tag-example.com"
+ ],
+ "cid": "161",
+ "crid": "172",
+ "adid": "172",
+ "mtype": 3
+ },
+ "type": "audio"
}
]
}
diff --git a/adapters/adkernel/adkerneltest/exemplary/single-banner-impression.json b/adapters/adkernel/adkerneltest/exemplary/single-banner-impression.json
index 24f86378fe5..439b60df5c2 100644
--- a/adapters/adkernel/adkerneltest/exemplary/single-banner-impression.json
+++ b/adapters/adkernel/adkerneltest/exemplary/single-banner-impression.json
@@ -30,7 +30,7 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://pbs.adksrv.com/hb?zone=101",
+ "uri": "http://pbs.adksrv.com/hb?zone=101",
"body": {
"id": "0000000000001",
"imp": [
@@ -48,7 +48,8 @@
"buyeruid": "A-38327932832"
},
"cur": ["TYR"]
- }
+ },
+ "impIDs":["adunit-1"]
},
"mockResponse": {
"status": 200,
@@ -64,6 +65,7 @@
"adid": "19005",
"adm": "",
"cat": ["IAB2"],
+ "mtype": 1,
"adomain": ["test.com"],
"h": 250,
"w": 300
@@ -92,7 +94,8 @@
"crid": "19005",
"w": 300,
"h": 250,
- "cat": ["IAB2"]
+ "cat": ["IAB2"],
+ "mtype": 1
},
"type": "banner"
}
diff --git a/adapters/adkernel/adkerneltest/exemplary/single-video-impression.json b/adapters/adkernel/adkerneltest/exemplary/single-video-impression.json
index b13d974616e..f98d1747bce 100644
--- a/adapters/adkernel/adkerneltest/exemplary/single-video-impression.json
+++ b/adapters/adkernel/adkerneltest/exemplary/single-video-impression.json
@@ -33,7 +33,7 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "https://pbs.adksrv.com/hb?zone=102",
+ "uri": "http://pbs.adksrv.com/hb?zone=102",
"body": {
"id": "0000000000001",
"imp": [
@@ -55,7 +55,8 @@
"user": {
"buyeruid": "A-38327932832"
}
- }
+ },
+ "impIDs":["video-adunit-2"]
},
"mockResponse": {
"status": 200,
@@ -75,6 +76,7 @@
"cat": [
"IAB2"
],
+ "mtype": 2,
"adomain": [
"video-example.com"
]
@@ -105,7 +107,8 @@
"crid": "2002",
"cat": [
"IAB2"
- ]
+ ],
+ "mtype": 2
},
"type": "video"
}
diff --git a/adapters/adkernelAdn/adkernelAdn.go b/adapters/adkernelAdn/adkernelAdn.go
index 45e9e41c10c..ffee88250ca 100644
--- a/adapters/adkernelAdn/adkernelAdn.go
+++ b/adapters/adkernelAdn/adkernelAdn.go
@@ -7,12 +7,13 @@ import (
"strconv"
"text/template"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/macros"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type adkernelAdnAdapter struct {
@@ -124,7 +125,7 @@ func compatBannerImpression(imp *openrtb2.Imp) error {
//As banner.w/h are required fields for adkernelAdn platform - take the first format entry
if banner.W == nil && banner.H == nil {
if len(banner.Format) == 0 {
- return newBadInputError(fmt.Sprintf("Expected at least one banner.format entry or explicit w/h"))
+ return newBadInputError("Expected at least one banner.format entry or explicit w/h")
}
format := banner.Format[0]
banner.Format = banner.Format[1:]
@@ -149,13 +150,13 @@ func compatVideoImpression(imp *openrtb2.Imp) error {
func getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtImpAdkernelAdn, error) {
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, &errortypes.BadInput{
Message: err.Error(),
}
}
var adkernelAdnExt openrtb_ext.ExtImpAdkernelAdn
- if err := json.Unmarshal(bidderExt.Bidder, &adkernelAdnExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adkernelAdnExt); err != nil {
return nil, &errortypes.BadInput{
Message: err.Error(),
}
@@ -184,7 +185,8 @@ func (adapter *adkernelAdnAdapter) buildAdapterRequest(prebidBidRequest *openrtb
Method: "POST",
Uri: url,
Body: reqJSON,
- Headers: headers}, nil
+ Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(imps)}, nil
}
func createBidRequest(prebidBidRequest *openrtb2.BidRequest, params *openrtb_ext.ExtImpAdkernelAdn, imps []openrtb2.Imp) *openrtb2.BidRequest {
@@ -225,7 +227,7 @@ func (adapter *adkernelAdnAdapter) MakeBids(internalRequest *openrtb2.BidRequest
}
}
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{
newBadServerResponseError(fmt.Sprintf("Bad server response: %d", err)),
}
diff --git a/adapters/adkernelAdn/adkernelAdn_test.go b/adapters/adkernelAdn/adkernelAdn_test.go
index 651d82be3b6..f99da329403 100644
--- a/adapters/adkernelAdn/adkernelAdn_test.go
+++ b/adapters/adkernelAdn/adkernelAdn_test.go
@@ -3,9 +3,9 @@ package adkernelAdn
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
diff --git a/adapters/adkernelAdn/adkerneladntest/exemplary/multiformat-impression.json b/adapters/adkernelAdn/adkerneladntest/exemplary/multiformat-impression.json
index 2a6db14d540..dc20bfa0df8 100644
--- a/adapters/adkernelAdn/adkerneladntest/exemplary/multiformat-impression.json
+++ b/adapters/adkernelAdn/adkerneladntest/exemplary/multiformat-impression.json
@@ -55,7 +55,8 @@
"user": {
"buyeruid": "A-38327932832"
}
- }
+ },
+ "impIDs":["multi-adunit"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adkernelAdn/adkerneladntest/exemplary/single-banner-impression.json b/adapters/adkernelAdn/adkerneladntest/exemplary/single-banner-impression.json
index 6df3e0f16e3..d05abb04ed2 100644
--- a/adapters/adkernelAdn/adkerneladntest/exemplary/single-banner-impression.json
+++ b/adapters/adkernelAdn/adkerneladntest/exemplary/single-banner-impression.json
@@ -48,7 +48,8 @@
"user": {
"buyeruid": "A-38327932832"
}
- }
+ },
+ "impIDs":["adunit-1"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adkernelAdn/adkerneladntest/exemplary/single-video-impression.json b/adapters/adkernelAdn/adkerneladntest/exemplary/single-video-impression.json
index e60aa06ca1f..d57213630c7 100644
--- a/adapters/adkernelAdn/adkerneladntest/exemplary/single-video-impression.json
+++ b/adapters/adkernelAdn/adkerneladntest/exemplary/single-video-impression.json
@@ -55,7 +55,8 @@
"user": {
"buyeruid": "A-38327932832"
}
- }
+ },
+ "impIDs":["video-adunit-2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adkernelAdn/adkerneladntest/supplemental/204status.json b/adapters/adkernelAdn/adkerneladntest/supplemental/204status.json
index ae71ff41352..3efbaf1d422 100644
--- a/adapters/adkernelAdn/adkerneladntest/supplemental/204status.json
+++ b/adapters/adkernelAdn/adkerneladntest/supplemental/204status.json
@@ -41,7 +41,8 @@
"site": {
"page": "http://example.com/test.html"
}
- }
+ },
+ "impIDs":["adunit-1"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/adkernelAdn/adkerneladntest/supplemental/http-err-status.json b/adapters/adkernelAdn/adkerneladntest/supplemental/http-err-status.json
index 8a25aae0ecd..6ed9013e102 100644
--- a/adapters/adkernelAdn/adkerneladntest/supplemental/http-err-status.json
+++ b/adapters/adkernelAdn/adkerneladntest/supplemental/http-err-status.json
@@ -41,7 +41,8 @@
"site": {
"page": "http://example.com/test.html"
}
- }
+ },
+ "impIDs":["adunit-1"]
},
"mockResponse": {
"status": 404
diff --git a/adapters/adkernelAdn/adkerneladntest/supplemental/two-impressions-two-seatbids.json b/adapters/adkernelAdn/adkerneladntest/supplemental/two-impressions-two-seatbids.json
index 37a5a36d859..e538e33a097 100644
--- a/adapters/adkernelAdn/adkerneladntest/supplemental/two-impressions-two-seatbids.json
+++ b/adapters/adkernelAdn/adkerneladntest/supplemental/two-impressions-two-seatbids.json
@@ -56,7 +56,8 @@
"video": {"mimes": ["video/mp4"]}
}
]
- }
+ },
+ "impIDs":["banner-adunit-1","video-adunit-2"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adkernelAdn/adkerneladntest/supplemental/wrong-imp-ext-1.json b/adapters/adkernelAdn/adkerneladntest/supplemental/wrong-imp-ext-1.json
index 8b2b5837e13..4d5b3228d16 100644
--- a/adapters/adkernelAdn/adkerneladntest/supplemental/wrong-imp-ext-1.json
+++ b/adapters/adkernelAdn/adkerneladntest/supplemental/wrong-imp-ext-1.json
@@ -18,8 +18,8 @@
"expectedMakeRequestsErrors": [
{
- "value": "json: cannot unmarshal string into Go struct field ExtImpAdkernelAdn.pubId of type int",
- "comparison": "literal"
+ "value": "cannot unmarshal openrtb_ext.ExtImpAdkernelAdn.PublisherID: unexpected character",
+ "comparison": "startswith"
}
]
}
diff --git a/adapters/adman/adman.go b/adapters/adman/adman.go
index 5350fa7cb86..8f90a0fe5bb 100644
--- a/adapters/adman/adman.go
+++ b/adapters/adman/adman.go
@@ -5,11 +5,12 @@ import (
"fmt"
"net/http"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
// AdmanAdapter struct
@@ -38,12 +39,12 @@ func (a *AdmanAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapt
reqCopy.Imp = []openrtb2.Imp{imp}
var bidderExt adapters.ExtImpBidder
- if err = json.Unmarshal(reqCopy.Imp[0].Ext, &bidderExt); err != nil {
+ if err = jsonutil.Unmarshal(reqCopy.Imp[0].Ext, &bidderExt); err != nil {
errs = append(errs, err)
continue
}
- if err = json.Unmarshal(bidderExt.Bidder, &admanExt); err != nil {
+ if err = jsonutil.Unmarshal(bidderExt.Bidder, &admanExt); err != nil {
errs = append(errs, err)
continue
}
@@ -78,6 +79,7 @@ func (a *AdmanAdapter) makeRequest(request *openrtb2.BidRequest) (*adapters.Requ
Uri: a.URI,
Body: reqJSON,
Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
}, errs
}
@@ -97,7 +99,7 @@ func (a *AdmanAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRe
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{err}
}
diff --git a/adapters/adman/adman_test.go b/adapters/adman/adman_test.go
index 608232cc4b8..1a8eccca62b 100644
--- a/adapters/adman/adman_test.go
+++ b/adapters/adman/adman_test.go
@@ -3,9 +3,9 @@ package adman
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestJsonSamples(t *testing.T) {
diff --git a/adapters/adman/admantest/exemplary/simple-banner.json b/adapters/adman/admantest/exemplary/simple-banner.json
index 8bbe16aa0fe..e6abaf6a1a4 100644
--- a/adapters/adman/admantest/exemplary/simple-banner.json
+++ b/adapters/adman/admantest/exemplary/simple-banner.json
@@ -71,7 +71,8 @@
"ip": "123.123.123.123",
"ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx"
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adman/admantest/exemplary/simple-video.json b/adapters/adman/admantest/exemplary/simple-video.json
index 159a30a93e0..ef227371957 100644
--- a/adapters/adman/admantest/exemplary/simple-video.json
+++ b/adapters/adman/admantest/exemplary/simple-video.json
@@ -58,7 +58,8 @@
}
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adman/admantest/exemplary/simple-web-banner.json b/adapters/adman/admantest/exemplary/simple-web-banner.json
index 0ceaac7c6d5..6dcf5f05af1 100644
--- a/adapters/adman/admantest/exemplary/simple-web-banner.json
+++ b/adapters/adman/admantest/exemplary/simple-web-banner.json
@@ -69,7 +69,8 @@
"device": {
"ip": "123.123.123.123"
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adman/admantest/supplemental/bad-imp-ext.json b/adapters/adman/admantest/supplemental/bad-imp-ext.json
index db3c8de5767..a4b5cc546f4 100644
--- a/adapters/adman/admantest/supplemental/bad-imp-ext.json
+++ b/adapters/adman/admantest/supplemental/bad-imp-ext.json
@@ -35,8 +35,8 @@
},
"expectedMakeRequestsErrors": [
{
- "value": "unexpected end of JSON input",
- "comparison": "literal"
+ "value": "expect { or n, but found",
+ "comparison": "startswith"
}
]
}
diff --git a/adapters/adman/admantest/supplemental/bad_response.json b/adapters/adman/admantest/supplemental/bad_response.json
index 4431a328154..96d7a6098ca 100644
--- a/adapters/adman/admantest/supplemental/bad_response.json
+++ b/adapters/adman/admantest/supplemental/bad_response.json
@@ -69,7 +69,8 @@
"ip": "123.123.123.123",
"ifa": "sdjfksdf-dfsds-dsdg-dsgg"
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
@@ -78,7 +79,7 @@
}],
"expectedMakeBidsErrors": [
{
- "value": "json: cannot unmarshal string into Go value of type openrtb2.BidResponse",
+ "value": "expect { or n, but found \"",
"comparison": "literal"
}
]
diff --git a/adapters/adman/admantest/supplemental/no-imp-ext-1.json b/adapters/adman/admantest/supplemental/no-imp-ext-1.json
index 8fad5ba5ef0..d93995bb33e 100644
--- a/adapters/adman/admantest/supplemental/no-imp-ext-1.json
+++ b/adapters/adman/admantest/supplemental/no-imp-ext-1.json
@@ -31,7 +31,7 @@
},
"expectedMakeRequestsErrors": [
{
- "value": "json: cannot unmarshal string into Go value of type adapters.ExtImpBidder",
+ "value": "expect { or n, but found \"",
"comparison": "literal"
}
]
diff --git a/adapters/adman/admantest/supplemental/no-imp-ext-2.json b/adapters/adman/admantest/supplemental/no-imp-ext-2.json
index 337dfd044b3..677260f21e4 100644
--- a/adapters/adman/admantest/supplemental/no-imp-ext-2.json
+++ b/adapters/adman/admantest/supplemental/no-imp-ext-2.json
@@ -31,8 +31,8 @@
},
"expectedMakeRequestsErrors": [
{
- "value": "unexpected end of JSON input",
- "comparison": "literal"
+ "value": "expect { or n, but found",
+ "comparison": "startswith"
}
]
}
diff --git a/adapters/adman/admantest/supplemental/status-204.json b/adapters/adman/admantest/supplemental/status-204.json
index 05f9d030832..859524562d0 100644
--- a/adapters/adman/admantest/supplemental/status-204.json
+++ b/adapters/adman/admantest/supplemental/status-204.json
@@ -70,7 +70,8 @@
"ip": "123.123.123.123",
"ifa": "sdjfksdf-dfsds-dsdg-dsgg"
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 204,
diff --git a/adapters/adman/admantest/supplemental/status-404.json b/adapters/adman/admantest/supplemental/status-404.json
index 043afbdc1dc..8896b1d0ed6 100644
--- a/adapters/adman/admantest/supplemental/status-404.json
+++ b/adapters/adman/admantest/supplemental/status-404.json
@@ -69,7 +69,8 @@
"ip": "123.123.123.123",
"ifa": "sdjfksdf-dfsds-dsdg-dsgg"
}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 404,
diff --git a/adapters/adman/params_test.go b/adapters/adman/params_test.go
index a80c2a44b8b..97b3d8f3f2c 100644
--- a/adapters/adman/params_test.go
+++ b/adapters/adman/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
// TestValidParams makes sure that the adman schema accepts all imp.ext fields which we intend to support.
diff --git a/adapters/admatic/admatic.go b/adapters/admatic/admatic.go
new file mode 100644
index 00000000000..6b0ed99f4df
--- /dev/null
+++ b/adapters/admatic/admatic.go
@@ -0,0 +1,139 @@
+package admatic
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "text/template"
+
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/macros"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
+)
+
+type adapter struct {
+ endpoint *template.Template
+}
+
+func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
+ endpointTemplate, err := template.New("endpointTemplate").Parse(config.Endpoint)
+ if err != nil {
+ return nil, fmt.Errorf("unable to parse endpoint template: %v", err)
+ }
+
+ bidder := &adapter{
+ endpoint: endpointTemplate,
+ }
+ return bidder, nil
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+ var requests []*adapters.RequestData
+ var errs []error
+
+ requestCopy := *request
+ for _, imp := range request.Imp {
+ requestCopy.Imp = []openrtb2.Imp{imp}
+
+ endpoint, err := a.buildEndpointFromRequest(&imp)
+ if err != nil {
+ errs = append(errs, err)
+ continue
+ }
+
+ requestJSON, err := json.Marshal(requestCopy)
+ if err != nil {
+ errs = append(errs, err)
+ continue
+ }
+
+ request := &adapters.RequestData{
+ Method: http.MethodPost,
+ Body: requestJSON,
+ Uri: endpoint,
+ ImpIDs: openrtb_ext.GetImpIDs(requestCopy.Imp),
+ }
+
+ requests = append(requests, request)
+ }
+
+ return requests, errs
+}
+
+func (a *adapter) buildEndpointFromRequest(imp *openrtb2.Imp) (string, error) {
+ var impExt adapters.ExtImpBidder
+ if err := jsonutil.Unmarshal(imp.Ext, &impExt); err != nil {
+ return "", &errortypes.BadInput{
+ Message: fmt.Sprintf("Failed to deserialize bidder impression extension: %v", err),
+ }
+ }
+
+ var admaticExt openrtb_ext.ImpExtAdmatic
+ if err := jsonutil.Unmarshal(impExt.Bidder, &admaticExt); err != nil {
+ return "", &errortypes.BadInput{
+ Message: fmt.Sprintf("Failed to deserialize AdMatic extension: %v", err),
+ }
+ }
+
+ endpointParams := macros.EndpointTemplateParams{
+ Host: admaticExt.Host,
+ }
+
+ return macros.ResolveMacros(a.endpoint, endpointParams)
+}
+
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+ if adapters.IsResponseStatusCodeNoContent(responseData) {
+ return nil, nil
+ }
+
+ err := adapters.CheckResponseStatusCodeForErrors(responseData)
+ if err != nil {
+ return nil, []error{err}
+ }
+ var response openrtb2.BidResponse
+ if err := jsonutil.Unmarshal(responseData.Body, &response); err != nil {
+ return nil, []error{err}
+ }
+
+ bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
+ if len(response.Cur) != 0 {
+ bidResponse.Currency = response.Cur
+ }
+
+ for _, seatBid := range response.SeatBid {
+ for i := range seatBid.Bid {
+
+ bidMediaType, err := getMediaTypeForBid(seatBid.Bid[i].ImpID, request.Imp)
+ if err != nil {
+ return nil, []error{err}
+ }
+ bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
+ Bid: &seatBid.Bid[i],
+ BidType: bidMediaType,
+ })
+ }
+ }
+ return bidResponse, nil
+}
+
+func getMediaTypeForBid(impID string, imps []openrtb2.Imp) (openrtb_ext.BidType, error) {
+ for _, imp := range imps {
+ if imp.ID == impID {
+ if imp.Banner != nil {
+ return openrtb_ext.BidTypeBanner, nil
+ } else if imp.Video != nil {
+ return openrtb_ext.BidTypeVideo, nil
+ } else if imp.Native != nil {
+ return openrtb_ext.BidTypeNative, nil
+ }
+ }
+ }
+ return "", &errortypes.BadServerResponse{
+ Message: fmt.Sprintf("The impression with ID %s is not present into the request", impID),
+ }
+}
diff --git a/adapters/admatic/admatic_test.go b/adapters/admatic/admatic_test.go
new file mode 100644
index 00000000000..c98f14e90a0
--- /dev/null
+++ b/adapters/admatic/admatic_test.go
@@ -0,0 +1,29 @@
+package admatic
+
+import (
+ "testing"
+
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestJsonSamples(t *testing.T) {
+ bidder, buildErr := Builder(openrtb_ext.BidderAdmatic, config.Adapter{
+ Endpoint: "http://pbs.admatic.com.tr?host={{.Host}}"},
+ config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1281, DataCenter: "2"})
+
+ if buildErr != nil {
+ t.Fatalf("Builder returned unexpected error %v", buildErr)
+ }
+
+ adapterstest.RunJSONBidderTest(t, "admatictest", bidder)
+}
+
+func TestEndpointTemplateMalformed(t *testing.T) {
+ _, buildErr := Builder(openrtb_ext.BidderAdmatic, config.Adapter{
+ Endpoint: "host={{Host}}"}, config.Server{ExternalUrl: "http://hosturl.com"})
+
+ assert.Error(t, buildErr)
+}
diff --git a/adapters/admatic/admatictest/exemplary/banner.json b/adapters/admatic/admatictest/exemplary/banner.json
new file mode 100644
index 00000000000..5950034a61e
--- /dev/null
+++ b/adapters/admatic/admatictest/exemplary/banner.json
@@ -0,0 +1,96 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id-banner"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-banner",
+ "seatbid": [
+ {
+ "seat": "admatic",
+ "bid": [
+ {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ }
+ ]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ },
+ "type": "banner"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/admatic/admatictest/exemplary/multiple-imps.json b/adapters/admatic/admatictest/exemplary/multiple-imps.json
new file mode 100644
index 00000000000..8738fbb7f95
--- /dev/null
+++ b/adapters/admatic/admatictest/exemplary/multiple-imps.json
@@ -0,0 +1,181 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ },
+ {
+ "id": "test-imp-id-banner2",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer2.serve.admatic.com.tr",
+ "networkId": 123456
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id-banner"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-banner",
+ "seatbid": [
+ {
+ "seat": "admatic",
+ "bid": [
+ {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ }
+ ]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ },
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer2.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner2",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer2.serve.admatic.com.tr",
+ "networkId": 123456
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id-banner2"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-banner",
+ "seatbid": [
+ {
+ "seat": "admatic",
+ "bid": [
+ {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e801",
+ "impid": "test-imp-id-banner2",
+ "price": 0.5,
+ "adm": "some-test-ad-banner2",
+ "crid": "crid_11",
+ "w": 728,
+ "h": 90
+ }
+ ]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ },
+ "type": "banner"
+ }
+ ]
+ },
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e801",
+ "impid": "test-imp-id-banner2",
+ "price": 0.5,
+ "adm": "some-test-ad-banner2",
+ "crid": "crid_11",
+ "w": 728,
+ "h": 90
+ },
+ "type": "banner"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/admatic/admatictest/exemplary/native.json b/adapters/admatic/admatictest/exemplary/native.json
new file mode 100644
index 00000000000..455406d05c2
--- /dev/null
+++ b/adapters/admatic/admatictest/exemplary/native.json
@@ -0,0 +1,86 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id-native",
+ "imp": [
+ {
+ "id": "test-imp-id-native",
+ "native": {
+ "request": ""
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id-native",
+ "imp": [
+ {
+ "id": "test-imp-id-native",
+ "native": {
+ "request": ""
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id-native"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-native",
+ "seatbid": [
+ {
+ "seat": "admatic",
+ "bid": [
+ {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-native",
+ "price": 0.5,
+ "adm": "some-test-ad-native",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ }
+ ]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-native",
+ "price": 0.5,
+ "adm": "some-test-ad-native",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ },
+ "type": "native"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/admatic/admatictest/exemplary/optional-params.json b/adapters/admatic/admatictest/exemplary/optional-params.json
new file mode 100644
index 00000000000..e1652c30899
--- /dev/null
+++ b/adapters/admatic/admatictest/exemplary/optional-params.json
@@ -0,0 +1,100 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345,
+ "bidFloor": 0.1,
+ "isTest": false
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345,
+ "bidFloor": 0.1,
+ "isTest": false
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id-banner"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-banner",
+ "seatbid": [
+ {
+ "seat": "admatic",
+ "bid": [
+ {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ }
+ ]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ },
+ "type": "banner"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/admatic/admatictest/exemplary/video.json b/adapters/admatic/admatictest/exemplary/video.json
new file mode 100644
index 00000000000..58f5e89810b
--- /dev/null
+++ b/adapters/admatic/admatictest/exemplary/video.json
@@ -0,0 +1,94 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-video-id",
+ "video": {
+ "mimes": ["video/mp4"],
+ "w": 300,
+ "h": 250
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-video-id",
+ "video": {
+ "mimes": ["video/mp4"],
+ "w": 300,
+ "h": 250
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-video-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-test-video-id",
+ "seatbid": [
+ {
+ "seat": "test-seat",
+ "bid": [
+ {
+ "id": "5dce6055-a93c-1fd0-8c29-14afc3e510fd",
+ "impid": "test-video-id",
+ "price": 0.1529,
+ "nurl": "test-win",
+ "adm": "test-video",
+ "adid": "92-288",
+ "adomain": ["advertiserdomain.com"],
+ "crid": "288",
+ "w": 300,
+ "h": 250
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids": [
+ {
+ "bid": {
+ "id": "5dce6055-a93c-1fd0-8c29-14afc3e510fd",
+ "impid": "test-video-id",
+ "price": 0.1529,
+ "nurl": "test-win",
+ "adm": "test-video",
+ "adid": "92-288",
+ "adomain": ["advertiserdomain.com"],
+ "crid": "288",
+ "w": 300,
+ "h": 250
+ },
+ "type": "video"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/admatic/admatictest/supplemental/bad-request.json b/adapters/admatic/admatictest/supplemental/bad-request.json
new file mode 100644
index 00000000000..90f6ebd6c9d
--- /dev/null
+++ b/adapters/admatic/admatictest/supplemental/bad-request.json
@@ -0,0 +1,66 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 400,
+ "headers": {}
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Unexpected status code: 400. Run with request.debug = 1 for more info",
+ "comparison": "literal"
+ }
+ ]
+ }
+
\ No newline at end of file
diff --git a/adapters/admatic/admatictest/supplemental/multiple-imps-with-error.json b/adapters/admatic/admatictest/supplemental/multiple-imps-with-error.json
new file mode 100644
index 00000000000..b23c794c1ba
--- /dev/null
+++ b/adapters/admatic/admatictest/supplemental/multiple-imps-with-error.json
@@ -0,0 +1,119 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ },
+ {
+ "id": "test-imp-id-banner2",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": {},
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id-banner",
+ "imp": [
+ {
+ "id": "test-imp-id-banner",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id-banner"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "id": "test-request-id-banner",
+ "seatbid": [
+ {
+ "seat": "admatic",
+ "bid": [
+ {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ }
+ ]
+ }
+ ],
+ "cur": "USD"
+ }
+ }
+ }
+ ],
+ "expectedMakeRequestsErrors": [
+ {
+ "value": "Failed to deserialize AdMatic extension: cannot unmarshal openrtb_ext.ImpExtAdmatic.Host: expects \" or n, but found {",
+ "comparison": "literal"
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "currency": "USD",
+ "bids": [
+ {
+ "bid": {
+ "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+ "impid": "test-imp-id-banner",
+ "price": 0.5,
+ "adm": "some-test-ad-banner",
+ "crid": "crid_10",
+ "w": 728,
+ "h": 90
+ },
+ "type": "banner"
+ }
+ ]
+ }
+ ]
+}
diff --git a/adapters/admatic/admatictest/supplemental/response-200-without-body.json b/adapters/admatic/admatictest/supplemental/response-200-without-body.json
new file mode 100644
index 00000000000..6cded7606e2
--- /dev/null
+++ b/adapters/admatic/admatictest/supplemental/response-200-without-body.json
@@ -0,0 +1,64 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 200
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "expect { or n, but found",
+ "comparison": "startswith"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/admatic/admatictest/supplemental/response-204.json b/adapters/admatic/admatictest/supplemental/response-204.json
new file mode 100644
index 00000000000..849cc85e89b
--- /dev/null
+++ b/adapters/admatic/admatictest/supplemental/response-204.json
@@ -0,0 +1,59 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 204
+ }
+ }
+ ],
+ "expectedBidResponses": []
+}
diff --git a/adapters/admatic/admatictest/supplemental/server-error.json b/adapters/admatic/admatictest/supplemental/server-error.json
new file mode 100644
index 00000000000..91bb22733bc
--- /dev/null
+++ b/adapters/admatic/admatictest/supplemental/server-error.json
@@ -0,0 +1,65 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://pbs.admatic.com.tr?host=layer.serve.admatic.com.tr",
+ "body": {
+ "id": "test-request-id",
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 728,
+ "h": 90
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "host": "layer.serve.admatic.com.tr",
+ "networkId": 12345
+ }
+ }
+ }
+ ]
+ },
+ "impIDs": ["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 500,
+ "headers": {}
+ }
+ }
+ ],
+ "expectedMakeBidsErrors": [
+ {
+ "value": "Unexpected status code: 500. Run with request.debug = 1 for more info",
+ "comparison": "literal"
+ }
+ ]
+}
diff --git a/adapters/admatic/params_test.go b/adapters/admatic/params_test.go
new file mode 100644
index 00000000000..fc92a1d7799
--- /dev/null
+++ b/adapters/admatic/params_test.go
@@ -0,0 +1,56 @@
+package admatic
+
+import (
+ "encoding/json"
+ "testing"
+
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+)
+
+func TestValidParams(t *testing.T) {
+ validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+ if err != nil {
+ t.Fatalf("Failed to fetch the json schema. %v", err)
+ }
+
+ for _, p := range validParams {
+ if err := validator.Validate(openrtb_ext.BidderAdmatic, json.RawMessage(p)); err != nil {
+ t.Errorf("Schema rejected valid params: %s", p)
+ }
+ }
+}
+
+func TestInvalidParams(t *testing.T) {
+ validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+ if err != nil {
+ t.Fatalf("Failed to fetch the json schema. %v", err)
+ }
+
+ for _, p := range invalidParams {
+ if err := validator.Validate(openrtb_ext.BidderAdmatic, json.RawMessage(p)); err == nil {
+ t.Errorf("Schema allowed invalid params: %s", p)
+ }
+ }
+}
+
+var validParams = []string{
+ `{ "host": "layer.serve.admatic.com.tr",
+ "networkId": 1111,
+ "ext": {
+ "key1": "value1",
+ "key2": "value2"
+ }
+ }`,
+ `{"host": "layer.serve.admatic.com.tr", "networkId": 1111}`,
+}
+
+var invalidParams = []string{
+ `{"ext": {
+ "key1": "value1",
+ "key2": "value2"
+ }`,
+ `{}`,
+ `{"host": 123, "networkId":"1111"}`,
+ `{"host": "layer.serve.admatic.com.tr", "networkId":"1111"}`,
+ `{"host": 1111, "networkId":1111}`,
+}
diff --git a/adapters/admixer/admixer.go b/adapters/admixer/admixer.go
index 9a07a8922a9..726c2cb98cc 100644
--- a/adapters/admixer/admixer.go
+++ b/adapters/admixer/admixer.go
@@ -5,11 +5,12 @@ import (
"fmt"
"net/http"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
)
type AdmixerAdapter struct {
@@ -81,19 +82,20 @@ func (a *AdmixerAdapter) makeRequest(request *openrtb2.BidRequest) (*adapters.Re
Uri: a.endpoint,
Body: reqJSON,
Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(request.Imp),
}, errs
}
func preprocess(imp *openrtb2.Imp) error {
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return &errortypes.BadInput{
Message: err.Error(),
}
}
var admixerExt openrtb_ext.ExtImpAdmixer
- if err := json.Unmarshal(bidderExt.Bidder, &admixerExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &admixerExt); err != nil {
return &errortypes.BadInput{
Message: "Wrong Admixer bidder ext",
}
@@ -153,7 +155,7 @@ func (a *AdmixerAdapter) MakeBids(internalRequest *openrtb2.BidRequest, external
}
var bidResp openrtb2.BidResponse
- if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil {
return nil, []error{err}
}
diff --git a/adapters/admixer/admixer_test.go b/adapters/admixer/admixer_test.go
index 766f890cdf7..62615a63b3c 100644
--- a/adapters/admixer/admixer_test.go
+++ b/adapters/admixer/admixer_test.go
@@ -3,9 +3,9 @@ package admixer
import (
"testing"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
func TestJsonSamples(t *testing.T) {
diff --git a/adapters/admixer/admixertest/exemplary/optional-params.json b/adapters/admixer/admixertest/exemplary/optional-params.json
index b93aa9c8154..6d60878c835 100644
--- a/adapters/admixer/admixertest/exemplary/optional-params.json
+++ b/adapters/admixer/admixertest/exemplary/optional-params.json
@@ -227,7 +227,8 @@
}
}
]
- }
+ },
+ "impIDs":["test-imp-id","test-imp-id","test-imp-id","test-imp-id","test-imp-id"]
},
"mockResponse": {
"status": 204
diff --git a/adapters/admixer/admixertest/exemplary/simple-app-audio.json b/adapters/admixer/admixertest/exemplary/simple-app-audio.json
index b8c39ead95e..3b6673180a4 100644
--- a/adapters/admixer/admixertest/exemplary/simple-app-audio.json
+++ b/adapters/admixer/admixertest/exemplary/simple-app-audio.json
@@ -45,7 +45,8 @@
"tagid": "473e443c-43d0-423d-a8d7-a302637a01d8"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-app-banner.json b/adapters/admixer/admixertest/exemplary/simple-app-banner.json
index aff4ccddd64..1be2f132bdf 100644
--- a/adapters/admixer/admixertest/exemplary/simple-app-banner.json
+++ b/adapters/admixer/admixertest/exemplary/simple-app-banner.json
@@ -52,7 +52,8 @@
"tagid": "2eb6bd58-865c-47ce-af7f-a918108c3fd2"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-app-native.json b/adapters/admixer/admixertest/exemplary/simple-app-native.json
index 38c005c651c..1a99f2a4488 100644
--- a/adapters/admixer/admixertest/exemplary/simple-app-native.json
+++ b/adapters/admixer/admixertest/exemplary/simple-app-native.json
@@ -46,7 +46,8 @@
"tagid": "b1fbebfc-7155-4922-bb86-615e7f3d6eef"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-app-video.json b/adapters/admixer/admixertest/exemplary/simple-app-video.json
index 627023fa1e6..a94d1faf422 100644
--- a/adapters/admixer/admixertest/exemplary/simple-app-video.json
+++ b/adapters/admixer/admixertest/exemplary/simple-app-video.json
@@ -62,7 +62,8 @@
"tagid": "ac7fa772-d7be-48cc-820b-e21728e434fe"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-site-audio.json b/adapters/admixer/admixertest/exemplary/simple-site-audio.json
index 5a1d6531a85..c141442e7a5 100644
--- a/adapters/admixer/admixertest/exemplary/simple-site-audio.json
+++ b/adapters/admixer/admixertest/exemplary/simple-site-audio.json
@@ -45,7 +45,8 @@
"tagid": "473e443c-43d0-423d-a8d7-a302637a01d8"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-site-banner.json b/adapters/admixer/admixertest/exemplary/simple-site-banner.json
index bd50aba8d1a..776cdcff50e 100644
--- a/adapters/admixer/admixertest/exemplary/simple-site-banner.json
+++ b/adapters/admixer/admixertest/exemplary/simple-site-banner.json
@@ -52,7 +52,8 @@
"tagid": "2eb6bd58-865c-47ce-af7f-a918108c3fd2"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-site-native.json b/adapters/admixer/admixertest/exemplary/simple-site-native.json
index 246d02025b1..95f604ce2d9 100644
--- a/adapters/admixer/admixertest/exemplary/simple-site-native.json
+++ b/adapters/admixer/admixertest/exemplary/simple-site-native.json
@@ -46,7 +46,8 @@
"tagid": "b1fbebfc-7155-4922-bb86-615e7f3d6eef"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/exemplary/simple-site-video.json b/adapters/admixer/admixertest/exemplary/simple-site-video.json
index 42d771ce86b..5f3a0e1037c 100644
--- a/adapters/admixer/admixertest/exemplary/simple-site-video.json
+++ b/adapters/admixer/admixertest/exemplary/simple-site-video.json
@@ -62,7 +62,8 @@
"tagid": "ac7fa772-d7be-48cc-820b-e21728e434fe"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/admixer/admixertest/supplemental/bad-dsp-request-example.json b/adapters/admixer/admixertest/supplemental/bad-dsp-request-example.json
index 5256c14050b..1e10f331c8c 100644
--- a/adapters/admixer/admixertest/supplemental/bad-dsp-request-example.json
+++ b/adapters/admixer/admixertest/supplemental/bad-dsp-request-example.json
@@ -52,7 +52,8 @@
"tagid": "3e56bd58-865c-47ce-af7f-a918108c3fd2"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 400,
diff --git a/adapters/admixer/admixertest/supplemental/dsp-server-internal-error-example.json b/adapters/admixer/admixertest/supplemental/dsp-server-internal-error-example.json
index 1c06eadce44..aa3f0f17dd5 100644
--- a/adapters/admixer/admixertest/supplemental/dsp-server-internal-error-example.json
+++ b/adapters/admixer/admixertest/supplemental/dsp-server-internal-error-example.json
@@ -52,7 +52,8 @@
"tagid": "3e56bd58-865c-47ce-af7f-a918108c3fd2"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 500,
diff --git a/adapters/admixer/admixertest/supplemental/unknown-status-code-example.json b/adapters/admixer/admixertest/supplemental/unknown-status-code-example.json
index 972f2f5dd01..aeebb1e0b7d 100644
--- a/adapters/admixer/admixertest/supplemental/unknown-status-code-example.json
+++ b/adapters/admixer/admixertest/supplemental/unknown-status-code-example.json
@@ -52,7 +52,8 @@
"tagid": "3e56bd58-865c-47ce-af7f-a918108c3fd2"
}
]
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 301,
diff --git a/adapters/admixer/params_test.go b/adapters/admixer/params_test.go
index bfa75a4884f..cdc8d56c77a 100644
--- a/adapters/admixer/params_test.go
+++ b/adapters/admixer/params_test.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
)
// This file actually intends to test static/bidder-params/admixer.json
diff --git a/adapters/adnuntius/adnuntius.go b/adapters/adnuntius/adnuntius.go
index fd667ddc506..a3024c38d1b 100644
--- a/adapters/adnuntius/adnuntius.go
+++ b/adapters/adnuntius/adnuntius.go
@@ -9,12 +9,13 @@ import (
"strings"
"github.com/buger/jsonparser"
- "github.com/prebid/openrtb/v19/openrtb2"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/errortypes"
- "github.com/prebid/prebid-server/openrtb_ext"
- "github.com/prebid/prebid-server/util/timeutil"
+ "github.com/prebid/openrtb/v20/openrtb2"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/errortypes"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/util/jsonutil"
+ "github.com/prebid/prebid-server/v3/util/timeutil"
)
type QueryString map[string]string
@@ -33,6 +34,14 @@ type adnAdunit struct {
type extDeviceAdnuntius struct {
NoCookies bool `json:"noCookies,omitempty"`
}
+type siteExt struct {
+ Data interface{} `json:"data"`
+}
+
+type adnAdvertiser struct {
+ LegalName string `json:"legalName,omitempty"`
+ Name string `json:"name,omitempty"`
+}
type Ad struct {
Bid struct {
@@ -53,6 +62,7 @@ type Ad struct {
LineItemId string
Html string
DestinationUrls map[string]string
+ Advertiser adnAdvertiser `json:"advertiser,omitempty"`
}
type AdUnit struct {
@@ -71,9 +81,10 @@ type adnMetaData struct {
Usi string `json:"usi,omitempty"`
}
type adnRequest struct {
- AdUnits []adnAdunit `json:"adUnits"`
- MetaData adnMetaData `json:"metaData,omitempty"`
- Context string `json:"context,omitempty"`
+ AdUnits []adnAdunit `json:"adUnits"`
+ MetaData adnMetaData `json:"metaData,omitempty"`
+ Context string `json:"context,omitempty"`
+ KeyValues interface{} `json:"kv,omitempty"`
}
type RequestExt struct {
@@ -130,7 +141,7 @@ func makeEndpointUrl(ortbRequest openrtb2.BidRequest, a *adapter, noCookies bool
if !noCookies {
var deviceExt extDeviceAdnuntius
if ortbRequest.Device != nil && ortbRequest.Device.Ext != nil {
- if err := json.Unmarshal(ortbRequest.Device.Ext, &deviceExt); err != nil {
+ if err := jsonutil.Unmarshal(ortbRequest.Device.Ext, &deviceExt); err != nil {
return "", []error{fmt.Errorf("failed to parse Adnuntius endpoint: %v", err)}
}
}
@@ -138,7 +149,6 @@ func makeEndpointUrl(ortbRequest openrtb2.BidRequest, a *adapter, noCookies bool
if deviceExt.NoCookies {
noCookies = true
}
-
}
_, offset := a.time.Now().Zone()
@@ -159,7 +169,7 @@ func makeEndpointUrl(ortbRequest openrtb2.BidRequest, a *adapter, noCookies bool
}
q.Set("tzo", fmt.Sprint(tzo))
- q.Set("format", "json")
+ q.Set("format", "prebid")
url := endpointUrl + "?" + q.Encode()
return url, nil
@@ -202,20 +212,20 @@ func (a *adapter) generateRequests(ortbRequest openrtb2.BidRequest) ([]*adapters
}
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, []error{&errortypes.BadInput{
Message: fmt.Sprintf("Error unmarshalling ExtImpBidder: %s", err.Error()),
}}
}
var adnuntiusExt openrtb_ext.ImpExtAdnunitus
- if err := json.Unmarshal(bidderExt.Bidder, &adnuntiusExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adnuntiusExt); err != nil {
return nil, []error{&errortypes.BadInput{
Message: fmt.Sprintf("Error unmarshalling ExtImpValues: %s", err.Error()),
}}
}
- if adnuntiusExt.NoCookies == true {
+ if adnuntiusExt.NoCookies {
noCookies = true
}
@@ -249,11 +259,31 @@ func (a *adapter) generateRequests(ortbRequest openrtb2.BidRequest) ([]*adapters
site = ortbRequest.Site.Page
}
+ extSite, erro := getSiteExtAsKv(&ortbRequest)
+ if erro != nil {
+ return nil, []error{fmt.Errorf("failed to parse site Ext: %v", err)}
+ }
+
for _, networkAdunits := range networkAdunitMap {
adnuntiusRequest := adnRequest{
- AdUnits: networkAdunits,
- Context: site,
+ AdUnits: networkAdunits,
+ Context: site,
+ KeyValues: extSite.Data,
+ }
+
+ var extUser openrtb_ext.ExtUser
+ if ortbRequest.User != nil && ortbRequest.User.Ext != nil {
+ if err := jsonutil.Unmarshal(ortbRequest.User.Ext, &extUser); err != nil {
+ return nil, []error{fmt.Errorf("failed to parse Ext User: %v", err)}
+ }
+ }
+
+ // Will change when our adserver can accept multiple user IDS
+ if extUser.Eids != nil && len(extUser.Eids) > 0 {
+ if len(extUser.Eids[0].UIDs) > 0 {
+ adnuntiusRequest.MetaData.Usi = extUser.Eids[0].UIDs[0].ID
+ }
}
ortbUser := ortbRequest.User
@@ -276,6 +306,7 @@ func (a *adapter) generateRequests(ortbRequest openrtb2.BidRequest) ([]*adapters
Uri: endpoint,
Body: adnJson,
Headers: headers,
+ ImpIDs: openrtb_ext.GetImpIDs(ortbRequest.Imp),
})
}
@@ -298,7 +329,7 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, externalRequest *adapte
}
var adnResponse AdnResponse
- if err := json.Unmarshal(response.Body, &adnResponse); err != nil {
+ if err := jsonutil.Unmarshal(response.Body, &adnResponse); err != nil {
return nil, []error{err}
}
@@ -310,12 +341,22 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, externalRequest *adapte
return bidResponse, nil
}
+func getSiteExtAsKv(request *openrtb2.BidRequest) (siteExt, error) {
+ var extSite siteExt
+ if request.Site != nil && request.Site.Ext != nil {
+ if err := jsonutil.Unmarshal(request.Site.Ext, &extSite); err != nil {
+ return extSite, fmt.Errorf("failed to parse ExtSite in Adnuntius: %v", err)
+ }
+ }
+ return extSite, nil
+}
+
func getGDPR(request *openrtb2.BidRequest) (string, string, error) {
gdpr := ""
var extRegs openrtb_ext.ExtRegs
if request.Regs != nil && request.Regs.Ext != nil {
- if err := json.Unmarshal(request.Regs.Ext, &extRegs); err != nil {
+ if err := jsonutil.Unmarshal(request.Regs.Ext, &extRegs); err != nil {
return "", "", fmt.Errorf("failed to parse ExtRegs in Adnuntius GDPR check: %v", err)
}
if extRegs.GDPR != nil && (*extRegs.GDPR == 0 || *extRegs.GDPR == 1) {
@@ -326,7 +367,7 @@ func getGDPR(request *openrtb2.BidRequest) (string, string, error) {
consent := ""
if request.User != nil && request.User.Ext != nil {
var extUser openrtb_ext.ExtUser
- if err := json.Unmarshal(request.User.Ext, &extUser); err != nil {
+ if err := jsonutil.Unmarshal(request.User.Ext, &extUser); err != nil {
return "", "", fmt.Errorf("failed to parse ExtUser in Adnuntius GDPR check: %v", err)
}
consent = extUser.Consent
@@ -335,6 +376,40 @@ func getGDPR(request *openrtb2.BidRequest) (string, string, error) {
return gdpr, consent, nil
}
+func generateReturnExt(ad Ad, request *openrtb2.BidRequest) (json.RawMessage, error) {
+ // We always force the publisher to render
+ var adRender int8 = 0
+
+ var requestRegsExt *openrtb_ext.ExtRegs
+ if request.Regs != nil && request.Regs.Ext != nil {
+ if err := jsonutil.Unmarshal(request.Regs.Ext, &requestRegsExt); err != nil {
+
+ return nil, fmt.Errorf("Failed to parse Ext information in Adnuntius: %v", err)
+ }
+ }
+
+ if ad.Advertiser.Name != "" && requestRegsExt != nil && requestRegsExt.DSA != nil {
+ legalName := ad.Advertiser.Name
+ if ad.Advertiser.LegalName != "" {
+ legalName = ad.Advertiser.LegalName
+ }
+ ext := &openrtb_ext.ExtBid{
+ DSA: &openrtb_ext.ExtBidDSA{
+ AdRender: &adRender,
+ Paid: legalName,
+ Behalf: legalName,
+ },
+ }
+ returnExt, err := json.Marshal(ext)
+ if err != nil {
+ return nil, fmt.Errorf("Failed to parse Ext information in Adnuntius: %v", err)
+ }
+
+ return returnExt, nil
+ }
+ return nil, nil
+}
+
func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.BidRequest) (*openrtb2.Bid, []error) {
creativeWidth, widthErr := strconv.ParseInt(ad.CreativeWidth, 10, 64)
@@ -354,14 +429,14 @@ func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.
price := ad.Bid.Amount
var bidderExt adapters.ExtImpBidder
- if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+ if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
return nil, []error{&errortypes.BadInput{
Message: fmt.Sprintf("Error unmarshalling ExtImpBidder: %s", err.Error()),
}}
}
var adnuntiusExt openrtb_ext.ImpExtAdnunitus
- if err := json.Unmarshal(bidderExt.Bidder, &adnuntiusExt); err != nil {
+ if err := jsonutil.Unmarshal(bidderExt.Bidder, &adnuntiusExt); err != nil {
return nil, []error{&errortypes.BadInput{
Message: fmt.Sprintf("Error unmarshalling ExtImpValues: %s", err.Error()),
}}
@@ -376,6 +451,13 @@ func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.
}
}
+ extJson, err := generateReturnExt(ad, request)
+ if err != nil {
+ return nil, []error{&errortypes.BadInput{
+ Message: fmt.Sprintf("Error extracting Ext: %s", err.Error()),
+ }}
+ }
+
adDomain := []string{}
for _, url := range ad.DestinationUrls {
domainArray := strings.Split(url, "/")
@@ -395,6 +477,7 @@ func generateAdResponse(ad Ad, imp openrtb2.Imp, html string, request *openrtb2.
Price: price * 1000,
AdM: html,
ADomain: adDomain,
+ Ext: extJson,
}
return &bid, nil
@@ -429,7 +512,7 @@ func generateBidResponse(adnResponse *AdnResponse, request *openrtb2.BidRequest)
adBid, err := generateAdResponse(ad, imp, adunit.Html, request)
if err != nil {
return nil, []error{&errortypes.BadInput{
- Message: fmt.Sprintf("Error at ad generation"),
+ Message: "Error at ad generation",
}}
}
@@ -442,7 +525,7 @@ func generateBidResponse(adnResponse *AdnResponse, request *openrtb2.BidRequest)
dealBid, err := generateAdResponse(deal, imp, deal.Html, request)
if err != nil {
return nil, []error{&errortypes.BadInput{
- Message: fmt.Sprintf("Error at ad generation"),
+ Message: "Error at ad generation",
}}
}
diff --git a/adapters/adnuntius/adnuntius_test.go b/adapters/adnuntius/adnuntius_test.go
index 9c431c2a315..8b048f7996b 100644
--- a/adapters/adnuntius/adnuntius_test.go
+++ b/adapters/adnuntius/adnuntius_test.go
@@ -4,10 +4,10 @@ import (
"testing"
"time"
- "github.com/prebid/prebid-server/adapters"
- "github.com/prebid/prebid-server/adapters/adapterstest"
- "github.com/prebid/prebid-server/config"
- "github.com/prebid/prebid-server/openrtb_ext"
+ "github.com/prebid/prebid-server/v3/adapters"
+ "github.com/prebid/prebid-server/v3/adapters/adapterstest"
+ "github.com/prebid/prebid-server/v3/config"
+ "github.com/prebid/prebid-server/v3/openrtb_ext"
"github.com/stretchr/testify/assert"
)
diff --git a/adapters/adnuntius/adnuntiustest/exemplary/simple-banner.json b/adapters/adnuntius/adnuntiustest/exemplary/simple-banner.json
index 3a50789e4dd..49c74ad6683 100644
--- a/adapters/adnuntius/adnuntiustest/exemplary/simple-banner.json
+++ b/adapters/adnuntius/adnuntiustest/exemplary/simple-banner.json
@@ -31,7 +31,7 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "http://whatever.url?format=json&tzo=0",
+ "uri": "http://whatever.url?format=prebid&tzo=0",
"body": {
"adUnits": [
{
@@ -42,7 +42,8 @@
],
"context": "prebid.org",
"metaData": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adnuntius/adnuntiustest/supplemental/check-dealId.json b/adapters/adnuntius/adnuntiustest/supplemental/check-dealId.json
index 2565fee93c9..7869fa87f94 100644
--- a/adapters/adnuntius/adnuntiustest/supplemental/check-dealId.json
+++ b/adapters/adnuntius/adnuntiustest/supplemental/check-dealId.json
@@ -31,7 +31,7 @@
"httpCalls": [
{
"expectedRequest": {
- "uri": "http://whatever.url?format=json&tzo=0",
+ "uri": "http://whatever.url?format=prebid&tzo=0",
"body": {
"adUnits": [
{
@@ -42,7 +42,8 @@
],
"context": "prebid.org",
"metaData": {}
- }
+ },
+ "impIDs":["test-imp-id"]
},
"mockResponse": {
"status": 200,
diff --git a/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName-omitted.json b/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName-omitted.json
new file mode 100644
index 00000000000..0b44aa16dca
--- /dev/null
+++ b/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName-omitted.json
@@ -0,0 +1,133 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "user": {
+ "id": "1kjh3429kjh295jkl"
+ },
+ "site": {
+ "ext":{
+ "data" : {
+ "key": ["value"]
+ }
+ }
+ },
+ "regs": {
+ "ext": {
+ "dsa": {
+ "dsarequired": 3,
+ "datatopub": 1
+ }
+ }
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 300,
+ "h": 250
+ },
+ {
+ "w": 300,
+ "h": 600
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "auId": "123"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://whatever.url?format=prebid&tzo=0",
+ "body": {
+ "adUnits": [
+ {
+ "auId": "123",
+ "targetId": "123-test-imp-id",
+ "dimensions": [[300,250],[300,600]]
+ }
+ ],
+ "kv": {
+ "key": ["value"]
+ },
+ "metaData": {
+ "usi": "1kjh3429kjh295jkl"
+ },
+ "context": "unknown"
+ },
+ "impIDs":["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "adUnits": [
+ {
+ "auId": "0000000000000123",
+ "targetId": "123-test-imp-id",
+ "html": "",
+ "responseId": "adn-rsp-900646517",
+ "ads": [
+ {
+ "destinationUrls": {
+ "url": "http://www.google.com"
+ },
+ "bid": {
+ "amount": 20.0,
+ "currency": "NOK"
+ },
+ "adId": "adn-id-1559784094",
+ "creativeWidth": "980",
+ "creativeHeight": "240",
+ "creativeId": "jn9hpzvlsf8cpdmm",
+ "lineItemId": "q7y9qm5b0xt9htrv",
+ "advertiser": {
+ "name": "Name"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids": [
+ {
+ "bid": {
+ "id": "adn-id-1559784094",
+ "impid": "test-imp-id",
+ "price": 20000,
+ "adm": "",
+ "adid": "adn-id-1559784094",
+ "adomain": [
+ "google.com"
+ ],
+ "cid": "q7y9qm5b0xt9htrv",
+ "crid": "jn9hpzvlsf8cpdmm",
+ "w": 980,
+ "h": 240,
+ "ext": {
+ "dsa": {
+ "paid": "Name",
+ "behalf": "Name",
+ "adrender": 0
+ }
+ }
+ },
+ "type": "banner"
+
+ }
+ ],
+ "currency": "NOK"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName.json b/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName.json
new file mode 100644
index 00000000000..7999bd476aa
--- /dev/null
+++ b/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-legalName.json
@@ -0,0 +1,134 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "user": {
+ "id": "1kjh3429kjh295jkl"
+ },
+ "site": {
+ "ext":{
+ "data" : {
+ "key": ["value"]
+ }
+ }
+ },
+ "regs": {
+ "ext": {
+ "dsa": {
+ "dsarequired": 3,
+ "datatopub": 1
+ }
+ }
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 300,
+ "h": 250
+ },
+ {
+ "w": 300,
+ "h": 600
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "auId": "123"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://whatever.url?format=prebid&tzo=0",
+ "body": {
+ "adUnits": [
+ {
+ "auId": "123",
+ "targetId": "123-test-imp-id",
+ "dimensions": [[300,250],[300,600]]
+ }
+ ],
+ "kv": {
+ "key": ["value"]
+ },
+ "metaData": {
+ "usi": "1kjh3429kjh295jkl"
+ },
+ "context": "unknown"
+ },
+ "impIDs":["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "adUnits": [
+ {
+ "auId": "0000000000000123",
+ "targetId": "123-test-imp-id",
+ "html": "",
+ "responseId": "adn-rsp-900646517",
+ "ads": [
+ {
+ "destinationUrls": {
+ "url": "http://www.google.com"
+ },
+ "bid": {
+ "amount": 20.0,
+ "currency": "NOK"
+ },
+ "adId": "adn-id-1559784094",
+ "creativeWidth": "980",
+ "creativeHeight": "240",
+ "creativeId": "jn9hpzvlsf8cpdmm",
+ "lineItemId": "q7y9qm5b0xt9htrv",
+ "advertiser": {
+ "name": "Name",
+ "legalName": "LegalName"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "expectedBidResponses": [
+ {
+ "bids": [
+ {
+ "bid": {
+ "id": "adn-id-1559784094",
+ "impid": "test-imp-id",
+ "price": 20000,
+ "adm": "",
+ "adid": "adn-id-1559784094",
+ "adomain": [
+ "google.com"
+ ],
+ "cid": "q7y9qm5b0xt9htrv",
+ "crid": "jn9hpzvlsf8cpdmm",
+ "w": 980,
+ "h": 240,
+ "ext": {
+ "dsa": {
+ "paid": "LegalName",
+ "behalf": "LegalName",
+ "adrender": 0
+ }
+ }
+ },
+ "type": "banner"
+
+ }
+ ],
+ "currency": "NOK"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-omitted.json b/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-omitted.json
new file mode 100644
index 00000000000..11cea9bcf66
--- /dev/null
+++ b/adapters/adnuntius/adnuntiustest/supplemental/check-dsa-advertiser-omitted.json
@@ -0,0 +1,123 @@
+{
+ "mockBidRequest": {
+ "id": "test-request-id",
+ "user": {
+ "id": "1kjh3429kjh295jkl"
+ },
+ "site": {
+ "ext":{
+ "data" : {
+ "key": ["value"]
+ }
+ }
+ },
+ "regs": {
+ "ext": {
+ "dsa": {
+ "dsarequired": 3,
+ "datatopub": 1
+ }
+ }
+ },
+ "imp": [
+ {
+ "id": "test-imp-id",
+ "banner": {
+ "format": [
+ {
+ "w": 300,
+ "h": 250
+ },
+ {
+ "w": 300,
+ "h": 600
+ }
+ ]
+ },
+ "ext": {
+ "bidder": {
+ "auId": "123"
+ }
+ }
+ }
+ ]
+ },
+ "httpCalls": [
+ {
+ "expectedRequest": {
+ "uri": "http://whatever.url?format=prebid&tzo=0",
+ "body": {
+ "adUnits": [
+ {
+ "auId": "123",
+ "targetId": "123-test-imp-id",
+ "dimensions": [[300,250],[300,600]]
+ }
+ ],
+ "kv": {
+ "key": ["value"]
+ },
+ "metaData": {
+ "usi": "1kjh3429kjh295jkl"
+ },
+ "context": "unknown"
+ },
+ "impIDs":["test-imp-id"]
+ },
+ "mockResponse": {
+ "status": 200,
+ "body": {
+ "adUnits": [
+ {
+ "auId": "0000000000000123",
+ "targetId": "123-test-imp-id",
+ "html": "