{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/cpf-cnpj-validator/dist/cpf-cnpj-validator.es.js","webpack:///./app/javascript/packs/helper_functions.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./app/javascript/packs/formatters.js","webpack:///./app/javascript/packs/utils/correlation_id_store.js","webpack:///./app/javascript/packs/gtm_script.js","webpack:///./app/javascript/packs/utils/encrypt.js","webpack:///./app/javascript/packs/coupon_form_factory.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./app/javascript/packs/coupon_service.js","webpack:///./app/javascript/packs/webhook_service.js","webpack:///./app/javascript/packs/debounced.js","webpack:///./app/javascript/packs/utils/form/payment/payment_form.js","webpack:///./app/javascript/packs/utils/get_descriptive_time.js","webpack:///./app/javascript/packs/client_instant_payments_malga.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","BLACKLIST","STRICT_STRIP_REGEX","LOOSE_STRIP_REGEX","verifierDigit","digits","numbers","split","map","number","parseInt","modulus","length","mod","index","reduce","buffer","strip","strict","regex","replace","cpf","stripped","includes","substr","BLACKLIST$1","STRICT_STRIP_REGEX$1","LOOSE_STRIP_REGEX$1","verifierDigit$1","concat","strip$1","cnpj","isPJ","trim","toUpperCase","doesNotHaveValue","input","setElementHiddenClass","el","isHidden","classList","toggle","disableSubmitButtonElement","button","isInvalid","disabled","disableInputField","isDisabled","clearValue","style","disableRequiredInputField","isDisabledAndNotRequired","clear","required","checkoutCustomerFormHelpers","elements","alertMessageDocumentElement","documentLabelElement","formDocumentElement","formPhoneNumberElement","formClientType","isForeignerElement","submitButtonElement","whatsappAcceptElement","whatsappLabelElement","toggleDocumentErrorMessage","isEmpty","emptyErrorMessage","querySelector","invalidErrorMessage","pjMode","helpers","cpfCnpjValidator","checked","docNum","isFilled","filter","digit","test","isValid","valid","disableCpfCnpjFields","state","optionalLabel","contains","undefined","phoneNumberChangeHandler","num","addEventListener","e","target","parseFetchResponse","response","json","then","data","status","body","objectToInlineCss","obj","entries","join","querySelectorOrFail","query","document","Error","blurOnEnterKeyupHandler","event","blur","activeElement","forceBlurOnEventHandler","formatterCurrency","Intl","NumberFormat","currency","getFormattedCurrencyValueFromEl","element","format","getValueWithoutFormat","getLowerCaseInputValue","toString","toLowerCase","correlationId","corrHeaderKey","getCorrId","setCorrId","addCorrId","headers","Headers","set","loadCorrId","has","tapAndLoadCorrId","CHECKOUT_STEP","freeze","begin_checkout","add_payment_info","purchase","PAYMENT_TYPE","card","pix","nupay","GtmFactory","dataLayer","window","sendDataLayer","eventType","payload","push","ecommerce","buildPayload","paymentType","a","fullName","phone","getPhone","email","totalAmount","item_id","productId","item_name","productName","coupon","discount","price","quantity","convert","items","hashed_full_name","hashed_email","hashed_phone","transactionId","transaction_id","sendEvent","productData","sendBeginCheckout","this","registerCheckoutOptionEvent","paymentMethod","formsValues","eventData","registerPurchaseEvent","purchaseData","encoder","TextEncoder","dataBuffer","encode","crypto","subtle","digest","hashBuffer","hashArray","Array","from","Uint8Array","hashHex","byte","padStart","createCouponErrorSpan","errorMessage","className","couponErrorMessageSpan","createElement","color","textContent","couponFormFactory","params","errorMessageOptions","keys","URLSearchParams","location","search","removeCouponFromUrlHandler","currentUrl","URL","href","searchParams","assign","clearCouponButton","Rollbar","error","url","fixedCoupon","couponInput","discountAmountSpan","errorSpanContainer","formAmountHiddenInput","paymentTotalSpan","submitCouponButton","emailInput","submitFormButton","couponChangeEventListeners","currentlyActiveCoupon","validEmail","couponErrorSpan","addCouponChangeListener","listener","some","registeredListener","removeCouponChangeListener","pushCouponChangeToListeners","couponData","forEach","console","couponInputClickHandler","removeErrorSpan","parentElement","removeChild","appendErrorSpan","appendChild","fetchCoupon","amount","CouponService","getCoupon","formattedDiscountedAmount","discountedAmount","formattedDiscount","discountAmount","formattedPixDiscountedAmount","pixDiscountedAmount","formattedPixAmount","pixAmount","couponInputBlurHandler","preventDefault","couponName","lowercasedEmailValue","removeCouponHandler","runtime","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","GenStateSuspendedStart","method","arg","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","done","GenStateSuspendedYield","makeInvokeMethod","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","fetchUrlParams","product_id","fetch","couponResponse","ok","statusText","discount_amount","new_amount","amountOff","amount_off","percentOff","percent_off","pix_amount","pix_discount_amount","webhook","sendPost","JSON","stringify","text","debounced","fnToCall","timeout","timeoutRef","args","setTimeout","clearTimeout","setupPaymentForm","clientForm","productForm","submitButton","formCouponIdHiddenInput","getElementById","formAmountOffHiddenInput","formPercentOffHiddenInput","formDiscountAmountHiddenInput","formTotalAmountHiddenInput","formCountInstallmentsHiddenInput","formFixedInstallmentHiddenInput","coupon_accepted","inputs","couponElements","couponForm","getId","updateInstallments","fixedInstallments","numericValue","Number","formattedInstallmentValue","showInstallmentsSpan","innerText","installmentsOptionsElements","item","couponChangeHandler","rawOriginalAmount","originalAmount","getPaymentInfoHelpers","from_cents","factor","productUnitAmountHiddenInput","getUnitAmount","getDiscountAmount","percentDiscount","getTotalAmount","getDescriptiveTime","secondsTime","hideSeconds","ONE_MIN","ONE_HOUR","ONE_DAY","seconds","minutesTime","minutes","hoursTime","hours","daysTime","days","numFormat","minimumFractionDigits","maximumFractionDigits","descriptiveParts","unit","Math","floor","one","multiple","splice","descriptive","paymentIntentId","PIX_STATUS_POLLING_TIME_LIMIT","PM3","PIX_STATUS_POLLING_INTERVAL","PIX_EXPIRATION_UPDATE_INTERVAL","gtm","productIdHiddenInput","productNameHiddenInput","productTypPixProcessing","productTypPixError","typPixProcessing","typPixError","formElement","formNameInput","formEmailInput","formDocumentInput","isForeignerInput","formPhoneNumberInput","stateRegistrationInput","municipalRegistrationInput","productProviderHiddenInput","stateRegistrationAlertMessageElement","formDocumentAlertMessageSpan","buttonLoadingSpinner","payNowButtonLabel","formHelpers","pixTotalAmountSpans","querySelectorAll","updatePixPrice","span","setLoading","isLoading","loading","label","showPaymentError","errorMsgText","paymentHelpers","gtmRegisterPurchaseEvent","clientInstantPaymentResponseBody","id","coupon_id","product_name","createPaymentIntentOnDB","paymentIntentsPath","payment_intent","total_amount","phone_number","cancelPixPaymentValidationLoop","timeLeftUpdateLoop","copiedMessageTimeoutRef","showOrderCompleteAndRedirect","thankYouPageURL","spinnerLoading","parent","remove","showOrderError","showOrderProcessing","fetchTransactionStatus","clientInstantPaymentId","signal","closeQrCodeDialog","dialog","open","close","amountHeader","img","copyCta","expirationInfoSpan","src","dataset","qrCode","navigator","clipboard","writeText","previousText","expirationDateTimeFormatter","DateTimeFormat","day","month","hour","minute","second","showQrCodeDialog","imgSrc","dataContents","expiresIn","expirationTimestamp","Date","now","updateExpirationTime","timeLeftInMs","expiration","expirationUpdateInterval","setInterval","clearInterval","showModal","resolveAsPending","expirationTime","timeoutId","controller","AbortController","promise","expirationDelta","timeoutLimit","executeRequest","expired","cancel","failed","abort","pollTransactionConfirmation","createClientInstantPayment","provider","client_payment","paymentMethodId","getClientPaymentFormData","whatsapp_accept","installments_count","payment_method_id","is_foreigner","is_pj","coupons","coupon_amount_off","coupon_percent_off","subtotal_amount","trace","clientInstantPaymentResponse","transactionAmount","qrCodeImageUrl","qrCodeData","pixStatusUpdate","stripe_payment_intent","updateClientInstantPaymentResponse","debouncedHandleSubmit","message","stack"],"mappings":"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","file":"js/client_instant_payments_malga-2b69ca72b01e22c776f8.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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 34);\n","/*!\n * cpf-cnpj-validator v1.0.3\n * (c) 2020-present Carvalho, Vinicius Luiz \n * Released under the MIT License.\n */\nvar BLACKLIST = ['00000000000', '11111111111', '22222222222', '33333333333', '44444444444', '55555555555', '66666666666', '77777777777', '88888888888', '99999999999', '12345678909'];\nvar STRICT_STRIP_REGEX = /[.-]/g;\nvar LOOSE_STRIP_REGEX = /[^\\d]/g;\n\nvar verifierDigit = function verifierDigit(digits) {\n var numbers = digits.split('').map(function (number) {\n return parseInt(number, 10);\n });\n var modulus = numbers.length + 1;\n var multiplied = numbers.map(function (number, index) {\n return number * (modulus - index);\n });\n var mod = multiplied.reduce(function (buffer, number) {\n return buffer + number;\n }) % 11;\n return mod < 2 ? 0 : 11 - mod;\n};\n\nvar strip = function strip(number, strict) {\n var regex = strict ? STRICT_STRIP_REGEX : LOOSE_STRIP_REGEX;\n return (number || '').replace(regex, '');\n};\n\nvar format = function format(number) {\n return strip(number).replace(/^(\\d{3})(\\d{3})(\\d{3})(\\d{2})$/, '$1.$2.$3-$4');\n};\n\nvar isValid = function isValid(number, strict) {\n var stripped = strip(number, strict);\n\n if (!stripped) {\n return false;\n }\n\n if (stripped.length !== 11) {\n return false;\n }\n\n if (BLACKLIST.includes(stripped)) {\n return false;\n }\n\n var numbers = stripped.substr(0, 9);\n numbers += verifierDigit(numbers);\n numbers += verifierDigit(numbers);\n return numbers.substr(-2) === stripped.substr(-2);\n};\n\nvar generate = function generate(formatted) {\n var numbers = '';\n\n for (var i = 0; i < 9; i += 1) {\n numbers += Math.floor(Math.random() * 9);\n }\n\n numbers += verifierDigit(numbers);\n numbers += verifierDigit(numbers);\n return formatted ? format(numbers) : numbers;\n};\n\nvar cpf = {\n verifierDigit: verifierDigit,\n strip: strip,\n format: format,\n isValid: isValid,\n generate: generate\n};\nvar BLACKLIST$1 = ['00000000000000', '11111111111111', '22222222222222', '33333333333333', '44444444444444', '55555555555555', '66666666666666', '77777777777777', '88888888888888', '99999999999999'];\nvar STRICT_STRIP_REGEX$1 = /[-\\\\/.]/g;\nvar LOOSE_STRIP_REGEX$1 = /[^\\d]/g;\n\nvar verifierDigit$1 = function verifierDigit$1(digits) {\n var index = 2;\n var reverse = digits.split('').reduce(function (buffer, number) {\n return [parseInt(number, 10)].concat(buffer);\n }, []);\n var sum = reverse.reduce(function (buffer, number) {\n buffer += number * index;\n index = index === 9 ? 2 : index + 1;\n return buffer;\n }, 0);\n var mod = sum % 11;\n return mod < 2 ? 0 : 11 - mod;\n};\n\nvar strip$1 = function strip$1(number, strict) {\n var regex = strict ? STRICT_STRIP_REGEX$1 : LOOSE_STRIP_REGEX$1;\n return (number || '').replace(regex, '');\n};\n\nvar format$1 = function format$1(number) {\n return strip$1(number).replace(/^(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})$/, '$1.$2.$3/$4-$5');\n};\n\nvar isValid$1 = function isValid$1(number, strict) {\n var stripped = strip$1(number, strict);\n\n if (!stripped) {\n return false;\n }\n\n if (stripped.length !== 14) {\n return false;\n }\n\n if (BLACKLIST$1.includes(stripped)) {\n return false;\n }\n\n var numbers = stripped.substr(0, 12);\n numbers += verifierDigit$1(numbers);\n numbers += verifierDigit$1(numbers);\n return numbers.substr(-2) === stripped.substr(-2);\n};\n\nvar generate$1 = function generate$1(formatted) {\n var numbers = '';\n\n for (var i = 0; i < 12; i += 1) {\n numbers += Math.floor(Math.random() * 9);\n }\n\n numbers += verifierDigit$1(numbers);\n numbers += verifierDigit$1(numbers);\n return formatted ? format$1(numbers) : numbers;\n};\n\nvar cnpj = {\n verifierDigit: verifierDigit$1,\n strip: strip$1,\n format: format$1,\n isValid: isValid$1,\n generate: generate$1\n};\n\nvar validator = function validator(joi) {\n return {\n type: 'document',\n base: joi.string(),\n messages: {\n 'document.cpf': 'CPF inválido',\n 'document.cnpj': 'CNPJ inválido'\n },\n rules: {\n cpf: {\n validate: function validate(value, helpers, args, options) {\n if (!cpf.isValid(value)) {\n return helpers.error('document.cpf');\n }\n\n return value;\n }\n },\n cnpj: {\n validate: function validate(value, helpers, args, options) {\n if (!cnpj.isValid(value)) {\n return helpers.error('document.cnpj');\n }\n\n return value;\n }\n }\n }\n };\n};\n\nexport default validator;\nexport { cpf, cnpj, validator };","import { cpf, cnpj } from \"cpf-cnpj-validator\";\n\nexport const isPJ = function (value) {\n return value.trim().toUpperCase() === \"PJ\";\n};\n\nexport const doesNotHaveValue = function (input) {\n return (input?.value.trim() ?? \"\") === \"\";\n};\n\n/**\n * @param {HTMLElement} el to transform\n * @param {boolean} isHidden\n */\nexport const setElementHiddenClass = (el, isHidden) => {\n el.classList.toggle(\"hidden\", isHidden);\n};\n\n/**\n * @param {HTMLButtonElement} button to transform\n * @param {boolean} isInvalid\n */\nexport const disableSubmitButtonElement = (button, isInvalid) => {\n button.disabled = isInvalid;\n button.classList.toggle(\"cursor-not-allowed\", isInvalid);\n button.classList.toggle(\"opacity-60\", isInvalid);\n};\n\n/**\n * @param {HTMLInputElement} input to transform\n * @param {boolean} isDisabled\n */\nexport const disableInputField = (input, isDisabled, clearValue = true) => {\n if (clearValue) {\n input.value = \"\";\n }\n input.disabled = isDisabled;\n input.style = isDisabled ? \"background-color: #e0e0e0;\" : \"\";\n};\n\n/**\n * @param {HTMLInputElement} input to transform\n * @param {boolean} isDisabledAndNotRequired\n */\nexport const disableRequiredInputField = (input, isDisabledAndNotRequired, clear = true) => {\n disableInputField(input, isDisabledAndNotRequired, clear);\n input.required = !isDisabledAndNotRequired;\n};\n\nexport const checkoutCustomerFormHelpers = (elements) => {\n const {\n alertMessageDocumentElement,\n documentLabelElement,\n formDocumentElement,\n formPhoneNumberElement,\n formClientType,\n isForeignerElement,\n submitButtonElement,\n whatsappAcceptElement,\n whatsappLabelElement\n } = elements;\n\n function toggleDocumentErrorMessage (isInvalid, isEmpty) {\n const emptyErrorMessage = alertMessageDocumentElement.querySelector(\".document_empty\");\n const invalidErrorMessage = alertMessageDocumentElement.querySelector(\".document_invalid\");\n\n if (isEmpty) {\n setElementHiddenClass(emptyErrorMessage, false);\n setElementHiddenClass(invalidErrorMessage, true);\n } else if (isInvalid) {\n setElementHiddenClass(emptyErrorMessage, true);\n setElementHiddenClass(invalidErrorMessage, false);\n }\n\n setElementHiddenClass(alertMessageDocumentElement, !isInvalid);\n\n disableSubmitButtonElement(submitButtonElement, isInvalid);\n }\n\n const pjMode = isPJ(formClientType.value);\n\n const helpers = {\n pjMode,\n /**\n *\n * @param {HTMLInputValue} formClientType\n * @returns boolean\n */\n cpfCnpjValidator () {\n if (isForeignerElement?.checked) {\n return true;\n }\n const docNum = formDocumentElement.value?.trim() ?? \"\";\n const docNumDigits = docNum.split(\"\").filter(digit => /^\\d$/.test(digit));\n const isFilled = docNumDigits.length > 0;\n const isValid = isFilled && (pjMode ? cnpj.isValid(docNum) : cpf.isValid(docNum));\n\n if (formDocumentElement.required) {\n toggleDocumentErrorMessage(!isValid, !isFilled);\n return isValid;\n } else {\n const valid = isFilled ? isValid : true;\n toggleDocumentErrorMessage(!valid, false);\n return valid;\n }\n },\n /** @param {boolean} state */\n disableCpfCnpjFields: isForeignerElement\n ? (state) => {\n const optionalLabel = documentLabelElement.querySelector(\"small\");\n if (!optionalLabel || (optionalLabel && optionalLabel.classList.contains(\"inline-zero-width\"))) {\n documentLabelElement.classList.toggle(\"required\", !state);\n }\n disableRequiredInputField(formDocumentElement, state);\n\n if (state) {\n toggleDocumentErrorMessage(false, false);\n }\n }\n : undefined,\n phoneNumberChangeHandler () {\n const phoneValue = formPhoneNumberElement\n .value\n .split(\"\")\n .filter(num => /\\d/.test(num));\n\n const valid = phoneValue.length > 6;\n\n whatsappAcceptElement.checked = valid;\n whatsappAcceptElement.classList.toggle(\"hidden\", !valid);\n whatsappLabelElement.classList.toggle(\"hidden\", !valid);\n }\n };\n // to validate cpf/cnpj\n formDocumentElement.addEventListener(\"blur\", () => {\n helpers.cpfCnpjValidator(formClientType);\n });\n\n // to disabled cpf/cnpj fields\n if (isForeignerElement) {\n isForeignerElement.addEventListener(\"change\", (e) => {\n helpers.disableCpfCnpjFields(e.target.checked);\n });\n }\n\n // Show hidden whatsapp checkbox and label\n formPhoneNumberElement.addEventListener(\"keyup\", helpers.phoneNumberChangeHandler);\n\n return helpers;\n};\n\nexport const parseFetchResponse = (response) =>\n response\n .json()\n .then((data) => ({ status: response.status, body: data }));\n\n/**\n * Transform object to inline CSS string to use directly in style properties.\n *\n * @param {Object.} obj containing css key:values\n * @returns\n */\nexport const objectToInlineCss = (obj) => Object.entries(obj).map(([key, value]) => `${key}: ${value}`).join(\";\");\n\n/**\n *\n * @param {string} query to search element\n * @returns {HTMLElement} element\n */\nexport const querySelectorOrFail = (query) => {\n const el = document.querySelector(query);\n if (!el) {\n throw new Error(\"Not element found with query \" + query);\n }\n return el;\n};\n\n/**\n * Trigger a blur (loss of focus) in element and document's current active element when Enter is pressed.\n * @param {KeyboardEvent} event\n */\nexport function blurOnEnterKeyupHandler (event) {\n if (event.key === \"Enter\") {\n event.target.blur();\n document.activeElement.blur();\n }\n}\n\n/**\n * Forces blur (loss of focus) in the active document on event.\n */\nexport function forceBlurOnEventHandler () {\n document.activeElement.blur();\n}\n","module.exports = require(\"regenerator-runtime\");\n","export const formatterCurrency = new Intl.NumberFormat(\"pt-BR\", {\n style: \"currency\",\n currency: \"BRL\"\n});\n\n/**\n * Gets value from element and returns as formatted currency string.\n *\n * @param {HTMLInputElement} element to get the value from\n * @returns {string} formatted currency value\n */\nexport const getFormattedCurrencyValueFromEl = (element) => {\n if (!(\"value\" in element) || !element.value || element.value?.trim().length < 1) {\n return 0;\n }\n return formatterCurrency.format(element.value / 100);\n};\n\n/**\n * Remove non-currency related characters from string for getting number without decimals separator\n *\n * @param {string} value formatted\n * @returns {string} numeric value without decimals (value * 100)\n */\nexport const getValueWithoutFormat = function (value) {\n return value.replace(/[^0-9,.]+/gm, \"\").replace(\",\", \".\").replace(\".\", \"\");\n};\n\n/**\n * Gets input element value in lowercase\n *\n * @param {HTMLInputElement} element input field to get value from\n * @returns {string} input element field in lowercase\n */\nexport const getLowerCaseInputValue = function (element) {\n return element.value.toString().toLowerCase();\n};\n","let correlationId = null;\n\nexport const corrHeaderKey = 'X-Correlation-Id'\n\nexport function getCorrId() {\n return correlationId;\n}\n\nexport function setCorrId(value) {\n if (correlationId == null) {\n correlationId = value;\n }\n}\n\nexport function addCorrId(headers = new Headers()) {\n if (correlationId == null) return headers;\n\n if (headers instanceof Headers) {\n headers.set(corrHeaderKey, correlationId);\n } else {\n headers[corrHeaderKey] = correlationId;\n }\n\n return headers;\n}\n\nexport function loadCorrId(headers) {\n if (correlationId) return headers;\n\n if (headers instanceof Headers && headers.has(corrHeaderKey)) {\n setCorrId(headers.get(corrHeaderKey));\n } else if (corrHeaderKey in headers && headers[corrHeaderKey]) {\n setCorrId(headers[corrHeaderKey]);\n }\n}\n\nexport function tapAndLoadCorrId(response) {\n loadCorrId(response.headers);\n return response;\n}\n","import { convert } from \"./utils/encrypt\";\n\n/**\n * Enum-like to define checkout option step\n */\nexport const CHECKOUT_STEP = Object.freeze({\n begin_checkout: \"begin_checkout\",\n add_payment_info: \"add_payment_info\",\n purchase: \"purchase\"\n});\n\nexport const PAYMENT_TYPE = Object.freeze({\n card: \"Cartão de Crédito\",\n pix: \"PIX\",\n nupay: \"Nupay\"\n});\n\nexport function GtmFactory (dataLayer = window.dataLayer || []) {\n const sendDataLayer = (eventType, payload) => {\n dataLayer.push({ ecommerce: null });\n dataLayer.push({\n event: eventType,\n ecommerce: payload\n });\n };\n\n const buildPayload = async (data, paymentType) => {\n const fullName = data.fullName || \"\";\n const phone = getPhone(data.phone);\n const email = data.email?.toLowerCase() || \"\";\n\n const ecommerce = {\n currency: \"BRL\",\n value: data.totalAmount,\n items: [\n {\n index: 0,\n item_id: data.productId,\n item_name: data.productName,\n coupon: data.coupon || \"\",\n currency: \"BRL\",\n discount: data.discount || 0,\n price: data.price,\n quantity: 1\n }\n ],\n fullName,\n hashed_full_name: await convert(fullName.replace(/\\s/g, \"\").toLowerCase()),\n email,\n hashed_email: await convert(email),\n phone,\n hashed_phone: await convert(phone)\n };\n\n if (paymentType) ecommerce.paymentType = paymentType;\n if (data.transactionId) ecommerce.transaction_id = data.transactionId;\n\n return ecommerce;\n };\n\n return {\n dataLayer,\n /**\n * Send any Event\n * @param {String} eventType\n * @param {Object.} productData\n * @param {String} paymentType\n */\n async sendEvent (eventType, productData, paymentType) {\n sendDataLayer(eventType, await buildPayload(productData, paymentType));\n },\n /**\n * Sends analytics data about initializing the checkout page\n */\n sendBeginCheckout ({ price, discount, productId, productName, coupon, fullName, email, phone }) {\n return this.sendEvent(CHECKOUT_STEP.begin_checkout, {\n totalAmount: price,\n productId,\n productName,\n price,\n discount,\n coupon,\n fullName,\n email,\n phone\n });\n },\n registerCheckoutOptionEvent (paymentMethod, formsValues) {\n const {\n price,\n discount,\n coupon,\n productName,\n productId,\n fullName,\n email,\n phone\n } = formsValues;\n\n const eventData = {\n price,\n discount,\n coupon,\n productName,\n productId,\n fullName,\n email,\n phone,\n totalAmount: price\n };\n\n return this.sendEvent(CHECKOUT_STEP.add_payment_info, eventData, paymentMethod);\n },\n registerPurchaseEvent (paymentMethod, formsValues) {\n // The payment succeeded!\n const {\n coupon,\n discount,\n productName,\n productId,\n price,\n transactionId,\n fullName,\n email,\n phone\n } = formsValues;\n\n const purchaseData = {\n transactionId, // Transaction ID. Required for purchases and refunds.\n coupon,\n discount,\n productId,\n productName,\n price,\n fullName,\n email,\n phone,\n totalAmount: price\n };\n\n return this.sendEvent(CHECKOUT_STEP.purchase, purchaseData, paymentMethod);\n }\n };\n}\n\nfunction getPhone (phone) {\n if (phone === \"\" || phone === undefined) {\n return \"\";\n } else {\n return `55${phone.replace(/[^0-9]/g, \"\")}`;\n }\n}\n","export async function convert (data) {\n if (data === \"\" || data === undefined) return \"\";\n\n const encoder = new TextEncoder();\n const dataBuffer = encoder.encode(data);\n const hashBuffer = await window.crypto.subtle.digest(\"SHA-256\", dataBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return hashHex;\n}\n","/* globals Rollbar */\n\nimport { CouponService } from \"./coupon_service\";\nimport { formatterCurrency, getLowerCaseInputValue } from \"./formatters\";\nimport {\n blurOnEnterKeyupHandler,\n disableInputField,\n disableSubmitButtonElement,\n forceBlurOnEventHandler,\n objectToInlineCss,\n setElementHiddenClass\n} from \"./helper_functions\";\n\nconst createCouponErrorSpan = ({ errorMessage = \"Cupom inválido\", className = \"alert-message\" } = {}) => {\n const couponErrorMessageSpan = document.createElement(\"span\");\n couponErrorMessageSpan.className = className;\n couponErrorMessageSpan.style = objectToInlineCss({\n color: \"#B91C1C\",\n \"font-weight\": 500,\n \"font-size\": \"14px\",\n \"font-family\": \"Inter, sans-serif\",\n \"padding-top\": \"6px\",\n });\n\n couponErrorMessageSpan.textContent = errorMessage;\n return couponErrorMessageSpan;\n};\n\n/**\n *\n * @param {{\n * elements: {\n * clearCouponButton: HTMLSpanElement;\n * couponInput: HTMLInputElement;\n * discountAmountSpan: HTMLSpanElement;\n * errorSpanContainer: HTMLElement;\n * formAmountHiddenInput: HTMLInputElement;\n * paymentTotalSpan: HTMLSpanElement;\n * submitCouponButton: HTMLSpanElement;\n * emailInput: HTMLInputElement;\n * submitFormButton: HTMLInputElement;\n * };\n * errorMessageOptions: {\n * errorMessage: string;\n * className: string;\n * };\n * }} params\n * @returns\n */\nexport const couponFormFactory = (params = {}) => {\n const { elements, productId, errorMessageOptions = {} } = params;\n if (!elements || Object.keys(elements).length < 1) {\n throw new Error(\"Should provide elements references!\");\n }\n if (!productId || !productId?.length) {\n throw new Error(\"Should provide productId value!\");\n }\n\n if (new URLSearchParams(window.location.search).has(\"cupom\")) {\n const { clearCouponButton } = elements;\n\n function removeCouponFromUrlHandler () {\n const currentUrl = new URL(window.location.href);\n currentUrl.searchParams.delete(\"cupom\");\n window.location.assign(currentUrl);\n }\n\n if (clearCouponButton) {\n clearCouponButton.addEventListener(\"click\", removeCouponFromUrlHandler);\n } else if (Rollbar) {\n Rollbar.error(\"Missing clear coupon button reference\", {\n url: window.location.href\n });\n }\n\n return { fixedCoupon: true };\n }\n\n const {\n clearCouponButton,\n couponInput,\n discountAmountSpan,\n errorSpanContainer,\n formAmountHiddenInput,\n paymentTotalSpan,\n submitCouponButton,\n emailInput,\n submitFormButton\n } = elements;\n\n /** @type {Function[]} */\n let couponChangeEventListeners = [];\n\n let currentlyActiveCoupon = \"\";\n\n let validEmail = null;\n\n const couponErrorSpan = createCouponErrorSpan(errorMessageOptions);\n\n function addCouponChangeListener (listener) {\n if (!couponChangeEventListeners.some((registeredListener) => registeredListener === listener)) {\n couponChangeEventListeners.push(listener);\n }\n }\n\n function removeCouponChangeListener (listener) {\n couponChangeEventListeners = couponChangeEventListeners\n .filter((registeredListener) => registeredListener !== listener);\n }\n\n /**\n * Publish data to listeners\n *\n * @param {{\n * amountOff: string\n * couponId: string\n * discountAmount: string\n * discountedAmount: string\n * percentOff: string\n * }} couponData\n * @param {boolean=} clear\n */\n function pushCouponChangeToListeners (couponData, clear) {\n couponChangeEventListeners.forEach((listener) => {\n try {\n listener?.(couponData, clear);\n } catch (error) {\n console.error(\"Failed to call listener:\", { listener });\n }\n });\n }\n\n function couponInputClickHandler () {\n setElementHiddenClass(submitCouponButton, false);\n disableInputField(submitCouponButton, false, !currentlyActiveCoupon.length);\n removeErrorSpan();\n }\n\n function removeErrorSpan () {\n if (couponErrorSpan.parentElement) {\n couponErrorSpan.parentElement.removeChild(couponErrorSpan);\n }\n }\n\n /**\n * Appends errorSpan into the given parentElement\n * @param {HTMLElement} parentElement to append the errorSpan as child\n */\n function appendErrorSpan (parentElement = errorSpanContainer) {\n removeErrorSpan();\n parentElement.appendChild(couponErrorSpan);\n }\n\n /**\n * Fetch coupon data from server relative to the current product\n * @param {string} coupon\n * @param {string} amount\n * @param {string} email\n */\n const fetchCoupon = async (coupon, amount, email) => {\n const couponData = await CouponService.getCoupon(coupon, amount, productId, email)\n .catch((error) => {\n console.error(error);\n appendErrorSpan(errorSpanContainer);\n });\n if (!couponData) {\n return null;\n }\n const formattedDiscountedAmount = formatterCurrency.format(couponData.discountedAmount / 100);\n const formattedDiscount = formatterCurrency.format(couponData.discountAmount / 100);\n const formattedPixDiscountedAmount = formatterCurrency.format(couponData.pixDiscountedAmount / 100);\n const formattedPixAmount = formatterCurrency.format(couponData.pixAmount / 100);\n\n return {\n ...couponData,\n formattedDiscount,\n formattedDiscountedAmount,\n formattedPixAmount,\n formattedPixDiscountedAmount\n };\n };\n\n /**\n * Handles loss of focus in couponInput\n * @param {FocusEvent} event\n */\n function couponInputBlurHandler (event) {\n event.preventDefault();\n removeErrorSpan();\n\n const couponName = couponInput.value.toUpperCase();\n\n setElementHiddenClass(submitCouponButton, true);\n disableInputField(couponInput, true, false);\n\n if (couponName.trim().length < 1 && currentlyActiveCoupon) {\n couponInput.value = currentlyActiveCoupon;\n disableInputField(couponInput, false, false);\n return;\n // eslint-disable-next-line eqeqeq\n } else if (couponName.trim() == currentlyActiveCoupon && validEmail == getLowerCaseInputValue(emailInput)) {\n disableInputField(couponInput, false, false);\n return;\n } else if (couponName.trim().length < 1) {\n disableInputField(couponInput, false, true);\n return;\n }\n\n // disable submit form while the coupon is validating\n disableSubmitButtonElement(submitFormButton, true);\n\n const lowercasedEmailValue = getLowerCaseInputValue(emailInput);\n\n fetchCoupon(couponName, formAmountHiddenInput.value, lowercasedEmailValue)\n .then((couponData) => {\n if (couponData !== null) {\n // save the previous email used to validate coupon\n validEmail = lowercasedEmailValue;\n currentlyActiveCoupon = couponName;\n couponInput.value = couponName;\n discountAmountSpan.textContent = couponData.formattedDiscount;\n paymentTotalSpan.textContent = couponData.formattedDiscountedAmount;\n // disable input to not edit coupon after a validation\n disableInputField(couponInput, true, false);\n setElementHiddenClass(discountAmountSpan, false);\n setElementHiddenClass(clearCouponButton, false);\n } else if (validEmail !== lowercasedEmailValue) {\n // if email input value is different from the first email filled, coupon is invalid\n removeCouponHandler();\n } else {\n couponInput.value = currentlyActiveCoupon;\n }\n disableInputField(submitCouponButton, true, false);\n\n pushCouponChangeToListeners(couponData);\n })\n .finally(() => {\n // deal with coupon input disable\n // when currentlyActiveCoupon has not length, disable is false\n // when currentlyActiveCoupon has length, disable is true (coupon is already validated)\n disableInputField(couponInput, currentlyActiveCoupon.length, !currentlyActiveCoupon.length);\n disableSubmitButtonElement(submitFormButton, false);\n });\n }\n\n function removeCouponHandler () {\n removeErrorSpan();\n setElementHiddenClass(submitCouponButton, false);\n disableInputField(couponInput, false, true);\n pushCouponChangeToListeners(null, true);\n setElementHiddenClass(discountAmountSpan, true);\n setElementHiddenClass(clearCouponButton, true);\n setElementHiddenClass(submitCouponButton, true);\n currentlyActiveCoupon = \"\";\n }\n\n // check coupon after email is filled\n emailInput.addEventListener(\"blur\", couponInputBlurHandler);\n\n couponInput.addEventListener(\"blur\", couponInputBlurHandler);\n\n couponInput.addEventListener(\"click\", couponInputClickHandler);\n\n couponInput.addEventListener(\"keyup\", blurOnEnterKeyupHandler);\n\n submitCouponButton.addEventListener(\"click\", forceBlurOnEventHandler);\n\n clearCouponButton.addEventListener(\"click\", removeCouponHandler);\n\n return {\n fixedCoupon: false,\n couponInput,\n clearCouponButton,\n submitCouponButton,\n discountAmountSpan,\n paymentTotalSpan,\n addCouponChangeListener,\n removeCouponChangeListener,\n appendErrorSpan,\n removeErrorSpan,\n elements\n };\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CouponService = {\n /**\n * Retrieves coupon info from backend\n *\n * @param {string} coupon identifier\n * @param {string} amount value of the product\n * @param {string} productId of the discounted product\n * @param {string} email of the user\n * @returns {Promise<{\n * coupon: string;\n * amount: string;\n * amountOff: number;\n * discountAmount: number;\n * discountedAmount: number;\n * percentOff: number;\n * pixAmount: number;\n * pixDiscountedAmount: number;\n * }>}\n */\n async getCoupon (coupon, amount, productId, email) {\n const fetchUrlParams = new URLSearchParams({ amount, product_id: productId, email });\n const couponResponse = await fetch(`/coupon_payments/${coupon}?${fetchUrlParams}`);\n if (!couponResponse.ok) {\n throw new Error(`Failed to get coupon: ${couponResponse.statusText}`);\n }\n const couponData = await couponResponse.json();\n if (\"error\" in couponData) {\n throw new Error(coupon.error);\n }\n const discountAmount = couponData.discount_amount;\n const discountedAmount = couponData.new_amount;\n\n return {\n coupon,\n amount,\n amountOff: couponData.amount_off,\n percentOff: couponData.percent_off,\n discountAmount,\n discountedAmount,\n pixAmount: couponData.pix_amount,\n pixDiscountedAmount: couponData.pix_discount_amount\n };\n }\n};\n","import { addCorrId, loadCorrId } from './utils/correlation_id_store';\n\n// Send webhook to Zapier or any other service\nexport const webhook = Object.freeze({\n sendPost (url, body, headers = { \"Content-Type\": \"application/json\" }) {\n return fetch(url, {\n method: \"POST\",\n headers: addCorrId(headers),\n body: JSON.stringify(body)\n })\n .then(async (response) => {\n loadCorrId(response.headers);\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: await (response.ok ? response.json() : response.text()),\n };\n })\n .catch((error) => {\n return {\n ok: false,\n error\n };\n });\n }\n});\n","export function debounced (fnToCall, timeout = 500) {\n let timeoutRef = null;\n return (...args) => {\n if (timeoutRef) return;\n timeoutRef = setTimeout(() => {\n fnToCall(...args);\n\n clearTimeout(timeoutRef);\n timeoutRef = null;\n }, timeout);\n };\n};\n","import { couponFormFactory } from \"../../../coupon_form_factory\";\nimport { formatterCurrency, getValueWithoutFormat } from \"../../../formatters\";\n\nexport function setupPaymentForm (clientForm, productForm, submitButton, paymentMethod = \"card\") {\n const formCouponIdHiddenInput = document.getElementById(\"client_payment_coupon_id\");\n const formAmountOffHiddenInput = document.getElementById(\"client_payment_amount_off\");\n const formPercentOffHiddenInput = document.getElementById(\"client_payment_percent_off\");\n const formDiscountAmountHiddenInput = document.getElementById(\"client_payment_discount_amount\");\n const formAmountHiddenInput = document.getElementById(\"client_payment_amount\");\n const formTotalAmountHiddenInput = document.getElementById(\"client_payment_total_amount\");\n const formCountInstallmentsHiddenInput = document.getElementById(\"client_payment_installments_count\");\n const formFixedInstallmentHiddenInput = document.getElementById(\"client_payment_fixed_installments\");\n\n if (window.coupon_accepted) {\n const { emailInput } = clientForm.inputs;\n\n const couponElements = {\n formAmountHiddenInput,\n couponInput: document.getElementById(\"coupon_id\"),\n discountAmountSpan: document.getElementById(\"discount-amount\"),\n paymentTotalSpan: document.getElementById(\"payment-total\"),\n clearCouponButton: document.getElementById(\"clear_coupon\"),\n errorSpanContainer: document.getElementById(\"coupon-container\")?.parentElement,\n submitCouponButton: document.getElementById(\"submit_coupon\"),\n emailInput,\n submitButton\n };\n let timeoutRef = null;\n\n const couponForm = couponFormFactory({\n elements: couponElements,\n productId: productForm.getId()\n });\n if (couponForm && !couponForm.fixedCoupon) {\n // TODO: this is for card payment, should extract and have the variant for pix/nupay here\n /**\n * Update installments options or span\n *\n * @param {string} amount numeric value\n * @param {boolean} [fixedInstallments=false] flag\n */\n const updateInstallments = (amount, fixedInstallments = false) => {\n if (fixedInstallments) {\n // operates over single span element\n const numericValue = Number(formCountInstallmentsHiddenInput.value);\n const formattedInstallmentValue = formatterCurrency.format(\n Number(amount) / numericValue\n );\n showInstallmentsSpan.innerText = `${numericValue}x ${formattedInstallmentValue} sem juros`;\n } else {\n // operate over options elements\n installmentsOptionsElements.forEach(function (item) {\n const numericValue = Number(item.value);\n const formattedInstallmentValue = formatterCurrency.format(\n Number(amount) / numericValue\n );\n item.innerText = `${numericValue}x ${formattedInstallmentValue} sem juros`;\n });\n }\n };\n\n if (couponForm) {\n /**\n * Handles changes in coupon values\n *\n * @param {{\n * amount: string\n * amountOff: number\n * coupon: string\n * discountAmount: number\n * discountedAmount: number\n * formattedDiscount: string\n * formattedDiscountedAmount: string\n * percentOff: string\n * } | null} coupon\n * @param {boolean=} clear\n */\n const couponChangeHandler = (coupon, clear = false) => {\n const rawOriginalAmount = Number(formAmountHiddenInput.value) / 100;\n const originalAmount = formatterCurrency.format(rawOriginalAmount);\n\n if (clear) {\n formCouponIdHiddenInput.value = \"\";\n formTotalAmountHiddenInput.value = formAmountHiddenInput.value;\n formDiscountAmountHiddenInput.value = \"\";\n formAmountOffHiddenInput.value = \"\";\n formPercentOffHiddenInput.value = \"\";\n\n couponElements.paymentTotalSpan.innerText = originalAmount;\n couponElements.discountAmountSpan.innerText = \"\";\n\n updateInstallments(rawOriginalAmount, formFixedInstallmentHiddenInput?.value === \"true\");\n return;\n } else if (coupon === null && formCouponIdHiddenInput.value) {\n if (timeoutRef !== null) {\n clearTimeout(timeoutRef);\n }\n timeoutRef = setTimeout(() => {\n couponForm.removeErrorSpan();\n }, 3000);\n return;\n } else if (coupon === null) {\n couponForm.appendErrorSpan();\n return;\n }\n\n couponForm.removeErrorSpan();\n\n formAmountOffHiddenInput.value = coupon.amountOff;\n formCouponIdHiddenInput.value = coupon.coupon;\n formDiscountAmountHiddenInput.value = coupon.discountAmount;\n formTotalAmountHiddenInput.value = coupon.discountedAmount;\n formPercentOffHiddenInput.value = coupon.percentOff;\n\n couponElements.paymentTotalSpan.innerText = coupon.formattedDiscountedAmount;\n couponElements.discountAmountSpan.innerText = coupon.formattedDiscount;\n\n updateInstallments(coupon.discountedAmount / 100, formFixedInstallmentHiddenInput?.value === \"true\");\n };\n couponForm.addCouponChangeListener(couponChangeHandler);\n }\n }\n }\n // END of Coupon Form\n}\n\nexport function getPaymentInfoHelpers ({ from_cents } = { from_cents: false }) {\n const factor = from_cents ? 100 : 1;\n const productUnitAmountHiddenInput = document.getElementById(\"unit-amount\") || document.getElementById(\"payment-total\");\n const formAmountOffHiddenInput = document.getElementById(\"client_payment_amount_off\");\n const formPercentOffHiddenInput = document.getElementById(\"client_payment_percent_off\");\n\n function getUnitAmount () {\n return getValueWithoutFormat(productUnitAmountHiddenInput?.innerText) / factor;\n }\n\n function getDiscountAmount () {\n const percentDiscount = formPercentOffHiddenInput.value\n ? (getUnitAmount() * (+formPercentOffHiddenInput.value)) / 100\n : 0;\n const discountAmount = getValueWithoutFormat(formAmountOffHiddenInput.value)\n ? +getValueWithoutFormat(formAmountOffHiddenInput.value) / 100\n : percentDiscount;\n return discountAmount;\n }\n\n function getTotalAmount () {\n return getUnitAmount() - getDiscountAmount();\n }\n\n return { getUnitAmount, getDiscountAmount, getTotalAmount };\n}\n","/**\n * Converts a number in seconds to a string of descriptive time in the biggest units\n *\n * @param {number} secondsTime to parse\n * @param {boolean} hideSeconds to not show seconds in final string\n */\nexport function getDescriptiveTime (secondsTime, hideSeconds = false) {\n const ONE_MIN = 60;\n const ONE_HOUR = 60 * ONE_MIN;\n const ONE_DAY = 24 * ONE_HOUR;\n\n const seconds = secondsTime % ONE_MIN;\n const minutesTime = secondsTime - seconds;\n const minutes = (minutesTime % ONE_HOUR) / ONE_MIN;\n const hoursTime = minutesTime - (minutes * ONE_MIN);\n const hours = (hoursTime % ONE_DAY) / ONE_HOUR;\n const daysTime = hoursTime - (hours * ONE_HOUR);\n const days = daysTime / ONE_DAY;\n\n const numFormat = new Intl.NumberFormat([\"pt-BR\"], {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format;\n\n const descriptiveParts = [\n { value: days, unit: [\"dia\", \"dias\"] },\n { value: hours, unit: [\"hora\", \"horas\"] },\n { value: minutes, unit: [\"minuto\", \"minutos\"] },\n { value: hideSeconds ? 0 : seconds, unit: [\"segundo\", \"segundos\"] }\n ]\n .filter(({ value }) => Math.floor(value) > 0)\n .map(({ value, unit: [one, multiple] }) => `${numFormat(Math.floor(value))} ${value === 1 ? one : multiple}`);\n\n if (descriptiveParts.length > 1) {\n descriptiveParts.splice(\n descriptiveParts.length - 2,\n 2,\n [\n descriptiveParts[descriptiveParts.length - 2],\n descriptiveParts[descriptiveParts.length - 1]\n ].join(\" e \")\n );\n }\n\n const descriptive = descriptiveParts.join(\", \").trim();\n\n return descriptive.length ? descriptive : \"Agora\";\n}\n","import { GtmFactory, CHECKOUT_STEP, PAYMENT_TYPE } from \"./gtm_script\";\nimport { addCorrId, tapAndLoadCorrId } from \"./utils/correlation_id_store\";\nimport {\n getFormattedCurrencyValueFromEl,\n formatterCurrency,\n getLowerCaseInputValue\n} from \"./formatters\";\nimport {\n isPJ,\n doesNotHaveValue,\n parseFetchResponse,\n checkoutCustomerFormHelpers,\n disableSubmitButtonElement,\n setElementHiddenClass\n} from \"./helper_functions\";\nimport { couponFormFactory } from \"./coupon_form_factory\";\nimport { webhook } from \"./webhook_service\";\nimport { debounced } from \"./debounced\";\nimport { getDescriptiveTime } from \"./utils/get_descriptive_time\";\nimport { getPaymentInfoHelpers } from \"./utils/form/payment/payment_form\";\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n let paymentIntentId = null;\n const PIX_STATUS_POLLING_TIME_LIMIT = window.PM3.PIX_STATUS_POLLING_TIME_LIMIT || 1000 * 60 * 5; // 5 min in ms\n const PIX_STATUS_POLLING_INTERVAL = window.PM3.PIX_STATUS_POLLING_INTERVAL || 1000 * 5; // 5s in ms\n const PIX_EXPIRATION_UPDATE_INTERVAL = window.PM3.PIX_EXPIRATION_UPDATE_INTERVAL || 60 * 1000;\n const gtm = GtmFactory();\n\n // Product details\n const productIdHiddenInput = document.getElementById(\"product_id\");\n const productNameHiddenInput = document.getElementById(\"product_name\");\n const productUnitAmountHiddenInput =\n document.getElementById(\"unit-amount\") ||\n document.getElementById(\"payment-total\");\n const productTypPixProcessing = document.getElementById(\"typ_pix_processing\");\n const productTypPixError = document.getElementById(\"typ_pix_error\");\n\n // Defines TYP pix\n const typPixProcessing =\n productTypPixProcessing?.value?.length > 0\n ? productTypPixProcessing.value\n : window.PM3.typPixProcessing;\n const typPixError = productTypPixError?.value?.length\n ? productTypPixError.value\n : window.PM3.typPixError;\n\n // Defines PF or PJ from backend\n const formClientType = document.getElementById(\"client_payment_client_type\");\n\n // form\n const formElement = document.getElementById(\"client_payment_form\");\n const formNameInput = document.getElementById(\"client_payment_name\");\n const formEmailInput = document.getElementById(\"client_payment_email\");\n const formDocumentInput = document.getElementById(\"client_payment_document\");\n const isForeignerInput = document.getElementById(\"is_foreigner\");\n const formPhoneNumberInput = document.getElementById(\n \"client_payment_phone_number\"\n );\n const whatsappAcceptElement = document.getElementById(\"whatsapp_checkbox\");\n // CNPJ registration\n const stateRegistrationInput = formElement.querySelector(\n \"input#client_payment_state_registration\"\n );\n const municipalRegistrationInput = formElement.querySelector(\n \"input#client_payment_municipal_registration\"\n );\n\n const productProviderHiddenInput = document.getElementById(\"provider\");\n const formCouponIdHiddenInput = document.getElementById(\n \"client_payment_coupon_id\"\n );\n const formAmountOffHiddenInput = document.getElementById(\n \"client_payment_amount_off\"\n );\n const formPercentOffHiddenInput = document.getElementById(\n \"client_payment_percent_off\"\n );\n const formDiscountAmountHiddenInput = document.getElementById(\n \"client_payment_discount_amount\"\n );\n const formAmountHiddenInput = document.getElementById(\n \"client_payment_amount\"\n );\n const formTotalAmountHiddenInput = document.getElementById(\n \"client_payment_total_amount\"\n );\n\n const stateRegistrationAlertMessageElement = document.querySelector(\n \"#error_registration\"\n );\n const formDocumentAlertMessageSpan = document.querySelector(\n \"#document_validation\"\n );\n\n // UI Form elements\n const whatsappLabelElement = document.getElementById(\"whatsapp_label\");\n const documentLabelElement = document.getElementById(\"document_label\");\n\n /** @type {HTMLButtonElement} */\n const submitButtonElement = document.querySelector(\"#submit\");\n\n /** @type {HTMLDivElement} */\n const buttonLoadingSpinner = submitButtonElement.querySelector(\n \"#pay-now-button-spinner\"\n );\n /** @type {HTMLSpanElement} */\n const payNowButtonLabel = submitButtonElement.querySelector(\n \"#pay-now-button-label\"\n );\n\n const formHelpers = checkoutCustomerFormHelpers({\n alertMessageDocumentElement: formDocumentAlertMessageSpan,\n documentLabelElement,\n formDocumentElement: formDocumentInput,\n formPhoneNumberElement: formPhoneNumberInput,\n formClientType,\n isForeignerElement: isForeignerInput,\n submitButtonElement,\n whatsappAcceptElement,\n whatsappLabelElement\n });\n\n // Coupon Form init\n if (window.coupon_accepted) {\n const couponElements = {\n formAmountHiddenInput,\n couponInput: document.getElementById(\"coupon_id\"),\n discountAmountSpan: document.getElementById(\"discount-amount\"),\n paymentTotalSpan: document.getElementById(\"payment-total\"),\n clearCouponButton: document.getElementById(\"clear_coupon\"),\n errorSpanContainer:\n document.getElementById(\"coupon-container\")?.parentElement,\n submitCouponButton: document.getElementById(\"submit_coupon\"),\n pixTotalAmountSpans: document.querySelectorAll(\"#pix_total_amount\"),\n emailInput: formEmailInput,\n submitFormButton: submitButtonElement\n };\n\n let timeoutRef = null;\n\n const couponForm = couponFormFactory({\n elements: couponElements,\n productId: productIdHiddenInput.value\n });\n if (couponForm && !couponForm.fixedCoupon) {\n /**\n * Update pix price\n * @param {string} amount numeric value\n */\n const updatePixPrice = (amount) => {\n couponElements.pixTotalAmountSpans.forEach(function(span) {\n span.innerText = ` ${amount}`;\n });\n };\n /**\n * Handles changes in coupon values\n *\n * @param {{\n * amount: string\n * amountOff: number\n * coupon: string\n * discountAmount: number\n * discountedAmount: number\n * formattedDiscount: string\n * formattedDiscountedAmount: string\n * percentOff: string\n * } | null} coupon\n * @param {boolean=} clear\n */\n const couponChangeHandler = (coupon, clear = false) => {\n const rawOriginalAmount = Number(formAmountHiddenInput.value) / 100;\n const originalAmount = formatterCurrency.format(rawOriginalAmount);\n if (clear) {\n formCouponIdHiddenInput.value = \"\";\n formTotalAmountHiddenInput.value = formAmountHiddenInput.value;\n formDiscountAmountHiddenInput.value = \"\";\n formAmountOffHiddenInput.value = \"\";\n formPercentOffHiddenInput.value = \"\";\n\n couponElements.paymentTotalSpan.innerText = originalAmount;\n couponElements.discountAmountSpan.innerText = \"\";\n\n updatePixPrice(originalAmount);\n return;\n } else if (coupon === null && formCouponIdHiddenInput.value) {\n if (timeoutRef !== null) {\n clearTimeout(timeoutRef);\n }\n timeoutRef = setTimeout(() => {\n couponForm.removeErrorSpan();\n }, 3000);\n return;\n } else if (coupon === null) {\n couponForm.appendErrorSpan();\n return;\n }\n\n couponForm.removeErrorSpan();\n\n formAmountOffHiddenInput.value = coupon.amountOff;\n formCouponIdHiddenInput.value = coupon.coupon;\n formDiscountAmountHiddenInput.value = coupon.discountAmount;\n formTotalAmountHiddenInput.value = coupon.discountedAmount;\n formPercentOffHiddenInput.value = coupon.percentOff;\n\n couponElements.paymentTotalSpan.innerText =\n coupon.formattedDiscountedAmount;\n couponElements.discountAmountSpan.innerText = coupon.formattedDiscount;\n\n updatePixPrice(coupon.formattedDiscountedAmount);\n };\n couponForm.addCouponChangeListener(couponChangeHandler);\n }\n }\n // END of Coupon Form\n\n /**\n * Show a spinner on payment submission\n *\n * @param {boolean} isLoading\n */\n const setLoading = function (isLoading, elements = {}) {\n const { loading = buttonLoadingSpinner, label = payNowButtonLabel } = elements;\n // Disable the button and show the spinner\n disableSubmitButtonElement(submitButtonElement);\n\n setElementHiddenClass(loading, !isLoading);\n setElementHiddenClass(label, isLoading);\n };\n\n // Show the customer the error from Stripe if their card fails to charge\n const showPaymentError = function (errorMsgText) {\n setLoading(false);\n const errorMsg = document.querySelector(\"#card-error\");\n errorMsg.textContent = errorMsgText;\n };\n\n // Get payment information from form\n const getAmountAndCouponInformation = () => ({\n coupon_id: formCouponIdHiddenInput.value,\n coupon_amount_off: getFormattedCurrencyValueFromEl(\n formAmountOffHiddenInput\n ),\n coupon_percent_off: formPercentOffHiddenInput.value,\n discount_amount: getFormattedCurrencyValueFromEl(\n formDiscountAmountHiddenInput\n ),\n subtotal_amount: productUnitAmountHiddenInput?.innerText,\n total_amount: getFormattedCurrencyValueFromEl(formTotalAmountHiddenInput)\n });\n\n // Get client payment information from form\n const getClientPaymentFormData = (paymentMethodId) => ({\n name: formNameInput.value,\n email: getLowerCaseInputValue(formEmailInput),\n document: formDocumentInput.value,\n phone_number: formPhoneNumberInput.value,\n coupon_id: formCouponIdHiddenInput.value,\n amount_off: formAmountOffHiddenInput.value,\n percent_off: formPercentOffHiddenInput.value,\n discount_amount: formDiscountAmountHiddenInput.value,\n amount: formAmountHiddenInput.value,\n total_amount: formTotalAmountHiddenInput.value,\n product_id: productIdHiddenInput.value,\n whatsapp_accept: whatsappAcceptElement.checked,\n installments_count: 1, // formCountInstallmentsHiddenInput.value,\n payment_method_id: paymentMethodId,\n is_foreigner: isForeignerInput?.checked,\n provider: productProviderHiddenInput.value,\n is_pj: formHelpers.pjMode\n });\n\n const paymentHelpers = getPaymentInfoHelpers();\n\n gtm.sendBeginCheckout({\n productId: productIdHiddenInput.value,\n productName: productNameHiddenInput.value,\n price: paymentHelpers.getTotalAmount(),\n coupon: formCouponIdHiddenInput.value,\n discount: paymentHelpers.getDiscountAmount(),\n fullName: formNameInput.value,\n email: formEmailInput.value,\n phone: formPhoneNumberInput.value\n });\n\n const gtmRegisterCheckoutOptionEvent = () => {\n const eventData = {\n price: paymentHelpers.getTotalAmount(),\n discount: paymentHelpers.getDiscountAmount(),\n coupon: formCouponIdHiddenInput.value,\n productName: productNameHiddenInput.value,\n productId: productIdHiddenInput.value,\n totalAmount: paymentHelpers.getTotalAmount(),\n fullName: formNameInput.value,\n email: formEmailInput.value,\n phone: formPhoneNumberInput.value\n };\n\n gtm.sendEvent(CHECKOUT_STEP.add_payment_info, eventData, PAYMENT_TYPE.pix);\n };\n\n const gtmRegisterPurchaseEvent = async (clientInstantPaymentResponseBody) => {\n // The payment succeeded!\n const { product_id, id: transactionId, coupon_id, product_name } =\n clientInstantPaymentResponseBody;\n\n return gtm.sendEvent(CHECKOUT_STEP.purchase, {\n transactionId, // Transaction ID. Required for purchases and refunds.\n coupon: coupon_id,\n productId: product_id,\n productName: product_name,\n price: paymentHelpers.getTotalAmount(),\n discount: paymentHelpers.getDiscountAmount(),\n totalAmount: paymentHelpers.getTotalAmount(),\n fullName: formNameInput.value,\n email: formEmailInput.value,\n phone: formPhoneNumberInput.value\n }, PAYMENT_TYPE.pix);\n };\n\n /**\n * Send partial filled form data to backend as a paymentIntent\n */\n const createPaymentIntentOnDB = async () => {\n const url = window.PM3.paymentIntentsPath;\n\n const body = {\n payment_intent: {\n id: paymentIntentId,\n name: formNameInput.value,\n email: getLowerCaseInputValue(formEmailInput),\n product_name: productNameHiddenInput.value,\n product_id: productIdHiddenInput.value,\n total_amount: formTotalAmountHiddenInput.value,\n phone_number: formPhoneNumberInput.value\n }\n };\n const response = await webhook.sendPost(url, body);\n\n if (response.ok) {\n paymentIntentId = response.body.id;\n }\n };\n\n // Sets email field to trigger a Create Payment Intent on lost of focus\n formEmailInput.addEventListener(\"blur\", () => {\n if (formEmailInput.value.trim().length) createPaymentIntentOnDB();\n });\n\n // Sets phone number field to trigger a Create Payment Intent on lost of focus\n formPhoneNumberInput.addEventListener(\"blur\", () => {\n if (formPhoneNumberInput.value.trim().length) createPaymentIntentOnDB();\n });\n\n // Shows a success message when the payment is complete and redirect\n const showOrderCompleteAndRedirect = () => {\n setLoading(false);\n const thankYouPageURL = document.getElementById(\"typ_url\").value;\n const spinnerLoading = document.getElementById(\"spinner-loading\");\n\n disableSubmitButtonElement(submitButtonElement);\n\n setTimeout(() => {\n window.parent.location.replace(thankYouPageURL);\n }, 2000);\n\n spinnerLoading.classList.remove(\"hidden\");\n payNowButtonLabel.innerText = \"Pagamento feito com sucesso!\";\n };\n\n // Shows a error message when the payment is not complete\n const showOrderError = () => {\n setLoading(false);\n const spinnerLoading = document.getElementById(\"spinner-loading\");\n\n disableSubmitButtonElement(submitButtonElement, true);\n\n setTimeout(() => {\n window.parent.location.replace(typPixError);\n }, 2000);\n\n spinnerLoading.classList.remove(\"hidden\");\n\n payNowButtonLabel.innerText = \"Código Pix expirado.\";\n };\n\n // Shows a processing message when the payment is processing\n const showOrderProcessing = () => {\n setLoading(false);\n const spinnerLoading = document.getElementById(\"spinner-loading\");\n\n disableSubmitButtonElement(submitButtonElement, true);\n\n setTimeout(() => {\n window.parent.location.replace(typPixProcessing);\n }, 2000);\n\n spinnerLoading.classList.remove(\"hidden\");\n payNowButtonLabel.innerText = \"Processando pagamento via Pix.\";\n };\n\n function fetchTransactionStatus (clientInstantPaymentId, signal) {\n return fetch(`/client_instant_payments/${clientInstantPaymentId}`, { signal, headers: addCorrId() })\n .then(tapAndLoadCorrId)\n .then(async (response) => {\n if (response.ok) {\n const { status, error } = await response.json();\n return { status, error };\n }\n return { status: undefined, error: await response.text() };\n })\n .catch((error) => {\n return { status: undefined, error: { type: \"requestError\", error } };\n });\n }\n\n let cancelPixPaymentValidationLoop;\n let timeLeftUpdateLoop;\n\n function closeQrCodeDialog () {\n cancelPixPaymentValidationLoop?.();\n timeLeftUpdateLoop?.();\n\n const dialog = document.getElementById(\"pix-dialog\");\n\n if (dialog.open) {\n dialog.close();\n }\n\n const amountHeader = dialog.querySelector(\".amount-header\");\n const img = dialog.querySelector(\"img.qr-code-img\");\n const copyCta = dialog.querySelector(\"button.qr-code-data-copy-cta\");\n const expirationInfoSpan = dialog.querySelector(\".qr-code-expiration-info\");\n\n img.src = \"\";\n copyCta.dataset.qrCode = \"\";\n amountHeader.textContent = \"\";\n expirationInfoSpan.textContent = \"Vence em\";\n }\n\n document.getElementById(\"pix-dialog\")\n .querySelector(\".close-qr-code-cta\")\n .addEventListener(\"click\", closeQrCodeDialog);\n\n document.getElementById(\"pix-dialog\").addEventListener(\"cancel\", (event) => {\n event.preventDefault();\n closeQrCodeDialog();\n });\n\n let copiedMessageTimeoutRef;\n\n document.getElementById(\"pix-dialog\")\n .querySelector(\"button.qr-code-data-copy-cta\")\n .addEventListener(\"click\", async function handleCopyCtaClick () {\n const dialog = document.getElementById(\"pix-dialog\");\n const self = dialog.querySelector(\"button.qr-code-data-copy-cta\");\n const qrCode = self.dataset.qrCode;\n if (!navigator || !(\"clipboard\" in navigator)) {\n throw new Error(\"Failed to copy Pix QR Code, Clipboard API not available\");\n }\n if (!qrCode) {\n throw new Error(\"Tried to copy empty Pix QR Code\");\n }\n await navigator.clipboard.writeText(qrCode);\n if (copiedMessageTimeoutRef) {\n clearTimeout(copiedMessageTimeoutRef);\n }\n const label = self.querySelector(\".qr-code-data-copy-cta-label\");\n const previousText = label.textContent;\n label.textContent = \"Copiado!\";\n copiedMessageTimeoutRef = setTimeout(() => {\n if (label.textContent !== previousText) {\n label.textContent = previousText;\n }\n }, 3000);\n });\n\n function pollTransactionConfirmation (clientInstantPaymentId, expirationTime = null) {\n if (cancelPixPaymentValidationLoop) {\n cancelPixPaymentValidationLoop();\n cancelPixPaymentValidationLoop = undefined;\n }\n let resolveAsPending;\n const controller = new AbortController();\n let timeoutId;\n\n const promise = new Promise((resolve, reject) => {\n const expirationDelta = expirationTime ? expirationTime * 1000 : PIX_STATUS_POLLING_TIME_LIMIT;\n const timeoutLimit = Date.now() + expirationDelta;\n resolveAsPending = () => {\n resolve(\"pending\");\n };\n function executeRequest () {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(async () => {\n const expired = Date.now() > timeoutLimit;\n const { status, error } = await fetchTransactionStatus(clientInstantPaymentId, controller.signal);\n if (error) {\n promise.cancel(error);\n return reject(error);\n }\n if (status !== \"pending\") {\n return resolve(status);\n }\n if (expired) {\n return resolve(\"pending\");\n }\n executeRequest();\n }, PIX_STATUS_POLLING_INTERVAL);\n }\n executeRequest();\n });\n promise.cancel = (failed) => {\n if (!failed && resolveAsPending) {\n resolveAsPending();\n }\n clearTimeout(timeoutId);\n controller.abort();\n };\n cancelPixPaymentValidationLoop = promise.cancel;\n return promise;\n }\n\n const expirationDateTimeFormatter = new Intl.DateTimeFormat([\"pt-BR\"], {\n day: \"numeric\",\n month: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n second: \"2-digit\"\n });\n\n function showQrCodeDialog (clientInstantPaymentId, amount, imgSrc, dataContents, expiresIn) {\n setLoading(true);\n showPaymentError(\"\");\n const dialog = document.getElementById(\"pix-dialog\");\n const amountHeader = dialog.querySelector(\".amount-header\");\n const img = dialog.querySelector(\"img.qr-code-img\");\n const copyCta = dialog.querySelector(\"button.qr-code-data-copy-cta\");\n const expirationInfoSpan = dialog.querySelector(\".qr-code-expiration-info\");\n\n img.src = imgSrc;\n copyCta.dataset.qrCode = dataContents;\n amountHeader.textContent = formatterCurrency.format(amount / 100);\n\n const expirationTimestamp = Date.now() + (expiresIn * 1000);\n\n function updateExpirationTime () {\n const timeLeftInMs = expirationTimestamp - Date.now();\n const expiration = expirationDateTimeFormatter.format(expirationTimestamp);\n if (timeLeftInMs < 0) {\n timeLeftUpdateLoop?.();\n expirationInfoSpan.textContent = `Venceu em ${expiration}`;\n } else {\n expirationInfoSpan.textContent = `Vence em ${expiration} (${getDescriptiveTime(timeLeftInMs / 1000, true)})`;\n }\n }\n\n if (PIX_EXPIRATION_UPDATE_INTERVAL) {\n const expirationUpdateInterval = setInterval(updateExpirationTime, PIX_EXPIRATION_UPDATE_INTERVAL);\n timeLeftUpdateLoop = () => {\n clearInterval(expirationUpdateInterval);\n timeLeftUpdateLoop = undefined;\n };\n }\n\n updateExpirationTime();\n\n dialog.showModal();\n\n setLoading(false);\n\n return pollTransactionConfirmation(clientInstantPaymentId, expiresIn * 1000);\n }\n\n // Submit the form to creates payment intent\n const createClientInstantPayment = async () => {\n const body = {\n provider: \"malga\",\n product_id: productIdHiddenInput.value,\n client_payment: getClientPaymentFormData(),\n coupons: getAmountAndCouponInformation()\n };\n\n /**\n * @type {{\n * body: {\n * id: string;\n * provider: string;\n * amount: number;\n * stripe_customer: { id: string; };\n * stripe_payment_intent: { id: string, client_secret: string; };\n * }\n * }}\n */\n const clientInstantPaymentResponse = await fetch(\n \"/client_instant_payments\",\n {\n method: \"POST\",\n headers: addCorrId({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body)\n }\n )\n .then(tapAndLoadCorrId)\n .then(parseFetchResponse)\n .catch((error) => {\n console.trace({ error });\n\n return null;\n });\n\n if (!clientInstantPaymentResponse) {\n setLoading(false);\n\n showPaymentError(\n \"Ocorreu um erro. Verifique os dados preenchidos e tente novamente em alguns minutos\"\n );\n\n return;\n }\n\n const {\n body: {\n id: clientInstantPaymentId,\n amount: transactionAmount,\n pix\n }\n } = clientInstantPaymentResponse;\n\n const pixStatusUpdate = await showQrCodeDialog(\n clientInstantPaymentId,\n transactionAmount,\n pix.qrCodeImageUrl,\n pix.qrCodeData,\n pix.expiresIn\n );\n\n if (pixStatusUpdate === \"authorized\") {\n await gtmRegisterPurchaseEvent(clientInstantPaymentResponse.body);\n\n const updateClientInstantPaymentResponse = await fetch(\n `/client_instant_payments/${clientInstantPaymentId}`,\n {\n method: \"PATCH\",\n headers: addCorrId({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify({\n stripe_payment_intent: { status: pixStatusUpdate }\n })\n }\n )\n .then(tapAndLoadCorrId)\n .then(parseFetchResponse)\n .catch((error) => {\n console.error(\n \"Failed to update client instant payment with confirmed payment intent:\",\n error\n );\n return null;\n });\n if (\n updateClientInstantPaymentResponse === null ||\n updateClientInstantPaymentResponse.status !== 200\n ) {\n setLoading(false);\n\n showPaymentError(\n \"Ocorreu um erro ao confirmar o pagamento. Verifique os dados e tente novamente.\"\n );\n throw new Error(\n updateClientInstantPaymentResponse?.body ??\n \"Failed to update client instant payment\"\n );\n }\n showOrderCompleteAndRedirect();\n } else if ([\"pre_authorized\", \"pending\"].includes(pixStatusUpdate)) {\n showOrderProcessing();\n } else {\n closeQrCodeDialog();\n showOrderError();\n }\n };\n\n /**\n * Does the submit, please use `debouncedHandleSubmit` instead\n *\n * @deprecated\n */\n function handleSubmit () {\n showPaymentError(\"\");\n\n if (!formHelpers.cpfCnpjValidator()) {\n showPaymentError(`${isPJ(formClientType.value) ? \"CNPJ\" : \"CPF\"} inválido`);\n setLoading(false);\n return;\n }\n\n if (\n isPJ(formClientType.value) &&\n doesNotHaveValue(stateRegistrationInput) &&\n doesNotHaveValue(municipalRegistrationInput)\n ) {\n if (stateRegistrationAlertMessageElement) {\n stateRegistrationAlertMessageElement.className = \"\";\n stateRegistrationAlertMessageElement.style =\n \"color:#FF5757; font-weight:600;\";\n }\n showPaymentError(\"Verifique as informações inseridas\");\n setLoading(false);\n return;\n }\n\n if (stateRegistrationAlertMessageElement) {\n stateRegistrationAlertMessageElement.className = \"hidden\";\n }\n setLoading(true);\n\n gtmRegisterCheckoutOptionEvent(\"paymentMethod\");\n\n createClientInstantPayment()\n .catch((error) => {\n showPaymentError(error.message);\n setLoading(false);\n console.error(\n \"Failed to create payment method\",\n error.message,\n error?.stack ?? error\n );\n });\n }\n\n const debouncedHandleSubmit = debounced(handleSubmit, 1000);\n\n formElement.addEventListener(\"submit\", (event) => {\n event.preventDefault();\n setLoading(true);\n debouncedHandleSubmit();\n });\n});\n"],"sourceRoot":""}