rich-relevance.js (6364B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 /** 8 * Bug 1713725 - Shim Rich Relevance personalized shopping 9 * 10 * Sites may expect the Rich Relevance personalized shopping API to load, 11 * breaking if it is blocked. This shim attempts to limit breakage on those 12 * site to just the personalized shopping aspects, by stubbing out the APIs. 13 */ 14 15 if (!window.r3_common) { 16 const jsonCallback = window.RR?.jsonCallback; 17 const defaultCallback = window.RR?.defaultCallback; 18 19 const getRandomString = (l = 66) => { 20 const v = crypto.getRandomValues(new Uint8Array(l)); 21 const s = Array.from(v, c => c.toString(16)).join(""); 22 return s.slice(0, l); 23 }; 24 25 const call = (fn, ...args) => { 26 if (typeof fn === "function") { 27 try { 28 fn(...args); 29 } catch (e) { 30 console.error(e); 31 } 32 } 33 }; 34 35 class r3_generic { 36 type = "GENERIC"; 37 createScript() {} 38 destroy() {} 39 } 40 41 class r3_addtocart extends r3_generic { 42 type = "ADDTOCART"; 43 addItemIdToCart() {} 44 } 45 46 class r3_addtoregistry extends r3_generic { 47 type = "ADDTOREGISTRY"; 48 addItemIdCentsQuantity() {} 49 } 50 51 class r3_brand extends r3_generic { 52 type = "BRAND"; 53 } 54 55 class r3_cart extends r3_generic { 56 type = "CART"; 57 addItemId() {} 58 addItemIdCentsQuantity() {} 59 addItemIdDollarsAndCentsQuantity() {} 60 addItemIdPriceQuantity() {} 61 } 62 63 class r3_category extends r3_generic { 64 type = "CATEGORY"; 65 addItemId() {} 66 setId() {} 67 setName() {} 68 setParentId() {} 69 setTopName() {} 70 } 71 72 class r3_common extends r3_generic { 73 type = "COMMON"; 74 baseUrl = "https://recs.richrelevance.com/rrserver/"; 75 devFlags = {}; 76 jsFileName = "p13n_generated.js"; 77 RICHSORT = { 78 paginate() {}, 79 filterPrice() {}, 80 filterAttribute() {}, 81 }; 82 addCategoryHintId() {} 83 addClickthruParams() {} 84 addContext() {} 85 addFilter() {} 86 addFilterBrand() {} 87 addFilterCategory() {} 88 addItemId() {} 89 addItemIdToCart() {} 90 addPlacementType() {} 91 addRefinement() {} 92 addSearchTerm() {} 93 addSegment() {} 94 blockItemId() {} 95 enableCfrad() {} 96 enableRad() {} 97 forceDebugMode() {} 98 forceDevMode() {} 99 forceDisplayMode() {} 100 forceLocale() {} 101 initFromParams() {} 102 setApiKey() {} 103 setBaseUrl() {} 104 setCartValue() {} 105 setChannel() {} 106 setClickthruServer() {} 107 setCurrency() {} 108 setDeviceId() {} 109 setFilterBrandsIncludeMatchingElements() {} 110 setForcedTreatment() {} 111 setImageServer() {} 112 setLanguage() {} 113 setMVTForcedTreatment() {} 114 setNoCookieMode() {} 115 setPageBrand() {} 116 setPrivateMode() {} 117 setRefinementFallback() {} 118 setRegionId() {} 119 setRegistryId() {} 120 setRegistryType() {} 121 setSessionId() {} 122 setUserId() {} 123 useDummyData() {} 124 } 125 126 class r3_error extends r3_generic { 127 type = "ERROR"; 128 } 129 130 class r3_home extends r3_generic { 131 type = "HOME"; 132 } 133 134 class r3_item extends r3_generic { 135 type = "ITEM"; 136 addAttribute() {} 137 addCategory() {} 138 addCategoryId() {} 139 setBrand() {} 140 setEndDate() {} 141 setId() {} 142 setImageId() {} 143 setLinkId() {} 144 setName() {} 145 setPrice() {} 146 setRating() {} 147 setRecommendable() {} 148 setReleaseDate() {} 149 setSalePrice() {} 150 } 151 152 class r3_personal extends r3_generic { 153 type = "PERSONAL"; 154 } 155 156 class r3_purchased extends r3_generic { 157 type = "PURCHASED"; 158 addItemId() {} 159 addItemIdCentsQuantity() {} 160 addItemIdDollarsAndCentsQuantity() {} 161 addItemIdPriceQuantity() {} 162 setOrderNumber() {} 163 setPromotionCode() {} 164 setShippingCost() {} 165 setTaxes() {} 166 setTotalPrice() {} 167 } 168 169 class r3_search extends r3_generic { 170 type = "SEARCH"; 171 addItemId() {} 172 setTerms() {} 173 } 174 175 class r3_wishlist extends r3_generic { 176 type = "WISHLIST"; 177 addItemId() {} 178 } 179 180 const RR = { 181 add() {}, 182 addItemId() {}, 183 addItemIdCentsQuantity() {}, 184 addItemIdDollarsAndCentsQuantity() {}, 185 addItemIdPriceQuantity() {}, 186 addItemIdToCart() {}, 187 addObject() {}, 188 addSearchTerm() {}, 189 c() {}, 190 charset: "UTF-8", 191 checkParamCookieValue: () => null, 192 d: document, 193 data: { 194 JSON: { 195 placements: [], 196 }, 197 }, 198 debugWindow() {}, 199 set defaultCallback(fn) { 200 call(fn); 201 }, 202 fixName: n => n, 203 genericAddItemPriceQuantity() {}, 204 get() {}, 205 getDomElement(a) { 206 return typeof a === "string" && a ? document.querySelector(a) : null; 207 }, 208 id() {}, 209 insert() {}, 210 insertDynamicPlacement() {}, 211 isArray: a => Array.isArray(a), 212 js() {}, 213 set jsonCallback(fn) { 214 call(fn, {}); 215 }, 216 l: document.location.href, 217 lc() {}, 218 noCookieMode: false, 219 ol() {}, 220 onloadCalled: true, 221 pq() {}, 222 rcsCookieDefaultDuration: 364, 223 registerPageType() {}, 224 registeredPageTypes: { 225 ADDTOCART: r3_addtocart, 226 ADDTOREGISTRY: r3_addtoregistry, 227 BRAND: r3_brand, 228 CART: r3_cart, 229 CATEGORY: r3_category, 230 COMMON: r3_common, 231 ERROR: r3_error, 232 GENERIC: r3_generic, 233 HOME: r3_home, 234 ITEM: r3_item, 235 PERSONAL: r3_personal, 236 PURCHASED: r3_purchased, 237 SEARCH: r3_search, 238 WISHLIST: r3_wishlist, 239 }, 240 renderDynamicPlacements() {}, 241 set() {}, 242 setCharset() {}, 243 U: "undefined", 244 unregisterAllPageType() {}, 245 unregisterPageType() {}, 246 }; 247 248 Object.assign(window, { 249 r3() {}, 250 r3_addtocart, 251 r3_addtoregistry, 252 r3_brand, 253 r3_cart, 254 r3_category, 255 r3_common, 256 r3_error, 257 r3_generic, 258 r3_home, 259 r3_item, 260 r3_personal, 261 r3_placement() {}, 262 r3_purchased, 263 r3_search, 264 r3_wishlist, 265 RR, 266 rr_addLoadEvent() {}, 267 rr_annotations_array: [undefined], 268 rr_call_after_flush() {}, 269 rr_create_script() {}, 270 rr_dynamic: { 271 placements: [], 272 }, 273 rr_flush() {}, 274 rr_flush_onload() {}, 275 rr_insert_placement() {}, 276 rr_onload_called: true, 277 rr_placement_place_holders: [], 278 rr_placements: [], 279 rr_recs: { 280 placements: [], 281 }, 282 rr_remote_data: getRandomString(), 283 rr_v: "1.2.6.20210212", 284 }); 285 286 call(jsonCallback); 287 call(defaultCallback, {}); 288 }