Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prebid invokes runAdAuction() #10690

Closed
jdwieland8282 opened this issue Oct 31, 2023 · 14 comments · Fixed by #11379
Closed

Prebid invokes runAdAuction() #10690

jdwieland8282 opened this issue Oct 31, 2023 · 14 comments · Fixed by #11379

Comments

@jdwieland8282
Copy link
Member

jdwieland8282 commented Oct 31, 2023

navigator.runAdAuction() is a new browser function in Chrome (only) that begins a PAA (formally known as Fledge) Interest Group Auction. A publisher may invoke this function on their own, or a party with on page javascript may. GPT.js (GAM) would like to invoke this function for publishers using GAM. Prebid should explore an alternative approach given our on page presence.

The advantage Prebid has over GPT.js is prebid.js can invoke RAA() before GPT.js does. GPT.js will wait for the browser to run its contextual auction, otherwise known as the prebid auction. Prebid is effectively blocking GPT.js from calling RAA(). Prebid.js can do its normal auction mechanics ie, run a contextual auction, skip the contextual auction and just call RAA(), or it can run/do both.

Assumptions:

  1. Publisher can pass any direct sold bid to Prebid. If the bid from the normal prebid contextual auction , or the bid from RAA() is lower than the direct sold "floor", the publisher can choose to render the direct sold ad.

Questions:

  1. What happens when prebid.js invokes RAA()?
  2. Does an ad render, if not why?
  3. Do impression beacons fire, if not why?

Decision Logic URL
In this architecture, Prebid becomes the top level seller (TLS). The TLS needs to provide RAA() with an auctionConfig.decisionLogicUrl. For the sake of simplicity the decisionLogicUrl should select the highest bid. We acknowledge that this isn't how things work today, we'll iterate on this later.

This flow diagram represents a high level vision of what a Prebid invoked PAA auction could look like.

Screenshot 2023-10-31 at 12 45 56 PM
@rdgordon-index
Copy link

How do you envision GAM integrating into this flow given google/ads-privacy#65 (comment) ?

@patmmccann
Copy link
Collaborator

can you reopen this in https://github.com/prebid/Prebid.js

@patmmccann patmmccann transferred this issue from prebid/prebid.github.io Nov 2, 2023
@patmmccann patmmccann reopened this Nov 2, 2023
@patmmccann
Copy link
Collaborator

related: WICG/turtledove#851

@dmdabbs
Copy link

dmdabbs commented Nov 3, 2023

You're thinking perhaps something like this using Prebid infra as top-level seller....

/*
  Excerpted from 
  https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction

   All fields that specify URLs for loading scripts or JSON (decisionLogicURL and trustedScoringSignalsURL) 
    must be same-origin with seller and must point to URLs whose responses include the HTTP response header 
    Ad-Auction-Allowed: true to ensure they are allowed to be used for loading Protected Audience resources.
  */
  {
    'seller': 'https://paapi.prebid.org',
    'decisionLogicURL': 'https://paapi.prebid.org/.../decisionLogic.js',
    'trustedScoringSignalsURL': 'https://paapi.prebid.org/...',
    
    // using headers (https://github.com/WICG/turtledove/blob/main/FLEDGE.md#252-using-response-headers)
    'directFromSellerSignals': ...

    'auctionSignals': {...},
    'requestedSize': {width: 300, height: 250},
    'sellerSignals': {...},
    'sellerTimeout': 500,
    'componentAuctions': [
      {'seller': 'https://pa.ssp1.com',
        'decisionLogicURL': ...,
        ...
      },
      {'seller': 'https://td.ssp2.com',
        'decisionLogicURL': ...,
        ...
      },
      ...
    ],
    'signal': /* optionally, an AbortSignal */...,
    'resolveToConfig': /* optionally, a boolean */...
  }

...where the decisionLogicURL is open source Prebid code that does a straightforward, first-price highest bid value wins (accounting for currency).

Prebid.org would need to enroll and publish attestations on whatever site it uses for this (if not prebid.org). Note that you would want to ensure that you don't have exposure since you are publishing attestations.

Then perhaps moving on to possibility of some seller-controlled/directed option, such as the seller's origin (seller enrolling &c.).

Component seller order is randomized for fairness (if TL auction order matters for performance).

The top-level seller has the ability to call

navigator.deprecatedReplaceInURN( ffConfigOrURN, macroNameValueMap )

if "standard macros" were spec'ed.

@bretg bretg changed the title Prebid invokes runAdAuction()they Prebid invokes runAdAuction() Nov 6, 2023
@bretg bretg changed the title Prebid invokes runAdAuction() Prebid invokes PAA runAdAuction() Nov 6, 2023
@jdwieland8282 jdwieland8282 changed the title Prebid invokes PAA runAdAuction() Prebid invokes runAdAuction() Nov 7, 2023
@patmmccann
Copy link
Collaborator

closing #9481 as a dupe

@patmmccann patmmccann moved this from Triage to Needs Req in Prebid.js Tactical Issues table Nov 20, 2023
@dmdabbs
Copy link

dmdabbs commented Dec 5, 2023

The top-level seller has the ability to call
navigator.deprecatedReplaceInURN( ffConfigOrURN, macroNameValueMap )
if "standard macros" were spec'ed.

Viz this, Google Ads requested another till-2026-feature to support SSP macros:
WICG/turtledove#931 (comment)

@bretg
Copy link
Collaborator

bretg commented Jan 5, 2024

Prebid becomes the top level seller (TLS)

I think Prebid should stay out of the business of being a top-level seller, instead we should support member companies (publishers and ad tech companies) with tools and instructions for doing it.

Even if Prebid could get the attestation, support and costs will be a problem. People will need implementation and debug support and Prebid is not staffed to support the global internet. We will probably not be able use the nice free jsdelivr domain, and it costs a pretty penny to host high traffic files. Instead, major pubs should do this themselves and the managed Prebid services can do it for those that aren't staffed for support.

Reporting is another problem. Prebid is unlikely to become an analytics company. Do we know if the PAA reporting domain is required to match the decisionLogic domain? If not, then perhaps analytics vendors can plug into the PAA config.

@rdgordon-index asks the right question above. No Prebid-based solution can be taken seriously without knowing how it coexists with GAM. But GAM seems unlikely to cooperate without being forced to, so don't we have to assume that once the page gives control to GAM, we might not get it back? Assuming that's the case, there have been two scenarios discussed in various meetings:

  1. When a Prebid contextual bid wins in GAM, the PUC is served, which could initiate an Interest Group auction.
  2. If a publisher is willing to bypass GAM entirely above a certain threshold or for deals, Prebid could be configured to run the regular auction, then the IG auction and just directly render the result if it's above a configured threshold. (part of the scoreAd logic)

My understanding of the way IG auctions work in Chrome is that calling runAdAuction() is the end of the road. The page code cannot get an "IG bid" to pass anywhere. From https://developers.google.com/privacy-sandbox/relevance/protected-audience-api/ad-auction -- "the publisher page cannot inspect the winning ad."

That page also says "runAdAuction() returns a promise that resolves to a URN" - if that URN is empty when no IG bid wins, then seems to me both of the above options could work.

@patmmccann
Copy link
Collaborator

patmmccann commented Jan 8, 2024

In my view, the project should distribute code to call rAA, either in a different repo or as part of the rendering workflow, and we should be caveating that prebid.org and jsdeliver do not have attestations or plans to file one, but who knows, things could change down the road. Currently, i see this issue as working on code, not infrastucture.

@JoelPM
Copy link
Contributor

JoelPM commented Jan 9, 2024

I second @patmmccann's comment. Prebid should definitely distribute the code that runs the top level auction. Prebid has the trust of the publishers and ad-tech providers. Multi-seller PAAPI was basically inspired by Prebid.js.

@laurb9
Copy link
Contributor

laurb9 commented Jan 9, 2024

trustedScoringSignalsUrl must have the same domain as seller and decisionLogicUrl
With prebid.js as top-level seller domain the pub may not be able to use a KV server for trusted scoring signals

@gmcgrath11
Copy link

gmcgrath11 commented Jan 9, 2024 via email

@bretg
Copy link
Collaborator

bretg commented Jan 9, 2024

Prebid should definitely distribute the code

My issue is with publishers loading anything directly from files.prebid.org or from jsdelvr.net. (*)

Besides the domain issue Laurentiu notes, Prebid is not set up to pay for that level of expense from prebid.org, nor are we prepared to support an internet-wide service like this. I think it's more reasonable for the transfer costs and support issues to be spread across publishers and managed services.

(*) Prebid already has 3 of the top 10 files delivered globally by jsdelivr. Hosting a PAA auction file could quickly blow past even the currency file in traffic size.

@patmmccann
Copy link
Collaborator

documenting WICG/turtledove#1093 as the current pain

@patmmccann patmmccann moved this from Needs Req to In progress in Prebid.js Tactical Issues table Apr 18, 2024
@patmmccann patmmccann moved this from In progress to Ready for Dev in Prebid.js Tactical Issues table Apr 18, 2024
@skolb469
Copy link

I'd support @patmmccann comment of "the project should distribute code to call rAA, either in a different repo or as part of the rendering workflow".

We have some sites / situations where we do not use GAM for display, instead relying just on client-side partners and render the highest bid directly on page.

Similarly, (and I recognize there is a lot left to be desired re: Video / PAAPI) but our Outsream player does not use GAM at all, as AdX policy does not support Outstream. Again we rely on client-side partners (Prebid + Amazon) and render the highest winning bid directly into VideoJS/IMA SDK. Having Prebid support the PAAPI Top Level Seller logic would be great.

(Scott Kolb, Longitude)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

Successfully merging a pull request may close this issue.

9 participants