diff options
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/common/search/search-ads-odml.js')
| -rw-r--r-- | node_modules/@jet-app/app-store/tmp/src/common/search/search-ads-odml.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/search-ads-odml.js b/node_modules/@jet-app/app-store/tmp/src/common/search/search-ads-odml.js new file mode 100644 index 0000000..aedcef1 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/search-ads-odml.js @@ -0,0 +1,87 @@ +/** + * Implements the ODML Treatment (On-device machine learning) for Sponsored search. + */ +"use strict"; +import { adLogger } from "../../common/search/search-ads"; +import { isNull, isNullOrEmpty } from "../../foundation/json-parsing/server-data"; +import { shallowCopyOf } from "../../foundation/util/objects"; +import { decorateAdInstanceIdOnData } from "../ads/ad-common"; +import { productVariantDataForData, productVariantIDForVariantData } from "../product-page/product-page-variants"; +// region exports +/** + * Merge the contents of the raw response with the data in `advertData` from `SearchAds.framework` + * + * @param rawAdverts The adverts returned in the network response. + * @param nativeAdvertData The advert data that was returned from native. + */ +export function applyNativeAdvertData(objectGraph, rawAdverts, nativeAdvertData) { + if (isNull(nativeAdvertData)) { + return rawAdverts; // even if `nativeAdvertData` may contain error, we need to perform apply to merge instance ids. + } + const updated = []; + const rawAdvertsMap = rawAdverts.reduce((acc, data) => ({ ...acc, [data.id]: data }), {}); + for (const nativeAdData of nativeAdvertData.adverts) { + const rawAd = rawAdvertsMap[nativeAdData.adamId]; + if (isNullOrEmpty(rawAd)) { + adLogger(objectGraph, `[${nativeAdData.adamId}] skipped - Data was not part of original response`); + continue; + } + if (isNullOrEmpty(rawAd.attributes)) { + adLogger(objectGraph, `[${rawAd.id}] skipped - Data is missing attributes`); + continue; + } + const newAd = createCopyWithNativeData(objectGraph, rawAd, nativeAdData); + updated.push(newAd); + } + if (!preprocessor.PRODUCTION_BUILD) { + const rawOrder = rawAdverts.map((ad) => ad.id).join(" "); + const updatedOrder = updated.map((ad) => ad.id).join(" "); + adLogger(objectGraph, `applyNativeAdvertData: [${rawOrder}] => [${updatedOrder}]`); + } + return updated; +} +/** + * Returns whether or not ODML treatment was successful + */ +export function wasODMLSuccessful(objectGraph, nativeAdvertData) { + return nativeAdvertData && nativeAdvertData.odmlSuccess; +} +// endregion +// region internals +/** + * Create a copy of `ad` with the `adData` replacing the "iad" attribute. + * @param ad The raw ad to copy + * @param adData The ad blob to overrwite wth. + */ +function createCopyWithNativeData(objectGraph, ad, nativeAdData) { + const copy = shallowCopyOf(ad); + const attributes = shallowCopyOf(ad.attributes); + attributes["iads"] = nativeAdData.adData; + copy.attributes = attributes; + overrideCustomProductPageIdIfRequired(objectGraph, copy, nativeAdData); + decorateAdInstanceIdOnData(objectGraph, copy, nativeAdData.instanceId); + return copy; +} +/** + * Modifies an `ad` by overriding the `ppid` value if native ODML has dictated a new selection. + * Note: This may intentionally replace the `ppid` value with `null` if CPP is disabled for Search Ads. + * If we pass native all `null` values for ODML processing (because the feature is disabled in the bag), + * we expect to receive `null` back and insert `null` into the `ad` here. + * @param ad The ad to modify. + * @param adData The ad blob to overrwite with. + */ +function overrideCustomProductPageIdIfRequired(objectGraph, ad, nativeAdData) { + var _a; + const productVariantData = productVariantDataForData(objectGraph, ad); + const productVariantId = productVariantIDForVariantData(productVariantData); + // If there is a "selected" cppId, and it's different to the `serverCppId`, native has made a new selection. + // Confirm we have a cppData of meta to modify + if (nativeAdData.selectedCppId === productVariantId || isNullOrEmpty((_a = ad === null || ad === void 0 ? void 0 : ad.meta) === null || _a === void 0 ? void 0 : _a.cppData)) { + return; + } + // Modify the meta data with the new selection. + const meta = shallowCopyOf(ad.meta); + meta.cppData["ppid"] = nativeAdData.selectedCppId; + ad.meta = meta; +} +//# sourceMappingURL=search-ads-odml.js.map
\ No newline at end of file |
