From c00a592a29d371a78d03ba285aeea7f5b2b4f6e3 Mon Sep 17 00:00:00 2001 From: brusshamilton Date: Tue, 26 Apr 2022 14:40:10 -0400 Subject: [PATCH] Add priority and perBuyerGroupLimits (#276) Fixes #79 --- FLEDGE.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/FLEDGE.md b/FLEDGE.md index d24be3edc..0133b889a 100644 --- a/FLEDGE.md +++ b/FLEDGE.md @@ -86,6 +86,7 @@ Browsers keep track of the set of interest groups that they have joined. For ea const myGroup = { 'owner': 'https://www.example-dsp.com', 'name': 'womens-running-shoes', + 'priority': 0.0, 'biddingLogicUrl': ..., 'biddingWasmHelperUrl': ..., 'dailyUpdateUrl': ..., @@ -108,6 +109,8 @@ The browser will remain in an interest group for only a limited amount of time. #### 1.2 Interest Group Attributes +The `priority` is used to select which interest groups participate in an auction when the number of interest groups are limited by the `perBuyerGroupLimits` attribute of the auction config. If not specified, a `priority` of `0.0` is assigned. There is no special meaning to these values. These values are only used to select interest groups to participate in an auction such that if there is an interest group participating in the auction with priority `x`, all interest groups with the same owner having a priority `y` where `y > x` should also participate (i.e. `generateBid` will be called). In the case where some but not all interest groups with equal priority can participate in an auction due to `perBuyerGroupLimits`, the participating interest groups will be uniformly randomly chosen from the set of interest groups with that priority. + The `userBiddingSignals` is for storage of additional metadata that the owner can use during on-device bidding, and the `trustedBiddingSignals*` attributes provide another mechanism for making real-time data available for use at bidding time. The `biddingWasmHelperUrl` field is optional, and lets the bidder provide computationally-expensive subroutines in WebAssembly, rather than JavaScript, to be driven from the JavaScript function provided by `biddingLogicUrl`. If provided, it must point to a WebAssembly binary, delivered with a `application/wasm` mimetype. The corresponding `WebAssembly.Module` will be made available by the browser to the `generateBid` function. @@ -155,6 +158,10 @@ const myAuctionConfig = { 'https://www.another-buyer.com': 200, '*': 150, ...}, + 'perBuyerGroupLimits': {'https://www.example-dsp.com': 2, + 'https://www.another-buyer.com': 1000, + '*': 15, + ...}, 'componentAuctions': [ {'seller': 'https://www.some-other-ssp.com', 'decisionLogicUrl': ..., @@ -174,6 +181,8 @@ The returned `auctionResultPromise` object is _opaque_: it is not possible for a Optionally, `sellerTimeout` can be specified to restrict the runtime (in milliseconds) of the seller's `scoreAd()` script, and `perBuyerTimeouts` can be specified to restrict the runtime (in milliseconds) of particular buyer's `generateBid()` scripts. If no value is specified for the seller or a particular buyer, a default timeout of 50 ms will be selected. Any timeout higher than 500 ms will be clamped to 500 ms. A key of `'*'` in `perBuyerTimeouts` is used to change the default of unspecified buyers. +Optionally, `perBuyerGroupLimits` can be specified to limit the number of of interest groups from a particular buyer that participate in the auction. A key of `'*'` in `perBuyerGroupLimits` is used to set a limit for unspecified buyers. For each buyer, interest groups will be selected to participate in the auction in order of decreasing `priority` (larger priorities are selected first) up to the specfied limit. The selection of interest groups occurs independently for each buyer, so the priorities do not need to be comparable between buyers and could have a buyer-specific meaning. The value of the limits provided should be able to be represented by a 16 bit unsigned integer. + A `Permissions-Policy` directive named "run-ad-auction" controls access to the `navigator.runAdAuction()` API. In the case of a component auction, all `AuctionConfig` parameters for that component auction are only scoped to buyer and seller scripts run as part of that auction component. Similarly, all vaues specified by the top-level auction are not applied to the component auctions.