Skip to content

Conversation

@ChristianPavilonis
Copy link
Collaborator

@ChristianPavilonis ChristianPavilonis commented Dec 16, 2025

Closes #139


### Auction Flow
A named configuration that defines:
- Which providers participate
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirming "providers" means wrappers?

- Which providers participate
- Execution strategy (parallel, waterfall, etc.)
- Timeout settings
- Optional mediator
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mediator = final ad-server?

strategy = "parallel_mediation"
bidders = ["prebid", "aps"]
mediator = "gam"
timeout_ms = 2000
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

timeout meaning the time for PBS, APS etc to come back to TS right? This does not include any GAM RT's or think time?


**Flow:**
1. Prebid and APS run in parallel
2. Both return their bids simultaneously
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better way to say is that "Both return their bids within a time window" as they'll never be simultaneous


**Flow:**
1. All bidders run in parallel
2. Highest bid wins
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may be addressed elsewhere, but AFAIK APS doesn't return a clear text creative bid, so we'll need to understand what the decryption of the TAM value looks like


**Flow:**
1. Try Prebid first
2. If Prebid returns no bids, try APS
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's discuss this on a call as it's not really a realistic scenario where PBS comes back with nothing and I don't know any pubs interested in waterfalls these days. We also need to make sure we are considering bid floors set by publishers here. Maybe I'm missing context?

aram356

This comment was marked as outdated.

@ChristianPavilonis ChristianPavilonis force-pushed the feature/auction-integrations branch from 92c19a7 to 39cb7dc Compare January 9, 2026 00:33
@ChristianPavilonis ChristianPavilonis marked this pull request as ready for review January 12, 2026 19:24
@ChristianPavilonis ChristianPavilonis force-pushed the feature/auction-integrations branch from 39cb7dc to c82ffd3 Compare January 13, 2026 16:29
Copy link
Collaborator

@aram356 aram356 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Good start

  1. Please address tests and formatting
  2. I would like to re-review

@@ -0,0 +1,188 @@
# APS Integration Quick Start
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⛏️ Should be lower case file and be inside guide

@@ -0,0 +1,484 @@
//! Auction orchestration module for managing multi-provider bidding.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⛏️ Preferable not to have this much logic in mod.rs

.sizes
.iter()
.map(|size| AdFormat {
width: size[0],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 Index reference without check

@@ -0,0 +1,314 @@
# Amazon Publisher Services (APS) Integration
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 Move this to guide and combine the guides with


let decoded = match STANDARD.decode(encoded) {
Ok(bytes) => bytes,
Err(_) => return 2.50,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 Add this as setting for default

🤔 We should logs errors

timeout_ms = 800

# Mock GAM Configuration (for testing)
[integrations.gam_mock]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 Why we need this because mocking is separated into different service

///
/// Initialized once on first access with the provided settings.
/// All providers are registered during initialization.
static GLOBAL_ORCHESTRATOR: OnceLock<AuctionOrchestrator> = OnceLock::new();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⛏️ Would be harder to test with these global singletons

}

/// Select the best bid for each slot from all responses.
fn select_winning_bids(&self, responses: &[AuctionResponse]) -> HashMap<String, Bid> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 We are not checking floor price

})?;

// Generate proxy URL for the creative
let url = format!(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 Add token to decode on request to prevent fraud.

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.

As developer I want to register header bidding integrations to perform auctions

4 participants