[pull] master from prebid:master - #58
Conversation
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
|
Whoa there, partner! 🌵🤠 We wrangled some duplicated code in your PR:
Reducing code duplication by importing common functions from a library not only makes our code cleaner but also easier to maintain. Please move the common code from both files into a library and import it in each. We hate that we have to mention this, however, commits designed to hide from this utility by renaming variables or reordering an object are poor conduct. We will not look upon them kindly! Keep up the great work! 🚀 |
|
Tread carefully! This PR adds 2 linter errors (possibly disabled through directives):
|
* GeoEdge RTD Provider: display opt-out New optional params.display turns off display wrapping while leaving the outstream gate active. Opt-out, not opt-in: only an explicit `display: false` disables it, so existing publishers are unaffected. display is also passed into the client frame, unread for now, so the client can act on it later without another round of per-customer coordination. Spec call sites updated to match: the params are positional and display sits second, which otherwise bound outstream to undefined. * GeoEdge RTD Provider: type the module params Adds a d.ts declaring the module's config shape and augmenting ProviderConfig, so publishers importing prebid's types via npm can discover and type-check the geoedge params. Follows AGENTS.md and the optableRtdProvider pattern. keyName is omitted: it appears in the JSDoc typedef but the module never reads it.
The ortbConverter imp processor never set imp.tagid, so bid requests from Prebid.js publishers reached the exchange with no placement identifier. SSP-side placement reporting needs an identifier the publisher owns and recognises, and the ad unit code is the one always available on the bid request. A publisher-supplied ortb2Imp.tagid is merged onto the imp by buildImp before this runs and is left untouched, so this is a default and not an override.
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
2 similar comments
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
Co-authored-by: vrishko <vasyl.rishko@smartyads.com>
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
* Add Prebid Chrome DevTools agent skill * Clarify experimental Chrome DevTools MCP launch * Document Prebid Chrome DevTools agent skill * Handle existing Chrome DevTools MCP servers * Expose Chrome DevTools skill to Claude
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
…illing (#15591) * Update tagId to tagid * Update adapter to use ortbConverter * Swithc from onBidWon to onBidBillable * Prefer floor module over params * Add support for app * Fix test mtype * Add more test coverage * Add more test cases * Add more native tests * Ensure devicetype gets always set * Fix settign bidfloor * Add CTV detection * Default to undefined mtype * Check mtype first and the use fallback * Add better fallback for tagid * Removed dead code * Fix default currency and small refactor * Add id to test * Ensure cur is set * Only overwrite id if not set * MAgic number for DEFAULT_CURRENCY * Add types * Don't overrided id --------- Co-authored-by: Tuomo Tilli <tuomo.tilli@readpeak.com>
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
* Build system: update artifact downloads to v8 * Update action.yml
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
(#15559) * modify adUnit infomation * fix imuid module * feat(GenieeBidAdapter): Add support for GPID and pbadslot - Add support for GPID (Global Placement ID) from ortb2Imp.ext.gpid - Add fallback support for ortb2Imp.ext.data.pbadslot - Include gpid parameter in request when GPID exists - Add test cases to verify GPID, pbadslot, and priority behavior * Aladdin Bidder ID5 Compatible Adapter * add comment * modified test message * the import of buildExtuidQuery was missing * test: add test cases for id5id in extuid query * delete duplicate test * feat(GenieeBidAdapter): Add support for iframe-based cookie sync in BidAdapter * [CARPET-5190] Bid Adapter: Fix the default value of the ib parameter - change default value ib parameter * remove ib param * fix test/spec/modules/ssp_genieeBidAdapter_spec.js * Corrected cookie sync URL and added title to data * reset document.title after test * Modify document.title in sandbox.stub * CARPET-6134 Change logic of specified currency bidparams * format code * update assert in unit test * update code * update code * update reset config * Update assert to expect * Update logic * Add param floor price for aladdin bidder send to backend * Add param schain for aladdin bidder send to backend * hotfix accept send floor price value zero aladdin bidder * format code * Geniee SSP Bid Adapter: remove duplicated getFloorPrice declaration modules/ssp_genieeBidAdapter.js declares the identical getFloorPrice function twice, which stops the gulp-babel precompile and prevents any unit spec from running. Keep a single declaration. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * add ex_genieeBidAdapter doc * add ex_geniee adapter * format * move public bid param types to a .d.ts * Geniee Exchange Bid Adapter: use default text/plain content type to avoid CORS preflight * Geniee Exchange Bid Adapter: replace stale CORS comment with rationale for default text/plain * Geniee Exchange Bid Adapter: skip requests whose ortb2 `at` is not 1 * accepts a multiformat (banner + video) ad unit and sends only the banner part: * add comments about currency decison priority * send placementId to imp[].tagid instead of query parameter * Geniee Exchange Bid Adapter: reject non-string placementId in isBidRequestValid * Geniee Exchange Bid Adapter: render NaN/Infinity faithfully in param error logs * Geniee Exchange Bid Adapter: declare device-storage disclosure via disclosureURL - point disclosureURL at https://genieesspv.jp/disclosure.json, which lists the cookies on *.genieesspv.jp and *.gssprt.jp (gid, _g_optout, sync_done, GSRT*, and demand partners' matched identifiers) with lifetimes and TCF purposes - document the storage in the module md; Geniee has no gvlid because the Exchange does not serve GDPR territories Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Murano Takamasa <takamasa-murano@j0098.geniee.jp> Co-authored-by: daikichiteranishi <49385718+daikichiteranishi@users.noreply.github.com> Co-authored-by: teranishi daikichi <daikichi.teranishi@geniee.co.jp> Co-authored-by: gn-daikichi <49385718+gn-daikichi@users.noreply.github.com> Co-authored-by: takumi-furukawa <takumi.furukawa@geniee.co.jp> Co-authored-by: furukawaTakumi <45890154+furukawaTakumi@users.noreply.github.com> Co-authored-by: furukawaTakumi <black3moon88@gmail.com> Co-authored-by: haruki-yamaguchi <haruki.yamaguchi@geniee.co.jp> Co-authored-by: haruki yamaguchi <100411113+hrkhito@users.noreply.github.com> Co-authored-by: Thanh Tran <thanhtv@geniee.co.jp> Co-authored-by: thanhtran-geniee <135969265+thanhtran-geniee@users.noreply.github.com> Co-authored-by: hieund-geniee <hieund@geniee.co.jp> Co-authored-by: hieund-geniee <127374021+hieund-geniee@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
…#15562) * User ID: a filtered refreshUserIds must not release the auction early refreshUserIds({submoduleNames}) chains off done.catch(() => null). Since cancelAndTry rejects the previous cancel deferred, that promise settles at once and the new chain never waits for the work the old one still held. A submodule the refresh did not name, one with a network call, is dropped from the auction it was about to reach. A publisher on auctionDelay 300 with liveIntentId and pubProvidedId called refreshUserIds({submoduleNames: ['pubProvidedId']}) at page load: the first auction opened ~300ms early and first-auction LiveIntent presence fell from 77.1% to 49.7% (z ~ 8). Track the callback batches that have been discovered but not finished, from discovery rather than from when they start running, since with auctionDelay 0 they are held until after the auction ends. A filtered refresh then waits for what it left running, while an unfiltered one supersedes everything and keeps escaping a stuck initialization. * userId: register a refresh's batch when it is issued, and let a full refresh release what it supersedes Two from review. The batch was registered once the refresh chain reached initSubmodules, so a second filtered refresh issued back to back could snapshot the outstanding set before the first had registered, and resolve while the first one's callback was still running. It is now registered synchronously when the refresh is issued. And an unfiltered refresh only omitted the existing markers from its own wait, leaving them in place: a batch nothing would ever complete stayed outstanding and any later filtered refresh inherited it. An unfiltered refresh now releases the markers it supersedes. * userId: release superseded batches only after the replacement is installed An unfiltered refresh released the markers it supersedes before cancelAndTry swapped in the new done. With greedy promises that can fulfil the chain the refresh is replacing, and a caller checking whether the chain is still current sees the old one settle and takes its result. The release now happens after the swap, and skips the refresh's own batch. Reported by Codex review. * User ID: eslint --fix on the initChain indentation Whitespace only: the added tracking block left initChain over-indented by two spaces and a multi-space run before PbPromise.all. * userId: stub the auction delay in the filtered-refresh test The test passed the delay stub as `delay`, but startAuctionHook reads `mkDelay`, so the real 10ms auctionDelay timer stayed in the race and won on Safari before the callback resolved. --------- Co-authored-by: Patrick McCann <patmmccann@gmail.com>
* Core: remove three page-lifetime retainers of per-auction data In a long-lived SPA, every auction's request-side object graph (ad units, bidder requests with per-auction ortb2, bid requests, metrics) was retained for the page lifetime regardless of minBidCacheTTL, because three registrations were made per auction (or per bidder request) and never removed: 1. newAuction() registered events.on(PBS_ANALYTICS, ...) with no matching events.off; each handler pinned its auction's entire closure in the global event registry. Replaced with a single router registered by the auction manager, which already owns the auctionId -> auction lookup: on PBS_ANALYTICS with a non-null seatnonbid it calls addNonBids (now exposed on the auction) on the matching live auction. The only delta is that an event for an already-evicted auction is now dropped - unobservable, since an evicted auction's nonbids were unreachable through any API. 2. newAuction() registered onMinBidCacheTTLChange(() => _bidsReceived.refresh()) in bidTTL's module-level listener array, which has no removal. The auction now exposes refreshBidTTLs(), and the manager's existing singleton onMinBidCacheTTLChange listener fans out to every live auction before refreshing its own auctions collection. Live auctions behave as before; evicted ones stop being refreshed, which was pure wasted work. 3. guardTids in bidderFactory was memoize()d with the default key function - a Map keyed by the bidderRequest object, never cleared, strongly retaining every bidderRequest and its ortb2. The cache is now a WeakMap keyed by the bidderRequest: the two uses within one bid cycle still share a single guard (same proxy identity, one tidsAllowed check per bidder request), but the entry lives no longer than the bidderRequest itself. The guard factory body is unchanged. Listener count drops from O(auctions) to O(1) per manager for both event paths, and the guard cache no longer extends any request's lifetime. Tests: PBS_ANALYTICS routing (unknown auctionId is a no-op, null or absent seatnonbid adds nothing, nonbids land only on the matching one of two live auctions); minBidCacheTTL updates re-evaluate bid retention on every live auction; guardTids returns the same guard for the same bidderRequest and independent guards for different ones. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Core: deliver PBS nonbids to in-flight auctions independently of the auction cache Nonbid routing looked up the auction in the manager's TTL'd auction collection, which the public clearAllAuctions() API empties. A PBS response arriving after a mid-flight clear would then find no auction and silently drop its seatnonbid. The lookup also returned only the first match, while auctionId is a publisher-suppliable requestBids option, so concurrent auctions sharing an id would not all receive their nonbids. The manager now tracks in-flight auctions in a Map keyed by auctionId, each key holding the set of live auctions using that id. Auctions are added on creation and removed when their `end` promise resolves, so the map never references an auction past its end. The PBS_ANALYTICS router delivers seatnonbid to every auction in the matching set, regardless of the state of the auction cache. Also, per review: - test that the manager registers no PBS_ANALYTICS listener per auction (verified to fail against the code that did), plus tests for the mid-flight-clear and shared-auctionId scenarios and for refreshBidTTLs being exposed and safe to call repeatedly; - the guard-independence test now asserts through the memoized bidRequest member (the same guard returns the same proxy for the same bid, different guards do not) instead of comparing proxies that are constructed fresh on every call; - comments on the nonbid router and the guardTids cache state mechanism and consequence only. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Core: route PBS nonbids to ended-but-retained auctions, not only in-flight ones The previous change routed PBS_ANALYTICS seatnonbid solely through the in-flight auction map, whose entry is dropped when the auction's `end` promise resolves. Because that resolution runs inline (ahead of AUCTION_END), a PBS response arriving after an auction ended — an s2s auction that hit cbTimeout before the server replied — found no target and dropped the seatnonbid, where the previous per-auction listener delivered it up until the auction was actually evicted. Delivery now targets the union of the in-flight set for the auctionId and the auction found in the TTL'd `_auctions` cache, deduplicated so an auction present in both is notified once. The cache covers auctions that have ended but are still retained (restoring delivery up to TTL eviction); the in-flight set covers auctions removed from the cache (e.g. clearAllAuctions) while a PBS response was outstanding. Also: - The in-flight map's comment now states its actual bound: an auction whose `end` never resolves stays in the map for the page lifetime, a residual of the same class that predated per-auction routing. - guardTids is a typed function taking a ClientBidderRequest instead of `any`, so a primitive argument is a compile error rather than a runtime invalid-weak-map-key TypeError; the WeakMap behavior is unchanged. - The auction's exposed nonbid setter is renamed addNonBids -> addSeatNonBids, matching getProperties().seatNonBids and the event's seatnonbid field and no longer a keystroke from the unrelated addNoBid. Test: a seatnonbid emitted after the auction ends but before eviction reaches getNonBids() (fails when routing was in-flight-only). The clearAllAuctions-mid-flight and shared-auctionId tests still pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Core: route PBS nonbids to all matching retained auctions, not just the first The nonbid router's cache-side lookup used getAuction(), which returns only the first auction in the TTL'd collection with a matching id. Because auctionId can be publisher-supplied, two or more concurrent auctions can share one; once more than one of them has ended (dropped from the in-flight set) but is still retained in the cache, a late seatnonbid reached only the first, narrowing the "every auction sharing the auctionId" delivery guarantee the moment those auctions ended. The router now iterates the auction collection and adds every auction whose id matches into the same dedup set the in-flight half fills, so a late seatnonbid reaches all retained auctions sharing the id, each once. Also reword the in-flight map comment: its retention is genuinely new state, bounded to the error paths where an auction's `end` never resolves and not scaling with auction count, rather than equivalent to the prior page-lifetime leak. Test: two auctions sharing one auctionId, both awaited to end and still retained, receive an emitted seatnonbid on both (fails when only the first match was notified). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
… 'fixed' ) in the `ext` response (#15590) * Utiq ID module: Upgrade utiq modules to pass the category ('mobile' | 'fixed' ) in the `ext` response * Utiq ID module: Upgrade utiq modules tests to fit new ids structure * Utiq ID module: Fix code duplication and linter issues * Utiq ID module: Fix tests * Utiq ID module: Prioritize ids deppending on the category * Utiq ID module: Fix compatibility and code duplication issues * Utiq ID module: Fix tsDocs
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
2 similar comments
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
* New bid adapter: Adswag Adds the Adswag bid adapter (banner, video, audio) for directly-integrated European supply. GVL vendor 1417; EU-hosted endpoint (bid.adswag.ai). Includes bidder docs and unit tests. * ci: re-trigger checks after GitHub incident 429s
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
* tealBidAdapter - added usersync gpp support * tealBidAdapter - added unit tests to cover consent
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
* Attekmi: add Ppcbuzz adapter * endpoint fix --------- Co-authored-by: Victor <victor.banudz@smart-hub.io>
|
Tread carefully! This PR adds 20 linter errors (possibly disabled through directives):
|
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.1)
Can you help keep this open source service alive? 💖 Please sponsor : )