diff --git a/adapters/ezoic/ezoic.go b/adapters/ezoic/ezoic.go new file mode 100644 index 000000000..fd5e51950 --- /dev/null +++ b/adapters/ezoic/ezoic.go @@ -0,0 +1,95 @@ +package ezoic + +import ( + "fmt" + "net/http" + + "github.com/prebid/openrtb/v20/openrtb2" + "github.com/prebid/prebid-server/v4/adapters" + "github.com/prebid/prebid-server/v4/config" + "github.com/prebid/prebid-server/v4/errortypes" + "github.com/prebid/prebid-server/v4/openrtb_ext" + "github.com/prebid/prebid-server/v4/util/jsonutil" +) + +type adapter struct { + endpoint string +} + +// Builder builds a new instance of the Ezoic adapter for the given bidder with the given config. +func Builder(bidderName openrtb_ext.BidderName, cfg config.Adapter, server config.Server) (adapters.Bidder, error) { + return &adapter{endpoint: cfg.Endpoint}, nil +} + +// MakeRequests forwards the OpenRTB request to the Ezoic bidder endpoint +// unchanged. Eligibility, demand selection, and creative construction all +// happen server-side at Ezoic; the adapter is a deliberately thin transport. +func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { + body, err := jsonutil.Marshal(request) + if err != nil { + return nil, []error{fmt.Errorf("unable to marshal openrtb request: %w", err)} + } + + headers := http.Header{} + headers.Add("Content-Type", "application/json;charset=utf-8") + headers.Add("Accept", "application/json") + + return []*adapters.RequestData{{ + Method: http.MethodPost, + Uri: a.endpoint, + Body: body, + Headers: headers, + ImpIDs: openrtb_ext.GetImpIDs(request.Imp), + }}, nil +} + +// MakeBids unpacks the Ezoic endpoint's OpenRTB BidResponse. +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 bidResp openrtb2.BidResponse + if err := jsonutil.Unmarshal(responseData.Body, &bidResp); err != nil { + return nil, []error{err} + } + + bidderResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp)) + if bidResp.Cur != "" { + bidderResponse.Currency = bidResp.Cur + } + + var errs []error + for _, seatBid := range bidResp.SeatBid { + for i := range seatBid.Bid { + bidType, err := getMediaTypeForBid(seatBid.Bid[i]) + if err != nil { + errs = append(errs, err) + continue + } + bidderResponse.Bids = append(bidderResponse.Bids, &adapters.TypedBid{ + Bid: &seatBid.Bid[i], + BidType: bidType, + }) + } + } + return bidderResponse, errs +} + +func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) { + switch bid.MType { + case openrtb2.MarkupBanner: + return openrtb_ext.BidTypeBanner, nil + case openrtb2.MarkupVideo: + return openrtb_ext.BidTypeVideo, nil + case openrtb2.MarkupNative: + return openrtb_ext.BidTypeNative, nil + default: + return "", &errortypes.BadServerResponse{ + Message: fmt.Sprintf("unsupported mtype %d for bid %s", bid.MType, bid.ID), + } + } +} diff --git a/adapters/ezoic/ezoic_test.go b/adapters/ezoic/ezoic_test.go new file mode 100644 index 000000000..0c9a24a95 --- /dev/null +++ b/adapters/ezoic/ezoic_test.go @@ -0,0 +1,57 @@ +package ezoic + +import ( + "testing" + + "github.com/prebid/openrtb/v20/openrtb2" + "github.com/prebid/prebid-server/v4/adapters" + "github.com/prebid/prebid-server/v4/adapters/adapterstest" + "github.com/prebid/prebid-server/v4/config" + "github.com/prebid/prebid-server/v4/openrtb_ext" + "github.com/stretchr/testify/assert" +) + +const testsBidderEndpoint = "https://g.ezoic.net/ezoic/prebid/adapter/ortb" + +func TestJsonSamples(t *testing.T) { + bidder, buildErr := Builder(openrtb_ext.BidderEzoic, config.Adapter{ + Endpoint: testsBidderEndpoint}, config.Server{}) + + if buildErr != nil { + t.Fatalf("Builder returned unexpected error %v", buildErr) + } + + adapterstest.RunJSONBidderTest(t, "ezoictest", bidder) +} + +func TestNoContentResponse(t *testing.T) { + bidder, buildErr := Builder(openrtb_ext.BidderEzoic, config.Adapter{ + Endpoint: testsBidderEndpoint}, config.Server{}) + if buildErr != nil { + t.Fatalf("Builder returned unexpected error %v", buildErr) + } + + bidResponse, errs := bidder.MakeBids(nil, nil, &adapters.ResponseData{StatusCode: 204}) + assert.Nil(t, bidResponse) + assert.Empty(t, errs) +} + +func TestGetMediaTypeForBid(t *testing.T) { + bidType, err := getMediaTypeForBid(openrtb2.Bid{MType: openrtb2.MarkupBanner}) + assert.NoError(t, err) + assert.Equal(t, openrtb_ext.BidTypeBanner, bidType) + + bidType, err = getMediaTypeForBid(openrtb2.Bid{MType: openrtb2.MarkupVideo}) + assert.NoError(t, err) + assert.Equal(t, openrtb_ext.BidTypeVideo, bidType) + + bidType, err = getMediaTypeForBid(openrtb2.Bid{MType: openrtb2.MarkupNative}) + assert.NoError(t, err) + assert.Equal(t, openrtb_ext.BidTypeNative, bidType) + + _, err = getMediaTypeForBid(openrtb2.Bid{ID: "no-mtype"}) + assert.Error(t, err) + + _, err = getMediaTypeForBid(openrtb2.Bid{ID: "audio", MType: openrtb2.MarkupAudio}) + assert.Error(t, err) +} diff --git a/adapters/ezoic/ezoictest/exemplary/simple-banner.json b/adapters/ezoic/ezoictest/exemplary/simple-banner.json new file mode 100644 index 000000000..7c3c29b29 --- /dev/null +++ b/adapters/ezoic/ezoictest/exemplary/simple-banner.json @@ -0,0 +1,124 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "tmax": 750, + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "device": { + "ua": "test-user-agent", + "ip": "203.0.113.9" + }, + "imp": [ + { + "id": "test-imp-id", + "tagid": "div-gpt-ad-1", + "bidfloor": 0.25, + "bidfloorcur": "USD", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + "placementId": "ezoic-placement-1" + } + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "tmax": 750, + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "device": { + "ua": "test-user-agent", + "ip": "203.0.113.9" + }, + "imp": [ + { + "id": "test-imp-id", + "tagid": "div-gpt-ad-1", + "bidfloor": 0.25, + "bidfloorcur": "USD", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + "placementId": "ezoic-placement-1" + } + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "cur": "USD", + "seatbid": [ + { + "seat": "ezoic", + "bid": [ + { + "id": "ezoic-bid-1", + "impid": "test-imp-id", + "price": 2.5, + "adm": "
ezoic-self-tracking-creative
", + "crid": "ezoic-creative-1", + "w": 300, + "h": 250, + "mtype": 1, + "exp": 300 + } + ] + } + ] + } + } + } + ], + "expectedBidResponses": [ + { + "currency": "USD", + "bids": [ + { + "bid": { + "id": "ezoic-bid-1", + "impid": "test-imp-id", + "price": 2.5, + "adm": "
ezoic-self-tracking-creative
", + "crid": "ezoic-creative-1", + "w": 300, + "h": 250, + "mtype": 1, + "exp": 300 + }, + "type": "banner" + } + ] + } + ] +} diff --git a/adapters/ezoic/ezoictest/exemplary/simple-native.json b/adapters/ezoic/ezoictest/exemplary/simple-native.json new file mode 100644 index 000000000..31a072cd6 --- /dev/null +++ b/adapters/ezoic/ezoictest/exemplary/simple-native.json @@ -0,0 +1,112 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "tmax": 750, + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "device": { + "ua": "test-user-agent", + "ip": "203.0.113.9" + }, + "imp": [ + { + "id": "test-imp-id", + "tagid": "div-gpt-ad-1", + "bidfloor": 0.25, + "bidfloorcur": "USD", + "native": { + "ver": "1.2", + "request": "{\"ver\":\"1.2\",\"context\":1,\"plcmttype\":4,\"plcmtcnt\":1,\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":90}},{\"id\":2,\"required\":1,\"img\":{\"type\":3,\"w\":1200,\"h\":627}}]}" + }, + "ext": { + "bidder": { + "placementId": "ezoic-placement-1" + } + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "tmax": 750, + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "device": { + "ua": "test-user-agent", + "ip": "203.0.113.9" + }, + "imp": [ + { + "id": "test-imp-id", + "tagid": "div-gpt-ad-1", + "bidfloor": 0.25, + "bidfloorcur": "USD", + "native": { + "ver": "1.2", + "request": "{\"ver\":\"1.2\",\"context\":1,\"plcmttype\":4,\"plcmtcnt\":1,\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":90}},{\"id\":2,\"required\":1,\"img\":{\"type\":3,\"w\":1200,\"h\":627}}]}" + }, + "ext": { + "bidder": { + "placementId": "ezoic-placement-1" + } + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "cur": "USD", + "seatbid": [ + { + "seat": "ezoic", + "bid": [ + { + "id": "ezoic-bid-1", + "impid": "test-imp-id", + "price": 1.75, + "adm": "{\"native\":{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"title\":{\"text\":\"ezoic native title\"}}],\"link\":{\"url\":\"https://example.com/click\"}}}", + "crid": "ezoic-creative-1", + "mtype": 4, + "exp": 300 + } + ] + } + ] + } + } + } + ], + "expectedBidResponses": [ + { + "currency": "USD", + "bids": [ + { + "bid": { + "id": "ezoic-bid-1", + "impid": "test-imp-id", + "price": 1.75, + "adm": "{\"native\":{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"title\":{\"text\":\"ezoic native title\"}}],\"link\":{\"url\":\"https://example.com/click\"}}}", + "crid": "ezoic-creative-1", + "mtype": 4, + "exp": 300 + }, + "type": "native" + } + ] + } + ] +} diff --git a/adapters/ezoic/ezoictest/exemplary/simple-video.json b/adapters/ezoic/ezoictest/exemplary/simple-video.json new file mode 100644 index 000000000..6db45edc5 --- /dev/null +++ b/adapters/ezoic/ezoictest/exemplary/simple-video.json @@ -0,0 +1,138 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "tmax": 750, + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "device": { + "ua": "test-user-agent", + "ip": "203.0.113.9" + }, + "imp": [ + { + "id": "test-imp-id", + "tagid": "div-gpt-ad-1", + "bidfloor": 0.25, + "bidfloorcur": "USD", + "video": { + "mimes": [ + "video/mp4" + ], + "protocols": [ + 2, + 3, + 5, + 6 + ], + "w": 640, + "h": 480, + "minduration": 5, + "maxduration": 30 + }, + "ext": { + "bidder": { + "placementId": "ezoic-placement-1" + } + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "tmax": 750, + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "device": { + "ua": "test-user-agent", + "ip": "203.0.113.9" + }, + "imp": [ + { + "id": "test-imp-id", + "tagid": "div-gpt-ad-1", + "bidfloor": 0.25, + "bidfloorcur": "USD", + "video": { + "mimes": [ + "video/mp4" + ], + "protocols": [ + 2, + 3, + 5, + 6 + ], + "w": 640, + "h": 480, + "minduration": 5, + "maxduration": 30 + }, + "ext": { + "bidder": { + "placementId": "ezoic-placement-1" + } + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "cur": "USD", + "seatbid": [ + { + "seat": "ezoic", + "bid": [ + { + "id": "ezoic-bid-1", + "impid": "test-imp-id", + "price": 4.5, + "adm": "", + "crid": "ezoic-creative-1", + "w": 640, + "h": 480, + "mtype": 2, + "exp": 300 + } + ] + } + ] + } + } + } + ], + "expectedBidResponses": [ + { + "currency": "USD", + "bids": [ + { + "bid": { + "id": "ezoic-bid-1", + "impid": "test-imp-id", + "price": 4.5, + "adm": "", + "crid": "ezoic-creative-1", + "w": 640, + "h": 480, + "mtype": 2, + "exp": 300 + }, + "type": "video" + } + ] + } + ] +} diff --git a/adapters/ezoic/ezoictest/supplemental/invalid-response.json b/adapters/ezoic/ezoictest/supplemental/invalid-response.json new file mode 100644 index 000000000..adcb3c100 --- /dev/null +++ b/adapters/ezoic/ezoictest/supplemental/invalid-response.json @@ -0,0 +1,69 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 200, + "body": "invalid response" + } + } + ], + "expectedBidResponses": [], + "expectedMakeBidsErrors": [ + { + "value": "expect", + "comparison": "regex" + } + ] +} diff --git a/adapters/ezoic/ezoictest/supplemental/status-204.json b/adapters/ezoic/ezoictest/supplemental/status-204.json new file mode 100644 index 000000000..2c60ef485 --- /dev/null +++ b/adapters/ezoic/ezoictest/supplemental/status-204.json @@ -0,0 +1,63 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 204, + "body": {} + } + } + ], + "expectedBidResponses": [] +} diff --git a/adapters/ezoic/ezoictest/supplemental/status-400.json b/adapters/ezoic/ezoictest/supplemental/status-400.json new file mode 100644 index 000000000..8d156eb86 --- /dev/null +++ b/adapters/ezoic/ezoictest/supplemental/status-400.json @@ -0,0 +1,69 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 400, + "body": {} + } + } + ], + "expectedBidResponses": [], + "expectedMakeBidsErrors": [ + { + "value": "Unexpected status code: 400. Run with request.debug = 1 for more info", + "comparison": "literal" + } + ] +} diff --git a/adapters/ezoic/ezoictest/supplemental/status-500.json b/adapters/ezoic/ezoictest/supplemental/status-500.json new file mode 100644 index 000000000..1d0b41829 --- /dev/null +++ b/adapters/ezoic/ezoictest/supplemental/status-500.json @@ -0,0 +1,69 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 500, + "body": {} + } + } + ], + "expectedBidResponses": [], + "expectedMakeBidsErrors": [ + { + "value": "Unexpected status code: 500. Run with request.debug = 1 for more info", + "comparison": "literal" + } + ] +} diff --git a/adapters/ezoic/ezoictest/supplemental/unsupported-mtype.json b/adapters/ezoic/ezoictest/supplemental/unsupported-mtype.json new file mode 100644 index 000000000..39d7506d6 --- /dev/null +++ b/adapters/ezoic/ezoictest/supplemental/unsupported-mtype.json @@ -0,0 +1,117 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://g.ezoic.net/ezoic/prebid/adapter/ortb", + "body": { + "id": "test-request-id", + "site": { + "page": "https://example.com/article", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": {} + } + } + ] + }, + "impIDs": [ + "test-imp-id" + ] + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "cur": "USD", + "seatbid": [ + { + "seat": "ezoic", + "bid": [ + { + "id": "ezoic-bid-good", + "impid": "test-imp-id", + "price": 1.25, + "adm": "
creative
", + "crid": "ezoic-creative-1", + "w": 300, + "h": 250, + "mtype": 1 + }, + { + "id": "ezoic-bid-no-mtype", + "impid": "test-imp-id", + "price": 9.99, + "adm": "
creative
", + "crid": "ezoic-creative-2", + "w": 300, + "h": 250 + } + ] + } + ] + } + } + } + ], + "expectedBidResponses": [ + { + "currency": "USD", + "bids": [ + { + "bid": { + "id": "ezoic-bid-good", + "impid": "test-imp-id", + "price": 1.25, + "adm": "
creative
", + "crid": "ezoic-creative-1", + "w": 300, + "h": 250, + "mtype": 1 + }, + "type": "banner" + } + ] + } + ], + "expectedMakeBidsErrors": [ + { + "value": "unsupported mtype 0 for bid ezoic-bid-no-mtype", + "comparison": "literal" + } + ] +} diff --git a/adapters/ezoic/params_test.go b/adapters/ezoic/params_test.go new file mode 100644 index 000000000..91994fe4c --- /dev/null +++ b/adapters/ezoic/params_test.go @@ -0,0 +1,52 @@ +package ezoic + +import ( + "encoding/json" + "testing" + + "github.com/prebid/prebid-server/v4/openrtb_ext" +) + +// This file intends to test static/bidder-params/ezoic.json +// +// These also validate the format of the external API: request.imp[i].ext.prebid.bidder.ezoic + +func TestValidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, validParam := range validParams { + if err := validator.Validate(openrtb_ext.BidderEzoic, json.RawMessage(validParam)); err != nil { + t.Errorf("Schema rejected ezoic params: %s", validParam) + } + } +} + +func TestInvalidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, invalidParam := range invalidParams { + if err := validator.Validate(openrtb_ext.BidderEzoic, json.RawMessage(invalidParam)); err == nil { + t.Errorf("Schema allowed unexpected params: %s", invalidParam) + } + } +} + +var validParams = []string{ + `{}`, + `{"placementId": "ezoic-placement-1"}`, +} + +var invalidParams = []string{ + `null`, + `true`, + `[]`, + `"placementId"`, + `{"placementId": 12345}`, + `{"placementId": true}`, +} diff --git a/exchange/adapter_builders.go b/exchange/adapter_builders.go index fa1ea996f..17b7ae4c2 100755 --- a/exchange/adapter_builders.go +++ b/exchange/adapter_builders.go @@ -1,263 +1,275 @@ package exchange import ( - "github.com/prebid/prebid-server/v3/adapters" - ttx "github.com/prebid/prebid-server/v3/adapters/33across" - "github.com/prebid/prebid-server/v3/adapters/aax" - "github.com/prebid/prebid-server/v3/adapters/aceex" - "github.com/prebid/prebid-server/v3/adapters/acuityads" - "github.com/prebid/prebid-server/v3/adapters/adagio" - "github.com/prebid/prebid-server/v3/adapters/adelement" - "github.com/prebid/prebid-server/v3/adapters/adf" - "github.com/prebid/prebid-server/v3/adapters/adgeneration" - "github.com/prebid/prebid-server/v3/adapters/adhese" - "github.com/prebid/prebid-server/v3/adapters/adkernel" - "github.com/prebid/prebid-server/v3/adapters/adkernelAdn" - "github.com/prebid/prebid-server/v3/adapters/adman" - "github.com/prebid/prebid-server/v3/adapters/admatic" - "github.com/prebid/prebid-server/v3/adapters/admixer" - "github.com/prebid/prebid-server/v3/adapters/adnuntius" - "github.com/prebid/prebid-server/v3/adapters/adocean" - "github.com/prebid/prebid-server/v3/adapters/adoppler" - "github.com/prebid/prebid-server/v3/adapters/adot" - "github.com/prebid/prebid-server/v3/adapters/adpone" - "github.com/prebid/prebid-server/v3/adapters/adprime" - "github.com/prebid/prebid-server/v3/adapters/adquery" - "github.com/prebid/prebid-server/v3/adapters/adrino" - "github.com/prebid/prebid-server/v3/adapters/ads_interactive" - "github.com/prebid/prebid-server/v3/adapters/adsinteractive" - "github.com/prebid/prebid-server/v3/adapters/adtarget" - "github.com/prebid/prebid-server/v3/adapters/adtelligent" - "github.com/prebid/prebid-server/v3/adapters/adtonos" - "github.com/prebid/prebid-server/v3/adapters/adtrgtme" - "github.com/prebid/prebid-server/v3/adapters/aduptech" - "github.com/prebid/prebid-server/v3/adapters/advangelists" - "github.com/prebid/prebid-server/v3/adapters/adverxo" - "github.com/prebid/prebid-server/v3/adapters/adview" - "github.com/prebid/prebid-server/v3/adapters/adxcg" - "github.com/prebid/prebid-server/v3/adapters/adyoulike" - "github.com/prebid/prebid-server/v3/adapters/afront" - "github.com/prebid/prebid-server/v3/adapters/aidem" - "github.com/prebid/prebid-server/v3/adapters/aja" - "github.com/prebid/prebid-server/v3/adapters/akcelo" - "github.com/prebid/prebid-server/v3/adapters/algorix" - "github.com/prebid/prebid-server/v3/adapters/alkimi" - "github.com/prebid/prebid-server/v3/adapters/amx" - "github.com/prebid/prebid-server/v3/adapters/apacdex" - "github.com/prebid/prebid-server/v3/adapters/appnexus" - "github.com/prebid/prebid-server/v3/adapters/appush" - "github.com/prebid/prebid-server/v3/adapters/aso" - "github.com/prebid/prebid-server/v3/adapters/audienceNetwork" - "github.com/prebid/prebid-server/v3/adapters/automatad" - "github.com/prebid/prebid-server/v3/adapters/avocet" - "github.com/prebid/prebid-server/v3/adapters/axis" - "github.com/prebid/prebid-server/v3/adapters/axonix" - "github.com/prebid/prebid-server/v3/adapters/beachfront" - "github.com/prebid/prebid-server/v3/adapters/beintoo" - "github.com/prebid/prebid-server/v3/adapters/bematterfull" - "github.com/prebid/prebid-server/v3/adapters/between" - "github.com/prebid/prebid-server/v3/adapters/beyondmedia" - "github.com/prebid/prebid-server/v3/adapters/bidmachine" - "github.com/prebid/prebid-server/v3/adapters/bidmatic" - "github.com/prebid/prebid-server/v3/adapters/bidmyadz" - "github.com/prebid/prebid-server/v3/adapters/bidscube" - "github.com/prebid/prebid-server/v3/adapters/bidstack" - "github.com/prebid/prebid-server/v3/adapters/bidtheatre" - "github.com/prebid/prebid-server/v3/adapters/bigoad" - "github.com/prebid/prebid-server/v3/adapters/blasto" - "github.com/prebid/prebid-server/v3/adapters/bliink" - "github.com/prebid/prebid-server/v3/adapters/blis" - "github.com/prebid/prebid-server/v3/adapters/blue" - "github.com/prebid/prebid-server/v3/adapters/bluesea" - "github.com/prebid/prebid-server/v3/adapters/bmtm" - "github.com/prebid/prebid-server/v3/adapters/boldwin" - "github.com/prebid/prebid-server/v3/adapters/brave" - "github.com/prebid/prebid-server/v3/adapters/bwx" - cadentaperturemx "github.com/prebid/prebid-server/v3/adapters/cadent_aperture_mx" - "github.com/prebid/prebid-server/v3/adapters/ccx" - "github.com/prebid/prebid-server/v3/adapters/cointraffic" - "github.com/prebid/prebid-server/v3/adapters/coinzilla" - "github.com/prebid/prebid-server/v3/adapters/colossus" - "github.com/prebid/prebid-server/v3/adapters/compass" - "github.com/prebid/prebid-server/v3/adapters/concert" - "github.com/prebid/prebid-server/v3/adapters/connatix" - "github.com/prebid/prebid-server/v3/adapters/connectad" - "github.com/prebid/prebid-server/v3/adapters/consumable" - "github.com/prebid/prebid-server/v3/adapters/conversant" - "github.com/prebid/prebid-server/v3/adapters/copper6ssp" - "github.com/prebid/prebid-server/v3/adapters/cpmstar" - "github.com/prebid/prebid-server/v3/adapters/criteo" - "github.com/prebid/prebid-server/v3/adapters/cwire" - "github.com/prebid/prebid-server/v3/adapters/datablocks" - "github.com/prebid/prebid-server/v3/adapters/decenterads" - "github.com/prebid/prebid-server/v3/adapters/deepintent" - "github.com/prebid/prebid-server/v3/adapters/definemedia" - "github.com/prebid/prebid-server/v3/adapters/dianomi" - "github.com/prebid/prebid-server/v3/adapters/displayio" - "github.com/prebid/prebid-server/v3/adapters/dmx" - "github.com/prebid/prebid-server/v3/adapters/driftpixel" - "github.com/prebid/prebid-server/v3/adapters/dxkulture" - evolution "github.com/prebid/prebid-server/v3/adapters/e_volution" - "github.com/prebid/prebid-server/v3/adapters/edge226" - "github.com/prebid/prebid-server/v3/adapters/emtv" - "github.com/prebid/prebid-server/v3/adapters/eplanning" - "github.com/prebid/prebid-server/v3/adapters/epom" - "github.com/prebid/prebid-server/v3/adapters/escalax" - "github.com/prebid/prebid-server/v3/adapters/exco" - "github.com/prebid/prebid-server/v3/adapters/feedad" - "github.com/prebid/prebid-server/v3/adapters/flatads" - "github.com/prebid/prebid-server/v3/adapters/flipp" - "github.com/prebid/prebid-server/v3/adapters/freewheelssp" - "github.com/prebid/prebid-server/v3/adapters/frvradn" - "github.com/prebid/prebid-server/v3/adapters/fwssp" - "github.com/prebid/prebid-server/v3/adapters/gamma" - "github.com/prebid/prebid-server/v3/adapters/gamoshi" - "github.com/prebid/prebid-server/v3/adapters/globalsun" - "github.com/prebid/prebid-server/v3/adapters/gothamads" - "github.com/prebid/prebid-server/v3/adapters/grid" - "github.com/prebid/prebid-server/v3/adapters/gumgum" - "github.com/prebid/prebid-server/v3/adapters/huaweiads" - "github.com/prebid/prebid-server/v3/adapters/imds" - "github.com/prebid/prebid-server/v3/adapters/impactify" - "github.com/prebid/prebid-server/v3/adapters/improvedigital" - "github.com/prebid/prebid-server/v3/adapters/infytv" - "github.com/prebid/prebid-server/v3/adapters/inmobi" - "github.com/prebid/prebid-server/v3/adapters/insticator" - "github.com/prebid/prebid-server/v3/adapters/interactiveoffers" - "github.com/prebid/prebid-server/v3/adapters/intertech" - "github.com/prebid/prebid-server/v3/adapters/invibes" - "github.com/prebid/prebid-server/v3/adapters/iqx" - "github.com/prebid/prebid-server/v3/adapters/iqzone" - "github.com/prebid/prebid-server/v3/adapters/ix" - "github.com/prebid/prebid-server/v3/adapters/jixie" - "github.com/prebid/prebid-server/v3/adapters/kargo" - "github.com/prebid/prebid-server/v3/adapters/kayzen" - "github.com/prebid/prebid-server/v3/adapters/kidoz" - "github.com/prebid/prebid-server/v3/adapters/kiviads" - "github.com/prebid/prebid-server/v3/adapters/kobler" - "github.com/prebid/prebid-server/v3/adapters/krushmedia" - "github.com/prebid/prebid-server/v3/adapters/kueezrtb" - "github.com/prebid/prebid-server/v3/adapters/lemmadigital" - "github.com/prebid/prebid-server/v3/adapters/limelightDigital" - lmkiviads "github.com/prebid/prebid-server/v3/adapters/lm_kiviads" - "github.com/prebid/prebid-server/v3/adapters/lockerdome" - "github.com/prebid/prebid-server/v3/adapters/logan" - "github.com/prebid/prebid-server/v3/adapters/logicad" - "github.com/prebid/prebid-server/v3/adapters/loopme" - "github.com/prebid/prebid-server/v3/adapters/loyal" - "github.com/prebid/prebid-server/v3/adapters/lunamedia" - "github.com/prebid/prebid-server/v3/adapters/mabidder" - "github.com/prebid/prebid-server/v3/adapters/madsense" - "github.com/prebid/prebid-server/v3/adapters/madvertise" - "github.com/prebid/prebid-server/v3/adapters/marsmedia" - "github.com/prebid/prebid-server/v3/adapters/mediago" - "github.com/prebid/prebid-server/v3/adapters/medianet" - "github.com/prebid/prebid-server/v3/adapters/mediasquare" - "github.com/prebid/prebid-server/v3/adapters/melozen" - "github.com/prebid/prebid-server/v3/adapters/metax" - "github.com/prebid/prebid-server/v3/adapters/mgid" - "github.com/prebid/prebid-server/v3/adapters/mgidX" - "github.com/prebid/prebid-server/v3/adapters/minutemedia" - "github.com/prebid/prebid-server/v3/adapters/missena" - "github.com/prebid/prebid-server/v3/adapters/mobfoxpb" - "github.com/prebid/prebid-server/v3/adapters/mobilefuse" - "github.com/prebid/prebid-server/v3/adapters/mobkoi" - "github.com/prebid/prebid-server/v3/adapters/motorik" - "github.com/prebid/prebid-server/v3/adapters/nativo" - "github.com/prebid/prebid-server/v3/adapters/nextmillennium" - "github.com/prebid/prebid-server/v3/adapters/nexx360" - "github.com/prebid/prebid-server/v3/adapters/nobid" - "github.com/prebid/prebid-server/v3/adapters/ogury" - "github.com/prebid/prebid-server/v3/adapters/oms" - "github.com/prebid/prebid-server/v3/adapters/onetag" - "github.com/prebid/prebid-server/v3/adapters/openweb" - "github.com/prebid/prebid-server/v3/adapters/openx" - "github.com/prebid/prebid-server/v3/adapters/operaads" - "github.com/prebid/prebid-server/v3/adapters/optidigital" - "github.com/prebid/prebid-server/v3/adapters/oraki" - "github.com/prebid/prebid-server/v3/adapters/orbidder" - "github.com/prebid/prebid-server/v3/adapters/outbrain" - "github.com/prebid/prebid-server/v3/adapters/ownadx" - "github.com/prebid/prebid-server/v3/adapters/pangle" - "github.com/prebid/prebid-server/v3/adapters/pgamssp" - "github.com/prebid/prebid-server/v3/adapters/playdigo" - "github.com/prebid/prebid-server/v3/adapters/pubmatic" - "github.com/prebid/prebid-server/v3/adapters/pubnative" - "github.com/prebid/prebid-server/v3/adapters/pubrise" - "github.com/prebid/prebid-server/v3/adapters/pulsepoint" - "github.com/prebid/prebid-server/v3/adapters/pwbid" - "github.com/prebid/prebid-server/v3/adapters/qt" - "github.com/prebid/prebid-server/v3/adapters/readpeak" - "github.com/prebid/prebid-server/v3/adapters/rediads" - "github.com/prebid/prebid-server/v3/adapters/relevantdigital" - "github.com/prebid/prebid-server/v3/adapters/resetdigital" - "github.com/prebid/prebid-server/v3/adapters/revcontent" - "github.com/prebid/prebid-server/v3/adapters/richaudience" - "github.com/prebid/prebid-server/v3/adapters/rise" - "github.com/prebid/prebid-server/v3/adapters/roulax" - "github.com/prebid/prebid-server/v3/adapters/rtbhouse" - "github.com/prebid/prebid-server/v3/adapters/rubicon" - salunamedia "github.com/prebid/prebid-server/v3/adapters/sa_lunamedia" - "github.com/prebid/prebid-server/v3/adapters/screencore" - "github.com/prebid/prebid-server/v3/adapters/seedingAlliance" - "github.com/prebid/prebid-server/v3/adapters/seedtag" - "github.com/prebid/prebid-server/v3/adapters/sharethrough" - "github.com/prebid/prebid-server/v3/adapters/silvermob" - "github.com/prebid/prebid-server/v3/adapters/silverpush" - "github.com/prebid/prebid-server/v3/adapters/smaato" - "github.com/prebid/prebid-server/v3/adapters/smartadserver" - "github.com/prebid/prebid-server/v3/adapters/smarthub" - "github.com/prebid/prebid-server/v3/adapters/smartrtb" - "github.com/prebid/prebid-server/v3/adapters/smartx" - "github.com/prebid/prebid-server/v3/adapters/smartyads" - "github.com/prebid/prebid-server/v3/adapters/smilewanted" - "github.com/prebid/prebid-server/v3/adapters/smoot" - "github.com/prebid/prebid-server/v3/adapters/smrtconnect" - "github.com/prebid/prebid-server/v3/adapters/sonobi" - "github.com/prebid/prebid-server/v3/adapters/sovrn" - "github.com/prebid/prebid-server/v3/adapters/sovrnXsp" - "github.com/prebid/prebid-server/v3/adapters/sparteo" - "github.com/prebid/prebid-server/v3/adapters/sspBC" - "github.com/prebid/prebid-server/v3/adapters/startio" - "github.com/prebid/prebid-server/v3/adapters/stroeerCore" - "github.com/prebid/prebid-server/v3/adapters/taboola" - "github.com/prebid/prebid-server/v3/adapters/tappx" - "github.com/prebid/prebid-server/v3/adapters/teads" - "github.com/prebid/prebid-server/v3/adapters/telaria" - "github.com/prebid/prebid-server/v3/adapters/teqblaze" - "github.com/prebid/prebid-server/v3/adapters/theadx" - "github.com/prebid/prebid-server/v3/adapters/thetradedesk" - "github.com/prebid/prebid-server/v3/adapters/tpmn" - "github.com/prebid/prebid-server/v3/adapters/tradplus" - "github.com/prebid/prebid-server/v3/adapters/trafficgate" - "github.com/prebid/prebid-server/v3/adapters/triplelift" - "github.com/prebid/prebid-server/v3/adapters/triplelift_native" - "github.com/prebid/prebid-server/v3/adapters/trustedstack" - "github.com/prebid/prebid-server/v3/adapters/ucfunnel" - "github.com/prebid/prebid-server/v3/adapters/undertone" - "github.com/prebid/prebid-server/v3/adapters/unicorn" - "github.com/prebid/prebid-server/v3/adapters/unruly" - "github.com/prebid/prebid-server/v3/adapters/vidazoo" - "github.com/prebid/prebid-server/v3/adapters/videobyte" - "github.com/prebid/prebid-server/v3/adapters/videoheroes" - "github.com/prebid/prebid-server/v3/adapters/vidoomy" - "github.com/prebid/prebid-server/v3/adapters/visiblemeasures" - "github.com/prebid/prebid-server/v3/adapters/visx" - "github.com/prebid/prebid-server/v3/adapters/vox" - "github.com/prebid/prebid-server/v3/adapters/vrtcal" - "github.com/prebid/prebid-server/v3/adapters/vungle" - "github.com/prebid/prebid-server/v3/adapters/xeworks" - "github.com/prebid/prebid-server/v3/adapters/yahooAds" - "github.com/prebid/prebid-server/v3/adapters/yandex" - "github.com/prebid/prebid-server/v3/adapters/yeahmobi" - "github.com/prebid/prebid-server/v3/adapters/yieldlab" - "github.com/prebid/prebid-server/v3/adapters/yieldmo" - "github.com/prebid/prebid-server/v3/adapters/yieldone" - "github.com/prebid/prebid-server/v3/adapters/zentotem" - "github.com/prebid/prebid-server/v3/adapters/zeroclickfraud" - "github.com/prebid/prebid-server/v3/adapters/zeta_global_ssp" - "github.com/prebid/prebid-server/v3/adapters/zmaticoo" - "github.com/prebid/prebid-server/v3/openrtb_ext" + "github.com/prebid/prebid-server/v4/adapters" + ttx "github.com/prebid/prebid-server/v4/adapters/33across" + "github.com/prebid/prebid-server/v4/adapters/aax" + "github.com/prebid/prebid-server/v4/adapters/aceex" + "github.com/prebid/prebid-server/v4/adapters/acuityads" + "github.com/prebid/prebid-server/v4/adapters/adagio" + "github.com/prebid/prebid-server/v4/adapters/adelement" + "github.com/prebid/prebid-server/v4/adapters/adf" + "github.com/prebid/prebid-server/v4/adapters/adgeneration" + "github.com/prebid/prebid-server/v4/adapters/adhese" + "github.com/prebid/prebid-server/v4/adapters/adkernel" + "github.com/prebid/prebid-server/v4/adapters/adkernelAdn" + "github.com/prebid/prebid-server/v4/adapters/adman" + "github.com/prebid/prebid-server/v4/adapters/admatic" + "github.com/prebid/prebid-server/v4/adapters/admixer" + "github.com/prebid/prebid-server/v4/adapters/adnuntius" + "github.com/prebid/prebid-server/v4/adapters/adot" + "github.com/prebid/prebid-server/v4/adapters/adpone" + "github.com/prebid/prebid-server/v4/adapters/adprime" + "github.com/prebid/prebid-server/v4/adapters/adquery" + "github.com/prebid/prebid-server/v4/adapters/adrino" + "github.com/prebid/prebid-server/v4/adapters/adtarget" + "github.com/prebid/prebid-server/v4/adapters/adtelligent" + "github.com/prebid/prebid-server/v4/adapters/adtonos" + "github.com/prebid/prebid-server/v4/adapters/adtrgtme" + "github.com/prebid/prebid-server/v4/adapters/aduptech" + "github.com/prebid/prebid-server/v4/adapters/advangelists" + "github.com/prebid/prebid-server/v4/adapters/adverxo" + "github.com/prebid/prebid-server/v4/adapters/adview" + "github.com/prebid/prebid-server/v4/adapters/adxcg" + "github.com/prebid/prebid-server/v4/adapters/adyoulike" + "github.com/prebid/prebid-server/v4/adapters/afront" + "github.com/prebid/prebid-server/v4/adapters/aidem" + "github.com/prebid/prebid-server/v4/adapters/aja" + "github.com/prebid/prebid-server/v4/adapters/akcelo" + "github.com/prebid/prebid-server/v4/adapters/algorix" + "github.com/prebid/prebid-server/v4/adapters/alkimi" + alliance_gravity "github.com/prebid/prebid-server/v4/adapters/alliance_gravity" + "github.com/prebid/prebid-server/v4/adapters/amx" + "github.com/prebid/prebid-server/v4/adapters/apacdex" + "github.com/prebid/prebid-server/v4/adapters/appnexus" + "github.com/prebid/prebid-server/v4/adapters/appush" + "github.com/prebid/prebid-server/v4/adapters/aso" + "github.com/prebid/prebid-server/v4/adapters/audienceNetwork" + "github.com/prebid/prebid-server/v4/adapters/automatad" + "github.com/prebid/prebid-server/v4/adapters/avocet" + "github.com/prebid/prebid-server/v4/adapters/axis" + "github.com/prebid/prebid-server/v4/adapters/axonix" + "github.com/prebid/prebid-server/v4/adapters/beachfront" + "github.com/prebid/prebid-server/v4/adapters/beintoo" + "github.com/prebid/prebid-server/v4/adapters/bematterfull" + "github.com/prebid/prebid-server/v4/adapters/beop" + "github.com/prebid/prebid-server/v4/adapters/between" + "github.com/prebid/prebid-server/v4/adapters/beyondmedia" + "github.com/prebid/prebid-server/v4/adapters/bidmachine" + "github.com/prebid/prebid-server/v4/adapters/bidmatic" + "github.com/prebid/prebid-server/v4/adapters/bidmyadz" + "github.com/prebid/prebid-server/v4/adapters/bidscube" + "github.com/prebid/prebid-server/v4/adapters/bidstack" + "github.com/prebid/prebid-server/v4/adapters/bidtheatre" + "github.com/prebid/prebid-server/v4/adapters/bigoad" + "github.com/prebid/prebid-server/v4/adapters/blasto" + "github.com/prebid/prebid-server/v4/adapters/bliink" + "github.com/prebid/prebid-server/v4/adapters/blis" + "github.com/prebid/prebid-server/v4/adapters/blue" + "github.com/prebid/prebid-server/v4/adapters/bluesea" + "github.com/prebid/prebid-server/v4/adapters/bmtm" + "github.com/prebid/prebid-server/v4/adapters/boldwin" + "github.com/prebid/prebid-server/v4/adapters/boldwin_rapid" + "github.com/prebid/prebid-server/v4/adapters/brave" + "github.com/prebid/prebid-server/v4/adapters/bwx" + cadentaperturemx "github.com/prebid/prebid-server/v4/adapters/cadent_aperture_mx" + "github.com/prebid/prebid-server/v4/adapters/ccx" + "github.com/prebid/prebid-server/v4/adapters/clydo" + "github.com/prebid/prebid-server/v4/adapters/cointraffic" + "github.com/prebid/prebid-server/v4/adapters/coinzilla" + "github.com/prebid/prebid-server/v4/adapters/colossus" + "github.com/prebid/prebid-server/v4/adapters/compass" + "github.com/prebid/prebid-server/v4/adapters/concert" + "github.com/prebid/prebid-server/v4/adapters/connatix" + "github.com/prebid/prebid-server/v4/adapters/connectad" + "github.com/prebid/prebid-server/v4/adapters/consumable" + "github.com/prebid/prebid-server/v4/adapters/contxtful" + "github.com/prebid/prebid-server/v4/adapters/conversant" + "github.com/prebid/prebid-server/v4/adapters/copper6ssp" + "github.com/prebid/prebid-server/v4/adapters/cpmstar" + "github.com/prebid/prebid-server/v4/adapters/criteo" + "github.com/prebid/prebid-server/v4/adapters/cwire" + "github.com/prebid/prebid-server/v4/adapters/datablocks" + "github.com/prebid/prebid-server/v4/adapters/decenterads" + "github.com/prebid/prebid-server/v4/adapters/deepintent" + "github.com/prebid/prebid-server/v4/adapters/definemedia" + "github.com/prebid/prebid-server/v4/adapters/dianomi" + "github.com/prebid/prebid-server/v4/adapters/displayio" + "github.com/prebid/prebid-server/v4/adapters/dmx" + "github.com/prebid/prebid-server/v4/adapters/driftpixel" + evolution "github.com/prebid/prebid-server/v4/adapters/e_volution" + "github.com/prebid/prebid-server/v4/adapters/edge226" + "github.com/prebid/prebid-server/v4/adapters/elementaltv" + "github.com/prebid/prebid-server/v4/adapters/emtv" + "github.com/prebid/prebid-server/v4/adapters/eplanning" + "github.com/prebid/prebid-server/v4/adapters/epom" + "github.com/prebid/prebid-server/v4/adapters/escalax" + "github.com/prebid/prebid-server/v4/adapters/eskimi" + "github.com/prebid/prebid-server/v4/adapters/exco" + "github.com/prebid/prebid-server/v4/adapters/ezoic" + "github.com/prebid/prebid-server/v4/adapters/feedad" + "github.com/prebid/prebid-server/v4/adapters/flatads" + "github.com/prebid/prebid-server/v4/adapters/flipp" + "github.com/prebid/prebid-server/v4/adapters/freewheelssp" + "github.com/prebid/prebid-server/v4/adapters/frvradn" + "github.com/prebid/prebid-server/v4/adapters/fwssp" + "github.com/prebid/prebid-server/v4/adapters/gamma" + "github.com/prebid/prebid-server/v4/adapters/gamoshi" + "github.com/prebid/prebid-server/v4/adapters/globalsun" + "github.com/prebid/prebid-server/v4/adapters/goldbach" + "github.com/prebid/prebid-server/v4/adapters/grid" + "github.com/prebid/prebid-server/v4/adapters/gumgum" + "github.com/prebid/prebid-server/v4/adapters/huaweiads" + "github.com/prebid/prebid-server/v4/adapters/imds" + "github.com/prebid/prebid-server/v4/adapters/impactify" + "github.com/prebid/prebid-server/v4/adapters/improvedigital" + "github.com/prebid/prebid-server/v4/adapters/infytv" + "github.com/prebid/prebid-server/v4/adapters/inmobi" + "github.com/prebid/prebid-server/v4/adapters/insticator" + "github.com/prebid/prebid-server/v4/adapters/intenze" + "github.com/prebid/prebid-server/v4/adapters/interactiveoffers" + "github.com/prebid/prebid-server/v4/adapters/invibes" + "github.com/prebid/prebid-server/v4/adapters/iqx" + "github.com/prebid/prebid-server/v4/adapters/iqzone" + "github.com/prebid/prebid-server/v4/adapters/ix" + "github.com/prebid/prebid-server/v4/adapters/jixie" + "github.com/prebid/prebid-server/v4/adapters/kargo" + "github.com/prebid/prebid-server/v4/adapters/kayzen" + "github.com/prebid/prebid-server/v4/adapters/kidoz" + "github.com/prebid/prebid-server/v4/adapters/kiviads" + "github.com/prebid/prebid-server/v4/adapters/kobler" + "github.com/prebid/prebid-server/v4/adapters/krushmedia" + "github.com/prebid/prebid-server/v4/adapters/kueezrtb" + "github.com/prebid/prebid-server/v4/adapters/lemmadigital" + "github.com/prebid/prebid-server/v4/adapters/limelightDigital" + lmkiviads "github.com/prebid/prebid-server/v4/adapters/lm_kiviads" + "github.com/prebid/prebid-server/v4/adapters/lockerdome" + "github.com/prebid/prebid-server/v4/adapters/logan" + "github.com/prebid/prebid-server/v4/adapters/logicad" + "github.com/prebid/prebid-server/v4/adapters/loopme" + "github.com/prebid/prebid-server/v4/adapters/loyal" + "github.com/prebid/prebid-server/v4/adapters/lunamedia" + "github.com/prebid/prebid-server/v4/adapters/mabidder" + "github.com/prebid/prebid-server/v4/adapters/madsense" + "github.com/prebid/prebid-server/v4/adapters/madvertise" + "github.com/prebid/prebid-server/v4/adapters/marsmedia" + "github.com/prebid/prebid-server/v4/adapters/mediago" + "github.com/prebid/prebid-server/v4/adapters/medianet" + "github.com/prebid/prebid-server/v4/adapters/mediasquare" + "github.com/prebid/prebid-server/v4/adapters/melozen" + "github.com/prebid/prebid-server/v4/adapters/metax" + "github.com/prebid/prebid-server/v4/adapters/mgid" + "github.com/prebid/prebid-server/v4/adapters/mgidX" + "github.com/prebid/prebid-server/v4/adapters/minutemedia" + "github.com/prebid/prebid-server/v4/adapters/missena" + "github.com/prebid/prebid-server/v4/adapters/mobfoxpb" + "github.com/prebid/prebid-server/v4/adapters/mobilefuse" + "github.com/prebid/prebid-server/v4/adapters/mobkoi" + "github.com/prebid/prebid-server/v4/adapters/motorik" + "github.com/prebid/prebid-server/v4/adapters/msft" + "github.com/prebid/prebid-server/v4/adapters/nativery" + "github.com/prebid/prebid-server/v4/adapters/nativo" + "github.com/prebid/prebid-server/v4/adapters/nextmillennium" + "github.com/prebid/prebid-server/v4/adapters/nexx360" + "github.com/prebid/prebid-server/v4/adapters/nobid" + "github.com/prebid/prebid-server/v4/adapters/ogury" + "github.com/prebid/prebid-server/v4/adapters/oms" + "github.com/prebid/prebid-server/v4/adapters/onetag" + "github.com/prebid/prebid-server/v4/adapters/openweb" + "github.com/prebid/prebid-server/v4/adapters/openx" + "github.com/prebid/prebid-server/v4/adapters/operaads" + "github.com/prebid/prebid-server/v4/adapters/optidigital" + "github.com/prebid/prebid-server/v4/adapters/oraki" + "github.com/prebid/prebid-server/v4/adapters/orbidder" + "github.com/prebid/prebid-server/v4/adapters/outbrain" + "github.com/prebid/prebid-server/v4/adapters/ownadx" + "github.com/prebid/prebid-server/v4/adapters/pangle" + "github.com/prebid/prebid-server/v4/adapters/pgamssp" + "github.com/prebid/prebid-server/v4/adapters/playdigo" + "github.com/prebid/prebid-server/v4/adapters/pubmatic" + "github.com/prebid/prebid-server/v4/adapters/pubnative" + "github.com/prebid/prebid-server/v4/adapters/pubrise" + "github.com/prebid/prebid-server/v4/adapters/pulsepoint" + "github.com/prebid/prebid-server/v4/adapters/pwbid" + "github.com/prebid/prebid-server/v4/adapters/qt" + "github.com/prebid/prebid-server/v4/adapters/readpeak" + "github.com/prebid/prebid-server/v4/adapters/rediads" + "github.com/prebid/prebid-server/v4/adapters/relevantdigital" + "github.com/prebid/prebid-server/v4/adapters/resetdigital" + "github.com/prebid/prebid-server/v4/adapters/revcontent" + "github.com/prebid/prebid-server/v4/adapters/richaudience" + "github.com/prebid/prebid-server/v4/adapters/rise" + "github.com/prebid/prebid-server/v4/adapters/roulax" + "github.com/prebid/prebid-server/v4/adapters/rtbhouse" + "github.com/prebid/prebid-server/v4/adapters/rtbstack" + "github.com/prebid/prebid-server/v4/adapters/rubicon" + salunamedia "github.com/prebid/prebid-server/v4/adapters/sa_lunamedia" + "github.com/prebid/prebid-server/v4/adapters/scalibur" + "github.com/prebid/prebid-server/v4/adapters/seedingAlliance" + "github.com/prebid/prebid-server/v4/adapters/seedtag" + "github.com/prebid/prebid-server/v4/adapters/sharethrough" + "github.com/prebid/prebid-server/v4/adapters/showheroes" + "github.com/prebid/prebid-server/v4/adapters/silvermob" + "github.com/prebid/prebid-server/v4/adapters/silverpush" + "github.com/prebid/prebid-server/v4/adapters/smaato" + "github.com/prebid/prebid-server/v4/adapters/smartadserver" + "github.com/prebid/prebid-server/v4/adapters/smarthub" + "github.com/prebid/prebid-server/v4/adapters/smartrtb" + "github.com/prebid/prebid-server/v4/adapters/smartx" + "github.com/prebid/prebid-server/v4/adapters/smartyads" + "github.com/prebid/prebid-server/v4/adapters/smilewanted" + "github.com/prebid/prebid-server/v4/adapters/smoot" + "github.com/prebid/prebid-server/v4/adapters/smrtconnect" + "github.com/prebid/prebid-server/v4/adapters/sonobi" + "github.com/prebid/prebid-server/v4/adapters/sovrn" + "github.com/prebid/prebid-server/v4/adapters/sovrnXsp" + "github.com/prebid/prebid-server/v4/adapters/sparteo" + "github.com/prebid/prebid-server/v4/adapters/sspBC" + "github.com/prebid/prebid-server/v4/adapters/startio" + "github.com/prebid/prebid-server/v4/adapters/stroeerCore" + "github.com/prebid/prebid-server/v4/adapters/synapseHX" + "github.com/prebid/prebid-server/v4/adapters/taboola" + "github.com/prebid/prebid-server/v4/adapters/tadvertising_blis" + "github.com/prebid/prebid-server/v4/adapters/tappx" + "github.com/prebid/prebid-server/v4/adapters/targetVideo" + "github.com/prebid/prebid-server/v4/adapters/teads" + "github.com/prebid/prebid-server/v4/adapters/teal" + "github.com/prebid/prebid-server/v4/adapters/telaria" + "github.com/prebid/prebid-server/v4/adapters/teqblaze" + "github.com/prebid/prebid-server/v4/adapters/theadx" + "github.com/prebid/prebid-server/v4/adapters/thetradedesk" + "github.com/prebid/prebid-server/v4/adapters/tpmn" + "github.com/prebid/prebid-server/v4/adapters/tradplus" + "github.com/prebid/prebid-server/v4/adapters/trafficgate" + "github.com/prebid/prebid-server/v4/adapters/triplelift" + "github.com/prebid/prebid-server/v4/adapters/triplelift_native" + "github.com/prebid/prebid-server/v4/adapters/trustedstack" + "github.com/prebid/prebid-server/v4/adapters/trustx" + "github.com/prebid/prebid-server/v4/adapters/ucfunnel" + "github.com/prebid/prebid-server/v4/adapters/undertone" + "github.com/prebid/prebid-server/v4/adapters/unicorn" + "github.com/prebid/prebid-server/v4/adapters/unruly" + "github.com/prebid/prebid-server/v4/adapters/vidazoo" + "github.com/prebid/prebid-server/v4/adapters/videobyte" + "github.com/prebid/prebid-server/v4/adapters/videoheroes" + "github.com/prebid/prebid-server/v4/adapters/vidoomy" + "github.com/prebid/prebid-server/v4/adapters/visiblemeasures" + "github.com/prebid/prebid-server/v4/adapters/visx" + "github.com/prebid/prebid-server/v4/adapters/vox" + "github.com/prebid/prebid-server/v4/adapters/vrtcal" + "github.com/prebid/prebid-server/v4/adapters/vungle" + "github.com/prebid/prebid-server/v4/adapters/xeworks" + "github.com/prebid/prebid-server/v4/adapters/yahooAds" + "github.com/prebid/prebid-server/v4/adapters/yandex" + "github.com/prebid/prebid-server/v4/adapters/yeahmobi" + "github.com/prebid/prebid-server/v4/adapters/yieldlab" + "github.com/prebid/prebid-server/v4/adapters/yieldmo" + "github.com/prebid/prebid-server/v4/adapters/yieldone" + "github.com/prebid/prebid-server/v4/adapters/zentotem" + "github.com/prebid/prebid-server/v4/adapters/zeroclickfraud" + "github.com/prebid/prebid-server/v4/adapters/zeta_global_ssp" + "github.com/prebid/prebid-server/v4/adapters/zmaticoo" + "github.com/prebid/prebid-server/v4/openrtb_ext" ) // Adapter registration is kept in this separate file for ease of use and to aid @@ -368,6 +380,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder { openrtb_ext.BidderEscalax: escalax.Builder, openrtb_ext.BidderExco: exco.Builder, openrtb_ext.BidderEVolution: evolution.Builder, + openrtb_ext.BidderEzoic: ezoic.Builder, openrtb_ext.BidderFeedAd: feedad.Builder, openrtb_ext.BidderFlatads: flatads.Builder, openrtb_ext.BidderFlipp: flipp.Builder, diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index c9f3fa601..24569ed28 100644 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -121,6 +121,7 @@ var coreBidderNames []BidderName = []BidderName{ BidderEscalax, BidderEVolution, BidderExco, + BidderEzoic, BidderFeedAd, BidderFlatads, BidderFlipp, @@ -491,6 +492,7 @@ const ( BidderEscalax BidderName = "escalax" BidderExco BidderName = "exco" BidderEVolution BidderName = "e_volution" + BidderEzoic BidderName = "ezoic" BidderFeedAd BidderName = "feedad" BidderFlatads BidderName = "flatads" BidderFlipp BidderName = "flipp" diff --git a/openrtb_ext/imp_ezoic.go b/openrtb_ext/imp_ezoic.go new file mode 100644 index 000000000..609650ad5 --- /dev/null +++ b/openrtb_ext/imp_ezoic.go @@ -0,0 +1,8 @@ +package openrtb_ext + +// ExtImpEzoic defines the contract for bidrequest.imp[i].ext.prebid.bidder.ezoic. +// Ezoic eligibility is resolved server-side from site.domain, so no params are +// required; placementId is an optional onboarding-assigned identifier. +type ExtImpEzoic struct { + PlacementID string `json:"placementId,omitempty"` +} diff --git a/static/bidder-info/ezoic.yaml b/static/bidder-info/ezoic.yaml new file mode 100644 index 000000000..9f8be82b5 --- /dev/null +++ b/static/bidder-info/ezoic.yaml @@ -0,0 +1,23 @@ +# Ezoic requires publisher domains to be registered and approved before +# bidding; unapproved inventory receives no-bid responses. Contact +# prebid@ezoic.com to get set up. +endpoint: "https://g.ezoic.net/ezoic/prebid/adapter/ortb" +maintainer: + email: prebid@ezoic.com +gvlVendorID: 347 +geoscope: + - global +openrtb: + version: 2.6 +modifyingVastXmlAllowed: false +capabilities: + app: + mediaTypes: + - banner + - video + - native + site: + mediaTypes: + - banner + - video + - native diff --git a/static/bidder-params/ezoic.json b/static/bidder-params/ezoic.json new file mode 100644 index 000000000..ecd916a46 --- /dev/null +++ b/static/bidder-params/ezoic.json @@ -0,0 +1,13 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Ezoic Adapter Params", + "description": "A schema which validates params accepted by the Ezoic adapter", + "type": "object", + "properties": { + "placementId": { + "type": "string", + "description": "Optional placement identifier assigned during Ezoic onboarding" + } + }, + "required": [] +}