Skip to content

Conversation

@zentotem
Copy link
Contributor

GermanBogatov and others added 26 commits July 2, 2024 12:42
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
fix after review
fix after review
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
add adapter for zentotem
fix after review
fix after review
replace v2 to v3
# Conflicts:
#	adapters/zentotem/params_test.go
#	adapters/zentotem/zentotem.go
#	adapters/zentotem/zentotem_test.go
#	exchange/adapter_builders.go
@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, dc73050

zentotem

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:17:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:24:	MakeRequests		83.3%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:49:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:62:	MakeBids		88.9%
total:									(statements)		89.2%

@@ -0,0 +1,16 @@
endpoint: "https://rtb.zentotem.net/bid?sspuid=cqlnvfk00bhs0b6rci6g"
maintainer:
email: [email protected]
Copy link
Collaborator

Choose a reason for hiding this comment

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

I sent email. Please response.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@przemkaczmarek hello, we sent a response letter for verification

@@ -0,0 +1,16 @@
endpoint: "https://rtb.zentotem.net/bid?sspuid=cqlnvfk00bhs0b6rci6g"
Copy link
Collaborator

Choose a reason for hiding this comment

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

image
it doesnt work

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@przemkaczmarek Hello! This is a correct response because no body was sent in the request.

@przemkaczmarek przemkaczmarek self-assigned this Nov 15, 2024
@bsardo
Copy link
Collaborator

bsardo commented Jan 6, 2025

@ccorbo can you please review?

for i := range seatBid.Bid {
bidType, err := getMediaTypeForBid(seatBid.Bid[i])
if err != nil {
errors = append(errors, err)
Copy link
Contributor

@ccorbo ccorbo Jan 7, 2025

Choose a reason for hiding this comment

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

suggestion: you're collecting errors, then not returning the errors below. Can you update to return the errors, or remove this

Copy link

Choose a reason for hiding this comment

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

fixed it

retract v3.0.0 // Forgot to update major version in import path and module name

require (
github.com/51Degrees/device-detection-go/v4 v4.4.35
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why were these moved from the indirect section to the direct section?

@bsardo bsardo assigned bsardo and unassigned przemkaczmarek Jan 17, 2025

func TestJsonSamples(t *testing.T) {
bidder, buildErr := Builder(openrtb_ext.BidderZentotem, config.Adapter{
Endpoint: "https://rtb.zentotem.net/bid?sspuid=cqlnvfk00bhs0b6rci6g"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
Copy link
Collaborator

Choose a reason for hiding this comment

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

I suggest using fake urls for your tests for maintenance reasons.

Copy link

Choose a reason for hiding this comment

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

replaced by a fake url

Copy link
Collaborator

Choose a reason for hiding this comment

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

What is the significance of the numbers in the file names of the exemplary JSON test files?

I think you can get rid of these numbers and some of these tests. For example, I ran a diff on adapters/zentotem/zentotemtest/exemplary/banner-200-212.json and adapters/zentotem/zentotemtest/exemplary/banner-201-202-203.json and they appear to be the same except for id, adid and crid which should not have any impact on your code coverage.

Copy link

Choose a reason for hiding this comment

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

The numbers denote banner subtypes in our system. We left one test

)

//Zentotem doesn't currently require any custom fields. This file is included for conformity only
//We do include an unused, non-required custom param in static/bidder-params/zentotem.json, but only to hinder the prebid server from crashing by looking for at least 1 custom param
Copy link
Collaborator

Choose a reason for hiding this comment

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

It looks like this was copied from another adapter, vrtcal, which was created six years ago. Is a custom param still needed to keep prebid server from crashing? I suspect not; I will investigate.

Copy link

Choose a reason for hiding this comment

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

You are right, the custom parameter has no effect on the prebid server crash, so we removed the params tests, since we don't handle any custom parameters at all

wantErr bool
}{
{
name: "get bid native type",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Nitpick: t.Run will substitute underscores for spaces in the test name so we advise using underscores instead of spaces to separate words in name so when a test fails we can simply copy the test name from the output and search for it in the code base.

Copy link

Choose a reason for hiding this comment

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

fixed it

endpoint string
}

// Builder builds a new instance of the {bidder} adapter for the given bidder with the given config.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Nitpick: {bidder} should be Zentotem

Copy link

Choose a reason for hiding this comment

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

fixed it

Copy link
Collaborator

Choose a reason for hiding this comment

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

I suggest keeping your tests lean. For example, I don't see much value in having all of those device fields in your tests as they are not fields that are explicitly touched in your adapter. You can probably remove some of them and other pieces of data to reduce the noise.

Copy link

Choose a reason for hiding this comment

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

We removed unnecessary tests

Copy link
Collaborator

Choose a reason for hiding this comment

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

Do you need video-300.json and video-301.json? I think you can delete one of these and just have video.json. They are almost identical tests.

Copy link

Choose a reason for hiding this comment

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

Left one test

Copy link
Collaborator

Choose a reason for hiding this comment

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

Based on your adapter's behavior and the fact that calls aren't being made to your server during the test suite run, I consider the following tests to basically be the same, in which case I suggest replacing these with a single 204.json test:
adapters/zentotem/zentotemtest/supplemental/banner-empty-width-height-204.json
adapters/zentotem/zentotemtest/supplemental/banner-invalid-width-204.json
adapters/zentotem/zentotemtest/supplemental/banner-invalid-height-204.json

The lone differences here are what the width and height are set to but they have no bearing on the mock response.

The same applies to:
adapters/zentotem/zentotemtest/supplemental/video-empty-protocol-204.json
adapters/zentotem/zentotemtest/supplemental/video-invalid-mimes-204.json
adapters/zentotem/zentotemtest/supplemental/video-without-mimes-204.json

You shouldn't need separate 204 tests for these scenarios. The single 204.json should suffice.

Copy link

Choose a reason for hiding this comment

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

Left one test for 204 status code

Copy link
Collaborator

Choose a reason for hiding this comment

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

The three 400 status code tests could probably be combined as well.

Copy link

Choose a reason for hiding this comment

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

Left one 400 status code test

@przemkaczmarek przemkaczmarek self-assigned this Jan 21, 2025
@bsardo
Copy link
Collaborator

bsardo commented Feb 17, 2025

@zentotem please see my comments above.

@bsardo
Copy link
Collaborator

bsardo commented Mar 24, 2025

@zentotem just a reminder to see my comments above.

@bsardo
Copy link
Collaborator

bsardo commented Apr 14, 2025

@zentotem please see the above comments.

@bsardo
Copy link
Collaborator

bsardo commented Apr 28, 2025

@zentotem are you still planning to move forward with this PR?

@bsardo
Copy link
Collaborator

bsardo commented Jun 13, 2025

@zentotem I sent an email to the provided email address reminding about the unresolved comments. We will close this PR in two weeks if we do not receive a response. If we close it you can always open it again at a later date if you decide to continue work.

@dogmat1k
Copy link

Hi! We will get back to solving the problems now

fix after review

// Builder builds a new instance of the {bidder} adapter for the given bidder with the given config.
func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
bidder := &ZentotemAdapter{

Choose a reason for hiding this comment

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

You can call this simply "adapter", the ZentotemAdapter identification is already supplied by the package name. As you have it, referencing your adapter from outside the package would be ZentotemAdapter.ZentotemAdapter which looks a little redundant. See example below:

  package foo

  type adapter struct {
    endpoint string
  }
  
  func  Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
    return &adapter{endpoint: "https://www.foo.com/"}, nil
  }

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, ead335d

zentotem

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:17:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:24:	MakeRequests		83.3%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:49:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:62:	MakeBids		88.9%
total:									(statements)		89.2%

fix after review
@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 221cd79

zentotem

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:17:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:24:	MakeRequests		83.3%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:49:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:62:	MakeBids		88.9%
total:									(statements)		89.2%

@github-actions
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 780d093

zentotem

Refer here for heat map coverage report

github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:17:	Builder			100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:24:	MakeRequests		83.3%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:49:	getMediaTypeForBid	100.0%
github.com/prebid/prebid-server/v3/adapters/zentotem/zentotem.go:62:	MakeBids		88.9%
total:									(statements)		89.2%

@dobb2
Copy link

dobb2 commented Jun 24, 2025

All comments have been fixed, await approve

Copy link
Collaborator

@hhhjort hhhjort left a comment

Choose a reason for hiding this comment

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

LGTM

@bsardo bsardo merged commit 9a7b75a into prebid:master Jul 14, 2025
8 checks passed
postindustria-code pushed a commit to postindustria-tech/prebid-server that referenced this pull request Jul 17, 2025
prnvgupta pushed a commit to automatad/prebid-server that referenced this pull request Dec 3, 2025
shunj-nb pushed a commit to ParticleMedia/prebid-server that referenced this pull request Dec 15, 2025
shunj-nb added a commit to ParticleMedia/prebid-server that referenced this pull request Dec 15, 2025
* Dianomi: Update user syncs to send gdpr_consent (prebid#4345)

* MobileFuse: Remove tagid_src and pub_id params (prebid#4303)

* Remove tagid_src ext from MobileFuse Adapter

* remove pub_id query param

* removed comment

* Simplify Endpoint assignment in MobileFuseAdapter

* New Adapter: Flatads (prebid#4243)

Co-authored-by: wuzhijian <[email protected]>

* Rubicon: Add bid meta seat (prebid#4348)

* Gothamads: Add Intenze alias (prebid#4319)

* GumGum: Collect ad unit name for reporting (prebid#4302)

* Seedtag: Fix required content-type header on http calls (prebid#4299)

* Kobler: Remove sensitive device and user data (prebid#4295)

* New Adapter: Nexx360 (prebid#4286)

Co-authored-by: Gabriel Chicoye <[email protected]>

* HTTP Fetcher: Implement RFC 3986 compatibility as optional (prebid#4272)

* Targeting: Add configurable targeting prefix (prebid#4355)

* Pubmatic: Set bid.meta.mediaType=video when bid.ext.ibv=true (prebid#4189)

* Rules Engine Module: Phase 1 (prebid#4407)

Co-authored-by: Veronika Solovei <[email protected]>
Co-authored-by: guscarreon <[email protected]>

* New Adapter: Sparteo (prebid#4275)

* PubMatic: Fix missing bid type in bid response (prebid#4417)

* Fix: Remove module per request JSON marshal and add custom viper decoder (prebid#4422)

* RichAudience: change endpoint to https (prebid#4384)

Co-authored-by: IAN <[email protected]>

* Missena: Pass full openrtb request (prebid#4394)

* New Adapter: Rediads (prebid#4233)

* Zeta Global SSP: Declare OpenRTB 2.6 and GPP support (prebid#4389)

* Record metric unsuccessful for PBC non-200 response status code or error (prebid#4341)

Co-authored-by: oleksandr <[email protected]>

* New Adapter: Akcelo (prebid#4237)

* New Adapter: Zentotem (prebid#4053)

* New Adapter: Exco (prebid#4250)

* Floors: Fix panic while getting adunit code for signaling (prebid#4424)

* Stroeercore: Add adomain to bids (prebid#4392)

* VIS.X: Relay bid currency from bid response (prebid#4381)

* TMax: Add default host config (prebid#4430)

* Fix the package (iterators) to agree with the dir (iterutil). (prebid#4447)

* TheTradeDesk: Throw error for malformed endpoint url (prebid#4419)

* Smartadserver : Send multi-impression requests without flattening (prebid#4402)

Co-authored-by: nlesommer <[email protected]>
Co-authored-by: gtodeschi <[email protected]>

* RTB House: Remove PAAPI signals from imp[].ext (prebid#4399)

* GumGum: Enable Opt-In change notification (prebid#4390)

* Tappx: Add GPID support (prebid#4438)

Co-authored-by: Jordi Arnau <[email protected]>

* New Adapter: progx - Vidazoo alias (prebid#4428)

* New Adapter: Kuantyx - Aso alias (prebid#4420)

* MinuteMedia: Add test endpoint (prebid#4425)

* Adagio: Add site bidder param and web inventory tests (prebid#4403)

Co-authored-by: Godefroi Roussel <[email protected]>

* Modularity: Add hook code to module invocation context (prebid#4036)

* Rubicon: Pass ext.prebid.multibid[].maxbids to XAPI (prebid#4412)

* OpenX: Add gpp params to user sync (prebid#4445)

Co-authored-by: gmiedlar-ox <[email protected]>

* New Adapter: Blis (prebid#4304)

Co-authored-by: Tomas Koutny <[email protected]>

* Ogury: Support gpp for cookie sync (prebid#4406)

* TheTradeDesk: Resolve AUCTION_PRICE macro (prebid#4448)

* Fix: Set account http fetcher defaults enabling env vars (prebid#4460)

* Bidder throttling code to increase network stability. (prebid#4415)

* Adding request throttling to bidder requests

* Add latency health

* Adds new config options, metrics, and fixes

* Set default window to 1000 and fix error type typo

* Addresses PR comments

* More PR feedback

* Proper handling of the atomic uint in tests

* Yieldlab: Forward ADomain to OpenRTB bid (prebid#4404)

* Yandex: Add video support (prebid#4344)

* Request: Add hb_env=amp targeting to AMP responses (prebid#4414)

* Pubmatic: Forward skadn object in bid request (prebid#4453)

* Adds missing defaults to network throttling code (prebid#4477)

* New Adapter: Tagoras - Vidazoo alias (prebid#4329)

Co-authored-by: anna-y-perion <[email protected]>

* New Adapter: Omnidex - Vidazoo alias (prebid#4441)

* Define An Adapter As White Label Only (prebid#4461)

* Rules Engine Module: Result functions fix (prebid#4451)

* Account: Support bid rounding options (prebid#4470)

* Sovrn: Fix passing through imp.ext.gpid (prebid#4413)

* Smartadserver: Add second endpoint for programmatic guaranteed (prebid#4467)

Co-authored-by: Guillaume Laubier <[email protected]>

* sspBC: Updates moving operations to backend service (prebid#4351)

* New Adapter: Adipolo - Xeworks alias (prebid#4350)

Co-authored-by: And-Rud <[email protected]>
Co-authored-by: rbstdev <[email protected]>

* Modules: Exitpoint Stage (prebid#4435)

* New Adapter: Afront (prebid#4380)

* Harden HTTP Response Body Handling (prebid#4489)

* New Adapter: TeqBlaze (prebid#4480)

* Onetag: imp.ext read generalization (prebid#4446)

Co-authored-by: lorenzob <[email protected]>

* Rules Engine Module: Configurable cache update frequency (prebid#4423)

Co-authored-by: VeronikaSolovei9 <[email protected]>

* New Adapter: RocketLab (prebid#4383)

* change zmaticoo.yaml endpoint (prebid#4471)

Co-authored-by: Quentin.zuo <[email protected]>

* Metrics: Record GVL fetch count (prebid#4500)

* TheTradeDesk: Resolve burl if not resolved (prebid#4481)

* New Adapter: pinkLion (prebid#4376)

* Metrics: Record HTTP connections wanted and obtained (prebid#4518)

* Metrics: Record incoming request sizes (prebid#4495)

* Modules: Execute mutations in the order they are listed (prebid#4279)

* 4278 Execute mutations in the sequence they are listed.

* Ensure that the rejected channel is closed (once) on reject

* Use stack var.

* Add comments.

* Ensure rejected is closed.

* Just return explicitly in all 3 cases.

* Keep the same style - of passing the params to the go routine.

* Revert "Modules: Execute mutations in the order they are listed (prebid#4279)" (prebid#4529)

This reverts commit 93c17c2.

* Revert "Metrics: Record HTTP connections wanted and obtained (prebid#4518)" (prebid#4538)

* New Adapter: Nativery (prebid#4321)

Co-authored-by: Andrea Fassina <[email protected]>
Co-authored-by: nicoladellamorte <[email protected]>

* E-Planning: Add support for adomain (prebid#4472)

* SmileWanted: Append zoneId to endpoint path (prebid#4468)

Co-authored-by: QuentinGallard <[email protected]>

* Add configurable dialer timeouts to HTTP clients (prebid#4511)

* New Adapter: 360playvid (prebid#4395)

* New Adapter: MediaYo (prebid#4391)

* 33across: Make zoneId the preferred option (prebid#4531)

* 33across: Remove deprecated video.placement (prebid#4530)

* New Adapter: RobustApps - Xeworks alias (prebid#4434)

Co-authored-by: And-Rud <[email protected]>
Co-authored-by: rbstdev <[email protected]>

* Adagio: Remove max length on params (prebid#4524)

Co-authored-by: Godefroi Roussel <[email protected]>

* fwssp: Add iframe usersync (prebid#4487)

Co-authored-by: wenyuanzhang <[email protected]>

* Module: Scope3 Real-Time Data (prebid#4397)

* Add Scope3 Real-Time Data (RTD) module

This module integrates Scope3's Real-Time Data API to provide audience
segments for targeting in Prebid Server auctions.

Features:
- Fetches real-time audience segments from Scope3 API
- Adds targeting data to bid requests via hooks system
- Thread-safe segment storage during auction lifecycle
- Configurable timeout and endpoint settings
- Graceful error handling that doesn't fail auctions

The module implements three hook stages:
- Entrypoint: Initialize module context
- Raw Auction Request: Fetch segments from Scope3 API
- Processed Auction Request: Add segments to targeting data

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Add LiveRamp ATS integration and execution order documentation

- Document proper execution order when using with LiveRamp ATS
- Add user identifier detection for RampID integration
- Include configuration examples for sequential module execution
- Enhance API requests with available user identifiers
- Add comprehensive documentation for Yahoo deployment scenario

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Add LiveRamp ATS envelope support for publishers without sidecar

- Support forwarding encrypted ATS envelopes directly to Scope3 API
- Check multiple envelope locations: user.ext.liveramp_idl, user.ext.ats_envelope, ext.liveramp_idl
- Prioritize sidecar RampID over envelope when both available
- Document both sidecar and envelope integration patterns
- Add note about Scope3 needing LiveRamp partner authorization

This enables publishers without LiveRamp sidecar to still benefit from
LiveRamp ATS user signals via encrypted envelope forwarding.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Clean up debug code and finalize production-ready Scope3 RTD module

- Remove all debug logging statements
- Streamline segment storage and retrieval between hooks
- Finalize request-level targeting for GAM integration
- Production-ready code with proper error handling
- Complete documentation with configuration examples

The module is now ready for production deployment with:
- Successful Scope3 API integration
- LiveRamp ATS compatibility (sidecar and envelope)
- GAM targeting data output
- Thread-safe segment management

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Simplify targeting output to single GAM-compatible format

- Remove duplicate data.scope3_segments array format
- Keep only targeting.hb_scope3_segments as comma-separated string
- Follows standard header bidding targeting key conventions
- Optimized for GAM key-value targeting integration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Add unit tests for Scope3 RTD module

- Add basic unit tests for module builder and hook functions
- Test invalid config handling and error cases
- Test entrypoint hook initialization
- Test processed auction hook with no segments
- Satisfy CI requirements for test coverage

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Fix Go formatting issues

- Remove trailing whitespace in module.go
- Add missing newline at end of module_test.go
- Satisfy gofmt validation requirements

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Address PR feedback: Add caching, improve LiveRamp integration, enhance configurability

Key improvements based on reviewer feedback:
- Add intelligent caching with configurable TTL to handle repeated requests
- Set 60-second default cache TTL for frequency cap compatibility
- Improve LiveRamp identifier detection across multiple locations
- Remove unsubstantiated partnership claims and improve documentation
- Add cache_ttl_seconds and bid_meta_data configuration options
- Implement MD5-based cache keys from user IDs and site context
- Add comprehensive test coverage for new caching functionality
- Update documentation to explain targeting vs bid.meta approach
- Change default timeout to 1000ms for better API compatibility

Addresses concerns about:
- Performance with hundreds of identical requests per user session
- Flexibility in targeting data output (bid.meta future enhancement noted)
- Accurate LiveRamp integration documentation
- Proper hook implementation code naming

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Complete PR feedback implementation: Response-level segments with GAM targeting

Major changes to address all PR reviewer feedback:

**Response Format Changes:**
- Move from request targeting to auction response data per reviewer feedback
- Change hook stage from processed_auction_request to auction_response
- Add segments to response.ext.scope3.segments for publisher control
- Add individual GAM targeting keys when add_to_targeting=true (e.g., gmp_eligible=true)

**Configuration Updates:**
- Rename bid_meta_data to add_to_targeting for clarity
- Add comprehensive GAM integration with individual segment keys
- Remove incorrect LiveRamp RTD adapter references from README
- Update hook configuration examples to use auction_response stage

**API Integration Fixes:**
- Correct segment parsing to exclude destination field (triplelift.com)
- Extract only actual segments from imp[].ext.scope3.segments[]
- Maintain working authentication and caching functionality

**Enhanced Testing:**
- Add comprehensive mock API integration tests
- Test both response formats (scope3 + targeting sections)
- Test error handling with mock server responses
- Apply gofmt formatting to all code

**Publisher Benefits:**
- Full control over segment usage via response.ext.scope3.segments
- Optional automated GAM integration via individual targeting keys
- Flexible configuration for different use cases
- Maintains caching for high-frequency scenarios

Addresses all PR reviewer concerns while providing maximum publisher flexibility.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Address PR feedback: Add optimized HTTP Transport for high-frequency API calls

  Per reviewer feedback (@gravelg): 'if we're going to be make a lot of calls,
  we should use a Transport with better defaults'

  - MaxIdleConns: 100 (increased connection pool)
  - MaxIdleConnsPerHost: 10 (multiple connections per host)
  - IdleConnTimeout: 90s (longer connection reuse)
  - ForceAttemptHTTP2: true (HTTP/2 for better performance)
  - DisableCompression: false (bandwidth optimization)

  🤖 Generated with [Claude Code](https://claude.ai/code)
  Co-Authored-By: Claude <[email protected]>

* run gofmt

* update default endpoint

* fix test

* address comments

* more review comments

* address more comments

* remove unused enhanceRequestWithUserIDs method

* jsonutil, add more tests

* Add privacy field masking for Scope3 RTD module

Implement comprehensive privacy protection by masking sensitive user data
before sending bid requests to the Scope3 API while preserving essential
targeting capabilities.

Features:
- Configurable field masking with privacy-first defaults
- Geographic data truncation with configurable precision (default: 2 decimals ~1.1km)
- Identity provider filtering with allowlist for preserved EIDs
- Always removes: IP addresses, user IDs, demographics, first-party data
- Always preserves: device characteristics, country/region, site/app context
- Comprehensive test coverage (92.3%) with edge case handling
- All linting checks pass with zero issues

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Fix cache key generation for proper per-user caching

- Use SHA-256 hashed user.id as fallback when privacy-safe identifiers are unavailable
- Maintains per-user cache segmentation for performance while protecting privacy
- Privacy-safe identifiers (RampID, LiverampIDL) take priority over hashed user.id
- Prevents accidental data leakage by returning nil on masking failures
- Add configuration validation for geo precision (max 4 decimal places)
- Add comprehensive tests for cache key behavior and configuration validation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* Fix gofmt formatting in module_test.go

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

* review fixes

* more review comments

* make it async

* address more comments

---------

Co-authored-by: Claude <[email protected]>
Co-authored-by: Gabriel Gravel <[email protected]>

* Metrics: Add connection dial metrics by adapter (prebid#4528)

* KueezRTB: Remove additionalProperties from schema (prebid#4490)

* Kargo: Add email to codepath notification workflow (prebid#4484)

Co-authored-by: Nick Llerandi <[email protected]>

* New Adapter: Contxtful (prebid#4443)

Co-authored-by: rufiange <[email protected]>

* Modules: Exitpoint Hook typo fix (prebid#4542)

* Consumable: Declare geoscope (prebid#4496)

* Connatix: Copy entire imp[i].ext (prebid#4521)

* Fix: Preload Prometheus adapter connection dial metric labels when enabled (prebid#4543)

Co-authored-by: oleksandr <[email protected]>

* Host Option To Use OS Certs (prebid#4536)

* CPMStar: imp.ext passthrough (prebid#4450)

* MetaX: Add redirect user sync (prebid#4550)

Signed-off-by: Kehan Pan <[email protected]>

* New Adapter: Xapads - AdKernel alias (prebid#4534)

* Connatix: Add GPP macros (prebid#4525)

* OpenX: Return buyer exts in response (prebid#4507)

Co-authored-by: Rafal Sieczka <[email protected]>

* Yandex: Set referer and target-ref to site.page (prebid#4488)

* Nextmillennium: New fields and adapter version update (prebid#4486)

* Accounts: Add coop cookiesync priority groups (prebid#4561)

* Mobkoi: Remove url endpoint override (prebid#4555)

* GDPR: Move enforcement processing upstream (prebid#4567)

* Actions: Add publish to docker hub workflow (prebid#4558)

* Omnidex: Add GVL ID (prebid#4568)

* Adagio: Fix typo (prebid#4570)

* Improve Digital: Switch to HTTPS (prebid#4559)

* Mobkoi: Update endpoint (prebid#4523)

* Remove flaky agma test (prebid#4578)

* New Adapter: appStockSSP (prebid#4502)

Co-authored-by: Kanceliarenko <[email protected]>

* Rules Engine Module: Dynamic ruleset from YAML geoscopes (prebid#4509)

* In order to protect users of prebid-server that don't use CGO, add build flag (prebid#4058)

* In order to protect users of prebid-server that don't use CGO, add build flag.

* Conditionally configure fiftyonedegrees.

* Because the module file is auto-generated, let it include fiftyonedegrees but just explain that it can't be enabled.

* include used packages.

* fix builder.

* Remove unused file.

* Add a test for the Builder when CGO is not enabled.

* New Adapter: Gravite (prebid#4547)

* New Adapter: Goldbach (prebid#4476)

* New Adapter: Showheroes (prebid#4533)

* New Adapter: Performist - Limelight Alias (prebid#4283)

* Connatix: Support GZIP (prebid#4575)

* RTBHouse: PMP removal, publisherId parameter extraction (prebid#4564)

* Adnuntius: Pass targeting to ad server (prebid#4545)

* New Adapter: Boldwin Rapid (prebid#4478)

* Scope3: Various fixes to RTD module (prebid#4544)

* PubMatic: Pass alias bidder name through (prebid#4588)

* BidTheatre: Update endpoint and add redirect user sync (prebid#4562)

* CWire: Add userSync (prebid#4516)

* New Adapter: Clydo (prebid#4535)

* New Adapter: Microsoft (msft) (prebid#4592)

* Syncer: Allow Duplicate Syncer Key For Identical Config (prebid#4622)

* Adagio: Enable site capability (prebid#4590)

* Adagio: Remove hardcoded seat name (prebid#4596)

* Warn in auction response for bidders blocked by privacy settings (prebid#4537)

Co-authored-by: oleksandr <[email protected]>

* Logging: Add interface with default glog implementation (prebid#4085)

Co-authored-by: postindustria-code <[email protected]>

* msp 25-12

---------

Signed-off-by: Kehan Pan <[email protected]>
Co-authored-by: Michael Stevens <[email protected]>
Co-authored-by: tomaszbmf <[email protected]>
Co-authored-by: FlatAds <[email protected]>
Co-authored-by: wuzhijian <[email protected]>
Co-authored-by: Anton Babak <[email protected]>
Co-authored-by: support-gotham-ads <[email protected]>
Co-authored-by: ShayanK16GumGum <[email protected]>
Co-authored-by: sangarbe <[email protected]>
Co-authored-by: Tommy Pettersen <[email protected]>
Co-authored-by: Gabriel Chicoye <[email protected]>
Co-authored-by: Gabriel Chicoye <[email protected]>
Co-authored-by: Sigma Software <[email protected]>
Co-authored-by: pm-priyanka-bagade <[email protected]>
Co-authored-by: Brian Sardo <[email protected]>
Co-authored-by: Veronika Solovei <[email protected]>
Co-authored-by: guscarreon <[email protected]>
Co-authored-by: t-sormonte <[email protected]>
Co-authored-by: Isha Bharti <[email protected]>
Co-authored-by: Rich Audience <[email protected]>
Co-authored-by: IAN <[email protected]>
Co-authored-by: Jean-Sébastien Ney <[email protected]>
Co-authored-by: rediads <[email protected]>
Co-authored-by: abermanov-zeta <[email protected]>
Co-authored-by: linux019 <[email protected]>
Co-authored-by: oleksandr <[email protected]>
Co-authored-by: Roger <[email protected]>
Co-authored-by: zentotem <[email protected]>
Co-authored-by: Pete <[email protected]>
Co-authored-by: Nikhil Vaidya <[email protected]>
Co-authored-by: Philip Watson <[email protected]>
Co-authored-by: Vladimir Fedoseev <[email protected]>
Co-authored-by: Sheridan C Rawlins <[email protected]>
Co-authored-by: andre-gielow-ttd <[email protected]>
Co-authored-by: Nathan Le Sommer <[email protected]>
Co-authored-by: nlesommer <[email protected]>
Co-authored-by: gtodeschi <[email protected]>
Co-authored-by: Piotr Jaworski <[email protected]>
Co-authored-by: sindhuja-sridharan <[email protected]>
Co-authored-by: jordi-tappx <[email protected]>
Co-authored-by: Jordi Arnau <[email protected]>
Co-authored-by: Anna Yablonsky <[email protected]>
Co-authored-by: Adserver.Online <[email protected]>
Co-authored-by: inna <[email protected]>
Co-authored-by: GodefroiRoussel <[email protected]>
Co-authored-by: Godefroi Roussel <[email protected]>
Co-authored-by: Kacper Fus <[email protected]>
Co-authored-by: gmiedlar-ox <[email protected]>
Co-authored-by: tomaskoutny-blis <[email protected]>
Co-authored-by: Tomas Koutny <[email protected]>
Co-authored-by: Vincent Bachelier <[email protected]>
Co-authored-by: hhhjort <[email protected]>
Co-authored-by: yuu.t <[email protected]>
Co-authored-by: Dmitry Ermakov <[email protected]>
Co-authored-by: Saar Amrani <[email protected]>
Co-authored-by: Scott Kay <[email protected]>
Co-authored-by: Sandy Janicki <[email protected]>
Co-authored-by: Guillaume Laubier <[email protected]>
Co-authored-by: Guillaume Laubier <[email protected]>
Co-authored-by: mabielinski-wpm <[email protected]>
Co-authored-by: Andrii Rudyk <[email protected]>
Co-authored-by: And-Rud <[email protected]>
Co-authored-by: rbstdev <[email protected]>
Co-authored-by: Afrontio <[email protected]>
Co-authored-by: MaksymTeqBlaze <[email protected]>
Co-authored-by: esimonelli@onetag <[email protected]>
Co-authored-by: lorenzob <[email protected]>
Co-authored-by: VeronikaSolovei9 <[email protected]>
Co-authored-by: Leandro Marty <[email protected]>
Co-authored-by: g-coder-baiai <[email protected]>
Co-authored-by: Quentin.zuo <[email protected]>
Co-authored-by: prebidPinkLion <[email protected]>
Co-authored-by: andreafassina <[email protected]>
Co-authored-by: Andrea Fassina <[email protected]>
Co-authored-by: nicoladellamorte <[email protected]>
Co-authored-by: Agustin Insua <[email protected]>
Co-authored-by: Quentin Gallard <[email protected]>
Co-authored-by: QuentinGallard <[email protected]>
Co-authored-by: pb360playvid <[email protected]>
Co-authored-by: mediayo <[email protected]>
Co-authored-by: Carlos Felix <[email protected]>
Co-authored-by: rbstdev <[email protected]>
Co-authored-by: Wenyuan Zhang <[email protected]>
Co-authored-by: wenyuanzhang <[email protected]>
Co-authored-by: Brian O'Kelley <[email protected]>
Co-authored-by: Claude <[email protected]>
Co-authored-by: Gabriel Gravel <[email protected]>
Co-authored-by: Amit Biton <[email protected]>
Co-authored-by: Shane Lacey <[email protected]>
Co-authored-by: Nick Llerandi <[email protected]>
Co-authored-by: Sebastien Boisvert <[email protected]>
Co-authored-by: rufiange <[email protected]>
Co-authored-by: richardngo-consumable <[email protected]>
Co-authored-by: Karim Mourra <[email protected]>
Co-authored-by: Joshua Tomlinson <[email protected]>
Co-authored-by: metax-kehan <[email protected]>
Co-authored-by: Denis Logachov <[email protected]>
Co-authored-by: Rafal Sieczka <[email protected]>
Co-authored-by: Dmitry Ermakov <[email protected]>
Co-authored-by: a.popov <[email protected]>
Co-authored-by: Marc-Enzo Bonnafon <[email protected]>
Co-authored-by: Olivier <[email protected]>
Co-authored-by: Jozef Bartek <[email protected]>
Co-authored-by: Appstock LTD <[email protected]>
Co-authored-by: Kanceliarenko <[email protected]>
Co-authored-by: teqblaze <[email protected]>
Co-authored-by: Simon Aebli <[email protected]>
Co-authored-by: Filip Stamenkovic <[email protected]>
Co-authored-by: quietPusher <[email protected]>
Co-authored-by: Mikael Lundin <[email protected]>
Co-authored-by: BoldwinDev <[email protected]>
Co-authored-by: Gabriel Gravel <[email protected]>
Co-authored-by: Pubmatic-Supriya-Patil <[email protected]>
Co-authored-by: andreasgreen <[email protected]>
Co-authored-by: Alessandro Rosetti <[email protected]>
Co-authored-by: cto-clydo <[email protected]>
Co-authored-by: Eugene Dorfman <[email protected]>
Co-authored-by: postindustria-code <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants