prebid.js 8.0.0 → 8.1.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 (176) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/adqueryBidAdapter.js +1 -1
  7. package/dist/adrelevantisBidAdapter.js +1 -1
  8. package/dist/adtrgtmeBidAdapter.js +1 -1
  9. package/dist/adxcgBidAdapter.js +1 -1
  10. package/dist/adyoulikeBidAdapter.js +1 -1
  11. package/dist/ajaBidAdapter.js +1 -1
  12. package/dist/amxBidAdapter.js +1 -1
  13. package/dist/amxIdSystem.js +1 -1
  14. package/dist/appierAnalyticsAdapter.js +1 -1
  15. package/dist/appnexusBidAdapter.js +1 -1
  16. package/dist/asoBidAdapter.js +1 -1
  17. package/dist/axonixBidAdapter.js +1 -1
  18. package/dist/bedigitechBidAdapter.js +1 -1
  19. package/dist/beopBidAdapter.js +1 -1
  20. package/dist/bidglassBidAdapter.js +1 -1
  21. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  22. package/dist/big-richmediaBidAdapter.js +1 -1
  23. package/dist/bridgewellBidAdapter.js +1 -1
  24. package/dist/brightMountainMediaBidAdapter.js +1 -1
  25. package/dist/carodaBidAdapter.js +1 -1
  26. package/dist/chtnwBidAdapter.js +1 -1
  27. package/dist/colossussspBidAdapter.js +1 -1
  28. package/dist/conceptxBidAdapter.js +1 -1
  29. package/dist/concertBidAdapter.js +1 -1
  30. package/dist/connectadBidAdapter.js +1 -1
  31. package/dist/consumableBidAdapter.js +1 -1
  32. package/dist/conversantAnalyticsAdapter.js +1 -1
  33. package/dist/conversantBidAdapter.js +1 -1
  34. package/dist/craftBidAdapter.js +1 -1
  35. package/dist/criteoBidAdapter.js +1 -1
  36. package/dist/cwireBidAdapter.js +1 -1
  37. package/dist/dependencies.json +3 -0
  38. package/dist/dspxBidAdapter.js +1 -1
  39. package/dist/eplanningBidAdapter.js +1 -1
  40. package/dist/euidIdSystem.js +1 -1
  41. package/dist/feedadBidAdapter.js +1 -1
  42. package/dist/finativeBidAdapter.js +1 -1
  43. package/dist/freepassBidAdapter.js +1 -0
  44. package/dist/freewheel-sspBidAdapter.js +1 -1
  45. package/dist/gmosspBidAdapter.js +1 -1
  46. package/dist/goldbachBidAdapter.js +1 -1
  47. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  48. package/dist/greenbidsRtdProvider.js +1 -1
  49. package/dist/gridBidAdapter.js +1 -1
  50. package/dist/gumgumBidAdapter.js +1 -1
  51. package/dist/h12mediaBidAdapter.js +1 -1
  52. package/dist/hypelabBidAdapter.js +1 -1
  53. package/dist/id5IdSystem.js +1 -1
  54. package/dist/imdsBidAdapter.js +1 -1
  55. package/dist/improvedigitalBidAdapter.js +1 -1
  56. package/dist/insticatorBidAdapter.js +1 -1
  57. package/dist/intentIqIdSystem.js +1 -1
  58. package/dist/ixBidAdapter.js +1 -1
  59. package/dist/justpremiumBidAdapter.js +1 -1
  60. package/dist/kargoBidAdapter.js +1 -1
  61. package/dist/kiviadsBidAdapter.js +1 -0
  62. package/dist/konduitAnalyticsAdapter.js +1 -1
  63. package/dist/kueezBidAdapter.js +1 -1
  64. package/dist/kueezRtbBidAdapter.js +1 -1
  65. package/dist/kulturemediaBidAdapter.js +1 -1
  66. package/dist/lassoBidAdapter.js +1 -1
  67. package/dist/lifestreetBidAdapter.js +1 -1
  68. package/dist/logicadBidAdapter.js +1 -1
  69. package/dist/loglyliftBidAdapter.js +1 -1
  70. package/dist/magniteAnalyticsAdapter.js +1 -1
  71. package/dist/malltvAnalyticsAdapter.js +1 -1
  72. package/dist/marsmediaBidAdapter.js +1 -1
  73. package/dist/mediafuseBidAdapter.js +1 -1
  74. package/dist/mediasquareBidAdapter.js +1 -1
  75. package/dist/mgidBidAdapter.js +1 -1
  76. package/dist/mgidXBidAdapter.js +1 -0
  77. package/dist/minutemediaBidAdapter.js +1 -1
  78. package/dist/minutemediaplusBidAdapter.js +1 -1
  79. package/dist/nexx360BidAdapter.js +1 -1
  80. package/dist/not-for-prod/prebid.js +134 -131
  81. package/dist/oguryBidAdapter.js +1 -1
  82. package/dist/onetagBidAdapter.js +1 -1
  83. package/dist/ooloAnalyticsAdapter.js +1 -1
  84. package/dist/optidigitalBidAdapter.js +1 -1
  85. package/dist/outbrainBidAdapter.js +1 -1
  86. package/dist/oxxionAnalyticsAdapter.js +1 -1
  87. package/dist/parrableIdSystem.js +1 -1
  88. package/dist/pixfutureBidAdapter.js +1 -1
  89. package/dist/prebid-core.js +1 -1
  90. package/dist/publinkIdSystem.js +1 -1
  91. package/dist/pubmaticBidAdapter.js +1 -1
  92. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  93. package/dist/pxyzBidAdapter.js +1 -1
  94. package/dist/quantcastBidAdapter.js +1 -1
  95. package/dist/readpeakBidAdapter.js +1 -1
  96. package/dist/relaidoBidAdapter.js +1 -1
  97. package/dist/retailspotBidAdapter.js +1 -1
  98. package/dist/rhythmoneBidAdapter.js +1 -1
  99. package/dist/riseBidAdapter.js +1 -1
  100. package/dist/rtbhouseBidAdapter.js +1 -1
  101. package/dist/rubiconBidAdapter.js +1 -1
  102. package/dist/seedingAllianceBidAdapter.js +1 -1
  103. package/dist/seedtagBidAdapter.js +1 -1
  104. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  105. package/dist/sharethroughBidAdapter.js +1 -1
  106. package/dist/shinezBidAdapter.js +1 -1
  107. package/dist/smaatoBidAdapter.js +1 -1
  108. package/dist/smartadserverBidAdapter.js +1 -1
  109. package/dist/smartxBidAdapter.js +1 -1
  110. package/dist/smilewantedBidAdapter.js +1 -1
  111. package/dist/sonobiBidAdapter.js +1 -1
  112. package/dist/sovrnAnalyticsAdapter.js +1 -1
  113. package/dist/sovrnBidAdapter.js +1 -1
  114. package/dist/sspBCBidAdapter.js +1 -1
  115. package/dist/stvBidAdapter.js +1 -1
  116. package/dist/sublimeBidAdapter.js +1 -1
  117. package/dist/targetVideoBidAdapter.js +1 -1
  118. package/dist/teadsBidAdapter.js +1 -1
  119. package/dist/trionBidAdapter.js +1 -1
  120. package/dist/tripleliftBidAdapter.js +1 -1
  121. package/dist/ttdBidAdapter.js +1 -1
  122. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  123. package/dist/uid2IdSystem.js +1 -1
  124. package/dist/underdogmediaBidAdapter.js +1 -1
  125. package/dist/undertoneBidAdapter.js +1 -1
  126. package/dist/vidazooBidAdapter.js +1 -1
  127. package/dist/videobyteBidAdapter.js +1 -1
  128. package/dist/visxBidAdapter.js +1 -1
  129. package/dist/vuukleBidAdapter.js +1 -1
  130. package/dist/widespaceBidAdapter.js +1 -1
  131. package/dist/winrBidAdapter.js +1 -1
  132. package/dist/yahoosspBidAdapter.js +1 -1
  133. package/dist/yieldmoBidAdapter.js +1 -1
  134. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  135. package/modules/amxBidAdapter.js +11 -12
  136. package/modules/bedigitechBidAdapter.js +15 -12
  137. package/modules/bedigitechBidAdapter.md +2 -2
  138. package/modules/beopBidAdapter.js +0 -4
  139. package/modules/bidwatchAnalyticsAdapter.js +33 -5
  140. package/modules/colossussspBidAdapter.js +9 -0
  141. package/modules/conceptxBidAdapter.js +6 -3
  142. package/modules/freepassBidAdapter.js +98 -0
  143. package/modules/freepassBidAdapter.md +31 -0
  144. package/modules/freepassIdSystem.md +1 -1
  145. package/modules/greenbidsAnalyticsAdapter.js +7 -13
  146. package/modules/gridBidAdapter.js +3 -4
  147. package/modules/intentIqIdSystem.js +5 -4
  148. package/modules/ixBidAdapter.js +284 -55
  149. package/modules/kiviadsBidAdapter.js +212 -0
  150. package/modules/kiviadsBidAdapter.md +79 -0
  151. package/modules/mgidXBidAdapter.js +263 -0
  152. package/modules/mgidXBidAdapter.md +79 -0
  153. package/modules/oxxionAnalyticsAdapter.js +33 -5
  154. package/modules/pubmaticBidAdapter.js +18 -2
  155. package/modules/rtbhouseBidAdapter.js +9 -2
  156. package/modules/rtbhouseBidAdapter.md +27 -8
  157. package/modules/rubiconBidAdapter.js +13 -1
  158. package/modules/sharethroughBidAdapter.js +14 -0
  159. package/modules/sonobiBidAdapter.js +4 -7
  160. package/package.json +1 -1
  161. package/test/spec/modules/amxBidAdapter_spec.js +6 -3
  162. package/test/spec/modules/bedigitechBidAdapter_spec.js +25 -36
  163. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +21 -1
  164. package/test/spec/modules/colossussspBidAdapter_spec.js +29 -0
  165. package/test/spec/modules/freepassBidAdapter_spec.js +161 -0
  166. package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +0 -15
  167. package/test/spec/modules/gridBidAdapter_spec.js +29 -28
  168. package/test/spec/modules/ixBidAdapter_spec.js +745 -3
  169. package/test/spec/modules/kiviadsBidAdapter_spec.js +404 -0
  170. package/test/spec/modules/mgidXBidAdapter_spec.js +426 -0
  171. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +21 -2
  172. package/test/spec/modules/pubmaticBidAdapter_spec.js +25 -0
  173. package/test/spec/modules/rtbhouseBidAdapter_spec.js +35 -0
  174. package/test/spec/modules/rubiconBidAdapter_spec.js +41 -0
  175. package/test/spec/modules/sharethroughBidAdapter_spec.js +75 -0
  176. package/test/spec/modules/sonobiBidAdapter_spec.js +15 -15
@@ -1,23 +1,27 @@
1
1
  import {BANNER, NATIVE} from '../src/mediaTypes.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
- import { _each, isArray } from '../src/utils.js';
3
+ import {_each, isArray} from '../src/utils.js';
4
4
 
5
5
  const BEDIGITECH_CODE = 'bedigitech';
6
- const BEDIGITECH_ENDPOINT = 'https://bedigitalhb.s3.amazonaws.com/hb.js';
6
+ const BEDIGITECH_ENDPOINT = 'https://bid.bedigitech.com/bid/pub_bid.php';
7
7
  const BEDIGITECH_REQUEST_METHOD = 'GET';
8
8
  const BEDIGITECH_CURRENCY = 'USD';
9
-
10
- function interpretResponse(placementResponse, bidRequest, bids) {
9
+ let requestId = '';
10
+ function interpretResponse(placementResponse, bids) {
11
11
  const bid = {
12
12
  id: placementResponse.id,
13
- requestId: placementResponse.requestId,
13
+ requestId: requestId || placementResponse.id,
14
+ bidderCode: 'bedigitech',
14
15
  cpm: placementResponse.cpm,
15
16
  ad: decodeURIComponent(placementResponse.ad),
16
17
  width: placementResponse.width || 0,
17
18
  height: placementResponse.height || 0,
18
19
  currency: placementResponse.currency || BEDIGITECH_CURRENCY,
19
20
  ttl: placementResponse.ttl || 300,
20
- creativeId: placementResponse.creativeId || 0,
21
+ creativeId: placementResponse.crid,
22
+ requestTimestamp: placementResponse.requestTime,
23
+ timeToRespond: placementResponse.timeToRespond || 300,
24
+ netRevenue: placementResponse.netRevenue,
21
25
  meta: {
22
26
  mediaType: BANNER,
23
27
  },
@@ -29,14 +33,15 @@ export const spec = {
29
33
  code: BEDIGITECH_CODE,
30
34
  supportedMediaTypes: [BANNER, NATIVE],
31
35
  isBidRequestValid: bid => {
36
+ requestId = '';
37
+ requestId = bid.bidId
32
38
  return !!bid.params.placementId && !!bid.bidId && bid.bidder === 'bedigitech'
33
39
  },
34
40
 
35
- buildRequests: (bidRequests, bidderRequest) => {
41
+ buildRequests: (bidRequests) => {
36
42
  return bidRequests.map(bid => {
37
43
  let url = BEDIGITECH_ENDPOINT;
38
44
  const data = {'pid': bid.params.placementId};
39
-
40
45
  return {
41
46
  method: BEDIGITECH_REQUEST_METHOD,
42
47
  url,
@@ -50,15 +55,13 @@ export const spec = {
50
55
  });
51
56
  },
52
57
 
53
- interpretResponse: function(serverResponse, bidRequest) {
58
+ interpretResponse: function(serverResponse) {
54
59
  let bids = [];
55
-
56
60
  if (isArray(serverResponse.body)) {
57
61
  _each(serverResponse.body, function(placementResponse) {
58
- interpretResponse(placementResponse, bidRequest, bids);
62
+ interpretResponse(placementResponse, bids);
59
63
  });
60
64
  }
61
-
62
65
  return bids;
63
66
  },
64
67
 
@@ -4,7 +4,7 @@ Module Name: Bedigitech Bidder Adapter
4
4
 
5
5
  Module Type: Bidder Adapter
6
6
 
7
- Maintainer: yogesh@thebeglobal.com
7
+ Maintainer: prebid@bedigitech.com
8
8
 
9
9
  # Description
10
10
 
@@ -23,7 +23,7 @@ About us : https://www.bedigitech.com/
23
23
  {
24
24
  bidder: "bedigitech",
25
25
  params: {
26
- placementId: "1234"
26
+ placementId: 309
27
27
  }
28
28
  }
29
29
  ]
@@ -129,8 +129,6 @@ function buildTrackingParams(data, info, value) {
129
129
  nptnid: params.networkPartnerId,
130
130
  bid: data.bidId || data.requestId,
131
131
  sl_n: data.adUnitCode,
132
- // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
133
- aid: data.auctionId,
134
132
  se_ca: 'bid',
135
133
  se_ac: info,
136
134
  se_va: value,
@@ -158,8 +156,6 @@ function beOpRequestSlotsMaker(bid) {
158
156
  bid: getBidIdParameter('bidId', bid),
159
157
  brid: getBidIdParameter('bidderRequestId', bid),
160
158
  name: getBidIdParameter('adUnitCode', bid),
161
- // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
162
- aid: getBidIdParameter('auctionId', bid),
163
159
  tid: bid.ortb2Imp?.ext?.tid || '',
164
160
  brc: getBidIdParameter('bidRequestsCount', bid),
165
161
  bdrc: getBidIdParameter('bidderRequestCount', bid),
@@ -77,7 +77,8 @@ function cleanAuctionEnd(args) {
77
77
  }
78
78
 
79
79
  function cleanCreatives(args) {
80
- return filterAttributes(args, false);
80
+ let stringArgs = JSON.parse(dereferenceWithoutRenderer(args));
81
+ return filterAttributes(stringArgs, false);
81
82
  }
82
83
 
83
84
  function enhanceMediaType(arg) {
@@ -93,7 +94,7 @@ function enhanceMediaType(arg) {
93
94
 
94
95
  function addBidResponse(args) {
95
96
  let eventType = BID_RESPONSE;
96
- let argsCleaned = cleanCreatives(JSON.parse(JSON.stringify(args))); ;
97
+ let argsCleaned = cleanCreatives(args); ;
97
98
  if (allEvents[eventType] == undefined) { allEvents[eventType] = [] }
98
99
  allEvents[eventType].push(argsCleaned);
99
100
  }
@@ -110,7 +111,9 @@ function addTimeout(args) {
110
111
  if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
111
112
  saveEvents[eventType].push(args);
112
113
  let argsCleaned = [];
113
- let argsDereferenced = JSON.parse(JSON.stringify(args));
114
+ let argsDereferenced = {}
115
+ let stringArgs = JSON.parse(dereferenceWithoutRenderer(args));
116
+ argsDereferenced = stringArgs;
114
117
  argsDereferenced.forEach((attr) => {
115
118
  argsCleaned.push(filterAttributes(JSON.parse(JSON.stringify(attr)), false));
116
119
  });
@@ -118,17 +121,42 @@ function addTimeout(args) {
118
121
  auctionEnd[eventType].push(argsCleaned);
119
122
  }
120
123
 
124
+ export const dereferenceWithoutRenderer = function(args) {
125
+ if (args.renderer) {
126
+ let tmp = args.renderer;
127
+ delete args.renderer;
128
+ let stringified = JSON.stringify(args);
129
+ args['renderer'] = tmp;
130
+ return stringified;
131
+ }
132
+ if (args.bidsReceived) {
133
+ let tmp = {}
134
+ for (let key in args.bidsReceived) {
135
+ if (args.bidsReceived[key].renderer) {
136
+ tmp[key] = args.bidsReceived[key].renderer;
137
+ delete args.bidsReceived[key].renderer;
138
+ }
139
+ }
140
+ let stringified = JSON.stringify(args);
141
+ for (let key in tmp) {
142
+ args.bidsReceived[key].renderer = tmp[key];
143
+ }
144
+ return stringified;
145
+ }
146
+ return JSON.stringify(args);
147
+ }
148
+
121
149
  function addAuctionEnd(args) {
122
150
  let eventType = AUCTION_END;
123
151
  if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
124
152
  saveEvents[eventType].push(args);
125
- let argsCleaned = cleanAuctionEnd(JSON.parse(JSON.stringify(args)));
153
+ let argsCleaned = cleanAuctionEnd(JSON.parse(dereferenceWithoutRenderer(args)));
126
154
  if (auctionEnd[eventType] == undefined) { auctionEnd[eventType] = [] }
127
155
  auctionEnd[eventType].push(argsCleaned);
128
156
  }
129
157
 
130
158
  function handleBidWon(args) {
131
- args = enhanceMediaType(filterAttributes(JSON.parse(JSON.stringify(args)), true));
159
+ args = enhanceMediaType(filterAttributes(JSON.parse(dereferenceWithoutRenderer(args)), true));
132
160
  let increment = args['cpm'];
133
161
  if (typeof saveEvents['auctionEnd'] == 'object') {
134
162
  saveEvents['auctionEnd'].forEach((auction) => {
@@ -116,6 +116,15 @@ export const spec = {
116
116
  request.gdpr_consent = bidderRequest.gdprConsent.consentString || 'ALL';
117
117
  request.gdpr_require = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
118
118
  }
119
+
120
+ // Add GPP consent
121
+ if (bidderRequest.gppConsent) {
122
+ request.gpp = bidderRequest.gppConsent.gppString;
123
+ request.gpp_sid = bidderRequest.gppConsent.applicableSections;
124
+ } else if (bidderRequest.ortb2?.regs?.gpp) {
125
+ request.gpp = bidderRequest.ortb2.regs.gpp;
126
+ request.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
127
+ }
119
128
  }
120
129
 
121
130
  for (let i = 0; i < validBidRequests.length; i++) {
@@ -45,10 +45,13 @@ export const spec = {
45
45
  },
46
46
 
47
47
  interpretResponse: function (serverResponse, bidRequest) {
48
- const bidResponsesFromServer = serverResponse.body.bidResponses;
49
- const firstDummy = bidResponsesFromServer[0]
50
- const firstSeat = firstDummy.ads[0]
51
48
  const bidResponses = [];
49
+ const bidResponsesFromServer = serverResponse.body.bidResponses;
50
+ if (Array.isArray(bidResponsesFromServer) && bidResponsesFromServer.length === 0) {
51
+ return bidResponses
52
+ }
53
+ const firstBid = bidResponsesFromServer[0]
54
+ const firstSeat = firstBid.ads[0]
52
55
  const bidResponse = {
53
56
  requestId: firstSeat.requestId,
54
57
  cpm: firstSeat.cpm,
@@ -0,0 +1,98 @@
1
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
+ import {logMessage} from '../src/utils.js';
3
+ import {BANNER} from '../src/mediaTypes.js';
4
+ import {ortbConverter} from '../libraries/ortbConverter/converter.js'
5
+
6
+ const BIDDER_SERVICE_URL = 'https://bidding-dsp.ad-m.asia/dsp/api/bid/s/s/freepass';
7
+
8
+ const converter = ortbConverter({
9
+ context: {
10
+ netRevenue: true,
11
+ ttl: 30
12
+ }
13
+ });
14
+
15
+ function prepareUserInfo(user, freepassId) {
16
+ let userInfo = user || {};
17
+ let extendedUserInfo = userInfo.ext || {};
18
+
19
+ if (freepassId.userId) {
20
+ userInfo.id = freepassId.userId;
21
+ }
22
+
23
+ if (freepassId.commonId) {
24
+ extendedUserInfo.fuid = freepassId.commonId;
25
+ }
26
+ userInfo.ext = extendedUserInfo;
27
+
28
+ return userInfo;
29
+ }
30
+
31
+ function prepareDeviceInfo(device, freepassId) {
32
+ let deviceInfo = device || {};
33
+ let extendedDeviceInfo = deviceInfo.ext || {};
34
+
35
+ extendedDeviceInfo.is_accurate_ip = 0;
36
+ if (freepassId.userIp) {
37
+ deviceInfo.ip = freepassId.userIp;
38
+ extendedDeviceInfo.is_accurate_ip = 1;
39
+ }
40
+ deviceInfo.ext = extendedDeviceInfo;
41
+
42
+ return deviceInfo;
43
+ }
44
+
45
+ export const spec = {
46
+ code: 'freepass',
47
+ supportedMediaTypes: [BANNER],
48
+
49
+ isBidRequestValid(bid) {
50
+ logMessage('Validating bid: ', bid);
51
+ return !!bid.adUnitCode;
52
+ },
53
+
54
+ buildRequests(validBidRequests, bidderRequest) {
55
+ if (validBidRequests.length === 0) {
56
+ logMessage('FreePass BidAdapter has no valid bid requests');
57
+ return [];
58
+ }
59
+
60
+ logMessage('FreePass BidAdapter is preparing bid request: ', validBidRequests);
61
+ logMessage('FreePass BidAdapter is using bidder request: ', bidderRequest);
62
+
63
+ const data = converter.toORTB({
64
+ bidderRequest: bidderRequest,
65
+ bidRequests: validBidRequests,
66
+ context: { mediaType: BANNER }
67
+ });
68
+ logMessage('FreePass BidAdapter interpreted ORTB bid request as ', data);
69
+
70
+ // Only freepassId is supported
71
+ let freepassId = (validBidRequests[0].userId && validBidRequests[0].userId.freepassId) || {};
72
+ data.user = prepareUserInfo(data.user, freepassId);
73
+ data.device = prepareDeviceInfo(data.device, freepassId);
74
+
75
+ data.test = validBidRequests[0].test || 0;
76
+
77
+ logMessage('FreePass BidAdapter augmented ORTB bid request user: ', data.user);
78
+ logMessage('FreePass BidAdapter augmented ORTB bid request device: ', data.device);
79
+
80
+ return {
81
+ method: 'POST',
82
+ url: BIDDER_SERVICE_URL,
83
+ data,
84
+ options: { withCredentials: false }
85
+ };
86
+ },
87
+
88
+ interpretResponse(serverResponse, bidRequest) {
89
+ logMessage('FreePass BidAdapter is interpreting server response: ', serverResponse);
90
+ logMessage('FreePass BidAdapter is using bid request: ', bidRequest);
91
+ const bids = converter.fromORTB({response: serverResponse.body, request: bidRequest.data}).bids;
92
+ logMessage('FreePass BidAdapter interpreted ORTB bids as ', bids);
93
+
94
+ return bids;
95
+ },
96
+ };
97
+
98
+ registerBidder(spec);
@@ -0,0 +1,31 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: FreePass Bidder Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: fp-hbidding@freebit.net
7
+ ```
8
+
9
+ # Description
10
+
11
+ Connects to FreePass service for bids. Only BANNER is currently supported.
12
+
13
+ This BidAdapter requires the FreePass IdSystem to be configured. Please contact FreePass for proper setup.
14
+
15
+ # Test Parameters
16
+ ```javascript
17
+ let adUnits = [
18
+ {
19
+ code: 'ad-banner-1', // ad slot HTML element ID
20
+ mediaTypes: {
21
+ banner: {
22
+ sizes: [[1024, 1024]]
23
+ }
24
+ },
25
+ bids: [{
26
+ bidder: 'freepass'
27
+ }]
28
+ }
29
+ ];
30
+ ```
31
+
@@ -9,7 +9,7 @@ Please contact FreePass before using this ID.
9
9
  ```
10
10
  Module Name: FreePass Id System
11
11
  Module Type: User Id System
12
- Maintainer: freepass-headerbidding@craid-inc.com
12
+ Maintainer: fp-hbidding@freebit.net
13
13
  ```
14
14
 
15
15
  ## Building Prebid with FreePass ID Support
@@ -44,10 +44,6 @@ export const greenbidsAnalyticsAdapter = Object.assign(adapter({ANALYTICS_SERVER
44
44
  logError('"options.pbuid" is required.');
45
45
  return false;
46
46
  }
47
- analyticsOptions.sampled = true;
48
- if (typeof config.options.sampling === 'number') {
49
- analyticsOptions.sampled = Math.random() < parseFloat(config.options.sampling);
50
- }
51
47
 
52
48
  analyticsOptions.pbuid = config.options.pbuid
53
49
  analyticsOptions.server = ANALYTICS_SERVER;
@@ -149,15 +145,13 @@ export const greenbidsAnalyticsAdapter = Object.assign(adapter({ANALYTICS_SERVER
149
145
  });
150
146
  },
151
147
  track({eventType, args}) {
152
- if (analyticsOptions.sampled) {
153
- switch (eventType) {
154
- case BID_TIMEOUT:
155
- this.handleBidTimeout(args);
156
- break;
157
- case AUCTION_END:
158
- this.handleAuctionEnd(args);
159
- break;
160
- }
148
+ switch (eventType) {
149
+ case BID_TIMEOUT:
150
+ this.handleBidTimeout(args);
151
+ break;
152
+ case AUCTION_END:
153
+ this.handleAuctionEnd(args);
154
+ break;
161
155
  }
162
156
  },
163
157
  getAnalyticsOptions() {
@@ -26,10 +26,9 @@ const RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js
26
26
  export const storage = getStorageManager({ bidderCode: BIDDER_CODE });
27
27
 
28
28
  const LOG_ERROR_MESS = {
29
- noAuid: 'Bid from response has no auid parameter - ',
29
+ noAdid: 'Bid from response has no adid parameter - ',
30
30
  noAdm: 'Bid from response has no adm parameter - ',
31
31
  noBid: 'Array of bid objects is empty',
32
- noPlacementCode: 'Can\'t find in requested bids the bid with auid - ',
33
32
  emptyUids: 'Uids should be not empty',
34
33
  emptySeatbid: 'Seatbid array from response has empty item',
35
34
  emptyResponse: 'Response is empty',
@@ -507,7 +506,7 @@ function _getBidFromResponse(respItem) {
507
506
  function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bidderCode) {
508
507
  if (!serverBid) return;
509
508
  let errorMessage;
510
- if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid);
509
+ if (!serverBid.adid) errorMessage = LOG_ERROR_MESS.noAdid + JSON.stringify(serverBid);
511
510
  if (!errorMessage && !serverBid.adm && !serverBid.nurl) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);
512
511
  else {
513
512
  const bidObject = bidRequest.bidsMap ? bidRequest.bidsMap[serverBid.impid] : bidRequest.bidObject;
@@ -518,7 +517,7 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
518
517
  cpm: serverBid.price,
519
518
  width: serverBid.w,
520
519
  height: serverBid.h,
521
- creativeId: serverBid.auid, // bid.bidId
520
+ creativeId: serverBid.adid,
522
521
  currency: 'USD',
523
522
  netRevenue: true,
524
523
  ttl: TIME_TO_LIVE,
@@ -8,8 +8,8 @@
8
8
  import { logError, logInfo } from '../src/utils.js';
9
9
  import { ajax } from '../src/ajax.js';
10
10
  import { submodule } from '../src/hook.js'
11
- import {getStorageManager} from '../src/storageManager.js';
12
- import {MODULE_TYPE_UID} from '../src/activities/modules.js';
11
+ import { getStorageManager } from '../src/storageManager.js';
12
+ import { MODULE_TYPE_UID } from '../src/activities/modules.js';
13
13
 
14
14
  const PCID_EXPIRY = 365;
15
15
 
@@ -124,9 +124,9 @@ export const intentIqIdSubmodule = {
124
124
 
125
125
  // Read Intent IQ 1st party id or generate it if none exists
126
126
  let firstPartyData = tryParse(readData(FIRST_PARTY_KEY));
127
- if (!firstPartyData || !firstPartyData.pcid) {
127
+ if (!firstPartyData || !firstPartyData.pcid || firstPartyData.pcidDate) {
128
128
  const firstPartyId = generateGUID();
129
- firstPartyData = { 'pcid': firstPartyId };
129
+ firstPartyData = { 'pcid': firstPartyId, 'pcidDate': Date.now() };
130
130
  storeData(FIRST_PARTY_KEY, JSON.stringify(firstPartyData));
131
131
  }
132
132
 
@@ -141,6 +141,7 @@ export const intentIqIdSubmodule = {
141
141
  url += firstPartyData.pid ? '&pid=' + encodeURIComponent(firstPartyData.pid) : '';
142
142
  url += (partnerData.cttl) ? '&cttl=' + encodeURIComponent(partnerData.cttl) : '';
143
143
  url += (partnerData.rrtt) ? '&rrtt=' + encodeURIComponent(partnerData.rrtt) : '';
144
+ url += firstPartyData.pcidDate ? '&iiqpciddate=' + encodeURIComponent(firstPartyData.pcidDate) : '';
144
145
 
145
146
  const resp = function (callback) {
146
147
  const callbacks = {