Skip to content

Yieldmo Bid Adapter: recover tdid/pubcid/criteoId from userIdAsEids - #67

Open
ym-aaron wants to merge 2 commits into
masterfrom
bugfix/PS-7862-yieldmo-adapter-userid-eids-fallback
Open

Yieldmo Bid Adapter: recover tdid/pubcid/criteoId from userIdAsEids#67
ym-aaron wants to merge 2 commits into
masterfrom
bugfix/PS-7862-yieldmo-adapter-userid-eids-fallback

Conversation

@ym-aaron

Copy link
Copy Markdown

Type of change

  • Bugfix

Description of change

getId() in the Yieldmo adapter read tdid / pubcid / criteoId off the legacy bid.userId object. Prebid removed bid.userId in 10.0.0 (prebid/Prebid.js#13253) in favor of userIdAsEids, so on Prebid 10+ getId() returns undefined and the adapter silently stops sending the tdid, pubcid and cri_prebid params on the banner (/exchange/prebid) request.

The IDs still travel inside the eids blob, so DSP-facing user.ext.eids are unaffected — but the exchange keys a few paths specifically on the flat params (TheTradeDesk real-time enrichment lookup, the internal pubcid identifier, and the partner-id cookie-match contribution), and those have no eids fallback. This surfaced during investigation of PS-7862 (Minute Media, 9.41 → 11.15).

Fix: when bid.userId is absent, recover each id from userIdAsEids by source (adserver.org → tdid, pubcid.org → pubcid, criteo.com → criteoId). The legacy object is still preferred when present, so pre-10 behavior is unchanged. Restores byte-for-byte request parity with 9.x on Prebid 10+.

Scope: banner GET path only. The video/openRTB path never used bid.userId (it reads userIdAsEids directly) and is untouched.

Testing

  • Added 5 unit tests under buildRequests > Banner > userIdAsEids fallback covering tdid/pubcid/criteoId recovery, legacy-object precedence, and the missing-source case.
  • gulp test --file test/spec/modules/yieldmoBidAdapter_spec.js: 93 passing (run against the identical change on the current upstream checkout; getId/getEids/spec helpers are identical on this base).
  • eslint clean on both changed files.

Other information

Refs PS-7862.

ym-aaron and others added 2 commits July 27, 2026 11:25
getId() read ids off the legacy bid.userId object, which Prebid removed in
10.0.0 (prebid#13253) in favor of userIdAsEids. On 10+ that made the
adapter silently stop sending the tdid, pubcid and cri_prebid params on the
banner request, degrading exchange-side paths that key on them (TTD real-time
enrichment, internal pubcid, partner-id cookie match).

Fall back to reading each id from userIdAsEids by source (adserver.org,
pubcid.org, criteo.com) when bid.userId is absent, preferring the legacy object
when present. Restores parity with 9.x on Prebid 10+.

Refs PS-7862.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a test built from a live getUserIdsAsEids() capture on www.yahoo.com
(Prebid 9.53.2): a 13-source blob with a single adserver.org entry tagged
rtiPartner TDID, a pubcid.org, no criteo, and 11 sources never read as flat
params. Asserts tdid/pubcid are recovered from userIdAsEids on Prebid 10+, that
cri_prebid is omitted (no criteo id), and that every EID source is still
forwarded via the eids param.

Refs PS-7862.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant