Repository navigation
Prebid Server: server-side bidders don't need a client-side adapter - #6848
patmmccann wants to merge 2 commits into
Conversation
Document that bidders in s2sConfig.bidders can be left out of the Prebid.js build, and the caveats: TCF vendor enforcement needs gvlMapping or deferS2Sbidders because the GVL ID comes from the client adapter, adapter- defined aliases aren't known, and client-side fallback (s2sTesting) needs the adapter. Mention it on the PBS + Prebid.js use case page, and fix that page's existing markdownlint errors. Fixes prebid#6053 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ Deploy Preview for prebid-docs-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 781d1507b3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| If you leave the adapter out, keep these in mind: | ||
|
|
||
| - **GDPR / TCF:** the bidder's Global Vendor List ID is normally declared by its Prebid.js adapter. Without the adapter, Prebid.js doesn't know it. If the [TCF Control module](/dev-docs/modules/tcfControl.html) is enforcing vendor consent for `basicAds` (the default), the bidder is removed from the auction. Either declare its ID with [`gvlMapping`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-gvlMapping), which also sends it to Prebid Server for aliases, or set `deferS2Sbidders: true` on the `basicAds` rule to let Prebid Server enforce vendor consent for bidders with unknown IDs. |
There was a problem hiding this comment.
Warn that deferral still blocks user syncs
When the default Purpose 1/storage vendor check is active, deferS2Sbidders is not a full alternative to gvlMapping: the option applies only to basicAds (dev-docs/modules/tcfControl.md:83), while user-sync pixels are separately gated by Purpose 1 (dev-docs/modules/tcfControl.md:46). For a server-only bidder with no adapter/GVL mapping, this recommendation therefore lets its bids through but still silently blocks the /cookie_sync results that the preceding paragraph says will run, reducing match rates; document that gvlMapping (or a storage-rule exception) is still required for user syncs.
Useful? React with 👍 / 👎.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #6053
This adds the note agreed in the issue: a publisher can leave a server-side bidder's Prebid.js adapter out of the build. It also documents the quirks that come with that, checked against current Prebid.js code.
Changes
dev-docs/modules/prebidServer.md: new section "Server-Side Bidders Don't Need a Client-Side Adapter".adapterManager.makeBidRequestsonly looks up a registered adapter for client bidders. S2S bidders are forwarded to PBS without one. There are no bidder-specific param transforms anymore:transformBidParamswas removed in 9, and the AppNexus PSP converter module no longer exists. PBS handles param validation and type conversion, plus user syncs via/cookie_sync.tcfControlenforcing vendor consent forbasicAds(the default,enforceVendor: true), a bidder with an unknown GVL ID is removed. The fix isgvlMappingordeferS2Sbidders: true(modules/tcfControl.tsgetGvlid/validateRules).extPrebid.aliases.s2sTesting, needs the adapter in the build.dev-docs/examples/s2s-only.md(new, for Document server-side bidding without client-side adapters #5033): a "Server-Side Only Bidding" example page, plus a sidebar entry next to "Running Prebid.js as an ad server".bids: [{ module: 'pbsBidAdapter', params: { configName } }]) that requests a Prebid Server stored impression. It uses the Prebid mobile team's test server (prebid-server-test-j.prebid.org, the stored requestprebid-demo-banner-300-250and the demo account from the mobile docs). The page says not to use that server in production.s2sConfig.bidderslisting a bidder whose adapter isn't in the build, linking to the caveats section above.prebid.js@latestnot-for-prod build. The test server allows CORS from any origin; one auction request returns a 0.15 USD 300x250s2sbid from seatprebid, which renders the Prebid test creative. WithallowUnknownBidderCodes: falseno bid comes back, so the example's comment about it is accurate.prebid-server/use-cases/pbs-pbjs.md: one paragraph under the s2sConfig example saying bidderA/bidderB's adapters don't need to be in the build, with a link to the new section.markdownlint-cli2 0.20.0 (CI's version) and 0.22.1 pass on all changed files.
🤖 Generated with Claude Code