@schibsted/niche-ads
Advanced tools
Comparing version 5.1.9 to 5.2.0
@@ -45,2 +45,6 @@ import type { AdsConfig, Device, EidsConfig, GlimrConfig, LoadAdsArguments, Placement, PlacementConfig, Ppids, WallpaperConfig, invCodeBuilderSignature } from './types'; | ||
initialize: () => Promise<void>; | ||
private _buildPlacementTag; | ||
private _setPlacement; | ||
private _cleanUpPlacements; | ||
private _subscribeToEvents; | ||
loadAds: ({ pageType, keywords, allowlist, blocklist }: LoadAdsArguments) => Promise<void>; | ||
@@ -47,0 +51,0 @@ private _handleLoadAdsReload; |
@@ -112,2 +112,55 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
}); | ||
this._buildPlacementTag = (placementConfig, pageType) => { | ||
const mergedPlacementConfig = Object.assign(Object.assign({}, this._adsConfig.placements.common), placementConfig); | ||
return Object.assign(Object.assign({ invCode: this._invCodeBuilder(placementConfig, this._device, pageType) }, mergedPlacementConfig), { keywords: Object.assign({ 'no-sno-targetid': [placementConfig.targetId], 'no-sno-adformat': placementConfig.adFormat }, mergedPlacementConfig.keywords) }); | ||
}; | ||
this._setPlacement = (placement, placementConfig) => { | ||
this._placements = Object.assign(Object.assign({}, this._placements), { [placementConfig.targetId]: placement }); | ||
this._sendPlacementEvent(placementConfig.targetId, placement, placementConfig); | ||
}; | ||
this._cleanUpPlacements = (placementsConfig) => { | ||
placementsConfig.forEach((placementConfig) => { | ||
if (placementConfig.backfill) { | ||
this._cleanUpPlacements([placementConfig.backfill]); | ||
} | ||
cleanUpPlacement(placementConfig.targetId); | ||
}); | ||
}; | ||
this._subscribeToEvents = (placementConfig, pageType) => { | ||
onEvent(APPNEXUS_EVENT_TYPES.adLoaded, placementConfig.targetId, (data) => { | ||
if (data.source === 'csm') { | ||
this._placementsMediation[placementConfig.targetId] = true; | ||
} | ||
if (this._placementsMediation[placementConfig.targetId] && data.source !== 'csm') { | ||
this._setPlacement(data, placementConfig); | ||
} | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adAvailable, placementConfig.targetId, (data) => { | ||
this._setPlacement(data, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adBadRequest, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adError, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adCollapse, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adNoBid, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
if (placementConfig.backfill) { | ||
const placementTag = this._buildPlacementTag(placementConfig.backfill, pageType); | ||
defineTag(placementTag); | ||
this._subscribeToEvents(placementConfig.backfill, pageType); | ||
loadTags(); | ||
} | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequestFailure, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequested, placementConfig.targetId, () => { | ||
this._setPlacement(undefined, placementConfig); | ||
}); | ||
}; | ||
this.loadAds = ({ pageType, keywords, allowlist, blocklist }) => __awaiter(this, void 0, void 0, function* () { | ||
@@ -170,46 +223,11 @@ var _a, _b, _c, _d, _e; | ||
} | ||
this._placementsConfig.forEach((placementConfig) => { | ||
cleanUpPlacement(placementConfig.targetId); | ||
}); | ||
this._cleanUpPlacements(this._placementsConfig); | ||
this._placementsConfig = newPlacementConfig; | ||
if (((_e = this._placementsConfig) === null || _e === void 0 ? void 0 : _e.length) > 0) { | ||
const placementsConfigsChunks = splitEvery(APPNEXUS_PLACEMENTS_PER_REQUEST_LIMIT, this._placementsConfig); | ||
const setPlacement = (placement, placementConfig) => { | ||
this._placements = Object.assign(Object.assign({}, this._placements), { [placementConfig.targetId]: placement }); | ||
this._sendPlacementEvent(placementConfig.targetId, placement, placementConfig); | ||
}; | ||
placementsConfigsChunks.forEach((placementsConfigChunk) => { | ||
placementsConfigChunk.forEach((placementConfig) => { | ||
const mergedPlacementConfig = Object.assign(Object.assign({}, this._adsConfig.placements.common), placementConfig); | ||
const placementTag = Object.assign(Object.assign({ invCode: this._invCodeBuilder(placementConfig, this._device, pageType) }, mergedPlacementConfig), { keywords: Object.assign({ 'no-sno-targetid': [placementConfig.targetId], 'no-sno-adformat': placementConfig.adFormat }, mergedPlacementConfig.keywords) }); | ||
const placementTag = this._buildPlacementTag(placementConfig, pageType); | ||
defineTag(placementTag); | ||
onEvent(APPNEXUS_EVENT_TYPES.adLoaded, placementConfig.targetId, (data) => { | ||
if (data.source === 'csm') { | ||
this._placementsMediation[placementConfig.targetId] = true; | ||
} | ||
if (this._placementsMediation[placementConfig.targetId] && data.source !== 'csm') { | ||
setPlacement(data, placementConfig); | ||
} | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adAvailable, placementConfig.targetId, (data) => { | ||
setPlacement(data, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adBadRequest, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adError, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adCollapse, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adNoBid, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequestFailure, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequested, placementConfig.targetId, () => { | ||
setPlacement(undefined, placementConfig); | ||
}); | ||
this._subscribeToEvents(placementConfig, pageType); | ||
}); | ||
@@ -216,0 +234,0 @@ loadTags(); |
@@ -36,2 +36,3 @@ export declare enum Device { | ||
keywords?: Keywords; | ||
backfill?: PlacementConfig; | ||
}; | ||
@@ -38,0 +39,0 @@ export type AppnexusPlacement = Partial<{ |
@@ -7,9 +7,17 @@ import { useEffect, useMemo, useState } from 'react'; | ||
useEffect(() => { | ||
const backfillTargetIds = []; | ||
const listener = (e) => { | ||
const data = e.detail; | ||
setPlacement(data.placement); | ||
// placementConfig doesn't change so we save some computation not sending it when clearing placements | ||
if (data.placementConfig) { | ||
setPlacementConfig(data.placementConfig); | ||
const placementConfig = data.placementConfig; | ||
if (data.placement === null && (placementConfig === null || placementConfig === void 0 ? void 0 : placementConfig.backfill)) { | ||
backfillTargetIds.push(placementConfig.backfill.targetId); | ||
adsInstance.eventTarget.addEventListener(placementConfig.backfill.targetId, listener); | ||
} | ||
else { | ||
setPlacement(data.placement); | ||
// placementConfig doesn't change so we save some computation not sending it when clearing placements | ||
if (placementConfig) { | ||
setPlacementConfig(placementConfig); | ||
} | ||
} | ||
}; | ||
@@ -21,2 +29,5 @@ const data = adsInstance.getPlacement(targetId); | ||
adsInstance.eventTarget.removeEventListener(targetId, listener); | ||
backfillTargetIds.forEach((backfillTargetId) => { | ||
adsInstance.eventTarget.removeEventListener(backfillTargetId, listener); | ||
}); | ||
}; | ||
@@ -23,0 +34,0 @@ }, [adsInstance, targetId]); |
{ | ||
"name": "@schibsted/niche-ads", | ||
"version": "5.1.9", | ||
"version": "5.2.0", | ||
"description": "Package containing ads logic reappearing across our projects", | ||
@@ -30,3 +30,3 @@ "main": "lib/index.js", | ||
}, | ||
"gitHead": "8d1c4ab6c38665305a7daecf4051a2d0179dac43" | ||
"gitHead": "637b12b4fe671f42ea1611886ac259d5a7c6bce5" | ||
} |
116
src/Ads.ts
@@ -212,2 +212,67 @@ import { script, eventTarget } from '@schibsted/niche-utils'; | ||
private _buildPlacementTag = (placementConfig: PlacementConfig, pageType: PageType) => { | ||
const mergedPlacementConfig = { ...this._adsConfig.placements.common, ...placementConfig }; | ||
return { | ||
invCode: this._invCodeBuilder(placementConfig, this._device as Device, pageType), | ||
...mergedPlacementConfig, | ||
keywords: { | ||
'no-sno-targetid': [placementConfig.targetId], | ||
'no-sno-adformat': placementConfig.adFormat, | ||
...mergedPlacementConfig.keywords, | ||
}, | ||
}; | ||
}; | ||
private _setPlacement = (placement: Placement, placementConfig: PlacementConfig) => { | ||
this._placements = { ...this._placements, [placementConfig.targetId]: placement }; | ||
this._sendPlacementEvent(placementConfig.targetId, placement, placementConfig); | ||
}; | ||
private _cleanUpPlacements = (placementsConfig: PlacementConfig[]) => { | ||
placementsConfig.forEach((placementConfig) => { | ||
if (placementConfig.backfill) { | ||
this._cleanUpPlacements([placementConfig.backfill]); | ||
} | ||
cleanUpPlacement(placementConfig.targetId); | ||
}); | ||
}; | ||
private _subscribeToEvents = (placementConfig: PlacementConfig, pageType: PageType) => { | ||
onEvent(APPNEXUS_EVENT_TYPES.adLoaded, placementConfig.targetId, (data: AppnexusPlacement) => { | ||
if (data.source === 'csm') { | ||
this._placementsMediation[placementConfig.targetId] = true; | ||
} | ||
if (this._placementsMediation[placementConfig.targetId] && data.source !== 'csm') { | ||
this._setPlacement(data, placementConfig); | ||
} | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adAvailable, placementConfig.targetId, (data: AppnexusPlacement) => { | ||
this._setPlacement(data, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adBadRequest, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adError, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adCollapse, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adNoBid, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
if (placementConfig.backfill) { | ||
const placementTag = this._buildPlacementTag(placementConfig.backfill, pageType); | ||
defineTag(placementTag); | ||
this._subscribeToEvents(placementConfig.backfill, pageType); | ||
loadTags(); | ||
} | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequestFailure, placementConfig.targetId, () => { | ||
this._setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequested, placementConfig.targetId, () => { | ||
this._setPlacement(undefined, placementConfig); | ||
}); | ||
}; | ||
loadAds = async ({ pageType, keywords, allowlist, blocklist }: LoadAdsArguments) => { | ||
@@ -295,5 +360,3 @@ this._hasClearPlacementsBeenCalledLast = false; | ||
this._placementsConfig.forEach((placementConfig) => { | ||
cleanUpPlacement(placementConfig.targetId); | ||
}); | ||
this._cleanUpPlacements(this._placementsConfig); | ||
@@ -305,50 +368,7 @@ this._placementsConfig = newPlacementConfig; | ||
const setPlacement = (placement: Placement, placementConfig: PlacementConfig) => { | ||
this._placements = { ...this._placements, [placementConfig.targetId]: placement }; | ||
this._sendPlacementEvent(placementConfig.targetId, placement, placementConfig); | ||
}; | ||
placementsConfigsChunks.forEach((placementsConfigChunk: PlacementConfig[]) => { | ||
placementsConfigChunk.forEach((placementConfig: PlacementConfig) => { | ||
const mergedPlacementConfig = { ...this._adsConfig.placements.common, ...placementConfig }; | ||
const placementTag = { | ||
invCode: this._invCodeBuilder(placementConfig, this._device as Device, pageType), | ||
...mergedPlacementConfig, | ||
keywords: { | ||
'no-sno-targetid': [placementConfig.targetId], | ||
'no-sno-adformat': placementConfig.adFormat, | ||
...mergedPlacementConfig.keywords, | ||
}, | ||
}; | ||
const placementTag = this._buildPlacementTag(placementConfig, pageType); | ||
defineTag(placementTag); | ||
onEvent(APPNEXUS_EVENT_TYPES.adLoaded, placementConfig.targetId, (data: AppnexusPlacement) => { | ||
if (data.source === 'csm') { | ||
this._placementsMediation[placementConfig.targetId] = true; | ||
} | ||
if (this._placementsMediation[placementConfig.targetId] && data.source !== 'csm') { | ||
setPlacement(data, placementConfig); | ||
} | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adAvailable, placementConfig.targetId, (data: AppnexusPlacement) => { | ||
setPlacement(data, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adBadRequest, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adError, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adCollapse, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adNoBid, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequestFailure, placementConfig.targetId, () => { | ||
setPlacement(null, placementConfig); | ||
}); | ||
onEvent(APPNEXUS_EVENT_TYPES.adRequested, placementConfig.targetId, () => { | ||
setPlacement(undefined, placementConfig); | ||
}); | ||
this._subscribeToEvents(placementConfig, pageType); | ||
}); | ||
@@ -355,0 +375,0 @@ loadTags(); |
@@ -40,2 +40,3 @@ export enum Device { | ||
keywords?: Keywords; | ||
backfill?: PlacementConfig; | ||
}; | ||
@@ -42,0 +43,0 @@ |
@@ -12,9 +12,17 @@ import { useEffect, useMemo, useState } from 'react'; | ||
useEffect(() => { | ||
const backfillTargetIds: string[] = []; | ||
const listener = (e: Event) => { | ||
const data = (e as CustomEvent).detail; | ||
setPlacement(data.placement); | ||
const placementConfig: PlacementConfig | undefined = data.placementConfig; | ||
// placementConfig doesn't change so we save some computation not sending it when clearing placements | ||
if (data.placementConfig) { | ||
setPlacementConfig(data.placementConfig); | ||
if (data.placement === null && placementConfig?.backfill) { | ||
backfillTargetIds.push(placementConfig.backfill.targetId); | ||
adsInstance.eventTarget.addEventListener(placementConfig.backfill.targetId, listener); | ||
} else { | ||
setPlacement(data.placement); | ||
// placementConfig doesn't change so we save some computation not sending it when clearing placements | ||
if (placementConfig) { | ||
setPlacementConfig(placementConfig); | ||
} | ||
} | ||
@@ -30,2 +38,5 @@ }; | ||
adsInstance.eventTarget.removeEventListener(targetId, listener); | ||
backfillTargetIds.forEach((backfillTargetId) => { | ||
adsInstance.eventTarget.removeEventListener(backfillTargetId, listener); | ||
}); | ||
}; | ||
@@ -32,0 +43,0 @@ }, [adsInstance, targetId]); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
64460
1356