prebid.js 9.8.0 → 9.9.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 (195) 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/appierAnalyticsAdapter.js +1 -1
  23. package/dist/appnexusBidAdapter.js +1 -1
  24. package/dist/asoBidAdapter.js +1 -1
  25. package/dist/axonixBidAdapter.js +1 -1
  26. package/dist/bidglassBidAdapter.js +1 -1
  27. package/dist/big-richmediaBidAdapter.js +1 -1
  28. package/dist/bridBidAdapter.js +1 -1
  29. package/dist/bridgewellBidAdapter.js +1 -1
  30. package/dist/brightMountainMediaBidAdapter.js +1 -1
  31. package/dist/carodaBidAdapter.js +1 -1
  32. package/dist/chtnwBidAdapter.js +1 -1
  33. package/dist/chunk-core.js +1 -1
  34. package/dist/concertBidAdapter.js +1 -1
  35. package/dist/connectadBidAdapter.js +1 -1
  36. package/dist/consumableBidAdapter.js +1 -1
  37. package/dist/conversantAnalyticsAdapter.js +1 -1
  38. package/dist/conversantBidAdapter.js +1 -1
  39. package/dist/craftBidAdapter.js +1 -1
  40. package/dist/criteoBidAdapter.js +1 -1
  41. package/dist/cwireBidAdapter.js +1 -1
  42. package/dist/dailymotionBidAdapter.js +1 -1
  43. package/dist/dependencies.json +10 -4
  44. package/dist/discoveryBidAdapter.js +1 -1
  45. package/dist/docereeAdManagerBidAdapter.js +1 -1
  46. package/dist/dspxBidAdapter.js +1 -1
  47. package/dist/dxkultureBidAdapter.js +1 -1
  48. package/dist/eclickadsBidAdapter.js +1 -0
  49. package/dist/eplanningBidAdapter.js +1 -1
  50. package/dist/euidIdSystem.js +1 -1
  51. package/dist/exadsBidAdapter.js +1 -1
  52. package/dist/feedadBidAdapter.js +1 -1
  53. package/dist/finativeBidAdapter.js +1 -1
  54. package/dist/freewheel-sspBidAdapter.js +1 -1
  55. package/dist/gmosspBidAdapter.js +1 -1
  56. package/dist/goldbachBidAdapter.js +1 -1
  57. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  58. package/dist/greenbidsRtdProvider.js +1 -1
  59. package/dist/gridBidAdapter.js +1 -1
  60. package/dist/gumgumBidAdapter.js +1 -1
  61. package/dist/h12mediaBidAdapter.js +1 -1
  62. package/dist/hypelabBidAdapter.js +1 -1
  63. package/dist/id5AnalyticsAdapter.js +1 -1
  64. package/dist/id5IdSystem.js +1 -1
  65. package/dist/imdsBidAdapter.js +1 -1
  66. package/dist/improvedigitalBidAdapter.js +1 -1
  67. package/dist/insticatorBidAdapter.js +1 -1
  68. package/dist/intentIqAnalyticsAdapter.js +1 -1
  69. package/dist/ixBidAdapter.js +1 -1
  70. package/dist/jixieBidAdapter.js +1 -1
  71. package/dist/justpremiumBidAdapter.js +1 -1
  72. package/dist/kargoBidAdapter.js +1 -1
  73. package/dist/kimberliteBidAdapter.js +1 -1
  74. package/dist/konduitAnalyticsAdapter.js +1 -1
  75. package/dist/kueezBidAdapter.js +1 -1
  76. package/dist/lassoBidAdapter.js +1 -1
  77. package/dist/lifestreetBidAdapter.js +1 -1
  78. package/dist/limelightDigitalBidAdapter.js +1 -1
  79. package/dist/liveIntentIdSystem.js +1 -1
  80. package/dist/logicadBidAdapter.js +1 -1
  81. package/dist/loglyliftBidAdapter.js +1 -1
  82. package/dist/luceadBidAdapter.js +1 -1
  83. package/dist/mabidderBidAdapter.js +1 -1
  84. package/dist/magniteAnalyticsAdapter.js +1 -1
  85. package/dist/malltvAnalyticsAdapter.js +1 -1
  86. package/dist/marsmediaBidAdapter.js +1 -1
  87. package/dist/mediafuseBidAdapter.js +1 -1
  88. package/dist/mediagoBidAdapter.js +1 -1
  89. package/dist/medianetAnalyticsAdapter.js +1 -1
  90. package/dist/medianetBidAdapter.js +1 -1
  91. package/dist/mediasquareBidAdapter.js +1 -1
  92. package/dist/mgidBidAdapter.js +1 -1
  93. package/dist/missenaBidAdapter.js +1 -1
  94. package/dist/mobianRtdProvider.js +1 -1
  95. package/dist/naveggIdSystem.js +1 -1
  96. package/dist/nexx360BidAdapter.js +1 -1
  97. package/dist/nobidAnalyticsAdapter.js +1 -1
  98. package/dist/nobidBidAdapter.js +1 -1
  99. package/dist/not-for-prod/prebid.js +162 -160
  100. package/dist/oguryBidAdapter.js +1 -1
  101. package/dist/onetagBidAdapter.js +1 -1
  102. package/dist/ooloAnalyticsAdapter.js +1 -1
  103. package/dist/openxBidAdapter.js +1 -1
  104. package/dist/optidigitalBidAdapter.js +1 -1
  105. package/dist/orbidderBidAdapter.js +1 -1
  106. package/dist/outbrainBidAdapter.js +1 -1
  107. package/dist/pixfutureBidAdapter.js +1 -1
  108. package/dist/pstudioBidAdapter.js +1 -1
  109. package/dist/publinkIdSystem.js +1 -1
  110. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  111. package/dist/pubmaticBidAdapter.js +1 -1
  112. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  113. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  114. package/dist/pxyzBidAdapter.js +1 -1
  115. package/dist/quantcastBidAdapter.js +1 -1
  116. package/dist/readpeakBidAdapter.js +1 -1
  117. package/dist/relaidoBidAdapter.js +1 -1
  118. package/dist/retailspotBidAdapter.js +1 -1
  119. package/dist/rhythmoneBidAdapter.js +1 -1
  120. package/dist/richaudienceBidAdapter.js +1 -1
  121. package/dist/riseUtils.js +1 -1
  122. package/dist/rubiconBidAdapter.js +1 -1
  123. package/dist/seedingAllianceBidAdapter.js +1 -1
  124. package/dist/seedtagBidAdapter.js +1 -1
  125. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  126. package/dist/sharethroughBidAdapter.js +1 -1
  127. package/dist/smaatoBidAdapter.js +1 -1
  128. package/dist/smartadserverBidAdapter.js +1 -1
  129. package/dist/smartxBidAdapter.js +1 -1
  130. package/dist/smilewantedBidAdapter.js +1 -1
  131. package/dist/snigelBidAdapter.js +1 -1
  132. package/dist/sonobiBidAdapter.js +1 -1
  133. package/dist/sovrnBidAdapter.js +1 -1
  134. package/dist/sspBCBidAdapter.js +1 -1
  135. package/dist/stvBidAdapter.js +1 -1
  136. package/dist/sublimeBidAdapter.js +1 -1
  137. package/dist/taboolaBidAdapter.js +1 -1
  138. package/dist/tappxBidAdapter.js +1 -1
  139. package/dist/targetVideoAdServerVideo.js +1 -0
  140. package/dist/targetVideoBidAdapter.js +1 -1
  141. package/dist/teadsBidAdapter.js +1 -1
  142. package/dist/teqblazeUtils.js +1 -1
  143. package/dist/terceptAnalyticsAdapter.js +1 -1
  144. package/dist/themoneytizerBidAdapter.js +1 -1
  145. package/dist/trionBidAdapter.js +1 -1
  146. package/dist/tripleliftBidAdapter.js +1 -1
  147. package/dist/ttdBidAdapter.js +1 -1
  148. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  149. package/dist/uid2IdSystem.js +1 -1
  150. package/dist/underdogmediaBidAdapter.js +1 -1
  151. package/dist/undertoneBidAdapter.js +1 -1
  152. package/dist/unrulyBidAdapter.js +1 -1
  153. package/dist/vidazooUtils.js +1 -1
  154. package/dist/videobyteBidAdapter.js +1 -1
  155. package/dist/visxBidAdapter.js +1 -1
  156. package/dist/vuukleBidAdapter.js +1 -1
  157. package/dist/widespaceBidAdapter.js +1 -1
  158. package/dist/winrBidAdapter.js +1 -1
  159. package/dist/yahooAdsBidAdapter.js +1 -1
  160. package/dist/yieldmoBidAdapter.js +1 -1
  161. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  162. package/libraries/teqblazeUtils/bidderUtils.js +1 -1
  163. package/modules/appnexusBidAdapter.js +1 -1
  164. package/modules/discoveryBidAdapter.js +1 -3
  165. package/modules/docereeAdManagerBidAdapter.js +14 -8
  166. package/modules/eclickadsBidAdapter.js +80 -0
  167. package/modules/eclickadsBidAdapter.md +55 -0
  168. package/modules/gumgumBidAdapter.js +6 -2
  169. package/modules/limelightDigitalBidAdapter.js +1 -1
  170. package/modules/mediagoBidAdapter.js +1 -3
  171. package/modules/mobianRtdProvider.js +12 -8
  172. package/modules/naveggIdSystem.js +62 -58
  173. package/modules/naveggIdSystem.md +8 -0
  174. package/modules/oguryBidAdapter.js +5 -2
  175. package/modules/openxBidAdapter.js +1 -6
  176. package/modules/pstudioBidAdapter.js +5 -8
  177. package/modules/pstudioBidAdapter.md +6 -4
  178. package/modules/richaudienceBidAdapter.js +8 -1
  179. package/modules/targetVideoAdServerVideo.js +96 -0
  180. package/modules/targetVideoAdServerVideo.md +26 -0
  181. package/package.json +1 -1
  182. package/src/adRendering.js +3 -0
  183. package/src/adapterManager.js +4 -0
  184. package/test/spec/modules/discoveryBidAdapter_spec.js +1 -47
  185. package/test/spec/modules/docereeAdManagerBidAdapter_spec.js +87 -9
  186. package/test/spec/modules/eclickadsBidAdapter_spec.js +214 -0
  187. package/test/spec/modules/mobianRtdProvider_spec.js +32 -15
  188. package/test/spec/modules/naveggIdSystem_spec.js +141 -31
  189. package/test/spec/modules/oguryBidAdapter_spec.js +50 -4
  190. package/test/spec/modules/openxBidAdapter_spec.js +15 -48
  191. package/test/spec/modules/pstudioBidAdapter_spec.js +5 -5
  192. package/test/spec/modules/richaudienceBidAdapter_spec.js +62 -0
  193. package/test/spec/modules/targetVideoAdServerVideo_spec.js +179 -0
  194. package/test/spec/unit/adRendering_spec.js +27 -1
  195. package/test/spec/unit/core/adapterManager_spec.js +10 -0
@@ -0,0 +1,55 @@
1
+ # Overview
2
+
3
+ Module Name: EClickAds Bid Adapter
4
+ Type: Bidder Adapter
5
+ Maintainer: vietlv14@fpt.com
6
+
7
+ # Description
8
+
9
+ This module connects to EClickAds exchange for bidding NATIVE ADS via prebid.js
10
+
11
+ # Test Parameters
12
+
13
+ ```
14
+ var adUnits = [{
15
+ code: 'test-div',
16
+ mediaTypes: {
17
+ native: {
18
+ title: {
19
+ required: true,
20
+ len: 50
21
+ },
22
+ body: {
23
+ required: true,
24
+ len: 350
25
+ },
26
+ url: {
27
+ required: true
28
+ },
29
+ image: {
30
+ required: true,
31
+ sizes : [300, 175]
32
+ },
33
+ sponsoredBy: {
34
+ required: true
35
+ }
36
+ }
37
+ },
38
+ bids: [{
39
+ bidder: 'eclickads',
40
+ params: {
41
+ zid:"7096"
42
+ }
43
+ }]
44
+ }];
45
+ ```
46
+
47
+ # Notes:
48
+
49
+ - EClickAdsBidAdapter need serveral params inside bidder config as following
50
+ - user.myvne_id
51
+ - site.orig_aid
52
+ - site.fosp_aid
53
+ - site.id
54
+ - site.orig_aid
55
+ - EClickAdsBidAdapter will set bid.adserverTargeting.hb_ad_eclickads targeting key while submitting bid to AdServer
@@ -29,13 +29,14 @@ let invalidRequestIds = {};
29
29
  let pageViewId = null;
30
30
 
31
31
  // TODO: potential 0 values for browserParams sent to ad server
32
- function _getBrowserParams(topWindowUrl) {
32
+ function _getBrowserParams(topWindowUrl, mosttopLocation) {
33
33
  const paramRegex = paramName => new RegExp(`[?#&](${paramName}=(.*?))($|&)`, 'i');
34
34
 
35
35
  let browserParams = {};
36
36
  let topWindow;
37
37
  let topScreen;
38
38
  let topUrl;
39
+ let mosttopURL
39
40
  let ggad;
40
41
  let ggdeal;
41
42
  let ns;
@@ -74,6 +75,7 @@ function _getBrowserParams(topWindowUrl) {
74
75
  topWindow = global.top;
75
76
  topScreen = topWindow.screen;
76
77
  topUrl = topWindowUrl || '';
78
+ mosttopURL = mosttopLocation || '';
77
79
  } catch (error) {
78
80
  logError(error);
79
81
  return browserParams;
@@ -85,6 +87,7 @@ function _getBrowserParams(topWindowUrl) {
85
87
  sw: topScreen.width,
86
88
  sh: topScreen.height,
87
89
  pu: stripGGParams(topUrl),
90
+ tpl: mosttopURL,
88
91
  ce: storage.cookiesAreEnabled(),
89
92
  dpr: topWindow.devicePixelRatio || 1,
90
93
  jcsi: JSON.stringify(JCSI),
@@ -304,6 +307,7 @@ function buildRequests(validBidRequests, bidderRequest) {
304
307
  const timeout = bidderRequest && bidderRequest.timeout
305
308
  const coppa = config.getConfig('coppa') === true ? 1 : 0;
306
309
  const topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page;
310
+ const mosttopLocation = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.topmostLocation
307
311
  _each(validBidRequests, bidRequest => {
308
312
  const {
309
313
  bidId,
@@ -443,7 +447,7 @@ function buildRequests(validBidRequests, bidderRequest) {
443
447
  sizes,
444
448
  url: BID_ENDPOINT,
445
449
  method: 'GET',
446
- data: Object.assign(data, _getBrowserParams(topWindowUrl))
450
+ data: Object.assign(data, _getBrowserParams(topWindowUrl, mosttopLocation))
447
451
  });
448
452
  });
449
453
  return bids;
@@ -32,7 +32,7 @@ function isBidResponseValid(bid) {
32
32
 
33
33
  export const spec = {
34
34
  code: BIDDER_CODE,
35
- aliases: ['pll', 'iionads', 'apester', 'adsyield'],
35
+ aliases: ['pll', 'iionads', 'apester', 'adsyield', 'tgm'],
36
36
  supportedMediaTypes: [BANNER, VIDEO],
37
37
 
38
38
  /**
@@ -9,7 +9,7 @@ import { getPageTitle, getPageDescription, getPageKeywords, getConnectionDownLin
9
9
  import { getDevice } from '../libraries/fpdUtils/deviceInfo.js';
10
10
  import { getBidFloor } from '../libraries/currencyUtils/floor.js';
11
11
  import { transformSizes, normalAdSize } from '../libraries/sizeUtils/tranformSize.js';
12
- import {getDM, getHC, getHLen} from '../libraries/navigatorData/navigatorData.js';
12
+ import { getHLen } from '../libraries/navigatorData/navigatorData.js';
13
13
 
14
14
  // import { config } from '../src/config.js';
15
15
  // import { isPubcidEnabled } from './pubCommonId.js';
@@ -271,8 +271,6 @@ function getParam(validBidRequests, bidderRequest) {
271
271
  },
272
272
  device: {
273
273
  nbw: getConnectionDownLink(),
274
- hc: getHC(),
275
- dm: getDM()
276
274
  }
277
275
  },
278
276
  user: {
@@ -42,7 +42,7 @@ function getBidRequestData(bidReqConfig, callback, config) {
42
42
 
43
43
  let mobianRisk = response.garm_risk || 'unknown';
44
44
 
45
- const categories = Object.keys(response)
45
+ const contentCategories = Object.keys(response)
46
46
  .filter(key => key.startsWith('garm_content_category_') && response[key])
47
47
  .map(key => key.replace('garm_content_category_', ''));
48
48
 
@@ -55,19 +55,23 @@ function getBidRequestData(bidReqConfig, callback, config) {
55
55
  .map(key => key.replace('emotion_', ''));
56
56
 
57
57
  const risk = {
58
- 'risk': mobianRisk,
59
- 'contentCategories': categories,
60
- 'sentiment': sentiment,
61
- 'emotions': emotions
58
+ risk: mobianRisk,
59
+ contentCategories: contentCategories,
60
+ sentiment: sentiment,
61
+ emotions: emotions
62
62
  };
63
63
 
64
+ deepSetValue(ortb2Site.ext, 'data.mobianRisk', mobianRisk);
65
+ deepSetValue(ortb2Site.ext, 'data.mobianContentCategories', contentCategories);
66
+ deepSetValue(ortb2Site.ext, 'data.mobianSentiment', sentiment);
67
+ deepSetValue(ortb2Site.ext, 'data.mobianEmotions', emotions);
68
+
64
69
  resolve(risk);
65
- deepSetValue(ortb2Site.ext, 'data.mobian', risk);
66
- callback()
70
+ callback();
67
71
  },
68
72
  error: function () {
69
73
  resolve({});
70
- callback()
74
+ callback();
71
75
  }
72
76
  });
73
77
  });
@@ -6,9 +6,9 @@
6
6
  */
7
7
  import { isStr, isPlainObject, logError } from '../src/utils.js';
8
8
  import { submodule } from '../src/hook.js';
9
- import { ajax } from '../src/ajax.js';
10
- import {getStorageManager} from '../src/storageManager.js';
11
- import {MODULE_TYPE_UID} from '../src/activities/modules.js';
9
+ import { ajaxBuilder } from '../src/ajax.js';
10
+ import { getStorageManager } from '../src/storageManager.js';
11
+ import { MODULE_TYPE_UID } from '../src/activities/modules.js';
12
12
 
13
13
  /**
14
14
  * @typedef {import('../modules/userId/index.js').Submodule} Submodule
@@ -19,61 +19,72 @@ const MODULE_NAME = 'naveggId';
19
19
  const OLD_NAVEGG_ID = 'nid';
20
20
  const NAVEGG_ID = 'nvggid';
21
21
  const BASE_URL = 'https://id.navegg.com/uid/';
22
- const DEFAULT_EXPIRE = 8 * 24 * 3600 * 1000;
23
- const INVALID_EXPIRE = 3600 * 1000;
24
22
 
25
23
  export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME});
26
24
 
27
- function getNaveggIdFromApi() {
28
- const callbacks = {
29
- success: response => {
30
- if (response) {
31
- try {
32
- const responseObj = JSON.parse(response);
33
- writeCookie(NAVEGG_ID, responseObj[NAVEGG_ID]);
34
- } catch (error) {
35
- logError(error);
25
+ function getIdFromAPI() {
26
+ const resp = function (callback) {
27
+ ajaxBuilder()(
28
+ BASE_URL,
29
+ response => {
30
+ if (response) {
31
+ let responseObj;
32
+ try {
33
+ responseObj = JSON.parse(response);
34
+ } catch (error) {
35
+ logError(error);
36
+ const fallbackValue = getNaveggIdFromLocalStorage() || getOldCookie();
37
+ callback(fallbackValue);
38
+ }
39
+
40
+ if (responseObj && responseObj[NAVEGG_ID]) {
41
+ callback(responseObj[NAVEGG_ID]);
42
+ } else {
43
+ const fallbackValue = getNaveggIdFromLocalStorage() || getOldCookie();
44
+ callback(fallbackValue);
45
+ }
36
46
  }
37
- }
38
- },
39
- error: error => {
40
- logError('Navegg ID fetch encountered an error', error);
41
- }
47
+ },
48
+ error => {
49
+ logError('Navegg ID fetch encountered an error', error);
50
+ const fallbackValue = getNaveggIdFromLocalStorage() || getOldCookie();
51
+ callback(fallbackValue);
52
+ },
53
+ {method: 'GET', withCredentials: false});
42
54
  };
43
- ajax(BASE_URL, callbacks, undefined, { method: 'GET', withCredentials: false });
44
- }
45
-
46
- function writeCookie(key, value) {
47
- try {
48
- if (storage.cookiesAreEnabled) {
49
- let expTime = new Date();
50
- const expires = value ? DEFAULT_EXPIRE : INVALID_EXPIRE;
51
- expTime.setTime(expTime.getTime() + expires);
52
- storage.setCookie(key, value, expTime.toUTCString(), 'none');
53
- }
54
- } catch (e) {
55
- logError(e);
56
- }
55
+ return resp;
57
56
  }
58
57
 
59
- function readnaveggIdFromLocalStorage() {
60
- return storage.localStorageIsEnabled ? storage.getDataFromLocalStorage(NAVEGG_ID) : null;
58
+ /**
59
+ * @returns {string | null}
60
+ */
61
+ function readNvgIdFromCookie() {
62
+ return storage.cookiesAreEnabled ? (storage.findSimilarCookies('nvg') ? storage.findSimilarCookies('nvg')[0] : null) : null;
61
63
  }
62
-
63
- function readnaveggIDFromCookie() {
64
- return storage.cookiesAreEnabled ? storage.getCookie(NAVEGG_ID) : null;
64
+ /**
65
+ * @returns {string | null}
66
+ */
67
+ function readNavIdFromCookie() {
68
+ return storage.cookiesAreEnabled() ? (storage.findSimilarCookies('nav') ? storage.findSimilarCookies('nav')[0] : null) : null;
65
69
  }
66
-
67
- function readoldnaveggIDFromCookie() {
68
- return storage.cookiesAreEnabled ? storage.getCookie(OLD_NAVEGG_ID) : null;
70
+ /**
71
+ * @returns {string | null}
72
+ */
73
+ function readOldNaveggIdFromCookie() {
74
+ return storage.cookiesAreEnabled() ? storage.getCookie(OLD_NAVEGG_ID) : null;
69
75
  }
70
-
71
- function readnvgIDFromCookie() {
72
- return storage.cookiesAreEnabled ? (storage.findSimilarCookies('nvg') ? storage.findSimilarCookies('nvg')[0] : null) : null;
76
+ /**
77
+ * @returns {string | null}
78
+ */
79
+ function getOldCookie() {
80
+ const oldCookie = readOldNaveggIdFromCookie() || readNvgIdFromCookie() || readNavIdFromCookie();
81
+ return oldCookie;
73
82
  }
74
-
75
- function readnavIDFromCookie() {
76
- return storage.cookiesAreEnabled ? (storage.findSimilarCookies('nav') ? storage.findSimilarCookies('nav')[0] : null) : null;
83
+ /**
84
+ * @returns {string | null}
85
+ */
86
+ function getNaveggIdFromLocalStorage() {
87
+ return storage.localStorageIsEnabled() ? storage.getDataFromLocalStorage(NAVEGG_ID) : null;
77
88
  }
78
89
 
79
90
  /** @type {Submodule} */
@@ -95,23 +106,16 @@ export const naveggIdSubmodule = {
95
106
  'naveggId': naveggIdVal.split('|')[0]
96
107
  } : undefined;
97
108
  },
109
+
98
110
  /**
99
111
  * performs action to obtain id and return a value in the callback's response argument
100
112
  * @function
101
113
  * @param {SubmoduleConfig} config
102
114
  * @return {{id: string | undefined } | undefined}
103
115
  */
104
- getId() {
105
- const naveggIdString = readnaveggIdFromLocalStorage() || readnaveggIDFromCookie() || getNaveggIdFromApi() || readoldnaveggIDFromCookie() || readnvgIDFromCookie() || readnavIDFromCookie();
106
-
107
- if (typeof naveggIdString == 'string' && naveggIdString) {
108
- try {
109
- return { id: naveggIdString };
110
- } catch (error) {
111
- logError(error);
112
- }
113
- }
114
- return undefined;
116
+ getId(config, consentData) {
117
+ const resp = getIdFromAPI()
118
+ return {callback: resp}
115
119
  },
116
120
  eids: {
117
121
  'naveggId': {
@@ -10,6 +10,11 @@ pbjs.setConfig({
10
10
  userSync: {
11
11
  userIds: [{
12
12
  name: 'naveggId',
13
+ storage: {
14
+ name : 'nvggid',
15
+ type : 'cookie&html5',
16
+ expires: 8
17
+ }
13
18
  }]
14
19
  }
15
20
  });
@@ -20,3 +25,6 @@ The below parameters apply only to the naveggID integration.
20
25
  | Param under usersync.userIds[] | Scope | Type | Description | Example |
21
26
  | --- | --- | --- | --- | --- |
22
27
  | name | Required | String | ID of the module - `"naveggId"` | `"naveggId"` |
28
+ | storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"nvggid"` |
29
+ | storage.type | Required | String | Must be "`cookie`", "`html5`" or "`cookie&html5`". This is where the results of the user ID will be stored. | `"cookie&html5"` |
30
+ | storage.expires | Required | Integer | How long (in days) the user ID information will be stored. | `8` |
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  import {BANNER} from '../src/mediaTypes.js';
4
- import {getWindowSelf, getWindowTop, isFn, logWarn} from '../src/utils.js';
4
+ import {getWindowSelf, getWindowTop, isFn, logWarn, deepAccess} from '../src/utils.js';
5
5
  import {registerBidder} from '../src/adapters/bidderFactory.js';
6
6
  import {ajax} from '../src/ajax.js';
7
7
  import {getAdUnitSizes} from '../libraries/sizeUtils/sizeUtils.js';
@@ -12,7 +12,7 @@ const DEFAULT_TIMEOUT = 1000;
12
12
  const BID_HOST = 'https://mweb-hb.presage.io/api/header-bidding-request';
13
13
  const TIMEOUT_MONITORING_HOST = 'https://ms-ads-monitoring-events.presage.io';
14
14
  const MS_COOKIE_SYNC_DOMAIN = 'https://ms-cookie-sync.presage.io';
15
- const ADAPTER_VERSION = '1.6.0';
15
+ const ADAPTER_VERSION = '1.6.1';
16
16
 
17
17
  function getClientWidth() {
18
18
  const documentElementClientWidth = window.top.document.documentElement.clientWidth
@@ -129,6 +129,8 @@ function buildRequests(validBidRequests, bidderRequest) {
129
129
  openRtbBidRequestBanner.user.ext.eids = bidRequest.userIdAsEids
130
130
  }
131
131
 
132
+ const gpid = deepAccess(bidRequest, 'ortb2Imp.ext.gpid');
133
+
132
134
  openRtbBidRequestBanner.imp.push({
133
135
  id: bidRequest.bidId,
134
136
  tagid: bidRequest.params.adUnitId,
@@ -138,6 +140,7 @@ function buildRequests(validBidRequests, bidderRequest) {
138
140
  },
139
141
  ext: {
140
142
  ...bidRequest.params,
143
+ ...(gpid && {gpid}),
141
144
  timeSpentOnPage: document.timeline && document.timeline.currentTime ? document.timeline.currentTime : 0
142
145
  }
143
146
  });
@@ -80,11 +80,6 @@ const converter = ortbConverter({
80
80
  bidResponse.meta.advertiserId = bid.ext.buyer_id;
81
81
  bidResponse.meta.brandId = bid.ext.brand_id;
82
82
  }
83
- const {ortbResponse} = context;
84
- if (ortbResponse.ext && ortbResponse.ext.paf) {
85
- bidResponse.meta.paf = Object.assign({}, ortbResponse.ext.paf);
86
- bidResponse.meta.paf.content_id = utils.deepAccess(bid, 'ext.paf.content_id');
87
- }
88
83
  return bidResponse;
89
84
  },
90
85
  response(buildResponse, bidResponses, ortbResponse, context) {
@@ -117,7 +112,7 @@ const converter = ortbConverter({
117
112
  paapi: fledgeAuctionConfigs,
118
113
  }
119
114
  } else {
120
- return response.bids
115
+ return response
121
116
  }
122
117
  },
123
118
  overrides: {
@@ -6,8 +6,6 @@ import {
6
6
  isNumber,
7
7
  generateUUID,
8
8
  isEmpty,
9
- isFn,
10
- isPlainObject,
11
9
  } from '../src/utils.js';
12
10
  import { getStorageManager } from '../src/storageManager.js';
13
11
 
@@ -59,7 +57,7 @@ export const spec = {
59
57
 
60
58
  isBidRequestValid: function (bid) {
61
59
  const params = bid.params || {};
62
- return !!params.pubid && !!params.floorPrice && isVideoRequestValid(bid);
60
+ return !!params.pubid && !!params.adtagid && isVideoRequestValid(bid);
63
61
  },
64
62
 
65
63
  buildRequests: function (validBidRequests, bidderRequest) {
@@ -145,7 +143,7 @@ function buildRequestData(bid, bidderRequest) {
145
143
 
146
144
  function buildBaseObject(bid, bidderRequest) {
147
145
  const firstPartyData = prepareFirstPartyData(bidderRequest.ortb2);
148
- const { pubid, bcat, badv, bapp } = bid.params;
146
+ const { pubid, adtagid, bcat, badv, bapp } = bid.params;
149
147
  const { userId } = bid;
150
148
  const uid2Token = userId?.uid2?.id;
151
149
 
@@ -168,8 +166,7 @@ function buildBaseObject(bid, bidderRequest) {
168
166
  return {
169
167
  id: bid.bidId,
170
168
  pubid,
171
- floor_price: getBidFloor(bid),
172
- adtagid: bid.adUnitCode,
169
+ adtagid: adtagid,
173
170
  ...(bcat && { bcat }),
174
171
  ...(badv && { badv }),
175
172
  ...(bapp && { bapp }),
@@ -417,7 +414,7 @@ function validateSizes(sizes) {
417
414
  );
418
415
  }
419
416
 
420
- function getBidFloor(bid) {
417
+ /* function getBidFloor(bid) {
421
418
  if (!isFn(bid.getFloor)) {
422
419
  return bid.params.floorPrice ? bid.params.floorPrice : null;
423
420
  }
@@ -431,6 +428,6 @@ function getBidFloor(bid) {
431
428
  return floor.floor;
432
429
  }
433
430
  return null;
434
- }
431
+ } */
435
432
 
436
433
  registerBidder(spec);
@@ -31,7 +31,8 @@ var adUnits = [
31
31
  params: {
32
32
  // id of test publisher
33
33
  pubid: '22430f9d-9610-432c-aabe-6134256f11af',
34
- floorPrice: 1.25,
34
+ // id of test adtag id
35
+ adtagid: '6f3173b9-5623-4a4f-8c62-2b1d24ceb4e6',
35
36
  },
36
37
  },
37
38
  ],
@@ -53,7 +54,8 @@ var adUnits = [
53
54
  params: {
54
55
  // id of test publisher
55
56
  pubid: '22430f9d-9610-432c-aabe-6134256f11af',
56
- floorPrice: 1.25,
57
+ // id of test adtag id
58
+ adtagid: '097c601f-ad09-495b-b70b-d9cf6f1edbc1',
57
59
  },
58
60
  },
59
61
  ],
@@ -79,7 +81,7 @@ var adUnits = [
79
81
  bidder: 'pstudio',
80
82
  params: {
81
83
  pubid: '22430f9d-9610-432c-aabe-6134256f11af', // required
82
- floorPrice: 1.15, // required
84
+ adtagid: 'b9be4c35-3c12-4fa9-96ba-34b90276208c', // required
83
85
  bcat: ['IAB1-1', 'IAB1-3'], // optional
84
86
  badv: ['nike.com'], // optional
85
87
  bapp: ['com.foo.mygame'], // optional
@@ -121,7 +123,7 @@ var videoAdUnits = [
121
123
  bidder: 'pstudio',
122
124
  params: {
123
125
  pubid: '22430f9d-9610-432c-aabe-6134256f11af',
124
- floorPrice: 1.25,
126
+ adtagid: '46e348cf-b79d-43e5-81bc-5954cdf15d7e',
125
127
  badv: ['adidas.com'],
126
128
  },
127
129
  },
@@ -55,7 +55,9 @@ export const spec = {
55
55
  cpuc: (typeof window.navigator != 'undefined' ? window.navigator.hardwareConcurrency : null),
56
56
  kws: getAllOrtbKeywords(bidderRequest.ortb2, bid.params.keywords).join(','),
57
57
  schain: bid.schain,
58
- gpid: raiSetPbAdSlot(bid)
58
+ gpid: raiSetPbAdSlot(bid),
59
+ dsa: setDSA(bid),
60
+ userData: deepAccess(bid, 'ortb2.user.data')
59
61
  };
60
62
 
61
63
  REFERER = (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null)
@@ -373,3 +375,8 @@ function raiGetTimeoutURL(data) {
373
375
  }
374
376
  return url
375
377
  }
378
+
379
+ function setDSA(bid) {
380
+ let dsa = bid?.ortb2?.regs?.ext?.dsa ? bid?.ortb2?.regs?.ext?.dsa : null;
381
+ return dsa;
382
+ }
@@ -0,0 +1,96 @@
1
+ import { registerVideoSupport } from '../src/adServerManager.js';
2
+ import { targeting } from '../src/targeting.js';
3
+ import { buildUrl, isEmpty, isPlainObject, logError, parseUrl } from '../src/utils.js';
4
+
5
+ /**
6
+ * Merge all the bid data and publisher-supplied options into a single URL, and then return it.
7
+ * @param {Object} options - The options object.
8
+ * @param {Object} options.params - params property.
9
+ * @param {string} options.params.iu - Required iu property.
10
+ * @param {Object} options.adUnit - adUnit property.
11
+ * @param {Object} [options.bid] - Optional bid property.
12
+ * @returns {string|undefined} The generated URL (if neither bid nor adUnit property is provided the generated string is undefined).
13
+ */
14
+ export function buildVideoUrl(options) {
15
+ if (!options.params || !options.params?.iu) {
16
+ logError('buildVideoUrl: Missing required properties.');
17
+ return;
18
+ }
19
+
20
+ if (!isPlainObject(options.adUnit) && !isPlainObject(options.bid)) {
21
+ logError('buildVideoUrl: Requires either \'adUnit\' or \'bid\' options value');
22
+ return;
23
+ }
24
+
25
+ const isURL = /^(https?:\/\/)/i;
26
+ const defaultParameters = {
27
+ autoplay: '[autoplay]',
28
+ mute: '[vpmute]',
29
+ page_url: '[page_url]',
30
+ cachebuster: '[timestamp]',
31
+ consent: '[consent]',
32
+ }
33
+
34
+ const adUnit = options.adUnit;
35
+ const bid = options.bid || targeting.getWinningBids(adUnit.code)[0];
36
+ const allTargetingData = getAllTargetingData(options);
37
+ const custParams = options.params.cust_params;
38
+ let iu = options.params.iu;
39
+
40
+ if (isURL.test(iu)) {
41
+ const urlComponents = parseUrl(iu, {noDecodeWholeURL: true});
42
+
43
+ for (const [key, value] of Object.entries({...allTargetingData, ...bid.adserverTargeting, ...defaultParameters})) {
44
+ if (!urlComponents.search.hasOwnProperty(key)) {
45
+ urlComponents.search[key] = value;
46
+ }
47
+ }
48
+
49
+ if (urlComponents.search.cust_params) {
50
+ for (const [key, value] of Object.entries(custParams)) {
51
+ if (!urlComponents.search.cust_params.includes(key)) {
52
+ urlComponents.search.cust_params += '%26' + key + '%3D' + value;
53
+ }
54
+ }
55
+ }
56
+
57
+ if (!isEmpty(custParams) && !urlComponents.search.cust_params) {
58
+ urlComponents.search.cust_params = Object.entries(custParams).map(([key, value]) => key + '%3D' + value).join('%26');
59
+ }
60
+
61
+ return buildUrl(urlComponents);
62
+ }
63
+
64
+ const search = {
65
+ iu,
66
+ ...defaultParameters,
67
+ ...allTargetingData,
68
+ ...bid.adserverTargeting,
69
+ };
70
+
71
+ if (!isEmpty(custParams)) {
72
+ search.cust_params = Object.entries(custParams).map(([key, value]) => key + '%3D' + value).join('%26');
73
+ }
74
+
75
+ return buildUrl({
76
+ protocol: 'https',
77
+ host: 'vid.tvserve.io',
78
+ pathname: '/ads/bid',
79
+ search
80
+ });
81
+ }
82
+
83
+ function getAllTargetingData(options) {
84
+ let allTargetingData = {};
85
+ const adUnit = options && options.adUnit;
86
+ if (adUnit) {
87
+ let allTargeting = targeting.getAllTargeting(adUnit.code);
88
+ allTargetingData = allTargeting ? allTargeting[adUnit.code] : {};
89
+ }
90
+
91
+ return allTargetingData;
92
+ }
93
+
94
+ registerVideoSupport('targetVideo', {
95
+ buildVideoUrl,
96
+ });
@@ -0,0 +1,26 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: Target Video Ad Server Video
5
+ Module Type: Ad Server Video
6
+ Maintainer: danijel.ristic@target-video.com
7
+ ```
8
+
9
+ # Description
10
+
11
+ Ad Server Video for target-video.com. Contact danijel.ristic@target-video.com for information.
12
+
13
+ # Integration
14
+
15
+ The helper function takes the form:
16
+
17
+ pbjs.adServers.targetVideo.buildVideoUrl(options)
18
+
19
+ Where:
20
+
21
+ * **`options`:** configuration object:
22
+ * **`params`:**
23
+ * **`iu`:** required property used to construct valid VAST tag URL
24
+ * **`adUnit`:** ad unit that is being filled
25
+ * **`bid` [optional]:** if you override the hardcoded `pbjs.adServers.dfp.buildVideoUrl(...)` logic that picks the first bid you *must* pass in the `bid` object you select
26
+ * **`url`:** VAST tag URL, similar to the value returned by `pbjs.adServers.dfp.buildVideoUrl(...)`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "9.8.0",
3
+ "version": "9.9.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.public.js",
6
6
  "exports": {
@@ -18,6 +18,7 @@ import {getCreativeRenderer} from './creativeRenderers.js';
18
18
  import {hook} from './hook.js';
19
19
  import {fireNativeTrackers} from './native.js';
20
20
  import {GreedyPromise} from './utils/promise.js';
21
+ import adapterManager from './adapterManager.js';
21
22
 
22
23
  const { AD_RENDER_FAILED, AD_RENDER_SUCCEEDED, STALE_RENDER, BID_WON } = EVENTS;
23
24
  const { EXCEPTION } = AD_RENDER_FAILED_REASON;
@@ -68,6 +69,8 @@ export function emitAdRenderSucceeded({ doc, bid, id }) {
68
69
  if (bid) data.bid = bid;
69
70
  if (id) data.adId = id;
70
71
 
72
+ adapterManager.callAdRenderSucceededBidder(bid.adapterCode || bid.bidder, bid);
73
+
71
74
  events.emit(AD_RENDER_SUCCEEDED, data);
72
75
  }
73
76
 
@@ -688,6 +688,10 @@ adapterManager.callBidderError = function(bidder, error, bidderRequest) {
688
688
  tryCallBidderMethod(bidder, 'onBidderError', param);
689
689
  };
690
690
 
691
+ adapterManager.callAdRenderSucceededBidder = function (bidder, bid) {
692
+ tryCallBidderMethod(bidder, 'onAdRenderSucceeded', bid);
693
+ }
694
+
691
695
  function resolveAlias(alias) {
692
696
  const seen = new Set();
693
697
  while (_aliasRegistry.hasOwnProperty(alias) && !seen.has(alias)) {