class MPErrorMessageNormalizer{static DEFAULT_ERROR_MESSAGE="empty error message";static normalize(e){return e&&e.replace(/[\t\n]/g,"").trim()||this.DEFAULT_ERROR_MESSAGE}}class MPCustomEventDispatcher{static MELIDATA_TIMEOUT_MS=5e3;static TIMEOUT_METRIC_URL="https://api.mercadopago.com/ppcore/prod/monitor/v1/event/datadog/big";static#e(e,r){document.dispatchEvent(new CustomEvent(e,{detail:r}))}static waitForMelidata(){return new Promise((e=>{window.melidata?e():window.melidataReady&&"function"==typeof window.melidataReady.then?window.melidataReady.then(e).catch(e):window.melidataReady?e():"complete"!==document.readyState?window.addEventListener("load",(()=>{window.melidataReady&&"function"==typeof window.melidataReady.then?window.melidataReady.then(e).catch(e):e()}),{once:!0}):e()}))}static dispatchWhenReady(e,r){let t;const o=this.waitForMelidata(),s=new Promise((r=>{t=setTimeout((()=>{this.sendTimeoutMetric(e),r()}),this.MELIDATA_TIMEOUT_MS)}));Promise.race([o,s]).then((()=>{clearTimeout(t),this.#e(e,r)})).catch((()=>{}))}static sendTimeoutMetric(e){try{fetch(`${this.TIMEOUT_METRIC_URL}/mp_melidata_load_timeout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:"true",message:e}),keepalive:!0}).catch((()=>{}))}catch(e){}}}class MPDispatchedErrorTracker{static#r=new Set;static track(e,r){const t=`${r}::${e}`;return!this.#r.has(t)&&(this.#r.add(t),!0)}static reset(){this.#r.clear()}}class MPCheckoutErrorHandler{handle(){throw new Error("Method must be implemented")}}class MPClassicCheckoutErrorHandler extends MPCheckoutErrorHandler{#t="checkout_error";#o="form[name=checkout]";#s=".woocommerce-error";ERROR_EVENT_NAME="mp_checkout_error";handle(){document.querySelector(this.#o)&&jQuery(document.body).on(this.#t,((e,r)=>{const t=document.querySelector(this.#s),o=t?.textContent||r,s=MPErrorMessageNormalizer.normalize(o),a=!!t?.querySelector('li[data-mp-source="plugin"]')?"post_submit_mercado_pago":"post_submit_woocommerce";MPCustomEventDispatcher.dispatchWhenReady(this.ERROR_EVENT_NAME,{message:s,errorOrigin:a})}))}}class MPOrderPayCheckoutErrorHandler extends MPCheckoutErrorHandler{#a="form#order_review";#c=[".woocommerce-notices-wrapper .woocommerce-error","#order_review > .woocommerce-error"];ERROR_EVENT_NAME="mp_checkout_error";handle(){const e=document.querySelector(this.#a);e&&(e.addEventListener("submit",(()=>MPDispatchedErrorTracker.reset())),this.handlePageLoadErrors(),this.observeForDynamicErrors(e))}findAllErrorElements(){const e=[];for(const r of this.#c)e.push(...document.querySelectorAll(r));return e}dispatchError(e){const r=MPErrorMessageNormalizer.normalize(e.textContent),t=!!e.querySelector('li[data-mp-source="plugin"]')?"post_submit_mercado_pago":"post_submit_woocommerce";MPDispatchedErrorTracker.track(r,t)&&MPCustomEventDispatcher.dispatchWhenReady(this.ERROR_EVENT_NAME,{message:r,errorOrigin:t})}dispatchAllErrors(e){e.forEach((e=>this.dispatchError(e)))}handlePageLoadErrors(){const e=this.findAllErrorElements();e.length&&this.dispatchAllErrors(e)}observeForDynamicErrors(e){[document.querySelector(".woocommerce-notices-wrapper"),e].filter(Boolean).forEach((e=>{new MutationObserver((e=>{if(!e.some((e=>e.addedNodes.length>0)))return;const r=this.findAllErrorElements();this.dispatchAllErrors(r)})).observe(e,{childList:!0})}))}}class MPBlocksCheckoutErrorHandler extends MPCheckoutErrorHandler{ERROR_EVENT_NAME="mp_checkout_error";handle(e){const r=e?.processingResponse?.paymentDetails?.message,t=MPErrorMessageNormalizer.normalize(r);MPCustomEventDispatcher.dispatchWhenReady(this.ERROR_EVENT_NAME,{message:t,errorOrigin:"post_submit_mercado_pago"})}}class MPCheckoutErrorDispatcher{constructor(){this.handlers=new Map([["classic",new MPClassicCheckoutErrorHandler],["orderPay",new MPOrderPayCheckoutErrorHandler],["blocks",new MPBlocksCheckoutErrorHandler]])}init(){document.addEventListener("DOMContentLoaded",(()=>{this.handlers.get("classic").handle(),this.handlers.get("orderPay").handle()}))}handleBlocksError(e){this.handlers.get("blocks").handle(e)}static dispatchEventWhenBlocksCheckoutErrorOccurred(e){(new MPCheckoutErrorDispatcher).handleBlocksError(e)}}(new MPCheckoutErrorDispatcher).init();