prebid.js 7.48.0 → 7.50.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 (219) hide show
  1. package/README.md +3 -0
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/admixerBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adtrgtmeBidAdapter.js +1 -1
  10. package/dist/adxcgBidAdapter.js +1 -1
  11. package/dist/adyoulikeBidAdapter.js +1 -1
  12. package/dist/aidemBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/asoBidAdapter.js +1 -1
  19. package/dist/axonixBidAdapter.js +1 -1
  20. package/dist/beopBidAdapter.js +1 -1
  21. package/dist/bidglassBidAdapter.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/concertBidAdapter.js +1 -1
  28. package/dist/confiantRtdProvider.js +1 -1
  29. package/dist/connectadBidAdapter.js +1 -1
  30. package/dist/consumableBidAdapter.js +1 -1
  31. package/dist/conversantAnalyticsAdapter.js +1 -1
  32. package/dist/conversantBidAdapter.js +1 -1
  33. package/dist/craftBidAdapter.js +1 -1
  34. package/dist/criteoBidAdapter.js +1 -1
  35. package/dist/cwireBidAdapter.js +1 -1
  36. package/dist/dependencies.json +3 -0
  37. package/dist/dspxBidAdapter.js +1 -1
  38. package/dist/eplanningBidAdapter.js +1 -1
  39. package/dist/feedadBidAdapter.js +1 -1
  40. package/dist/finativeBidAdapter.js +1 -1
  41. package/dist/freewheel-sspBidAdapter.js +1 -1
  42. package/dist/glimpseBidAdapter.js +1 -1
  43. package/dist/gmosspBidAdapter.js +1 -1
  44. package/dist/goldbachBidAdapter.js +1 -1
  45. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  46. package/dist/greenbidsRtdProvider.js +1 -1
  47. package/dist/gridBidAdapter.js +1 -1
  48. package/dist/gumgumBidAdapter.js +1 -1
  49. package/dist/h12mediaBidAdapter.js +1 -1
  50. package/dist/id5IdSystem.js +1 -1
  51. package/dist/improvedigitalBidAdapter.js +1 -1
  52. package/dist/inmarBidAdapter.js +1 -1
  53. package/dist/insticatorBidAdapter.js +1 -1
  54. package/dist/ixBidAdapter.js +1 -1
  55. package/dist/justpremiumBidAdapter.js +1 -1
  56. package/dist/kargoBidAdapter.js +1 -1
  57. package/dist/konduitAnalyticsAdapter.js +1 -1
  58. package/dist/kueezBidAdapter.js +1 -1
  59. package/dist/kueezRtbBidAdapter.js +1 -1
  60. package/dist/kulturemediaBidAdapter.js +1 -1
  61. package/dist/lassoBidAdapter.js +1 -1
  62. package/dist/lifestreetBidAdapter.js +1 -1
  63. package/dist/liveIntentIdSystem.js +1 -1
  64. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  65. package/dist/logicadBidAdapter.js +1 -1
  66. package/dist/loglyliftBidAdapter.js +1 -1
  67. package/dist/magniteAnalyticsAdapter.js +1 -1
  68. package/dist/malltvAnalyticsAdapter.js +1 -1
  69. package/dist/marsmediaBidAdapter.js +1 -1
  70. package/dist/mediafuseBidAdapter.js +1 -1
  71. package/dist/mediasquareBidAdapter.js +1 -1
  72. package/dist/mgidBidAdapter.js +1 -1
  73. package/dist/minutemediaBidAdapter.js +1 -1
  74. package/dist/minutemediaplusBidAdapter.js +1 -1
  75. package/dist/nexx360BidAdapter.js +1 -1
  76. package/dist/not-for-prod/prebid.js +136 -134
  77. package/dist/oguryBidAdapter.js +1 -1
  78. package/dist/onetagBidAdapter.js +1 -1
  79. package/dist/ooloAnalyticsAdapter.js +1 -1
  80. package/dist/optidigitalBidAdapter.js +1 -1
  81. package/dist/outbrainBidAdapter.js +1 -1
  82. package/dist/parrableIdSystem.js +1 -1
  83. package/dist/permutiveRtdProvider.js +1 -1
  84. package/dist/pixfutureBidAdapter.js +1 -1
  85. package/dist/prebid-core.js +1 -1
  86. package/dist/prebidServerBidAdapter.js +1 -1
  87. package/dist/publinkIdSystem.js +1 -1
  88. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  89. package/dist/pubmaticBidAdapter.js +1 -1
  90. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  91. package/dist/pxyzBidAdapter.js +1 -1
  92. package/dist/quantcastBidAdapter.js +1 -1
  93. package/dist/readpeakBidAdapter.js +1 -1
  94. package/dist/relaidoBidAdapter.js +1 -1
  95. package/dist/retailspotBidAdapter.js +1 -0
  96. package/dist/rhythmoneBidAdapter.js +1 -1
  97. package/dist/riseBidAdapter.js +1 -1
  98. package/dist/rubiconAnalyticsAdapter.js +1 -1
  99. package/dist/rubiconBidAdapter.js +1 -1
  100. package/dist/seedingAllianceBidAdapter.js +1 -1
  101. package/dist/seedtagBidAdapter.js +1 -1
  102. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  103. package/dist/sharethroughBidAdapter.js +1 -1
  104. package/dist/shinezBidAdapter.js +1 -1
  105. package/dist/silverpushBidAdapter.js +1 -0
  106. package/dist/smaatoBidAdapter.js +1 -1
  107. package/dist/smartadserverBidAdapter.js +1 -1
  108. package/dist/smartxBidAdapter.js +1 -1
  109. package/dist/smilewantedBidAdapter.js +1 -1
  110. package/dist/sonobiBidAdapter.js +1 -1
  111. package/dist/sovrnAnalyticsAdapter.js +1 -1
  112. package/dist/sovrnBidAdapter.js +1 -1
  113. package/dist/sspBCBidAdapter.js +1 -1
  114. package/dist/stvBidAdapter.js +1 -1
  115. package/dist/sublimeBidAdapter.js +1 -1
  116. package/dist/synacormediaBidAdapter.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/video.js +1 -1
  128. package/dist/videoModule.js +1 -1
  129. package/dist/videobyteBidAdapter.js +1 -1
  130. package/dist/visxBidAdapter.js +1 -1
  131. package/dist/vuukleBidAdapter.js +1 -1
  132. package/dist/widespaceBidAdapter.js +1 -1
  133. package/dist/winrBidAdapter.js +1 -1
  134. package/dist/yahoosspBidAdapter.js +1 -1
  135. package/dist/yieldlabBidAdapter.js +1 -1
  136. package/dist/yieldmoBidAdapter.js +1 -1
  137. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  138. package/integrationExamples/videoModule/eventsUI/eventsUI.css +205 -0
  139. package/integrationExamples/videoModule/eventsUI/eventsUI.js +181 -0
  140. package/integrationExamples/videoModule/jwplayer/eventsUI.html +295 -0
  141. package/integrationExamples/videoModule/videojs/eventsUI.html +319 -0
  142. package/libraries/video/shared/helpers.js +14 -0
  143. package/modules/33acrossBidAdapter.js +1 -1
  144. package/modules/adgenerationBidAdapter.js +24 -15
  145. package/modules/admixerBidAdapter.js +15 -9
  146. package/modules/aidemBidAdapter.js +3 -1
  147. package/modules/appnexusBidAdapter.js +1 -0
  148. package/modules/beopBidAdapter.js +1 -0
  149. package/modules/confiantRtdProvider.js +15 -12
  150. package/modules/conversantAnalyticsAdapter.js +7 -5
  151. package/modules/conversantBidAdapter.js +1 -1
  152. package/modules/criteoBidAdapter.js +17 -1
  153. package/modules/gridBidAdapter.js +3 -0
  154. package/modules/ixBidAdapter.js +65 -47
  155. package/modules/kueezRtbBidAdapter.js +30 -33
  156. package/modules/liveIntentIdSystem.js +8 -4
  157. package/modules/magniteAnalyticsAdapter.js +26 -3
  158. package/modules/mgidBidAdapter.js +9 -8
  159. package/modules/minutemediaBidAdapter.js +6 -0
  160. package/modules/minutemediaplusBidAdapter.js +30 -32
  161. package/modules/nexx360BidAdapter.js +2 -1
  162. package/modules/permutiveRtdProvider.js +9 -38
  163. package/modules/prebidServerBidAdapter/index.js +1 -3
  164. package/modules/prebidServerBidAdapter/ortbConverter.js +5 -1
  165. package/modules/pubmaticAnalyticsAdapter.js +3 -2
  166. package/modules/retailspotBidAdapter .md +32 -0
  167. package/modules/retailspotBidAdapter.js +186 -0
  168. package/modules/riseBidAdapter.js +6 -0
  169. package/modules/rubiconBidAdapter.js +6 -2
  170. package/modules/silverpushBidAdapter.js +326 -0
  171. package/modules/silverpushBidAdapter.md +107 -0
  172. package/modules/ttdBidAdapter.js +23 -22
  173. package/modules/underdogmediaBidAdapter.js +2 -2
  174. package/modules/vidazooBidAdapter.js +28 -32
  175. package/modules/videoModule/adQueue.js +2 -2
  176. package/modules/videoModule/index.js +9 -5
  177. package/modules/yahoosspBidAdapter.js +6 -0
  178. package/modules/yahoosspBidAdapter.md +37 -0
  179. package/modules/yieldlabBidAdapter.js +27 -5
  180. package/package.json +1 -1
  181. package/src/adapterManager.js +4 -0
  182. package/src/adapters/bidderFactory.js +1 -0
  183. package/src/auction.js +2 -0
  184. package/src/prebid.js +36 -12
  185. package/src/utils/cpm.js +4 -1
  186. package/test/spec/modules/33acrossBidAdapter_spec.js +4 -3
  187. package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
  188. package/test/spec/modules/admixerBidAdapter_spec.js +64 -25
  189. package/test/spec/modules/aidemBidAdapter_spec.js +3 -0
  190. package/test/spec/modules/beopBidAdapter_spec.js +4 -0
  191. package/test/spec/modules/confiantRtdProvider_spec.js +4 -1
  192. package/test/spec/modules/conversantBidAdapter_spec.js +2 -1
  193. package/test/spec/modules/criteoBidAdapter_spec.js +109 -0
  194. package/test/spec/modules/gridBidAdapter_spec.js +3 -0
  195. package/test/spec/modules/ixBidAdapter_spec.js +66 -1
  196. package/test/spec/modules/kueezRtbBidAdapter_spec.js +3 -2
  197. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +28 -0
  198. package/test/spec/modules/liveIntentIdSystem_spec.js +45 -0
  199. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +16 -36
  200. package/test/spec/modules/mass_spec.js +2 -0
  201. package/test/spec/modules/mgidBidAdapter_spec.js +9 -9
  202. package/test/spec/modules/minutemediaBidAdapter_spec.js +18 -0
  203. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +3 -2
  204. package/test/spec/modules/permutiveRtdProvider_spec.js +0 -20
  205. package/test/spec/modules/prebidServerBidAdapter_spec.js +96 -1
  206. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +6 -1
  207. package/test/spec/modules/retailspotBidAdapter_spec.js +426 -0
  208. package/test/spec/modules/riseBidAdapter_spec.js +18 -0
  209. package/test/spec/modules/rubiconBidAdapter_spec.js +143 -67
  210. package/test/spec/modules/silverpushBidAdapter_spec.js +394 -0
  211. package/test/spec/modules/ttdBidAdapter_spec.js +129 -2
  212. package/test/spec/modules/underdogmediaBidAdapter_spec.js +1 -1
  213. package/test/spec/modules/vidazooBidAdapter_spec.js +3 -2
  214. package/test/spec/modules/videoModule/shared/helpers_spec.js +22 -0
  215. package/test/spec/modules/yahoosspBidAdapter_spec.js +60 -1
  216. package/test/spec/modules/yieldlabBidAdapter_spec.js +8 -1
  217. package/test/spec/unit/core/bidderFactory_spec.js +9 -9
  218. package/test/spec/unit/pbjs_api_spec.js +59 -1
  219. package/test/spec/unit/utils/cpm_spec.js +56 -1
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+
3
+ let sequenceCount = 0;
4
+ const eventLogGroups = {};
5
+ const Uint8Array = window.Uint8Array;
6
+ const TimeRanges = window.TimeRanges;
7
+
8
+ function stringify(value, replacer, space) {
9
+ try {
10
+ return truncate(JSON.stringify(value, replacer || stringifyReplacer(value), space), 100000);
11
+ } catch (error) {
12
+ return `[${error}]`;
13
+ }
14
+ }
15
+
16
+ function truncate(str, length) {
17
+ return (str && str.length) > length ? (str.substr(0, length) +
18
+ '\n... Event truncated due to length (see console for complete output)') : str;
19
+ }
20
+
21
+ function stringifyReplacer(parentValue) {
22
+ const references = [];
23
+ const safeResults = [];
24
+ let complexity = 0;
25
+ return function stringifyKeyValue(key, value) {
26
+ if (typeof value === 'object') {
27
+ if (value === null || value instanceof Date || value instanceof RegExp) {
28
+ return value;
29
+ }
30
+ if (!!Uint8Array && value instanceof Uint8Array) {
31
+ // Stub values of Arrays with more than 1000 items
32
+ let str = ('' + value);
33
+ str = (str.length > 40 ? (str.substr(0, 40) + '...(see console)') : str);
34
+ return `Uint8Array(${value.length}) [${str}]`;
35
+ }
36
+ if (!!TimeRanges && value instanceof TimeRanges) {
37
+ const ranges = [];
38
+ for (let i = 0; i < value.length; i++) {
39
+ ranges[i] = `start(${i}) = ${value.start(i)} end(${i}) = ${value.end(i)}`;
40
+ }
41
+ return `TimeRanges(${value.length}) [${ranges}]`;
42
+ }
43
+ if (value === parentValue && complexity > 0) {
44
+ return '<parent object>';
45
+ }
46
+ const referenceIndex = references.indexOf(value);
47
+ if (referenceIndex !== -1) {
48
+ // Duplicate reference found
49
+ const safe = safeResults[referenceIndex];
50
+ if (safe) {
51
+ return safe;
52
+ }
53
+ try {
54
+ // Test for circular references
55
+ JSON.stringify(value);
56
+ } catch (error) {
57
+ return (safeResults[referenceIndex] = '<' + value + '...(see console)>');
58
+ }
59
+ safeResults[referenceIndex] = value;
60
+ }
61
+ if (complexity++ > 10000) {
62
+ return '<complexity exceeded>';
63
+ }
64
+ references.push(value);
65
+ return value;
66
+ }
67
+ if (typeof value === 'function') {
68
+ return `${value}`;
69
+ }
70
+ return value;
71
+ };
72
+ }
73
+
74
+ function createEventSequenceElement(eventGroup) {
75
+ const element = document.createElement('div');
76
+ element.classList.add('sequence', `mode-${eventGroup}`);
77
+ element.setAttribute('data-sequence', `${sequenceCount++}`);
78
+ return element;
79
+ }
80
+
81
+ function appendSequenceElement(container, element) {
82
+ container.appendChild(element);
83
+ }
84
+
85
+ function textContentGrouped(inEvent, group) {
86
+ if (group) {
87
+ return `${inEvent} (${group[inEvent]})`;
88
+ }
89
+ return inEvent;
90
+ }
91
+
92
+ function appendEvent(container, currentEventType, currentEventGroup, data) {
93
+ const div = document.createElement('div');
94
+ div.classList.add('group-' + currentEventGroup, 'event-' + currentEventType, 'pre');
95
+ div.textContent = textContentGrouped(currentEventType);
96
+ div.setAttribute('title', `${currentEventGroup} event "${currentEventType}"`);
97
+ div.setAttribute('tabindex', '0');
98
+ const theData = Object.assign({}, data);
99
+ div.onclick = div.onkeyup = function(e) {
100
+ if (e && e.keyCode && e.keyCode !== 13) {
101
+ return;
102
+ }
103
+
104
+ console.log(theData);
105
+ div.textContent = ((div.expanded = !div.expanded)) ?
106
+ textContentExpanded(currentEventType, [theData]) : textContentGrouped(currentEventType);
107
+ if (e) {
108
+ e.preventDefault();
109
+ }
110
+ return [theData];
111
+ };
112
+ container.appendChild(div);
113
+ return div;
114
+ }
115
+
116
+ function textContentExpanded(inEvent, allData) {
117
+ return `${inEvent} (${allData.map((item, i) =>
118
+ (allData.length > 1 ? `[${i}] = ` : '') + stringify(item, null, 4)).join('\n')})`;
119
+ }
120
+
121
+ function incrementEvent(group, currentEventType, currentEventGroup, div, datum) {
122
+ group[currentEventType]++;
123
+ div.textContent = textContentGrouped(currentEventType, group);
124
+ const logPreviousEvents = div.onclick;
125
+ const scopedDatum = Object.assign({}, datum);
126
+ div.onclick = div.onkeyup = function(e) {
127
+ if (e && e.keyCode && e.keyCode !== 13) {
128
+ return;
129
+ }
130
+
131
+ const allData = logPreviousEvents();
132
+ allData.push(scopedDatum);
133
+ console.log(scopedDatum);
134
+ div.textContent = (div.expanded) ? textContentExpanded(currentEventType, allData) : textContentGrouped(currentEventType, group);
135
+ if (e) {
136
+ e.preventDefault();
137
+ }
138
+ return allData;
139
+ };
140
+ }
141
+
142
+ function getGenericEventHandler() {
143
+ const logContainer = document.querySelector('#eventsLog');
144
+ let currentEventGroup = '';
145
+ let currentEventType = '';
146
+ let lastEvent = '';
147
+ let lastGroup;
148
+ const genericEventHandler = function(e, type, eventGroup) {
149
+ currentEventGroup = eventGroup;
150
+ currentEventType = type;
151
+
152
+ let group = eventLogGroups[eventGroup];
153
+ if (!group || group !== lastGroup) {
154
+ const beforeReadyElement = createEventSequenceElement(currentEventGroup);
155
+ appendSequenceElement(logContainer, beforeReadyElement);
156
+ group = eventLogGroups[currentEventGroup] = {
157
+ eventGroup: currentEventGroup,
158
+ event: currentEventType,
159
+ container: logContainer,
160
+ eventElement: beforeReadyElement
161
+ };
162
+ lastGroup = lastGroup || group;
163
+ }
164
+ if (lastEvent === currentEventType && !(/^(?:meta|hlsBufferAppend)/).test(currentEventType)) {
165
+ incrementEvent(group, currentEventType, currentEventGroup, group.pre, e);
166
+ } else {
167
+ const eventElement = createEventSequenceElement(currentEventGroup);
168
+ group[currentEventType] = 1;
169
+ group.eventElement = eventElement;
170
+ group.lastEventGroup = currentEventGroup;
171
+ group.pre = appendEvent(eventElement, currentEventType, currentEventGroup, e);
172
+ appendSequenceElement(group.container, eventElement);
173
+ }
174
+ lastEvent = currentEventType;
175
+ lastGroup = group;
176
+ };
177
+
178
+ return genericEventHandler;
179
+ }
180
+
181
+ window.getGenericEventHandler = getGenericEventHandler;
@@ -0,0 +1,295 @@
1
+ <html>
2
+
3
+ <head>
4
+ <script src="https://cdn.jwplayer.com/libraries/l5MchIxB.js"></script>
5
+ <script async src="../../../build/dev/prebid.js"></script>
6
+ <script src="../eventsUI/eventsUI.js"></script>
7
+ <link href="../eventsUI/eventsUI.css" rel="stylesheet" type="text/css">
8
+
9
+ <title>JW Player Event UI</title>
10
+
11
+ <!--This demo listens to the Video events that are fired when an ad impression or ad error came from a bid. -->
12
+
13
+ <script>
14
+ // Setup ad units
15
+ var adUnits = [{
16
+ code: 'testUnit',
17
+ mediaTypes: {
18
+ video: {}
19
+ },
20
+ video: {
21
+ divId: 'player', // required to indicate which player is being used to render this ad unit.
22
+ },
23
+
24
+ bids: [{
25
+ bidder: 'ix',
26
+ params: {
27
+ siteId: '300',
28
+ }
29
+ }]
30
+ }];
31
+
32
+ var pbjs = pbjs || {};
33
+ pbjs.que = pbjs.que || [];
34
+
35
+ pbjs.que.push(function () {
36
+ pbjs.setConfig({
37
+ video: {
38
+ providers: [{
39
+ divId: 'player',
40
+ vendorCode: 1, // jwplayer vendorCode
41
+ playerConfig: {
42
+ licenseKey: '577+5vXsluqV2Uy0drAS8wrgiqJlYijZxz3DmoYDm8FTJjdoIe8zYA==',
43
+ params: {
44
+ vendorConfig: {
45
+ playlist: [{
46
+ file: 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/SubaruOutbackOnStreetAndDirt.mp4',
47
+ title: "Subaru Outback on Street and Dirt",
48
+ }],
49
+ advertising: { client: 'vast' }
50
+ }
51
+ }
52
+ },
53
+ },]
54
+ },
55
+ debugging: {
56
+ enabled: true,
57
+ intercept: [
58
+ {
59
+ when: {
60
+ adUnitCode: 'testUnit',
61
+ },
62
+ then: {
63
+ cpm: 25,
64
+ mediaType: "video",
65
+ ad: "<VAST version=\"3.0\"> <Ad id=\"123\"> <InLine> <AdSystem>PubMatic</AdSystem> <AdTitle>VAST 2.0 Instream Test</AdTitle> <Description>VAST 2.0 Instream Test</Description> <Error> <![CDATA[https://aktrack.pubmatic.com/er=[ERRORCODE]]]> </Error> <Impression> <![CDATA[https://aktrack.pubmatic.com?e=impression]]> </Impression> <Creatives> <Creative AdID=\"123\"> <Linear> <Duration>00:00:30</Duration> <TrackingEvents> <Tracking event=\"creativeView\"> <![CDATA[https://aktrack.pubmatic.com?e=creativeView]]> </Tracking> <Tracking event=\"start\"> <![CDATA[https://aktrack.pubmatic.com?e=start]]> </Tracking> <Tracking event=\"midpoint\"> <![CDATA[https://aktrack.pubmatic.com?e=midpoint]]> </Tracking> <Tracking event=\"firstQuartile\"> <![CDATA[https://aktrack.pubmatic.com?e=firstQuartile]]> </Tracking> <Tracking event=\"thirdQuartile\"> <![CDATA[https://aktrack.pubmatic.com?e=thirdQuartile]]> </Tracking> <Tracking event=\"complete\"> <![CDATA[https://aktrack.pubmatic.com?e=complete]]> </Tracking> </TrackingEvents> <VideoClicks> <ClickThrough> <![CDATA[https://www.pubmatic.com]]> </ClickThrough> </VideoClicks> <MediaFiles> <MediaFile delivery=\"progressive\" type=\"video/mp4\" bitrate=\"500\" width=\"480\" height=\"460\" scalable=\"true\" maintainAspectRatio=\"true\"> <![CDATA[https://staging.pubmatic.com:8443/test/spinning-logo-480x360_video.mp4]]> </MediaFile> <MediaFile delivery=\"progressive\" type=\"video/ogg\" bitrate=\"500\" width=\"480\" height=\"460\" scalable=\"true\" maintainAspectRatio=\"true\"> <![CDATA[https://staging.pubmatic.com:8443/test/spinning-logo-480x360_video.ogg]]> </MediaFile> <MediaFile delivery=\"progressive\" type=\"video/x-flv\" bitrate=\"500\" width=\"400\" height=\"300\" scalable=\"true\" maintainAspectRatio=\"true\"> <![CDATA[https://staging.pubmatic.com:8443/test/PubMatic_test_video.flv]]> </MediaFile> </MediaFiles> </Linear> </Creative> <Creative AdID=\"123\"> <NonLinearAds> <TrackingEvents></TrackingEvents> <NonLinear height=\"50\" width=\"300\" minSuggestedDuration=\"00:00:05\"> <StaticResource creativeType=\"image/jpeg\"> <![CDATA[https://staging.pubmatic.com:8443/test/PubMatic_LetsBeClear_300x50.jpeg]]> </StaticResource> <NonLinearClickThrough> <![CDATA[https://www.pubmatic.com]]> </NonLinearClickThrough> </NonLinear> </NonLinearAds> </Creative> <Creative AdID=\"123\"> <CompanionAds> <Companion width=\"300\" height=\"250\"> <StaticResource creativeType=\"image/jpeg\"> <![CDATA[https://staging.pubmatic.com:8443/test/PubMatic_LetsBeClear_320x250.jpg]]> </StaticResource> <CompanionClickThrough> <![CDATA[https://www.pubmatic.com]]> </CompanionClickThrough> </Companion> </CompanionAds> </Creative> </Creatives> </InLine> </Ad> </VAST>",
66
+ vastUrl: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=",
67
+ }
68
+ },
69
+ ]
70
+ }
71
+ });
72
+
73
+ pbjs.addAdUnits(adUnits);
74
+ const eventHandler = window.getGenericEventHandler();
75
+
76
+ pbjs.onEvent('videoSetupComplete', (e) => {
77
+ console.log('player setup complete: ', e);
78
+ eventHandler(e, e.type, "player", );
79
+ });
80
+
81
+ pbjs.onEvent('videoSetupFailed', e => {
82
+ console.log('player setup failed: ', e);
83
+ eventHandler(e, e.type, "player", );
84
+ });
85
+
86
+ pbjs.onEvent('videoDestroyed', e => {
87
+ console.log('player destroyed: ', e);
88
+ eventHandler(e, e.type, "player", );
89
+ });
90
+
91
+ pbjs.onEvent('videoPlaylist', (e) => {
92
+ console.log('videos pb playlist: ', e);
93
+ eventHandler(e, e.type, "media", );
94
+ });
95
+
96
+ pbjs.onEvent('videoPlaybackRequest', (e) => {
97
+ console.log('videos pb playbackRequest: ', e);
98
+ eventHandler(e, e.type, "media", );
99
+ });
100
+
101
+ pbjs.onEvent('videoAutostartBlocked', (e) => {
102
+ console.log('videos pb autostartBlocked: ', e);
103
+ eventHandler(e, e.type, "media", );
104
+ });
105
+
106
+ pbjs.onEvent('videoPlayAttemptFailed', (e) => {
107
+ console.log('videos pb playAttemptFailed: ', e);
108
+ eventHandler(e, e.type, "media", );
109
+ });
110
+
111
+ pbjs.onEvent('videoContentLoaded', (e) => {
112
+ console.log('videos pb contentLoaded: ', e);
113
+ eventHandler(e, e.type, "media", );
114
+ });
115
+
116
+ pbjs.onEvent('videoPlay', (e) => {
117
+ console.log('videos pb play: ', e);
118
+ eventHandler(e, e.type, "media", );
119
+ });
120
+
121
+ pbjs.onEvent('videoPause', (e) => {
122
+ console.log('videos pb pause: ', e);
123
+ eventHandler(e, e.type, "media", );
124
+ });
125
+
126
+ pbjs.onEvent('videoBuffer', (e) => {
127
+ console.log('videos pb buffer: ', e);
128
+ eventHandler(e, e.type, "media", );
129
+ });
130
+
131
+ pbjs.onEvent('videoSeekStart', (e) => {
132
+ console.log('videos pb seekStart: ', e);
133
+ eventHandler(e, e.type, "media", );
134
+ });
135
+
136
+ pbjs.onEvent('videoSeekEnd', (e) => {
137
+ console.log('videos pb seekEnd: ', e);
138
+ eventHandler(e, e.type, "media", );
139
+ });
140
+
141
+ pbjs.onEvent('videoRenditionUpdate', (e) => {
142
+ console.log('videos pb renditionUpdate: ', e);
143
+ eventHandler(e, e.type, "media", );
144
+ });
145
+
146
+ pbjs.onEvent('videoMute', (e) => {
147
+ console.log('videos pb mute: ', e);
148
+ eventHandler(e, e.type, "player", );
149
+ });
150
+
151
+ pbjs.onEvent('videoVolume', (e) => {
152
+ console.log('videos pb volume: ', e);
153
+ eventHandler(e, e.type, "player", );
154
+ });
155
+
156
+ pbjs.onEvent('videoTime', (e) => {
157
+ console.log('videos pb time: ', e);
158
+ eventHandler(e, e.type, "media", );
159
+ });
160
+
161
+ pbjs.onEvent('videoComplete', (e) => {
162
+ console.log('videos pb complete: ', e);
163
+ eventHandler(e, e.type, "media", );
164
+ });
165
+
166
+ pbjs.onEvent('videoPlaylistComplete', (e) => {
167
+ console.log('videos pb playlistComplete: ', e);
168
+ eventHandler(e, e.type, "media", );
169
+ });
170
+
171
+ pbjs.onEvent('videoFullscreen', (e) => {
172
+ console.log('videos pb fullscreen: ', e);
173
+ eventHandler(e, e.type, "player", );
174
+ });
175
+
176
+ pbjs.onEvent('videoPlayerResize', (e) => {
177
+ console.log('videos pb playerResize: ', e);
178
+ eventHandler(e, e.type, "player", );
179
+ });
180
+
181
+ pbjs.onEvent('videoError', (e) => {
182
+ console.log('videos pb error: ', e);
183
+ eventHandler(e, e.type, "media", );
184
+ });
185
+
186
+ pbjs.onEvent('videoViewable', (e) => {
187
+ console.log('videos pb viewable: ', e);
188
+ eventHandler(e, e.type, "player", );
189
+ });
190
+
191
+ pbjs.onEvent('videoCast', (e) => {
192
+ console.log('videos pb cast: ', e);
193
+ eventHandler(e, e.type, "player", );
194
+ });
195
+
196
+ pbjs.onEvent('videoAdBreakStart', e => {
197
+ console.log('videos pb ad break start: ', e);
198
+ eventHandler(e, e.type, "ads", );
199
+ });
200
+
201
+ pbjs.onEvent('videoAdRequest', (e) => {
202
+ console.log('videos pb ad request: ', e);
203
+ eventHandler(e, e.type, "ads", );
204
+ });
205
+
206
+ pbjs.onEvent('videoAdLoaded', e => {
207
+ console.log('videos pb ad load: ', e);
208
+ eventHandler(e, e.type, "ads", );
209
+ });
210
+
211
+ pbjs.onEvent('videoAdImpression', (e) => {
212
+ console.log('videos pb ad impression: ', e);
213
+ eventHandler(e, e.type, "ads", );
214
+ });
215
+
216
+ pbjs.onEvent('videoAdStarted', (e) => {
217
+ console.log('videos pb ad started: ', e);
218
+ eventHandler(e, e.type, "ads", );
219
+ });
220
+
221
+ pbjs.onEvent('videoAdPlay', (e) => {
222
+ console.log('videos pb ad play: ', e);
223
+ eventHandler(e, e.type, "ads", );
224
+ });
225
+
226
+ pbjs.onEvent('videoAdPause', (e) => {
227
+ console.log('videos pb ad pause: ', e);
228
+ eventHandler(e, e.type, "ads", );
229
+ });
230
+
231
+ pbjs.onEvent('videoAdTime', (e) => {
232
+ console.log('videos pb ad time: ', e);
233
+ eventHandler(e, e.type, "ads", );
234
+ });
235
+
236
+ pbjs.onEvent('videoAdComplete', (e) => {
237
+ console.log('videos pb ad complete: ', e);
238
+ eventHandler(e, e.type, "ads", );
239
+ });
240
+
241
+ pbjs.onEvent('videoAdSkipped', (e) => {
242
+ console.log('videos pb ad skipped: ', e);
243
+ eventHandler(e, e.type, "ads", );
244
+ });
245
+
246
+ pbjs.onEvent('videoAdClick', (e) => {
247
+ console.log('videos pb ad click: ', e);
248
+ eventHandler(e, e.type, "ads", );
249
+ });
250
+
251
+ pbjs.onEvent('videoAdError', (e) => {
252
+ console.log('videos pb ad error: ', e);
253
+ eventHandler(e, e.type, "ads", );
254
+ });
255
+
256
+ pbjs.onEvent('videoAuctionAdLoadAbort', (e) => {
257
+ console.log('videos pb auction ad load attempt: ', e);
258
+ eventHandler(e, "auctionAdLoadAbort", "auction", );
259
+ });
260
+
261
+ pbjs.onEvent('videoAuctionAdLoadQueued', (e) => {
262
+ console.log('videos pb auction ad load queued: ', e);
263
+ eventHandler(e, "auctionAdLoadQueued", "auction", );
264
+ });
265
+
266
+ pbjs.onEvent('videoAuctionAdLoadAttempt', e => {
267
+ console.log('The Video Module is attempting to load an ad into the player! \n', e);
268
+ eventHandler(e, "auctionAdLoadAttempt", "auction", );
269
+ });
270
+
271
+ pbjs.onEvent('videoBidError', e => {
272
+ console.log('An Ad Error came from a Bid: ', e);
273
+ eventHandler(e, "bidError", "auction", );
274
+ });
275
+
276
+ pbjs.onEvent('videoBidImpression', e => {
277
+ console.log('An Ad Impression came from a Bid: ', e);
278
+ eventHandler(e, "bidImpression", "auction", );
279
+ });
280
+
281
+ pbjs.requestBids(adUnits);
282
+ });
283
+ </script>
284
+ </head>
285
+
286
+ <body>
287
+ <div id="playerContainer"style="width: 640px; height: 360px;">
288
+ <div id ="player"></div>
289
+ </div>
290
+
291
+ <div id ="eventsLog"></div>
292
+
293
+ </body>
294
+
295
+ </html>