if(!customElements.get("remex-p2p")){const e="dev"!=document.querySelector('meta[name="app-env"]')?.getAttribute("content"),t=document.querySelector('meta[name="x-cpl"]')?.getAttribute("content")||"1.0.0";_loadScript=async(n,i)=>new Promise(((a,r)=>{if(i&&customElements.get(i))a(!0);else{const o=document.createElement("script");i&&(o.tik=setInterval((()=>{customElements.get(i)&&(clearInterval(o.tik),a(!0))}),100)),o.src=`/cdn/${t}/${e?n.replace(".min.js","").replace(".js",".min.js"):n}`,o.async=!0,o.onload=()=>{o.tik&&clearInterval(o.tik),a(!0)},o.onerror=()=>{o.tik&&clearInterval(o.tik),r(!1)},document.head.appendChild(o)}})),_loadScript("microfronts/remex-icon/index.js","remex-icon"),_loadScript("microfronts/remex-p2p/routing.js","remex-router"),_loadScript("microfronts/remex-select/index.js","remex-select"),_loadScript("microfronts/remex-p2p/menu.js","remex-p2p-menu"),_loadScript("microfronts/remex-p2p/header.js","remex-p2p-header"), _loadScript("microfronts/remex-dialog/index.js","remex-dialog"),_loadScript("microfronts/remex-card-loading/index.js","remex-card-loading"),_loadScript("microfronts/remex-pagginator/index.js","remex-pagginator"),document.querySelector(`script[src="/cdn/${t}/js/remex/tooltip${e?".min":""}.js"]`)||_loadScript("js/remex/tooltip.js");class n extends HTMLElement{constructor(){switch(super(),this.uniqueSuffix="_"+Math.random().toString(36).substr(2,9),this.classList.add(this.uniqueSuffix),this.isTelegram="undefined"!=typeof Telegram&&Telegram.WebApp&&Telegram.WebApp.initData, this.defaultStyles=` \n :host{color:var(--text-color, #005f75);} \n h5{color:var(--text-color,#000) !important;}\n .${this.uniqueSuffix} .auth-form { max-width: 100%; margin: auto; padding: 20px; background: #ffffff0a; border-radius: 4px; box-shadow: none; text-align: center;border: 1px solid var(--input-bg,--auth-input-light-border-color,#127a8b);animation: fadeInAnimation .5s ease-in-out;}\n .${this.uniqueSuffix} .auth-form .auth-button { background: #18a2b8 !important;color: #ffffff !important; }\n .${this.uniqueSuffix} .auth-form label { color: #c7dade !important; }\n .${this.uniqueSuffix} .auth-form .auth-button-cancel{ color: #c7dade !important; }\n .${this.uniqueSuffix} .auth-form .auth-footer a { color: #afbec1 !important;} \n .${this.uniqueSuffix} .auth-form .recovery-password-action { color: #afbec1 !important;} \n .${this.uniqueSuffix} .auth-form .auth-footer a b {font-size: 14px;color: #fff !important;}\n .${this.uniqueSuffix} .auth-form .action-help { color: #a8aaab !important;} \n .${this.uniqueSuffix} .auth-form .auth-subtitle { color: #ffffff !important;} \n .${this.uniqueSuffix} .auth-form .auth-input-icon { color:#072932 !important;} \n .${this.uniqueSuffix}{ -webkit-transition: all 1s ease-in-out; -moz-transition: all 1s ease-in-out;-o-transition: all 1s ease-in-out;transition: all 1s ease-in-out;transition: all 1s ease-in-out;}\n\n .${this.uniqueSuffix} input[name="intentAmount"]::-webkit-inner-spin-button,\n .${this.uniqueSuffix} input[name="intentAmount"]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }\n .${this.uniqueSuffix} input[name="intentAmount"] {-moz-appearance: textfield;}\n .${this.uniqueSuffix} .btn-tab,.${this.uniqueSuffix} .btn-tab:hover{background: var(--tab-btn-bg,#fff) !important;color: var(--tab-btn-text,#015f75) !important;}\n .${this.uniqueSuffix} .btn-tab-active,.${this.uniqueSuffix} .btn-tab-active:hover{background: var(--tab-btn-active-bg,#ffffff1a) !important;color: var(--tab-btn-active-text,#FFF) !important;box-shadow:0px 0px 1px #015f75 !important;}\n .${this.uniqueSuffix} .announcement-details{display:none;}\n .${this.uniqueSuffix}.choiced .anouncement,\n .${this.uniqueSuffix}.choiced .btn-intent{display:none;} \n .${this.uniqueSuffix}.choiced .intent-nav{display:none;} \n .${this.uniqueSuffix} .nickname{background: linear-gradient(276.46deg, #03a9f4 1.16%, #00bcd4 51.05%, rgb(182 182 182) 105.69%);-webkit-background-clip: text;-webkit-text-fill-color: transparent;text-fill-color: transparent;font-family: Mija !important;font-size:calc(1rem + 0.4vw)!important}\n .${this.uniqueSuffix}.choiced .anouncement.choiced{display:block;}\n .${this.uniqueSuffix}.choiced .announcement-details{display:flex;background: linear-gradient(0deg, rgb(230 249 254 / 5%) 0%, rgb(4 86 107 / 0%) 82%);border-bottom-left-radius: 14px;border-bottom-right-radius: 14px;}\n .${this.uniqueSuffix} .announcement-terms{max-height: 300px;overflow: auto;border:1px solid rgb(23 86 102 / 86%)}\n .${this.uniqueSuffix} .announcement-terms::-webkit-scrollbar {width: 2px;}\n .${this.uniqueSuffix} .announcement-terms::-webkit-scrollbar-track {background:rgba(255, 255, 255, 0.1);border-radius: 2px;}\n .${this.uniqueSuffix} .announcement-terms::-webkit-scrollbar-thumb {background:rgba(221, 250, 255, 0.86);border-radius: 1px;}\n .${this.uniqueSuffix} .announcement-terms::-webkit-scrollbar-thumb:hover {background: #ffffff00;}\n .${this.uniqueSuffix} .announcement-terms::-webkit-scrollbar-track-piece {background: #f9f9f900;}\n .${this.uniqueSuffix} .verified-item{ color: var(--text-primary-color,#3dbeda) !important;}\n .${this.uniqueSuffix} .verified-item:after{content: '✔';color:var(--text-primary-color,#3dbeda);margin-left: 2px;margin-right: 2px;}\n .${this.uniqueSuffix} .nav-link{color: var(--nav-text,white);text-transform: uppercase;font-family:Mija !important;font-weight: bold;font-size:calc(0.8rem + 0.6vw)!important}\n .${this.uniqueSuffix} .nav-link.active{color:var(--text-primary-color,#3dbeda);border-bottom: 1px solid var(--text-primary-color,#3dbeda);} \n .${this.uniqueSuffix} #deal-unseen{display:none;color:white !important;animation: borderCircleInfinitedAnimated 1s infinite;background:var(--text-primary-color,#3dbeda); border-radius: 1rem; min-width: 12px; min-height: 12px; margin-left: 2px; font-size: 0.5rem !important; padding: 0.2rem; position: relative; top: -4px;}\n @keyframes borderCircleInfinitedAnimated {0% {box-shadow: 0 0 0 0 rgba(61, 190, 218, 0.7);}100% {box-shadow: 0 0 0 10px rgba(61, 190, 218, 0);}}\n .bg-dark{\n background-color: var(--bg-primary , #005f75 ) !important;\n }\n .btn.btn-dark{\n background-color: var(--bg-primary , #005f75 ) !important;\n }\n .show-sm{display:none;}\n @media(min-width:992px){.${this.uniqueSuffix} .hidden-lg{display:none;} .bk-lg{display:block;} }\n @media(max-width:992px){.${this.uniqueSuffix} .show-sm{display:block;} .hidden-sm{display:none;}.${this.uniqueSuffix} .onlinestatus{margin-top:-16px}.${this.uniqueSuffix}.choiced ${this.uniqueSuffix} .badge-sm{background: #2f7e8f; border-radius: 5px; padding: 2px 4px; margin-right: 4px;display: flex;align-items: center;justify-content: center;}}\n @media(max-width:768px){.${this.uniqueSuffix} .hidden-xs{display:none;}.${this.uniqueSuffix} .onlinestatus{margin-top:-16px}.${this.uniqueSuffix}.choiced .${this.uniqueSuffix}.choiced .announcement-details{display:flex;background:transparent;}}\n .btn-navigation-back){ animation: fadeIn .5s ease-in-out; transition: all 0.5s ease-in-out; }\n #${this.uniqueSuffix}anouncementsContainer{color:var(--text-color, #005f75);}\n `, this.loadingHtml='',this.overrideStyles=null,this.data={},this.wallet=null,this.lang=document.querySelector("html")?.getAttribute("lang")??"es",this.lang){case"es":this.i18n={"You already have an ad to sell SRM created, you must delete it to be able to create another one.":"Ya tienes un anuncio para vender SRM creado, debes eliminarlo para poder crear otro.","You already have an ad to buy SRM created, you must delete it to be able to create another one.":"Ya tienes un anuncio para comprar SRM creado, debes eliminarlo para poder crear otro.","The announcement has been withdrawn":"El anuncio ha sido retirado","Payment method not found":"Método de pago no encontrado","The owner of announcement does not accept this payment method.":"El anunciante no acepta este método de pago.","The advertiser has already committed their balance":"El anunciante ya ha comprometido su saldo", "Your balance is not enough for this deal.":"Tu saldo no es suficiente para este trato.","Seller balance is not enough for this deal.":"El saldo del vendedor no es suficiente para este trato.","P2P seles is disabled for seller customer level.":"Las ventas de saldo estan desabilitdas en el nivel de cliente del vendedor","The amount exceeds the maximum allowed in the seller customer level.":"El monto excede el máximo permitido en el nivel de cliente del vendedor","The seller has exceeded the maximum number of allowed daily operations.":"El vendedor ha superado el número máximo de operaciones diarias permitidas.","You can not buy your own announcement.":"No eres el anunciante de este anuncio","The advertiser has already committed their balance.":"El anunciante ya ha comprometido su saldo","The owner of announcement does not accept this payment method.":"El anunciante no acepta este método de pago","Payment method not found.":"Forma de pago no encontrado", "The announcement has been withdrawn.":"El anuncio ha sido retirado","Announcement not found.":"Anuncio no encontrado","Your balance is not enough for this deal.":"Tu saldo no es suficiente para este trato.","Seller balance is not enough for this deal.":"El saldo del vendedor no es suficiente para este trato.","This deal had already been cancelled.":"Este trato ya había sido cancelado.","This deal had already been accepted.":"Este trato ya había sido aceptado.","This deal had already been completed.":"Este trat ya había sido completado.","Deal not found.":"Trato no encontrado.","Let us avoid sharing contact information and using words that are prohibited in the terms of the advertisement.":"Evitemos compartir información de contacto y usar palabras prohibidas en los términos del anuncio.", "You must define the terms of the announcement, so we can show your counterparty what your conditions are for creating a deal.":"Debes definir los términos del anuncio, para que podamos mostrarle a tu contraparte cuáles son tus condiciones para crear un trato."};break;case"en":this.i18n={"No hay tratos para mostrar.":"No deals to show.","No tienes anuncios que administrar.":"You have no ads to manage.","Mis Tratos":"My Deals","Mis anuncios P2P":"My P2P Announcement","Publica un anuncio":"Post an Announcement","Anuncio creado correctamente":"Announcement created successfully","El Anuncio ha sido actualizado":"The Announcement has been updated","El Anuncio ha sido eliminado":"The Announcement has been deleted","Ocurrió un error cargando los detalles del anuncio, por eso te redireccionamos nuevamente a la lista de anuncios.":"An error occurred loading the announcement details, so we redirect you back to the list of announcements.", "No se encontró el anuncio solicitado":"The requested announcement was not found","Todos los pagos (*)":"All payment methods (*)",Anuncios:"Announcements",Entendido:"Understood","Para acceder a esta sección debes estar autenticado":"To access this section you must be authenticated","Serás redireccionado a la pantalla de autenticación":"You will be redirected to the authentication screen",Anunciante:"Advertiser",Indicadores:"Indicators",Cantidad:"Amount",Precio:"Price","Método de pago":"Payment method",Estado:"Status",Fecha:"Date",Acciones:"Actions","Ver detalles":"View details",Aceptar:"Accept",Cancelar:"Cancel",Cerrar:"Close",Publicar:"Post",Editar:"Edit",Eliminar:"Delete",Comprar:"Buy",Vender:"Sell","Reputación":"Reputation",Tratos:"Deals","Menú":"Menu","Formas de pago":"Payment methods","Límites":"Limits","Ocurrió un error al crear el trato, inténtelo luego":"An error occurred creating the deal, please try again later", "Debes iniciar sesión para poder crear un trato":"You must log in to create a deal"};break;default:this.i18n={}}this.onInitialized=()=>{};const e=JSON.parse(window.localStorage.getItem("remex-p2p-filter")??null);this._filterState=e??{intent:"buy",paymentMethod:"*",amount:null,pgSize:50,pg:1};const t=this;this.filterState=new Proxy(this._filterState,{set(e,n,i){if(e[n]!==i){e[n]=i;const a=new CustomEvent("filterStateChanged",{detail:{property:n,value:i},bubbles:!0,composed:!0});window.localStorage.setItem("remex-p2p-filter",JSON.stringify(t._filterState)),t.dispatchEvent(a)}return!0}}),this.debounceTimer=null,this.initialized=!1,this.observer=new MutationObserver((e=>{e.forEach((e=>{"attributes"===e.type&&(this.data[e.attributeName]=this.getAttribute(e.attributeName)||"",this.refresh())}))})),this.router=new i,this.setupRouterListeners(),this.addEventListener("forceauth",(async e=>this.redirectToAuth())), this.addEventListener("showpeer",(e=>this.router.navigate("/p2p/profile/"+e.detail))),this.addEventListener("force-navigate",(e=>this.router.navigate(e.detail))),this.addEventListener("profile",(e=>{this.router.navigate("/p2p/profile/me")})),this.addEventListener("wallet-refresh",(e=>{this.wallet=e.detail})),this.addEventListener("deal-confirmed",(async e=>{this.querySelector("remex-p2p-header")&&(await this.querySelector("remex-p2p-header").refresh(),this.querySelector("remex-p2p-header").updateWalletInfo())})),this.addEventListener("deal-canceled",(async e=>{this.querySelector("remex-p2p-header")&&(await this.querySelector("remex-p2p-header").refresh(),this.querySelector("remex-p2p-header").updateWalletInfo())})),this.addEventListener("deal-accepted",(async e=>{this.querySelector("remex-p2p-header")&&(await this.querySelector("remex-p2p-header").refresh(),this.querySelector("remex-p2p-header").updateWalletInfo())})),this.addEventListener("RemexAuthLogout",(async e=>{ this.querySelector("remex-p2p-header")&&(this.querySelector("remex-p2p-header").headers=await this.buildRequestHeaders(),await this.querySelector("remex-p2p-header").refresh(),this.querySelector("remex-p2p-header").updateWalletInfo())})),this.addEventListener("RemexAuthLogged",(async e=>{this.querySelector("remex-p2p-header")&&(this.querySelector("remex-p2p-header").headers=await this.buildRequestHeaders(),await this.querySelector("remex-p2p-header").refresh(),this.querySelector("remex-p2p-header").updateWalletInfo())})),this.addEventListener("sessionCreated",(async e=>{this.querySelector("remex-p2p-header")&&(this.querySelector("remex-p2p-header").headers=await this.buildRequestHeaders(),await this.querySelector("remex-p2p-header").refresh(),this.querySelector("remex-p2p-header").updateWalletInfo())})),this.realtimeSuscriberInit()}static get observedAttributes(){return["intent","payment-method","amount","currency","theme"]}attributeChangedCallback(e,t,n){ "theme"===e&&this.applyTheme(n),"intent"===e&&["buy","sell"].includes(n)&&(this.filterState.intent=n),"payment-method"===e&&(this.filterState.paymentMethod=n),"amount"===e&&(this.filterState.amount=parseFloat(n)),"currency"===e&&(this.currency=n),this.initialized&&this.handleFilterStateChanged()}applyTheme(e){this.overrideStyles={dark:{"background-color":"#1a1a1a",color:"#ffffff"},light:{"background-color":"#ffffff",color:"#000000"}}[e]||null,this.refresh()}realtimeSuscriberInit(){if(!window.auth?.user?.id)return!1;new Promise(((e,t)=>{if(void 0!==window.DeepstreamClient)e(!0);else{const n=document.createElement("script");n.tik=setInterval((()=>{void 0!==window.DeepstreamClient&&(clearInterval(n.tik),e(!0))}),100),n.src="/assets/js/ds.min.js",n.async=!0,n.onload=()=>{n.tik&&clearInterval(n.tik),e(!0)},n.onerror=()=>{n.tik&&clearInterval(n.tik),t(!1)},document.head.appendChild(n)}})).then((()=>{if(void 0===window.realtime){const{DeepstreamClient:e}=window.DeepstreamClient ;window.realtime={client:new e("dev"==document.querySelector('meta[name="app-env"]')?.getAttribute("content")?"wss://dev.remesita.com/deepstream":"wss://remesita.com/deepstream"),login:()=>new Promise(((e,t)=>{"OPEN"==window.realtime.client.getConnectionState()?e(!0):window.realtime.client.login({uid:window.auth.user.id},(n=>n?e(!0):t(!1)))}))}}window.realtime.login().then((()=>{if(!this._realTime){const e=`p2p/${window.auth.user.id}`;this._realTime=window.realtime.client.record.getRecord(e),this._realTime.subscribe("deal",(e=>{}))}}))})).catch((()=>{this.chat.startPullinghMessages()}))}async checkUnseenDeals(){try{if(this.unseenChecking)return!1;this.unseenChecking=!0;const e=await fetch("/rest/v2/p2p/deal/unseen",{method:"GET",headers:await this.buildRequestHeaders()});if(e.ok){const t=await e.json();if(this.unseenChecking=!1,t.unseen>0)return this.querySelector("#deal-unseen").innerHTML=t.unseen,this.querySelector("#deal-unseen").style.display="inline-block",!0}}catch(e){} return this.unseenChecking=!1,this.querySelector("#deal-unseen").style.display="none",!1}setupRouterListeners(){this.addEventListener("route-activated",(async e=>{setTimeout((async()=>{await this.isConnected()&&(this.querySelector("remex-p2p-header").headers=await this.buildRequestHeaders(),await this.checkUnseenDeals())}),100);const t=e.detail.route;if(this.currentRoute!=t||JSON.stringify(e.detail.params??{})!=JSON.stringify(this.currentRouteParams??{}))switch(this.currentRoute=t,this.currentRouteParams=e.detail.params??null,this.initialized||await this.renderLayout(),this.updateNavState(t),this.querySelector(".btn-navigation-back")&&this.querySelector(".btn-navigation-back").classList.remove("hidden-lg"),this.isTelegram&&(Telegram.WebApp.SettingsButton.onClick((()=>{window.navigation.back()})),Telegram.WebApp.BackButton.show(),Telegram.WebApp.SettingsButton.onClick((()=>{this.router.navigate("/p2p/menu")})),Telegram.WebApp.SettingsButton.show(),Telegram.WebApp.MainButton.hide()),t){ case"/p2p/announcements":return this.querySelector(".btn-navigation-back")&&this.querySelector(".btn-navigation-back").classList.add("hidden-lg"),this.isTelegram&&Telegram.WebApp.BackButton.hide(),this.anouncementPg=1,await this.renderAnnouncementLists();case"/p2p/my-announcements":return this.anouncementPg=1,await this.renderMyAnnouncementLists();case"/p2p/announcement/:id":return await this.renderAcnnouncementDetails(e.detail.params.id);case"/p2p/profile/:id":return await this.renderProfile("me"!=e.detail.params.id?e.detail.params.id:null);case"/p2p/announcements/new":return await this.renderAnnouncementForm();case"/p2p/announcement/edit/:id":return await this.renderAnnouncementForm(e.detail.params.id);case"/p2p/deals":return await this.renderMyDealsList();case"/p2p/deal/:id":return await this.renderDealDetails(e.detail.params.id);case"/p2p/menu":default:break;case"/p2p/payment-methods":return await this.renderPaymentMethodsSettings();case"/p2p/auth": return await this.renderAuthForm()}}))}async renderAnnouncementForm(e){if(!await this.isConnected())return this.redirectToAuth();const t=this.container.querySelector(e?'remex-router[route="/p2p/announcement/edit/:id"]':'remex-router[route="/p2p/announcements/new"]');t.innerHTML=`

${this.loadingHtml}`,await this.loadScript("microfronts/remex-p2p/announcement-form.js","remex-announcement-form"),t.innerHTML="";const n=document.createElement("remex-announcement-form");n.i18n=this.i18n,n.headers=await this.buildRequestHeaders();const i=e?await this.fetchAnnouncementById(e):null;i&&(n.announcement=i),t.appendChild(n),n.addEventListener("created",(e=>{this.showMessage(this.trans("Anuncio creado correctamente")),this.router.navigate("/p2p/my-announcements")})),n.addEventListener("updated",(e=>{this.showMessage(this.trans("El Anuncio ha sido actualizado")),this.router.navigate("/p2p/my-announcements")})),n.addEventListener("removed",(e=>{ this.showMessage(this.trans("El Anuncio ha sido eliminado")),this.router.navigate("/p2p/announcements")}))}async renderPaymentMethodsSettings(){if(!await this.isConnected())return this.redirectToAuth();const e=this.container.querySelector('remex-router[route="/p2p/payment-methods"]');e.innerHTML=`

${this.loadingHtml}`,await this.loadScript("microfronts/remex-p2p/payment-methods-settings.js","remex-payment-methods-settings"),e.innerHTML="";const t=document.createElement("remex-payment-methods-settings");t.i18n=this.i18n,t.headers=await this.buildRequestHeaders(),e.appendChild(t)}async renderDealDetails(e){const t=this.container.querySelector('remex-router[route="/p2p/deal/:id"]');t.innerHTML=`

${this.loadingHtml}`;let n=await this.fetchDeal(e);if(n){if(n.forceAuth)return await this.redirectToAuth();await this.loadScript("microfronts/remex-p2p/deal-details.js","remex-deal-details"),t.innerHTML=`` ;const e=t.querySelector("remex-deal-details");e.headers=await this.buildRequestHeaders(),e.data=n}else this.showError("No se encontró el trato solicitado"),this.router.navigate("/p2p/deals")}async redirectToAuth(){this._redirectData={route:this.currentRoute,params:this.currentRouteParams},this.router.navigate("/p2p/auth")}async renderAuthForm(){return this.container.querySelector("form").setAttribute("action",window.location.href),window.auth.authFormCssSelector=`#${this.uniqueSuffix}p2p-auth-view .p2p-auth-container`,window.auth?.remexAuth?.rendered&&(window.auth.remexAuth.rendered=!1),await window.auth.renderAuthForm((()=>{if(this._redirectData){let e=this._redirectData.route,t=this._redirectData.params??{};this._redirectData.params&&Object.keys(t).forEach((n=>e=e.replace(`:${n}`,t[n]))),this.router.navigate(e),setTimeout((async()=>{this.querySelector("remex-p2p-header").headers=await this.buildRequestHeaders(),await this.querySelector("remex-p2p-header").refresh(), this.querySelector("remex-p2p-header").updateWalletInfo()}),10)}})),!0}async isConnected(){if(window.auth?.isConnected())return!0;await window.auth.checkUserIsLogged();const e=new Promise(((e,t)=>{if(window.auth.remexAuth)setTimeout((()=>e(window.auth.isConnected())),500);else{const t=setInterval((()=>{window.auth.remexAuth&&(clearInterval(t),e(window.auth.remexAuth.isConnected()&&window.auth?.user?.token))}),100)}}));return await e}async renderProfile(e){if(!(e&&"me"!=e||await this.isConnected()))return this.redirectToAuth();const t=this.querySelector('remex-router[route="/p2p/profile/:id"]');t.innerHTML=`

${this.loadingHtml}`;try{const n=await fetch(`/rest/v2/p2p/profile/${e??window.auth?.user?.id}`,{method:"GET",headers:await this.buildRequestHeaders()});if(n.ok){const i=await n.json();await this.loadScript("microfronts/remex-p2p/profile.js","remex-p2p-profile");const a=document.createElement("remex-p2p-profile");a.i18n=this.i18n,a.self=!e, a.headers=await this.buildRequestHeaders(),t.innerHTML="",t.appendChild(a),a.data=i}}catch(e){}}updateNavState(e){const t=/announcement/.test(e)?"/p2p/announcements":/deal/.test(e)?"/p2p/deals":e;this.container.querySelectorAll("a.nav-link").forEach((e=>{e.classList.remove("active"),t==e.getAttribute("href")&&e.classList.add("active")}))}async showError(e){await this.loadScript("microfronts/remex-message/index.js","remex-message");const t=document.createElement("remex-message");return t.message=this.trans(e),t.duration=3e3,t.position="bottom-left",t.color="danger",document.body.appendChild(t),t}async showMessage(e){await this.loadScript("microfronts/remex-message/index.js","remex-message");const t=document.createElement("remex-message");return t.message=this.trans(e),t.duration=3e3,t.position="bottom-left",t.color="info",document.body.appendChild(t),t}async renderAcnnouncementDetails(e){const t=this.container.querySelector(`remex-router[route="${this.currentRoute}"]`) ;t.innerHTML=`

${this.loadingHtml}`;let n=await this.fetchAnnouncementById(e);if(n){if(n.isSelf)return this.router.navigate("/p2p/announcement/edit/"+e);await this.loadScript("microfronts/remex-p2p/announcement-details.js","remex-announcement-details"),t.innerHTML=``;const i=t.querySelector("remex-announcement-details");"yes"!=i.getAttribute("evlistened")&&(i.addEventListener("closed",(e=>{this.router.navigate("/p2p/announcements"),this.isTelegram&&Telegram.WebApp.MainButton.hide()})),i.addEventListener("accept",(async t=>{if(t.preventDefault(),this._creatingDeal)return;if(!await this.isConnected())return this.redirectToAuth();this._creatingDeal=!0;const n=await this.createDeal(e,t.detail.paymentMethod,t.detail.amount,t.detail.rate??null) ;if(this._creatingDeal=!1,n.forceAuth)return await this.redirectToAuth();n.error?(i.stopLoading(),await this.showError(n.error)):(this.deals=this.deals||[],this.deals.push(n),this.router.navigate("/p2p/deal/"+n.id))})),i.addEventListener("error",(e=>{t.innerHTML=`

${this.loadingHtml}`,this.loadScript("microfronts/remex-message/index.js","remex-message").then((()=>{const e=document.createElement("remex-message");e.message=this.trans("Ocurrió un error cargando los detalles del anuncio, por eso te redireccionamos nuevamente a la lista de anuncios."),e.duration=3e3,e.position="bottom-left",e.color="danger",document.body.appendChild(e),this.router.navigate("/p2p/announcements"),this.isTelegram&&Telegram.WebApp.MainButton.hide()}))})),i.setAttribute("evlistened","yes")),i.headers=await this.buildRequestHeaders(),i.data=n}else this.showError("No se encontró el anuncio solicitado"),this.router.navigate("/p2p/announcements")}async renderMyDealsList(){ if(!await this.isConnected())return this.redirectToAuth();const e=this.container.querySelector('remex-router[route="/p2p/deals"]');e.innerHTML=`

${this.loadingHtml}`,await this.loadScript("microfronts/remex-p2p/deal-item.js","remex-deal-item");const t=`
${this.trans("Mis Tratos")}
`;e.innerHTML=this.loadingHtml,e.innerHTML=`${t}${this.loadingHtml}`;const n=await this.fetchMyDeal(this.dealPg??1,this.dealPgSize??10);if(0==n.items.length?e.innerHTML=`${t}

${this.trans("No hay tratos para mostrar.")}

`:(e.innerHTML=t,n.items.forEach((t=>{const n=document.createElement("remex-deal-item");n.setAttribute("unique-suffix",this.uniqueSuffix), n.i18n=this.i18n??{},n.data=t,e.appendChild(n),n.addEventListener("selected",(e=>{this.router.navigate("/p2p/deal/"+e.detail.id)}))}))),n.total>10){const t=document.createElement("div");t.innerHTML=``,e.appendChild(t),t.querySelector("remex-pagginator").addEventListener("pagginate",(async e=>{this.dealPg=e.detail.page,await this.renderMyDealsList()}))}}async renderMyAnnouncementLists(){if(!await this.isConnected())return this.redirectToAuth();const e=this.container.querySelector('remex-router[route="/p2p/my-announcements"]');e.innerHTML=`

${this.loadingHtml}`,await this.loadScript("microfronts/remex-p2p/announcement-item.js","remex-announcement-item"),e.innerHTML=this.loadingHtml ;const t=`
\n ${this.trans("Mis anuncios P2P")} \n \n
` ;e.innerHTML=`${this.loadingHtml}`;const n=await this.fetchMyAnnouncements();if(e.innerHTML=`
\n ${t}\n
`, 0==n.items.length?e.innerHTML=`\n
\n \n

${this.trans(n.total?"No hay anuncios en esta página.":"No tienes anuncios que administrar.")}

\n \n
`:n.items.forEach((async t=>{ const n=document.createElement("remex-announcement-item");n.setAttribute("unique-suffix",this.uniqueSuffix),n.i18n=this.i18n??{},n.data=t,n.headers=await this.buildRequestHeaders(),n.viewmode="self",e.appendChild(n),n.addEventListener("selected",(e=>{this.router.navigate("/p2p/announcement/edit/"+e.detail.id)})),n.addEventListener("showpeer",(e=>{this.router.navigate("/p2p/profile/"+e.detail)}))})),n.total>25){const t=document.createElement("div");t.innerHTML=``,e.appendChild(t),t.querySelector("remex-pagginator").addEventListener("pagginate",(async e=>{this.anouncementPg=e.detail.page,await this.renderMyAnnouncementLists()}))}}async renderAnnouncementLists(){this._filterState.pg=1,this.tabBuy=this.container.querySelector(".btn-tab-buy"),this.tabSell=this.container.querySelector(".btn-tab-sell"), this.anouncementContainer=this.container.querySelector(`#${this.uniqueSuffix}anouncementsContainer`),this.anouncementContainer.innerHTML=`

${this.loadingHtml}`,[this.tabBuy,this.tabSell].filter((e=>null!=e)).forEach((e=>{e.addEventListener("click",(e=>{this._filterState.pg=1;const t=e.target.classList.contains("btn-tab-buy")?"buy":"sell";this.tabBuy.classList.toggle("btn-tab-active","buy"==t),this.tabBuy.classList.toggle("btn-tab","buy"!=t),this.tabSell.classList.toggle("btn-tab-active","sell"==t),this.tabSell.classList.toggle("btn-tab","sell"!=t),this.filterState.intent=t,this.dispatchEvent(new CustomEvent("intent",{detail:t}))}))})),this.methodIntent=this.container.querySelector('remex-select[name="intentPaymentMethod"]'),this.methodIntent.addEventListener("change",(e=>{this.filterState.paymentMethod=e.target.value,this._filterState.pg=1,this.dispatchEvent(new CustomEvent("intentPaymentMethod",{detail:this.intentPaymentMethod}))})), this.amountIntent=this.container.querySelector('input[name="intentAmount"]'),this.amountIntent.addEventListener("input",(e=>{this._filterState.pg=1,this.filterState.amount=e.target.value,this.dispatchEvent(new CustomEvent("intentAmount",{detail:e.target.value}))})),this._paymentMethods?(this.methodIntent.items=this._paymentMethods,this.methodIntent.value=this._filterState.paymentMethod??"*",this.handleFilterStateChanged()):setTimeout((async()=>{const e=[{id:"*",name:this.trans("Todos los pagos (*)"),isActive:!0}],t=await this.fetchPaymentMethods();e.push(...t),this._paymentMethods=e.map((e=>({value:e.id,label:e.name.toUpperCase(),group:e.groupType,img:e.logo?`https://remesita.s3.amazonaws.com/uploads/logos/${e.logo}`:null,disabled:!e.isActive}))),this.methodIntent.items=this._paymentMethods,this.methodIntent.value=this._filterState.paymentMethod??"*",this.handleFilterStateChanged()}),100)}async loadScript(e,t){return _loadScript(e,t)}async init(){ this.cpl=document.querySelector('meta[name="x-cpl"]')?.getAttribute("content")??this.cookies?.fetch("x-cpl")??"1.0.0",this.initialized=!0,this.overrideStyles=!1,await window.auth.checkUserIsLogged(),this.dispatchEvent(new CustomEvent("initialized")),this.onInitialized(),setTimeout((async()=>{if(this.isTelegram){const e=Telegram.WebApp.initData,t=new URLSearchParams(e).get("start_param");t&&this.router.navigate("/p2p/"+t.replace(/__/g,"/"))}}),1)}connectedCallback(){this.observer.observe(this,{attributes:!0}),this.addEventListener("filterStateChanged",this.handleFilterStateChanged.bind(this)),this.refresh()}disconnectedCallback(){this.observer.disconnect(),this.removeEventListener("filterStateChanged",this.handleFilterStateChanged.bind(this))}attributeChangedCallback(e,t,n){void 0===this.data[e]&&t!=n&&(this.data[e]=n,this.refresh())}trans(e,t){let n=void 0!==this.i18n[e]?(this.i18n[e]??e).trim():e.trim();if(void 0!==t)for(var e in t)n=n.replace(e,t[e]).trim();return n.trim()} createApiUrl(e){return`https://${document.querySelector('meta[name="app-env"]')&&"dev"==document.querySelector('meta[name="app-env"]').getAttribute("content")?"dev-api":"api"}.remesita.com/rest/v1/${e}`}refresh(){this.overrideStyles&&(this.initialized=!1),setTimeout((async()=>await this.renderLayout()),1)}async renderLayout(){if(!this.initialized){let e="";if(this.overrideStyles)for(let t in this.overrideStyles){let n=[];for(let e in this.overrideStyles[t])n.push(`${e}:${this.overrideStyles[t][e]};`);e+=`.${this.uniqueSuffix} ${t} {${n.join("")}}`}this.innerHTML=`\n \n \n `,this.container=document.createElement("div"),this.isTelegram&&(this.container.style.cssText="min-height: 100vh; display: flex ; align-content: flex-start;"),this.appendChild(this.container), [this.uniqueSuffix,"col-12","px-0","py-2","row","mx-0"].forEach((e=>this.container.classList.add(e))),this.intent="buy"} return this.container.innerHTML=` \n
\n \n
\n \n \x3c!--\n
\n \n Estamos en Beta: Esto significa que estamos haciendo pruebas, aunque la mayoría de las herramientas son funcionales. Te agradeceríamos que informes cualquier inconveniente.\n
\n --\x3e\n \n \x3c!-- Nav tabs --\x3e\n
\n ${"undefined"!=typeof Telegram&&Telegram.WebApp?"":``}\n \n\n \n
\n\n
\n \n \n
\n \x3c!-- Contenedor para el listado --\x3e \n \x3c!-- Nav tabs intent --\x3e\n
\n
\n
\n
\n
\n \n \n
\n \x3c!-- Filtros de intent --\x3e\n
\n
\n
\n
\n \n
\n
$RM
\n
\n
\n
\n
\n \n
\n \n \n \n
\n \x3c!--\n
\n
\n
\n --\x3e\n
\n \n \x3c!-- Lista de ofertas --\x3e\n
\n
\n \n \n \n \n \x3c!-- Menu --\x3e\n \n \n\n \n \x3c!-- Detalles de anuncio --\x3e\n \n\n \n \n \n\n

${this.loadingHtml}
\n \n\n \n \x3c!-- Formulario de nuevo anuncio --\x3e \n \n\n \n \x3c!-- Formulario de editar anuncio --\x3e \n \n\n \n \n\n \n \n \n\n \n
\n
${this.trans("Inicia sesión para operar en P2P")}
\n
\n
\n
\n\n \n\n
\n \n

${this.trans("Para acceder a esta sección debes estar autenticado")}!

\n

${this.trans("Serás redireccionado a la pantalla de autenticación")}

\n
\n `, this.container.querySelectorAll("a.nav-link").forEach((e=>e.addEventListener("click",(e=>{e.preventDefault(),this.router.navigate(e.currentTarget.getAttribute("href"))})))),this.container.querySelector("remex-p2p-menu").addEventListener("choiced",(e=>{e.preventDefault(),this.router.navigate(e.detail)})),await window.auth.checkUserIsLogged(),await this.init(),!0}handleFilterStateChanged(){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout((async()=>{this.anouncementContainer.innerHTML=`

${this.loadingHtml}`;const e=await this.fetchAnnouncements() ;this.anouncementContainer.innerHTML=`\n \x3c!---header--\x3e\n \n \x3c!-- items --\x3e\n
\n ${this.loadingHtml}\n
`, await _loadScript("microfronts/remex-p2p/announcement-item.js","remex-announcement-item");const t=this.anouncementContainer.querySelector(`#${this.uniqueSuffix}announcementsList`);if(t&&(t.innerHTML="",e.items.length?e.items.forEach((async e=>{const n=document.createElement("remex-announcement-item");n.setAttribute("unique-suffix",this.uniqueSuffix),n.i18n=this.i18n??{},n.data=e,n.intentPaymentMethod=this._filterState.paymentMethod,n.intentAmount=this._filterState.amount,n.headers=await this.buildRequestHeaders(),t.appendChild(n),n.addEventListener("selected",(e=>{e.detail.isSelf?this.router.navigate("/p2p/announcement/edit/"+e.detail.id):this.router.navigate("/p2p/announcement/"+e.detail.id)})),n.addEventListener("showpeer",(e=>{this.router.navigate("/p2p/profile/"+e.detail)})) })):t.innerHTML=`
\n \n

${this.trans(e.total?"No hay anuncios para mostrar en esta página.":"buy"==this._filterState.intent?"Nadie esta vendiendo SRM bajo con este criterio.":"Nadie esta comprando SRM con este criterio.")}

\n \n
`, e.total>25)){const n=document.createElement("div");n.classList.add("text-center","col-12","m-auto","py-2"),n.innerHTML=``,t.appendChild(n),n.querySelector("remex-pagginator").addEventListener("pagginate",(e=>{this._filterState.pg=e.detail.page,this.handleFilterStateChanged()}))}this.container.querySelectorAll(".btn-intent").forEach((t=>t.addEventListener("click",(t=>{const n=t.currentTarget.getAttribute("aid"),i=e.items.filter((e=>e.id==n))[0];this.container.classList.add("choiced"),this.container.querySelectorAll(".anouncement").forEach((e=>e.classList.remove("choiced"))),this.container.querySelector(`.anouncement[aid="${n}"]`).classList.add("choiced"),this.renderQuotationInput(i),this.dispatchEvent(new CustomEvent("expandAnouncement",{detail:i}))}))))}),100)}async buildRequestHeaders(){if(!this.fingerprint){ if(window.__loadingFp){const e=new Promise((e=>{const t=setInterval((()=>{void 0!==window.FingerprintHandler&&(clearInterval(t),e())}),100)}));await e}else window.__loadingFp=!0,await this.loadScript("js/remex/fp.min.js");try{this.fingerprint=await window.FingerprintHandler.generateFingerprint()}catch(e){}}const e=this.fingerprint?await(async(e,t)=>{const n=new TextEncoder,i=n.encode(t),a=n.encode(e),r=await crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),o=await crypto.subtle.sign("HMAC",r,a);return Array.from(new Uint8Array(o)).map((e=>e.toString(16).padStart(2,"0"))).join("")})(this.fingerprint,this.cpl):null,t={"Content-Type":"application/json","v-compilation":this.cpl,"x-cpl":this.cpl,"x-fingerprint":this.fingerprint,"x-signature":e,"x-tlg":this.isTelegram?Telegram.WebApp?.user?.id??Telegram.WebApp?.initDataUnsafe?.user?.id??null:null,"x-tlg-bot":this.isTelegram?"p2p":null} ;return await this.isConnected()&&window.auth?.user?.token&&(t.token=window.auth.user.token),t}async fetchAnnouncementById(e){const t=(this.announcements??[]).filter((t=>t.id==e))[0]??!1;if(t)return t;try{const t=await fetch(`/rest/v2/p2p/announcement/${e}`,{method:"GET",headers:await this.buildRequestHeaders()});if(200===t.status)return await t.json()}catch(e){return null}}async createDeal(e,t,n,i){let a=this.trans("Ocurrió un error al crear el trato, inténtelo luego"),r=!1;try{const o=await fetch("/rest/v2/p2p/deal",{method:"POST",headers:await this.buildRequestHeaders(),body:JSON.stringify({announcementId:e,paymentMethod:t,amount:n,rate:i})});if(200===o.status||201===o.status)return await o.json();if(401===o.status)r=!0,a=this.trans("Debes iniciar sesión para poder crear un trato");else{const e=await o.json();a=this.trans(e.error??"Ocurrió un error al crear el trato, inténtelo luego")}}catch(a){}return{error:a,forceAuth:r}}async fetchPaymentMethods(){try{ const e=await fetch("/rest/v2/p2p/payment-method/list",{method:"GET",headers:await this.buildRequestHeaders(),useCache:!0});if(200===e.status)return await e.json()}catch(e){return[]}}async fetchDeal(e){const t=(this.deals??[]).filter((t=>t.id==e))[0]??!1;if(t)return t;let n=!1;try{const t=await fetch(`/rest/v2/p2p/deal/${e}`,{method:"GET",headers:await this.buildRequestHeaders()});if(200===t.status)return await t.json();401===t.status&&(n=!0)}catch(e){}return{forceAuth:n}}async fetchAnnouncements(){try{const e=await fetch(`/rest/v2/p2p/announcement/list?intent=${this._filterState.intent}&paymentMethod=${this._filterState.paymentMethod}&amountIntent=${this._filterState.amount}&pg=${this._filterState.pg??1}&pgSize=${this._filterState.pgSize??15}`,{method:"GET",headers:await this.buildRequestHeaders()});if(200===e.status){const t=await e.json();return this.announcements=t.items,t}}catch(e){}return{pg:this._filterState.pg??1,pgSize:this._filterState.pgSize??15,total:0,items:[]}} async fetchMyAnnouncements(){try{const e=await fetch(`/rest/v2/p2p/announcement/list?onlyself=true&pg=${this.anouncementPg??1}&pgSize=25`,{method:"GET",headers:await this.buildRequestHeaders()});if(401===e.status&&this.dispatchEvent(new CustomEvent("forceauth",{bubbles:!0,composed:!0})),e.ok)return await e.json()}catch(e){}return{pg:1,pgSize:50,total:0,items:[]}}async fetchMyDeal(e=1,t=10){try{const n=await fetch(`/rest/v2/p2p/deal/list?pg=${e}&pgSize=${t}`,{method:"GET",headers:await this.buildRequestHeaders()});if(401===n.status&&this.dispatchEvent(new CustomEvent("forceauth",{bubbles:!0,composed:!0})),n.ok)return await n.json()}catch(e){}return{pg:1,pgSize:50,total:0,items:[]}}}class i{constructor(){this.routes={},this.currentRoute=null,window.addEventListener("popstate",(()=>this.handleRouting()))}addRoute(e,t){this.routes[e]=t}navigate(e,t={}){window.history.pushState(t,null,e),this.handleRouting(),document.querySelectorAll("remex-router").forEach((e=>{e?.checkActiveRoute()}))} handleRouting(){const e=window.location.pathname,t=this.routes[e]||this.routes["*"];t&&t(),document.querySelectorAll("remex-router").forEach((e=>{e?.checkActiveRoute()}))}}customElements.define("remex-p2p",n);const a=window.fetch,r=new Map,o=new Map;function generateCacheKey(e,t){const n=e instanceof Request?e.url:e.toString(),{headers:i,body:a,useCache:r,cacheDuration:o,...s}=t,c=i instanceof Headers?[...i.entries()].sort():Object.entries(i||{}).sort();return JSON.stringify({url:n,options:{...s,headers:c,body:"string"==typeof a?a:null}})}function createResponseFromCachedData(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers),url:e.url})}window.fetch=function(e,t={}){const{useCache:n=!1,cacheDuration:i=864e5,...s}=t,c=generateCacheKey(e,s);if(n){const e=o.get(c);if(e&&e.expiration>Date.now())return Promise.resolve(createResponseFromCachedData(e.data));if(r.has(c))return r.get(c)}const l=a(e,s).then((async e=>{ const t=e.clone(),n=await t.arrayBuffer();return o.set(c,{data:{body:n,status:t.status,statusText:t.statusText,headers:[...t.headers.entries()],url:t.url},expiration:Date.now()+i}),createResponseFromCachedData(o.get(c).data)})).catch((e=>{throw r.delete(c),e})).finally((()=>{r.delete(c)}));return r.set(c,l),l},window.fetchClearCache=function(e,t={}){const{useCache:n,cacheDuration:i,...a}=t,s=generateCacheKey(e,a);o.delete(s),r.delete(s)}}