Skip to content

New Adapter: StackAdapt - #4724

Open
franklong-sa wants to merge 24 commits into
prebid:masterfrom
StackAdapt:stackadapt-bidder-adapter
Open

New Adapter: StackAdapt#4724
franklong-sa wants to merge 24 commits into
prebid:masterfrom
StackAdapt:stackadapt-bidder-adapter

Conversation

@franklong-sa

@franklong-sa franklong-sa commented Mar 20, 2026

Copy link
Copy Markdown

This PR creates a new bidder adapter for StackAdapt

Related docs update: prebid/prebid.github.io#6496

@github-actions

Copy link
Copy Markdown

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, 2e8133c

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:128:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:152:	MakeBids			91.7%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:197:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:214:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:224:	getNativeAdm			100.0%
total:										(statements)			96.2%

Comment thread adapters/stackadapt/stackadapt.go Outdated
@github-actions

Copy link
Copy Markdown

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, b4d9dfd

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:128:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:152:	MakeBids			91.7%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:197:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:214:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:224:	getNativeAdm			100.0%
total:										(statements)			96.2%

@franklong-sa
franklong-sa marked this pull request as ready for review March 20, 2026 15:23
@franklong-sa franklong-sa changed the title New Adapter: StackAdapter New Adapter: StackAdapt Mar 23, 2026
@bsardo bsardo added the adapter label Mar 31, 2026
@franklong-sa

Copy link
Copy Markdown
Author

Hi @bsardo , I was wondering if there's a rough idea when this might get reviewed? Thanks!

@bsardo bsardo self-assigned this Apr 23, 2026
@franklong-sa

Copy link
Copy Markdown
Author

Hi @bsardo , wondering if you had a chance to look at this PR yet? Any ETA would be much appreciated, thanks!

@github-actions

Copy link
Copy Markdown

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, 31ef553

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:128:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:152:	MakeBids			91.7%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:197:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:214:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:224:	getNativeAdm			100.0%
total:										(statements)			96.2%

@@ -0,0 +1,24 @@
endpoint: "https://pbs.srv.stackadapt.com/br?publisher_id={{.PublisherID}}&supply_id={{.SupplyId}}"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Verified endpoint is live

curl -i --location --request POST https://pbs.srv.stackadapt.com/br?publisher_id=123&supply_id=123
[1] 10611
HTTP/2 204
endpoint-load-metrics-bin: Mbr1e7a5ok1ASVoeoaC28A4/
date: Thu, 23 Apr 2026 13:48:34 GMT
x-envoy-upstream-service-time: 0
server: envoy

endpoint: "https://pbs.srv.stackadapt.com/br?publisher_id={{.PublisherID}}&supply_id={{.SupplyId}}"
endpointCompression: gzip
maintainer:
email: pjs@stackadapt.com

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Is this a personal email address? We require all email addresses to be a mailbox.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

pjs@stackadapt.com is a shared team mailbox monitored by a group of employees on our Prebid team.

endpointCompression: gzip
maintainer:
email: pjs@stackadapt.com
gvlVendorID: 238

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Verified

curl https://vendor-list.consensu.org/v3/vendor-list.json | jq '.vendors."238"'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  859k  100  859k    0     0   863k      0 --:--:-- --:--:-- --:--:--  864k
{
  "id": 238,
  "name": "StackAdapt Inc.",
  "purposes": [
    1,
    3,
    4,
    5,
    6
  ],
  "legIntPurposes": [
    2,
    7,
    8,
    9,
    10,
    11
  ],
  "flexiblePurposes": [
    2,
    7,
    8,
    11
  ],
  "specialPurposes": [
    1,
    2,
    3
  ],
  "features": [
    1,
    2,
    3
  ],
  "specialFeatures": [
    1,
    2
  ],
  "cookieMaxAgeSeconds": 31536000,
  "usesCookies": true,
  "cookieRefresh": true,
  "urls": [
    {
      "langId": "en",
      "privacy": "https://www.stackadapt.com/privacy-policy",
      "legIntClaim": "https://www.stackadapt.com/privacy-policy"
    }
  ],
  "usesNonCookieAccess": true,
  "dataRetention": {
    "stdRetention": 365,
    "purposes": {
      "7": 3650,
      "8": 180,
      "9": 4320,
      "10": 180,
      "11": 180
    },
    "specialPurposes": {
      "1": 60,
      "2": 1,
      "3": 1825
    }
  },
  "dataDeclaration": [
    1,
    2,
    3,
    4,
    6,
    8,
    9,
    10,
    11
  ],
  "deviceStorageDisclosureUrl": "https://s3.amazonaws.com/stackadapt_public/disclosures.json"
}

Comment thread adapters/stackadapt/stackadapt.go Outdated
Comment thread adapters/stackadapt/stackadapt.go Outdated
Comment thread adapters/stackadapt/stackadapt.go
Comment thread adapters/stackadapt/stackadapt.go
Comment thread adapters/stackadapt/stackadapt.go
Comment thread adapters/stackadapt/stackadapt.go Outdated
Comment on lines +22 to +23
redirect:
url: "https://sync.srv.stackadapt.com/sync?nid=pbs&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redirect={{.RedirectURL}}"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Verified redirect user sync works with stackadapt entry in the uids cookie:

Image Image

@github-actions

Copy link
Copy Markdown

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, eddb6ea

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@franklong-sa
franklong-sa requested a review from bsardo May 13, 2026 15:14
@github-actions

Copy link
Copy Markdown

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, b6cf5d7

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@franklong-sa

Copy link
Copy Markdown
Author

Hi @bsardo thanks for the review, I've addressed the comments if you could take another look. Thanks!

@franklong-sa

Copy link
Copy Markdown
Author

Hey @bsardo just wanted to check in if you had a chance to review the updates. Thanks!

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

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, 3af52dd

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@github-actions

Copy link
Copy Markdown

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, df84272

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@franklong-sa

Copy link
Copy Markdown
Author

Hi @bsardo just wanted to follow up on this now that we have one approval. Let me know if there is anything I can do to help, thanks.

@github-actions

Copy link
Copy Markdown

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, f40fb9f

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@github-actions

Copy link
Copy Markdown

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, 9d9cd21

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@github-actions

Copy link
Copy Markdown

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, 5b66f22

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

@github-actions

Copy link
Copy Markdown

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, 1703abf

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:116:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:140:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:185:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:202:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:212:	getNativeAdm			100.0%
total:										(statements)			98.0%

Comment thread adapters/stackadapt/stackadapt.go Outdated
return nil, []error{err}
}

body, err := json.Marshal(request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Use jsonutil.Marshal instead of encoding/json.
The encoding/json import exists only for this one call (no json.RawMessage in the file), so switch to jsonutil.Marshal(request) and drop the import.

"Adapters must use jsonutil.Marshal and jsonutil.Unmarshal instead of the Go standard package functions, as those are not optimized for Prebid Server's high performance needs."
— [Prebid Server · Adding a New Bidder (Go)](https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Done. Switched to jsonutil instead of encoding/json.

Comment thread adapters/stackadapt/stackadapt.go Outdated
Comment on lines +91 to +92
publisherID = saExt.PublisherId
supplyID = saExt.SupplyId

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Multi-imp: publisherId/supplyId collapse to the last imp (stackadapt.go:91-92). They're reassigned each loop iteration with no accumulation, so the endpoint URL query (publisher_id/supply_id) and the request-level site/app.publisher.id set by setPublisherID both end up with the last imp's values. Since site.publisher.id is the standard OpenRTB publisher identity shared by every imp in the request, a request whose imps carry different publisherId would be attributed entirely to the last one (the per-imp imp.ext.bidder values do still reach you in the body, so this is really a question of intended behavior). Your tests only cover the all-same case. Could you clarify the intended multi-imp contract — validate that all imps share publisherId/supplyId and return BadInput on mismatch, or split into per-publisher requests?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Thanks for flagging, revised to validate all publisherId and supplyId are the same and return error if not.

"type": "object",
"description": "Banner-specific parameters",
"properties": {
"expdir": {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

banner.expdir (and bidfloor) re-declare standard OpenRTB fields (static/bidder-params/stackadapt.json). The adapter copies them onto imp.banner.expdir / imp.bidfloor, which a publisher can set directly in the standard request. banner.expdir in particular isn't declared as a param by any other adapter in the repo — consider dropping it and reading imp.banner.expdir. (bidfloor as a param is common enough that it's fine to keep if you prefer.)

  • publisherId/supplyId are placed into the endpoint query string via macros.ResolveMacros without url.QueryEscape (stackadapt.go:71); a value containing & would inject extra query parameters. Escape them, or add a pattern/maxLength to the schema. (No SSRF — scheme and host are fixed in the yaml.)
  • getNativeAdm (:213) unmarshals the adm into a map[string]interface{} just to check for the native key, then re-parses the same bytes with jsonparser. You can drop the map and branch on jsonparser.Get alone.
  • params_test.go: add data-type-mismatch cases for bidfloor (e.g. "high") and expdir (e.g. ["a"]).

    "Please include tests for required fields, optional fields, conditional fields such as oneOf, regex filters, and data type mismatches."
    — [Prebid Server · Adding a New Bidder (Go)](https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Thanks, I have now addressed these:

  • banner.expdir param: keeping it intentionally. It's a documented optional bidder param in our existing Prebid.js adapter to allow overriding as requested by a partner. It's there for parity across our integrations rather than a re-declaration of a standard field.
  • Query escaping: publisherId/supplyId now go through url.QueryEscape before macro resolution. Also added test.
  • getNativeAdm: simplified to branch on jsonparser.Get alone.
  • params_test.go: added data-type-mismatch cases for bidfloor and expdir.

…lution, simplify native adm unwrap, add test cases
@github-actions

Copy link
Copy Markdown

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, 79e6c67

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:120:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:144:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:189:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:206:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:216:	getNativeAdm			100.0%
total:										(statements)			98.0%

@franklong-sa

Copy link
Copy Markdown
Author

Hi @postindustria-code thanks for your review. I've addressed the comments if you could take another look. Thanks!

@postindustria-code

Copy link
Copy Markdown
Contributor

Thanks @franklong-sa — re-reviewed, everything's addressed and verified on the branch:

  • jsonutil.Marshal in place, encoding/json import dropped.
  • Multi-imp now validates that all imps share publisherId/supplyId and returns BadInput on mismatch —
    multi-imp-mismatch.json covers it. This fully resolves the last-imp-wins concern, and stamping site.publisher.id is now unambiguous. 👍
  • url.QueryEscape on both endpoint params (+ endpoint-param-escaping.json), getNativeAdm simplified, and the
    bidfloor/expdir type-mismatch cases added to params_test.go.
  • banner.expdir — understood, thanks for the context; keeping it for parity with your Prebid.js adapter is reasonable.

Verified: go build, go vet, and go test ./adapters/stackadapt/... -run 'Json|Params' all green.

LGTM — APPROVE.

@github-actions

Copy link
Copy Markdown

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, 9d493da

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:120:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:144:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:189:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:206:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:216:	getNativeAdm			100.0%
total:										(statements)			98.0%

@franklong-sa

Copy link
Copy Markdown
Author

Hi @bsardo we've received the 2 required approvals. Can we proceed with merging the changes in? Thanks!

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

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, 2393fee

stackadapt

Refer here for heat map coverage report

github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:28:	Builder				100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:38:	MakeRequests			81.8%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:70:	buildEndpointURL		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:78:	setImpsAndGetEndpointParams	100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:120:	setPublisherID			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:144:	MakeBids			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:189:	getMediaTypeForBid		100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:206:	resolveMacros			100.0%
github.com/prebid/prebid-server/v4/adapters/stackadapt/stackadapt.go:216:	getNativeAdm			100.0%
total:										(statements)			98.0%

@franklong-sa

Copy link
Copy Markdown
Author

Hi @bsardo @przemkaczmarek @postindustria-code thanks for the reviews and approvals. Just want to follow up can we merge in now?

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