-
Notifications
You must be signed in to change notification settings - Fork 2
Description
This is an issue to list possible Prebid.js interactions only for the purpose of discussion.
SSPs and DSPs do not require a seed per impression opportunity given the model terms and this design assumes a simplified approach of allowing the publisher to collect signatures per impression opportunity if they wish for the purposes of an ad specific audit log, but does not require it. In reality, the DSP is required to sign if they return an opportunity, regardless if they actually used the PAF data to target a campaign, and so the application of a creative level audit log does not seem to bring great value, but adds much complexity and cost for all the parties involved. This may not be the end state of PAF, but I strongly suggest it for the MVP.
Exposing PAF data to Prebid.js
The simplest option here is likely for paf-lib.js to expose a function in the window that a Prebid.js identity submodule will call to retrieve the PAD data and seed.
PAF.getDataAndSeed()
This function will return the encrypted identifiers, preferences, and a signed transmission seed. In this case the publisher can control who can read the PAF data through a Prebid.js configuration and the allowed bidders will have access to the data objects.
The data will be presented to SSPs in a similar fashion as in OpenRTB. If the bidder elects to use the bidRequest.userIdAsEids function, the output will look similar to this
{
"eids": [
{
"source": "paf",
"uids": [
{
"atype": 1,
"id": "7435313e-caee-4889-8ad7-0acd0114ae3c",
"ext": {
"version": 0,
"type": "prebid_id",
"source": {
"domain": "operotor0.com",
"timestamp": 1639589531,
"signature": "12345_signature"
}
}
}
],
"ext": {
"preferences": {
"version": 0,
"data": {
"opt_in": true
},
"source": {
"domain": "cmp1.com",
"timestamp": 1639589531,
"signature": "12345_signature"
}
},
"transmissions": [
{
"version": 0,
"seed": {
"version": 0,
"transaction_id": "a0651946-0f5b-482b-8cfc-eab3644d2743",
"publisher": "publisher.com",
"source": {
"domain": "publisher.com",
"timestamp": 1639582000,
"signature": "12345_signature"
}
}
}
]
}
}
]
}
otherwise if bidRequest.userId is used, the format would be take the userId key (pafId) and return the something similar to the following
{
"identifiers": [
{
"id": "7435313e-caee-4889-8ad7-0acd0114ae3c",
"ext": {
"version": 0,
"type": "prebid_id",
"source": {
"domain": "operotor0.com",
"timestamp": 1639589531,
"signature": "12345_signature"
}
}
}
],
"preferences": {
"version": 0,
"data": {
"opt_in": true
},
"source": {
"domain": "cmp1.com",
"timestamp": 1639589531,
"signature": "12345_signature"
}
},
"seed": {
"version": 0,
"transaction_id": "a0651946-0f5b-482b-8cfc-eab3644d2743",
"publisher": "publisher.com",
"source": {
"domain": "publisher.com",
"timestamp": 1639582000,
"signature": "12345_signature"
}
}
}
Prebid.js returning data to PAF
In the return case, there are actually only 2 likely options. One where adapters interact with paf-lib.js and another where we amend Prebid.js core to accept PAF signatures and Prebid.js exposes that data to paf-lib.js.
Adapters interact with PAF lib
This design is attractive for a few reasons. Especially for MVP
- Adapters have to do work for this regardless, so them appending new data to the prebid.js response or calling a window function is the same amount of work
- Less work on Prebid.js core and quicker time to market
- Prebid.js has not yet decided on PAF or not. Keeping the code in the adapters gives much more flexibility
Any PAF participant who receives PAF data through the PafIdentityModule would be required to return signatures to the paf-lib. This would easily be done by a function call such as PAF.addSignatures([transactionId, ...], signatures) where the transactionIds represent 1 to many transactions which were sent for a given Prebid.js request and the signatures are all of the signatures the SSP received along with their own.
Prebid.js PAF
This case is very similar to the case above, however bid adapters instead of calling PAF directly would append the signatures to the bidResponse, likely in the meta object under something like paf_signatures. In this case changes to Prebid core would be required to collect all the signatures and call the paf-lib.