@surfside/ads-core-client 0.1.0 → 0.1.1
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/README.md +15 -15
- package/lib/cjs/helpers/index.js +18 -0
- package/lib/cjs/helpers/index.js.map +1 -0
- package/lib/cjs/helpers/response/Banner.js +107 -0
- package/lib/cjs/helpers/response/Banner.js.map +1 -0
- package/lib/cjs/helpers/response/BuildAll.js +43 -0
- package/lib/cjs/helpers/response/BuildAll.js.map +1 -0
- package/lib/cjs/helpers/response/Dynamic.js +122 -0
- package/lib/cjs/helpers/response/Dynamic.js.map +1 -0
- package/lib/cjs/helpers/response/Video.js +383 -0
- package/lib/cjs/helpers/response/Video.js.map +1 -0
- package/lib/cjs/helpers/response/index.js +21 -0
- package/lib/cjs/helpers/response/index.js.map +1 -0
- package/lib/cjs/index.js +119 -4193
- package/lib/cjs/index.js.map +1 -0
- package/lib/esm/helpers/index.js +2 -0
- package/lib/esm/helpers/index.js.map +1 -0
- package/lib/esm/helpers/response/Banner.js +101 -0
- package/lib/esm/helpers/response/Banner.js.map +1 -0
- package/lib/esm/helpers/response/BuildAll.js +38 -0
- package/lib/esm/helpers/response/BuildAll.js.map +1 -0
- package/lib/esm/helpers/response/Dynamic.js +117 -0
- package/lib/esm/helpers/response/Dynamic.js.map +1 -0
- package/lib/esm/helpers/response/Video.js +371 -0
- package/lib/esm/helpers/response/Video.js.map +1 -0
- package/lib/esm/helpers/response/index.js +5 -0
- package/lib/esm/helpers/response/index.js.map +1 -0
- package/lib/esm/index.js +97 -4159
- package/lib/esm/index.js.map +1 -0
- package/package.json +34 -26
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { BuildClickthroughUrl, Ctx, Err, GetValue, MissingAdmError, Ok } from '@surfside/ads-core';
|
|
2
|
+
export const BuildBannerResponse = (logger, windowInfo, config, bid) => {
|
|
3
|
+
const log = Ctx(logger)?.with('BuildBannerResponse');
|
|
4
|
+
log?.info('Building banner response');
|
|
5
|
+
log?.debug(bid);
|
|
6
|
+
const adm = bid?.adm;
|
|
7
|
+
if (adm === undefined || adm === null) {
|
|
8
|
+
return Err(new MissingAdmError(bid ?? null));
|
|
9
|
+
}
|
|
10
|
+
const parser = new DOMParser();
|
|
11
|
+
const admDoc = parser.parseFromString(adm, 'text/html');
|
|
12
|
+
const dataTag = admDoc.getElementById('surf-product-info');
|
|
13
|
+
admDoc.childNodes.forEach(child => log?.debug(child.outerHTML));
|
|
14
|
+
const productData = getProductInfoFromDivTag(log, dataTag, bid);
|
|
15
|
+
const clickthrough = buildBidderClickCallback(log, windowInfo, config, GetValue(productData), admDoc);
|
|
16
|
+
if (!clickthrough.ok) {
|
|
17
|
+
log?.error('Failed to build banner', clickthrough.error);
|
|
18
|
+
return clickthrough;
|
|
19
|
+
}
|
|
20
|
+
const serializer = new XMLSerializer();
|
|
21
|
+
const html = serializer.serializeToString(admDoc);
|
|
22
|
+
return Ok({
|
|
23
|
+
type: 'banner',
|
|
24
|
+
adm: html,
|
|
25
|
+
clickthrough: clickthrough.value,
|
|
26
|
+
bid
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const buildBidderClickCallback = (logger, windowInfo, configuration, productData, document) => {
|
|
30
|
+
const log = Ctx(logger)?.with('buildBidderClickCallback');
|
|
31
|
+
log?.info('Building bidder click callback');
|
|
32
|
+
const bidderClickCallbackUrlAnchors = document.querySelectorAll('a[href*=\\{SURF_COMMERCE_URL\\}]');
|
|
33
|
+
if (bidderClickCallbackUrlAnchors.length > 0) {
|
|
34
|
+
if (productData === undefined) {
|
|
35
|
+
log?.error('The banner had {SURF_COMMERCE_URL} in its clickthrough link, so it is expecting a rendered ' +
|
|
36
|
+
'clickthrough URL, but there was no product info provided. Therefore, the banner cannot be rendered, ' +
|
|
37
|
+
'or else it might redirect to an invalid page');
|
|
38
|
+
return Err(new MissingProductInfoError);
|
|
39
|
+
}
|
|
40
|
+
const clickthrough = BuildClickthroughUrl(log, windowInfo, configuration, productData // destructure in case it's undefined. ProductInfo has no required fields
|
|
41
|
+
);
|
|
42
|
+
if (clickthrough.ok === false) {
|
|
43
|
+
log?.error('The banner had {SURF_COMMERCE_URL} in its clickthrough link, so it is expecting a rendered ' +
|
|
44
|
+
'clickthrough URL, but the clickthrough failed to render. Therefore, the banner cannot be rendered, ' +
|
|
45
|
+
'or else it might redirect to an invalid page', clickthrough.error);
|
|
46
|
+
return clickthrough; // Error Result
|
|
47
|
+
}
|
|
48
|
+
bidderClickCallbackUrlAnchors.forEach(a => {
|
|
49
|
+
const href = a.getAttribute('href');
|
|
50
|
+
if (href === null) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const finalClick = href.replace('{SURF_COMMERCE_URL}', clickthrough.value);
|
|
54
|
+
a.setAttribute('href', finalClick);
|
|
55
|
+
});
|
|
56
|
+
return Ok(clickthrough.value);
|
|
57
|
+
}
|
|
58
|
+
return Ok(undefined);
|
|
59
|
+
};
|
|
60
|
+
export const getProductInfoFromDivTag = (logger, div, bid) => {
|
|
61
|
+
const log = Ctx(logger)?.with('getProductInfoFromDivTag');
|
|
62
|
+
log?.info('Getting product info for banner');
|
|
63
|
+
if (div === null) {
|
|
64
|
+
log?.warn('No product data for banner in div tag');
|
|
65
|
+
return Err(new MissingProductInfoError);
|
|
66
|
+
}
|
|
67
|
+
const { image, price, saleprice, thc, strain, cbd, name, brandname, producttype, details, cta, clickthroughurl, winurl, pixelurl, } = div.dataset;
|
|
68
|
+
log?.debug('Brand Name:' + brandname + '\nProduct Type' + producttype);
|
|
69
|
+
if (brandname === undefined) {
|
|
70
|
+
log?.warn('Missing brand name field in banner creative. The brand name was probably not set on the banner. ' +
|
|
71
|
+
'Technically, this isn\'t an *error*, but almost all banner creatives rely on brand info, so the ' +
|
|
72
|
+
'banner probably isn\'t working. CHECK THE CREATIVE. Banner ID is: ' + bid.crid);
|
|
73
|
+
}
|
|
74
|
+
const productData = {
|
|
75
|
+
image,
|
|
76
|
+
price,
|
|
77
|
+
salePrice: saleprice,
|
|
78
|
+
thc,
|
|
79
|
+
strain,
|
|
80
|
+
cbd,
|
|
81
|
+
name,
|
|
82
|
+
brand_name: brandname,
|
|
83
|
+
brandName: brandname,
|
|
84
|
+
productType: producttype,
|
|
85
|
+
details,
|
|
86
|
+
cta,
|
|
87
|
+
clickthroughUrl: clickthroughurl,
|
|
88
|
+
winurl,
|
|
89
|
+
pixelurl
|
|
90
|
+
};
|
|
91
|
+
if (Object.keys(productData).length === 0) {
|
|
92
|
+
return Err(new MissingProductInfoError());
|
|
93
|
+
}
|
|
94
|
+
return Ok(productData);
|
|
95
|
+
};
|
|
96
|
+
export class MissingProductInfoError extends Error {
|
|
97
|
+
constructor() {
|
|
98
|
+
super('Missing product info in banner');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=Banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Banner.js","sourceRoot":"src/","sources":["helpers/response/Banner.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,GAAG,EACH,GAAG,EACH,QAAQ,EAOR,eAAe,EACf,EAAE,EAEL,MAAM,oBAAoB,CAAC;AAI5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,MAA2B,EAC3B,UAAyC,EACzC,MAAuC,EACvC,GAAS,EACmB,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrD,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACtC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC;IACrB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAE,KAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,wBAAwB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IACtG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACnB,GAAG,EAAE,KAAK,CAAC,wBAAwB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAElD,OAAO,EAAE,CAAC;QACN,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,IAAI;QACT,YAAY,EAAE,YAAY,CAAC,KAAK;QAChC,GAAG;KACN,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,MAA2B,EAC3B,UAAyC,EACzC,aAA8C,EAC9C,WAA4C,EAC5C,QAAkB,EACQ,EAAE;IAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1D,GAAG,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC5C,MAAM,6BAA6B,GAAG,QAAQ,CAAC,gBAAgB,CAAC,kCAAkC,CAAC,CAAC;IACpG,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,GAAG,EAAE,KAAK,CACN,6FAA6F;gBAC7F,sGAAsG;gBACtG,8CAA8C,CACjD,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,uBAAuB,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,YAAY,GAAG,oBAAoB,CACrC,GAAG,EAAE,UAAU,EACf,aAAa,EACb,WAAW,CAAC,yEAAyE;SACxF,CAAC;QACF,IAAI,YAAY,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC5B,GAAG,EAAE,KAAK,CACN,6FAA6F;gBAC7F,qGAAqG;gBACrG,8CAA8C,EAC9C,YAAY,CAAC,KAAK,CACrB,CAAC;YACF,OAAO,YAAY,CAAC,CAAC,eAAe;QACxC,CAAC;QACD,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChB,OAAO;YACX,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACpC,MAA2B,EAC3B,GAAuB,EACvB,GAAS,EACmB,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1D,GAAG,EAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,GAAG,EAAE,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC,IAAI,uBAAuB,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,EACF,KAAK,EACL,KAAK,EACL,SAAS,EACT,GAAG,EACH,MAAM,EACN,GAAG,EACH,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,GAAG,EACH,eAAe,EACf,MAAM,EACN,QAAQ,GACX,GAAG,GAAG,CAAC,OAAO,CAAC;IAChB,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAAC;IAEvE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,GAAG,EAAE,IAAI,CACL,kGAAkG;YAClG,kGAAkG;YAClG,oEAAoE,GAAG,GAAG,CAAC,IAAI,CAClF,CAAC;IACN,CAAC;IAED,MAAM,WAAW,GAAG;QAChB,KAAK;QACL,KAAK;QACL,SAAS,EAAE,SAAS;QACpB,GAAG;QACH,MAAM;QACN,GAAG;QACH,IAAI;QACJ,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,WAAW;QACxB,OAAO;QACP,GAAG;QACH,eAAe,EAAE,eAAe;QAChC,MAAM;QACN,QAAQ;KACX,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9C;QACI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC5C,CAAC;CACJ"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AllOrNone, Ctx, GetValue, Ok, ValueOr } from '@surfside/ads-core';
|
|
2
|
+
export const BuildAllResponses = async (logger, buildBannerResponse, buildVideoResponse, buildAllProductCardResponses, request, response) => {
|
|
3
|
+
const log = Ctx(logger)?.with('BuildAllResponses');
|
|
4
|
+
log?.info('Building all bid responses');
|
|
5
|
+
log?.debug(request, response);
|
|
6
|
+
const bannerRequestIds = request.imp.filter(imp => imp.banner !== undefined).map(imp => imp.id);
|
|
7
|
+
const videoRequestIds = request.imp.filter(imp => imp.video !== undefined).map(imp => imp.id);
|
|
8
|
+
const nativeRequestIds = request.imp.filter(imp => imp.native !== undefined).map(imp => imp.id);
|
|
9
|
+
log?.debug(bannerRequestIds, videoRequestIds, nativeRequestIds);
|
|
10
|
+
const bannerBids = response.seatbid?.[0]?.bid.filter(bid => bannerRequestIds.includes(bid.impid)) ?? [];
|
|
11
|
+
const videoBids = response.seatbid?.[0]?.bid.filter(bid => videoRequestIds.includes(bid.impid)) ?? [];
|
|
12
|
+
const nativeBids = response.seatbid?.[0]?.bid.filter(bid => nativeRequestIds.includes(bid.impid)) ?? [];
|
|
13
|
+
log?.debug(bannerBids, videoBids, nativeBids);
|
|
14
|
+
return Ok({
|
|
15
|
+
banners: ValueOr(AllOrNone(bannerBids.map(buildBannerResponse)), []),
|
|
16
|
+
videos: ValueOr(AllOrNone(videoBids.map(buildVideoResponse)), []),
|
|
17
|
+
productCards: ValueOr(await buildAllProductCardResponses(nativeBids), [])
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
export const GenerateAllResponses = async (logger, buildBannerResponse, buildVideoResponse, buildProductCard, request, response) => {
|
|
21
|
+
const log = Ctx(logger)?.with('GenerateAllResponses');
|
|
22
|
+
log?.info('Generating all responses');
|
|
23
|
+
log?.debug(request, response);
|
|
24
|
+
const bannerRequestIds = request.imp.filter(imp => imp.banner !== undefined).map(imp => imp.id);
|
|
25
|
+
const videoRequestIds = request.imp.filter(imp => imp.video !== undefined).map(imp => imp.id);
|
|
26
|
+
const nativeRequestIds = request.imp.filter(imp => imp.native !== undefined).map(imp => imp.id);
|
|
27
|
+
log?.debug(bannerRequestIds, videoRequestIds, nativeRequestIds);
|
|
28
|
+
const bannerBids = response.seatbid?.[0]?.bid.filter(bid => bannerRequestIds.includes(bid.impid)) ?? [];
|
|
29
|
+
const videoBids = response.seatbid?.[0]?.bid.filter(bid => videoRequestIds.includes(bid.impid)) ?? [];
|
|
30
|
+
const nativeBids = response.seatbid?.[0]?.bid.filter(bid => nativeRequestIds.includes(bid.impid)) ?? [];
|
|
31
|
+
log?.debug(bannerBids, videoBids, nativeBids);
|
|
32
|
+
return Ok({
|
|
33
|
+
banners: ValueOr(AllOrNone(bannerBids.map(buildBannerResponse)), []),
|
|
34
|
+
videos: ValueOr(AllOrNone(videoBids.map(buildVideoResponse)), []),
|
|
35
|
+
productCards: GetValue(await buildProductCard(nativeBids))
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=BuildAll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildAll.js","sourceRoot":"src/","sources":["helpers/response/BuildAll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Ctx, Err, MissingBidsError, ConsumeNAsync, TryDoAsync, GetValueOrThrow, GetValue, Ok } from '@surfside/ads-core';
|
|
2
|
+
export const BuildDynamicResponse = async (logger, requestBids, buildBannerResponse, buildVideoResponse, buildHybridCarousel, buildSponsoredCarousel, buildRecommendedCarousel, buildAllSponsoredProductCardResponses, dynamicRequest) => {
|
|
3
|
+
const log = Ctx(logger)?.with('BuildDynamicResponse');
|
|
4
|
+
log?.info('Building dynamic response');
|
|
5
|
+
log?.debug(dynamicRequest);
|
|
6
|
+
const bidderResult = await requestBids(dynamicRequest.request);
|
|
7
|
+
if (!bidderResult.ok) {
|
|
8
|
+
return bidderResult;
|
|
9
|
+
}
|
|
10
|
+
const bids = bidderResult.value.seatbid?.[0]?.bid;
|
|
11
|
+
log?.debug('bids', bids);
|
|
12
|
+
if (bids === undefined) {
|
|
13
|
+
return Err(new MissingBidsError);
|
|
14
|
+
}
|
|
15
|
+
for (const id in dynamicRequest.requestIds) {
|
|
16
|
+
const creative = dynamicRequest.requestIds[id];
|
|
17
|
+
const bid = bids.filter(bid => bid.impid === id)[0];
|
|
18
|
+
if (bid === undefined) {
|
|
19
|
+
log?.debug('No bid for id', id);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const builtCreative = GetValue(await TryDoAsync(async () => {
|
|
23
|
+
switch (creative.type) {
|
|
24
|
+
case 'Banner': {
|
|
25
|
+
return {
|
|
26
|
+
...GetValueOrThrow(buildBannerResponse(bid)),
|
|
27
|
+
dynamicBannerRequest: creative
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
case 'Video': {
|
|
31
|
+
return {
|
|
32
|
+
...GetValueOrThrow(buildVideoResponse(bid)),
|
|
33
|
+
dynamicVideoRequest: creative
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
case 'Carousel': {
|
|
37
|
+
const carousel = creative;
|
|
38
|
+
switch (carousel.strategy) {
|
|
39
|
+
case 'hybrid': {
|
|
40
|
+
const hybrid = GetValueOrThrow(buildHybridCarousel({
|
|
41
|
+
type: carousel.recommendation ?? 'top-products'
|
|
42
|
+
}, dynamicRequest.request, bid));
|
|
43
|
+
const generator = hybrid.getProduct();
|
|
44
|
+
const [product] = await ConsumeNAsync(generator, 1);
|
|
45
|
+
if (product.length === 1) {
|
|
46
|
+
// Success!
|
|
47
|
+
return {
|
|
48
|
+
type: 'carousel',
|
|
49
|
+
getProduct: async function* wrappedGenerator() {
|
|
50
|
+
yield product[0];
|
|
51
|
+
yield* generator;
|
|
52
|
+
},
|
|
53
|
+
bid,
|
|
54
|
+
dynamicCarouselRequest: carousel
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
throw new Error('No inventory in carousel. Skipping');
|
|
58
|
+
}
|
|
59
|
+
case 'recommended': {
|
|
60
|
+
return {
|
|
61
|
+
...GetValueOrThrow(buildRecommendedCarousel({
|
|
62
|
+
type: carousel.recommendation ?? 'top-products'
|
|
63
|
+
})),
|
|
64
|
+
dynamicCarouselRequest: carousel
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
case 'sponsored': {
|
|
68
|
+
const sponsored = GetValueOrThrow(buildSponsoredCarousel(dynamicRequest.request, bid));
|
|
69
|
+
const generator = sponsored.getProduct();
|
|
70
|
+
const [product] = await ConsumeNAsync(generator, 1);
|
|
71
|
+
if (product.length === 1) {
|
|
72
|
+
// Success!
|
|
73
|
+
return {
|
|
74
|
+
type: 'carousel',
|
|
75
|
+
getProduct: async function* wrappedGenerator() {
|
|
76
|
+
yield product[0];
|
|
77
|
+
yield* generator;
|
|
78
|
+
},
|
|
79
|
+
bid,
|
|
80
|
+
dynamicCarouselRequest: carousel
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
throw new Error('No inventory in carousel. Skipping');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
throw new Error('Malformed carousel configuration. Skipping');
|
|
87
|
+
}
|
|
88
|
+
case 'ProductCard': {
|
|
89
|
+
const value = GetValueOrThrow(await buildAllSponsoredProductCardResponses([bid]));
|
|
90
|
+
if (value.length === 0) {
|
|
91
|
+
throw new Error('No inventory for product card');
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
...value[0],
|
|
95
|
+
dynamicProductCardRequest: creative
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
throw new Error('Malformed creative. Skipping');
|
|
100
|
+
}));
|
|
101
|
+
if (builtCreative === undefined) {
|
|
102
|
+
log?.debug('No inventory or error on creative. Skipping');
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
return Ok(builtCreative);
|
|
106
|
+
}
|
|
107
|
+
return Err(new NoDynamicAdsAvailableError(dynamicRequest));
|
|
108
|
+
};
|
|
109
|
+
export class NoDynamicAdsAvailableError extends Error {
|
|
110
|
+
dynamicRequest;
|
|
111
|
+
constructor(dynamicRequest) {
|
|
112
|
+
super('No dynamic ads available');
|
|
113
|
+
this.dynamicRequest = dynamicRequest;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
;
|
|
117
|
+
//# sourceMappingURL=Dynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dynamic.js","sourceRoot":"src/","sources":["helpers/response/Dynamic.ts"],"names":[],"mappings":"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"}
|