{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./vendor/buy-with-prime/cartridges/int_buywithprime/cartridge/client/default/js/buywithprime.js","webpack:///./vendor/buy-with-prime/cartridges/int_buywithprime/cartridge/client/default/js/utils/utils.js"],"names":[],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA;AACA;;AAEa;;AAEb,cAAc,mBAAO,CAAC,qHAAe;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,EAAE;AACjE;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C;AAC7D;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,KAAK;AACzC,oCAAoC,KAAK;AACzC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,8C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,KAAK;AAC/B,oCAAoC,KAAK;AACzC;AACA;AACA;;AAEA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,kBAAkB;;AAE3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,OAAO,IAAI,qBAAqB;AAC7D,iBAAiB,mCAAmC;AACpD;;AAEA;AACA;AACA,oBAAoB,SAAS,QAAQ,KAAK,QAAQ,KAAK;AACvD;AACA,SAAS;AACT;AACA,oBAAoB,QAAQ,QAAQ,KAAK;AACzC;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,oE;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,oCAAoC;AACpC;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC9lBD;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D;AAC9D,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,IAAI,IAAI,MAAM;AAC3F;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,C","file":"default/js/buywithprime.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./vendor/buy-with-prime/cartridges/int_buywithprime/cartridge/client/default/js/buywithprime.js\");\n","// copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst utils = require('./utils/utils');\n\nconst ALLOWLIST = [\n 'Cart-EditProductLineItem',\n 'Cart-GetProduct',\n 'Product-ShowQuickView',\n 'Product-Variation'\n];\nconst REFRESH_TRIGGERS = [\n 'Cart-RemoveProductLineItem',\n 'Cart-UpdateQuantity'\n];\n\nwindow.productCache = window.productCache || {};\n\n/**\n * platform utility function for page context.\n * Splits the page-route to establish page context.\n *\n*/\nwindow.pageContext = (function pageContext () {\n try {\n const page = document.getElementsByClassName('page');\n const action = page.item(0).dataset.action;\n const [controller, route] = action.split('-')\n const controllerStr = controller.toLowerCase();\n const routeStr = route.toLowerCase();\n window.context = controller.toLowerCase();\n window.subcontext = route.toLowerCase();\n return controller.toLowerCase();\n }\n catch (e) {\n console.debug(`exception during pageContext utility, ${e}`);\n return;\n }\n})();\n\n/**\n * Method for executing updates on cart, lineitem, or product objects.\n * @param {object} event - javascript dom action\n * @param {string} action - controller-route formatted action \n * @param {object} product - product object containing product pertinent data\n * @param {object} primeData - data object containing prime buyable specific data\n * \n */\nconst update = (event, action, product, primeData) => {\n if (action === 'Cart-Show' || \n action === 'Cart-RemoveProductLineItem' ||\n action === 'Checkout-Begin') {\n cartUpdate(primeData, product);\n } else if (action === 'Cart-EditProductLineItem' ||\n action === 'Cart-UpdateQuantity') {\n lineItemUpdate(primeData, product);\n } else if (action === 'Cart-GetProduct' ||\n action === 'Product-Show' ||\n action === 'Product-ShowQuickView' ||\n action === 'Product-Variation') {\n productUpdate(primeData, product);\n }\n return;\n}\n\nconst shimmer = (event, action, product) => {\n if (action === 'Cart-Show' ||\n action === 'Checkout-Begin') {\n cartShimmer(product);\n } else if (action === 'Cart-EditProductLineItem' ||\n action === 'Cart-UpdateQuantity') {\n lineItemShimmer(product);\n } else if (action === 'Cart-GetProduct' ||\n action === 'Product-Show' ||\n action === 'Product-ShowQuickView' ||\n action === 'Product-Variation') {\n productShimmer();\n }\n return;\n}\n\nconst productShimmer = () => {\n var $primeContainer;\n switch(pageContext) {\n case 'cart':\n $primeContainer = $('#editProductModal').find('.bwp-prime-container');\n break;\n case 'search':\n $primeContainer = $('#quickViewModal').find('.bwp-prime-container');\n break;\n default:\n $primeContainer = $('.bwp-prime-container');\n }\n\n $primeContainer.addClass('shimmer').removeClass('hidden');\n}\n\n/** \n * inject the prime day promo percentage into the PDP when the master product is not selected\n * @param {object} product - product object containing prodcut specific data\n * \n */\n const injectPrimeDayPromoPercentageToPDP = (product) => {\n // if the product is not a master product\n // inject the percentage off if the percentage off is valid\n\n // //product.hasPrimeExclusivePromotion.isVariant &&\n if (\n product.hasPrimeExclusivePromotion &&\n product.hasPrimeExclusivePromotion.isBwpExclusive && \n !product.hasPrimeExclusivePromotion.isMasterProduct &&\n Number(product.hasPrimeExclusivePromotion.percentOff)\n ) {\n $(\".buy-with-prime-prime-day-deal-badge-text-inject\").html(\n `

${product.hasPrimeExclusivePromotion.percentOff}% off

`\n );\n } else {\n $(\".buy-with-prime-prime-day-deal-badge-text-inject\").html(``);\n }\n };\n\n/** \n * update bwp product card front end elements\n * @param {object} primeData - data object containing prime buyable specific data\n * @param {object} product - product object containing product specific data\n * \n*/\nconst productUpdate = (primeData, product) => {\n var $primeContainer;\n switch(pageContext) {\n case 'cart':\n $primeContainer = $('#editProductModal').find('.bwp-prime-container');\n break;\n case 'search':\n $primeContainer = $('#quickViewModal').find('.bwp-prime-container');\n break;\n default:\n $primeContainer = $('.bwp-prime-container');\n }\n\n injectPrimeDayPromoPercentageToPDP(product);\n \n var $primeButtonRow = $('.bwp-button-row-pdp');\n\n if (!$primeContainer.length) {\n $primeContainer = $('.bwp-prime-container');\n }\n\n if (!product.isPrimeBuyable || (!product.readyToOrder && product.productType !== 'master')) {\n $primeContainer.addClass('hidden').removeClass('shimmer');\n $primeButtonRow.addClass('hidden');\n return;\n }\n\n if (primeData) {\n if (product.productType === 'master' || primeData.isMain) {\n $primeContainer.find('.prime-delivery-estimate, .prime-brand-message, .bwp-delivery-fallback, .bwp-element-icons').addClass('hidden');\n $primeContainer.find('.bwp-main-product-message').removeClass('hidden');\n $primeContainer.removeClass('hidden').removeClass('shimmer');\n $primeButtonRow.addClass('hidden');\n return;\n }\n\n if (!primeData.delivery) {\n $primeContainer.find('.prime-delivery-estimate, .prime-brand-message, .bwp-main-product-message').addClass('hidden');\n $primeContainer.find('.bwp-easy-returns').removeClass('hidden');\n $primeContainer.find('.bwp-element-icons').removeClass('hidden');\n if (!primeData.returns || primeData.returns.title.includes('non-returnable')) {\n $primeContainer.find('.bwp-easy-returns').addClass('hidden');\n }\n $primeContainer.removeClass('shimmer');\n $primeButtonRow.addClass('hidden');\n return;\n }\n\n if (!primeData.returns) {\n $primeContainer.find('.bwp-easy-returns').addClass('hidden');\n }\n else if (primeData.returns.title.includes('non-returnable')) {\n $primeContainer.find('.bwp-easy-returns').addClass('hidden');\n $primeContainer.find('.bwp-not-returnable').removeClass('hidden');\n } else {\n $primeContainer.find('.bwp-not-returnable').addClass('hidden');\n }\n }\n\n if (!!primeData.delivery.errorCode) {\n $primeContainer.addClass('hidden').removeClass('shimmer');\n $primeButtonRow.addClass('hidden');\n return;\n }\n\n $primeContainer.find('.bwp-main-product-message').addClass('hidden');\n $primeContainer.find('.prime-delivery-estimate, .prime-brand-message, .prime-logo, .bwp-element-icons').removeClass('hidden');\n $primeContainer.find('.learn-more-link').removeClass('hidden');\n $primeContainer.removeClass('hidden').removeClass('shimmer');\n\n // Prime Promise is being shown, collect prime promise clickstream event.\n if (window.collectPrimePromiseEvent) {\n window.collectPrimePromiseEvent(primeData.delivery, $primeContainer);\n window.collectAddToCartClickEvent(primeData.delivery, $primeContainer);\n }\n\n $primeButtonRow.removeClass('hidden');\n\n if (primeData.delivery.messageText && primeData.delivery.messageText !== \"Fast, FREE Delivery\") {\n $primeContainer.find('.prime-delivery-estimate').text(primeData.delivery.messageText + '.');\n }\n}\n\n// update products interface elements at the line item level\nconst lineItemUpdate = (primeData, {UUID}) => {\n var $selector = $(`.card.uuid-${UUID}`);\n var $primeContainer = $selector.find('.bwp-prime-container');\n \n $primeContainer.find('.dr-text').addClass('hidden');\n\n // worry about delivery data first, most important\n if (primeData && primeData.delivery) {\n if (!!primeData.delivery.errorCode) {\n $primeContainer.addClass('hidden').removeClass('shimmer');\n return;\n }\n if (primeData.delivery.messageText.toLowerCase().indexOf('fast, free delivery') === -1) {\n $primeContainer.find('.prime-delivery-estimate')\n .text(primeData.delivery.messageText)\n .removeClass('hidden');\n }\n\n // return data handling\n if (primeData && !primeData.returns) {\n $primeContainer.find('.bwp-cart-delivery-under').removeClass('hidden');\n } else {\n if (primeData && primeData.returns.returnable) {\n $primeContainer.find('.bwp-delivery-and-returns').removeClass('hidden');\n } else {\n $primeContainer.find('.bwp-delivery-no-returns').removeClass('hidden');\n }\n }\n // Prime Promise is being shown, collect prime promise clickstream event.\n if (window.collectPrimePromiseEvent) {\n window.collectPrimePromiseEvent(primeData.delivery, $primeContainer);\n }\n }\n // if by chance we have return data, but not delivery, do this\n else if (primeData && primeData.returns) {\n if (primeData && primeData.returns.returnable) {\n $primeContainer.find('.bwp-cart-returns').removeClass('hidden');\n } else {\n $primeContainer.find('.bwp-delivery-no-returns').removeClass('hidden');\n }\n $primeContainer.removeClass('hidden'); \n }\n // if we don't have any data, no delivery, no return\n else {\n $primeContainer.find('.bwp-cart-delivery').removeClass('hidden');\n $primeContainer.removeClass('hidden');\n }\n \n $primeContainer.removeClass('shimmer');\n}\n\n// execute prime card shimmer effect at line item level\nconst lineItemShimmer = ({UUID}) => {\n var $selector = $(`.card.uuid-${UUID}`);\n var $primeContainer = $selector.find('.bwp-prime-container');\n $primeContainer.removeClass('hidden').addClass('shimmer')\n}\n\n// initiate update for products in cart\nconst cartUpdate = (primeData, {primeCartMap}) => {\n if (!Object.keys(primeData).length) {\n return productUpdate(primeData, product);\n }\n\n primeData.forEach(data => {\n var lineItems = primeCartMap[data.id];\n Object.keys(lineItems).forEach(lineItem => {\n var lineItemObj = lineItems[lineItem];\n lineItemUpdate(data, lineItemObj);\n })\n });\n}\n\n// initiate cart prime card shimmer effect\nconst cartShimmer = ({primeCartMap}) => {\n Object.keys(primeCartMap).forEach(id => {\n var lineItems = primeCartMap[id];\n Object.keys(lineItems).forEach(lineItem => {\n lineItemShimmer({UUID: lineItem});\n })\n }) \n}\n\n/**\n * sets cache timeout\n * @returns\n */\nconst cacheUntil = (minutes) => {\n const until = new Date();\n until.setMinutes(until.getMinutes() + minutes);\n return until;\n}\n\n/**\n * function to return cache data for products\n * @param {*} res1 - first response object containing cache specific response data\n * @param {*} res2 - second response object containing cache specific response data\n * \n */\nconst cacheResults = (res1, res2, product, action) => {\n if (product.productType === 'master') {\n productCache[product.id] = {\n isMain: true,\n primeBuyableVariants: product.primeBuyableVariants\n };\n }\n const products = window.pids;\n const cachedProducts = products.map((id) => {\n const idMatch = obj => obj.id === id;\n return productCache[id] = {\n id: id,\n delivery: res1.data.find(idMatch) || res1.errors.find(idMatch),\n returns: res2.data.find(idMatch) || res2.errors.find(idMatch),\n until: cacheUntil(res1.error ? 0 : 5)\n }\n })\n return (action === 'Cart-Show' || action === 'Checkout-Begin') ? cachedProducts : cachedProducts[0];\n}\n\n/**\n * creates service requests for prime products\n * @param {object} action - controller-route formatted action \n * @param {object} product - product object containing product data\n * \n */\nconst createRequests = (action, product) => {\n var isBatch = [\n 'Cart-GetProduct',\n 'Product-Show',\n 'Product-ShowQuickView'\n ].includes(action);\n\n if (product.productType === 'standard') {\n isBatch = false;\n }\n if (product.productType === 'master') {\n isBatch = true;\n }\n\n var {delivery, returns} = product.primeActionUrls;\n \n var pids = \n !isBatch ? \n product.id : \n (product.primeBuyableVariants || [product.id]);\n window.pids = Array.isArray(pids) ? pids : [pids];\n \n var qtys = \n !isBatch ? \n (product.selectedQuantity) : \n Array(pids.length).fill(product.selectedQuantity).toString()\n\n const errorCallback = function (xhr, status) {\n console.error(`api ${status}: ${JSON.stringify(this)}`);\n return [{data: [], error: true, errors: [] }];\n }\n \n return {\n delivery: $.ajax({\n url: `${delivery}?pids=${pids}&qtys=${qtys}`,\n timeout: bwpTimeouts.delivery[pageContext],\n }).catch(errorCallback),\n returns: $.ajax({\n url: `${returns}?pids=${pids}`,\n timeout: bwpTimeouts.returns[pageContext],\n }).catch(errorCallback)\n }\n}\n\n/**\n * Method for initiating and renewing cache for bwp elements such as product and qty\n * @param {string} id - Product Id\n * @param {number} qty - Product Quantity\n * \n */\nconst cacheCheck = (id, qty) => {\n var cache = productCache[id];\n if (!cache) {\n return;\n }\n if (cache.isMain) {\n return cache;\n }\n if (cache.until && cache.until < new Date()) {\n return;\n }\n if (cache.delivery.quantity !== qty) {\n return;\n }\n return cache;\n}\n\n/**\n * checks prime availability for product updates\n * @param {object} event - javascript dom action\n * @param {string} action - formatted url string\n * @param {object} product - product object containing product specific data\n * \n */\nconst availability = (event, action, product) => {\n $(document).trigger('prime:shimmer', [action, product]);\n\n if (cacheCheck(product.id, product.selectedQuantity)) {\n $(document).trigger('prime:update', [action, product, productCache[product.id]]);\n return;\n }\n\n var {\n delivery, \n returns\n } = createRequests(action, product);\n\n $.when(\n delivery, \n returns\n ).done(([res1], [res2]) => {\n var primeData = cacheResults(res1, res2, product, action);\n $(document).trigger('prime:update', [action, product, primeData]);\n });\n}\n\n/**\n * filters products for prime buyable products and executes cart or pdp front end updates\n * @param {object} event - javascript dom action such as click\n * @param {object} xhr - javascript class containing methods for transmitting HTTP requests\n * @param {object} status - status object containing data elements pertaining to request status\n * \n */\nconst filterProductUpdates = function (event, xhr, status) {\n if (!xhr || xhr.status !== 200 || !['success', 'OK'].includes(xhr.statusText)) {\n return;\n }\n if (status && (status.dataType === 'html' || status.dataTypes.includes('html'))) {\n return;\n }\n\n var {\n action = '', \n product = {}\n } = xhr.responseJSON;\n\n if (REFRESH_TRIGGERS.includes(action) && !$(\".container.cart\").find(\".buy-with-prime-badge\").length) {\n $(\"#bwp-cart-button\").addClass('hidden');\n }\n\n if (!ALLOWLIST.includes(action)) {\n return;\n }\n if (!Object.keys(product).length) {\n var json = xhr.responseJSON;\n const querystring = json.queryString !== '' ? json.queryString : status.data;\n const searchParams = new URLSearchParams(querystring);\n const items = json.items || (json.cartModel && json.cartModel.items) || json.basket.items;\n\n items.some(item => item.isPrimeBuyable) ?\n $('.cart #bwp-cart-button').removeClass('hidden') :\n $('.cart #bwp-cart-button').addClass('hidden');\n \n product = items.find((item) => item.UUID === searchParams.get('uuid'))\n if (!product) {\n return;\n }\n\n product.readyToOrder = product.isOrderable;\n product.selectedQuantity = product.selectedQuantity || product.quantity;\n if (!product.isPrimeBuyable && pageContext === 'cart') {\n return;\n }\n }\n if (!product.isPrimeBuyable || (!product.readyToOrder && product.productType !== 'master')) {\n $(document).trigger('prime:update', [action, product, null])\n return;\n }\n\n $(document).trigger('prime:availability', [action, product]);\n}\n\n\n\n/**\n * executes batch calls when necessary\n * attaches required event handling for BWP for specific views/elements\n */\nconst onPageLoad = () => {\n\n // open modal when loaded\n $('#bwp-signup').modal();\n\n if (!pageContext || !['cart','product','checkout'].includes(pageContext)) {\n return;\n }\n\n var action;\n switch (pageContext) {\n case 'product':\n action = 'Product-Show';\n break;\n case 'checkout':\n action = 'Checkout-Begin';\n break;\n default:\n action = 'Cart-Show';\n }\n\n var product = bwpProduct;\n\n if (action === 'Product-Show' && (!product.isPrimeBuyable || (!product.readyToOrder && product.productType !== 'master'))) {\n return;\n }\n\n if (action === 'Cart-Show') {\n // forces refresh when fired event actions match one of the REFRESH_TRIGGERS\n $('body').on('cart:update', function (e, params) {\n if (REFRESH_TRIGGERS.includes(params.action)) {\n window.location.reload();\n }\n });\n\n // if prime eligibility error, sign user out\n if (window.location.href.indexOf('bwpcheckouterror=primeeligibility') !== -1) {\n utils.dynamicLoadJs(bwp.amazon.checkoutUrl).then(() => { \n amazon.Pay.signout();\n });\n }\n }\n\n if ((action === 'Cart-Show' || action === 'Checkout-Begin') && (!product || !product.id || !product.id.length )) {\n return;\n }\n\n $(document).trigger('prime:availability', [action, product]);\n}\n\n// Event handler for shipping method updates to show/hide prime sign in as necessary\nconst onCheckoutLoad = () => {\n var currentStage = window.location.href;\n\n if (currentStage.includes('Checkout-Begin') || currentStage.includes('stage=shipping')) {\n $('body').on('shipping:updateShippingMethods', function(e, data) {\n var $el = $('#prime-card-shipping-sign-in');\n // check to make sure we have an element\n if ($el.length > 0) {\n if (data.shipping.showBWPSignIn) {\n $el.removeClass('d-none');\n } else {\n $el.addClass('d-none');\n }\n }\n });\n }\n\n // applying the appropriate bwp promo text after the \"X% off\" text in checkout\n // depending on if the use is on the initial checkout screen or the BwP checkout screen\n // an interval is required here since the ?bwp=true query string is not immediately applied\n let retryCount = 0;\n\n const intervalId = setInterval(() => {\n const isBwPCheckout = new URLSearchParams(window.location.search).get(\n \"bwp\"\n );\n const isPlaceOrderStage = currentStage.includes(\"stage=placeOrder\");\n\n if (isBwPCheckout === \"true\" && isPlaceOrderStage) {\n // apply applied! text if on the BwP checkout screen\n $(\".bwp-applied-checkout-inject\").html(\" applied!\");\n clearInterval(intervalId); // Clear interval if successful\n } else {\n if (retryCount < 10) {\n retryCount++;\n\n if (retryCount > 1) {\n // apply alternate text if on the initial non-BwP checkout screen\n $(\".bwp-applied-checkout-inject\").html(\n \" when you use Buy with Prime\"\n );\n }\n } else {\n clearInterval(intervalId); // Clear interval after retries\n }\n }\n }, 50);\n}\n\n/**\n * listeners\n */\nmodule.exports = (() => {\n $(document).on('ajaxComplete', filterProductUpdates);\n $(document).on('prime:availability', availability);\n $(document).on('prime:shimmer', shimmer);\n $(document).on('prime:update', update);\n onPageLoad();\n onCheckoutLoad();\n})();\n","// copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// function to convert date sent in API (ISO 8601) to readable date\nfunction formatDateIso(isoString) {\n let options = { weekday: 'long', month: 'long', day: 'numeric' };\n let date = new Date(isoString);\n return date.toLocaleDateString('en-US', options)\n}\n\n//function to convert date sent in API call to readable date\nfunction EpochToDate(epoch) {\n if (epoch < 10000000000)\n epoch *= 1000; // convert to milliseconds (Epoch is usually expressed in seconds, but Javascript uses Milliseconds)\n var epoch = epoch + (new Date().getTimezoneOffset() * -1); //for timeZone \n var options = { weekday: 'long', month: 'long', day: 'numeric' };\n return new Date(epoch).toLocaleDateString('en-US', options);\n}\n\nasync function dynamicLoadJs(url) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.async = true;\n script.onload = () => resolve(url);\n script.onerror = (error) => reject(`Failed to load JavaScript from ${url}, ${error}`);\n document.head.appendChild(script);\n });\n};\n\nmodule.exports = {\n formatDateIso,\n dynamicLoadJs\n}"],"sourceRoot":""}