tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }