prebid.js 6.0.0 → 6.4.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.
- package/.babelrc.js +1 -7
- package/.circleci/config.yml +1 -1
- package/README.md +1 -1
- package/browsers.json +13 -29
- package/gulpfile.js +88 -82
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +23 -14
- package/karma.conf.maker.js +2 -2
- package/modules/33acrossBidAdapter.js +189 -102
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/addefendBidAdapter.js +1 -0
- package/modules/adheseBidAdapter.js +7 -2
- package/modules/adkernelBidAdapter.js +147 -61
- package/modules/adlivetechBidAdapter.md +61 -0
- package/modules/adlooxAdServerVideo.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +4 -4
- package/modules/admanBidAdapter.js +1 -0
- package/modules/admixerBidAdapter.js +3 -2
- package/modules/adnuntiusBidAdapter.js +5 -2
- package/modules/adomikAnalyticsAdapter.js +16 -4
- package/modules/adplusBidAdapter.js +203 -0
- package/modules/adplusBidAdapter.md +39 -0
- package/modules/adxcgBidAdapter.js +311 -359
- package/modules/adxcgBidAdapter.md +22 -21
- package/modules/adyoulikeBidAdapter.js +7 -2
- package/modules/aniviewBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +23 -3
- package/modules/beachfrontBidAdapter.js +14 -17
- package/modules/beopBidAdapter.js +6 -4
- package/modules/bidViewability.js +3 -3
- package/modules/bidViewabilityIO.js +3 -3
- package/modules/codefuelBidAdapter.js +1 -3
- package/modules/codefuelBidAdapter.md +3 -3
- package/modules/colossussspBidAdapter.js +7 -0
- package/modules/compassBidAdapter.js +201 -0
- package/modules/compassBidAdapter.md +79 -0
- package/modules/craftBidAdapter.js +5 -3
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/currency.js +2 -2
- package/modules/cwireBidAdapter.js +3 -0
- package/modules/dailyhuntBidAdapter.js +435 -0
- package/modules/dailyhuntBidAdapter.md +4 -0
- package/modules/datablocksBidAdapter.js +3 -3
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/deepintentBidAdapter.js +1 -1
- package/modules/dspxBidAdapter.js +1 -1
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +68 -54
- package/modules/feedadBidAdapter.js +2 -2
- package/modules/feedadBidAdapter.md +4 -2
- package/modules/freewheel-sspBidAdapter.js +6 -0
- package/modules/futureads.md +48 -0
- package/modules/glimpseBidAdapter.js +44 -16
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +11 -5
- package/modules/gridBidAdapter.js +5 -4
- package/modules/gumgumBidAdapter.js +7 -3
- package/modules/id5IdSystem.md +6 -6
- package/modules/imRtdProvider.js +31 -0
- package/modules/improvedigitalBidAdapter.js +19 -3
- package/modules/instreamTracking.js +4 -4
- package/modules/intersectionRtdProvider.js +114 -0
- package/modules/invibesBidAdapter.js +64 -14
- package/modules/invibesBidAdapter.md +2 -1
- package/modules/ipromBidAdapter.js +79 -0
- package/modules/ixBidAdapter.js +185 -22
- package/modules/kinessoIdSystem.js +1 -1
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedBidAdapter.js +8 -2
- package/modules/lotamePanoramaIdSystem.js +80 -8
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/mediasquareBidAdapter.js +1 -9
- package/modules/merkleIdSystem.js +5 -0
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/nativoBidAdapter.js +27 -1
- package/modules/nextMillenniumBidAdapter.js +37 -7
- package/modules/oguryBidAdapter.js +2 -1
- package/modules/openxBidAdapter.js +6 -1
- package/modules/prebidServerBidAdapter/index.js +19 -15
- package/modules/pubgeniusBidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +5 -3
- package/modules/pubxaiAnalyticsAdapter.js +17 -0
- package/modules/relaidoBidAdapter.js +86 -65
- package/modules/richaudienceBidAdapter.js +2 -3
- package/modules/rtdModule/index.js +48 -18
- package/modules/rubiconBidAdapter.js +31 -19
- package/modules/saambaaBidAdapter.js +420 -0
- package/modules/saambaaBidAdapter.md +65 -68
- package/modules/seedtagBidAdapter.js +6 -0
- package/modules/sharedIdSystem.js +27 -1
- package/modules/smaatoBidAdapter.js +9 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/sspBCBidAdapter.js +34 -3
- package/modules/tappxBidAdapter.js +3 -1
- package/modules/targetVideoBidAdapter.js +187 -0
- package/modules/targetVideoBidAdapter.md +34 -0
- package/modules/telariaBidAdapter.js +2 -2
- package/modules/trustxBidAdapter.js +18 -17
- package/modules/undertoneBidAdapter.js +8 -1
- package/modules/userId/index.js +27 -2
- package/modules/ventes.md +71 -0
- package/modules/ventesBidAdapter.js +104 -64
- package/modules/ventesBidAdapter.md +0 -1
- package/modules/vidoomyBidAdapter.js +65 -108
- package/modules/visxBidAdapter.js +20 -3
- package/modules/visxBidAdapter.md +4 -6
- package/modules/weboramaRtdProvider.js +288 -73
- package/modules/weboramaRtdProvider.md +27 -10
- package/modules/yahoosspBidAdapter.js +5 -1
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +41 -10
- package/modules/yieldlabBidAdapter.md +91 -48
- package/modules/yieldoneBidAdapter.js +115 -11
- package/modules/zetaSspBidAdapter.md +33 -1
- package/modules/zeta_global_sspBidAdapter.js +22 -1
- package/package.json +6 -1
- package/plugins/pbjsGlobals.js +28 -1
- package/src/adapterManager.js +14 -8
- package/src/auction.js +5 -4
- package/src/prebid.js +1 -2
- package/src/targeting.js +24 -3
- package/src/utils.js +41 -7
- package/test/helpers/prebidGlobal.js +1 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/33acrossBidAdapter_spec.js +300 -78
- package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
- package/test/spec/modules/adlooxAnalyticsAdapter_spec.js +6 -6
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +35 -0
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +9 -1
- package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
- package/test/spec/modules/adxcgBidAdapter_spec.js +820 -571
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +63 -1
- package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
- package/test/spec/modules/beopBidAdapter_spec.js +1 -1
- package/test/spec/modules/bidViewabilityIO_spec.js +2 -2
- package/test/spec/modules/bidViewability_spec.js +4 -4
- package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +9 -0
- package/test/spec/modules/compassBidAdapter_spec.js +397 -0
- package/test/spec/modules/cwireBidAdapter_spec.js +10 -8
- package/test/spec/modules/dailyhuntBidAdapter_spec.js +404 -0
- package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
- package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
- package/test/spec/modules/feedadBidAdapter_spec.js +15 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +58 -4
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/imRtdProvider_spec.js +25 -0
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +3 -1
- package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
- package/test/spec/modules/invibesBidAdapter_spec.js +148 -4
- package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
- package/test/spec/modules/ixBidAdapter_spec.js +293 -2
- package/test/spec/modules/konduitWrapper_spec.js +0 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
- package/test/spec/modules/livewrappedBidAdapter_spec.js +31 -0
- package/test/spec/modules/lotamePanoramaIdSystem_spec.js +227 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -4
- package/test/spec/modules/merkleIdSystem_spec.js +18 -0
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +26 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
- package/test/spec/modules/openxBidAdapter_spec.js +5 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +62 -2
- package/test/spec/modules/pubgeniusBidAdapter_spec.js +3 -3
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +11 -0
- package/test/spec/modules/realTimeDataModule_spec.js +135 -49
- package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
- package/test/spec/modules/richaudienceBidAdapter_spec.js +2 -2
- package/test/spec/modules/rubiconBidAdapter_spec.js +65 -9
- package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
- package/test/spec/modules/sharedIdSystem_spec.js +52 -6
- package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +96 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +42 -0
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
- package/test/spec/modules/visxBidAdapter_spec.js +121 -5
- package/test/spec/modules/weboramaRtdProvider_spec.js +408 -214
- package/test/spec/modules/yahoosspBidAdapter_spec.js +28 -1
- package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +33 -1
- package/test/spec/unit/core/adapterManager_spec.js +24 -6
- package/test/spec/unit/core/targeting_spec.js +116 -0
- package/test/spec/utils_spec.js +38 -0
- package/test/test_deps.js +3 -0
- package/test/test_index.js +1 -3
package/src/prebid.js
CHANGED
|
@@ -47,8 +47,7 @@ $$PREBID_GLOBAL$$.libLoaded = true;
|
|
|
47
47
|
$$PREBID_GLOBAL$$.version = 'v$prebid.version$';
|
|
48
48
|
logInfo('Prebid.js v$prebid.version$ loaded');
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
$$PREBID_GLOBAL$$.installedModules = ['v$prebid.modulesList$'];
|
|
50
|
+
$$PREBID_GLOBAL$$.installedModules = $$PREBID_GLOBAL$$.installedModules || [];
|
|
52
51
|
|
|
53
52
|
// create adUnit array
|
|
54
53
|
$$PREBID_GLOBAL$$.adUnits = $$PREBID_GLOBAL$$.adUnits || [];
|
package/src/targeting.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
uniques, isGptPubadsDefined, getHighestCpm, getOldestHighestCpmBid, groupBy, isAdUnitCodeMatchingSlot, timestamp,
|
|
3
|
-
deepAccess, deepClone, logError, logWarn, logInfo, isFn, isArray, logMessage, isStr
|
|
3
|
+
deepAccess, deepClone, logError, logWarn, logInfo, isFn, isArray, logMessage, isStr, isAllowZeroCpmBidsEnabled
|
|
4
4
|
} from './utils.js';
|
|
5
5
|
import { config } from './config.js';
|
|
6
6
|
import { NATIVE_TARGETING_KEYS } from './native.js';
|
|
@@ -18,6 +18,10 @@ var pbTargetingKeys = [];
|
|
|
18
18
|
const MAX_DFP_KEYLENGTH = 20;
|
|
19
19
|
const TTL_BUFFER = 1000;
|
|
20
20
|
|
|
21
|
+
const CFG_ALLOW_TARGETING_KEYS = `targetingControls.allowTargetingKeys`;
|
|
22
|
+
const CFG_ADD_TARGETING_KEYS = `targetingControls.addTargetingKeys`;
|
|
23
|
+
const TARGETING_KEY_CONFIGURATION_ERROR_MSG = `Only one of "${CFG_ALLOW_TARGETING_KEYS}" or "${CFG_ADD_TARGETING_KEYS}" can be set`;
|
|
24
|
+
|
|
21
25
|
export const TARGETING_KEYS = Object.keys(CONSTANTS.TARGETING_KEYS).map(
|
|
22
26
|
key => CONSTANTS.TARGETING_KEYS[key]
|
|
23
27
|
);
|
|
@@ -261,7 +265,17 @@ export function newTargeting(auctionManager) {
|
|
|
261
265
|
});
|
|
262
266
|
|
|
263
267
|
const defaultKeys = Object.keys(Object.assign({}, CONSTANTS.DEFAULT_TARGETING_KEYS, CONSTANTS.NATIVE_KEYS));
|
|
264
|
-
|
|
268
|
+
let allowedKeys = config.getConfig(CFG_ALLOW_TARGETING_KEYS);
|
|
269
|
+
const addedKeys = config.getConfig(CFG_ADD_TARGETING_KEYS);
|
|
270
|
+
|
|
271
|
+
if (addedKeys != null && allowedKeys != null) {
|
|
272
|
+
throw new Error(TARGETING_KEY_CONFIGURATION_ERROR_MSG);
|
|
273
|
+
} else if (addedKeys != null) {
|
|
274
|
+
allowedKeys = defaultKeys.concat(addedKeys);
|
|
275
|
+
} else {
|
|
276
|
+
allowedKeys = allowedKeys || defaultKeys;
|
|
277
|
+
}
|
|
278
|
+
|
|
265
279
|
if (Array.isArray(allowedKeys) && allowedKeys.length > 0) {
|
|
266
280
|
targeting = getAllowedTargetingKeyValues(targeting, allowedKeys);
|
|
267
281
|
}
|
|
@@ -284,6 +298,13 @@ export function newTargeting(auctionManager) {
|
|
|
284
298
|
return targeting;
|
|
285
299
|
};
|
|
286
300
|
|
|
301
|
+
// warn about conflicting configuration
|
|
302
|
+
config.getConfig('targetingControls', function (config) {
|
|
303
|
+
if (deepAccess(config, CFG_ALLOW_TARGETING_KEYS) != null && deepAccess(config, CFG_ADD_TARGETING_KEYS) != null) {
|
|
304
|
+
logError(TARGETING_KEY_CONFIGURATION_ERROR_MSG);
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
|
|
287
308
|
// create an encoded string variant based on the keypairs of the provided object
|
|
288
309
|
// - note this will encode the characters between the keys (ie = and &)
|
|
289
310
|
function convertKeysToQueryForm(keyMap) {
|
|
@@ -438,7 +459,7 @@ export function newTargeting(auctionManager) {
|
|
|
438
459
|
const adUnitCodes = getAdUnitCodes(adUnitCode);
|
|
439
460
|
return bidsReceived
|
|
440
461
|
.filter(bid => includes(adUnitCodes, bid.adUnitCode))
|
|
441
|
-
.filter(bid => bid.cpm > 0)
|
|
462
|
+
.filter(bid => (isAllowZeroCpmBidsEnabled(bid.bidderCode)) ? bid.cpm >= 0 : bid.cpm > 0)
|
|
442
463
|
.map(bid => bid.adUnitCode)
|
|
443
464
|
.filter(uniques)
|
|
444
465
|
.map(adUnitCode => bidsReceived
|
package/src/utils.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
import { config } from './config.js';
|
|
3
|
+
import { getGlobal } from './prebidGlobal.js';
|
|
3
4
|
import clone from 'just-clone';
|
|
4
5
|
import find from 'core-js-pure/features/array/find.js';
|
|
5
6
|
import includes from 'core-js-pure/features/array/includes.js';
|
|
@@ -481,16 +482,43 @@ export function insertElement(elm, doc, target, asLastChildChild) {
|
|
|
481
482
|
} catch (e) {}
|
|
482
483
|
}
|
|
483
484
|
|
|
485
|
+
/**
|
|
486
|
+
* Returns a promise that completes when the given element triggers a 'load' or 'error' DOM event, or when
|
|
487
|
+
* `timeout` milliseconds have elapsed.
|
|
488
|
+
*
|
|
489
|
+
* @param {HTMLElement} element
|
|
490
|
+
* @param {Number} [timeout]
|
|
491
|
+
* @returns {Promise}
|
|
492
|
+
*/
|
|
493
|
+
export function waitForElementToLoad(element, timeout) {
|
|
494
|
+
let timer = null;
|
|
495
|
+
return new Promise((resolve) => {
|
|
496
|
+
const onLoad = function() {
|
|
497
|
+
element.removeEventListener('load', onLoad);
|
|
498
|
+
element.removeEventListener('error', onLoad);
|
|
499
|
+
if (timer != null) {
|
|
500
|
+
window.clearTimeout(timer);
|
|
501
|
+
}
|
|
502
|
+
resolve();
|
|
503
|
+
};
|
|
504
|
+
element.addEventListener('load', onLoad);
|
|
505
|
+
element.addEventListener('error', onLoad);
|
|
506
|
+
if (timeout != null) {
|
|
507
|
+
timer = window.setTimeout(onLoad, timeout);
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
|
|
484
512
|
/**
|
|
485
513
|
* Inserts an image pixel with the specified `url` for cookie sync
|
|
486
514
|
* @param {string} url URL string of the image pixel to load
|
|
487
515
|
* @param {function} [done] an optional exit callback, used when this usersync pixel is added during an async process
|
|
516
|
+
* @param {Number} [timeout] an optional timeout in milliseconds for the image to load before calling `done`
|
|
488
517
|
*/
|
|
489
|
-
export function triggerPixel(url, done) {
|
|
518
|
+
export function triggerPixel(url, done, timeout) {
|
|
490
519
|
const img = new Image();
|
|
491
520
|
if (done && internal.isFn(done)) {
|
|
492
|
-
img.
|
|
493
|
-
img.addEventListener('error', done);
|
|
521
|
+
waitForElementToLoad(img, timeout).then(done);
|
|
494
522
|
}
|
|
495
523
|
img.src = url;
|
|
496
524
|
}
|
|
@@ -538,18 +566,18 @@ export function insertHtmlIntoIframe(htmlCode) {
|
|
|
538
566
|
* @param {string} url URL to be requested
|
|
539
567
|
* @param {string} encodeUri boolean if URL should be encoded before inserted. Defaults to true
|
|
540
568
|
* @param {function} [done] an optional exit callback, used when this usersync pixel is added during an async process
|
|
569
|
+
* @param {Number} [timeout] an optional timeout in milliseconds for the iframe to load before calling `done`
|
|
541
570
|
*/
|
|
542
|
-
export function insertUserSyncIframe(url, done) {
|
|
571
|
+
export function insertUserSyncIframe(url, done, timeout) {
|
|
543
572
|
let iframeHtml = internal.createTrackPixelIframeHtml(url, false, 'allow-scripts allow-same-origin');
|
|
544
573
|
let div = document.createElement('div');
|
|
545
574
|
div.innerHTML = iframeHtml;
|
|
546
575
|
let iframe = div.firstChild;
|
|
547
576
|
if (done && internal.isFn(done)) {
|
|
548
|
-
iframe.
|
|
549
|
-
iframe.addEventListener('error', done);
|
|
577
|
+
waitForElementToLoad(iframe, timeout).then(done);
|
|
550
578
|
}
|
|
551
579
|
internal.insertElement(iframe, document, 'html', true);
|
|
552
|
-
}
|
|
580
|
+
}
|
|
553
581
|
|
|
554
582
|
/**
|
|
555
583
|
* Creates a snippet of HTML that retrieves the specified `url`
|
|
@@ -1294,3 +1322,9 @@ export function cyrb53Hash(str, seed = 0) {
|
|
|
1294
1322
|
h2 = imul(h2 ^ (h2 >>> 16), 2246822507) ^ imul(h1 ^ (h1 >>> 13), 3266489909);
|
|
1295
1323
|
return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString();
|
|
1296
1324
|
}
|
|
1325
|
+
|
|
1326
|
+
export function isAllowZeroCpmBidsEnabled(bidderCode) {
|
|
1327
|
+
const bidderSettings = getGlobal().bidderSettings;
|
|
1328
|
+
return ((bidderSettings[bidderCode] && bidderSettings[bidderCode].allowZeroCpmBids === true) ||
|
|
1329
|
+
(bidderSettings.standard && bidderSettings.standard.allowZeroCpmBids === true));
|
|
1330
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
window.$$PREBID_GLOBAL$$ = (window.$$PREBID_GLOBAL$$ || {});
|
|
2
|
+
window.$$PREBID_GLOBAL$$.installedModules = (window.$$PREBID_GLOBAL$$.installedModules || []);
|
|
2
3
|
window.$$PREBID_GLOBAL$$.cmd = window.$$PREBID_GLOBAL$$.cmd || [];
|
|
3
4
|
window.$$PREBID_GLOBAL$$.que = window.$$PREBID_GLOBAL$$.que || [];
|
|
@@ -51,9 +51,15 @@ export function enable() {
|
|
|
51
51
|
window.googletag = {
|
|
52
52
|
_slots: [],
|
|
53
53
|
_callbackMap: {},
|
|
54
|
+
_ppid: undefined,
|
|
55
|
+
cmd: [],
|
|
54
56
|
pubads: function () {
|
|
55
57
|
var self = this;
|
|
56
58
|
return {
|
|
59
|
+
setPublisherProvidedId: function (ppid) {
|
|
60
|
+
self._ppid = ppid;
|
|
61
|
+
},
|
|
62
|
+
|
|
57
63
|
getSlots: function () {
|
|
58
64
|
return self._slots;
|
|
59
65
|
},
|