prebid.js 9.0.0 → 9.2.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 (307) hide show
  1. package/.nvmrc +1 -1
  2. package/browsers.json +3 -3
  3. package/dist/33acrossAnalyticsAdapter.js +1 -1
  4. package/dist/33acrossBidAdapter.js +1 -1
  5. package/dist/33acrossIdSystem.js +1 -1
  6. package/dist/BTBidAdapter.js +1 -1
  7. package/dist/acuityadsBidAdapter.js +1 -1
  8. package/dist/adagioAnalyticsAdapter.js +1 -1
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adagioRtdProvider.js +1 -1
  11. package/dist/adagioUtils.js +1 -0
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/admanBidAdapter.js +1 -1
  14. package/dist/adpod.js +1 -1
  15. package/dist/adprimeBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgBidAdapter.js +1 -1
  21. package/dist/adyoulikeBidAdapter.js +1 -1
  22. package/dist/agmaAnalyticsAdapter.js +1 -1
  23. package/dist/ajaBidAdapter.js +1 -1
  24. package/dist/amxBidAdapter.js +1 -1
  25. package/dist/amxIdSystem.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/appnexusUtils.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/autoplayDetection.js +1 -1
  31. package/dist/axisBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/beyondmediaBidAdapter.js +1 -1
  34. package/dist/bidglassBidAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bliinkBidAdapter.js +1 -1
  37. package/dist/boldwinBidAdapter.js +1 -1
  38. package/dist/bridBidAdapter.js +1 -1
  39. package/dist/bridgewellBidAdapter.js +1 -1
  40. package/dist/brightMountainMediaBidAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/chunk-core.js +1 -1
  44. package/dist/compassBidAdapter.js +1 -1
  45. package/dist/concertBidAdapter.js +1 -1
  46. package/dist/connectadBidAdapter.js +1 -1
  47. package/dist/consumableBidAdapter.js +1 -1
  48. package/dist/contentexchangeBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/cwireBidAdapter.js +1 -1
  54. package/dist/dailymotionBidAdapter.js +1 -1
  55. package/dist/dependencies.json +83 -4
  56. package/dist/dspxBidAdapter.js +1 -1
  57. package/dist/dxkultureBidAdapter.js +1 -1
  58. package/dist/e_volutionBidAdapter.js +1 -1
  59. package/dist/emtvBidAdapter.js +1 -1
  60. package/dist/eplanningBidAdapter.js +1 -1
  61. package/dist/euidIdSystem.js +1 -1
  62. package/dist/exadsBidAdapter.js +1 -1
  63. package/dist/feedadBidAdapter.js +1 -1
  64. package/dist/finativeBidAdapter.js +1 -1
  65. package/dist/freewheel-sspBidAdapter.js +1 -1
  66. package/dist/globalsunBidAdapter.js +1 -1
  67. package/dist/gmosspBidAdapter.js +1 -1
  68. package/dist/goldbachBidAdapter.js +1 -1
  69. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  70. package/dist/greenbidsRtdProvider.js +1 -1
  71. package/dist/gridBidAdapter.js +1 -1
  72. package/dist/gumgumBidAdapter.js +1 -1
  73. package/dist/h12mediaBidAdapter.js +1 -1
  74. package/dist/hypelabBidAdapter.js +1 -1
  75. package/dist/id5IdSystem.js +1 -1
  76. package/dist/illuminBidAdapter.js +1 -1
  77. package/dist/imdsBidAdapter.js +1 -1
  78. package/dist/improvedigitalBidAdapter.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/iqzoneBidAdapter.js +1 -1
  81. package/dist/ixBidAdapter.js +1 -1
  82. package/dist/jixieBidAdapter.js +1 -1
  83. package/dist/justpremiumBidAdapter.js +1 -1
  84. package/dist/kargoBidAdapter.js +1 -1
  85. package/dist/kimberliteBidAdapter.js +1 -1
  86. package/dist/kiviadsBidAdapter.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/krushmediaBidAdapter.js +1 -1
  89. package/dist/kueezBidAdapter.js +1 -1
  90. package/dist/kueezRtbBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/liveIntentIdSystem.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/loyalBidAdapter.js +1 -1
  97. package/dist/luceadBidAdapter.js +1 -1
  98. package/dist/lunamediahbBidAdapter.js +1 -1
  99. package/dist/magniteAnalyticsAdapter.js +1 -1
  100. package/dist/malltvAnalyticsAdapter.js +1 -1
  101. package/dist/marsmediaBidAdapter.js +1 -1
  102. package/dist/mathildeadsBidAdapter.js +1 -1
  103. package/dist/mediafuseBidAdapter.js +1 -1
  104. package/dist/mediasquareBidAdapter.js +1 -1
  105. package/dist/mgidBidAdapter.js +1 -1
  106. package/dist/mgidXBidAdapter.js +1 -1
  107. package/dist/minutemediaBidAdapter.js +1 -1
  108. package/dist/missenaBidAdapter.js +1 -1
  109. package/dist/mobfoxpbBidAdapter.js +1 -1
  110. package/dist/mobianRtdProvider.js +1 -0
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/nobidAnalyticsAdapter.js +1 -1
  113. package/dist/nobidBidAdapter.js +1 -1
  114. package/dist/not-for-prod/prebid.js +190 -186
  115. package/dist/oguryBidAdapter.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/openwebBidAdapter.js +1 -1
  119. package/dist/openxBidAdapter.js +1 -1
  120. package/dist/optidigitalBidAdapter.js +1 -1
  121. package/dist/ortbConverter.js +1 -1
  122. package/dist/outbrainBidAdapter.js +1 -1
  123. package/dist/ozoneBidAdapter.js +1 -1
  124. package/dist/paapi.js +1 -1
  125. package/dist/pgamsspBidAdapter.js +1 -1
  126. package/dist/pixfutureBidAdapter.js +1 -1
  127. package/dist/playdigoBidAdapter.js +1 -1
  128. package/dist/prebidServerBidAdapter.js +1 -1
  129. package/dist/pubCircleBidAdapter.js +1 -1
  130. package/dist/publinkIdSystem.js +1 -1
  131. package/dist/publirBidAdapter.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  135. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/qtBidAdapter.js +1 -1
  138. package/dist/quantcastBidAdapter.js +1 -1
  139. package/dist/raynRtdProvider.js +1 -1
  140. package/dist/readpeakBidAdapter.js +1 -1
  141. package/dist/relaidoBidAdapter.js +1 -1
  142. package/dist/retailspotBidAdapter.js +1 -1
  143. package/dist/rhythmoneBidAdapter.js +1 -1
  144. package/dist/richaudienceBidAdapter.js +1 -0
  145. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  146. package/dist/riseBidAdapter.js +1 -1
  147. package/dist/rubiconBidAdapter.js +1 -1
  148. package/dist/seedingAllianceBidAdapter.js +1 -1
  149. package/dist/seedtagBidAdapter.js +1 -1
  150. package/dist/setupadBidAdapter.js +1 -1
  151. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  152. package/dist/sharethroughBidAdapter.js +1 -1
  153. package/dist/shinezBidAdapter.js +1 -1
  154. package/dist/shinezRtbBidAdapter.js +1 -1
  155. package/dist/smaatoBidAdapter.js +1 -1
  156. package/dist/smartadserverBidAdapter.js +1 -1
  157. package/dist/smartxBidAdapter.js +1 -1
  158. package/dist/smartytechBidAdapter.js +1 -1
  159. package/dist/smilewantedBidAdapter.js +1 -1
  160. package/dist/sonobiBidAdapter.js +1 -1
  161. package/dist/sovrnBidAdapter.js +1 -1
  162. package/dist/sspBCBidAdapter.js +1 -1
  163. package/dist/stnBidAdapter.js +1 -1
  164. package/dist/stvBidAdapter.js +1 -1
  165. package/dist/sublimeBidAdapter.js +1 -1
  166. package/dist/taboolaBidAdapter.js +1 -1
  167. package/dist/tagorasBidAdapter.js +1 -1
  168. package/dist/targetVideoBidAdapter.js +1 -1
  169. package/dist/teadsBidAdapter.js +1 -1
  170. package/dist/teqblazeUtils.js +1 -0
  171. package/dist/themoneytizerBidAdapter.js +1 -1
  172. package/dist/topicsFpdModule.js +1 -1
  173. package/dist/trionBidAdapter.js +1 -1
  174. package/dist/tripleliftBidAdapter.js +1 -1
  175. package/dist/ttdBidAdapter.js +1 -1
  176. package/dist/twistDigitalBidAdapter.js +1 -1
  177. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  178. package/dist/uid2IdSystem.js +1 -1
  179. package/dist/underdogmediaBidAdapter.js +1 -1
  180. package/dist/undertoneBidAdapter.js +1 -1
  181. package/dist/unrulyBidAdapter.js +1 -1
  182. package/dist/vidazooBidAdapter.js +1 -1
  183. package/dist/videobyteBidAdapter.js +1 -1
  184. package/dist/visiblemeasuresBidAdapter.js +1 -1
  185. package/dist/visxBidAdapter.js +1 -1
  186. package/dist/vuukleBidAdapter.js +1 -1
  187. package/dist/widespaceBidAdapter.js +1 -1
  188. package/dist/winrBidAdapter.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yieldmoBidAdapter.js +1 -1
  191. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  192. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  193. package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
  194. package/libraries/adagioUtils/adagioUtils.js +35 -0
  195. package/libraries/appnexusUtils/anUtils.js +1 -0
  196. package/libraries/autoplayDetection/autoplay.js +8 -1
  197. package/libraries/ortbConverter/converter.js +1 -1
  198. package/libraries/teqblazeUtils/bidderUtils.js +253 -0
  199. package/modules/.submodules.json +1 -0
  200. package/modules/acuityadsBidAdapter.js +5 -203
  201. package/modules/adagioBidAdapter.js +1 -17
  202. package/modules/adagioRtdProvider.js +41 -51
  203. package/modules/adagioRtdProvider.md +1 -0
  204. package/modules/admanBidAdapter.js +31 -188
  205. package/modules/adprimeBidAdapter.js +28 -165
  206. package/modules/axisBidAdapter.js +33 -165
  207. package/modules/beyondmediaBidAdapter.js +5 -189
  208. package/modules/bliinkBidAdapter.js +3 -31
  209. package/modules/boldwinBidAdapter.js +21 -159
  210. package/modules/ceeIdSystem.js +1 -1
  211. package/modules/compassBidAdapter.js +5 -198
  212. package/modules/contentexchangeBidAdapter.js +5 -200
  213. package/modules/conversantBidAdapter.js +1 -0
  214. package/modules/dailymotionBidAdapter.js +1 -1
  215. package/modules/e_volutionBidAdapter.js +4 -186
  216. package/modules/emtvBidAdapter.js +5 -198
  217. package/modules/globalsunBidAdapter.js +5 -199
  218. package/modules/id5IdSystem.js +31 -2
  219. package/modules/id5IdSystem.md +67 -2
  220. package/modules/iqzoneBidAdapter.js +5 -224
  221. package/modules/kiviadsBidAdapter.js +5 -199
  222. package/modules/krushmediaBidAdapter.js +25 -143
  223. package/modules/loyalBidAdapter.js +4 -178
  224. package/modules/lunamediahbBidAdapter.js +5 -118
  225. package/modules/mathildeadsBidAdapter.js +5 -198
  226. package/modules/mgidXBidAdapter.js +14 -209
  227. package/modules/mobfoxpbBidAdapter.js +4 -135
  228. package/modules/mobianRtdProvider.js +52 -0
  229. package/modules/mobianRtdProvider.md +11 -0
  230. package/modules/nobidAnalyticsAdapter.js +2 -3
  231. package/modules/novatiqIdSystem.md +2 -3
  232. package/modules/ozoneBidAdapter.js +117 -58
  233. package/modules/paapi.js +2 -1
  234. package/modules/pgamsspBidAdapter.js +5 -240
  235. package/modules/playdigoBidAdapter.js +4 -186
  236. package/modules/prebidServerBidAdapter/index.js +9 -2
  237. package/modules/pubCircleBidAdapter.js +5 -218
  238. package/modules/pubmaticAnalyticsAdapter.js +21 -8
  239. package/modules/pubxaiAnalyticsAdapter.js +1 -5
  240. package/modules/qtBidAdapter.js +5 -224
  241. package/modules/raynRtdProvider.js +36 -3
  242. package/modules/richaudienceBidAdapter.js +375 -0
  243. package/modules/richaudienceBidAdapter.md +1 -1
  244. package/modules/seedtagBidAdapter.js +1 -0
  245. package/modules/setupadBidAdapter.js +76 -153
  246. package/modules/setupadBidAdapter.md +1 -1
  247. package/modules/smaatoBidAdapter.js +17 -6
  248. package/modules/smartytechBidAdapter.js +7 -2
  249. package/modules/topicsFpdModule.js +1 -1
  250. package/modules/uid2IdSystem.js +0 -1
  251. package/modules/uid2IdSystem_shared.js +0 -1
  252. package/modules/visiblemeasuresBidAdapter.js +5 -199
  253. package/modules/zeta_global_sspAnalyticsAdapter.js +8 -4
  254. package/package.json +1 -1
  255. package/src/auction.js +5 -63
  256. package/src/utils/focusTimeout.js +41 -0
  257. package/src/utils/ttlCollection.js +2 -1
  258. package/src/utils.js +42 -0
  259. package/src/videoCache.js +72 -0
  260. package/test/mocks/videoCacheStub.js +1 -1
  261. package/test/spec/auctionmanager_spec.js +16 -1
  262. package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
  263. package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
  264. package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
  265. package/test/spec/modules/admanBidAdapter_spec.js +370 -247
  266. package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
  267. package/test/spec/modules/axisBidAdapter_spec.js +78 -14
  268. package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
  269. package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
  270. package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
  271. package/test/spec/modules/compassBidAdapter_spec.js +130 -16
  272. package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
  273. package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
  274. package/test/spec/modules/dailymotionBidAdapter_spec.js +3 -3
  275. package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
  276. package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
  277. package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
  278. package/test/spec/modules/id5IdSystem_spec.js +79 -3
  279. package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
  280. package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
  281. package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
  282. package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
  283. package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
  284. package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
  285. package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
  286. package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
  287. package/test/spec/modules/mobianRtdProvider_spec.js +107 -0
  288. package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
  289. package/test/spec/modules/paapi_spec.js +5 -5
  290. package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
  291. package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
  292. package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
  293. package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
  294. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
  295. package/test/spec/modules/qtBidAdapter_spec.js +15 -3
  296. package/test/spec/modules/raynRtdProvider_spec.js +25 -0
  297. package/test/spec/modules/richaudienceBidAdapter_spec.js +1304 -0
  298. package/test/spec/modules/seedtagBidAdapter_spec.js +2 -0
  299. package/test/spec/modules/setupadBidAdapter_spec.js +139 -97
  300. package/test/spec/modules/smaatoBidAdapter_spec.js +27 -0
  301. package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
  302. package/test/spec/modules/topicsFpdModule_spec.js +43 -59
  303. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
  304. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +4 -0
  305. package/test/spec/ortbConverter/converter_spec.js +7 -3
  306. package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
  307. package/test/spec/videoCache_spec.js +56 -53
@@ -1,238 +1,19 @@
1
- import { logMessage, deepAccess } from '../src/utils.js';
2
- import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
3
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
5
- import { config } from '../src/config.js';
3
+ import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
6
4
 
7
5
  const BIDDER_CODE = 'qt';
8
6
  const AD_URL = 'https://endpoint1.qt.io/pbjs';
9
7
  const SYNC_URL = 'https://cs.qt.io';
10
8
 
11
- function isBidResponseValid(bid) {
12
- if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
13
- return false;
14
- }
15
-
16
- switch (bid.mediaType) {
17
- case BANNER:
18
- return Boolean(bid.width && bid.height && bid.ad);
19
- case VIDEO:
20
- return Boolean(bid.vastUrl || bid.vastXml);
21
- case NATIVE:
22
- return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
23
- default:
24
- return false;
25
- }
26
- }
27
-
28
- function getPlacementReqData(bid) {
29
- const { params, bidId, mediaTypes, transactionId, userIdAsEids } = bid;
30
- const schain = bid.schain || {};
31
- const { placementId, endpointId } = params;
32
- const bidfloor = getBidFloor(bid);
33
-
34
- const placement = {
35
- bidId,
36
- schain,
37
- bidfloor
38
- };
39
-
40
- if (placementId) {
41
- placement.placementId = placementId;
42
- placement.type = 'publisher';
43
- } else if (endpointId) {
44
- placement.endpointId = endpointId;
45
- placement.type = 'network';
46
- }
47
-
48
- if (mediaTypes && mediaTypes[BANNER]) {
49
- placement.adFormat = BANNER;
50
- placement.sizes = mediaTypes[BANNER].sizes;
51
- } else if (mediaTypes && mediaTypes[VIDEO]) {
52
- placement.adFormat = VIDEO;
53
- placement.playerSize = mediaTypes[VIDEO].playerSize;
54
- placement.minduration = mediaTypes[VIDEO].minduration;
55
- placement.maxduration = mediaTypes[VIDEO].maxduration;
56
- placement.mimes = mediaTypes[VIDEO].mimes;
57
- placement.protocols = mediaTypes[VIDEO].protocols;
58
- placement.startdelay = mediaTypes[VIDEO].startdelay;
59
- placement.plcmt = mediaTypes[VIDEO].plcmt;
60
- placement.skip = mediaTypes[VIDEO].skip;
61
- placement.skipafter = mediaTypes[VIDEO].skipafter;
62
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
63
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
64
- placement.delivery = mediaTypes[VIDEO].delivery;
65
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
66
- placement.api = mediaTypes[VIDEO].api;
67
- placement.linearity = mediaTypes[VIDEO].linearity;
68
- } else if (mediaTypes && mediaTypes[NATIVE]) {
69
- placement.native = mediaTypes[NATIVE];
70
- placement.adFormat = NATIVE;
71
- }
72
-
73
- if (transactionId) {
74
- placement.ext = placement.ext || {};
75
- placement.ext.tid = transactionId;
76
- }
77
-
78
- if (userIdAsEids && userIdAsEids.length) {
79
- placement.eids = userIdAsEids;
80
- }
81
-
82
- return placement;
83
- }
84
-
85
- function getBidFloor(bid) {
86
- try {
87
- const bidFloor = bid.getFloor({
88
- currency: 'USD',
89
- mediaType: '*',
90
- size: '*',
91
- });
92
- return bidFloor.floor;
93
- } catch (err) {
94
- return 0;
95
- }
96
- }
97
-
98
9
  export const spec = {
99
10
  code: BIDDER_CODE,
100
11
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
101
12
 
102
- isBidRequestValid: (bid = {}) => {
103
- const { params, bidId, mediaTypes } = bid;
104
- let valid = Boolean(bidId && params && (params.placementId || params.endpointId));
105
-
106
- if (mediaTypes && mediaTypes[BANNER]) {
107
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
108
- } else if (mediaTypes && mediaTypes[VIDEO]) {
109
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
110
- } else if (mediaTypes && mediaTypes[NATIVE]) {
111
- valid = valid && Boolean(mediaTypes[NATIVE]);
112
- } else {
113
- valid = false;
114
- }
115
- return valid;
116
- },
117
-
118
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
119
- // convert Native ORTB definition to old-style prebid native definition
120
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
121
-
122
- let deviceWidth = 0;
123
- let deviceHeight = 0;
124
-
125
- let winLocation;
126
- try {
127
- const winTop = window.top;
128
- deviceWidth = winTop.screen.width;
129
- deviceHeight = winTop.screen.height;
130
- winLocation = winTop.location;
131
- } catch (e) {
132
- logMessage(e);
133
- winLocation = window.location;
134
- }
135
-
136
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
137
- let refferLocation;
138
- try {
139
- refferLocation = refferUrl && new URL(refferUrl);
140
- } catch (e) {
141
- logMessage(e);
142
- }
143
-
144
- let location = refferLocation || winLocation;
145
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
146
- const host = location.host;
147
- const page = location.pathname;
148
- const secure = location.protocol === 'https:' ? 1 : 0;
149
- const placements = [];
150
- const request = {
151
- deviceWidth,
152
- deviceHeight,
153
- language,
154
- secure,
155
- host,
156
- page,
157
- placements,
158
- coppa: deepAccess(bidderRequest, 'ortb2.regs.coppa') ? 1 : 0,
159
- tmax: bidderRequest.timeout
160
- };
161
-
162
- if (bidderRequest.uspConsent) {
163
- request.ccpa = bidderRequest.uspConsent;
164
- }
165
-
166
- if (bidderRequest.gdprConsent) {
167
- request.gdpr = {
168
- consentString: bidderRequest.gdprConsent.consentString
169
- };
170
- }
171
-
172
- if (bidderRequest.gppConsent) {
173
- request.gpp = bidderRequest.gppConsent.gppString;
174
- request.gpp_sid = bidderRequest.gppConsent.applicableSections;
175
- } else if (bidderRequest.ortb2?.regs?.gpp) {
176
- request.gpp = bidderRequest.ortb2.regs.gpp;
177
- request.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
178
- }
179
-
180
- const len = validBidRequests.length;
181
- for (let i = 0; i < len; i++) {
182
- const bid = validBidRequests[i];
183
- placements.push(getPlacementReqData(bid));
184
- }
185
-
186
- return {
187
- method: 'POST',
188
- url: AD_URL,
189
- data: request
190
- };
191
- },
192
-
193
- interpretResponse: (serverResponse) => {
194
- let response = [];
195
- for (let i = 0; i < serverResponse.body.length; i++) {
196
- let resItem = serverResponse.body[i];
197
- if (isBidResponseValid(resItem)) {
198
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
199
- resItem.meta = { ...resItem.meta, advertiserDomains };
200
-
201
- response.push(resItem);
202
- }
203
- }
204
- return response;
205
- },
206
-
207
- getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) => {
208
- let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
209
- let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
210
-
211
- if (gdprConsent && gdprConsent.consentString) {
212
- if (typeof gdprConsent.gdprApplies === 'boolean') {
213
- syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
214
- } else {
215
- syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
216
- }
217
- }
218
-
219
- if (uspConsent && uspConsent.consentString) {
220
- syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
221
- }
222
-
223
- if (gppConsent?.gppString && gppConsent?.applicableSections?.length) {
224
- syncUrl += '&gpp=' + gppConsent.gppString;
225
- syncUrl += '&gpp_sid=' + gppConsent.applicableSections.join(',');
226
- }
227
-
228
- const coppa = config.getConfig('coppa') ? 1 : 0;
229
- syncUrl += `&coppa=${coppa}`;
230
-
231
- return [{
232
- type: syncType,
233
- url: syncUrl
234
- }];
235
- }
13
+ isBidRequestValid: isBidRequestValid(),
14
+ buildRequests: buildRequests(AD_URL),
15
+ interpretResponse,
16
+ getUserSyncs: getUserSyncs(SYNC_URL)
236
17
  };
237
18
 
238
19
  registerBidder(spec);
@@ -14,6 +14,7 @@ import { deepAccess, deepSetValue, logError, logMessage, mergeDeep } from '../sr
14
14
  const MODULE_NAME = 'realTimeData';
15
15
  const SUBMODULE_NAME = 'rayn';
16
16
  const RAYN_TCF_ID = 1220;
17
+ const RAYN_PERSONA_TAXONOMY_ID = 103015;
17
18
  const LOG_PREFIX = 'RaynJS: ';
18
19
  export const SEGMENTS_RESOLVER = 'rayn.io';
19
20
  export const RAYN_LOCAL_STORAGE_KEY = 'rayn-segtax';
@@ -77,6 +78,32 @@ export function generateOrtbDataObject(segtax, segment, maxTier) {
77
78
  };
78
79
  }
79
80
 
81
+ /**
82
+ * Create and return ORTB2 object with segtax and personaIds
83
+ * @param {number} segtax
84
+ * @param {Array} personaIds
85
+ * @return {Array}
86
+ */
87
+ export function generatePersonaOrtbDataObject(segtax, personaIds) {
88
+ const segmentIds = [];
89
+
90
+ try {
91
+ segmentIds.push(...personaIds.map((id) => {
92
+ return { id };
93
+ }))
94
+ } catch (error) {
95
+ logError(LOG_PREFIX, error);
96
+ }
97
+
98
+ return {
99
+ name: SEGMENTS_RESOLVER,
100
+ ext: {
101
+ segtax,
102
+ },
103
+ segment: segmentIds,
104
+ };
105
+ }
106
+
80
107
  /**
81
108
  * Generates checksum
82
109
  * @param {string} url
@@ -127,8 +154,14 @@ export function setSegmentsAsBidderOrtb2(bidConfig, bidders, integrationConfig,
127
154
  deepSetValue(raynOrtb2, 'site.content.data', raynContentData);
128
155
  }
129
156
 
157
+ const raynUserData = [];
130
158
  if (integrationConfig.iabAudienceCategories.v1_1.enabled && segments[4]) {
131
- const raynUserData = [generateOrtbDataObject(4, segments[4], integrationConfig.iabAudienceCategories.v1_1.tier)];
159
+ raynUserData.push(generateOrtbDataObject(4, segments[4], integrationConfig.iabAudienceCategories.v1_1.tier));
160
+ }
161
+ if (segments[RAYN_PERSONA_TAXONOMY_ID]) {
162
+ raynUserData.push(generatePersonaOrtbDataObject(RAYN_PERSONA_TAXONOMY_ID, segments[RAYN_PERSONA_TAXONOMY_ID]));
163
+ }
164
+ if (raynUserData.length > 0) {
132
165
  deepSetValue(raynOrtb2, 'user.data', raynUserData);
133
166
  }
134
167
 
@@ -163,8 +196,8 @@ function alterBidRequests(reqBidsConfigObj, callback, config, userConsent) {
163
196
  segments[checksum] || (segments[4] &&
164
197
  integrationConfig.iabAudienceCategories.v1_1.enabled &&
165
198
  !integrationConfig.iabContentCategories.v2_2.enabled &&
166
- !integrationConfig.iabContentCategories.v3_0.enabled
167
- )
199
+ !integrationConfig.iabContentCategories.v3_0.enabled) ||
200
+ segments[RAYN_PERSONA_TAXONOMY_ID]
168
201
  )) {
169
202
  logMessage(LOG_PREFIX, `Segtax data from localStorage: ${JSON.stringify(segments)}`);
170
203
  setSegmentsAsBidderOrtb2(reqBidsConfigObj, bidders, integrationConfig, segments, checksum);
@@ -0,0 +1,375 @@
1
+ import {deepAccess, isStr, triggerPixel} from '../src/utils.js';
2
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
+ import {config} from '../src/config.js';
4
+ import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
+ import {Renderer} from '../src/Renderer.js';
6
+ import {getAllOrtbKeywords} from '../libraries/keywords/keywords.js';
7
+
8
+ const BIDDER_CODE = 'richaudience';
9
+ let REFERER = '';
10
+
11
+ export const spec = {
12
+ code: BIDDER_CODE,
13
+ gvlid: 108,
14
+ aliases: ['ra'],
15
+ supportedMediaTypes: [BANNER, VIDEO],
16
+
17
+ /***
18
+ * Determines whether or not the given bid request is valid
19
+ *
20
+ * @param {bidRequest} bid The bid params to validate.
21
+ * @returns {boolean} True if this is a valid bid, and false otherwise
22
+ */
23
+ isBidRequestValid: function (bid) {
24
+ return !!(bid.params && bid.params.pid && bid.params.supplyType);
25
+ },
26
+ /***
27
+ * Build a server request from the list of valid BidRequests
28
+ * @param {validBidRequests} is an array of the valid bids
29
+ * @param {bidderRequest} bidder request object
30
+ * @returns {ServerRequest} Info describing the request to the server
31
+ */
32
+ buildRequests: function (validBidRequests, bidderRequest) {
33
+ return validBidRequests.map(bid => {
34
+ var payload = {
35
+ bidfloor: raiGetFloor(bid, config),
36
+ ifa: bid.params.ifa,
37
+ pid: bid.params.pid,
38
+ supplyType: bid.params.supplyType,
39
+ currencyCode: config.getConfig('currency.adServerCurrency'),
40
+ auctionId: bid.auctionId,
41
+ bidId: bid.bidId,
42
+ BidRequestsCount: bid.bidRequestsCount,
43
+ bidder: bid.bidder,
44
+ bidderRequestId: bid.bidderRequestId,
45
+ tagId: bid.adUnitCode,
46
+ sizes: raiGetSizes(bid),
47
+ referer: (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null),
48
+ numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null),
49
+ transactionId: bid.ortb2Imp?.ext?.tid,
50
+ timeout: bidderRequest.timeout || 600,
51
+ user: raiSetEids(bid),
52
+ demand: raiGetDemandType(bid),
53
+ videoData: raiGetVideoInfo(bid),
54
+ scr_rsl: raiGetResolution(),
55
+ cpuc: (typeof window.navigator != 'undefined' ? window.navigator.hardwareConcurrency : null),
56
+ kws: getAllOrtbKeywords(bidderRequest.ortb2, bid.params.keywords).join(','),
57
+ schain: bid.schain,
58
+ gpid: raiSetPbAdSlot(bid)
59
+ };
60
+
61
+ REFERER = (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null)
62
+
63
+ payload.gdpr_consent = '';
64
+ payload.gdpr = false;
65
+
66
+ if (bidderRequest && bidderRequest.gdprConsent) {
67
+ if (typeof bidderRequest.gdprConsent.gdprApplies != 'undefined') {
68
+ payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
69
+ }
70
+ if (typeof bidderRequest.gdprConsent.consentString != 'undefined') {
71
+ payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
72
+ }
73
+ }
74
+
75
+ if (bidderRequest?.gppConsent) {
76
+ payload.privacy = {
77
+ gpp: bidderRequest.gppConsent.gppString,
78
+ gpp_sid: bidderRequest.gppConsent.applicableSections
79
+ }
80
+ } else if (bidderRequest?.ortb2?.regs?.gpp) {
81
+ payload.privacy = {
82
+ gpp: bidderRequest.ortb2.regs.gpp,
83
+ gpp_sid: bidderRequest.ortb2.regs.gpp_sid
84
+ }
85
+ }
86
+
87
+ var payloadString = JSON.stringify(payload);
88
+
89
+ var endpoint = 'https://shb.richaudience.com/hb/';
90
+
91
+ return {
92
+ method: 'POST',
93
+ url: endpoint,
94
+ data: payloadString,
95
+ };
96
+ });
97
+ },
98
+ /***
99
+ * Read the response from the server and build a list of bids
100
+ * @param {serverResponse} Response from the server.
101
+ * @param {bidRequest} Bid request object
102
+ * @returns {bidResponses} Array of bids which were nested inside the server
103
+ */
104
+ interpretResponse: function (serverResponse, bidRequest) {
105
+ const bidResponses = [];
106
+ // try catch
107
+ var response = serverResponse.body;
108
+ if (response) {
109
+ var bidResponse = {
110
+ requestId: JSON.parse(bidRequest.data).bidId,
111
+ cpm: response.cpm,
112
+ width: response.width,
113
+ height: response.height,
114
+ creativeId: response.creative_id,
115
+ mediaType: response.media_type,
116
+ netRevenue: response.netRevenue,
117
+ currency: response.currency,
118
+ ttl: response.ttl,
119
+ meta: response.adomain,
120
+ dealId: response.dealId
121
+ };
122
+
123
+ if (response.media_type === 'video') {
124
+ bidResponse.vastXml = response.vastXML;
125
+ try {
126
+ if (bidResponse.vastXml != null) {
127
+ if (JSON.parse(bidRequest.data).videoData.format == 'outstream' || JSON.parse(bidRequest.data).videoData.format == 'banner') {
128
+ bidResponse.renderer = Renderer.install({
129
+ id: bidRequest.bidId,
130
+ adunitcode: bidRequest.tagId,
131
+ loaded: false,
132
+ config: response.media_type,
133
+ url: 'https://cdn3.richaudience.com/prebidVideo/player.js'
134
+ });
135
+ }
136
+ bidResponse.renderer.setRender(renderer);
137
+ }
138
+ } catch (e) {
139
+ bidResponse.ad = response.adm;
140
+ }
141
+ } else {
142
+ bidResponse.ad = response.adm;
143
+ }
144
+
145
+ bidResponses.push(bidResponse);
146
+ }
147
+ return bidResponses;
148
+ },
149
+ /***
150
+ * User Syncs
151
+ *
152
+ * @param {syncOptions} Publisher prebid configuration
153
+ * @param {serverResponses} Response from the server
154
+ * @param {gdprConsent} GPDR consent object
155
+ * @returns {Array}
156
+ */
157
+ getUserSyncs: function (syncOptions, responses, gdprConsent, uspConsent, gppConsent) {
158
+ const syncs = [];
159
+
160
+ var rand = Math.floor(Math.random() * 9999999999);
161
+ var syncUrl = '';
162
+ var consent = '';
163
+ var consentGPP = '';
164
+
165
+ var raiSync = {};
166
+
167
+ raiSync = raiGetSyncInclude(config);
168
+
169
+ if (gdprConsent && typeof gdprConsent.consentString === 'string' && typeof gdprConsent.consentString != 'undefined') {
170
+ consent = `consentString=${gdprConsent.consentString}`
171
+ }
172
+
173
+ // GPP Consent
174
+ if (gppConsent?.gppString && gppConsent?.applicableSections?.length) {
175
+ consentGPP = 'gpp=' + encodeURIComponent(gppConsent.gppString);
176
+ consentGPP += '&gpp_sid=' + encodeURIComponent(gppConsent?.applicableSections?.join(','));
177
+ }
178
+
179
+ if (syncOptions.iframeEnabled && raiSync.raiIframe != 'exclude') {
180
+ syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand
181
+ if (consent != '') {
182
+ syncUrl += `&${consent}`
183
+ }
184
+ if (consentGPP != '') {
185
+ syncUrl += `&${consentGPP}`
186
+ }
187
+ syncs.push({
188
+ type: 'iframe',
189
+ url: syncUrl
190
+ });
191
+ }
192
+
193
+ if (syncOptions.pixelEnabled && REFERER != null && syncs.length == 0 && raiSync.raiImage != 'exclude') {
194
+ syncUrl = `https://sync.richaudience.com/bf7c142f4339da0278e83698a02b0854/?referrer=${REFERER}`;
195
+ if (consent != '') {
196
+ syncUrl += `&${consent}`
197
+ }
198
+ if (consentGPP != '') {
199
+ syncUrl += `&${consentGPP}`
200
+ }
201
+ syncs.push({
202
+ type: 'image',
203
+ url: syncUrl
204
+ });
205
+ }
206
+ return syncs
207
+ },
208
+
209
+ onTimeout: function (data) {
210
+ let url = raiGetTimeoutURL(data);
211
+ if (url) {
212
+ triggerPixel(url);
213
+ }
214
+ }
215
+ };
216
+
217
+ registerBidder(spec);
218
+
219
+ function raiGetSizes(bid) {
220
+ let raiNewSizes;
221
+ if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) {
222
+ raiNewSizes = bid.mediaTypes.banner.sizes
223
+ }
224
+ if (raiNewSizes != null) {
225
+ return raiNewSizes.map(size => ({
226
+ w: size[0],
227
+ h: size[1]
228
+ }));
229
+ }
230
+ }
231
+
232
+ function raiGetDemandType(bid) {
233
+ let raiFormat = 'display';
234
+ if (typeof bid.sizes != 'undefined') {
235
+ bid.sizes.forEach(function (sz) {
236
+ if ((sz[0] == '1800' && sz[1] == '1000') || (sz[0] == '1' && sz[1] == '1')) {
237
+ raiFormat = 'skin'
238
+ }
239
+ })
240
+ }
241
+ if (bid.mediaTypes != undefined) {
242
+ if (bid.mediaTypes.video != undefined) {
243
+ raiFormat = 'video';
244
+ }
245
+ }
246
+ return raiFormat;
247
+ }
248
+
249
+ function raiGetVideoInfo(bid) {
250
+ let videoData;
251
+ if (raiGetDemandType(bid) == 'video') {
252
+ videoData = {
253
+ format: bid.mediaTypes.video.context,
254
+ playerSize: bid.mediaTypes.video.playerSize,
255
+ mimes: bid.mediaTypes.video.mimes
256
+ };
257
+ } else {
258
+ videoData = {
259
+ format: 'banner'
260
+ }
261
+ }
262
+ return videoData;
263
+ }
264
+
265
+ function raiSetEids(bid) {
266
+ let eids = [];
267
+
268
+ if (bid && bid.userId) {
269
+ raiSetUserId(bid, eids, 'id5-sync.com', deepAccess(bid, `userId.id5id.uid`));
270
+ raiSetUserId(bid, eids, 'pubcommon', deepAccess(bid, `userId.pubcid`));
271
+ raiSetUserId(bid, eids, 'criteo.com', deepAccess(bid, `userId.criteoId`));
272
+ raiSetUserId(bid, eids, 'liveramp.com', deepAccess(bid, `userId.idl_env`));
273
+ raiSetUserId(bid, eids, 'liveintent.com', deepAccess(bid, `userId.lipb.lipbid`));
274
+ raiSetUserId(bid, eids, 'adserver.org', deepAccess(bid, `userId.tdid`));
275
+ }
276
+
277
+ return eids;
278
+ }
279
+
280
+ function raiSetUserId(bid, eids, source, value) {
281
+ if (isStr(value)) {
282
+ eids.push({
283
+ userId: value,
284
+ source: source
285
+ });
286
+ }
287
+ }
288
+
289
+ function renderer(bid) {
290
+ bid.renderer.push(() => {
291
+ renderAd(bid)
292
+ });
293
+ }
294
+
295
+ function renderAd(bid) {
296
+ let raOutstreamHBPassback = `${bid.vastXml}`;
297
+ let raPlayerHB = {
298
+ config: bid.params[0].player != undefined ? {
299
+ end: bid.params[0].player.end != null ? bid.params[0].player.end : 'close',
300
+ init: bid.params[0].player.init != null ? bid.params[0].player.init : 'close',
301
+ skin: bid.params[0].player.skin != null ? bid.params[0].player.skin : 'light',
302
+ } : {end: 'close', init: 'close', skin: 'light'},
303
+ pid: bid.params[0].pid,
304
+ adUnit: bid.adUnitCode
305
+ };
306
+
307
+ window.raParams(raPlayerHB, raOutstreamHBPassback, true);
308
+ }
309
+
310
+ function raiGetResolution() {
311
+ let resolution = '';
312
+ if (typeof window.screen != 'undefined') {
313
+ resolution = window.screen.width + 'x' + window.screen.height;
314
+ }
315
+ return resolution;
316
+ }
317
+
318
+ function raiSetPbAdSlot(bid) {
319
+ let pbAdSlot = '';
320
+ if (deepAccess(bid, 'ortb2Imp.ext.data.pbadslot') != null) {
321
+ pbAdSlot = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot')
322
+ }
323
+ return pbAdSlot
324
+ }
325
+
326
+ function raiGetSyncInclude(config) {
327
+ try {
328
+ let raConfig = null;
329
+ let raiSync = {};
330
+ if (config.getConfig('userSync').filterSettings != null && typeof config.getConfig('userSync').filterSettings != 'undefined') {
331
+ raConfig = config.getConfig('userSync').filterSettings
332
+ if (raConfig.iframe != null && typeof raConfig.iframe != 'undefined') {
333
+ raiSync.raiIframe = raConfig.iframe.bidders == 'richaudience' || raConfig.iframe.bidders == '*' ? raConfig.iframe.filter : 'exclude';
334
+ }
335
+ if (raConfig.image != null && typeof raConfig.image != 'undefined') {
336
+ raiSync.raiImage = raConfig.image.bidders == 'richaudience' || raConfig.image.bidders == '*' ? raConfig.image.filter : 'exclude';
337
+ }
338
+ }
339
+ return raiSync;
340
+ } catch (e) {
341
+ return null;
342
+ }
343
+ }
344
+
345
+ function raiGetFloor(bid, config) {
346
+ try {
347
+ let raiFloor;
348
+ if (bid.params.bidfloor != null) {
349
+ raiFloor = bid.params.bidfloor;
350
+ } else if (typeof bid.getFloor == 'function') {
351
+ let floorSpec = bid.getFloor({
352
+ currency: config.getConfig('floors.data.currency') != null ? config.getConfig('floors.data.currency') : 'USD',
353
+ mediaType: typeof bid.mediaTypes['banner'] == 'object' ? 'banner' : 'video',
354
+ size: '*'
355
+ })
356
+
357
+ raiFloor = floorSpec.floor;
358
+ }
359
+ return raiFloor
360
+ } catch (e) {
361
+ return 0
362
+ }
363
+ }
364
+
365
+ function raiGetTimeoutURL(data) {
366
+ let {params, timeout} = data[0]
367
+ let url = 'https://s.richaudience.com/err/?ec=6&ev=[timeout_publisher]&pla=[placement_hash]&int=PREBID&pltfm=&node=&dm=[domain]';
368
+
369
+ url = url.replace('[timeout_publisher]', timeout)
370
+ url = url.replace('[placement_hash]', params[0].pid)
371
+ if (document.location.host != null) {
372
+ url = url.replace('[domain]', document.location.host)
373
+ }
374
+ return url
375
+ }
@@ -3,7 +3,7 @@
3
3
  ```
4
4
  Module Name: Rich Audience Bidder Adapter
5
5
  Module Type: Bidder Adapter
6
- Maintainer: cert@richaudience.com
6
+ Maintainer: integrations@richaudience.com
7
7
  ```
8
8
 
9
9
  # Description
@@ -119,6 +119,7 @@ function buildBidRequest(validBidRequest) {
119
119
  const bidRequest = {
120
120
  id: validBidRequest.bidId,
121
121
  transactionId: validBidRequest.ortb2Imp?.ext?.tid,
122
+ gpid: validBidRequest.ortb2Imp?.ext?.gpid,
122
123
  sizes: validBidRequest.sizes,
123
124
  supplyTypes: mediaTypes,
124
125
  adUnitId: params.adUnitId,