Skip to content

Conversation

@FilipStamenkovic
Copy link
Contributor

Add a new showheroes bid adapter.

Besides the standard openRTB request, the code does the following things:

  • validates the request
    • there must be a site or an app object
    • site must have the page property
    • app must have the bundle property
    • unitId must be properly passed in the imp object
    • imp object must have video or banner object in it
  • converts floor price to EUR
  • sets prebid channel in displaymanager and version in displaymanagerver
  • sets the PBS version in the source.ext.pbs

To have compatibility with the pbjs bidder, we added 2 aliases:

  • showheroes-bs
  • showheroesBs

Docs PR: prebid/prebid.github.io#6256

@FilipStamenkovic FilipStamenkovic changed the title Showheroes bidder New adapter: Showheroes Sep 15, 2025
@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 1c39d35

showheroes

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:31:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:37:	validate		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:59:	processImp		85.7%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:107:	getPrebidChannel	100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:119:	setPBSVersion		84.6%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:142:	MakeRequests		92.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:194:	MakeBids		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:225:	getBidType		75.0%
total:										(statements)		91.4%

Copy link
Contributor

@guscarreon guscarreon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a adapters/showheroes/params_test.go file as other adapters do in order to test the different kinds of paramenters your root.imp[i].ext.bidder

}

func processImp(imp *openrtb2.Imp, reqInfo *adapters.ExtraRequestInfo) error {
if imp.Banner == nil && imp.Video == nil {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This check is not needed because as PRebid Server Core filters non banner and non video imps upstream as defined in static/bidder-info/showheroes.yaml. Can we remove?

59   func processImp(imp *openrtb2.Imp, reqInfo *adapters.ExtraRequestInfo) error {
60 -     if imp.Banner == nil && imp.Video == nil {
61 -         return &errortypes.BadInput{
62 -             Message: "banner or video must be specified",
63 -         }
64 -     }
65  
66       var bidderExt shExtImpBidder
adapters/showheroes/showheroes.go

}

var bidderExt shExtImpBidder
if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil || bidderExt.Bidder.UnitID == "" {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that unitId was marked as required in your static/bidder-params/showheroes.json, if you add a "minLength" field in to static/bidder-params/showheroes.json:

 1   {
 2     "$schema": "http://json-schema.org/draft-04/schema#",
 3     "title": "Showheroes Adapter Params",
 4     "description": "A schema which validates params accepted by the Showheroes adapter",
 5     "type": "object",
 6     "properties": {
 7       "unitId": {
 8         "type": "string",
   +       "minLength": 1,
 9         "description": "Unit ID"
10       }
11     },
12     "required": ["unitId"]
13   }
static/bidder-params/showheroes.json

You could remove the last condition in this check:

66     var bidderExt shExtImpBidder
67 -   if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil || bidderExt.Bidder.UnitID == "" {
   +   if err := jsonutil.Unmarshal(imp.Ext, &bidderExt); err != nil {
68         return &errortypes.BadInput{
69             Message: "Error parsing bidder params",
70         }
71     }
72
adapters/showheroes/showheroes.go

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 76ffcff

showheroes

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:31:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:37:	validate		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:59:	processImp		84.2%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:101:	getPrebidChannel	100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:113:	setPBSVersion		84.6%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:136:	MakeRequests		92.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:188:	MakeBids		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:219:	getBidType		100.0%
total:										(statements)		92.3%

@guscarreon
Copy link
Contributor

Is your URL active? I'm getting a 400

$ curl -i --location --request POST https://ads.viralize.tv/openrtb2/auction/                                                                                                                                                                               <<<
HTTP/2 400
date: Mon, 22 Sep 2025 19:01:17 GMT
content-length: 0
server: uvicorn
server: Unknown
access-control-allow-origin: *
access-control-allow-credentials: true
via: 1.1 google
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

@FilipStamenkovic
Copy link
Contributor Author

Is your URL active? I'm getting a 400

$ curl -i --location --request POST https://ads.viralize.tv/openrtb2/auction/                                                                                                                                                                               <<<
HTTP/2 400
date: Mon, 22 Sep 2025 19:01:17 GMT
content-length: 0
server: uvicorn
server: Unknown
access-control-allow-origin: *
access-control-allow-credentials: true
via: 1.1 google
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

Yes, the URL is active. That same endpoint is bidding for the pbjs bidder. The reason you see HTTP 400, is because the request is not valid. As it is in the bid adapter code, we have the same validation on our bidding endpoint. So, if an openRTB doesn't contain site or app object, it will be rejected.

Example of the request you can find in the docs PR here.

@bsardo bsardo added the adapter label Sep 23, 2025
@guscarreon
Copy link
Contributor

Yes, the URL is active

Makes sense. I thought I saw a 404

Copy link
Contributor

@guscarreon guscarreon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your adapter looks good, I left a couple of nitpicks. Can you please add a JSON test that comes with a request.imp[i].bidfloor field and a request.imp[i].bidfloorcur different than "EUR"?

var channelVersion string
reqExt := &openrtb_ext.ExtRequest{}

if err := jsonutil.Unmarshal(request.Ext, &reqExt); err == nil && reqExt.Prebid.Channel != nil {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: It seems to not make a difference but if reqExt was declared as a pointer, no need to pass a double pointer to jsonutil.Unmarshal():

103       var channelVersion string
104       reqExt := &openrtb_ext.ExtRequest{}
105 
106 -     if err := jsonutil.Unmarshal(request.Ext, &reqExt); err == nil && reqExt.Prebid.Channel != nil {
    +     if err := jsonutil.Unmarshal(request.Ext, reqExt); err == nil && reqExt.Prebid.Channel != nil {
107               channelName = reqExt.Prebid.Channel.Name
108               channelVersion = reqExt.Prebid.Channel.Version
109       }
adapters/showheroes/showheroes.go


bidder, _ := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
Endpoint: "https://bid.showheroes.com/api/v1/bid",
}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we have two Builder calls? Is it a copy/paste error?

217   
218   func TestJsonSamples(t *testing.T) {
219 -        _, err := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
    +        bidder, err := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
220                  Endpoint: "https://bid.showheroes.com/api/v1/bid",
221          }, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
222          if err != nil {
223                  t.Fatalf("Builder returned unexpected error %v", err)
224          }
225   
226 -        bidder, _ := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
227 -                Endpoint: "https://bid.showheroes.com/api/v1/bid",
228 -        }, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
229          adapterstest.RunJSONBidderTest(t, "showheroestest", bidder)
230   }
adapters/showheroes/showheroes_test.go

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 1191681

showheroes

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:31:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:37:	validate		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:59:	processImp		84.2%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:101:	getPrebidChannel	100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:113:	setPBSVersion		84.6%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:136:	MakeRequests		92.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:188:	MakeBids		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:219:	getBidType		100.0%
total:										(statements)		92.3%


// if display manager is not set and request came from prebid.js
// store it and its version
if imp.DisplayManager == "" {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the comment in lines 152 and 153 it seems that prebidChannelName must equal "pbjs" to get copied to imp.DisplayManager, am I wrong? Even if that's not the case, should we validate prebidChannelName and channelVersion for non-emptiness before assigning?

150         }
151
152         // if display manager is not set and request came from prebid.js
153         // store it and its version
154 -       if imp.DisplayManager == "" {
    +       if imp.DisplayManager == "" && prebidChannelName == "pbjs" {
155             imp.DisplayManager = prebidChannelName
156             imp.DisplayManagerVer = channelVersion
157         }
158         validImps = append(validImps, imp)
159     }
adapters/showheroes/showheroes.go

If not, I'm ok either way.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think there has to be validation that the prebidChannelName is different from "", we will set it only if the DisplayManager is "". So, even if the prebidChannelName is an empty string, it will assign an empty string to an empty string (no effect).

Regarding the pbjs part, I just wanted to have here similar functionality to what we have in our pbjs bidder: https://github.com/prebid/Prebid.js/blob/master/modules/showheroes-bsBidAdapter.js#L33-L36.

I'm fine with the code implemented here. If in the future we see there are some issues here, I will open another PR.

guscarreon
guscarreon previously approved these changes Oct 3, 2025
Copy link
Contributor

@guscarreon guscarreon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@FilipStamenkovic
Copy link
Contributor Author

@guscarreon @bsardo @przemkaczmarek hello, is there anything more that I need to add in this PR?

I'm asking because I saw it approved 2 weeks ago, but it wasn't merged yet. If there is, please let me know and I'll adjust the PR. Thanks.

@@ -0,0 +1 @@
aliasOf: "showheroes" No newline at end of file
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do You need this alias?

Copy link
Contributor Author

@FilipStamenkovic FilipStamenkovic Oct 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wrote in the PR description, only to have the compatibility with the PBJS bidder:

To have compatibility with the pbjs bidder, we added 2 aliases:
- showheroes-bs
- showheroesBs

So, if someone configures our showheroes-bs pbjs bidder and wants to move to the prebid server bid adapter quickly, they shouldn't have issues. From the next Prebid.js major release, we plan to remove those aliases and go with only showheroes (no aliases), then I'll adjust the PBS bidder.

endpoint: "https://ads.viralize.tv/openrtb2/auction/"
maintainer:
email: tech@showheroes.com
gvlVendorID: 111
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image verified

@@ -0,0 +1,15 @@
endpoint: "https://ads.viralize.tv/openrtb2/auction/"
maintainer:
email: tech@showheroes.com
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

waiting for response

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

verified:
image

@@ -0,0 +1,15 @@
endpoint: "https://ads.viralize.tv/openrtb2/auction/"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

endpoint is reachable:
image

Comment on lines +67 to +70
// move params from .bidder to .params
// this is required since openrtb_ext.ExtImpShowheroes is used in 2 places:
// 1. shExtImpBidder.Bidder - for parsing the incoming request
// 2. shExtImpBidder.Params - for marshaling the outgoing request to showheroes
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can keep this comment but please remove all other comments

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 33934b9

showheroes

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:31:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:37:	validate		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:59:	processImp		84.2%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:99:	getPrebidChannel	100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:111:	setPBSVersion		84.6%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:133:	MakeRequests		92.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:182:	MakeBids		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:213:	getBidType		100.0%
total:										(statements)		92.3%

"github.com/stretchr/testify/assert"
)

// Mock currency conversion
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in this file please delete comments

Comment on lines 229 to 367
func TestShowheroesAdapter_MakeBids(t *testing.T) {
type args struct {
internalRequest *openrtb2.BidRequest
externalRequest *adapters.RequestData
response *adapters.ResponseData
}
tests := []struct {
name string
args args
wantErr []error
wantResp *adapters.BidderResponse
}{
{
name: "happy_path_banner",
args: args{
response: &adapters.ResponseData{
StatusCode: http.StatusOK,
Body: []byte(`{"id": "test-request-id", "seatbid":[{"seat": "showheroes", "bid":[{"mtype": 1, "id": "bid-id-1", "impid": "test-imp-id", "price": 0.50, "adid": "ad-id-1", "adm": "some-banner-ad", "adomain":["showheroes.com"], "crid": "creative-id-1", "h": 250, "w": 300, "dealid": "deal-id-1"}]}], "bidid": "bid-request-1", "cur": "EUR"}`),
},
},
wantErr: nil,
wantResp: &adapters.BidderResponse{
Bids: []*adapters.TypedBid{
{
Bid: &openrtb2.Bid{
ID: "bid-id-1",
ImpID: "test-imp-id",
Price: 0.50,
AdID: "ad-id-1",
AdM: "some-banner-ad",
ADomain: []string{"showheroes.com"},
CrID: "creative-id-1",
H: 250,
W: 300,
DealID: "deal-id-1",
MType: openrtb2.MarkupBanner,
},
BidType: openrtb_ext.BidTypeBanner,
},
},
Currency: "EUR",
},
},
{
name: "happy_path_video",
args: args{
response: &adapters.ResponseData{
StatusCode: http.StatusOK,
Body: []byte(`{"id": "test-request-id", "seatbid":[{"seat": "showheroes", "bid":[{"mtype": 2, "id": "bid-id-2", "impid": "test-imp-id", "price": 1.50, "adid": "ad-id-2", "adm": "some-video-ad", "adomain":["showheroes.com"], "crid": "creative-id-2", "h": 480, "w": 640}]}], "bidid": "bid-request-2", "cur": "USD"}`),
},
},
wantErr: nil,
wantResp: &adapters.BidderResponse{
Bids: []*adapters.TypedBid{
{
Bid: &openrtb2.Bid{
ID: "bid-id-2",
ImpID: "test-imp-id",
Price: 1.50,
AdID: "ad-id-2",
AdM: "some-video-ad",
ADomain: []string{"showheroes.com"},
CrID: "creative-id-2",
H: 480,
W: 640,
MType: openrtb2.MarkupVideo,
},
BidType: openrtb_ext.BidTypeVideo,
},
},
Currency: "USD",
},
},
{
name: "no_content_response",
args: args{
response: &adapters.ResponseData{
StatusCode: http.StatusNoContent,
Body: nil,
},
},
wantErr: nil,
wantResp: nil,
},
{
name: "invalid_status_code",
args: args{
response: &adapters.ResponseData{
StatusCode: http.StatusBadRequest,
Body: []byte(`Bad Request`),
},
},
wantErr: []error{fmt.Errorf("unexpected status code: 400")},
wantResp: nil,
},
{
name: "invalid_json_response",
args: args{
response: &adapters.ResponseData{
StatusCode: http.StatusOK,
Body: []byte(`{"id": "test-request-id", "seatbid":[{"seat": "showheroes", "bid":[{]}`),
},
},
wantErr: []error{&errortypes.FailedToUnmarshal{}},
wantResp: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
a, buildErr := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
Endpoint: "https://bid.showheroes.com/api/v1/bid",
}, config.Server{})
assert.Nil(t, buildErr)

gotResp, gotErr := a.MakeBids(tt.args.internalRequest, tt.args.externalRequest, tt.args.response)

if tt.wantErr == nil {
assert.Equal(t, tt.wantErr, gotErr)
} else if len(tt.wantErr) > 0 {
assert.NotNil(t, gotErr)
if len(gotErr) > 0 && len(tt.wantErr) > 0 {
assert.IsType(t, tt.wantErr[0], gotErr[0])
}
}

if tt.wantResp != nil {
assert.Equal(t, tt.wantResp.Currency, gotResp.Currency)
assert.Equal(t, len(tt.wantResp.Bids), len(gotResp.Bids))
if len(tt.wantResp.Bids) > 0 {
assert.Equal(t, tt.wantResp.Bids[0].BidType, gotResp.Bids[0].BidType)
assert.Equal(t, tt.wantResp.Bids[0].Bid.ID, gotResp.Bids[0].Bid.ID)
assert.Equal(t, tt.wantResp.Bids[0].Bid.MType, gotResp.Bids[0].Bid.MType)
}
} else if tt.wantResp == nil && tt.args.response.StatusCode == http.StatusNoContent {
assert.Nil(t, gotResp)
}
})
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not according to our standard; here, tests are executed based on JSON files, and we handle all cases there.

@@ -0,0 +1,6 @@
package openrtb_ext

// ExtImpShowheroes defines the contract for bidrequest.imp[i].ext.prebid.bidder.showheroes
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please delete comment

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, c4bca0e

showheroes

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:31:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:37:	validate		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:59:	processImp		84.2%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:99:	getPrebidChannel	100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:111:	setPBSVersion		84.6%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:133:	MakeRequests		92.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:182:	MakeBids		93.3%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:213:	getBidType		100.0%
total:										(statements)		91.2%

Comment on lines +213 to +20
func TestJsonSamples(t *testing.T) {
bidder, err := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
Endpoint: "https://bid.showheroes.com/api/v1/bid",
}, config.Server{})
if err != nil {
t.Fatalf("Builder returned unexpected error %v", err)
}

adapterstest.RunJSONBidderTest(t, "showheroestest", bidder)
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we had a misunderstanding — maybe I didn’t explain it clearly. What I meant was that in this class, only one test like

	bidder, err := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
		Endpoint: "https://bid.showheroes.com/api/v1/bid",
	}, config.Server{})
	if err != nil {
		t.Fatalf("Builder returned unexpected error %v", err)
	}

	adapterstest.RunJSONBidderTest(t, "showheroestest", bidder)
}

is enough. Everything else is unnecessary, and all possible examples (like simple-banner, simple-video, multi-imps, etc.) should be done in JSON files.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It’s ok to have unit tests, however, test coverage must be achieved via the JSON test framework wherever possible. (see https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html#adapter-code-tests). The JSON test framework has shared memory checks built in which are very important. Typically once you add sufficient coverage via the JSON test framework, you can delete the unit tests for simplicity.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review.

But, I'm sorry, can you be a bit more specific on what you expect from me?
The tests I deleted were copy-pasted from some other bidder and then adjusted.
Only after you pointed out I see this is not common practice.

For this bid adapter I added 10 JSON test files and code coverage is 91.2%.

So, if I'm missing something more please let me know what, and I'll add it?

Copy link
Collaborator

@przemkaczmarek przemkaczmarek Oct 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which adapter did you copy this from?
I’ll check that adapter, but please leave only this:

func TestJsonSamples(t *testing.T) {
	bidder, err := Builder(openrtb_ext.BidderShowheroes, config.Adapter{
		Endpoint: "https://bid.showheroes.com/api/v1/bid",
	}, config.Server{})
	if err != nil {
		t.Fatalf("Builder returned unexpected error %v", err)
	}

	adapterstest.RunJSONBidderTest(t, "showheroestest", bidder)
}

and the JSON files — remove everything else.
We're trying to make the new adapters look like this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I used this test file as a reference.

Btw. I updated the tests according to your last comment, thanks.

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, b1981c6

showheroes

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:31:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:37:	validate		100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:59:	processImp		84.2%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:99:	getPrebidChannel	100.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:111:	setPBSVersion		84.6%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:133:	MakeRequests		92.0%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:182:	MakeBids		93.3%
github.com/prebid/prebid-server/v3/adapters/showheroes/showheroes.go:213:	getBidType		100.0%
total:										(statements)		91.2%

@FilipStamenkovic
Copy link
Contributor Author

@przemkaczmarek @guscarreon, when can we expect this PR to be merged? Since it was approved by both of you, it would be really nice if, for the next PBS release, our bidder is included. Thanks.

The official prebid docs say we do have a prebid server adapter: https://docs.prebid.org/dev-docs/bidders/showheroes-bs.html. Maybe because the Java version got merged a few days ago.

Copy link
Contributor

@guscarreon guscarreon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm ready to approve as I did before. I just left one last question

}

bidderResponse := adapters.NewBidderResponse()
bidderResponse.Currency = bidResponse.Cur
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we check bidResponse.Cur before assigning? NewBidderResponse() calls NewBidderResponseWithBidsCapacity(), a function that returns a BidderResponse wuth the Currency field set to "USD". If bidResponse.Cur is an empty string, we'd overwrite bidderResponse.Currency's default value of "USD". Do we want that?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took an example from the thetradedesk bidder from here. They have the same code, and they are not the only bidder doing it like this.

But, if you want, I can add a single if to make it more bulletproof?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I leave it up to you. If you are ok with the current behavior, I'm fine with it. Let me know

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine with this. We are always providing currency in the bid response.

Copy link
Contributor

@guscarreon guscarreon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you @FilipStamenkovic for addressing my feedback

@bsardo bsardo merged commit 6df9618 into prebid:master Oct 29, 2025
6 checks passed
@bsardo bsardo changed the title New adapter: Showheroes New Adapter: Showheroes Oct 29, 2025
danielbaud pushed a commit to alliance-gravity/prebid-server-go that referenced this pull request Nov 25, 2025
prnvgupta pushed a commit to automatad/prebid-server that referenced this pull request Dec 3, 2025
shunj-nb pushed a commit to ParticleMedia/prebid-server that referenced this pull request Dec 15, 2025
shunj-nb added a commit to ParticleMedia/prebid-server that referenced this pull request Dec 15, 2025
* Dianomi: Update user syncs to send gdpr_consent (prebid#4345)

* MobileFuse: Remove tagid_src and pub_id params (prebid#4303)

* Remove tagid_src ext from MobileFuse Adapter

* remove pub_id query param

* removed comment

* Simplify Endpoint assignment in MobileFuseAdapter

* New Adapter: Flatads (prebid#4243)

Co-authored-by: wuzhijian <wuch1k1n@qq.com>

* Rubicon: Add bid meta seat (prebid#4348)

* Gothamads: Add Intenze alias (prebid#4319)

* GumGum: Collect ad unit name for reporting (prebid#4302)

* Seedtag: Fix required content-type header on http calls (prebid#4299)

* Kobler: Remove sensitive device and user data (prebid#4295)

* New Adapter: Nexx360 (prebid#4286)

Co-authored-by: Gabriel Chicoye <gabriel@macbookrogab24g.lan>

* HTTP Fetcher: Implement RFC 3986 compatibility as optional (prebid#4272)

* Targeting: Add configurable targeting prefix (prebid#4355)

* Pubmatic: Set bid.meta.mediaType=video when bid.ext.ibv=true (prebid#4189)

* Rules Engine Module: Phase 1 (prebid#4407)

Co-authored-by: Veronika Solovei <kalypsonika@gmail.com>
Co-authored-by: guscarreon <guscarreon@gmail.com>

* New Adapter: Sparteo (prebid#4275)

* PubMatic: Fix missing bid type in bid response (prebid#4417)

* Fix: Remove module per request JSON marshal and add custom viper decoder (prebid#4422)

* RichAudience: change endpoint to https (prebid#4384)

Co-authored-by: IAN <ian.musachs@exte.com>

* Missena: Pass full openrtb request (prebid#4394)

* New Adapter: Rediads (prebid#4233)

* Zeta Global SSP: Declare OpenRTB 2.6 and GPP support (prebid#4389)

* Record metric unsuccessful for PBC non-200 response status code or error (prebid#4341)

Co-authored-by: oleksandr <oleksandr@assertive.ai>

* New Adapter: Akcelo (prebid#4237)

* New Adapter: Zentotem (prebid#4053)

* New Adapter: Exco (prebid#4250)

* Floors: Fix panic while getting adunit code for signaling (prebid#4424)

* Stroeercore: Add adomain to bids (prebid#4392)

* VIS.X: Relay bid currency from bid response (prebid#4381)

* TMax: Add default host config (prebid#4430)

* Fix the package (iterators) to agree with the dir (iterutil). (prebid#4447)

* TheTradeDesk: Throw error for malformed endpoint url (prebid#4419)

* Smartadserver : Send multi-impression requests without flattening (prebid#4402)

Co-authored-by: nlesommer <nlesommer@equativ.com>
Co-authored-by: gtodeschi <gregoire.todeschi@gmail.com>

* RTB House: Remove PAAPI signals from imp[].ext (prebid#4399)

* GumGum: Enable Opt-In change notification (prebid#4390)

* Tappx: Add GPID support (prebid#4438)

Co-authored-by: Jordi Arnau <jarnau@tappx.com>

* New Adapter: progx - Vidazoo alias (prebid#4428)

* New Adapter: Kuantyx - Aso alias (prebid#4420)

* MinuteMedia: Add test endpoint (prebid#4425)

* Adagio: Add site bidder param and web inventory tests (prebid#4403)

Co-authored-by: Godefroi Roussel <groussel@adagio.io>

* Modularity: Add hook code to module invocation context (prebid#4036)

* Rubicon: Pass ext.prebid.multibid[].maxbids to XAPI (prebid#4412)

* OpenX: Add gpp params to user sync (prebid#4445)

Co-authored-by: gmiedlar-ox <gabriela.miedlar@openx.com>

* New Adapter: Blis (prebid#4304)

Co-authored-by: Tomas Koutny <tomas@blis.com>

* Ogury: Support gpp for cookie sync (prebid#4406)

* TheTradeDesk: Resolve AUCTION_PRICE macro (prebid#4448)

* Fix: Set account http fetcher defaults enabling env vars (prebid#4460)

* Bidder throttling code to increase network stability. (prebid#4415)

* Adding request throttling to bidder requests

* Add latency health

* Adds new config options, metrics, and fixes

* Set default window to 1000 and fix error type typo

* Addresses PR comments

* More PR feedback

* Proper handling of the atomic uint in tests

* Yieldlab: Forward ADomain to OpenRTB bid (prebid#4404)

* Yandex: Add video support (prebid#4344)

* Request: Add hb_env=amp targeting to AMP responses (prebid#4414)

* Pubmatic: Forward skadn object in bid request (prebid#4453)

* Adds missing defaults to network throttling code (prebid#4477)

* New Adapter: Tagoras - Vidazoo alias (prebid#4329)

Co-authored-by: anna-y-perion <annay@perion.com>

* New Adapter: Omnidex - Vidazoo alias (prebid#4441)

* Define An Adapter As White Label Only (prebid#4461)

* Rules Engine Module: Result functions fix (prebid#4451)

* Account: Support bid rounding options (prebid#4470)

* Sovrn: Fix passing through imp.ext.gpid (prebid#4413)

* Smartadserver: Add second endpoint for programmatic guaranteed (prebid#4467)

Co-authored-by: Guillaume Laubier <glaubier@equativ.com>

* sspBC: Updates moving operations to backend service (prebid#4351)

* New Adapter: Adipolo - Xeworks alias (prebid#4350)

Co-authored-by: And-Rud <andrii@xe.works>
Co-authored-by: rbstdev <devgit204@xe.works>

* Modules: Exitpoint Stage (prebid#4435)

* New Adapter: Afront (prebid#4380)

* Harden HTTP Response Body Handling (prebid#4489)

* New Adapter: TeqBlaze (prebid#4480)

* Onetag: imp.ext read generalization (prebid#4446)

Co-authored-by: lorenzob <l.baglini@onetag.com>

* Rules Engine Module: Configurable cache update frequency (prebid#4423)

Co-authored-by: VeronikaSolovei9 <vsolovei@microsoft.com>

* New Adapter: RocketLab (prebid#4383)

* change zmaticoo.yaml endpoint (prebid#4471)

Co-authored-by: Quentin.zuo <quentin.zuo@eclicktech.com.cn>

* Metrics: Record GVL fetch count (prebid#4500)

* TheTradeDesk: Resolve burl if not resolved (prebid#4481)

* New Adapter: pinkLion (prebid#4376)

* Metrics: Record HTTP connections wanted and obtained (prebid#4518)

* Metrics: Record incoming request sizes (prebid#4495)

* Modules: Execute mutations in the order they are listed (prebid#4279)

* 4278 Execute mutations in the sequence they are listed.

* Ensure that the rejected channel is closed (once) on reject

* Use stack var.

* Add comments.

* Ensure rejected is closed.

* Just return explicitly in all 3 cases.

* Keep the same style - of passing the params to the go routine.

* Revert "Modules: Execute mutations in the order they are listed (prebid#4279)" (prebid#4529)

This reverts commit 93c17c2.

* Revert "Metrics: Record HTTP connections wanted and obtained (prebid#4518)" (prebid#4538)

* New Adapter: Nativery (prebid#4321)

Co-authored-by: Andrea Fassina <fasenderos@gmail.com>
Co-authored-by: nicoladellamorte <nicola.dellamorte@nativery.com>

* E-Planning: Add support for adomain (prebid#4472)

* SmileWanted: Append zoneId to endpoint path (prebid#4468)

Co-authored-by: QuentinGallard <quentin.gallard@digitalnolimit.com>

* Add configurable dialer timeouts to HTTP clients (prebid#4511)

* New Adapter: 360playvid (prebid#4395)

* New Adapter: MediaYo (prebid#4391)

* 33across: Make zoneId the preferred option (prebid#4531)

* 33across: Remove deprecated video.placement (prebid#4530)

* New Adapter: RobustApps - Xeworks alias (prebid#4434)

Co-authored-by: And-Rud <andrii@xe.works>
Co-authored-by: rbstdev <devgit204@xe.works>

* Adagio: Remove max length on params (prebid#4524)

Co-authored-by: Godefroi Roussel <groussel@adagio.io>

* fwssp: Add iframe usersync (prebid#4487)

Co-authored-by: wenyuanzhang <wenyuanzhang@freewheel.tv>

* Module: Scope3 Real-Time Data (prebid#4397)

* Add Scope3 Real-Time Data (RTD) module

This module integrates Scope3's Real-Time Data API to provide audience
segments for targeting in Prebid Server auctions.

Features:
- Fetches real-time audience segments from Scope3 API
- Adds targeting data to bid requests via hooks system
- Thread-safe segment storage during auction lifecycle
- Configurable timeout and endpoint settings
- Graceful error handling that doesn't fail auctions

The module implements three hook stages:
- Entrypoint: Initialize module context
- Raw Auction Request: Fetch segments from Scope3 API
- Processed Auction Request: Add segments to targeting data

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add LiveRamp ATS integration and execution order documentation

- Document proper execution order when using with LiveRamp ATS
- Add user identifier detection for RampID integration
- Include configuration examples for sequential module execution
- Enhance API requests with available user identifiers
- Add comprehensive documentation for Yahoo deployment scenario

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add LiveRamp ATS envelope support for publishers without sidecar

- Support forwarding encrypted ATS envelopes directly to Scope3 API
- Check multiple envelope locations: user.ext.liveramp_idl, user.ext.ats_envelope, ext.liveramp_idl
- Prioritize sidecar RampID over envelope when both available
- Document both sidecar and envelope integration patterns
- Add note about Scope3 needing LiveRamp partner authorization

This enables publishers without LiveRamp sidecar to still benefit from
LiveRamp ATS user signals via encrypted envelope forwarding.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Clean up debug code and finalize production-ready Scope3 RTD module

- Remove all debug logging statements
- Streamline segment storage and retrieval between hooks
- Finalize request-level targeting for GAM integration
- Production-ready code with proper error handling
- Complete documentation with configuration examples

The module is now ready for production deployment with:
- Successful Scope3 API integration
- LiveRamp ATS compatibility (sidecar and envelope)
- GAM targeting data output
- Thread-safe segment management

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Simplify targeting output to single GAM-compatible format

- Remove duplicate data.scope3_segments array format
- Keep only targeting.hb_scope3_segments as comma-separated string
- Follows standard header bidding targeting key conventions
- Optimized for GAM key-value targeting integration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add unit tests for Scope3 RTD module

- Add basic unit tests for module builder and hook functions
- Test invalid config handling and error cases
- Test entrypoint hook initialization
- Test processed auction hook with no segments
- Satisfy CI requirements for test coverage

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Go formatting issues

- Remove trailing whitespace in module.go
- Add missing newline at end of module_test.go
- Satisfy gofmt validation requirements

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Address PR feedback: Add caching, improve LiveRamp integration, enhance configurability

Key improvements based on reviewer feedback:
- Add intelligent caching with configurable TTL to handle repeated requests
- Set 60-second default cache TTL for frequency cap compatibility
- Improve LiveRamp identifier detection across multiple locations
- Remove unsubstantiated partnership claims and improve documentation
- Add cache_ttl_seconds and bid_meta_data configuration options
- Implement MD5-based cache keys from user IDs and site context
- Add comprehensive test coverage for new caching functionality
- Update documentation to explain targeting vs bid.meta approach
- Change default timeout to 1000ms for better API compatibility

Addresses concerns about:
- Performance with hundreds of identical requests per user session
- Flexibility in targeting data output (bid.meta future enhancement noted)
- Accurate LiveRamp integration documentation
- Proper hook implementation code naming

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Complete PR feedback implementation: Response-level segments with GAM targeting

Major changes to address all PR reviewer feedback:

**Response Format Changes:**
- Move from request targeting to auction response data per reviewer feedback
- Change hook stage from processed_auction_request to auction_response
- Add segments to response.ext.scope3.segments for publisher control
- Add individual GAM targeting keys when add_to_targeting=true (e.g., gmp_eligible=true)

**Configuration Updates:**
- Rename bid_meta_data to add_to_targeting for clarity
- Add comprehensive GAM integration with individual segment keys
- Remove incorrect LiveRamp RTD adapter references from README
- Update hook configuration examples to use auction_response stage

**API Integration Fixes:**
- Correct segment parsing to exclude destination field (triplelift.com)
- Extract only actual segments from imp[].ext.scope3.segments[]
- Maintain working authentication and caching functionality

**Enhanced Testing:**
- Add comprehensive mock API integration tests
- Test both response formats (scope3 + targeting sections)
- Test error handling with mock server responses
- Apply gofmt formatting to all code

**Publisher Benefits:**
- Full control over segment usage via response.ext.scope3.segments
- Optional automated GAM integration via individual targeting keys
- Flexible configuration for different use cases
- Maintains caching for high-frequency scenarios

Addresses all PR reviewer concerns while providing maximum publisher flexibility.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Address PR feedback: Add optimized HTTP Transport for high-frequency API calls

  Per reviewer feedback (@gravelg): 'if we're going to be make a lot of calls,
  we should use a Transport with better defaults'

  - MaxIdleConns: 100 (increased connection pool)
  - MaxIdleConnsPerHost: 10 (multiple connections per host)
  - IdleConnTimeout: 90s (longer connection reuse)
  - ForceAttemptHTTP2: true (HTTP/2 for better performance)
  - DisableCompression: false (bandwidth optimization)

  🤖 Generated with [Claude Code](https://claude.ai/code)
  Co-Authored-By: Claude <noreply@anthropic.com>

* run gofmt

* update default endpoint

* fix test

* address comments

* more review comments

* address more comments

* remove unused enhanceRequestWithUserIDs method

* jsonutil, add more tests

* Add privacy field masking for Scope3 RTD module

Implement comprehensive privacy protection by masking sensitive user data
before sending bid requests to the Scope3 API while preserving essential
targeting capabilities.

Features:
- Configurable field masking with privacy-first defaults
- Geographic data truncation with configurable precision (default: 2 decimals ~1.1km)
- Identity provider filtering with allowlist for preserved EIDs
- Always removes: IP addresses, user IDs, demographics, first-party data
- Always preserves: device characteristics, country/region, site/app context
- Comprehensive test coverage (92.3%) with edge case handling
- All linting checks pass with zero issues

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix cache key generation for proper per-user caching

- Use SHA-256 hashed user.id as fallback when privacy-safe identifiers are unavailable
- Maintains per-user cache segmentation for performance while protecting privacy
- Privacy-safe identifiers (RampID, LiverampIDL) take priority over hashed user.id
- Prevents accidental data leakage by returning nil on masking failures
- Add configuration validation for geo precision (max 4 decimal places)
- Add comprehensive tests for cache key behavior and configuration validation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix gofmt formatting in module_test.go

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* review fixes

* more review comments

* make it async

* address more comments

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Gabriel Gravel <ggravel@scope3.com>

* Metrics: Add connection dial metrics by adapter (prebid#4528)

* KueezRTB: Remove additionalProperties from schema (prebid#4490)

* Kargo: Add email to codepath notification workflow (prebid#4484)

Co-authored-by: Nick Llerandi <nick.llerandi@kargo.com>

* New Adapter: Contxtful (prebid#4443)

Co-authored-by: rufiange <sebastien@rufiange.com>

* Modules: Exitpoint Hook typo fix (prebid#4542)

* Consumable: Declare geoscope (prebid#4496)

* Connatix: Copy entire imp[i].ext (prebid#4521)

* Fix: Preload Prometheus adapter connection dial metric labels when enabled (prebid#4543)

Co-authored-by: oleksandr <oleksandr@assertive.ai>

* Host Option To Use OS Certs (prebid#4536)

* CPMStar: imp.ext passthrough (prebid#4450)

* MetaX: Add redirect user sync (prebid#4550)

Signed-off-by: Kehan Pan <kehan.pan@metaxsoft.com>

* New Adapter: Xapads - AdKernel alias (prebid#4534)

* Connatix: Add GPP macros (prebid#4525)

* OpenX: Return buyer exts in response (prebid#4507)

Co-authored-by: Rafal Sieczka <rafal.sieczka@openx.com>

* Yandex: Set referer and target-ref to site.page (prebid#4488)

* Nextmillennium: New fields and adapter version update (prebid#4486)

* Accounts: Add coop cookiesync priority groups (prebid#4561)

* Mobkoi: Remove url endpoint override (prebid#4555)

* GDPR: Move enforcement processing upstream (prebid#4567)

* Actions: Add publish to docker hub workflow (prebid#4558)

* Omnidex: Add GVL ID (prebid#4568)

* Adagio: Fix typo (prebid#4570)

* Improve Digital: Switch to HTTPS (prebid#4559)

* Mobkoi: Update endpoint (prebid#4523)

* Remove flaky agma test (prebid#4578)

* New Adapter: appStockSSP (prebid#4502)

Co-authored-by: Kanceliarenko <kostiantyn.k@teqblaze.com>

* Rules Engine Module: Dynamic ruleset from YAML geoscopes (prebid#4509)

* In order to protect users of prebid-server that don't use CGO, add build flag (prebid#4058)

* In order to protect users of prebid-server that don't use CGO, add build flag.

* Conditionally configure fiftyonedegrees.

* Because the module file is auto-generated, let it include fiftyonedegrees but just explain that it can't be enabled.

* include used packages.

* fix builder.

* Remove unused file.

* Add a test for the Builder when CGO is not enabled.

* New Adapter: Gravite (prebid#4547)

* New Adapter: Goldbach (prebid#4476)

* New Adapter: Showheroes (prebid#4533)

* New Adapter: Performist - Limelight Alias (prebid#4283)

* Connatix: Support GZIP (prebid#4575)

* RTBHouse: PMP removal, publisherId parameter extraction (prebid#4564)

* Adnuntius: Pass targeting to ad server (prebid#4545)

* New Adapter: Boldwin Rapid (prebid#4478)

* Scope3: Various fixes to RTD module (prebid#4544)

* PubMatic: Pass alias bidder name through (prebid#4588)

* BidTheatre: Update endpoint and add redirect user sync (prebid#4562)

* CWire: Add userSync (prebid#4516)

* New Adapter: Clydo (prebid#4535)

* New Adapter: Microsoft (msft) (prebid#4592)

* Syncer: Allow Duplicate Syncer Key For Identical Config (prebid#4622)

* Adagio: Enable site capability (prebid#4590)

* Adagio: Remove hardcoded seat name (prebid#4596)

* Warn in auction response for bidders blocked by privacy settings (prebid#4537)

Co-authored-by: oleksandr <oleksandr@assertive.ai>

* Logging: Add interface with default glog implementation (prebid#4085)

Co-authored-by: postindustria-code <oss@postindustria.com>

* msp 25-12

---------

Signed-off-by: Kehan Pan <kehan.pan@metaxsoft.com>
Co-authored-by: Michael Stevens <michael.stevens@dianomi.com>
Co-authored-by: tomaszbmf <142428312+tomaszbmf@users.noreply.github.com>
Co-authored-by: FlatAds <83808812+flatads@users.noreply.github.com>
Co-authored-by: wuzhijian <wuch1k1n@qq.com>
Co-authored-by: Anton Babak <76536883+AntoxaAntoxic@users.noreply.github.com>
Co-authored-by: support-gotham-ads <support@gothamads.com>
Co-authored-by: ShayanK16GumGum <shayan.khan@ic.gumgum.com>
Co-authored-by: sangarbe <sangarbe@gmail.com>
Co-authored-by: Tommy Pettersen <42890605+TommyHPettersen@users.noreply.github.com>
Co-authored-by: Gabriel Chicoye <gabriel.chicoye@gmail.com>
Co-authored-by: Gabriel Chicoye <gabriel@macbookrogab24g.lan>
Co-authored-by: Sigma Software <prebid.opensource@sigma.software>
Co-authored-by: pm-priyanka-bagade <156899734+pm-priyanka-bagade@users.noreply.github.com>
Co-authored-by: Brian Sardo <1168933+bsardo@users.noreply.github.com>
Co-authored-by: Veronika Solovei <kalypsonika@gmail.com>
Co-authored-by: guscarreon <guscarreon@gmail.com>
Co-authored-by: t-sormonte <t.sormonte@sparteo.com>
Co-authored-by: Isha Bharti <isha.bharti@pubmatic.com>
Co-authored-by: Rich Audience <sergi.gimenez@richaudience.com>
Co-authored-by: IAN <ian.musachs@exte.com>
Co-authored-by: Jean-Sébastien Ney <jeansebastien.ney@gmail.com>
Co-authored-by: rediads <123890182+rediads@users.noreply.github.com>
Co-authored-by: abermanov-zeta <95416296+abermanov-zeta@users.noreply.github.com>
Co-authored-by: linux019 <anode.dev@gmail.com>
Co-authored-by: oleksandr <oleksandr@assertive.ai>
Co-authored-by: Roger <104763658+rogerDyl@users.noreply.github.com>
Co-authored-by: zentotem <programmatic@zentotem.net>
Co-authored-by: Pete <petropo@ex.co>
Co-authored-by: Nikhil Vaidya <102963966+pm-nikhil-vaidya@users.noreply.github.com>
Co-authored-by: Philip Watson <philip.watson@adscale.co.nz>
Co-authored-by: Vladimir Fedoseev <vl.fedoseev@gmail.com>
Co-authored-by: Sheridan C Rawlins <41922797+scr-oath@users.noreply.github.com>
Co-authored-by: andre-gielow-ttd <124626380+andre-gielow-ttd@users.noreply.github.com>
Co-authored-by: Nathan Le Sommer <lesommer.nathan@gmail.com>
Co-authored-by: nlesommer <nlesommer@equativ.com>
Co-authored-by: gtodeschi <gregoire.todeschi@gmail.com>
Co-authored-by: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com>
Co-authored-by: sindhuja-sridharan <148382298+sindhuja-sridharan@users.noreply.github.com>
Co-authored-by: jordi-tappx <jarnau@techsoulogy.com>
Co-authored-by: Jordi Arnau <jarnau@tappx.com>
Co-authored-by: Anna Yablonsky <annay@perion.com>
Co-authored-by: Adserver.Online <61009237+adserver-online@users.noreply.github.com>
Co-authored-by: inna <innayare@gmail.com>
Co-authored-by: GodefroiRoussel <GodefroiRoussel@users.noreply.github.com>
Co-authored-by: Godefroi Roussel <groussel@adagio.io>
Co-authored-by: Kacper Fus <kacper.fus@openx.com>
Co-authored-by: gmiedlar-ox <gabriela.miedlar@openx.com>
Co-authored-by: tomaskoutny-blis <60094686+tomaskoutny-blis@users.noreply.github.com>
Co-authored-by: Tomas Koutny <tomas@blis.com>
Co-authored-by: Vincent Bachelier <vincent@ogury.co>
Co-authored-by: hhhjort <31041505+hhhjort@users.noreply.github.com>
Co-authored-by: yuu.t <tongyu24@hotmail.com>
Co-authored-by: Dmitry Ermakov <skfyann@gmail.com>
Co-authored-by: Saar Amrani <saar120@gmail.com>
Co-authored-by: Scott Kay <noreply@syntaxnode.com>
Co-authored-by: Sandy Janicki <sejanick@users.noreply.github.com>
Co-authored-by: Guillaume Laubier <guillaume.laubier@hotmail.fr>
Co-authored-by: Guillaume Laubier <glaubier@equativ.com>
Co-authored-by: mabielinski-wpm <155963187+mabielinski-wpm@users.noreply.github.com>
Co-authored-by: Andrii Rudyk <96918101+And-Rud@users.noreply.github.com>
Co-authored-by: And-Rud <andrii@xe.works>
Co-authored-by: rbstdev <devgit204@xe.works>
Co-authored-by: Afrontio <support@afront.io>
Co-authored-by: MaksymTeqBlaze <maksym.pavliv@teqblaze.com>
Co-authored-by: esimonelli@onetag <136568337+EmanueleSimonelli@users.noreply.github.com>
Co-authored-by: lorenzob <l.baglini@onetag.com>
Co-authored-by: VeronikaSolovei9 <vsolovei@microsoft.com>
Co-authored-by: Leandro Marty <leandro.marty@rocketlab.ai>
Co-authored-by: g-coder-baiai <77920802+g-coder-baiai@users.noreply.github.com>
Co-authored-by: Quentin.zuo <quentin.zuo@eclicktech.com.cn>
Co-authored-by: prebidPinkLion <prebid@pinklion.io>
Co-authored-by: andreafassina <127768714+andreafassina@users.noreply.github.com>
Co-authored-by: Andrea Fassina <fasenderos@gmail.com>
Co-authored-by: nicoladellamorte <nicola.dellamorte@nativery.com>
Co-authored-by: Agustin Insua <Nistenf@users.noreply.github.com>
Co-authored-by: Quentin Gallard <QuentinGallard@users.noreply.github.com>
Co-authored-by: QuentinGallard <quentin.gallard@digitalnolimit.com>
Co-authored-by: pb360playvid <prebid@360playvid.com>
Co-authored-by: mediayo <yehuda@mediayo.co>
Co-authored-by: Carlos Felix <carloshto@gmail.com>
Co-authored-by: rbstdev <devgit204@gmail.com>
Co-authored-by: Wenyuan Zhang <wzhang910@cable.comcast.com>
Co-authored-by: wenyuanzhang <wenyuanzhang@freewheel.tv>
Co-authored-by: Brian O'Kelley <bokelley@scope3.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Gabriel Gravel <ggravel@scope3.com>
Co-authored-by: Amit Biton <56631148+amitbiton01@users.noreply.github.com>
Co-authored-by: Shane Lacey <shanel262@hotmail.com>
Co-authored-by: Nick Llerandi <nick.llerandi@kargo.com>
Co-authored-by: Sebastien Boisvert <sebastien.boisvert@contxtful.com>
Co-authored-by: rufiange <sebastien@rufiange.com>
Co-authored-by: richardngo-consumable <rngo@consumable.com>
Co-authored-by: Karim Mourra <karim@jwplayer.com>
Co-authored-by: Joshua Tomlinson <og.ginger@gmail.com>
Co-authored-by: metax-kehan <115962296+metax-kehan@users.noreply.github.com>
Co-authored-by: Denis Logachov <ckbo3hrk@gmail.com>
Co-authored-by: Rafal Sieczka <rafal.sieczka@openx.com>
Co-authored-by: Dmitry Ermakov <dimurer@yandex-team.ru>
Co-authored-by: a.popov <60257866+allar15@users.noreply.github.com>
Co-authored-by: Marc-Enzo Bonnafon <marcenzo.bonnafon@gmail.com>
Co-authored-by: Olivier <osazos@adagio.io>
Co-authored-by: Jozef Bartek <31618107+jbartek25@users.noreply.github.com>
Co-authored-by: Appstock LTD <sdksupport@app-stock.com>
Co-authored-by: Kanceliarenko <kostiantyn.k@teqblaze.com>
Co-authored-by: teqblaze <162988436+teqblaze@users.noreply.github.com>
Co-authored-by: Simon Aebli <simon.aebli@goldbach.com>
Co-authored-by: Filip Stamenkovic <ficadub@gmail.com>
Co-authored-by: quietPusher <129727954+quietPusher@users.noreply.github.com>
Co-authored-by: Mikael Lundin <mikael-lundin@users.noreply.github.com>
Co-authored-by: BoldwinDev <sdk@bold-win.com>
Co-authored-by: Gabriel Gravel <gravelg@users.noreply.github.com>
Co-authored-by: Pubmatic-Supriya-Patil <131644110+Pubmatic-Supriya-Patil@users.noreply.github.com>
Co-authored-by: andreasgreen <andreas.green@gmail.com>
Co-authored-by: Alessandro Rosetti <alessandro.rosetti@gmail.com>
Co-authored-by: cto-clydo <cto@clydo.io>
Co-authored-by: Eugene Dorfman <eugene.dorfman@gmail.com>
Co-authored-by: postindustria-code <oss@postindustria.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants