diff --git a/adapters/sparteo/sparteo.go b/adapters/sparteo/sparteo.go index 100d5acc713..1a4e3a45256 100644 --- a/adapters/sparteo/sparteo.go +++ b/adapters/sparteo/sparteo.go @@ -3,6 +3,8 @@ package sparteo import ( "fmt" "net/http" + "net/url" + "strings" "github.com/prebid/openrtb/v20/openrtb2" "github.com/prebid/prebid-server/v3/adapters" @@ -13,19 +15,20 @@ import ( ) type adapter struct { - endpoint string - bidderName string + endpoint string } type extBidWrapper struct { Prebid openrtb_ext.ExtBidPrebid `json:"prebid"` } +const unknownValue = "unknown" + func Builder(bidderName openrtb_ext.BidderName, cfg config.Adapter, server config.Server) (adapters.Bidder, error) { - return &adapter{ - endpoint: cfg.Endpoint, - bidderName: string(bidderName), - }, nil + bidder := &adapter{ + endpoint: cfg.Endpoint, + } + return bidder, nil } func parseExt(imp *openrtb2.Imp) (*openrtb_ext.ExtImpSparteo, error) { @@ -47,32 +50,20 @@ func parseExt(imp *openrtb2.Imp) (*openrtb_ext.ExtImpSparteo, error) { func (a *adapter) MakeRequests(req *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { request := *req + var errs []error request.Imp = make([]openrtb2.Imp, len(req.Imp)) copy(request.Imp, req.Imp) - if req.Site != nil { - siteCopy := *req.Site - request.Site = &siteCopy - } - - if req.Site != nil && req.Site.Publisher != nil { - publisherCopy := *req.Site.Publisher - request.Site.Publisher = &publisherCopy - } - - var errs []error - var siteNetworkId string - + var networkID string for i, imp := range request.Imp { extImpSparteo, err := parseExt(&imp) if err != nil { errs = append(errs, err) continue } - - if siteNetworkId == "" && extImpSparteo.NetworkId != "" { - siteNetworkId = extImpSparteo.NetworkId + if networkID == "" && extImpSparteo.NetworkId != "" { + networkID = extImpSparteo.NetworkId } var extMap map[string]interface{} @@ -86,63 +77,102 @@ func (a *adapter) MakeRequests(req *openrtb2.BidRequest, reqInfo *adapters.Extra sparteoMap = make(map[string]interface{}) extMap["sparteo"] = sparteoMap } - paramsMap, ok := sparteoMap["params"].(map[string]interface{}) if !ok { paramsMap = make(map[string]interface{}) sparteoMap["params"] = paramsMap } - - bidderObj, ok := extMap["bidder"].(map[string]interface{}) - if ok { + if bidderObj, ok := extMap["bidder"].(map[string]interface{}); ok { delete(extMap, "bidder") - - for key, value := range bidderObj { - paramsMap[key] = value + for k, v := range bidderObj { + paramsMap[k] = v } } - updatedExt, err := jsonutil.Marshal(extMap) if err != nil { errs = append(errs, fmt.Errorf("ignoring imp id=%s, error while marshaling updated ext, err: %s", imp.ID, err)) continue } - request.Imp[i].Ext = updatedExt } - if request.Site != nil && request.Site.Publisher != nil && siteNetworkId != "" { - var pubExt map[string]interface{} - if request.Site.Publisher.Ext != nil { - if err := jsonutil.Unmarshal(request.Site.Publisher.Ext, &pubExt); err != nil { - pubExt = make(map[string]interface{}) - } - } else { - pubExt = make(map[string]interface{}) + var sb strings.Builder + sb.WriteString("network_id=") + sb.WriteString(url.QueryEscape(networkID)) + + var pubToUpdate *openrtb2.Publisher + var pubExtPath string + + if req.Site != nil { + siteCopy := *req.Site + request.Site = &siteCopy + if req.Site.Publisher != nil { + pubCopy := *req.Site.Publisher + request.Site.Publisher = &pubCopy } - var paramsMap map[string]interface{} - if raw, ok := pubExt["params"]; ok { - if paramsMap, ok = raw.(map[string]interface{}); !ok { - paramsMap = make(map[string]interface{}) - } - } else { - paramsMap = make(map[string]interface{}) + pubToUpdate = ensurePublisher(request.Site.Publisher) + request.Site.Publisher = pubToUpdate + pubExtPath = "site.publisher.ext" + + domain := resolveSiteDomain(request.Site) + if domain == "" { + domain = unknownValue + errs = append(errs, &errortypes.BadInput{ + Message: "Domain not found. Missing the site.domain or the site.page field", + }) + } + sb.WriteString("&site_domain=") + sb.WriteString(url.QueryEscape(domain)) + } else if req.App != nil { + appCopy := *req.App + request.App = &appCopy + if req.App.Publisher != nil { + pubCopy := *req.App.Publisher + request.App.Publisher = &pubCopy } - paramsMap["networkId"] = siteNetworkId - pubExt["params"] = paramsMap + pubToUpdate = ensurePublisher(request.App.Publisher) + request.App.Publisher = pubToUpdate + pubExtPath = "app.publisher.ext" - updatedPubExt, err := jsonutil.Marshal(pubExt) - if err != nil { + appDomain := resolveAppDomain(request.App) + if appDomain == "" { + appDomain = unknownValue + } + sb.WriteString("&app_domain=") + sb.WriteString(url.QueryEscape(appDomain)) + + bundle := resolveBundle(request.App) + if bundle == "" { + bundle = unknownValue errs = append(errs, &errortypes.BadInput{ - Message: fmt.Sprintf("Error marshaling site.publisher.ext: %s", err), + Message: "Bundle not found. Missing the app.bundle field.", }) - } else { - request.Site.Publisher.Ext = jsonutil.RawMessage(updatedPubExt) } + sb.WriteString("&bundle=") + sb.WriteString(url.QueryEscape(bundle)) + } else { + // NO CONTEXT (Fallback) + request.Site = &openrtb2.Site{} + pubToUpdate = ensurePublisher(request.Site.Publisher) + request.Site.Publisher = pubToUpdate + pubExtPath = "site.publisher.ext" } + ext, err := updatePublisherExtension(&pubToUpdate.Ext, networkID, pubExtPath) + if err != nil { + errs = append(errs, err) + } else { + pubToUpdate.Ext = ext + } + + uri, err := url.Parse(a.endpoint) + if err != nil { + return nil, []error{fmt.Errorf("invalid endpoint URL %q: %w", a.endpoint, err)} + } + uri.RawQuery = sb.String() + body, err := jsonutil.Marshal(request) if err != nil { errs = append(errs, err) @@ -151,7 +181,7 @@ func (a *adapter) MakeRequests(req *openrtb2.BidRequest, reqInfo *adapters.Extra requestData := &adapters.RequestData{ Method: http.MethodPost, - Uri: a.endpoint, + Uri: uri.String(), Body: body, ImpIDs: openrtb_ext.GetImpIDs(request.Imp), Headers: http.Header{ @@ -162,6 +192,97 @@ func (a *adapter) MakeRequests(req *openrtb2.BidRequest, reqInfo *adapters.Extra return []*adapters.RequestData{requestData}, errs } +func normalizeHostname(host string) string { + host = strings.TrimSpace(host) + if host == "" { + return "" + } + + u, err := url.Parse(host) + if err != nil || u.Hostname() == "" { + if i := strings.Index(host, ":"); i >= 0 { + host = host[:i] + } else if i := strings.Index(host, "/"); i >= 0 { + host = host[:i] + } + } else { + host = u.Hostname() + } + + host = strings.ToLower(host) + host = strings.TrimSuffix(host, ".") + host = strings.TrimPrefix(host, "www.") + + if host == "null" { + return "" + } + return host +} + +func resolveSiteDomain(site *openrtb2.Site) string { + if site != nil { + if d := normalizeHostname(site.Domain); d != "" { + return d + } + if fromPage := normalizeHostname(site.Page); fromPage != "" { + return fromPage + } + } + return "" +} + +func resolveAppDomain(app *openrtb2.App) string { + if app != nil { + if d := normalizeHostname(app.Domain); d != "" { + return d + } + } + return "" +} + +func resolveBundle(app *openrtb2.App) string { + if app == nil { + return "" + } + raw := strings.TrimSpace(app.Bundle) + if raw == "" || strings.EqualFold(raw, "null") { + return "" + } + return raw +} + +func ensurePublisher(p *openrtb2.Publisher) *openrtb2.Publisher { + if p == nil { + p = &openrtb2.Publisher{} + } + if p.Ext == nil { + p.Ext = jsonutil.RawMessage("{}") + } + return p +} + +func updatePublisherExtension(targetExt *jsonutil.RawMessage, networkID, fieldPath string) ([]byte, error) { + var pubExt map[string]interface{} + if err := jsonutil.Unmarshal(*targetExt, &pubExt); err != nil { + pubExt = make(map[string]interface{}) + } + + params, ok := pubExt["params"].(map[string]interface{}) + if !ok { + params = make(map[string]interface{}) + pubExt["params"] = params + } + params["networkId"] = networkID + + updated, err := jsonutil.Marshal(pubExt) + if err != nil { + return nil, &errortypes.BadInput{ + Message: fmt.Sprintf("Error marshaling %s: %s", fieldPath, err), + } + } + return updated, nil +} + func (a *adapter) MakeBids(req *openrtb2.BidRequest, reqData *adapters.RequestData, respData *adapters.ResponseData) (*adapters.BidderResponse, []error) { if adapters.IsResponseStatusCodeNoContent(respData) { return nil, nil diff --git a/adapters/sparteo/sparteo_test.go b/adapters/sparteo/sparteo_test.go index 527f98b37ed..5b4c3c6d3ee 100644 --- a/adapters/sparteo/sparteo_test.go +++ b/adapters/sparteo/sparteo_test.go @@ -2,30 +2,29 @@ package sparteo import ( "encoding/json" + "errors" "testing" "github.com/prebid/openrtb/v20/openrtb2" + "github.com/prebid/prebid-server/v3/adapters" "github.com/prebid/prebid-server/v3/adapters/adapterstest" "github.com/prebid/prebid-server/v3/config" + "github.com/prebid/prebid-server/v3/errortypes" "github.com/prebid/prebid-server/v3/openrtb_ext" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -// TestBuilder verifies that the Builder function correctly creates a bidder instance. -// It checks for errors, ensures the returned bidder is not nil, and confirms that the endpoint -// in the adapter is set according to the configuration. +// TestBuilder verifies that the Builder function correctly creates a bidder instance +// and that the endpoint template renders fields using the new macros. func TestBuilder(t *testing.T) { - cfg := config.Adapter{Endpoint: "https://bid-test.sparteo.com/s2s-auction"} - bidder, err := Builder(openrtb_ext.BidderSparteo, cfg, config.Server{GvlID: 1028}) - - require.NoError(t, err, "Builder returned an error") - assert.NotNil(t, bidder, "Bidder is nil") - - sparteoAdapter, ok := bidder.(*adapter) - require.True(t, ok, "Expected *adapter, got %T", bidder) - - assert.Equal(t, "https://bid-test.sparteo.com/s2s-auction", sparteoAdapter.endpoint, "Endpoint is not correctly set") + cfg := config.Adapter{ + Endpoint: "https://bid-test.sparteo.com/s2s-auction", + } + bidder, err := Builder(openrtb_ext.BidderSparteo, cfg, config.Server{}) + if assert.NoError(t, err) { + assert.NotNil(t, bidder) + } } // TestJsonSamples runs JSON sample tests using the shared adapterstest framework. @@ -73,3 +72,716 @@ func TestGetMediaType_NilExt(t *testing.T) { assert.Error(t, err, "Expected error for nil extension") assert.Equal(t, openrtb_ext.BidType(""), result, "Expected empty result for nil extension") } + +// TestMakeRequests_ResolvesQueryParams verifies that the adapter correctly resolves macros in the endpoint URL for Site traffic. +func TestMakeRequests_ResolvesQueryParams(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{ + Endpoint: endpoint, + }, config.Server{GvlID: 1028}) + require.NoError(t, err, "Builder returned an error") + + in := &openrtb2.BidRequest{ + ID: "req-qp-1", + Site: &openrtb2.Site{ + Domain: "dev.sparteo.com", + }, + Imp: []openrtb2.Imp{ + { + ID: "imp-1", + Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`), + }, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1, "Expected exactly one outgoing request") + assert.Empty(t, errs, "Unexpected adapter errors") + + expectedURI := "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&site_domain=dev.sparteo.com" + assert.Equal(t, expectedURI, reqs[0].Uri) +} + +// TestMakeRequests_AppBundleMacro verifies that the adapter correctly resolves app_domain and bundle for App traffic. +func TestMakeRequests_AppBundleMacro(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-app-bundle-1", + App: &openrtb2.App{ + Domain: "dev.sparteo.com", + Bundle: "com.sparteo.app", + Publisher: &openrtb2.Publisher{ + ID: "sparteo", + }, + }, + Imp: []openrtb2.Imp{{ + ID: "imp-1", + Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`), + }}, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + assert.Empty(t, errs) + + expected := "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&app_domain=dev.sparteo.com&bundle=com.sparteo.app" + assert.Equal(t, expected, reqs[0].Uri, "endpoint should include app_domain and bundle for App traffic") +} + +// TestMakeRequests_AppBundleMissing_AppendsUnknown verifies that when app.bundle is empty or missing we send bundle=unknown (and warn). +func TestMakeRequests_AppBundleMissing_AppendsUnknown(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-app-nobundle-1", + App: &openrtb2.App{ + Domain: "dev.sparteo.com", + Publisher: &openrtb2.Publisher{ID: "sparteo"}, + }, + Imp: []openrtb2.Imp{{ + ID: "imp-1", + Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`), + }}, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Len(t, errs, 1) + + expected := "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&app_domain=dev.sparteo.com&bundle=unknown" + assert.Equal(t, expected, reqs[0].Uri, "endpoint should contain bundle=unknown when app.bundle is empty") +} + +// TestMakeRequests_SiteDomain verifies that the adapter uses site.Domain and does not include app fields for Site traffic. +func TestMakeRequests_SiteDomain(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{ + Endpoint: endpoint, + }, config.Server{GvlID: 1028}) + require.NoError(t, err, "Builder returned an error") + + in := &openrtb2.BidRequest{ + ID: "req-fallback-1", + Site: &openrtb2.Site{ + Domain: "dev.sparteo.com", + }, + Imp: []openrtb2.Imp{ + { + ID: "imp-1", + Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`), + }, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1, "Expected exactly one outgoing request") + assert.Empty(t, errs, "Unexpected adapter errors") + + expectedURI := "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&site_domain=dev.sparteo.com" + assert.Equal(t, expectedURI, reqs[0].Uri) +} + +// TestMakeRequests_DomainPrecedence_SiteDomainWins verifies that Site wins over App when both exist. +func TestMakeRequests_DomainPrecedence_SiteDomainWins(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-domain-1", + Site: &openrtb2.Site{ + Domain: "site.sparteo.com", + Publisher: &openrtb2.Publisher{ + Domain: "site-pub.sparteo.com", + }, + }, + App: &openrtb2.App{ + Domain: "app.sparteo.com", + Publisher: &openrtb2.Publisher{ + Domain: "app-pub.should-not-be-used", + }, + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + assert.Equal(t, + "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&site_domain=site.sparteo.com", + reqs[0].Uri, + ) +} + +// TestMakeRequests_SitePresentWithEmptyDomain_UsesUnknownNotApp verifies that when Site exists but has no domain/page, we send site_domain=unknown and do NOT use App. +func TestMakeRequests_SitePresentWithEmptyDomain_UsesUnknownNotApp(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-domain-2", + Site: &openrtb2.Site{ + Domain: "", + Publisher: &openrtb2.Publisher{ + Domain: "dev.sparteo.com", + }, + }, + App: &openrtb2.App{ + Domain: "app.sparteo.com", + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Len(t, errs, 1) + + assert.Equal(t, + "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&site_domain=unknown", + reqs[0].Uri, + ) +} + +// TestMakeRequests_DomainPrecedence_AppDomainWhenNoSite verifies that if there is no Site, we use app.domain (and include bundle if present). +func TestMakeRequests_DomainPrecedence_AppDomainWhenNoSite(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-domain-3", + Site: nil, + App: &openrtb2.App{ + Domain: "app.sparteo.com", + Bundle: "com.sparteo.app", + Publisher: &openrtb2.Publisher{ + Domain: "app-pub.should-not-be-used", + }, + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + assert.Equal(t, + "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&app_domain=app.sparteo.com&bundle=com.sparteo.app", + reqs[0].Uri, + ) +} + +// TestMakeRequests_SitePageWhenNoSiteDomainNoApp verifies that if there is Site without domain but page is present, we use site.page. +func TestMakeRequests_SitePageWhenNoSiteDomainNoApp(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-domain-page", + Site: &openrtb2.Site{ + Domain: "", + Page: "https://www.dev.sparteo.com:3000/some/path?x=1", + }, + App: nil, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + assert.Equal(t, + "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&site_domain=dev.sparteo.com", + reqs[0].Uri, + ) +} + +// TestNormalizeHostname_PortAndPathAndURL verifies normalizeHostname behavior. +func TestNormalizeHostname_PortAndPathAndURL(t *testing.T) { + base := "dev.sparteo.com" + + tests := []struct { + name string + in string + out string + }{ + // Bare host + port + {"host_with_port", "www." + base + ":8080", base}, + {"host_upper_with_tls_port", "DEV.SPARTEO.COM:443", base}, + {"host_trailing_dot_with_port", base + ".:8443", base}, + + // Bare host + path + {"host_with_path", base + "/some/path?x=1", base}, + {"www_host_with_path", "www." + base + "/p", base}, + + // Bare host + port + path + {"host_with_port_and_path", base + ":8080/p?q=1", base}, + {"www_host_with_port_and_path", "www." + base + ":3000/some/path", base}, + + // Absolute URLs + {"https_url", "https://www." + base + "/x", base}, + {"http_url_with_port", "http://WWW." + base + ":8080/abc", base}, + + // Scheme-relative URL + {"scheme_relative", "//www." + base + "/x", base}, + + // Odd spacing around URLs/hosts + {"spaced_https_url", " https://www." + base + ":3000/x ", base}, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + got := normalizeHostname(tc.in) + assert.Equal(t, tc.out, got) + }) + } +} + +// --- Helper for reading publisher.ext.params.networkId in output JSON --- +func readNetworkIDFromPublisherExt(t *testing.T, ext json.RawMessage) (string, bool) { + if len(ext) == 0 { + return "", false + } + var m map[string]interface{} + require.NoError(t, json.Unmarshal(ext, &m)) + params, _ := m["params"].(map[string]interface{}) + if params == nil { + return "", false + } + val, _ := params["networkId"].(string) + if val == "" { + return "", false + } + return val, true +} + +// When site exists but site.publisher is nil, the adapter must create publisher and upsert networkId into site.publisher.ext +func TestMakeRequests_UpdatePublisherExtension_CreatesSitePublisherIfMissing(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-upsert-site", + Site: &openrtb2.Site{ + Domain: "site.sparteo.com", + Publisher: nil, + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + var out openrtb2.BidRequest + require.NoError(t, json.Unmarshal(reqs[0].Body, &out)) + + require.NotNil(t, out.Site) + require.NotNil(t, out.Site.Publisher, "publisher should be created when missing") + val, ok := readNetworkIDFromPublisherExt(t, out.Site.Publisher.Ext) + require.True(t, ok, "site.publisher.ext.params.networkId should exist") + assert.Equal(t, "networkID", val) +} + +// When no site is present, create app.publisher if missing and upsert networkId into app.publisher.ext +func TestMakeRequests_UpdatePublisherExtension_CreatesAppPublisherIfMissingWhenNoSite(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-upsert-app", + Site: nil, + App: &openrtb2.App{ + Domain: "app.sparteo.com", + Bundle: "com.sparteo.app", + Publisher: nil, + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + var out openrtb2.BidRequest + require.NoError(t, json.Unmarshal(reqs[0].Body, &out)) + + require.Nil(t, out.Site) + require.NotNil(t, out.App) + require.NotNil(t, out.App.Publisher, "app.publisher should be created when missing") + val, ok := readNetworkIDFromPublisherExt(t, out.App.Publisher.Ext) + require.True(t, ok, "app.publisher.ext.params.networkId should exist") + assert.Equal(t, "networkID", val) +} + +// TestMakeRequests_UpdatePublisherExtension_PrefersSiteOverApp verifies that we prefer Site when both Site and App exist; only Site should receive the networkId +func TestMakeRequests_UpdatePublisherExtension_PrefersSiteOverApp(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-upsert-prefer-site", + Site: &openrtb2.Site{ + Domain: "site.sparteo.com", + Publisher: &openrtb2.Publisher{}, + }, + App: &openrtb2.App{ + Domain: "app.sparteo.com", + Publisher: &openrtb2.Publisher{}, + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + var out openrtb2.BidRequest + require.NoError(t, json.Unmarshal(reqs[0].Body, &out)) + + require.NotNil(t, out.Site) + require.NotNil(t, out.Site.Publisher) + siteVal, siteOk := readNetworkIDFromPublisherExt(t, out.Site.Publisher.Ext) + require.True(t, siteOk) + assert.Equal(t, "networkID", siteVal) + + if out.App != nil && out.App.Publisher != nil { + _, appOk := readNetworkIDFromPublisherExt(t, out.App.Publisher.Ext) + assert.False(t, appOk, "app.publisher.ext should not contain networkId when site exists") + } +} + +// TestMakeRequests_NoSiteNoApp_NoDomainParam_NoWarning verifies that with neither Site nor App we don't send domain params and produce no warnings. +func TestMakeRequests_NoSiteNoApp_NoDomainParam_NoWarning(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-domain-missing", + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + + require.Len(t, reqs, 1) + require.Len(t, errs, 0) + + assert.Equal(t, + "https://bid-test.sparteo.com/s2s-auction?network_id=networkID", + reqs[0].Uri, + ) +} + +// TestMakeRequests_SitePageLiteralNull_TreatedAsMissingDomain verifies that a literal "null" in site.page is treated as an unknown site domain. +func TestMakeRequests_SitePageLiteralNull_TreatedAsMissingDomain(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s-auction" + + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + ID: "req-page-null", + Site: &openrtb2.Site{ + Domain: "", + Page: "null", + }, + Imp: []openrtb2.Imp{ + {ID: "imp-1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}, + }, + } + + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + + require.Len(t, reqs, 1) + require.Len(t, errs, 1) + assert.Equal(t, + "https://bid-test.sparteo.com/s2s-auction?network_id=networkID&site_domain=unknown", + reqs[0].Uri, + ) + + var badInput *errortypes.BadInput + require.True(t, errors.As(errs[0], &badInput)) + assert.Contains(t, badInput.Error(), "Domain not found") +} + +// TestMakeRequests_AppBundle_NormalizationVariants ensures blank/whitespace/"null" bundles normalize to "unknown" with a single warning. +func TestMakeRequests_AppBundle_NormalizationVariants(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + cases := []struct { + name string + bundle string + }{ + {"empty", ""}, + {"spaces", " "}, + {"lower_null", "null"}, + {"weird_case", "NuLl"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + in := &openrtb2.BidRequest{ + App: &openrtb2.App{Domain: "dev.sparteo.com", Bundle: tc.bundle, Publisher: &openrtb2.Publisher{}}, + Imp: []openrtb2.Imp{{ID: "i1", Ext: json.RawMessage(`{"bidder":{"networkId":"n"}}`)}}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Len(t, errs, 1) + assert.Contains(t, reqs[0].Uri, "app_domain=dev.sparteo.com") + assert.Contains(t, reqs[0].Uri, "bundle=unknown") + var badInput *errortypes.BadInput + require.True(t, errors.As(errs[0], &badInput)) + assert.Contains(t, badInput.Error(), "Bundle not found") + }) + } +} + +// TestMakeRequests_SitePresent_IgnoresAppFields ensures when Site is present, only site_domain is sent and app fields are ignored. +func TestMakeRequests_SitePresent_IgnoresAppFields(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{Domain: "site.sparteo.com"}, + App: &openrtb2.App{Domain: "app.sparteo.com", Bundle: "com.app"}, + Imp: []openrtb2.Imp{{ID: "i1", Ext: json.RawMessage(`{"bidder":{"networkId":"N"}}`)}}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + assert.Equal(t, "https://bid-test.sparteo.com/s2s?network_id=N&site_domain=site.sparteo.com", reqs[0].Uri) +} + +// TestMakeRequests_SiteWithPageFallback_IgnoresApp ensures Site.Page is used when Site.Domain is empty and App is ignored when Site exists. +func TestMakeRequests_SiteWithPageFallback_IgnoresApp(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{Domain: "", Page: "https://www.example.com:8080/p"}, + App: &openrtb2.App{Domain: "app.sparteo.com", Bundle: "com.app"}, + Imp: []openrtb2.Imp{{ID: "i1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + assert.Equal(t, "https://bid-test.sparteo.com/s2s?network_id=networkID&site_domain=example.com", reqs[0].Uri) +} + +// TestMakeRequests_AppMissingBundle_WarnsAndUnknown ensures App with missing bundle yields bundle=unknown and one bundle warning. +func TestMakeRequests_AppMissingBundle_WarnsAndUnknown(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + App: &openrtb2.App{Domain: "dev.sparteo.com", Bundle: "", Publisher: &openrtb2.Publisher{}}, + Imp: []openrtb2.Imp{{ID: "i1", Ext: json.RawMessage(`{"bidder":{"networkId":"networkID"}}`)}}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Len(t, errs, 1) + assert.Equal(t, "https://bid-test.sparteo.com/s2s?network_id=networkID&app_domain=dev.sparteo.com&bundle=unknown", reqs[0].Uri) + var badInput *errortypes.BadInput + require.True(t, errors.As(errs[0], &badInput)) + assert.Contains(t, badInput.Error(), "Bundle not found") +} + +// TestMakeRequests_ExtRewrite_MovesBidderIntoSparteoParams verifies bidder object is moved under sparteo.params and bidder is removed. +func TestMakeRequests_ExtRewrite_MovesBidderIntoSparteoParams(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{Domain: "dev.sparteo.com"}, + Imp: []openrtb2.Imp{{ID: "i1", Ext: json.RawMessage(`{"bidder":{"a":1}}`)}}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + var out openrtb2.BidRequest + require.NoError(t, json.Unmarshal(reqs[0].Body, &out)) + var ext map[string]any + require.NoError(t, json.Unmarshal(out.Imp[0].Ext, &ext)) + _, hasBidder := ext["bidder"] + assert.False(t, hasBidder) + sparteoNode, ok := ext["sparteo"].(map[string]any) + require.True(t, ok) + params, ok := sparteoNode["params"].(map[string]any) + require.True(t, ok) + assert.Equal(t, float64(1), params["a"]) +} + +// TestMakeRequests_ExtRewrite_PreservesExistingSparteoParams verifies existing sparteo.params keys are preserved when merging bidder fields. +func TestMakeRequests_ExtRewrite_PreservesExistingSparteoParams(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{Domain: "dev.sparteo.com"}, + Imp: []openrtb2.Imp{{ + ID: "i1", + Ext: json.RawMessage(`{"sparteo":{"params":{"keep":true}},"bidder":{"add":42}}`), + }}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + var out openrtb2.BidRequest + require.NoError(t, json.Unmarshal(reqs[0].Body, &out)) + var ext map[string]any + require.NoError(t, json.Unmarshal(out.Imp[0].Ext, &ext)) + sparteoNode, ok := ext["sparteo"].(map[string]any) + require.True(t, ok) + params, ok := sparteoNode["params"].(map[string]any) + require.True(t, ok) + assert.Equal(t, true, params["keep"]) + assert.Equal(t, float64(42), params["add"]) +} + +// TestMakeRequests_NetworkId_FirstNonEmptyWins verifies the first non-empty networkId across imps is used. +func TestMakeRequests_NetworkId_FirstNonEmptyWins(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{Domain: "dev.sparteo.com"}, + Imp: []openrtb2.Imp{ + {ID: "i1", Ext: json.RawMessage(`{"bidder":{"networkId":""}}`)}, + {ID: "i2", Ext: json.RawMessage(`{"bidder":{"networkId":"N2"}}`)}, + {ID: "i3", Ext: json.RawMessage(`{"bidder":{"networkId":"N3"}}`)}, + }, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + assert.Equal(t, "https://bid-test.sparteo.com/s2s?network_id=N2&site_domain=dev.sparteo.com", reqs[0].Uri) +} + +// TestMakeRequests_AllImpsBadExt_AggregatesErrors verifies a request is still built when all imps have bad ext and errors are aggregated. +func TestMakeRequests_AllImpsBadExt_AggregatesErrors(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{Domain: "dev.sparteo.com"}, + Imp: []openrtb2.Imp{ + {ID: "i1", Ext: json.RawMessage(`not-json`)}, + {ID: "i2", Ext: json.RawMessage(`{"bidder":}`)}, + }, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Len(t, errs, 2) + assert.Equal(t, "https://bid-test.sparteo.com/s2s?network_id=&site_domain=dev.sparteo.com", reqs[0].Uri) +} + +// TestMakeRequests_UpdatePublisherExtension_PreservesOtherKeys verifies publisher.ext keeps existing keys while adding params.networkId. +func TestMakeRequests_UpdatePublisherExtension_PreservesOtherKeys(t *testing.T) { + endpoint := "https://bid-test.sparteo.com/s2s" + bidder, err := Builder(openrtb_ext.BidderSparteo, config.Adapter{Endpoint: endpoint}, config.Server{GvlID: 1028}) + require.NoError(t, err) + + startExt := json.RawMessage(`{"params":{"foo":"bar"},"other":123}`) + in := &openrtb2.BidRequest{ + Site: &openrtb2.Site{ + Domain: "dev.sparteo.com", + Publisher: &openrtb2.Publisher{Ext: startExt}, + }, + Imp: []openrtb2.Imp{{ID: "i1", Ext: json.RawMessage(`{"bidder":{"networkId":"N"}}`)}}, + } + reqs, errs := bidder.MakeRequests(in, &adapters.ExtraRequestInfo{}) + require.Len(t, reqs, 1) + require.Empty(t, errs) + + var out openrtb2.BidRequest + require.NoError(t, json.Unmarshal(reqs[0].Body, &out)) + var m map[string]any + require.NoError(t, json.Unmarshal(out.Site.Publisher.Ext, &m)) + params, _ := m["params"].(map[string]any) + require.NotNil(t, params) + assert.Equal(t, "bar", params["foo"]) + assert.Equal(t, float64(123), m["other"]) + assert.Equal(t, "N", params["networkId"]) +} + +// TestMakeBids_SkipsAudioBids verifies bids with prebid.type=audio are skipped with no returned errors. +func TestMakeBids_SkipsAudioBids(t *testing.T) { + a := &adapter{} + body := []byte(`{"cur":"USD","seatbid":[{"bid":[{"impid":"1","price":1,"crid":"c","ext":{"prebid":{"type":"audio"}}}]}]}`) + br, errs := a.MakeBids(&openrtb2.BidRequest{}, &adapters.RequestData{}, &adapters.ResponseData{StatusCode: 200, Body: body}) + require.NoError(t, nil) + require.Nil(t, errs) + require.NotNil(t, br) + assert.Equal(t, 0, len(br.Bids)) +} + +// TestMakeBids_SetsMTypeAndCurrency verifies mtype is set correctly for banner/video/native and currency is propagated. +func TestMakeBids_SetsMTypeAndCurrency(t *testing.T) { + a := &adapter{} + body := []byte(`{ + "cur":"EUR", + "seatbid":[{"bid":[ + {"impid":"b1","price":1,"crid":"c1","ext":{"prebid":{"type":"banner"}}}, + {"impid":"v1","price":2,"crid":"c2","ext":{"prebid":{"type":"video"}}}, + {"impid":"n1","price":3,"crid":"c3","ext":{"prebid":{"type":"native"}}} + ]}] + }`) + br, errs := a.MakeBids(&openrtb2.BidRequest{}, &adapters.RequestData{}, &adapters.ResponseData{StatusCode: 200, Body: body}) + require.Nil(t, errs) + require.NotNil(t, br) + require.Equal(t, "EUR", br.Currency) + require.Equal(t, 3, len(br.Bids)) + assert.Equal(t, openrtb2.MarkupBanner, br.Bids[0].Bid.MType) + assert.Equal(t, openrtb2.MarkupVideo, br.Bids[1].Bid.MType) + assert.Equal(t, openrtb2.MarkupNative, br.Bids[2].Bid.MType) +} diff --git a/adapters/sparteo/sparteotest/exemplary/banner-app.json b/adapters/sparteo/sparteotest/exemplary/banner-app.json new file mode 100644 index 00000000000..1e88391f3e1 --- /dev/null +++ b/adapters/sparteo/sparteotest/exemplary/banner-app.json @@ -0,0 +1,242 @@ +{ + "mockBidRequest": { + "id": "request-id", + "imp": [ + { + "id": "div-banner-id", + "banner": { + "topframe": 1, + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + "networkId": "networkId" + } + } + } + ], + "app": { + "domain": "dev.sparteo.com", + "bundle": "com.sparteo.app", + "publisher": { + "domain": "dev.sparteo.com", + "id": "sparteo" + } + }, + "device": { + "w": 1920, + "h": 1080, + "dnt": 0, + "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36", + "language": "fr", + "ext": { + "vpw": 1056, + "vph": 934 + }, + "sua": { + "source": 1, + "platform": { + "brand": "macOS" + }, + "browsers": [ + { + "brand": "Chromium", + "version": [ + "134" + ] + }, + { + "brand": "Not:A-Brand", + "version": [ + "24" + ] + }, + { + "brand": "Google Chrome", + "version": [ + "134" + ] + } + ], + "mobile": 0 + } + }, + "ext": { + "prebid": { + "server": { + "datacenter": "", + "externalurl": "", + "gvlid": 1028 + } + }, + "tmaxmax": 5000 + }, + "tmax": 5000 + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&app_domain=dev.sparteo.com&bundle=com.sparteo.app", + "body": { + "id": "request-id", + "imp": [ + { + "id": "div-banner-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ], + "topframe": 1 + }, + "ext": { + "sparteo": { + "params": { + "networkId": "networkId" + } + } + } + } + ], + "app": { + "domain": "dev.sparteo.com", + "bundle": "com.sparteo.app", + "publisher": { + "domain": "dev.sparteo.com", + "id": "sparteo", + "ext": { + "params": { + "networkId": "networkId" + } + } + } + }, + "device": { + "dnt": 0, + "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36", + "sua": { + "browsers": [ + { + "brand": "Chromium", + "version": [ + "134" + ] + }, + { + "brand": "Not:A-Brand", + "version": [ + "24" + ] + }, + { + "brand": "Google Chrome", + "version": [ + "134" + ] + } + ], + "platform": { + "brand": "macOS" + }, + "mobile": 0, + "source": 1 + }, + "h": 1080, + "w": 1920, + "language": "fr", + "ext": { + "vpw": 1056, + "vph": 934 + } + }, + "tmax": 5000, + "ext": { + "prebid": { + "server": { + "externalurl": "", + "gvlid": 1028, + "datacenter": "" + } + }, + "tmaxmax": 5000 + } + }, + "impIDs": [ + "div-banner-id" + ] + }, + "mockResponse": { + "status": 200, + "body": { + "id": "request-id", + "seatbid": [ + { + "seat": "sparteo", + "bid": [ + { + "id": "137dd2bd-3015-407a-ab50-384aa2c706d7", + "impid": "div-banner-id", + "price": 0.10797, + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "adm": "", + "adomain": [ + "testpage-ad" + ], + "crid": "banner_creative_test", + "w": 300, + "h": 250, + "ext": { + "ft": "passthrough", + "prebid": { + "type": "banner" + } + } + } + ] + + } + ], + "cur": "EUR" + } + } + } + ], + "expectedBidResponses": [ + { + "id": "request-id", + "bids": [ + { + "bid": { + "id": "137dd2bd-3015-407a-ab50-384aa2c706d7", + "impid": "div-banner-id", + "mtype": 1, + "price": 0.10797, + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "adm": "", + "adomain": [ + "testpage-ad" + ], + "crid": "banner_creative_test", + "w": 300, + "h": 250, + "ext": { + "ft": "passthrough", + "prebid": { + "type": "banner" + } + } + }, + "type": "banner" + } + ], + "cur": "EUR" + } + ] +} \ No newline at end of file diff --git a/adapters/sparteo/sparteotest/exemplary/banner.json b/adapters/sparteo/sparteotest/exemplary/banner.json index 78fa09afc76..f68f57b6339 100644 --- a/adapters/sparteo/sparteotest/exemplary/banner.json +++ b/adapters/sparteo/sparteotest/exemplary/banner.json @@ -21,13 +21,13 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "publisher": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "id": "sparteo" }, - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/" + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/" }, "device": { "w": 1920, @@ -82,7 +82,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "request-id", "imp": [ @@ -107,12 +107,12 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/", + "domain": "dev.sparteo.com", + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/", "publisher": { "id": "sparteo", - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "ext": { "params": { "networkId": "networkId" @@ -186,7 +186,7 @@ "id": "137dd2bd-3015-407a-ab50-384aa2c706d7", "impid": "div-banner-id", "price": 0.10797, - "nurl": "https://dev.sparteo.com:4444/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", "adm": "", "adomain": [ "testpage-ad" @@ -220,7 +220,7 @@ "impid": "div-banner-id", "mtype": 1, "price": 0.10797, - "nurl": "https://dev.sparteo.com:4444/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", "adm": "", "adomain": [ "testpage-ad" diff --git a/adapters/sparteo/sparteotest/exemplary/native.json b/adapters/sparteo/sparteotest/exemplary/native.json index 2f5b9bcc346..bcbbf8b6ab7 100644 --- a/adapters/sparteo/sparteotest/exemplary/native.json +++ b/adapters/sparteo/sparteotest/exemplary/native.json @@ -15,13 +15,13 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "publisher": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "id": "sparteo" }, - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/" + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/" }, "device": { "w": 1920, @@ -76,7 +76,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "request-id", "imp": [ @@ -95,12 +95,12 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/", + "domain": "dev.sparteo.com", + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/", "publisher": { "id": "sparteo", - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "ext": { "params": { "networkId": "networkId" @@ -174,7 +174,7 @@ "id": "137dd2bd-3015-407a-ab50-384aa2c706d7", "impid": "div-native-id", "price": 0.10797, - "nurl": "https://dev.sparteo.com:4444/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", "adm": "", "adomain": [ "testpage-ad" @@ -207,7 +207,7 @@ "impid": "div-native-id", "mtype": 4, "price": 0.10797, - "nurl": "https://dev.sparteo.com:4444/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", "adm": "", "adomain": [ "testpage-ad" diff --git a/adapters/sparteo/sparteotest/exemplary/video.json b/adapters/sparteo/sparteotest/exemplary/video.json index f69d6463096..12a8c578be4 100644 --- a/adapters/sparteo/sparteotest/exemplary/video.json +++ b/adapters/sparteo/sparteotest/exemplary/video.json @@ -43,13 +43,13 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "publisher": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "id": "sparteo" }, - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/" + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/" }, "device": { "w": 1920, @@ -104,7 +104,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "request-id", "imp": [ @@ -146,12 +146,12 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/", + "domain": "dev.sparteo.com", + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/", "publisher": { "id": "sparteo", - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "ext": { "params": { "networkId": "networkId" @@ -225,7 +225,7 @@ "id": "137dd2bd-3015-407a-ab50-384aa2c706d7", "impid": "div-video-id", "price": 0.10797, - "nurl": "https://dev.sparteo.com:4444/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", "adm": "", "adomain": [ "testpage-ad" @@ -258,7 +258,7 @@ "impid": "div-video-id", "mtype": 2, "price": 0.10797, - "nurl": "https://dev.sparteo.com:4444/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", + "nurl": "https://dev.sparteo.com/event/sparteo/0a98964d-1cf9-4802-93e9-c59c18f497fa?d=kyGjrlVurDF3FlG8d7juZXMzNlGoZA06b75fJDG9dyF3LTd9LzPxLRHzMzFzMfwfdlifNfF9L7AlLzreYS96MTH9JTP7NRdtNRU4LS8lYTPwZTMlLRPyYTUfJDGjdEPfNfFvdzGzJWA8Y6Qob75fJDG8YSF3FirvJWe9rEHtY7xoZW49JzKuLSFsFmBiFgnfZCV7JmMwYXG9ZW1uY70tNgP9MRPfJDGwrSF3Fle9rEBzGTMBGTGCGTGCZCV7JmMwYXG9ZW1uY70tGTMBMRP9MDUyQmBeZ7UjLiZzZXG7ZXFtrC1td7VyrlVyJWGoZCQobldjLiZzZXG7ZXGUb8MjdmZjdiGoZCQoblrDYW4uZXFfJDGfdmFfNfFfJDGuhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGwhWPfNfGjYlY4ZTi6ZD8iMCMeJTQeLRKtNWL9YS8iLzK8LTPwMzL7ZRYfJDGib6LfNfGtYWMOUyFsFlQfFgnfrW4qbl06bfFsFmVib75fNfG8bltub6ruFfwfrWQ9FgnfZCVzh6QvdDFsFlAfrDF3WyGzd6HtY70tYl1tbW0uZXj9hXojdj0eXzUwFfwfd6MwJWMvbWGvJXB8YlZ8rEVyZV0jbXB9kV18LDFsFlrsb7GebDFsFmBfdy8fhWPtdlA9ZV0OPV1xLRHwFfwfdlV7ZW48ZV0BXzKwLDFsFlGoZD8vdEQaT6B9hW8KXzP8Fj9sFmByZWQzFgo2Flrsb7GebKxjrlVPdlVPdlViFgnxJDGobXBLZXZjbAByZVByZWPfNgKsFlMyZWAadCVyX7jtdDF3LS58MzYsFlGobCxeYlxjX6Bjdj0obXHfNgKsFlVzrCjtYXQjZA0yZXZjbmVjFgnwJgF5NSwfrljvrXMskV0yZXZjbmVadlA9hW1fNgKsFmrobj0yYXQjFgnwJgHyMSwfbWAyZ7juX6ByZWPfNgHuLRH8JDGfhWQadEGoY7UfNgHuLX9sFlGohSF3FlQorf8fYW4uZXFfJDGwbELfNjsfLzHwkRF8LDGrJDGwbXPfNjsfYlAublVyFj9sFlVsdyF3WyFzLRB5LgUwFfwfLzHwkRKwLDFsFgLwLEcxLgUfJDFzLRB5LTUwFj9sFlVtrDF3WyGfYW4uZXFfXSwfYlQzFgobFlAikW08bCjqZSFsFlAwdC4jkEVzFfwfZ6GoZDFsFl0lrC8jZCjeFfwfb74jrCAmFfwfb6BjbmcfJDGyhXMjFfwfdmVfhWMvbfFsFmMtYXG9YWQzZXG7ZXFfJDGzbWjsZXrebmQjZDFsFmVudmVskSGrJDGtYfF3ZlAsd7UsFlZ9dyF3WyGPYXMzVCeyb6VmhKZvdl8erDGrJDGydyF3LD55MSwfYlifNfFxLzriZRGfZD9zLRK8JTPwM7KtYWF8LD9zNRQeYTGgMzH7ZRdfJDGfdDF3LD5xJDGlrDF3FjBed6MUhEGvrWrnQl0ybWA9Fm9=", "adm": "", "adomain": [ "testpage-ad" diff --git a/adapters/sparteo/sparteotest/supplemental/filter-empty-seat-bids.json b/adapters/sparteo/sparteotest/supplemental/filter-empty-seat-bids.json index ded36e22d4f..ba66d5820b4 100644 --- a/adapters/sparteo/sparteotest/supplemental/filter-empty-seat-bids.json +++ b/adapters/sparteo/sparteotest/supplemental/filter-empty-seat-bids.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "test-request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": [ "div-banner-id" diff --git a/adapters/sparteo/sparteotest/supplemental/filter-invalid-bid-type.json b/adapters/sparteo/sparteotest/supplemental/filter-invalid-bid-type.json index 851fcf1860d..ab31a8e67e0 100644 --- a/adapters/sparteo/sparteotest/supplemental/filter-invalid-bid-type.json +++ b/adapters/sparteo/sparteotest/supplemental/filter-invalid-bid-type.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "test-request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": ["div-banner-id"] }, diff --git a/adapters/sparteo/sparteotest/supplemental/filter-no-seat-bids.json b/adapters/sparteo/sparteotest/supplemental/filter-no-seat-bids.json index 21e3f356296..0660aee07c8 100644 --- a/adapters/sparteo/sparteotest/supplemental/filter-no-seat-bids.json +++ b/adapters/sparteo/sparteotest/supplemental/filter-no-seat-bids.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "test-request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": [ "div-banner-id" diff --git a/adapters/sparteo/sparteotest/supplemental/invalid-bidder-ext.json b/adapters/sparteo/sparteotest/supplemental/invalid-bidder-ext.json deleted file mode 100644 index 61d1d610025..00000000000 --- a/adapters/sparteo/sparteotest/supplemental/invalid-bidder-ext.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "mockBidRequest": { - "id": "test-request-id", - "imp": [ - { - "id": "div-banner-id", - "banner": { - "topframe": 1, - "format": [ - { - "w": 300, - "h": 250 - } - ] - }, - "ext": { - "bidder": "not an object" - } - } - ] - }, - "httpCalls": [ - { - "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", - "body": { - "id": "test-request-id", - "imp": [ - { - "id": "div-banner-id", - "banner": { - "topframe": 1, - "format": [ - { - "w": 300, - "h": 250 - } - ] - }, - "ext": { - "bidder": "not an object" - } - } - ] - }, - "ImpIDs": ["div-banner-id"] - }} - ], - "expectedMakeRequestsErrors": [ - { - "value": "^ignoring imp id=div-banner-id, error while decoding impExt", - "comparison": "regex" - } - ], - "expectedMakeBidsErrors": [ - { - "value": "Unexpected status code: 0. Run with request.debug = 1 for more info", - "comparison": "literal" - } - ] -} \ No newline at end of file diff --git a/adapters/sparteo/sparteotest/supplemental/invalid-json-response.json b/adapters/sparteo/sparteotest/supplemental/invalid-json-response.json index 12ad55425b9..adb997a5038 100644 --- a/adapters/sparteo/sparteotest/supplemental/invalid-json-response.json +++ b/adapters/sparteo/sparteotest/supplemental/invalid-json-response.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "test-request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": [ "div-banner-id" diff --git a/adapters/sparteo/sparteotest/supplemental/invalid-publisher-ext.json b/adapters/sparteo/sparteotest/supplemental/invalid-publisher-ext.json index 5d2bb2148c3..73a196772a3 100644 --- a/adapters/sparteo/sparteotest/supplemental/invalid-publisher-ext.json +++ b/adapters/sparteo/sparteotest/supplemental/invalid-publisher-ext.json @@ -21,12 +21,12 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", - "page": "https://dev.sparteo.com:4444/page/test/", - "ref": "https://dev.sparteo.com:4444/page/test/", + "domain": "dev.sparteo.com", + "page": "https://dev.sparteo.com/page/test/", + "ref": "https://dev.sparteo.com/page/test/", "publisher": { "id": "sparteo", - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "ext": "not an object" } } @@ -34,7 +34,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "test-request-id", "imp": [ @@ -59,10 +59,10 @@ } ], "site": { - "domain": "dev.sparteo.com:4444", - "page": "https://dev.sparteo.com:4444/page/test/", + "domain": "dev.sparteo.com", + "page": "https://dev.sparteo.com/page/test/", "publisher": { - "domain": "dev.sparteo.com:4444", + "domain": "dev.sparteo.com", "ext": { "params": { "networkId": "networkId" @@ -70,7 +70,7 @@ }, "id": "sparteo" }, - "ref": "https://dev.sparteo.com:4444/page/test/" + "ref": "https://dev.sparteo.com/page/test/" } }, "impIDs": [ diff --git a/adapters/sparteo/sparteotest/supplemental/status_204.json b/adapters/sparteo/sparteotest/supplemental/status_204.json index 171eec08ed6..7358403bf68 100644 --- a/adapters/sparteo/sparteotest/supplemental/status_204.json +++ b/adapters/sparteo/sparteotest/supplemental/status_204.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": [ "div-banner-id" diff --git a/adapters/sparteo/sparteotest/supplemental/status_400.json b/adapters/sparteo/sparteotest/supplemental/status_400.json index 26f24b68be6..d97b7f083c8 100644 --- a/adapters/sparteo/sparteotest/supplemental/status_400.json +++ b/adapters/sparteo/sparteotest/supplemental/status_400.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": [ "div-banner-id" diff --git a/adapters/sparteo/sparteotest/supplemental/status_500.json b/adapters/sparteo/sparteotest/supplemental/status_500.json index ec3c68e56b1..bee2affa482 100644 --- a/adapters/sparteo/sparteotest/supplemental/status_500.json +++ b/adapters/sparteo/sparteotest/supplemental/status_500.json @@ -19,12 +19,15 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com" + } }, "httpCalls": [ { "expectedRequest": { - "uri": "https://bid-test.sparteo.com/s2s-auction", + "uri": "https://bid-test.sparteo.com/s2s-auction?network_id=networkId&site_domain=dev.sparteo.com", "body": { "id": "request-id", "imp": [ @@ -47,7 +50,17 @@ } } } - ] + ], + "site": { + "domain": "dev.sparteo.com", + "publisher": { + "ext": { + "params": { + "networkId": "networkId" + } + } + } + } }, "impIDs": [ "div-banner-id" diff --git a/macros/macros.go b/macros/macros.go index f24974b572a..22abaf94311 100644 --- a/macros/macros.go +++ b/macros/macros.go @@ -23,6 +23,10 @@ type EndpointTemplateParams struct { SeatID string TokenID string PlacementID string + NetworkId string + SiteDomain string + AppDomain string + Bundle string } // UserSyncPrivacy specifies privacy policy macros, represented as strings, for user sync urls. diff --git a/static/bidder-info/sparteo.yaml b/static/bidder-info/sparteo.yaml index 1ad61ab0725..543d701da70 100644 --- a/static/bidder-info/sparteo.yaml +++ b/static/bidder-info/sparteo.yaml @@ -16,5 +16,5 @@ capabilities: endpoint: "https://bid.sparteo.com/s2s-auction" userSync: iframe: - url: "https://sync.sparteo.com/s2s_sync?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect_url={{.RedirectURL}}" - supportCors: true \ No newline at end of file + url: "https://sync.sparteo.com/s2s_sync?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redirect_url={{.RedirectURL}}" + supportCors: true