prebid.js 9.40.0 → 9.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/BTBidAdapter.js +1 -1
  5. package/dist/adagioAnalyticsAdapter.js +1 -1
  6. package/dist/adagioBidAdapter.js +1 -1
  7. package/dist/adagioUtils.js +1 -1
  8. package/dist/addefendBidAdapter.js +1 -1
  9. package/dist/adgenerationBidAdapter.js +1 -1
  10. package/dist/adlooxRtdProvider.js +1 -1
  11. package/dist/adqueryBidAdapter.js +1 -1
  12. package/dist/adrelevantisBidAdapter.js +1 -1
  13. package/dist/adstirBidAdapter.js +1 -1
  14. package/dist/adtrgtmeBidAdapter.js +1 -1
  15. package/dist/adxcgAnalyticsAdapter.js +1 -1
  16. package/dist/adxcgBidAdapter.js +1 -1
  17. package/dist/adyoulikeBidAdapter.js +1 -1
  18. package/dist/agmaAnalyticsAdapter.js +1 -1
  19. package/dist/ajaBidAdapter.js +1 -1
  20. package/dist/amxBidAdapter.js +1 -1
  21. package/dist/amxIdSystem.js +1 -1
  22. package/dist/aniviewBidAdapter.js +1 -1
  23. package/dist/appierAnalyticsAdapter.js +1 -1
  24. package/dist/appnexusBidAdapter.js +1 -1
  25. package/dist/asoBidAdapter.js +1 -1
  26. package/dist/axonixBidAdapter.js +1 -1
  27. package/dist/beopBidAdapter.js +1 -1
  28. package/dist/bidglassBidAdapter.js +1 -1
  29. package/dist/big-richmediaBidAdapter.js +1 -1
  30. package/dist/bitmediaBidAdapter.js +1 -1
  31. package/dist/braveUtils.js +1 -1
  32. package/dist/bridBidAdapter.js +1 -1
  33. package/dist/bridgeuppBidAdapter.js +1 -1
  34. package/dist/bridgewellBidAdapter.js +1 -1
  35. package/dist/brightMountainMediaBidAdapter.js +1 -1
  36. package/dist/carodaBidAdapter.js +1 -1
  37. package/dist/chtnwBidAdapter.js +1 -1
  38. package/dist/chunk-core.js +1 -1
  39. package/dist/concertBidAdapter.js +1 -1
  40. package/dist/connectadBidAdapter.js +1 -1
  41. package/dist/consumableBidAdapter.js +1 -1
  42. package/dist/contxtfulBidAdapter.js +1 -1
  43. package/dist/conversantAnalyticsAdapter.js +1 -1
  44. package/dist/conversantBidAdapter.js +1 -1
  45. package/dist/craftBidAdapter.js +1 -1
  46. package/dist/criteoBidAdapter.js +1 -1
  47. package/dist/cwireBidAdapter.js +1 -1
  48. package/dist/dailymotionBidAdapter.js +1 -1
  49. package/dist/dependencies.json +4 -0
  50. package/dist/dspxBidAdapter.js +1 -1
  51. package/dist/dxkultureBidAdapter.js +1 -1
  52. package/dist/eplanningBidAdapter.js +1 -1
  53. package/dist/epomDspBidAdapter.js +1 -0
  54. package/dist/equativBidAdapter.js +1 -1
  55. package/dist/eskimiBidAdapter.js +1 -1
  56. package/dist/euidIdSystem.js +1 -1
  57. package/dist/exadsBidAdapter.js +1 -1
  58. package/dist/excoBidAdapter.js +1 -1
  59. package/dist/feedadBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/freewheel-sspBidAdapter.js +1 -1
  62. package/dist/gmosspBidAdapter.js +1 -1
  63. package/dist/goldbachBidAdapter.js +1 -1
  64. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  65. package/dist/greenbidsBidAdapter.js +1 -1
  66. package/dist/greenbidsRtdProvider.js +1 -1
  67. package/dist/gridBidAdapter.js +1 -1
  68. package/dist/gumgumBidAdapter.js +1 -1
  69. package/dist/h12mediaBidAdapter.js +1 -1
  70. package/dist/hypelabBidAdapter.js +1 -1
  71. package/dist/id5AnalyticsAdapter.js +1 -1
  72. package/dist/id5IdSystem.js +1 -1
  73. package/dist/imdsBidAdapter.js +1 -1
  74. package/dist/improvedigitalBidAdapter.js +1 -1
  75. package/dist/inmobiBidAdapter.js +1 -1
  76. package/dist/insticatorBidAdapter.js +1 -1
  77. package/dist/intentIqAnalyticsAdapter.js +1 -1
  78. package/dist/ixBidAdapter.js +1 -1
  79. package/dist/jixieBidAdapter.js +1 -1
  80. package/dist/justpremiumBidAdapter.js +1 -1
  81. package/dist/kargoBidAdapter.js +1 -1
  82. package/dist/kimberliteBidAdapter.js +1 -1
  83. package/dist/konduitAnalyticsAdapter.js +1 -1
  84. package/dist/kueezBidAdapter.js +1 -1
  85. package/dist/lassoBidAdapter.js +1 -1
  86. package/dist/lifestreetBidAdapter.js +1 -1
  87. package/dist/liveIntentId.js +1 -1
  88. package/dist/logicadBidAdapter.js +1 -1
  89. package/dist/loglyliftBidAdapter.js +1 -1
  90. package/dist/luceadBidAdapter.js +1 -1
  91. package/dist/mabidderBidAdapter.js +1 -1
  92. package/dist/madsenseBidAdapter.js +1 -1
  93. package/dist/magniteAnalyticsAdapter.js +1 -1
  94. package/dist/malltvAnalyticsAdapter.js +1 -1
  95. package/dist/marsmediaBidAdapter.js +1 -1
  96. package/dist/mediafuseBidAdapter.js +1 -1
  97. package/dist/medianetBidAdapter.js +1 -1
  98. package/dist/medianetUtils.js +1 -1
  99. package/dist/mediasquareBidAdapter.js +1 -1
  100. package/dist/mgidBidAdapter.js +1 -1
  101. package/dist/missenaBidAdapter.js +1 -1
  102. package/dist/nextMillenniumBidAdapter.js +1 -1
  103. package/dist/nexx360BidAdapter.js +1 -1
  104. package/dist/nobidAnalyticsAdapter.js +1 -1
  105. package/dist/nobidBidAdapter.js +1 -1
  106. package/dist/nodalsAiRtdProvider.js +1 -1
  107. package/dist/not-for-prod/prebid.js +170 -168
  108. package/dist/oguryBidAdapter.js +1 -1
  109. package/dist/onetagBidAdapter.js +1 -1
  110. package/dist/ooloAnalyticsAdapter.js +1 -1
  111. package/dist/openxBidAdapter.js +1 -1
  112. package/dist/optidigitalBidAdapter.js +1 -1
  113. package/dist/orbidderBidAdapter.js +1 -1
  114. package/dist/outbrainBidAdapter.js +1 -1
  115. package/dist/pixfutureBidAdapter.js +1 -1
  116. package/dist/publinkIdSystem.js +1 -1
  117. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  118. package/dist/pubmaticBidAdapter.js +1 -1
  119. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  120. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  121. package/dist/pxyzBidAdapter.js +1 -1
  122. package/dist/quantcastBidAdapter.js +1 -1
  123. package/dist/raveltechRtdProvider.js +1 -0
  124. package/dist/readpeakBidAdapter.js +1 -1
  125. package/dist/relaidoBidAdapter.js +1 -1
  126. package/dist/retailspotBidAdapter.js +1 -1
  127. package/dist/rhythmoneBidAdapter.js +1 -1
  128. package/dist/riseUtils.js +1 -1
  129. package/dist/rubiconBidAdapter.js +1 -1
  130. package/dist/seedingAllianceBidAdapter.js +1 -1
  131. package/dist/seedtagBidAdapter.js +1 -1
  132. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  133. package/dist/sharethroughBidAdapter.js +1 -1
  134. package/dist/showheroes-bsBidAdapter.js +1 -1
  135. package/dist/smaatoBidAdapter.js +1 -1
  136. package/dist/smartadserverBidAdapter.js +1 -1
  137. package/dist/smartxBidAdapter.js +1 -1
  138. package/dist/smilewantedBidAdapter.js +1 -1
  139. package/dist/snigelBidAdapter.js +1 -1
  140. package/dist/sonobiBidAdapter.js +1 -1
  141. package/dist/sovrnBidAdapter.js +1 -1
  142. package/dist/sparteoBidAdapter.js +1 -1
  143. package/dist/sspBCBidAdapter.js +1 -1
  144. package/dist/stvBidAdapter.js +1 -1
  145. package/dist/sublimeBidAdapter.js +1 -1
  146. package/dist/taboolaBidAdapter.js +1 -1
  147. package/dist/tappxBidAdapter.js +1 -1
  148. package/dist/targetVideoBidAdapter.js +1 -1
  149. package/dist/teadsBidAdapter.js +1 -1
  150. package/dist/terceptAnalyticsAdapter.js +1 -1
  151. package/dist/themoneytizerBidAdapter.js +1 -1
  152. package/dist/trionBidAdapter.js +1 -1
  153. package/dist/tripleliftBidAdapter.js +1 -1
  154. package/dist/ttdBidAdapter.js +1 -1
  155. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  156. package/dist/uid2IdSystem.js +1 -1
  157. package/dist/underdogmediaBidAdapter.js +1 -1
  158. package/dist/undertoneBidAdapter.js +1 -1
  159. package/dist/unrulyBidAdapter.js +1 -1
  160. package/dist/vidazooUtils.js +1 -1
  161. package/dist/videobyteBidAdapter.js +1 -1
  162. package/dist/visxBidAdapter.js +1 -1
  163. package/dist/vuukleBidAdapter.js +1 -1
  164. package/dist/widespaceBidAdapter.js +1 -1
  165. package/dist/winrBidAdapter.js +1 -1
  166. package/dist/yahooAdsBidAdapter.js +1 -1
  167. package/dist/yandexBidAdapter.js +1 -1
  168. package/dist/yieldmoBidAdapter.js +1 -1
  169. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  170. package/dist/yieldoneBidAdapter.js +1 -1
  171. package/gulpfile.js +2 -1
  172. package/integrationExamples/gpt/raveltechRtdProvider_example.html +379 -0
  173. package/libraries/braveUtils/index.js +1 -1
  174. package/libraries/riseUtils/index.js +1 -1
  175. package/modules/epomDspBidAdapter.js +177 -0
  176. package/modules/epomDspBidAdapter.md +170 -0
  177. package/modules/equativBidAdapter.js +14 -3
  178. package/modules/goldbachBidAdapter.js +160 -300
  179. package/modules/raveltechRtdProvider.js +131 -0
  180. package/modules/raveltechRtdProvider.md +61 -0
  181. package/modules/seedtagBidAdapter.js +1 -0
  182. package/modules/yandexBidAdapter.js +4 -0
  183. package/modules/yieldoneBidAdapter.js +6 -0
  184. package/package.json +2 -2
  185. package/test/spec/modules/epomDspBidAdapter_spec.js +73 -0
  186. package/test/spec/modules/equativBidAdapter_spec.js +19 -1
  187. package/test/spec/modules/goldbachBidAdapter_spec.js +227 -499
  188. package/test/spec/modules/raveltechRtdProvider_spec.js +108 -0
  189. package/test/spec/modules/seedtagBidAdapter_spec.js +56 -2
  190. package/test/spec/modules/yandexBidAdapter_spec.js +6 -0
  191. package/test/spec/modules/yieldoneBidAdapter_spec.js +40 -0
@@ -0,0 +1,61 @@
1
+ # Raveltech RTD Module for Prebid.js
2
+
3
+ ## Overview
4
+
5
+ ```
6
+ Module Name: Raveltech RTD Provider
7
+ Module Type: RTD Provider
8
+ Maintainer: maintainers@raveltech.io
9
+ ```
10
+
11
+ The RavelTech RTD (Real-Time Data) module for Prebid.js enables publishers to integrate seamlessly with Ravel Technologies' privacy-focused solution, ensuring bidder requests are anonymized before reaching SSPs and DSPs. By leveraging the Ravel Privacy Bus, this module prevents the transmission of personally identifiable information (PII) in bid requests, strengthening privacy compliance and security.
12
+
13
+ ## How It Works
14
+
15
+ The module operates in two modes:
16
+ 1. **Bid URL Replacement:** The module modifies the bid request URL of the configured bidders to pass through the Ravel proxy, ensuring that all IDs are anonymized.
17
+ 2. **Bid Duplication (if `preserveOriginalBid` is enabled):** The module duplicates the original bid request, sending one request as-is and another through the Ravel proxy with anonymized IDs.
18
+
19
+ ## Configuration
20
+
21
+ To enable the Raveltech RTD module, you need to configure it with a list of bidders and specify whether to preserve the original bid request.
22
+ For the anonymization feature to work, you also need to load a javascript in the header of your HTML page:
23
+ ```html
24
+ <script src="https://cdn.rvlproxy.net/latest/zkad.js" async></script>
25
+ ```
26
+
27
+ ### Build
28
+ ```
29
+ gulp build --modules="rtdModule,raveltechRtdProvider,appnexusBidAdapter,..."
30
+ ```
31
+
32
+ > Note that the global RTD module, `rtdModule`, is a prerequisite of the raveltech RTD module.
33
+
34
+ ### Parameters
35
+
36
+ | Parameter | Type | Description |
37
+ |--------------------|--------|-------------|
38
+ | `bidders` | Array | A list of bidder codes (or their alias if an alias is used) that should have their bid requests anonymized via Ravel. |
39
+ | `preserveOriginalBid` | Boolean | If `true`, the original bid request is preserved, and an additional bid request is sent through the Ravel proxy. If `false`, the original bid request is replaced with the Ravel-protected request. |
40
+
41
+ ### Example Configuration
42
+
43
+ ```javascript
44
+ pbjs.setConfig({
45
+ realTimeData: {
46
+ dataProviders: [{
47
+ name: 'raveltech',
48
+ params: {
49
+ bidders: ['appnexus', 'rubicon'],
50
+ preserveOriginalBid: true
51
+ }
52
+ }]
53
+ }
54
+ });
55
+ ```
56
+
57
+ ## Privacy Features
58
+
59
+ The RavelTech RTD module allows publishers to implement the following privacy protections:
60
+ - Personally Identifiable Information (PII) is either removed or converted into Anonymized IDs (RIDs).
61
+ - Bid requests are routed through an anonymized proxy before reaching the SSP, ensuring IP address anonymization.
@@ -176,6 +176,7 @@ function buildBidResponse(seedtagBid) {
176
176
  seedtagBid && seedtagBid.adomain && seedtagBid.adomain.length > 0
177
177
  ? seedtagBid.adomain
178
178
  : [],
179
+ mediaType: seedtagBid.realMediaType,
179
180
  },
180
181
  };
181
182
 
@@ -55,6 +55,7 @@ const DEFAULT_CURRENCY = 'EUR';
55
55
  */
56
56
  const SUPPORTED_MEDIA_TYPES = [BANNER, NATIVE];
57
57
  const SSP_ID = 10500;
58
+ const ADAPTER_VERSION = '2.0.0';
58
59
 
59
60
  const IMAGE_ASSET_TYPES = {
60
61
  ICON: 1,
@@ -139,6 +140,7 @@ export const spec = {
139
140
  const queryParams = {
140
141
  'imp-id': impId,
141
142
  'target-ref': targetRef || ortb2?.site?.domain,
143
+ 'adapter-version': ADAPTER_VERSION,
142
144
  'ssp-id': SSP_ID,
143
145
  };
144
146
 
@@ -153,6 +155,8 @@ export const spec = {
153
155
  id: impId,
154
156
  banner: mapBanner(bidRequest),
155
157
  native: mapNative(bidRequest),
158
+ displaymanager: 'Prebid.js',
159
+ displaymanagerver: '$prebid.version$',
156
160
  };
157
161
 
158
162
  const bidfloor = getBidfloor(bidRequest);
@@ -119,6 +119,12 @@ export const spec = {
119
119
  payload.uid2id = uid2;
120
120
  }
121
121
 
122
+ // GPID
123
+ const gpid = deepAccess(bidRequest, 'ortb2Imp.ext.gpid');
124
+ if (isStr(gpid) && !isEmpty(gpid)) {
125
+ payload.gpid = gpid;
126
+ }
127
+
122
128
  return {
123
129
  method: 'GET',
124
130
  url: ENDPOINT_URL,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "9.40.0",
3
+ "version": "9.41.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.public.js",
6
6
  "exports": {
@@ -52,7 +52,7 @@
52
52
  "@wdio/cli": "^9.0.5",
53
53
  "@wdio/concise-reporter": "^8.29.0",
54
54
  "@wdio/local-runner": "^9.0.5",
55
- "@wdio/mocha-framework": "^8.29.0",
55
+ "@wdio/mocha-framework": "^9.12.6",
56
56
  "@wdio/spec-reporter": "^8.29.0",
57
57
  "ajv": "6.12.3",
58
58
  "assert": "^2.0.0",
@@ -0,0 +1,73 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from '../../../modules/epomDspBidAdapter.js';
3
+
4
+ const VALID_BID_REQUEST = {
5
+ bidder: 'epom_dsp',
6
+ params: {
7
+ endpoint: 'https://bidder.epommarket.com/bidder/v2_5/bid?key=d0b9fb9de9dfbba694dfe75294d8e45a'
8
+ },
9
+ adUnitCode: 'ad-unit-1',
10
+ sizes: [[300, 250]],
11
+ bidId: '12345'
12
+ };
13
+
14
+ const BIDDER_REQUEST = {
15
+ refererInfo: { referer: 'https://example.com' },
16
+ gdprConsent: { consentString: 'consent_string' },
17
+ uspConsent: 'usp_string'
18
+ };
19
+
20
+ describe('epomDspBidAdapter', function () {
21
+ it('should validate a correct bid request', function () {
22
+ expect(spec.isBidRequestValid(VALID_BID_REQUEST)).to.be.true;
23
+ });
24
+
25
+ it('should reject a bid request with missing endpoint', function () {
26
+ const invalidBid = { ...VALID_BID_REQUEST, params: { endpoint: '' } };
27
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
28
+ });
29
+
30
+ it('should reject a bid request with an invalid endpoint', function () {
31
+ const invalidBid = { ...VALID_BID_REQUEST, params: { endpoint: 'http://invalid.com' } };
32
+ expect(spec.isBidRequestValid(invalidBid)).to.be.false;
33
+ });
34
+
35
+ it('should build requests properly', function () {
36
+ const requests = spec.buildRequests([VALID_BID_REQUEST], BIDDER_REQUEST);
37
+ expect(requests).to.have.length(1);
38
+ expect(requests[0]).to.include.keys(['method', 'url', 'data', 'options']);
39
+ expect(requests[0].method).to.equal('POST');
40
+ expect(requests[0].url).to.equal(VALID_BID_REQUEST.params.endpoint);
41
+ expect(requests[0].data).to.include.keys(['referer', 'gdprConsent', 'uspConsent']);
42
+ });
43
+
44
+ it('should interpret response correctly', function () {
45
+ const SERVER_RESPONSE = {
46
+ body: {
47
+ bids: [
48
+ {
49
+ requestId: '12345',
50
+ cpm: 1.23,
51
+ currency: 'USD',
52
+ width: 300,
53
+ height: 250,
54
+ ad: '<div>Ad</div>',
55
+ creativeId: 'abcd1234',
56
+ ttl: 300,
57
+ netRevenue: true
58
+ }
59
+ ]
60
+ }
61
+ };
62
+
63
+ const result = spec.interpretResponse(SERVER_RESPONSE);
64
+ expect(result).to.have.length(1);
65
+ expect(result[0]).to.include.keys(['requestId', 'cpm', 'currency', 'width', 'height', 'ad', 'creativeId', 'ttl', 'netRevenue']);
66
+ expect(result[0].cpm).to.equal(1.23);
67
+ });
68
+
69
+ it('should return empty array for empty response', function () {
70
+ const result = spec.interpretResponse({ body: {} });
71
+ expect(result).to.be.an('array').that.is.empty;
72
+ });
73
+ });
@@ -1,4 +1,4 @@
1
- import { converter, spec, storage } from 'modules/equativBidAdapter.js';
1
+ import { converter, getImpIdMap, spec, storage } from 'modules/equativBidAdapter.js';
2
2
  import * as utils from '../../../src/utils.js';
3
3
 
4
4
  describe('Equativ bid adapter tests', () => {
@@ -890,6 +890,24 @@ describe('Equativ bid adapter tests', () => {
890
890
  delete response.body.seatbid;
891
891
  expect(spec.interpretResponse(response, request)).to.not.throw;
892
892
  });
893
+
894
+ it('should pass exp as ttl parameter with its value', () => {
895
+ const request = spec.buildRequests(
896
+ DEFAULT_BANNER_BID_REQUESTS,
897
+ DEFAULT_BANNER_BIDDER_REQUEST
898
+ )[0];
899
+
900
+ const response = utils.deepClone(SAMPLE_RESPONSE);
901
+ const bidId = 'abcd1234';
902
+ const impIdMap = getImpIdMap();
903
+
904
+ response.body.seatbid[0].bid[0].impid = Object.keys(impIdMap).find(key => impIdMap[key] === bidId);
905
+ response.body.seatbid[0].bid[0].exp = 120;
906
+
907
+ const result = spec.interpretResponse(response, request);
908
+
909
+ expect(result.bids[0]).to.have.property('ttl').that.eq(120);
910
+ });
893
911
  });
894
912
 
895
913
  describe('isBidRequestValid', () => {