@voxepay/checkout 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- var VoxePay=function(e){"use strict";const t=[{name:"Visa",code:"visa",pattern:/^4/,lengths:[13,16,19],cvvLength:3},{name:"Mastercard",code:"mastercard",pattern:/^(5[1-5]|2[2-7])/,lengths:[16],cvvLength:3},{name:"Verve",code:"verve",pattern:/^(506[0-9]|507[0-9]|6500)/,lengths:[16,18,19],cvvLength:3},{name:"American Express",code:"amex",pattern:/^3[47]/,lengths:[15],cvvLength:4},{name:"Discover",code:"discover",pattern:/^(6011|65|64[4-9])/,lengths:[16,19],cvvLength:3}];function a(e){const a=e.replace(/\s/g,"");for(const e of t)if(e.pattern.test(a))return e;return null}function n(e){const t=e.replace(/\s/g,"");if(!/^\d+$/.test(t))return!1;let a=0,n=!1;for(let e=t.length-1;e>=0;e--){let o=parseInt(t[e],10);n&&(o*=2,o>9&&(o-=9)),a+=o,n=!n}return a%10==0}function o(e){const t=e.replace(/\s/g,"");if(!t)return{valid:!1,error:"Card number is required"};if(!/^\d+$/.test(t))return{valid:!1,error:"Invalid card number"};const o=a(t);return o?o.lengths.includes(t.length)?n(t)?{valid:!0}:{valid:!1,error:"Invalid card number"}:{valid:!1,error:"Invalid card number length"}:{valid:!1,error:"Unsupported card type"}}function r(e){const t=e.replace(/\s/g,"");if(!t)return{valid:!1,error:"Expiry date is required"};const a=t.match(/^(\d{2})\/(\d{2})$/);if(!a)return{valid:!1,error:"Invalid format (MM/YY)"};const n=parseInt(a[1],10),o=parseInt(a[2],10)+2e3;if(n<1||n>12)return{valid:!1,error:"Invalid month"};const r=new Date,i=r.getFullYear(),s=r.getMonth()+1;return o<i||o===i&&n<s?{valid:!1,error:"Card has expired"}:o>i+20?{valid:!1,error:"Invalid expiry year"}:{valid:!0}}function i(e,t){const n=e.replace(/\s/g,"");if(!n)return{valid:!1,error:"CVV is required"};if(!/^\d+$/.test(n))return{valid:!1,error:"Invalid CVV"};const o=t?a(t):null,r=(null==o?void 0:o.cvvLength)||3;return n.length!==r&&3!==n.length&&4!==n.length?{valid:!1,error:`CVV must be ${r} digits`}:{valid:!0}}function s(e){return(e.replace(/\D/g,"").match(/.{1,4}/g)||[]).join(" ").slice(0,23)}function l(e){const t=e.replace(/\D/g,"");if(0===t.length)return"";if(1===t.length)return parseInt(t)>1?`0${t}`:t;if(2===t.length){const e=parseInt(t);return e>12?"12":0===e?"01":t}return`${t.slice(0,2)}/${t.slice(2,4)}`}function d(e){return e.replace(/\D/g,"").slice(0,4)}function p(e,t){return new Intl.NumberFormat("en-US",{style:"currency",currency:t,minimumFractionDigits:2}).format(e/100)}const c=e=>{const t=[];for(let a=0;a<e.length;a+=2)t.push(parseInt(e.substring(a,a+2),16));return t};class v{constructor(){this.data=[],this.sign=0}static fromHex(e){const t=new v;if(0===e.length)return t;t.sign=1;let a=0,n=0;for(let o=e.length-1;o>=0;o--){n|=parseInt(e[o],16)<<a,a+=4,a>=v.BITS&&(t.data.push(n&v.BASE-1),n>>>=v.BITS,a-=v.BITS)}return(n>0||a>0)&&t.data.push(n),t.trim(),t}static fromBytes(e){const t=e.map(e=>e.toString(16).padStart(2,"0")).join("");return v.fromHex(t)}trim(){for(;this.data.length>0&&0===this.data[this.data.length-1];)this.data.pop();0===this.data.length&&(this.sign=0)}isZero(){return 0===this.data.length}bitLength(){if(0===this.data.length)return 0;const e=this.data[this.data.length-1];let t=(this.data.length-1)*v.BITS,a=e;for(;a>0;)t++,a>>>=1;return t}toBytes(e){let t="";for(let e=this.data.length-1;e>=0;e--){const a=this.data[e].toString(16);if(e===this.data.length-1)t+=a;else{const e=Math.ceil(v.BITS/4);t+=a.padStart(e,"0")}}t.length%2!=0&&(t="0"+t);const a=c(t);if(e&&a.length<e){return new Array(e-a.length).fill(0).concat(a)}return a}clone(){const e=new v;return e.data=this.data.slice(),e.sign=this.sign,e}compareAbs(e){if(this.data.length!==e.data.length)return this.data.length>e.data.length?1:-1;for(let t=this.data.length-1;t>=0;t--)if(this.data[t]!==e.data[t])return this.data[t]>e.data[t]?1:-1;return 0}multiply(e){if(this.isZero()||e.isZero())return new v;const t=new v;t.data=new Array(this.data.length+e.data.length).fill(0),t.sign=1;for(let a=0;a<this.data.length;a++){let n=0;for(let o=0;o<e.data.length;o++){const r=this.data[a]*e.data[o]+t.data[a+o]+n;t.data[a+o]=r&v.BASE-1,n=Math.floor(r/v.BASE)}n>0&&(t.data[a+e.data.length]+=n)}return t.trim(),t}modPow(e,t){if(t.isZero())throw new Error("Division by zero");let a=v.fromHex("1"),n=this.mod(t);const o=e.bitLength();for(let r=0;r<o;r++){const o=Math.floor(r/v.BITS),i=r%v.BITS;o<e.data.length&&e.data[o]&1<<i&&(a=a.multiply(n).mod(t)),n=n.multiply(n).mod(t)}return a}mod(e){return this.divmod(e).remainder}divmod(e){if(e.isZero())throw new Error("Division by zero");if(this.isZero())return{quotient:new v,remainder:new v};const t=this.compareAbs(e);if(t<0)return{quotient:new v,remainder:this.clone()};if(0===t){return{quotient:v.fromHex("1"),remainder:new v}}const a=new v;a.data=new Array(this.data.length).fill(0),a.sign=1;let n=new v;for(let t=this.bitLength()-1;t>=0;t--){n=n.shiftLeft(1);const o=Math.floor(t/v.BITS),r=t%v.BITS;if(o<this.data.length&&this.data[o]&1<<r&&(0===n.data.length&&n.data.push(0),n.data[0]|=1,n.sign=1),n.compareAbs(e)>=0){n=n.subtract(e);const o=Math.floor(t/v.BITS),r=t%v.BITS;for(;a.data.length<=o;)a.data.push(0);a.data[o]|=1<<r}}return a.trim(),n.trim(),{quotient:a,remainder:n}}shiftLeft(e){if(this.isZero()||0===e)return this.clone();const t=Math.floor(e/v.BITS),a=e%v.BITS,n=new v;n.sign=this.sign,n.data=new Array(this.data.length+t+1).fill(0);for(let e=0;e<this.data.length;e++)n.data[e+t]|=this.data[e]<<a&v.BASE-1,a>0&&(n.data[e+t+1]|=this.data[e]>>>v.BITS-a);return n.trim(),n}subtract(e){const t=new v;t.sign=1,t.data=new Array(Math.max(this.data.length,e.data.length)).fill(0);let a=0;for(let n=0;n<t.data.length;n++){let o=(this.data[n]||0)-(e.data[n]||0)-a;o<0?(o+=v.BASE,a=1):a=0,t.data[n]=o}return t.trim(),t}}v.BASE=67108864,v.BITS=26;const y="009c7b3ba621a26c4b02f48cfc07ef6ee0aed8e12b4bd11c5cc0abf80d5206be69e1891e60fc88e2d565e2fabe4d0cf630e318a6c721c3ded718d0c530cdf050387ad0a30a336899bbda877d0ec7c7c3ffe693988bfae0ffbab71b25468c7814924f022cb5fda36e0d2c30a7161fa1c6fb5fbd7d05adbef7e68d48f8b6c5f511827c4b1c5ed15b6f20555affc4d0857ef7ab2b5c18ba22bea5d3a79bd1834badb5878d8c7a4b19da20c1f62340b1f7fbf01d2f2e97c9714a9df376ac0ea58072b2b77aeb7872b54a89667519de44d0fc73540beeaec4cb778a45eebfbefe2d817a8a8319b2bc6d9fa714f5289ec7c0dbc43496d71cf2a642cb679b0fc4072fd2cf",u="010001",h=async({version:e,pan:t,pin:a,expiryDate:n,cvv:o})=>{try{const i=c((e=>{let t="";for(let a=0;a<e.length;a++)t+=e.charCodeAt(a).toString(16).padStart(2,"0");return t})(`${e}Z${t}Z${a}Z${n}Z${o}`)),s=v.fromHex(y),l=v.fromHex(u),d=Math.ceil(s.bitLength()/8),p=((e,t)=>{if(e.length>t-11)throw new Error("Message too long for RSA encryption");const a=t-e.length-3,n=new Array(t);n[0]=0,n[1]=2;for(let e=0;e<a;e++){let t=0;if("undefined"!=typeof crypto&&crypto.getRandomValues){const e=new Uint8Array(1);for(;0===t;)crypto.getRandomValues(e),t=e[0]}else for(;0===t;)t=Math.floor(255*Math.random())+1;n[2+e]=t}n[2+a]=0;for(let t=0;t<e.length;t++)n[3+a+t]=e[t];return n})(i,d),h=v.fromBytes(p),x=h.modPow(l,s).toBytes(d);return r=x,"undefined"!=typeof btoa?btoa(String.fromCharCode(...r)):Buffer.from(r).toString("base64")}catch(e){throw console.error("[VoxePay] Encryption error:",e),new Error("Failed to encrypt card data")}var r},x=e=>{const t=e.replace(/\s|\//g,"");if(4!==t.length)return"";const a=t.substring(0,2);return`${t.substring(2,4)}${a}`},m=e=>e.replace(/\s/g,"");class g{constructor(e,t){this.apiKey=e,this.baseUrl=t||"https://devpay.voxepay.app"}async request(e,t){const a=`${this.baseUrl}${e}`,n=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey,Accept:"application/json"},body:JSON.stringify(t)}),o=await n.json();if(!n.ok){const e=(null==o?void 0:o.message)||(null==o?void 0:o.error)||`Request failed with status ${n.status}`,t=new Error(e);throw t.code=(null==o?void 0:o.errorCode)||(null==o?void 0:o.code)||`HTTP_${n.status}`,t.status=n.status,t.data=o,t}return o}async get(e){const t=`${this.baseUrl}${e}`,a=await fetch(t,{method:"GET",headers:{"X-API-Key":this.apiKey,Accept:"application/json"}}),n=await a.json();if(!a.ok){const e=(null==n?void 0:n.message)||(null==n?void 0:n.error)||`Request failed with status ${a.status}`,t=new Error(e);throw t.code=(null==n?void 0:n.errorCode)||(null==n?void 0:n.code)||`HTTP_${a.status}`,t.status=a.status,t.data=n,t}return n}async initiatePayment(e){const t=await this.request("/api/v1/payments/initiate",e);return t.data&&"object"==typeof t.data&&"transactionRef"in t.data?t.data:t}async validateOTP(e){return this.request("/api/v1/payments/validate-otp",e)}async resendOTP(e){await this.request("/api/v1/payments/resend-otp",e)}async getPaymentStatus(e){return(await this.get(`/api/v1/payments/${encodeURIComponent(e)}`)).data}}const f='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />\n </svg>',b='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />\n </svg>',w='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="3">\n <path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />\n </svg>',T='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" />\n </svg>',k='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" />\n </svg>',S='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M3 21h18M3 10h18M5 6l7-3 7 3M4 10v11M20 10v11M8 14v3M12 14v3M16 14v3" />\n </svg>',P='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />\n </svg>',I='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />\n </svg>',E={visa:"VISA",mastercard:"MC",amex:"AMEX",verve:"VERVE",discover:"DISC"};class C{constructor(e){this.container=null,this.overlay=null,this.apiClient=null,this.statusPollingInterval=null,this.statusPollingTimeout=null,this.handleEscape=e=>{"Escape"===e.key&&(this.close(),document.removeEventListener("keydown",this.handleEscape))},this.options=e;const t=e.paymentMethods||["card","bank_transfer"];e._sdkConfig&&(this.apiClient=new g(e._sdkConfig.apiKey,e._sdkConfig.baseUrl)),this.state={cardNumber:"",expiry:"",cvv:"",pin:"",otp:"",errors:{},isProcessing:!1,isSuccess:!1,isOtpStep:!1,otpTimer:60,canResendOtp:!1,otpTimerInterval:null,paymentMethod:t[0],transferTimer:0,transferTimerInterval:null,bankTransferDetails:e.bankTransferDetails||null,paymentId:null,transactionId:null,transactionRef:null,eciFlag:null}}open(){this.injectStyles(),this.render(),this.attachEventListeners(),requestAnimationFrame(()=>{var e;null===(e=this.overlay)||void 0===e||e.classList.add("voxepay-visible")})}close(){var e;this.stopTransferTimer(),this.stopStatusPolling(),null===(e=this.overlay)||void 0===e||e.classList.remove("voxepay-visible"),setTimeout(()=>{var e,t,a;null===(e=this.container)||void 0===e||e.remove(),this.container=null,this.overlay=null,null===(a=(t=this.options).onClose)||void 0===a||a.call(t)},300)}injectStyles(){if(document.getElementById("voxepay-checkout-styles"))return;const e=document.createElement("style");e.id="voxepay-checkout-styles",e.textContent=this.getStyles(),document.head.appendChild(e)}render(){this.container=document.createElement("div"),this.container.className="voxepay-checkout",this.container.innerHTML=this.getModalHTML(),document.body.appendChild(this.container),this.overlay=this.container.querySelector(".voxepay-overlay")}getPaymentMethods(){return this.options.paymentMethods||["card","bank_transfer"]}getModalHTML(){const e=p(this.options.amount,this.options.currency),t=this.getPaymentMethods(),a=t.length>1,n="card"===this.state.paymentMethod;return`\n <div class="voxepay-overlay">\n <div class="voxepay-modal" role="dialog" aria-modal="true" aria-labelledby="voxepay-title">\n <div class="voxepay-header">\n <div class="voxepay-header-left">\n <div class="voxepay-logo">V</div>\n <div>\n <div class="voxepay-amount" id="voxepay-title">Pay ${e}</div>\n ${this.options.description?`<div style="font-size: 0.875rem; color: var(--voxepay-text-muted);">${this.options.description}</div>`:""}\n </div>\n </div>\n <button class="voxepay-close" aria-label="Close" data-action="close">\n ${f}\n </button>\n </div>\n\n ${a?`\n <div class="voxepay-method-tabs">\n ${t.includes("card")?`\n <button class="voxepay-method-tab ${n?"active":""}" data-method="card">\n ${P} <span>Card</span>\n </button>`:""}\n ${t.includes("bank_transfer")?`\n <button class="voxepay-method-tab ${n?"":"active"}" data-method="bank_transfer">\n ${S} <span>Bank Transfer</span>\n </button>`:""}\n </div>`:""}\n \n <div class="voxepay-body" id="voxepay-form-container">\n ${n?this.getCardFormHTML(e):this.getBankTransferHTML(e)}\n </div>\n \n <div class="voxepay-footer">\n <div class="voxepay-powered-by">\n ${b}\n <span>Secured by <strong>VoxePay</strong></span>\n </div>\n </div>\n </div>\n </div>\n `}getCardFormHTML(e){return`\n <form id="voxepay-payment-form" novalidate>\n <div class="voxepay-form-group">\n <label class="voxepay-label">\n <span class="voxepay-label-icon">💳</span>\n Card Number\n </label>\n <div class="voxepay-card-input-wrapper">\n <input type="text" class="voxepay-input" id="voxepay-card-number" name="cardNumber"\n placeholder="1234 5678 9012 3456" autocomplete="cc-number" inputmode="numeric" />\n <div class="voxepay-card-brand" id="voxepay-card-brand"></div>\n </div>\n <div class="voxepay-error-message" id="voxepay-card-error" style="display: none;"></div>\n </div>\n \n <div class="voxepay-row">\n <div class="voxepay-form-group">\n <label class="voxepay-label"><span class="voxepay-label-icon">📅</span> Expiry</label>\n <input type="text" class="voxepay-input" id="voxepay-expiry" name="expiry"\n placeholder="MM/YY" autocomplete="cc-exp" inputmode="numeric" maxlength="5" />\n <div class="voxepay-error-message" id="voxepay-expiry-error" style="display: none;"></div>\n </div>\n <div class="voxepay-form-group">\n <label class="voxepay-label"><span class="voxepay-label-icon">🔒</span> CVV</label>\n <input type="text" class="voxepay-input" id="voxepay-cvv" name="cvv"\n placeholder="•••" autocomplete="cc-csc" inputmode="numeric" maxlength="4" />\n <div class="voxepay-error-message" id="voxepay-cvv-error" style="display: none;"></div>\n </div>\n <div class="voxepay-form-group">\n <label class="voxepay-label"><span class="voxepay-label-icon">🔑</span> PIN</label>\n <input type="password" class="voxepay-input" id="voxepay-pin" name="pin"\n placeholder="••••" autocomplete="current-password" inputmode="numeric" maxlength="4" />\n <div class="voxepay-error-message" id="voxepay-pin-error" style="display: none;"></div>\n </div>\n </div>\n \n <button type="submit" class="voxepay-submit-btn" id="voxepay-submit">\n <span>Pay Now ${e}</span>\n </button>\n </form>\n `}getBankTransferHTML(e){const t=this.state.bankTransferDetails;return t?`\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-instruction">\n <p>Transfer <strong>${e}</strong> to the account below</p>\n </div>\n\n <div class="voxepay-transfer-details">\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Account Number</span>\n <div class="voxepay-transfer-value-row">\n <span class="voxepay-transfer-value voxepay-transfer-account" id="voxepay-account-number">${t.accountNumber}</span>\n <button class="voxepay-copy-btn" id="voxepay-copy-btn" data-copy="${t.accountNumber}" title="Copy">\n ${k}\n </button>\n </div>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Bank Name</span>\n <span class="voxepay-transfer-value">${t.bankName}</span>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Account Name</span>\n <span class="voxepay-transfer-value">${t.accountName}</span>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Amount</span>\n <span class="voxepay-transfer-value voxepay-transfer-amount">${e}</span>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Reference</span>\n <span class="voxepay-transfer-value" style="font-family: monospace; letter-spacing: 1px;">${t.reference}</span>\n </div>\n </div>\n\n <div class="voxepay-transfer-timer" id="voxepay-transfer-timer">\n ${I}\n <span>Account expires in <strong id="voxepay-transfer-countdown">${this.formatCountdown(t.expiresIn)}</strong></span>\n </div>\n\n <button type="button" class="voxepay-submit-btn" id="voxepay-transfer-confirm">\n <span>I've sent the money</span>\n </button>\n </div>\n `:'\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-loading">\n <div class="voxepay-spinner"></div>\n <p style="margin-top: 16px; color: var(--voxepay-text-muted);">Generating account details...</p>\n </div>\n </div>\n '}formatCountdown(e){const t=Math.floor(e/60),a=e%60;return`${String(t).padStart(2,"0")}:${String(a).padStart(2,"0")}`}renderSuccessView(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(!t)return;const a=p(this.options.amount,this.options.currency);t.innerHTML=`\n <div class="voxepay-success-view">\n <div class="voxepay-success-icon">\n ${w}\n </div>\n <h2 class="voxepay-success-title">Payment Successful!</h2>\n <p class="voxepay-success-message">Your payment of ${a} has been processed.</p>\n <button class="voxepay-success-btn" data-action="close">Done</button>\n </div>\n `;const n=t.querySelector('[data-action="close"]');null==n||n.addEventListener("click",()=>this.close())}renderOTPView(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(!t)return;this.state.isOtpStep=!0,this.state.otpTimer=60,this.state.canResendOtp=!1;const a=this.options.customerEmail?`****${this.options.customerEmail.slice(-4)}`:"****1234";t.innerHTML=`\n <div class="voxepay-otp-view">\n <div class="voxepay-otp-header">\n <div class="voxepay-otp-icon">📱</div>\n <h3 class="voxepay-otp-title">Verify Your Payment</h3>\n <p class="voxepay-otp-subtitle">We've sent a 6-digit code to ${a}</p>\n </div>\n \n <div class="voxepay-otp-inputs-container">\n <div class="voxepay-otp-inputs" id="voxepay-otp-inputs">\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="0" inputmode="numeric" autocomplete="one-time-code" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="1" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="2" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="3" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="4" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="5" inputmode="numeric" />\n </div>\n <div class="voxepay-error-message" id="voxepay-otp-error" style="display: none;"></div>\n </div>\n\n <div class="voxepay-otp-timer" id="voxepay-otp-timer">\n Resend code in <span id="voxepay-timer-count">60</span>s\n </div>\n \n <button class="voxepay-resend-btn" id="voxepay-resend-otp" disabled>\n Resend OTP\n </button>\n \n <button type="button" class="voxepay-submit-btn" id="voxepay-verify-otp">\n <span>🔐 Verify & Pay</span>\n </button>\n \n <button class="voxepay-back-btn" id="voxepay-back-to-card">\n ← Back to card details\n </button>\n </div>\n `,this.attachOTPEventListeners(),this.startOTPTimer()}attachOTPEventListeners(){var e,t,a,n,o;const r=null===(e=this.container)||void 0===e?void 0:e.querySelectorAll(".voxepay-otp-digit");null==r||r.forEach((e,t)=>{e.addEventListener("input",e=>this.handleOTPInput(e,t)),e.addEventListener("keydown",e=>this.handleOTPKeydown(e,t)),e.addEventListener("paste",e=>this.handleOTPPaste(e))});const i=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-verify-otp");null==i||i.addEventListener("click",()=>this.handleOTPSubmit());const s=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-resend-otp");null==s||s.addEventListener("click",()=>this.handleResendOTP());const l=null===(n=this.container)||void 0===n?void 0:n.querySelector("#voxepay-back-to-card");null==l||l.addEventListener("click",()=>this.handleBackToCard()),null===(o=null==r?void 0:r[0])||void 0===o||o.focus()}handleOTPInput(e,t){var a;const n=e.target,o=n.value.replace(/\D/g,"");if(n.value=o,o&&t<5){const e=null===(a=this.container)||void 0===a?void 0:a.querySelector(`[data-index="${t+1}"]`);null==e||e.focus()}this.updateOTPState(),this.clearError("otp")}handleOTPKeydown(e,t){var a;const n=e.target;if("Backspace"===e.key&&!n.value&&t>0){const e=null===(a=this.container)||void 0===a?void 0:a.querySelector(`[data-index="${t-1}"]`);null==e||e.focus()}}handleOTPPaste(e){var t,a;e.preventDefault();const n=null===(t=e.clipboardData)||void 0===t?void 0:t.getData("text").replace(/\D/g,"").slice(0,6);if(n){const e=null===(a=this.container)||void 0===a?void 0:a.querySelectorAll(".voxepay-otp-digit");n.split("").forEach((t,a)=>{e[a]&&(e[a].value=t)}),this.updateOTPState()}}updateOTPState(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelectorAll(".voxepay-otp-digit");let a="";null==t||t.forEach(e=>a+=e.value),this.state.otp=a}startOTPTimer(){var e,t,a;const n=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-timer-count"),o=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-otp-timer"),r=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-resend-otp");this.state.otpTimerInterval=window.setInterval(()=>{this.state.otpTimer--,n&&(n.textContent=String(this.state.otpTimer)),this.state.otpTimer<=0&&(this.state.otpTimerInterval&&clearInterval(this.state.otpTimerInterval),this.state.canResendOtp=!0,o&&(o.style.display="none"),r&&(r.disabled=!1))},1e3)}async handleOTPSubmit(){if(6===this.state.otp.length){this.setOTPProcessing(!0);try{await this.verifyOTP(),this.state.otpTimerInterval&&clearInterval(this.state.otpTimerInterval);const e=await this.processPayment();this.state.isSuccess=!0,this.renderSuccessView(),this.options.onSuccess(e)}catch(e){this.setOTPProcessing(!1);const t=e;this.showError("otp",t.message||"Invalid OTP. Please try again.")}}else this.showError("otp","Please enter the complete 6-digit code")}setOTPProcessing(e){var t;const a=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-verify-otp");a&&(a.disabled=e,a.innerHTML=e?'<div class="voxepay-spinner"></div><span>Verifying...</span>':"<span>🔐 Verify & Pay</span>")}async verifyOTP(){if(!this.apiClient||!this.options._sdkConfig)throw{code:"SDK_ERROR",message:"SDK not properly initialized",recoverable:!1};if(6!==this.state.otp.length)throw{code:"INVALID_OTP",message:"Please enter the complete 6-digit code",recoverable:!0};if(!this.state.paymentId||!this.state.transactionId)throw{code:"MISSING_PAYMENT_DATA",message:"Payment session expired. Please try again.",recoverable:!1};await this.apiClient.validateOTP({paymentId:this.state.paymentId,otp:this.state.otp,transactionId:this.state.transactionId,eciFlag:this.state.eciFlag||void 0,organizationId:this.options._sdkConfig.organizationId})}async handleResendOTP(){var e,t,a,n;const o=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-otp-timer"),r=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-resend-otp");if(this.apiClient&&this.options._sdkConfig&&this.state.transactionRef)try{r&&(r.disabled=!0),await this.apiClient.resendOTP({transactionRef:this.state.transactionRef,organizationId:this.options._sdkConfig.organizationId})}catch(e){console.error("[VoxePay] Failed to resend OTP:",e)}this.state.otpTimer=60,this.state.canResendOtp=!1,o&&(o.style.display="block"),r&&(r.disabled=!0);const i=null===(a=this.container)||void 0===a?void 0:a.querySelectorAll(".voxepay-otp-digit");null==i||i.forEach(e=>e.value=""),this.state.otp="",this.startOTPTimer(),null===(n=null==i?void 0:i[0])||void 0===n||n.focus()}handleBackToCard(){var e;if(this.state.otpTimerInterval&&clearInterval(this.state.otpTimerInterval),this.state.isOtpStep=!1,this.state.otp="",this.container){this.container.innerHTML=this.getModalHTML(),this.overlay=this.container.querySelector(".voxepay-overlay"),null===(e=this.overlay)||void 0===e||e.classList.add("voxepay-visible"),this.attachEventListeners();const t=this.container.querySelector("#voxepay-card-number"),a=this.container.querySelector("#voxepay-expiry"),n=this.container.querySelector("#voxepay-cvv"),o=this.container.querySelector("#voxepay-pin");t&&(t.value=s(this.state.cardNumber)),a&&(a.value=this.state.expiry),n&&(n.value=this.state.cvv),o&&(o.value=this.state.pin)}}attachEventListeners(){var e,t,a,n,o,r,i,s;const l=null===(e=this.container)||void 0===e?void 0:e.querySelector('[data-action="close"]');null==l||l.addEventListener("click",()=>this.close()),null===(t=this.overlay)||void 0===t||t.addEventListener("click",e=>{e.target===this.overlay&&this.close()}),document.addEventListener("keydown",this.handleEscape);const d=null===(a=this.container)||void 0===a?void 0:a.querySelectorAll(".voxepay-method-tab");if(null==d||d.forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.method;t&&t!==this.state.paymentMethod&&this.switchPaymentMethod(t)})}),"card"===this.state.paymentMethod){const e=null===(n=this.container)||void 0===n?void 0:n.querySelector("#voxepay-card-number");null==e||e.addEventListener("input",e=>this.handleCardInput(e)),null==e||e.addEventListener("blur",()=>this.validateField("cardNumber"));const t=null===(o=this.container)||void 0===o?void 0:o.querySelector("#voxepay-expiry");null==t||t.addEventListener("input",e=>this.handleExpiryInput(e)),null==t||t.addEventListener("blur",()=>this.validateField("expiry"));const a=null===(r=this.container)||void 0===r?void 0:r.querySelector("#voxepay-cvv");null==a||a.addEventListener("input",e=>this.handleCVVInput(e)),null==a||a.addEventListener("blur",()=>this.validateField("cvv"));const l=null===(i=this.container)||void 0===i?void 0:i.querySelector("#voxepay-pin");null==l||l.addEventListener("input",e=>this.handlePinInput(e)),null==l||l.addEventListener("blur",()=>this.validateField("pin"));const d=null===(s=this.container)||void 0===s?void 0:s.querySelector("#voxepay-payment-form");null==d||d.addEventListener("submit",e=>this.handleSubmit(e))}"bank_transfer"===this.state.paymentMethod&&(this.attachBankTransferListeners(),this.state.bankTransferDetails?this.startTransferTimer():this.loadBankTransferDetails())}attachBankTransferListeners(){var e,t;const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-copy-btn");null==a||a.addEventListener("click",()=>{const e=a.dataset.copy||"";this.copyToClipboard(e)});const n=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-transfer-confirm");null==n||n.addEventListener("click",()=>this.handleTransferConfirm())}switchPaymentMethod(e){var t;if(this.stopTransferTimer(),this.state.paymentMethod=e,this.container&&(this.container.innerHTML=this.getModalHTML(),this.overlay=this.container.querySelector(".voxepay-overlay"),null===(t=this.overlay)||void 0===t||t.classList.add("voxepay-visible"),this.attachEventListeners(),"card"===e&&this.state.cardNumber)){const e=this.container.querySelector("#voxepay-card-number"),t=this.container.querySelector("#voxepay-expiry"),a=this.container.querySelector("#voxepay-cvv"),n=this.container.querySelector("#voxepay-pin");e&&(e.value=s(this.state.cardNumber)),t&&(t.value=this.state.expiry),a&&(a.value=this.state.cvv),n&&(n.value=this.state.pin)}}async loadBankTransferDetails(){var e,t;try{let t;if(this.options.onBankTransferRequested)t=await this.options.onBankTransferRequested();else{if(!this.apiClient||!this.options._sdkConfig)throw{code:"SDK_ERROR",message:"SDK not properly initialized. Missing API key or organization ID."};{const e=`VP-${Date.now().toString(36).toUpperCase()}-${Math.random().toString(36).substring(2,8).toUpperCase()}`,a=await this.apiClient.initiatePayment({organizationId:this.options._sdkConfig.organizationId,transactionRef:e,customerId:this.options.customerEmail||"",customerEmail:this.options.customerEmail,customerPhone:this.options.customerPhone,amount:this.options.amount/100,currency:this.options.currency,paymentMethod:"BANK_TRANSFER",authData:btoa(JSON.stringify({source:"web",method:"bank_transfer"})),narration:this.options.description,durationMinutes:30});this.state.transactionRef=a.transactionRef||e,this.state.paymentId=a.paymentId||a.id||null;const n=a.virtualAccount;if(!n)throw{code:"MISSING_VIRTUAL_ACCOUNT",message:"No virtual account returned from server."};const o=new Date(n.expires_at),r=Date.now(),i=Math.max(0,Math.floor((o.getTime()-r)/1e3));t={accountNumber:n.account_number,bankName:n.bank_name,accountName:n.account_name,reference:this.state.transactionRef,expiresIn:i,expiresAt:n.expires_at}}}this.state.bankTransferDetails=t;const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(a){const e=p(this.options.amount,this.options.currency);a.innerHTML=this.getBankTransferHTML(e),this.attachBankTransferListeners(),this.startTransferTimer()}}catch(e){const a=(null==e?void 0:e.code)||"BANK_TRANSFER_INIT_FAILED",n=(null==e?void 0:e.message)||"Could not generate bank transfer details. Please try again.",o=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-form-container");if(o){o.innerHTML=`\n <div class="voxepay-transfer-view">\n <div style="text-align: center; padding: 40px 16px;">\n <div style="font-size: 2.5rem; margin-bottom: 16px;">⚠️</div>\n <h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; color: var(--voxepay-text);">${this.getDVAErrorTitle(a)}</h3>\n <p style="font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 24px;">${n}</p>\n <button class="voxepay-submit-btn" id="voxepay-retry-transfer"><span>Try Again</span></button>\n </div>\n </div>\n `;const e=o.querySelector("#voxepay-retry-transfer");null==e||e.addEventListener("click",()=>{o.innerHTML='\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-loading">\n <div class="voxepay-spinner"></div>\n <p style="margin-top: 16px; color: var(--voxepay-text-muted);">Generating account details...</p>\n </div>\n </div>\n ',this.loadBankTransferDetails()})}this.options.onError({code:a,message:n,recoverable:!0,details:null==e?void 0:e.data})}}getDVAErrorTitle(e){return{ACCOUNT_CREATION_FAILED:"Account Generation Failed",ACCOUNT_EXPIRED:"Account Expired",INVALID_AMOUNT:"Invalid Amount",UNAUTHORIZED:"Authentication Failed",ORGANIZATION_NOT_FOUND:"Configuration Error",MISSING_VIRTUAL_ACCOUNT:"Account Generation Failed",SDK_ERROR:"Configuration Error"}[e]||"Something Went Wrong"}async copyToClipboard(e){var t;try{await navigator.clipboard.writeText(e);const a=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-copy-btn");a&&(a.innerHTML=`${w}`,a.classList.add("voxepay-copied"),setTimeout(()=>{a.innerHTML=`${k}`,a.classList.remove("voxepay-copied")},2e3))}catch(t){const a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a)}}async handleTransferConfirm(){var e,t;const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-transfer-confirm");if(a&&(a.disabled=!0,a.innerHTML='<div class="voxepay-spinner"></div><span>Confirming transfer...</span>'),!this.apiClient||!this.state.transactionRef){this.stopTransferTimer();const e={id:this.state.paymentId||`pay_transfer_${Date.now()}`,status:"pending",amount:this.options.amount,currency:this.options.currency,timestamp:(new Date).toISOString(),reference:null===(t=this.state.bankTransferDetails)||void 0===t?void 0:t.reference,paymentMethod:"bank_transfer"};return this.state.isSuccess=!0,this.renderSuccessView(),void this.options.onSuccess(e)}this.renderPollingView(),this.startStatusPolling()}renderPollingView(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(!t)return;const a=p(this.options.amount,this.options.currency);t.innerHTML=`\n <div class="voxepay-transfer-view">\n <div style="text-align: center; padding: 32px 16px;">\n <div class="voxepay-spinner" style="width: 40px; height: 40px; margin: 0 auto 20px; border-width: 3px;"></div>\n <h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; color: var(--voxepay-text);">Waiting for Payment</h3>\n <p style="font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 4px;">\n We're checking for your transfer of <strong>${a}</strong>\n </p>\n <p style="font-size: 0.813rem; color: var(--voxepay-text-subtle); margin-bottom: 24px;" id="voxepay-polling-status">\n This usually takes a few seconds...\n </p>\n <button class="voxepay-submit-btn" id="voxepay-cancel-polling" style="background: var(--voxepay-surface); border: 1px solid var(--voxepay-border); color: var(--voxepay-text-muted); box-shadow: none;">\n <span>Cancel</span>\n </button>\n </div>\n </div>\n `;const n=t.querySelector("#voxepay-cancel-polling");null==n||n.addEventListener("click",()=>{if(this.stopStatusPolling(),this.state.bankTransferDetails){const e=p(this.options.amount,this.options.currency);t.innerHTML=this.getBankTransferHTML(e),this.attachBankTransferListeners(),this.startTransferTimer()}})}startStatusPolling(){this.stopStatusPolling();const e=async()=>{var e;if(this.apiClient&&this.state.transactionRef)try{const e=await this.apiClient.getPaymentStatus(this.state.transactionRef);this.handlePollingStatusUpdate(e.status,e)}catch(t){console.error("[VoxePay] Status polling error:",t);const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-polling-status");a&&(a.textContent="Still checking... Please wait.")}};e(),this.statusPollingInterval=window.setInterval(e,5e3),this.statusPollingTimeout=window.setTimeout(()=>{this.stopStatusPolling(),this.handlePollingStatusUpdate("EXPIRED",null)},18e5)}stopStatusPolling(){this.statusPollingInterval&&(clearInterval(this.statusPollingInterval),this.statusPollingInterval=null),this.statusPollingTimeout&&(clearTimeout(this.statusPollingTimeout),this.statusPollingTimeout=null)}handlePollingStatusUpdate(e,t){var a;switch(["COMPLETED","FAILED","EXPIRED","CANCELLED"].includes(e)&&(this.stopStatusPolling(),this.stopTransferTimer()),e){case"COMPLETED":{const e={id:(null==t?void 0:t.id)||this.state.paymentId||`pay_transfer_${Date.now()}`,status:"success",amount:this.options.amount,currency:this.options.currency,timestamp:(null==t?void 0:t.completedAt)||(new Date).toISOString(),reference:this.state.transactionRef||void 0,paymentMethod:"bank_transfer",data:t||void 0};this.state.isSuccess=!0,this.renderSuccessView(),this.options.onSuccess(e);break}case"PAYMENT_RECEIVED":{const e=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-polling-status");e&&(e.textContent="Payment received! Processing...");break}case"PARTIAL_PAYMENT":this.stopStatusPolling(),this.renderTransferErrorView("Partial Payment Received","The amount transferred is less than the required amount. Please transfer the remaining balance or contact support.");break;case"OVERPAID":{const e={id:(null==t?void 0:t.id)||this.state.paymentId||`pay_transfer_${Date.now()}`,status:"success",amount:this.options.amount,currency:this.options.currency,timestamp:(null==t?void 0:t.completedAt)||(new Date).toISOString(),reference:this.state.transactionRef||void 0,paymentMethod:"bank_transfer",data:{...t,overpaid:!0}};this.state.isSuccess=!0,this.renderSuccessView(),this.options.onSuccess(e);break}case"EXPIRED":this.renderTransferErrorView("Payment Expired","The virtual account has expired. Please try again to generate a new account."),this.options.onError({code:"ACCOUNT_EXPIRED",message:"Virtual account expired before payment was received.",recoverable:!0});break;case"FAILED":this.renderTransferErrorView("Payment Failed",(null==t?void 0:t.message)||"The payment could not be processed. Please try again."),this.options.onError({code:"PAYMENT_FAILED",message:(null==t?void 0:t.message)||"Payment failed.",recoverable:!0});break;case"CANCELLED":this.renderTransferErrorView("Payment Cancelled","This payment has been cancelled."),this.options.onError({code:"PAYMENT_CANCELLED",message:"Payment was cancelled.",recoverable:!1})}}renderTransferErrorView(e,t){var a;const n=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-form-container");if(!n)return;n.innerHTML=`\n <div class="voxepay-transfer-view">\n <div style="text-align: center; padding: 40px 16px;">\n <div style="font-size: 2.5rem; margin-bottom: 16px;">❌</div>\n <h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; color: var(--voxepay-text);">${e}</h3>\n <p style="font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 24px;">${t}</p>\n <button class="voxepay-submit-btn" id="voxepay-retry-transfer"><span>Try Again</span></button>\n </div>\n </div>\n `;const o=n.querySelector("#voxepay-retry-transfer");null==o||o.addEventListener("click",()=>{this.state.bankTransferDetails=null,this.state.transactionRef=null,this.state.paymentId=null,n.innerHTML='\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-loading">\n <div class="voxepay-spinner"></div>\n <p style="margin-top: 16px; color: var(--voxepay-text-muted);">Generating account details...</p>\n </div>\n </div>\n ',this.loadBankTransferDetails()})}startTransferTimer(){this.state.bankTransferDetails&&(this.state.transferTimer=this.state.bankTransferDetails.expiresIn,this.state.transferTimerInterval=window.setInterval(()=>{var e,t,a;this.state.transferTimer--;const n=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-transfer-countdown");if(n&&(n.textContent=this.formatCountdown(this.state.transferTimer)),this.state.transferTimer<=0){this.stopTransferTimer();const e=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-transfer-timer");e&&(e.innerHTML=`${I} <span style="color: var(--voxepay-error);">Account expired. Please try again.</span>`);const n=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-transfer-confirm");n&&(n.disabled=!0)}},1e3))}stopTransferTimer(){this.state.transferTimerInterval&&(clearInterval(this.state.transferTimerInterval),this.state.transferTimerInterval=null)}handleCardInput(e){var t;const n=e.target,o=s(n.value);n.value=o,this.state.cardNumber=o.replace(/\s/g,"");const r=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-card-brand"),i=a(this.state.cardNumber);r&&(r.textContent=i&&E[i.code]||"",r.style.opacity=i?"1":"0"),this.clearError("cardNumber")}handleExpiryInput(e){const t=e.target,a=l(t.value);t.value=a,this.state.expiry=a,this.clearError("expiry")}handleCVVInput(e){const t=e.target,a=d(t.value);t.value=a,this.state.cvv=a,this.clearError("cvv")}handlePinInput(e){const t=e.target,a=t.value.replace(/\D/g,"").slice(0,4);t.value=a,this.state.pin=a,this.clearError("pin")}validateField(e){let t;switch(e){case"cardNumber":t=o(this.state.cardNumber);break;case"expiry":t=r(this.state.expiry);break;case"cvv":t=i(this.state.cvv,this.state.cardNumber);break;case"pin":t=function(e){const t=e.replace(/\s/g,"");return t?/^\d{4}$/.test(t)?{valid:!0}:{valid:!1,error:"PIN must be 4 digits"}:{valid:!1,error:"PIN is required"}}(this.state.pin);break;default:return!0}return t.valid?(this.clearError(e),!0):(this.showError(e,t.error||"Invalid"),!1)}showError(e,t){var a,n;const o=null===(a=this.container)||void 0===a?void 0:a.querySelector(`#voxepay-${"cardNumber"===e?"card":e}-error`),r=null===(n=this.container)||void 0===n?void 0:n.querySelector(`#voxepay-${"cardNumber"===e?"card-number":e}`);o&&(o.innerHTML=`${T} ${t}`,o.style.display="flex"),null==r||r.classList.add("voxepay-error")}clearError(e){var t,a;const n=null===(t=this.container)||void 0===t?void 0:t.querySelector(`#voxepay-${"cardNumber"===e?"card":e}-error`),o=null===(a=this.container)||void 0===a?void 0:a.querySelector(`#voxepay-${"cardNumber"===e?"card-number":e}`);n&&(n.style.display="none"),null==o||o.classList.remove("voxepay-error")}async handleSubmit(e){e.preventDefault();const t=this.validateField("cardNumber"),a=this.validateField("expiry"),n=this.validateField("cvv"),o=this.validateField("pin");if(t&&a&&n&&o)if(this.apiClient&&this.options._sdkConfig){this.setProcessing(!0);try{const e=m(this.state.cardNumber),t=x(this.state.expiry),a={version:"1",pan:e,pin:this.state.pin,expiryDate:t,cvv:this.state.cvv};console.log("Before encryption:",a);const n=await h(a),o=`VP-${Date.now().toString(36).toUpperCase()}-${Math.random().toString(36).substring(2,8).toUpperCase()}`,r=await this.apiClient.initiatePayment({organizationId:this.options._sdkConfig.organizationId,transactionRef:o,customerId:this.options.customerEmail,customerEmail:this.options.customerEmail,customerPhone:this.options.customerPhone,amount:this.options.amount/100,currency:this.options.currency,paymentMethod:"CARD",authData:n,narration:this.options.description});this.state.paymentId=r.paymentId,this.state.transactionId=r.transactionId,this.state.transactionRef=r.transactionRef||o,this.state.eciFlag=r.eciFlag||null,this.setProcessing(!1),this.renderOTPView()}catch(e){this.setProcessing(!1);const t=(null==e?void 0:e.message)||"Payment failed. Please try again.";this.options.onError({code:(null==e?void 0:e.code)||"PAYMENT_INITIATE_FAILED",message:t,recoverable:!0,details:null==e?void 0:e.data}),this.showError("cardNumber",t)}}else this.showError("cardNumber","SDK not properly initialized. Missing API key or organization ID.")}setProcessing(e){var t;this.state.isProcessing=e;const a=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-submit");a&&(a.disabled=e,a.innerHTML=e?'<div class="voxepay-spinner"></div><span>Processing...</span>':`<span>Pay Now ${p(this.options.amount,this.options.currency)}</span>`)}async processPayment(){return{id:this.state.paymentId||`pay_${Date.now()}`,status:"success",amount:this.options.amount,currency:this.options.currency,timestamp:(new Date).toISOString(),reference:this.state.transactionRef||void 0,paymentMethod:"card"}}getStyles(){return"\n :root {\n /* VoxePay Blue Color Palette */\n --voxepay-primary: #0061FF;\n --voxepay-primary-hover: #0056E0;\n --voxepay-secondary: #0047CC;\n --voxepay-accent: #60A5FA;\n --voxepay-glow: rgba(0, 97, 255, 0.35);\n --voxepay-success: #10B981;\n --voxepay-success-bg: rgba(16, 185, 129, 0.1);\n --voxepay-error: #EF4444;\n \n /* Dark Mode (Default) */\n --voxepay-bg: #0C0C1D;\n --voxepay-surface: rgba(255, 255, 255, 0.04);\n --voxepay-surface-hover: rgba(255, 255, 255, 0.08);\n --voxepay-border: rgba(255, 255, 255, 0.08);\n --voxepay-text: #FFFFFF;\n --voxepay-text-muted: #B4B4C7;\n --voxepay-text-subtle: #6B7280;\n --voxepay-input-bg: rgba(255, 255, 255, 0.06);\n \n /* Effects */\n --voxepay-backdrop-blur: blur(24px);\n --voxepay-border-radius: 12px;\n --voxepay-border-radius-lg: 16px;\n --voxepay-border-radius-xl: 24px;\n --voxepay-glow-shadow: 0 0 60px var(--voxepay-glow);\n --voxepay-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.6);\n --voxepay-transition-fast: 150ms ease;\n --voxepay-transition: 300ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n \n /* Light Mode */\n html.voxepay-light {\n --voxepay-primary: #0061FF;\n --voxepay-primary-hover: #0056E0;\n --voxepay-secondary: #0047CC;\n --voxepay-glow: rgba(0, 97, 255, 0.2);\n \n --voxepay-bg: #FFFFFF;\n --voxepay-surface: #F8FAFC;\n --voxepay-surface-hover: #F1F5F9;\n --voxepay-border: #E2E8F0;\n --voxepay-text: #0F172A;\n --voxepay-text-muted: #475569;\n --voxepay-text-subtle: #94A3B8;\n --voxepay-input-bg: #F8FAFC;\n \n --voxepay-glow-shadow: 0 0 40px rgba(0, 97, 255, 0.12);\n --voxepay-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);\n }\n \n .voxepay-checkout * { box-sizing: border-box; margin: 0; padding: 0; }\n .voxepay-checkout { font-family: 'DM Sans', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-size: 1rem; color: var(--voxepay-text); line-height: 1.5; -webkit-font-smoothing: antialiased; }\n \n .voxepay-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); backdrop-filter: var(--voxepay-backdrop-blur); -webkit-backdrop-filter: var(--voxepay-backdrop-blur); display: flex; align-items: center; justify-content: center; z-index: 999999; opacity: 0; visibility: hidden; transition: opacity var(--voxepay-transition), visibility var(--voxepay-transition); }\n html.voxepay-light .voxepay-overlay { background: rgba(15, 23, 42, 0.4); }\n .voxepay-overlay.voxepay-visible { opacity: 1; visibility: visible; }\n \n .voxepay-modal { background: var(--voxepay-bg); border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius-xl); width: 100%; max-width: 420px; max-height: 90vh; overflow: hidden; box-shadow: var(--voxepay-shadow), var(--voxepay-glow-shadow); transform: scale(0.95) translateY(20px); opacity: 0; transition: transform var(--voxepay-transition), opacity var(--voxepay-transition); }\n .voxepay-overlay.voxepay-visible .voxepay-modal { transform: scale(1) translateY(0); opacity: 1; }\n \n .voxepay-header { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px; border-bottom: 1px solid var(--voxepay-border); background: var(--voxepay-surface); }\n .voxepay-header-left { display: flex; align-items: center; gap: 12px; }\n .voxepay-logo { width: 36px; height: 36px; border-radius: var(--voxepay-border-radius); background: linear-gradient(135deg, var(--voxepay-primary), var(--voxepay-secondary)); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 1.25rem; color: white; box-shadow: 0 4px 12px rgba(0, 97, 255, 0.3); }\n .voxepay-amount { font-size: 1.25rem; font-weight: 600; }\n .voxepay-close { width: 36px; height: 36px; border: none; background: var(--voxepay-surface-hover); border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--voxepay-text-muted); transition: all var(--voxepay-transition-fast); }\n .voxepay-close:hover { background: var(--voxepay-border); color: var(--voxepay-text); transform: rotate(90deg); }\n .voxepay-close svg { width: 18px; height: 18px; }\n \n .voxepay-body { padding: 24px; background: var(--voxepay-bg); }\n .voxepay-form-group { margin-bottom: 20px; }\n .voxepay-label { display: flex; align-items: center; gap: 8px; font-size: 0.875rem; font-weight: 500; color: var(--voxepay-text-muted); margin-bottom: 8px; }\n .voxepay-label-icon { font-size: 1rem; }\n \n .voxepay-input { width: 100%; padding: 14px 16px; background: var(--voxepay-input-bg); border: 1.5px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); color: var(--voxepay-text); font-size: 1rem; font-family: inherit; outline: none; transition: border-color var(--voxepay-transition-fast), box-shadow var(--voxepay-transition-fast), background var(--voxepay-transition-fast); }\n .voxepay-input::placeholder { color: var(--voxepay-text-subtle); }\n .voxepay-input:hover { border-color: var(--voxepay-text-subtle); }\n .voxepay-input:focus { border-color: var(--voxepay-primary); box-shadow: 0 0 0 4px var(--voxepay-glow); background: var(--voxepay-bg); }\n .voxepay-input.voxepay-error { border-color: var(--voxepay-error); box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.15); }\n \n .voxepay-card-input-wrapper { position: relative; }\n .voxepay-card-brand { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); padding: 4px 8px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--voxepay-primary), var(--voxepay-secondary)); border-radius: 6px; font-size: 0.7rem; font-weight: 700; color: white; opacity: 0; transition: opacity var(--voxepay-transition-fast); letter-spacing: 0.5px; }\n .voxepay-card-input-wrapper .voxepay-input { padding-right: 70px; }\n \n .voxepay-row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }\n \n .voxepay-error-message { display: flex; align-items: center; gap: 6px; font-size: 0.813rem; color: var(--voxepay-error); margin-top: 8px; animation: voxepay-shake 0.4s ease; }\n .voxepay-error-message svg { width: 16px; height: 16px; flex-shrink: 0; }\n @keyframes voxepay-shake { 0%, 100% { transform: translateX(0); } 20%, 60% { transform: translateX(-4px); } 40%, 80% { transform: translateX(4px); } }\n \n .voxepay-submit-btn { width: 100%; padding: 16px 24px; background: linear-gradient(135deg, var(--voxepay-primary), var(--voxepay-secondary)); border: none; border-radius: var(--voxepay-border-radius); color: white; font-size: 1.063rem; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 10px; transition: all var(--voxepay-transition-fast); position: relative; overflow: hidden; box-shadow: 0 4px 15px rgba(0, 97, 255, 0.35); }\n .voxepay-submit-btn:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 97, 255, 0.45); }\n .voxepay-submit-btn:active:not(:disabled) { transform: translateY(0); }\n .voxepay-submit-btn:disabled { opacity: 0.6; cursor: not-allowed; box-shadow: none; }\n .voxepay-submit-btn span { position: relative; z-index: 1; }\n \n .voxepay-spinner { width: 20px; height: 20px; border: 2.5px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: voxepay-spin 0.8s linear infinite; }\n @keyframes voxepay-spin { to { transform: rotate(360deg); } }\n \n .voxepay-footer { text-align: center; padding: 16px 24px 20px; border-top: 1px solid var(--voxepay-border); background: var(--voxepay-surface); }\n .voxepay-powered-by { font-size: 0.75rem; color: var(--voxepay-text-subtle); display: flex; align-items: center; justify-content: center; gap: 6px; }\n .voxepay-powered-by svg { width: 14px; height: 14px; color: var(--voxepay-primary); }\n .voxepay-powered-by strong { color: var(--voxepay-primary); font-weight: 600; }\n \n .voxepay-success-view { text-align: center; padding: 40px 24px; }\n .voxepay-success-icon { width: 80px; height: 80px; margin: 0 auto 24px; background: linear-gradient(135deg, var(--voxepay-success), #059669); border-radius: 50%; display: flex; align-items: center; justify-content: center; animation: voxepay-success-pop 0.5s ease; box-shadow: 0 8px 25px rgba(16, 185, 129, 0.35); }\n @keyframes voxepay-success-pop { 0% { transform: scale(0); opacity: 0; } 50% { transform: scale(1.1); } 100% { transform: scale(1); opacity: 1; } }\n .voxepay-success-icon svg { width: 40px; height: 40px; color: white; }\n .voxepay-success-title { font-size: 1.5rem; font-weight: 700; margin-bottom: 8px; color: var(--voxepay-text); }\n .voxepay-success-message { font-size: 1rem; color: var(--voxepay-text-muted); margin-bottom: 24px; }\n .voxepay-success-btn { padding: 12px 32px; background: var(--voxepay-surface); border: 1.5px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); color: var(--voxepay-text); font-size: 1rem; font-weight: 500; cursor: pointer; transition: all var(--voxepay-transition-fast); }\n .voxepay-success-btn:hover { background: var(--voxepay-surface-hover); border-color: var(--voxepay-primary); color: var(--voxepay-primary); }\n \n /* OTP View */\n .voxepay-otp-view { text-align: center; padding: 24px 16px; }\n .voxepay-otp-header { margin-bottom: 24px; }\n .voxepay-otp-icon { font-size: 3rem; margin-bottom: 12px; }\n .voxepay-otp-title { font-size: 1.25rem; font-weight: 700; color: var(--voxepay-text); margin-bottom: 8px; }\n .voxepay-otp-subtitle { font-size: 0.875rem; color: var(--voxepay-text-muted); }\n \n .voxepay-otp-inputs-container { margin-bottom: 16px; }\n .voxepay-otp-inputs { display: flex; justify-content: center; gap: 8px; margin-bottom: 8px; }\n .voxepay-otp-digit { width: 48px; height: 56px; text-align: center; font-size: 1.5rem; font-weight: 700; border: 2px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); background: var(--voxepay-input-bg); color: var(--voxepay-text); outline: none; transition: all var(--voxepay-transition-fast); }\n .voxepay-otp-digit:focus { border-color: var(--voxepay-primary); box-shadow: 0 0 0 4px var(--voxepay-glow); }\n \n .voxepay-otp-timer { font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 12px; }\n .voxepay-otp-timer span { font-weight: 700; color: var(--voxepay-primary); }\n \n .voxepay-resend-btn { padding: 8px 16px; background: transparent; border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); color: var(--voxepay-text-muted); font-size: 0.875rem; cursor: pointer; margin-bottom: 16px; transition: all var(--voxepay-transition-fast); }\n .voxepay-resend-btn:hover:not(:disabled) { border-color: var(--voxepay-primary); color: var(--voxepay-primary); }\n .voxepay-resend-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n \n .voxepay-back-btn { display: block; width: 100%; padding: 12px; background: transparent; border: none; color: var(--voxepay-text-muted); font-size: 0.875rem; cursor: pointer; margin-top: 12px; transition: color var(--voxepay-transition-fast); }\n .voxepay-back-btn:hover { color: var(--voxepay-primary); }\n\n /* Payment Method Tabs */\n .voxepay-method-tabs { display: flex; border-bottom: 1px solid var(--voxepay-border); background: var(--voxepay-surface); }\n .voxepay-method-tab { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 12px 12px; border: none; background: transparent; color: var(--voxepay-text-muted); font-size: 0.813rem; font-weight: 500; font-family: inherit; cursor: pointer; transition: all var(--voxepay-transition-fast); border-bottom: 2px solid transparent; white-space: nowrap; }\n .voxepay-method-tab svg { width: 16px; height: 16px; flex-shrink: 0; }\n .voxepay-method-tab:hover { color: var(--voxepay-text); background: var(--voxepay-surface-hover); }\n .voxepay-method-tab.active { color: var(--voxepay-primary); border-bottom-color: var(--voxepay-primary); background: var(--voxepay-bg); }\n\n /* Bank Transfer View */\n .voxepay-transfer-view { padding: 4px 0; }\n .voxepay-transfer-loading { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px 0; }\n .voxepay-transfer-instruction { text-align: center; margin-bottom: 20px; font-size: 0.938rem; color: var(--voxepay-text-muted); }\n .voxepay-transfer-instruction strong { color: var(--voxepay-text); font-size: 1.063rem; }\n .voxepay-transfer-details { background: var(--voxepay-surface); border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); overflow: hidden; margin-bottom: 16px; }\n .voxepay-transfer-detail { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--voxepay-border); }\n .voxepay-transfer-detail:last-child { border-bottom: none; }\n .voxepay-transfer-label { font-size: 0.813rem; color: var(--voxepay-text-muted); font-weight: 500; }\n .voxepay-transfer-value { font-size: 0.938rem; font-weight: 600; color: var(--voxepay-text); }\n .voxepay-transfer-value-row { display: flex; align-items: center; gap: 8px; }\n .voxepay-transfer-account { font-size: 1.125rem; font-weight: 700; color: var(--voxepay-primary); letter-spacing: 1.5px; font-family: 'DM Sans', monospace; }\n .voxepay-transfer-amount { color: var(--voxepay-primary); }\n\n /* Copy Button */\n .voxepay-copy-btn { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: 1px solid var(--voxepay-border); border-radius: 8px; background: var(--voxepay-surface-hover); color: var(--voxepay-text-muted); cursor: pointer; transition: all var(--voxepay-transition-fast); flex-shrink: 0; }\n .voxepay-copy-btn svg { width: 16px; height: 16px; }\n .voxepay-copy-btn:hover { border-color: var(--voxepay-primary); color: var(--voxepay-primary); background: rgba(0, 97, 255, 0.1); }\n .voxepay-copy-btn.voxepay-copied { border-color: var(--voxepay-success); color: var(--voxepay-success); background: var(--voxepay-success-bg); }\n\n /* Transfer Timer */\n .voxepay-transfer-timer { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 16px; background: var(--voxepay-surface); border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); margin-bottom: 16px; font-size: 0.875rem; color: var(--voxepay-text-muted); }\n .voxepay-transfer-timer svg { width: 16px; height: 16px; color: var(--voxepay-primary); flex-shrink: 0; }\n .voxepay-transfer-timer strong { color: var(--voxepay-primary); font-weight: 700; font-family: monospace; font-size: 0.938rem; }\n \n @media (max-width: 480px) { .voxepay-modal { max-width: 100%; max-height: 100%; border-radius: 0; height: 100%; } .voxepay-body { padding: 20px; } .voxepay-otp-digit { width: 42px; height: 50px; font-size: 1.25rem; } .voxepay-transfer-detail { flex-direction: column; align-items: flex-start; gap: 4px; } }\n "}}class M{constructor(){this.config=null,this.currentModal=null,this.initialized=!1}init(e){e.apiKey?e.organizationId?(this.config={theme:"dark",locale:"en-US",...e},this.initialized=!0,"auto"===e.theme?this.applyAutoTheme():"light"===e.theme&&document.documentElement.classList.add("voxepay-light"),e.customStyles&&this.applyCustomStyles(e.customStyles),console.log("[VoxePay] Initialized successfully")):console.error("[VoxePay] Organization ID is required. Find it in your VoxePay dashboard."):console.error("[VoxePay] API key is required. Get your API key from the VoxePay dashboard: Settings > API Keys")}checkout(e){return this.initialized?!e.amount||e.amount<=0?(console.error("[VoxePay] Invalid amount"),void e.onError({code:"INVALID_AMOUNT",message:"Payment amount must be greater than 0",recoverable:!1})):e.currency?(this.closeModal(),this.currentModal=new C({...e,_sdkConfig:{apiKey:this.config.apiKey,organizationId:this.config.organizationId,baseUrl:this.config.baseUrl},onClose:()=>{var t;this.currentModal=null,null===(t=e.onClose)||void 0===t||t.call(e)}}),void this.currentModal.open()):(console.error("[VoxePay] Currency is required"),void e.onError({code:"INVALID_CURRENCY",message:"Currency code is required",recoverable:!1})):(console.error("[VoxePay] Not initialized. Call VoxePay.init() first."),void e.onError({code:"NOT_INITIALIZED",message:"VoxePay SDK not initialized. Call VoxePay.init() first.",recoverable:!1}))}closeModal(){this.currentModal&&(this.currentModal.close(),this.currentModal=null)}setTheme(e){document.documentElement.classList.remove("voxepay-light"),"light"===e?document.documentElement.classList.add("voxepay-light"):"auto"===e&&this.applyAutoTheme(),this.config&&(this.config.theme=e)}applyAutoTheme(){window.matchMedia("(prefers-color-scheme: dark)").matches||document.documentElement.classList.add("voxepay-light"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{var t;"auto"===(null===(t=this.config)||void 0===t?void 0:t.theme)&&document.documentElement.classList.toggle("voxepay-light",!e.matches)})}applyCustomStyles(e){const t=document.documentElement;for(const[a,n]of Object.entries(e))n&&t.style.setProperty(a,n)}get version(){return"0.3.0"}get isInitialized(){return this.initialized}}const L=new M;return"undefined"!=typeof window&&(window.VoxePay=L),e.VoxePay=L,e.VoxePaySDK=M,e.cleanPan=m,e.default=L,e.detectCardBrand=a,e.formatAmount=p,e.formatCVV=d,e.formatCardNumber=s,e.formatExpiry=l,e.formatExpiryForApi=x,e.generateAuthData=h,e.getCurrencySymbol=function(e){return{NGN:"₦",USD:"$",EUR:"€",GBP:"£",GHS:"₵",KES:"KSh",ZAR:"R"}[e.toUpperCase()]||e},e.luhnCheck=n,e.validateCVV=i,e.validateCardNumber=o,e.validateExpiry=r,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
1
+ var VoxePay=function(e){"use strict";const t=[{name:"Visa",code:"visa",pattern:/^4/,lengths:[13,16,19],cvvLength:3},{name:"Mastercard",code:"mastercard",pattern:/^(5[1-5]|2[2-7])/,lengths:[16],cvvLength:3},{name:"Verve",code:"verve",pattern:/^(506[0-9]|507[0-9]|6500)/,lengths:[16,18,19],cvvLength:3},{name:"American Express",code:"amex",pattern:/^3[47]/,lengths:[15],cvvLength:4},{name:"Discover",code:"discover",pattern:/^(6011|65|64[4-9])/,lengths:[16,19],cvvLength:3}];function a(e){const a=e.replace(/\s/g,"");for(const e of t)if(e.pattern.test(a))return e;return null}function n(e){const t=e.replace(/\s/g,"");if(!/^\d+$/.test(t))return!1;let a=0,n=!1;for(let e=t.length-1;e>=0;e--){let o=parseInt(t[e],10);n&&(o*=2,o>9&&(o-=9)),a+=o,n=!n}return a%10==0}function o(e){const t=e.replace(/\s/g,"");if(!t)return{valid:!1,error:"Card number is required"};if(!/^\d+$/.test(t))return{valid:!1,error:"Invalid card number"};const o=a(t);return o?o.lengths.includes(t.length)?n(t)?{valid:!0}:{valid:!1,error:"Invalid card number"}:{valid:!1,error:"Invalid card number length"}:{valid:!1,error:"Unsupported card type"}}function r(e){const t=e.replace(/\s/g,"");if(!t)return{valid:!1,error:"Expiry date is required"};const a=t.match(/^(\d{2})\/(\d{2})$/);if(!a)return{valid:!1,error:"Invalid format (MM/YY)"};const n=parseInt(a[1],10),o=parseInt(a[2],10)+2e3;if(n<1||n>12)return{valid:!1,error:"Invalid month"};const r=new Date,i=r.getFullYear(),s=r.getMonth()+1;return o<i||o===i&&n<s?{valid:!1,error:"Card has expired"}:o>i+20?{valid:!1,error:"Invalid expiry year"}:{valid:!0}}function i(e,t){const n=e.replace(/\s/g,"");if(!n)return{valid:!1,error:"CVV is required"};if(!/^\d+$/.test(n))return{valid:!1,error:"Invalid CVV"};const o=t?a(t):null,r=(null==o?void 0:o.cvvLength)||3;return n.length!==r&&3!==n.length&&4!==n.length?{valid:!1,error:`CVV must be ${r} digits`}:{valid:!0}}function s(e){return(e.replace(/\D/g,"").match(/.{1,4}/g)||[]).join(" ").slice(0,23)}function l(e){const t=e.replace(/\D/g,"");if(0===t.length)return"";if(1===t.length)return parseInt(t)>1?`0${t}`:t;if(2===t.length){const e=parseInt(t);return e>12?"12":0===e?"01":t}return`${t.slice(0,2)}/${t.slice(2,4)}`}function d(e){return e.replace(/\D/g,"").slice(0,4)}function p(e,t){return new Intl.NumberFormat("en-US",{style:"currency",currency:t,minimumFractionDigits:2}).format(e/100)}const c=e=>{const t=[];for(let a=0;a<e.length;a+=2)t.push(parseInt(e.substring(a,a+2),16));return t};class v{constructor(){this.data=[],this.sign=0}static fromHex(e){const t=new v;if(0===e.length)return t;t.sign=1;let a=0,n=0;for(let o=e.length-1;o>=0;o--){n|=parseInt(e[o],16)<<a,a+=4,a>=v.BITS&&(t.data.push(n&v.BASE-1),n>>>=v.BITS,a-=v.BITS)}return(n>0||a>0)&&t.data.push(n),t.trim(),t}static fromBytes(e){const t=e.map(e=>e.toString(16).padStart(2,"0")).join("");return v.fromHex(t)}trim(){for(;this.data.length>0&&0===this.data[this.data.length-1];)this.data.pop();0===this.data.length&&(this.sign=0)}isZero(){return 0===this.data.length}bitLength(){if(0===this.data.length)return 0;const e=this.data[this.data.length-1];let t=(this.data.length-1)*v.BITS,a=e;for(;a>0;)t++,a>>>=1;return t}toBytes(e){let t="";for(let e=this.data.length-1;e>=0;e--){const a=this.data[e].toString(16);if(e===this.data.length-1)t+=a;else{const e=Math.ceil(v.BITS/4);t+=a.padStart(e,"0")}}t.length%2!=0&&(t="0"+t);const a=c(t);if(e&&a.length<e){return new Array(e-a.length).fill(0).concat(a)}return a}clone(){const e=new v;return e.data=this.data.slice(),e.sign=this.sign,e}compareAbs(e){if(this.data.length!==e.data.length)return this.data.length>e.data.length?1:-1;for(let t=this.data.length-1;t>=0;t--)if(this.data[t]!==e.data[t])return this.data[t]>e.data[t]?1:-1;return 0}multiply(e){if(this.isZero()||e.isZero())return new v;const t=new v;t.data=new Array(this.data.length+e.data.length).fill(0),t.sign=1;for(let a=0;a<this.data.length;a++){let n=0;for(let o=0;o<e.data.length;o++){const r=this.data[a]*e.data[o]+t.data[a+o]+n;t.data[a+o]=r&v.BASE-1,n=Math.floor(r/v.BASE)}n>0&&(t.data[a+e.data.length]+=n)}return t.trim(),t}modPow(e,t){if(t.isZero())throw new Error("Division by zero");let a=v.fromHex("1"),n=this.mod(t);const o=e.bitLength();for(let r=0;r<o;r++){const o=Math.floor(r/v.BITS),i=r%v.BITS;o<e.data.length&&e.data[o]&1<<i&&(a=a.multiply(n).mod(t)),n=n.multiply(n).mod(t)}return a}mod(e){return this.divmod(e).remainder}divmod(e){if(e.isZero())throw new Error("Division by zero");if(this.isZero())return{quotient:new v,remainder:new v};const t=this.compareAbs(e);if(t<0)return{quotient:new v,remainder:this.clone()};if(0===t){return{quotient:v.fromHex("1"),remainder:new v}}const a=new v;a.data=new Array(this.data.length).fill(0),a.sign=1;let n=new v;for(let t=this.bitLength()-1;t>=0;t--){n=n.shiftLeft(1);const o=Math.floor(t/v.BITS),r=t%v.BITS;if(o<this.data.length&&this.data[o]&1<<r&&(0===n.data.length&&n.data.push(0),n.data[0]|=1,n.sign=1),n.compareAbs(e)>=0){n=n.subtract(e);const o=Math.floor(t/v.BITS),r=t%v.BITS;for(;a.data.length<=o;)a.data.push(0);a.data[o]|=1<<r}}return a.trim(),n.trim(),{quotient:a,remainder:n}}shiftLeft(e){if(this.isZero()||0===e)return this.clone();const t=Math.floor(e/v.BITS),a=e%v.BITS,n=new v;n.sign=this.sign,n.data=new Array(this.data.length+t+1).fill(0);for(let e=0;e<this.data.length;e++)n.data[e+t]|=this.data[e]<<a&v.BASE-1,a>0&&(n.data[e+t+1]|=this.data[e]>>>v.BITS-a);return n.trim(),n}subtract(e){const t=new v;t.sign=1,t.data=new Array(Math.max(this.data.length,e.data.length)).fill(0);let a=0;for(let n=0;n<t.data.length;n++){let o=(this.data[n]||0)-(e.data[n]||0)-a;o<0?(o+=v.BASE,a=1):a=0,t.data[n]=o}return t.trim(),t}}v.BASE=67108864,v.BITS=26;const u="009c7b3ba621a26c4b02f48cfc07ef6ee0aed8e12b4bd11c5cc0abf80d5206be69e1891e60fc88e2d565e2fabe4d0cf630e318a6c721c3ded718d0c530cdf050387ad0a30a336899bbda877d0ec7c7c3ffe693988bfae0ffbab71b25468c7814924f022cb5fda36e0d2c30a7161fa1c6fb5fbd7d05adbef7e68d48f8b6c5f511827c4b1c5ed15b6f20555affc4d0857ef7ab2b5c18ba22bea5d3a79bd1834badb5878d8c7a4b19da20c1f62340b1f7fbf01d2f2e97c9714a9df376ac0ea58072b2b77aeb7872b54a89667519de44d0fc73540beeaec4cb778a45eebfbefe2d817a8a8319b2bc6d9fa714f5289ec7c0dbc43496d71cf2a642cb679b0fc4072fd2cf",y="010001",h=async({version:e,pan:t,pin:a,expiryDate:n,cvv:o})=>{try{const i=c((e=>{let t="";for(let a=0;a<e.length;a++)t+=e.charCodeAt(a).toString(16).padStart(2,"0");return t})(`${e}Z${t}Z${a}Z${n}Z${o}`)),s=v.fromHex(u),l=v.fromHex(y),d=Math.ceil(s.bitLength()/8),p=((e,t)=>{if(e.length>t-11)throw new Error("Message too long for RSA encryption");const a=t-e.length-3,n=new Array(t);n[0]=0,n[1]=2;for(let e=0;e<a;e++){let t=0;if("undefined"!=typeof crypto&&crypto.getRandomValues){const e=new Uint8Array(1);for(;0===t;)crypto.getRandomValues(e),t=e[0]}else for(;0===t;)t=Math.floor(255*Math.random())+1;n[2+e]=t}n[2+a]=0;for(let t=0;t<e.length;t++)n[3+a+t]=e[t];return n})(i,d),h=v.fromBytes(p),x=h.modPow(l,s).toBytes(d);return r=x,"undefined"!=typeof btoa?btoa(String.fromCharCode(...r)):Buffer.from(r).toString("base64")}catch(e){throw console.error("[VoxePay] Encryption error:",e),new Error("Failed to encrypt card data")}var r},x=e=>{const t=e.replace(/\s|\//g,"");if(4!==t.length)return"";const a=t.substring(0,2);return`${t.substring(2,4)}${a}`},m=e=>e.replace(/\s/g,"");class g{constructor(e,t,a){this.apiKey=e,this.bearerToken=a,this.baseUrl=t||"https://devpay.voxepay.app"}setBearerToken(e){this.bearerToken=e}async request(e,t){const a=`${this.baseUrl}${e}`,n=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey,Accept:"application/json"},body:JSON.stringify(t)}),o=await n.json();if(!n.ok){const e=(null==o?void 0:o.message)||(null==o?void 0:o.error)||`Request failed with status ${n.status}`,t=new Error(e);throw t.code=(null==o?void 0:o.errorCode)||(null==o?void 0:o.code)||`HTTP_${n.status}`,t.status=n.status,t.data=o,t}return o}async get(e,t=!1){const a=`${this.baseUrl}${e}`,n={Accept:"application/json"};t&&this.bearerToken?n.Authorization=`Bearer ${this.bearerToken}`:n["X-API-Key"]=this.apiKey;const o=await fetch(a,{method:"GET",headers:n}),r=await o.json();if(!o.ok){const e=(null==r?void 0:r.message)||(null==r?void 0:r.error)||`Request failed with status ${o.status}`,t=new Error(e);throw t.code=(null==r?void 0:r.errorCode)||(null==r?void 0:r.code)||`HTTP_${o.status}`,t.status=o.status,t.data=r,t.success=null==r?void 0:r.success,t}return r}async initiatePayment(e){const t=await this.request("/api/v1/payments/initiate",e);return t.data&&"object"==typeof t.data&&"transactionRef"in t.data?t.data:t}async validateOTP(e){return this.request("/api/v1/payments/validate-otp",e)}async resendOTP(e){await this.request("/api/v1/payments/resend-otp",e)}async getPaymentStatus(e,t){let a=`/api/v1/payments/public/${encodeURIComponent(e)}`;const n=[];void 0!==(null==t?void 0:t.simulateWebhook)&&n.push(`simulateWebhook=${t.simulateWebhook}`),(null==t?void 0:t.bypassKey)&&n.push(`bypassKey=${encodeURIComponent(t.bypassKey)}`),n.length>0&&(a+=`?${n.join("&")}`);const o=await this.get(a,!1);if(!o.success){const e=new Error(o.message||"Payment not found");throw e.code=o.errorCode||"PAYMENT_NOT_FOUND",e.success=!1,e}return o.data}}const f='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />\n </svg>',b='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />\n </svg>',w='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="3">\n <path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />\n </svg>',T='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" />\n </svg>',k='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" />\n </svg>',S='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M3 21h18M3 10h18M5 6l7-3 7 3M4 10v11M20 10v11M8 14v3M12 14v3M16 14v3" />\n </svg>',P='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />\n </svg>',I='<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">\n <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />\n </svg>',E={visa:"VISA",mastercard:"MC",amex:"AMEX",verve:"VERVE",discover:"DISC"};class C{constructor(e){this.container=null,this.overlay=null,this.apiClient=null,this.statusPollingInterval=null,this.statusPollingTimeout=null,this.handleEscape=e=>{"Escape"===e.key&&(this.close(),document.removeEventListener("keydown",this.handleEscape))},this.options=e;const t=e.paymentMethods||["card","bank_transfer"];e._sdkConfig&&(this.apiClient=new g(e._sdkConfig.apiKey,e._sdkConfig.baseUrl)),this.state={cardNumber:"",expiry:"",cvv:"",pin:"",otp:"",errors:{},isProcessing:!1,isSuccess:!1,isOtpStep:!1,otpTimer:60,canResendOtp:!1,otpTimerInterval:null,paymentMethod:t[0],transferTimer:0,transferTimerInterval:null,bankTransferDetails:e.bankTransferDetails||null,paymentId:null,transactionId:null,transactionRef:null,eciFlag:null}}open(){this.injectStyles(),this.render(),this.attachEventListeners(),requestAnimationFrame(()=>{var e;null===(e=this.overlay)||void 0===e||e.classList.add("voxepay-visible")})}close(){var e;this.stopTransferTimer(),this.stopStatusPolling(),null===(e=this.overlay)||void 0===e||e.classList.remove("voxepay-visible"),setTimeout(()=>{var e,t,a;null===(e=this.container)||void 0===e||e.remove(),this.container=null,this.overlay=null,null===(a=(t=this.options).onClose)||void 0===a||a.call(t)},300)}injectStyles(){if(document.getElementById("voxepay-checkout-styles"))return;const e=document.createElement("style");e.id="voxepay-checkout-styles",e.textContent=this.getStyles(),document.head.appendChild(e)}render(){this.container=document.createElement("div"),this.container.className="voxepay-checkout",this.container.innerHTML=this.getModalHTML(),document.body.appendChild(this.container),this.overlay=this.container.querySelector(".voxepay-overlay")}getPaymentMethods(){return this.options.paymentMethods||["card","bank_transfer"]}getModalHTML(){const e=p(this.options.amount,this.options.currency),t=this.getPaymentMethods(),a=t.length>1,n="card"===this.state.paymentMethod;return`\n <div class="voxepay-overlay">\n <div class="voxepay-modal" role="dialog" aria-modal="true" aria-labelledby="voxepay-title">\n <div class="voxepay-header">\n <div class="voxepay-header-left">\n <div class="voxepay-logo">V</div>\n <div>\n <div class="voxepay-amount" id="voxepay-title">Pay ${e}</div>\n ${this.options.description?`<div style="font-size: 0.875rem; color: var(--voxepay-text-muted);">${this.options.description}</div>`:""}\n </div>\n </div>\n <button class="voxepay-close" aria-label="Close" data-action="close">\n ${f}\n </button>\n </div>\n\n ${a?`\n <div class="voxepay-method-tabs">\n ${t.includes("card")?`\n <button class="voxepay-method-tab ${n?"active":""}" data-method="card">\n ${P} <span>Card</span>\n </button>`:""}\n ${t.includes("bank_transfer")?`\n <button class="voxepay-method-tab ${n?"":"active"}" data-method="bank_transfer">\n ${S} <span>Bank Transfer</span>\n </button>`:""}\n </div>`:""}\n \n <div class="voxepay-body" id="voxepay-form-container">\n ${n?this.getCardFormHTML(e):this.getBankTransferHTML(e)}\n </div>\n \n <div class="voxepay-footer">\n <div class="voxepay-powered-by">\n ${b}\n <span>Secured by <strong>VoxePay</strong></span>\n </div>\n </div>\n </div>\n </div>\n `}getCardFormHTML(e){return`\n <form id="voxepay-payment-form" novalidate>\n <div class="voxepay-form-group">\n <label class="voxepay-label">\n <span class="voxepay-label-icon">💳</span>\n Card Number\n </label>\n <div class="voxepay-card-input-wrapper">\n <input type="text" class="voxepay-input" id="voxepay-card-number" name="cardNumber"\n placeholder="1234 5678 9012 3456" autocomplete="cc-number" inputmode="numeric" />\n <div class="voxepay-card-brand" id="voxepay-card-brand"></div>\n </div>\n <div class="voxepay-error-message" id="voxepay-card-error" style="display: none;"></div>\n </div>\n \n <div class="voxepay-row">\n <div class="voxepay-form-group">\n <label class="voxepay-label"><span class="voxepay-label-icon">📅</span> Expiry</label>\n <input type="text" class="voxepay-input" id="voxepay-expiry" name="expiry"\n placeholder="MM/YY" autocomplete="cc-exp" inputmode="numeric" maxlength="5" />\n <div class="voxepay-error-message" id="voxepay-expiry-error" style="display: none;"></div>\n </div>\n <div class="voxepay-form-group">\n <label class="voxepay-label"><span class="voxepay-label-icon">🔒</span> CVV</label>\n <input type="text" class="voxepay-input" id="voxepay-cvv" name="cvv"\n placeholder="•••" autocomplete="cc-csc" inputmode="numeric" maxlength="4" />\n <div class="voxepay-error-message" id="voxepay-cvv-error" style="display: none;"></div>\n </div>\n <div class="voxepay-form-group">\n <label class="voxepay-label"><span class="voxepay-label-icon">🔑</span> PIN</label>\n <input type="password" class="voxepay-input" id="voxepay-pin" name="pin"\n placeholder="••••" autocomplete="current-password" inputmode="numeric" maxlength="4" />\n <div class="voxepay-error-message" id="voxepay-pin-error" style="display: none;"></div>\n </div>\n </div>\n \n <button type="submit" class="voxepay-submit-btn" id="voxepay-submit">\n <span>Pay Now ${e}</span>\n </button>\n </form>\n `}getBankTransferHTML(e){const t=this.state.bankTransferDetails;return t?`\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-instruction">\n <p>Transfer <strong>${e}</strong> to the account below</p>\n </div>\n\n <div class="voxepay-transfer-details">\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Account Number</span>\n <div class="voxepay-transfer-value-row">\n <span class="voxepay-transfer-value voxepay-transfer-account" id="voxepay-account-number">${t.accountNumber}</span>\n <button class="voxepay-copy-btn" id="voxepay-copy-btn" data-copy="${t.accountNumber}" title="Copy">\n ${k}\n </button>\n </div>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Bank Name</span>\n <span class="voxepay-transfer-value">${t.bankName}</span>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Account Name</span>\n <span class="voxepay-transfer-value">${t.accountName}</span>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Amount</span>\n <span class="voxepay-transfer-value voxepay-transfer-amount">${e}</span>\n </div>\n\n <div class="voxepay-transfer-detail">\n <span class="voxepay-transfer-label">Reference</span>\n <span class="voxepay-transfer-value" style="font-family: monospace; letter-spacing: 1px;">${t.reference}</span>\n </div>\n </div>\n\n <div class="voxepay-transfer-timer" id="voxepay-transfer-timer">\n ${I}\n <span>Account expires in <strong id="voxepay-transfer-countdown">${this.formatCountdown(t.expiresIn)}</strong></span>\n </div>\n\n <button type="button" class="voxepay-submit-btn" id="voxepay-transfer-confirm">\n <span>I've sent the money</span>\n </button>\n </div>\n `:'\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-loading">\n <div class="voxepay-spinner"></div>\n <p style="margin-top: 16px; color: var(--voxepay-text-muted);">Generating account details...</p>\n </div>\n </div>\n '}formatCountdown(e){const t=Math.floor(e/60),a=e%60;return`${String(t).padStart(2,"0")}:${String(a).padStart(2,"0")}`}renderSuccessView(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(!t)return;const a=p(this.options.amount,this.options.currency);t.innerHTML=`\n <div class="voxepay-success-view">\n <div class="voxepay-success-icon">\n ${w}\n </div>\n <h2 class="voxepay-success-title">Payment Successful!</h2>\n <p class="voxepay-success-message">Your payment of ${a} has been processed.</p>\n <button class="voxepay-success-btn" data-action="close">Done</button>\n </div>\n `;const n=t.querySelector('[data-action="close"]');null==n||n.addEventListener("click",()=>this.close())}renderOTPView(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(!t)return;this.state.isOtpStep=!0,this.state.otpTimer=60,this.state.canResendOtp=!1;const a=this.options.customerEmail?`****${this.options.customerEmail.slice(-4)}`:"****1234";t.innerHTML=`\n <div class="voxepay-otp-view">\n <div class="voxepay-otp-header">\n <div class="voxepay-otp-icon">📱</div>\n <h3 class="voxepay-otp-title">Verify Your Payment</h3>\n <p class="voxepay-otp-subtitle">We've sent a 6-digit code to ${a}</p>\n </div>\n \n <div class="voxepay-otp-inputs-container">\n <div class="voxepay-otp-inputs" id="voxepay-otp-inputs">\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="0" inputmode="numeric" autocomplete="one-time-code" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="1" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="2" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="3" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="4" inputmode="numeric" />\n <input type="text" maxlength="1" class="voxepay-otp-digit" data-index="5" inputmode="numeric" />\n </div>\n <div class="voxepay-error-message" id="voxepay-otp-error" style="display: none;"></div>\n </div>\n\n <div class="voxepay-otp-timer" id="voxepay-otp-timer">\n Resend code in <span id="voxepay-timer-count">60</span>s\n </div>\n \n <button class="voxepay-resend-btn" id="voxepay-resend-otp" disabled>\n Resend OTP\n </button>\n \n <button type="button" class="voxepay-submit-btn" id="voxepay-verify-otp">\n <span>🔐 Verify & Pay</span>\n </button>\n \n <button class="voxepay-back-btn" id="voxepay-back-to-card">\n ← Back to card details\n </button>\n </div>\n `,this.attachOTPEventListeners(),this.startOTPTimer()}attachOTPEventListeners(){var e,t,a,n,o;const r=null===(e=this.container)||void 0===e?void 0:e.querySelectorAll(".voxepay-otp-digit");null==r||r.forEach((e,t)=>{e.addEventListener("input",e=>this.handleOTPInput(e,t)),e.addEventListener("keydown",e=>this.handleOTPKeydown(e,t)),e.addEventListener("paste",e=>this.handleOTPPaste(e))});const i=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-verify-otp");null==i||i.addEventListener("click",()=>this.handleOTPSubmit());const s=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-resend-otp");null==s||s.addEventListener("click",()=>this.handleResendOTP());const l=null===(n=this.container)||void 0===n?void 0:n.querySelector("#voxepay-back-to-card");null==l||l.addEventListener("click",()=>this.handleBackToCard()),null===(o=null==r?void 0:r[0])||void 0===o||o.focus()}handleOTPInput(e,t){var a;const n=e.target,o=n.value.replace(/\D/g,"");if(n.value=o,o&&t<5){const e=null===(a=this.container)||void 0===a?void 0:a.querySelector(`[data-index="${t+1}"]`);null==e||e.focus()}this.updateOTPState(),this.clearError("otp")}handleOTPKeydown(e,t){var a;const n=e.target;if("Backspace"===e.key&&!n.value&&t>0){const e=null===(a=this.container)||void 0===a?void 0:a.querySelector(`[data-index="${t-1}"]`);null==e||e.focus()}}handleOTPPaste(e){var t,a;e.preventDefault();const n=null===(t=e.clipboardData)||void 0===t?void 0:t.getData("text").replace(/\D/g,"").slice(0,6);if(n){const e=null===(a=this.container)||void 0===a?void 0:a.querySelectorAll(".voxepay-otp-digit");n.split("").forEach((t,a)=>{e[a]&&(e[a].value=t)}),this.updateOTPState()}}updateOTPState(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelectorAll(".voxepay-otp-digit");let a="";null==t||t.forEach(e=>a+=e.value),this.state.otp=a}startOTPTimer(){var e,t,a;const n=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-timer-count"),o=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-otp-timer"),r=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-resend-otp");this.state.otpTimerInterval=window.setInterval(()=>{this.state.otpTimer--,n&&(n.textContent=String(this.state.otpTimer)),this.state.otpTimer<=0&&(this.state.otpTimerInterval&&clearInterval(this.state.otpTimerInterval),this.state.canResendOtp=!0,o&&(o.style.display="none"),r&&(r.disabled=!1))},1e3)}async handleOTPSubmit(){if(6===this.state.otp.length){this.setOTPProcessing(!0);try{await this.verifyOTP(),this.state.otpTimerInterval&&clearInterval(this.state.otpTimerInterval);const e=await this.processPayment();this.state.isSuccess=!0,this.renderSuccessView(),this.options.onSuccess(e)}catch(e){this.setOTPProcessing(!1);const t=e;this.showError("otp",t.message||"Invalid OTP. Please try again.")}}else this.showError("otp","Please enter the complete 6-digit code")}setOTPProcessing(e){var t;const a=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-verify-otp");a&&(a.disabled=e,a.innerHTML=e?'<div class="voxepay-spinner"></div><span>Verifying...</span>':"<span>🔐 Verify & Pay</span>")}async verifyOTP(){if(!this.apiClient||!this.options._sdkConfig)throw{code:"SDK_ERROR",message:"SDK not properly initialized",recoverable:!1};if(6!==this.state.otp.length)throw{code:"INVALID_OTP",message:"Please enter the complete 6-digit code",recoverable:!0};if(!this.state.paymentId||!this.state.transactionId)throw{code:"MISSING_PAYMENT_DATA",message:"Payment session expired. Please try again.",recoverable:!1};await this.apiClient.validateOTP({paymentId:this.state.paymentId,otp:this.state.otp,transactionId:this.state.transactionId,eciFlag:this.state.eciFlag||void 0,organizationId:this.options._sdkConfig.organizationId})}async handleResendOTP(){var e,t,a,n;const o=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-otp-timer"),r=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-resend-otp");if(this.apiClient&&this.options._sdkConfig&&this.state.transactionRef)try{r&&(r.disabled=!0),await this.apiClient.resendOTP({transactionRef:this.state.transactionRef,organizationId:this.options._sdkConfig.organizationId})}catch(e){console.error("[VoxePay] Failed to resend OTP:",e)}this.state.otpTimer=60,this.state.canResendOtp=!1,o&&(o.style.display="block"),r&&(r.disabled=!0);const i=null===(a=this.container)||void 0===a?void 0:a.querySelectorAll(".voxepay-otp-digit");null==i||i.forEach(e=>e.value=""),this.state.otp="",this.startOTPTimer(),null===(n=null==i?void 0:i[0])||void 0===n||n.focus()}handleBackToCard(){var e;if(this.state.otpTimerInterval&&clearInterval(this.state.otpTimerInterval),this.state.isOtpStep=!1,this.state.otp="",this.container){this.container.innerHTML=this.getModalHTML(),this.overlay=this.container.querySelector(".voxepay-overlay"),null===(e=this.overlay)||void 0===e||e.classList.add("voxepay-visible"),this.attachEventListeners();const t=this.container.querySelector("#voxepay-card-number"),a=this.container.querySelector("#voxepay-expiry"),n=this.container.querySelector("#voxepay-cvv"),o=this.container.querySelector("#voxepay-pin");t&&(t.value=s(this.state.cardNumber)),a&&(a.value=this.state.expiry),n&&(n.value=this.state.cvv),o&&(o.value=this.state.pin)}}attachEventListeners(){var e,t,a,n,o,r,i,s;const l=null===(e=this.container)||void 0===e?void 0:e.querySelector('[data-action="close"]');null==l||l.addEventListener("click",()=>this.close()),null===(t=this.overlay)||void 0===t||t.addEventListener("click",e=>{e.target===this.overlay&&this.close()}),document.addEventListener("keydown",this.handleEscape);const d=null===(a=this.container)||void 0===a?void 0:a.querySelectorAll(".voxepay-method-tab");if(null==d||d.forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.method;t&&t!==this.state.paymentMethod&&this.switchPaymentMethod(t)})}),"card"===this.state.paymentMethod){const e=null===(n=this.container)||void 0===n?void 0:n.querySelector("#voxepay-card-number");null==e||e.addEventListener("input",e=>this.handleCardInput(e)),null==e||e.addEventListener("blur",()=>this.validateField("cardNumber"));const t=null===(o=this.container)||void 0===o?void 0:o.querySelector("#voxepay-expiry");null==t||t.addEventListener("input",e=>this.handleExpiryInput(e)),null==t||t.addEventListener("blur",()=>this.validateField("expiry"));const a=null===(r=this.container)||void 0===r?void 0:r.querySelector("#voxepay-cvv");null==a||a.addEventListener("input",e=>this.handleCVVInput(e)),null==a||a.addEventListener("blur",()=>this.validateField("cvv"));const l=null===(i=this.container)||void 0===i?void 0:i.querySelector("#voxepay-pin");null==l||l.addEventListener("input",e=>this.handlePinInput(e)),null==l||l.addEventListener("blur",()=>this.validateField("pin"));const d=null===(s=this.container)||void 0===s?void 0:s.querySelector("#voxepay-payment-form");null==d||d.addEventListener("submit",e=>this.handleSubmit(e))}"bank_transfer"===this.state.paymentMethod&&(this.attachBankTransferListeners(),this.state.bankTransferDetails?this.startTransferTimer():this.loadBankTransferDetails())}attachBankTransferListeners(){var e,t;const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-copy-btn");null==a||a.addEventListener("click",()=>{const e=a.dataset.copy||"";this.copyToClipboard(e)});const n=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-transfer-confirm");null==n||n.addEventListener("click",()=>this.handleTransferConfirm())}switchPaymentMethod(e){var t;if(this.stopTransferTimer(),this.state.paymentMethod=e,this.container&&(this.container.innerHTML=this.getModalHTML(),this.overlay=this.container.querySelector(".voxepay-overlay"),null===(t=this.overlay)||void 0===t||t.classList.add("voxepay-visible"),this.attachEventListeners(),"card"===e&&this.state.cardNumber)){const e=this.container.querySelector("#voxepay-card-number"),t=this.container.querySelector("#voxepay-expiry"),a=this.container.querySelector("#voxepay-cvv"),n=this.container.querySelector("#voxepay-pin");e&&(e.value=s(this.state.cardNumber)),t&&(t.value=this.state.expiry),a&&(a.value=this.state.cvv),n&&(n.value=this.state.pin)}}async loadBankTransferDetails(){var e,t;try{let t;if(this.options.onBankTransferRequested)t=await this.options.onBankTransferRequested();else{if(!this.apiClient||!this.options._sdkConfig)throw{code:"SDK_ERROR",message:"SDK not properly initialized. Missing API key or organization ID."};{const e=`VP-${Date.now().toString(36).toUpperCase()}-${Math.random().toString(36).substring(2,8).toUpperCase()}`,a=await this.apiClient.initiatePayment({organizationId:this.options._sdkConfig.organizationId,transactionRef:e,customerId:this.options.customerEmail||"",customerEmail:this.options.customerEmail,customerPhone:this.options.customerPhone,amount:this.options.amount/100,currency:this.options.currency,paymentMethod:"BANK_TRANSFER",authData:btoa(JSON.stringify({source:"web",method:"bank_transfer"})),narration:this.options.description,durationMinutes:30});this.state.transactionRef=a.transactionRef||e,this.state.paymentId=a.paymentId||a.id||null;const n=a.virtualAccount;if(!n)throw{code:"MISSING_VIRTUAL_ACCOUNT",message:"No virtual account returned from server."};const o=new Date(n.expires_at),r=Date.now(),i=Math.max(0,Math.floor((o.getTime()-r)/1e3));t={accountNumber:n.account_number,bankName:n.bank_name,accountName:n.account_name,reference:this.state.transactionRef,expiresIn:i,expiresAt:n.expires_at}}}this.state.bankTransferDetails=t;const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(a){const e=p(this.options.amount,this.options.currency);a.innerHTML=this.getBankTransferHTML(e),this.attachBankTransferListeners(),this.startTransferTimer()}}catch(e){const a=(null==e?void 0:e.code)||"BANK_TRANSFER_INIT_FAILED",n=(null==e?void 0:e.message)||"Could not generate bank transfer details. Please try again.",o=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-form-container");if(o){o.innerHTML=`\n <div class="voxepay-transfer-view">\n <div style="text-align: center; padding: 40px 16px;">\n <div style="font-size: 2.5rem; margin-bottom: 16px;">⚠️</div>\n <h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; color: var(--voxepay-text);">${this.getDVAErrorTitle(a)}</h3>\n <p style="font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 24px;">${n}</p>\n <button class="voxepay-submit-btn" id="voxepay-retry-transfer"><span>Try Again</span></button>\n </div>\n </div>\n `;const e=o.querySelector("#voxepay-retry-transfer");null==e||e.addEventListener("click",()=>{o.innerHTML='\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-loading">\n <div class="voxepay-spinner"></div>\n <p style="margin-top: 16px; color: var(--voxepay-text-muted);">Generating account details...</p>\n </div>\n </div>\n ',this.loadBankTransferDetails()})}this.options.onError({code:a,message:n,recoverable:!0,details:null==e?void 0:e.data})}}getDVAErrorTitle(e){return{ACCOUNT_CREATION_FAILED:"Account Generation Failed",ACCOUNT_EXPIRED:"Account Expired",INVALID_AMOUNT:"Invalid Amount",UNAUTHORIZED:"Authentication Failed",ORGANIZATION_NOT_FOUND:"Configuration Error",MISSING_VIRTUAL_ACCOUNT:"Account Generation Failed",SDK_ERROR:"Configuration Error"}[e]||"Something Went Wrong"}async copyToClipboard(e){var t;try{await navigator.clipboard.writeText(e);const a=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-copy-btn");a&&(a.innerHTML=`${w}`,a.classList.add("voxepay-copied"),setTimeout(()=>{a.innerHTML=`${k}`,a.classList.remove("voxepay-copied")},2e3))}catch(t){const a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a)}}async handleTransferConfirm(){var e,t;const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-transfer-confirm");if(a&&(a.disabled=!0,a.innerHTML='<div class="voxepay-spinner"></div><span>Confirming transfer...</span>'),!this.apiClient||!this.state.transactionRef){this.stopTransferTimer();const e={id:this.state.paymentId||`pay_transfer_${Date.now()}`,status:"pending",amount:this.options.amount,currency:this.options.currency,timestamp:(new Date).toISOString(),reference:null===(t=this.state.bankTransferDetails)||void 0===t?void 0:t.reference,paymentMethod:"bank_transfer"};return this.state.isSuccess=!0,this.renderSuccessView(),void this.options.onSuccess(e)}this.renderPollingView(),this.startStatusPolling()}renderPollingView(){var e;const t=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-form-container");if(!t)return;const a=p(this.options.amount,this.options.currency);t.innerHTML=`\n <div class="voxepay-transfer-view">\n <div style="text-align: center; padding: 32px 16px;">\n <div class="voxepay-spinner" style="width: 40px; height: 40px; margin: 0 auto 20px; border-width: 3px;"></div>\n <h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; color: var(--voxepay-text);">Waiting for Payment</h3>\n <p style="font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 4px;">\n We're checking for your transfer of <strong>${a}</strong>\n </p>\n <p style="font-size: 0.813rem; color: var(--voxepay-text-subtle); margin-bottom: 24px;" id="voxepay-polling-status">\n This usually takes a few seconds...\n </p>\n <button class="voxepay-submit-btn" id="voxepay-cancel-polling" style="background: var(--voxepay-surface); border: 1px solid var(--voxepay-border); color: var(--voxepay-text-muted); box-shadow: none;">\n <span>Cancel</span>\n </button>\n </div>\n </div>\n `;const n=t.querySelector("#voxepay-cancel-polling");null==n||n.addEventListener("click",()=>{if(this.stopStatusPolling(),this.state.bankTransferDetails){const e=p(this.options.amount,this.options.currency);t.innerHTML=this.getBankTransferHTML(e),this.attachBankTransferListeners(),this.startTransferTimer()}})}startStatusPolling(){this.stopStatusPolling();const e=async()=>{var e;if(this.apiClient&&this.state.transactionRef)try{const e=await this.apiClient.getPaymentStatus(this.state.transactionRef);this.handlePollingStatusUpdate(e.status,e)}catch(t){console.error("[VoxePay] Status polling error:",t);const a=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-polling-status");a&&(a.textContent="Still checking... Please wait.")}};e(),this.statusPollingInterval=window.setInterval(e,5e3),this.statusPollingTimeout=window.setTimeout(()=>{this.stopStatusPolling(),this.handlePollingStatusUpdate("EXPIRED",null)},18e5)}stopStatusPolling(){this.statusPollingInterval&&(clearInterval(this.statusPollingInterval),this.statusPollingInterval=null),this.statusPollingTimeout&&(clearTimeout(this.statusPollingTimeout),this.statusPollingTimeout=null)}handlePollingStatusUpdate(e,t){var a;switch(["COMPLETED","FAILED","EXPIRED","CANCELLED"].includes(e)&&(this.stopStatusPolling(),this.stopTransferTimer()),e){case"COMPLETED":{const e={id:(null==t?void 0:t.id)||this.state.paymentId||`pay_transfer_${Date.now()}`,status:"success",amount:this.options.amount,currency:this.options.currency,timestamp:(null==t?void 0:t.completedAt)||(new Date).toISOString(),reference:this.state.transactionRef||void 0,paymentMethod:"bank_transfer",data:t||void 0};this.state.isSuccess=!0,this.renderSuccessView(),this.options.onSuccess(e);break}case"PAYMENT_RECEIVED":{const e=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-polling-status");e&&(e.textContent="Payment received! Processing...");break}case"PARTIAL_PAYMENT":this.stopStatusPolling(),this.renderTransferErrorView("Partial Payment Received","The amount transferred is less than the required amount. Please transfer the remaining balance or contact support.");break;case"OVERPAID":{const e={id:(null==t?void 0:t.id)||this.state.paymentId||`pay_transfer_${Date.now()}`,status:"success",amount:this.options.amount,currency:this.options.currency,timestamp:(null==t?void 0:t.completedAt)||(new Date).toISOString(),reference:this.state.transactionRef||void 0,paymentMethod:"bank_transfer",data:{...t,overpaid:!0}};this.state.isSuccess=!0,this.renderSuccessView(),this.options.onSuccess(e);break}case"EXPIRED":this.renderTransferErrorView("Payment Expired","The virtual account has expired. Please try again to generate a new account."),this.options.onError({code:"ACCOUNT_EXPIRED",message:"Virtual account expired before payment was received.",recoverable:!0});break;case"FAILED":this.renderTransferErrorView("Payment Failed",(null==t?void 0:t.message)||"The payment could not be processed. Please try again."),this.options.onError({code:"PAYMENT_FAILED",message:(null==t?void 0:t.message)||"Payment failed.",recoverable:!0});break;case"CANCELLED":this.renderTransferErrorView("Payment Cancelled","This payment has been cancelled."),this.options.onError({code:"PAYMENT_CANCELLED",message:"Payment was cancelled.",recoverable:!1})}}renderTransferErrorView(e,t){var a;const n=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-form-container");if(!n)return;n.innerHTML=`\n <div class="voxepay-transfer-view">\n <div style="text-align: center; padding: 40px 16px;">\n <div style="font-size: 2.5rem; margin-bottom: 16px;">❌</div>\n <h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; color: var(--voxepay-text);">${e}</h3>\n <p style="font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 24px;">${t}</p>\n <button class="voxepay-submit-btn" id="voxepay-retry-transfer"><span>Try Again</span></button>\n </div>\n </div>\n `;const o=n.querySelector("#voxepay-retry-transfer");null==o||o.addEventListener("click",()=>{this.state.bankTransferDetails=null,this.state.transactionRef=null,this.state.paymentId=null,n.innerHTML='\n <div class="voxepay-transfer-view">\n <div class="voxepay-transfer-loading">\n <div class="voxepay-spinner"></div>\n <p style="margin-top: 16px; color: var(--voxepay-text-muted);">Generating account details...</p>\n </div>\n </div>\n ',this.loadBankTransferDetails()})}startTransferTimer(){this.state.bankTransferDetails&&(this.state.transferTimer=this.state.bankTransferDetails.expiresIn,this.state.transferTimerInterval=window.setInterval(()=>{var e,t,a;this.state.transferTimer--;const n=null===(e=this.container)||void 0===e?void 0:e.querySelector("#voxepay-transfer-countdown");if(n&&(n.textContent=this.formatCountdown(this.state.transferTimer)),this.state.transferTimer<=0){this.stopTransferTimer();const e=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-transfer-timer");e&&(e.innerHTML=`${I} <span style="color: var(--voxepay-error);">Account expired. Please try again.</span>`);const n=null===(a=this.container)||void 0===a?void 0:a.querySelector("#voxepay-transfer-confirm");n&&(n.disabled=!0)}},1e3))}stopTransferTimer(){this.state.transferTimerInterval&&(clearInterval(this.state.transferTimerInterval),this.state.transferTimerInterval=null)}handleCardInput(e){var t;const n=e.target,o=s(n.value);n.value=o,this.state.cardNumber=o.replace(/\s/g,"");const r=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-card-brand"),i=a(this.state.cardNumber);r&&(r.textContent=i&&E[i.code]||"",r.style.opacity=i?"1":"0"),this.clearError("cardNumber")}handleExpiryInput(e){const t=e.target,a=l(t.value);t.value=a,this.state.expiry=a,this.clearError("expiry")}handleCVVInput(e){const t=e.target,a=d(t.value);t.value=a,this.state.cvv=a,this.clearError("cvv")}handlePinInput(e){const t=e.target,a=t.value.replace(/\D/g,"").slice(0,4);t.value=a,this.state.pin=a,this.clearError("pin")}validateField(e){let t;switch(e){case"cardNumber":t=o(this.state.cardNumber);break;case"expiry":t=r(this.state.expiry);break;case"cvv":t=i(this.state.cvv,this.state.cardNumber);break;case"pin":t=function(e){const t=e.replace(/\s/g,"");return t?/^\d{4}$/.test(t)?{valid:!0}:{valid:!1,error:"PIN must be 4 digits"}:{valid:!1,error:"PIN is required"}}(this.state.pin);break;default:return!0}return t.valid?(this.clearError(e),!0):(this.showError(e,t.error||"Invalid"),!1)}showError(e,t){var a,n;const o=null===(a=this.container)||void 0===a?void 0:a.querySelector(`#voxepay-${"cardNumber"===e?"card":e}-error`),r=null===(n=this.container)||void 0===n?void 0:n.querySelector(`#voxepay-${"cardNumber"===e?"card-number":e}`);o&&(o.innerHTML=`${T} ${t}`,o.style.display="flex"),null==r||r.classList.add("voxepay-error")}clearError(e){var t,a;const n=null===(t=this.container)||void 0===t?void 0:t.querySelector(`#voxepay-${"cardNumber"===e?"card":e}-error`),o=null===(a=this.container)||void 0===a?void 0:a.querySelector(`#voxepay-${"cardNumber"===e?"card-number":e}`);n&&(n.style.display="none"),null==o||o.classList.remove("voxepay-error")}async handleSubmit(e){e.preventDefault();const t=this.validateField("cardNumber"),a=this.validateField("expiry"),n=this.validateField("cvv"),o=this.validateField("pin");if(t&&a&&n&&o)if(this.apiClient&&this.options._sdkConfig){this.setProcessing(!0);try{const e=m(this.state.cardNumber),t=x(this.state.expiry),a={version:"1",pan:e,pin:this.state.pin,expiryDate:t,cvv:this.state.cvv};console.log("Before encryption:",a);const n=await h(a),o=`VP-${Date.now().toString(36).toUpperCase()}-${Math.random().toString(36).substring(2,8).toUpperCase()}`,r=await this.apiClient.initiatePayment({organizationId:this.options._sdkConfig.organizationId,transactionRef:o,customerId:this.options.customerEmail,customerEmail:this.options.customerEmail,customerPhone:this.options.customerPhone,amount:this.options.amount/100,currency:this.options.currency,paymentMethod:"CARD",authData:n,narration:this.options.description});this.state.paymentId=r.paymentId,this.state.transactionId=r.transactionId,this.state.transactionRef=r.transactionRef||o,this.state.eciFlag=r.eciFlag||null,this.setProcessing(!1),this.renderOTPView()}catch(e){this.setProcessing(!1);const t=(null==e?void 0:e.message)||"Payment failed. Please try again.";this.options.onError({code:(null==e?void 0:e.code)||"PAYMENT_INITIATE_FAILED",message:t,recoverable:!0,details:null==e?void 0:e.data}),this.showError("cardNumber",t)}}else this.showError("cardNumber","SDK not properly initialized. Missing API key or organization ID.")}setProcessing(e){var t;this.state.isProcessing=e;const a=null===(t=this.container)||void 0===t?void 0:t.querySelector("#voxepay-submit");a&&(a.disabled=e,a.innerHTML=e?'<div class="voxepay-spinner"></div><span>Processing...</span>':`<span>Pay Now ${p(this.options.amount,this.options.currency)}</span>`)}async processPayment(){return{id:this.state.paymentId||`pay_${Date.now()}`,status:"success",amount:this.options.amount,currency:this.options.currency,timestamp:(new Date).toISOString(),reference:this.state.transactionRef||void 0,paymentMethod:"card"}}getStyles(){return"\n :root {\n /* VoxePay Blue Color Palette */\n --voxepay-primary: #0061FF;\n --voxepay-primary-hover: #0056E0;\n --voxepay-secondary: #0047CC;\n --voxepay-accent: #60A5FA;\n --voxepay-glow: rgba(0, 97, 255, 0.35);\n --voxepay-success: #10B981;\n --voxepay-success-bg: rgba(16, 185, 129, 0.1);\n --voxepay-error: #EF4444;\n \n /* Dark Mode (Default) */\n --voxepay-bg: #0C0C1D;\n --voxepay-surface: rgba(255, 255, 255, 0.04);\n --voxepay-surface-hover: rgba(255, 255, 255, 0.08);\n --voxepay-border: rgba(255, 255, 255, 0.08);\n --voxepay-text: #FFFFFF;\n --voxepay-text-muted: #B4B4C7;\n --voxepay-text-subtle: #6B7280;\n --voxepay-input-bg: rgba(255, 255, 255, 0.06);\n \n /* Effects */\n --voxepay-backdrop-blur: blur(24px);\n --voxepay-border-radius: 12px;\n --voxepay-border-radius-lg: 16px;\n --voxepay-border-radius-xl: 24px;\n --voxepay-glow-shadow: 0 0 60px var(--voxepay-glow);\n --voxepay-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.6);\n --voxepay-transition-fast: 150ms ease;\n --voxepay-transition: 300ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n \n /* Light Mode */\n html.voxepay-light {\n --voxepay-primary: #0061FF;\n --voxepay-primary-hover: #0056E0;\n --voxepay-secondary: #0047CC;\n --voxepay-glow: rgba(0, 97, 255, 0.2);\n \n --voxepay-bg: #FFFFFF;\n --voxepay-surface: #F8FAFC;\n --voxepay-surface-hover: #F1F5F9;\n --voxepay-border: #E2E8F0;\n --voxepay-text: #0F172A;\n --voxepay-text-muted: #475569;\n --voxepay-text-subtle: #94A3B8;\n --voxepay-input-bg: #F8FAFC;\n \n --voxepay-glow-shadow: 0 0 40px rgba(0, 97, 255, 0.12);\n --voxepay-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);\n }\n \n .voxepay-checkout * { box-sizing: border-box; margin: 0; padding: 0; }\n .voxepay-checkout { font-family: 'DM Sans', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; font-size: 1rem; color: var(--voxepay-text); line-height: 1.5; -webkit-font-smoothing: antialiased; }\n \n .voxepay-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); backdrop-filter: var(--voxepay-backdrop-blur); -webkit-backdrop-filter: var(--voxepay-backdrop-blur); display: flex; align-items: center; justify-content: center; z-index: 999999; opacity: 0; visibility: hidden; transition: opacity var(--voxepay-transition), visibility var(--voxepay-transition); }\n html.voxepay-light .voxepay-overlay { background: rgba(15, 23, 42, 0.4); }\n .voxepay-overlay.voxepay-visible { opacity: 1; visibility: visible; }\n \n .voxepay-modal { background: var(--voxepay-bg); border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius-xl); width: 100%; max-width: 420px; max-height: 90vh; overflow: hidden; box-shadow: var(--voxepay-shadow), var(--voxepay-glow-shadow); transform: scale(0.95) translateY(20px); opacity: 0; transition: transform var(--voxepay-transition), opacity var(--voxepay-transition); }\n .voxepay-overlay.voxepay-visible .voxepay-modal { transform: scale(1) translateY(0); opacity: 1; }\n \n .voxepay-header { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px; border-bottom: 1px solid var(--voxepay-border); background: var(--voxepay-surface); }\n .voxepay-header-left { display: flex; align-items: center; gap: 12px; }\n .voxepay-logo { width: 36px; height: 36px; border-radius: var(--voxepay-border-radius); background: linear-gradient(135deg, var(--voxepay-primary), var(--voxepay-secondary)); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 1.25rem; color: white; box-shadow: 0 4px 12px rgba(0, 97, 255, 0.3); }\n .voxepay-amount { font-size: 1.25rem; font-weight: 600; }\n .voxepay-close { width: 36px; height: 36px; border: none; background: var(--voxepay-surface-hover); border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--voxepay-text-muted); transition: all var(--voxepay-transition-fast); }\n .voxepay-close:hover { background: var(--voxepay-border); color: var(--voxepay-text); transform: rotate(90deg); }\n .voxepay-close svg { width: 18px; height: 18px; }\n \n .voxepay-body { padding: 24px; background: var(--voxepay-bg); }\n .voxepay-form-group { margin-bottom: 20px; }\n .voxepay-label { display: flex; align-items: center; gap: 8px; font-size: 0.875rem; font-weight: 500; color: var(--voxepay-text-muted); margin-bottom: 8px; }\n .voxepay-label-icon { font-size: 1rem; }\n \n .voxepay-input { width: 100%; padding: 14px 16px; background: var(--voxepay-input-bg); border: 1.5px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); color: var(--voxepay-text); font-size: 1rem; font-family: inherit; outline: none; transition: border-color var(--voxepay-transition-fast), box-shadow var(--voxepay-transition-fast), background var(--voxepay-transition-fast); }\n .voxepay-input::placeholder { color: var(--voxepay-text-subtle); }\n .voxepay-input:hover { border-color: var(--voxepay-text-subtle); }\n .voxepay-input:focus { border-color: var(--voxepay-primary); box-shadow: 0 0 0 4px var(--voxepay-glow); background: var(--voxepay-bg); }\n .voxepay-input.voxepay-error { border-color: var(--voxepay-error); box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.15); }\n \n .voxepay-card-input-wrapper { position: relative; }\n .voxepay-card-brand { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); padding: 4px 8px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--voxepay-primary), var(--voxepay-secondary)); border-radius: 6px; font-size: 0.7rem; font-weight: 700; color: white; opacity: 0; transition: opacity var(--voxepay-transition-fast); letter-spacing: 0.5px; }\n .voxepay-card-input-wrapper .voxepay-input { padding-right: 70px; }\n \n .voxepay-row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }\n \n .voxepay-error-message { display: flex; align-items: center; gap: 6px; font-size: 0.813rem; color: var(--voxepay-error); margin-top: 8px; animation: voxepay-shake 0.4s ease; }\n .voxepay-error-message svg { width: 16px; height: 16px; flex-shrink: 0; }\n @keyframes voxepay-shake { 0%, 100% { transform: translateX(0); } 20%, 60% { transform: translateX(-4px); } 40%, 80% { transform: translateX(4px); } }\n \n .voxepay-submit-btn { width: 100%; padding: 16px 24px; background: linear-gradient(135deg, var(--voxepay-primary), var(--voxepay-secondary)); border: none; border-radius: var(--voxepay-border-radius); color: white; font-size: 1.063rem; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 10px; transition: all var(--voxepay-transition-fast); position: relative; overflow: hidden; box-shadow: 0 4px 15px rgba(0, 97, 255, 0.35); }\n .voxepay-submit-btn:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 97, 255, 0.45); }\n .voxepay-submit-btn:active:not(:disabled) { transform: translateY(0); }\n .voxepay-submit-btn:disabled { opacity: 0.6; cursor: not-allowed; box-shadow: none; }\n .voxepay-submit-btn span { position: relative; z-index: 1; }\n \n .voxepay-spinner { width: 20px; height: 20px; border: 2.5px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: voxepay-spin 0.8s linear infinite; }\n @keyframes voxepay-spin { to { transform: rotate(360deg); } }\n \n .voxepay-footer { text-align: center; padding: 16px 24px 20px; border-top: 1px solid var(--voxepay-border); background: var(--voxepay-surface); }\n .voxepay-powered-by { font-size: 0.75rem; color: var(--voxepay-text-subtle); display: flex; align-items: center; justify-content: center; gap: 6px; }\n .voxepay-powered-by svg { width: 14px; height: 14px; color: var(--voxepay-primary); }\n .voxepay-powered-by strong { color: var(--voxepay-primary); font-weight: 600; }\n \n .voxepay-success-view { text-align: center; padding: 40px 24px; }\n .voxepay-success-icon { width: 80px; height: 80px; margin: 0 auto 24px; background: linear-gradient(135deg, var(--voxepay-success), #059669); border-radius: 50%; display: flex; align-items: center; justify-content: center; animation: voxepay-success-pop 0.5s ease; box-shadow: 0 8px 25px rgba(16, 185, 129, 0.35); }\n @keyframes voxepay-success-pop { 0% { transform: scale(0); opacity: 0; } 50% { transform: scale(1.1); } 100% { transform: scale(1); opacity: 1; } }\n .voxepay-success-icon svg { width: 40px; height: 40px; color: white; }\n .voxepay-success-title { font-size: 1.5rem; font-weight: 700; margin-bottom: 8px; color: var(--voxepay-text); }\n .voxepay-success-message { font-size: 1rem; color: var(--voxepay-text-muted); margin-bottom: 24px; }\n .voxepay-success-btn { padding: 12px 32px; background: var(--voxepay-surface); border: 1.5px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); color: var(--voxepay-text); font-size: 1rem; font-weight: 500; cursor: pointer; transition: all var(--voxepay-transition-fast); }\n .voxepay-success-btn:hover { background: var(--voxepay-surface-hover); border-color: var(--voxepay-primary); color: var(--voxepay-primary); }\n \n /* OTP View */\n .voxepay-otp-view { text-align: center; padding: 24px 16px; }\n .voxepay-otp-header { margin-bottom: 24px; }\n .voxepay-otp-icon { font-size: 3rem; margin-bottom: 12px; }\n .voxepay-otp-title { font-size: 1.25rem; font-weight: 700; color: var(--voxepay-text); margin-bottom: 8px; }\n .voxepay-otp-subtitle { font-size: 0.875rem; color: var(--voxepay-text-muted); }\n \n .voxepay-otp-inputs-container { margin-bottom: 16px; }\n .voxepay-otp-inputs { display: flex; justify-content: center; gap: 8px; margin-bottom: 8px; }\n .voxepay-otp-digit { width: 48px; height: 56px; text-align: center; font-size: 1.5rem; font-weight: 700; border: 2px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); background: var(--voxepay-input-bg); color: var(--voxepay-text); outline: none; transition: all var(--voxepay-transition-fast); }\n .voxepay-otp-digit:focus { border-color: var(--voxepay-primary); box-shadow: 0 0 0 4px var(--voxepay-glow); }\n \n .voxepay-otp-timer { font-size: 0.875rem; color: var(--voxepay-text-muted); margin-bottom: 12px; }\n .voxepay-otp-timer span { font-weight: 700; color: var(--voxepay-primary); }\n \n .voxepay-resend-btn { padding: 8px 16px; background: transparent; border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); color: var(--voxepay-text-muted); font-size: 0.875rem; cursor: pointer; margin-bottom: 16px; transition: all var(--voxepay-transition-fast); }\n .voxepay-resend-btn:hover:not(:disabled) { border-color: var(--voxepay-primary); color: var(--voxepay-primary); }\n .voxepay-resend-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n \n .voxepay-back-btn { display: block; width: 100%; padding: 12px; background: transparent; border: none; color: var(--voxepay-text-muted); font-size: 0.875rem; cursor: pointer; margin-top: 12px; transition: color var(--voxepay-transition-fast); }\n .voxepay-back-btn:hover { color: var(--voxepay-primary); }\n\n /* Payment Method Tabs */\n .voxepay-method-tabs { display: flex; border-bottom: 1px solid var(--voxepay-border); background: var(--voxepay-surface); }\n .voxepay-method-tab { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 12px 12px; border: none; background: transparent; color: var(--voxepay-text-muted); font-size: 0.813rem; font-weight: 500; font-family: inherit; cursor: pointer; transition: all var(--voxepay-transition-fast); border-bottom: 2px solid transparent; white-space: nowrap; }\n .voxepay-method-tab svg { width: 16px; height: 16px; flex-shrink: 0; }\n .voxepay-method-tab:hover { color: var(--voxepay-text); background: var(--voxepay-surface-hover); }\n .voxepay-method-tab.active { color: var(--voxepay-primary); border-bottom-color: var(--voxepay-primary); background: var(--voxepay-bg); }\n\n /* Bank Transfer View */\n .voxepay-transfer-view { padding: 4px 0; }\n .voxepay-transfer-loading { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px 0; }\n .voxepay-transfer-instruction { text-align: center; margin-bottom: 20px; font-size: 0.938rem; color: var(--voxepay-text-muted); }\n .voxepay-transfer-instruction strong { color: var(--voxepay-text); font-size: 1.063rem; }\n .voxepay-transfer-details { background: var(--voxepay-surface); border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); overflow: hidden; margin-bottom: 16px; }\n .voxepay-transfer-detail { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--voxepay-border); }\n .voxepay-transfer-detail:last-child { border-bottom: none; }\n .voxepay-transfer-label { font-size: 0.813rem; color: var(--voxepay-text-muted); font-weight: 500; }\n .voxepay-transfer-value { font-size: 0.938rem; font-weight: 600; color: var(--voxepay-text); }\n .voxepay-transfer-value-row { display: flex; align-items: center; gap: 8px; }\n .voxepay-transfer-account { font-size: 1.125rem; font-weight: 700; color: var(--voxepay-primary); letter-spacing: 1.5px; font-family: 'DM Sans', monospace; }\n .voxepay-transfer-amount { color: var(--voxepay-primary); }\n\n /* Copy Button */\n .voxepay-copy-btn { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: 1px solid var(--voxepay-border); border-radius: 8px; background: var(--voxepay-surface-hover); color: var(--voxepay-text-muted); cursor: pointer; transition: all var(--voxepay-transition-fast); flex-shrink: 0; }\n .voxepay-copy-btn svg { width: 16px; height: 16px; }\n .voxepay-copy-btn:hover { border-color: var(--voxepay-primary); color: var(--voxepay-primary); background: rgba(0, 97, 255, 0.1); }\n .voxepay-copy-btn.voxepay-copied { border-color: var(--voxepay-success); color: var(--voxepay-success); background: var(--voxepay-success-bg); }\n\n /* Transfer Timer */\n .voxepay-transfer-timer { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 16px; background: var(--voxepay-surface); border: 1px solid var(--voxepay-border); border-radius: var(--voxepay-border-radius); margin-bottom: 16px; font-size: 0.875rem; color: var(--voxepay-text-muted); }\n .voxepay-transfer-timer svg { width: 16px; height: 16px; color: var(--voxepay-primary); flex-shrink: 0; }\n .voxepay-transfer-timer strong { color: var(--voxepay-primary); font-weight: 700; font-family: monospace; font-size: 0.938rem; }\n \n @media (max-width: 480px) { .voxepay-modal { max-width: 100%; max-height: 100%; border-radius: 0; height: 100%; } .voxepay-body { padding: 20px; } .voxepay-otp-digit { width: 42px; height: 50px; font-size: 1.25rem; } .voxepay-transfer-detail { flex-direction: column; align-items: flex-start; gap: 4px; } }\n "}}class M{constructor(){this.config=null,this.currentModal=null,this.initialized=!1}init(e){e.apiKey?e.organizationId?(this.config={theme:"dark",locale:"en-US",...e},this.initialized=!0,"auto"===e.theme?this.applyAutoTheme():"light"===e.theme&&document.documentElement.classList.add("voxepay-light"),e.customStyles&&this.applyCustomStyles(e.customStyles),console.log("[VoxePay] Initialized successfully")):console.error("[VoxePay] Organization ID is required. Find it in your VoxePay dashboard."):console.error("[VoxePay] API key is required. Get your API key from the VoxePay dashboard: Settings > API Keys")}checkout(e){return this.initialized?!e.amount||e.amount<=0?(console.error("[VoxePay] Invalid amount"),void e.onError({code:"INVALID_AMOUNT",message:"Payment amount must be greater than 0",recoverable:!1})):e.currency?(this.closeModal(),this.currentModal=new C({...e,_sdkConfig:{apiKey:this.config.apiKey,organizationId:this.config.organizationId,baseUrl:this.config.baseUrl},onClose:()=>{var t;this.currentModal=null,null===(t=e.onClose)||void 0===t||t.call(e)}}),void this.currentModal.open()):(console.error("[VoxePay] Currency is required"),void e.onError({code:"INVALID_CURRENCY",message:"Currency code is required",recoverable:!1})):(console.error("[VoxePay] Not initialized. Call VoxePay.init() first."),void e.onError({code:"NOT_INITIALIZED",message:"VoxePay SDK not initialized. Call VoxePay.init() first.",recoverable:!1}))}closeModal(){this.currentModal&&(this.currentModal.close(),this.currentModal=null)}setTheme(e){document.documentElement.classList.remove("voxepay-light"),"light"===e?document.documentElement.classList.add("voxepay-light"):"auto"===e&&this.applyAutoTheme(),this.config&&(this.config.theme=e)}applyAutoTheme(){window.matchMedia("(prefers-color-scheme: dark)").matches||document.documentElement.classList.add("voxepay-light"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{var t;"auto"===(null===(t=this.config)||void 0===t?void 0:t.theme)&&document.documentElement.classList.toggle("voxepay-light",!e.matches)})}applyCustomStyles(e){const t=document.documentElement;for(const[a,n]of Object.entries(e))n&&t.style.setProperty(a,n)}get version(){return"0.3.0"}get isInitialized(){return this.initialized}}const L=new M;return"undefined"!=typeof window&&(window.VoxePay=L),e.VoxePay=L,e.VoxePaySDK=M,e.cleanPan=m,e.default=L,e.detectCardBrand=a,e.formatAmount=p,e.formatCVV=d,e.formatCardNumber=s,e.formatExpiry=l,e.formatExpiryForApi=x,e.generateAuthData=h,e.getCurrencySymbol=function(e){return{NGN:"₦",USD:"$",EUR:"€",GBP:"£",GHS:"₵",KES:"KSh",ZAR:"R"}[e.toUpperCase()]||e},e.luhnCheck=n,e.validateCVV=i,e.validateCardNumber=o,e.validateExpiry=r,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
2
2
  //# sourceMappingURL=voxepay-checkout.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voxepay-checkout.min.js","sources":["../src/utils/card-validator.ts","../src/utils/formatter.ts","../src/utils/encryption.ts","../src/api/client.ts","../src/components/modal.ts","../src/voxepay.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["CARD_BRANDS","name","code","pattern","lengths","cvvLength","detectCardBrand","cardNumber","cleaned","replace","brand","test","luhnCheck","sum","isEven","i","length","digit","parseInt","validateCardNumber","valid","error","includes","validateExpiry","expiry","match","month","year","now","Date","currentYear","getFullYear","currentMonth","getMonth","validateCVV","cvv","expectedLength","formatCardNumber","value","join","slice","formatExpiry","formatCVV","formatAmount","amount","currency","Intl","NumberFormat","style","minimumFractionDigits","format","hexToBytes","hex","bytes","push","substring","RSABigInt","constructor","this","data","sign","fromHex","n","bitPos","current","BITS","BASE","trim","fromBytes","map","b","toString","padStart","pop","isZero","bitLength","topWord","bits","w","toBytes","h","padLen","Math","ceil","Array","fill","concat","clone","r","compareAbs","other","multiply","result","carry","j","prod","floor","modPow","exp","mod","Error","base","expBits","wordIdx","bitIdx","m","divmod","remainder","divisor","quotient","cmp","shiftLeft","subtract","qWordIdx","qBitIdx","wordShift","bitShift","max","borrow","diff","RSA_CONFIG","generateAuthData","async","version","pan","pin","expiryDate","messageBytes","str","charCodeAt","toHex","modulus","exponent","keyByteLen","padded","crypto","getRandomValues","arr","Uint8Array","random","pkcs1Pad","encryptedBytes","btoa","String","fromCharCode","Buffer","from","console","formatExpiryForApi","cleanPan","VoxePayApiClient","apiKey","baseUrl","request","endpoint","body","url","response","fetch","method","headers","Accept","JSON","stringify","json","ok","errorMessage","message","status","errorCode","get","initiatePayment","validateOTP","resendOTP","getPaymentStatus","transactionRef","encodeURIComponent","ICONS","CARD_BRAND_DISPLAY","visa","mastercard","amex","verve","discover","VoxePayModal","options","container","overlay","apiClient","statusPollingInterval","statusPollingTimeout","handleEscape","e","key","close","document","removeEventListener","methods","paymentMethods","_sdkConfig","state","otp","errors","isProcessing","isSuccess","isOtpStep","otpTimer","canResendOtp","otpTimerInterval","paymentMethod","transferTimer","transferTimerInterval","bankTransferDetails","paymentId","transactionId","eciFlag","open","injectStyles","render","attachEventListeners","requestAnimationFrame","_a","classList","add","stopTransferTimer","stopStatusPolling","remove","setTimeout","_c","onClose","getElementById","createElement","id","textContent","getStyles","head","appendChild","className","innerHTML","getModalHTML","querySelector","getPaymentMethods","formattedAmount","showTabs","isCard","description","getCardFormHTML","getBankTransferHTML","details","accountNumber","bankName","accountName","reference","formatCountdown","expiresIn","seconds","s","renderSuccessView","formContainer","closeBtn","addEventListener","renderOTPView","maskedPhone","customerEmail","attachOTPEventListeners","startOTPTimer","otpInputs","querySelectorAll","forEach","input","index","handleOTPInput","handleOTPKeydown","handleOTPPaste","verifyBtn","_b","handleOTPSubmit","resendBtn","handleResendOTP","backBtn","_d","handleBackToCard","_e","focus","target","nextInput","updateOTPState","clearError","prevInput","preventDefault","pastedData","clipboardData","getData","inputs","split","timerEl","timerContainer","window","setInterval","clearInterval","display","disabled","setOTPProcessing","verifyOTP","processPayment","onSuccess","paymentError","showError","recoverable","undefined","organizationId","cardInput","expiryInput","cvvInput","pinInput","tabs","tab","dataset","switchPaymentMethod","handleCardInput","validateField","handleExpiryInput","_f","handleCVVInput","_g","handlePinInput","form","_h","handleSubmit","attachBankTransferListeners","startTransferTimer","loadBankTransferDetails","copyBtn","accountNum","copy","copyToClipboard","confirmBtn","handleTransferConfirm","onBankTransferRequested","toUpperCase","customerId","customerPhone","authData","source","narration","durationMinutes","va","virtualAccount","expiresAtDate","expires_at","nowMs","expiresInSeconds","getTime","account_number","bank_name","account_name","expiresAt","getDVAErrorTitle","retryBtn","onError","ACCOUNT_CREATION_FAILED","ACCOUNT_EXPIRED","INVALID_AMOUNT","UNAUTHORIZED","ORGANIZATION_NOT_FOUND","MISSING_VIRTUAL_ACCOUNT","SDK_ERROR","text","navigator","clipboard","writeText","textarea","position","opacity","select","execCommand","removeChild","timestamp","toISOString","renderPollingView","startStatusPolling","cancelBtn","amt","poll","statusData","handlePollingStatusUpdate","statusEl","clearTimeout","completedAt","renderTransferErrorView","overpaid","title","countdownEl","formatted","brandEl","field","validatePIN","errorEl","inputEl","isCardValid","isExpiryValid","isCVVValid","isPinValid","setProcessing","payload","log","submitBtn","VoxePaySDK","config","currentModal","initialized","init","theme","locale","applyAutoTheme","documentElement","customStyles","applyCustomStyles","checkout","closeModal","call","setTheme","matchMedia","matches","toggle","styles","root","Object","entries","setProperty","isInitialized","VoxePay","NGN","USD","EUR","GBP","GHS","KES","ZAR"],"mappings":"qCAYO,MAAMA,EAA2B,CACpC,CACIC,KAAM,OACNC,KAAM,OACNC,QAAS,KACTC,QAAS,CAAC,GAAI,GAAI,IAClBC,UAAW,GAEf,CACIJ,KAAM,aACNC,KAAM,aACNC,QAAS,mBACTC,QAAS,CAAC,IACVC,UAAW,GAEf,CACIJ,KAAM,QACNC,KAAM,QACNC,QAAS,4BACTC,QAAS,CAAC,GAAI,GAAI,IAClBC,UAAW,GAEf,CACIJ,KAAM,mBACNC,KAAM,OACNC,QAAS,SACTC,QAAS,CAAC,IACVC,UAAW,GAEf,CACIJ,KAAM,WACNC,KAAM,WACNC,QAAS,qBACTC,QAAS,CAAC,GAAI,IACdC,UAAW,IAOb,SAAUC,EAAgBC,GAC5B,MAAMC,EAAUD,EAAWE,QAAQ,MAAO,IAC1C,IAAK,MAAMC,KAASV,EAChB,GAAIU,EAAMP,QAAQQ,KAAKH,GACnB,OAAOE,EAGf,OAAO,IACX,CAKM,SAAUE,EAAUL,GACtB,MAAMC,EAAUD,EAAWE,QAAQ,MAAO,IAC1C,IAAK,QAAQE,KAAKH,GAAU,OAAO,EAEnC,IAAIK,EAAM,EACNC,GAAS,EAEb,IAAK,IAAIC,EAAIP,EAAQQ,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC1C,IAAIE,EAAQC,SAASV,EAAQO,GAAI,IAE7BD,IACAG,GAAS,EACLA,EAAQ,IACRA,GAAS,IAIjBJ,GAAOI,EACPH,GAAUA,CACd,CAEA,OAAOD,EAAM,IAAO,CACxB,CAKM,SAAUM,EAAmBZ,GAC/B,MAAMC,EAAUD,EAAWE,QAAQ,MAAO,IAE1C,IAAKD,EACD,MAAO,CAAEY,OAAO,EAAOC,MAAO,2BAGlC,IAAK,QAAQV,KAAKH,GACd,MAAO,CAAEY,OAAO,EAAOC,MAAO,uBAGlC,MAAMX,EAAQJ,EAAgBE,GAE9B,OAAKE,EAIAA,EAAMN,QAAQkB,SAASd,EAAQQ,QAI/BJ,EAAUJ,GAIR,CAAEY,OAAO,GAHL,CAAEA,OAAO,EAAOC,MAAO,uBAJvB,CAAED,OAAO,EAAOC,MAAO,8BAJvB,CAAED,OAAO,EAAOC,MAAO,wBAYtC,CAKM,SAAUE,EAAeC,GAC3B,MAAMhB,EAAUgB,EAAOf,QAAQ,MAAO,IAEtC,IAAKD,EACD,MAAO,CAAEY,OAAO,EAAOC,MAAO,2BAGlC,MAAMI,EAAQjB,EAAQiB,MAAM,sBAC5B,IAAKA,EACD,MAAO,CAAEL,OAAO,EAAOC,MAAO,0BAGlC,MAAMK,EAAQR,SAASO,EAAM,GAAI,IAC3BE,EAAOT,SAASO,EAAM,GAAI,IAAM,IAEtC,GAAIC,EAAQ,GAAKA,EAAQ,GACrB,MAAO,CAAEN,OAAO,EAAOC,MAAO,iBAGlC,MAAMO,EAAM,IAAIC,KACVC,EAAcF,EAAIG,cAClBC,EAAeJ,EAAIK,WAAa,EAEtC,OAAIN,EAAOG,GAAgBH,IAASG,GAAeJ,EAAQM,EAChD,CAAEZ,OAAO,EAAOC,MAAO,oBAG9BM,EAAOG,EAAc,GACd,CAAEV,OAAO,EAAOC,MAAO,uBAG3B,CAAED,OAAO,EACpB,CAKM,SAAUc,EAAYC,EAAa5B,GACrC,MAAMC,EAAU2B,EAAI1B,QAAQ,MAAO,IAEnC,IAAKD,EACD,MAAO,CAAEY,OAAO,EAAOC,MAAO,mBAGlC,IAAK,QAAQV,KAAKH,GACd,MAAO,CAAEY,OAAO,EAAOC,MAAO,eAGlC,MAAMX,EAAQH,EAAaD,EAAgBC,GAAc,KACnD6B,GAAiB1B,aAAK,EAALA,EAAOL,YAAa,EAE3C,OAAIG,EAAQQ,SAAWoB,GAAqC,IAAnB5B,EAAQQ,QAAmC,IAAnBR,EAAQQ,OAC9D,CAAEI,OAAO,EAAOC,MAAO,eAAee,YAG1C,CAAEhB,OAAO,EACpB,CC7KM,SAAUiB,EAAiBC,GAG7B,OAFgBA,EAAM7B,QAAQ,MAAO,IACdgB,MAAM,YAAc,IAC7Bc,KAAK,KAAKC,MAAM,EAAG,GACrC,CAKM,SAAUC,EAAaH,GACzB,MAAM9B,EAAU8B,EAAM7B,QAAQ,MAAO,IAErC,GAAuB,IAAnBD,EAAQQ,OAAc,MAAO,GACjC,GAAuB,IAAnBR,EAAQQ,OACR,OAAOE,SAASV,GAAW,EAAI,IAAIA,IAAYA,EAEnD,GAAuB,IAAnBA,EAAQQ,OAAc,CACtB,MAAMU,EAAQR,SAASV,GACvB,OAAIkB,EAAQ,GAAW,KACT,IAAVA,EAAoB,KACjBlB,CACX,CAIA,MAAO,GAFOA,EAAQgC,MAAM,EAAG,MAClBhC,EAAQgC,MAAM,EAAG,IAElC,CAKM,SAAUE,EAAUJ,GACtB,OAAOA,EAAM7B,QAAQ,MAAO,IAAI+B,MAAM,EAAG,EAC7C,CAKM,SAAUG,EAAaC,EAAgBC,GAQzC,OAPkB,IAAIC,KAAKC,aAAa,QAAS,CAC7CC,MAAO,WACPH,SAAUA,EACVI,sBAAuB,IAIVC,OAAON,EAAS,IACrC,CCSA,MAWMO,EAAcC,IAChB,MAAMC,EAAkB,GACxB,IAAK,IAAItC,EAAI,EAAGA,EAAIqC,EAAIpC,OAAQD,GAAK,EACjCsC,EAAMC,KAAKpC,SAASkC,EAAIG,UAAUxC,EAAGA,EAAI,GAAI,KAEjD,OAAOsC,GAoBX,MAAMG,EAOF,WAAAC,GACIC,KAAKC,KAAO,GACZD,KAAKE,KAAO,CAChB,CAEA,cAAOC,CAAQT,GACX,MAAMU,EAAI,IAAIN,EACd,GAAmB,IAAfJ,EAAIpC,OAAc,OAAO8C,EAE7BA,EAAEF,KAAO,EAIT,IAAIG,EAAS,EACTC,EAAU,EAEd,IAAK,IAAIjD,EAAIqC,EAAIpC,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAEtCiD,GADe9C,SAASkC,EAAIrC,GAAI,KACXgD,EACrBA,GAAU,EACNA,GAAUP,EAAUS,OACpBH,EAAEH,KAAKL,KAAKU,EAAWR,EAAUU,KAAO,GACxCF,KAAsBR,EAAUS,KAChCF,GAAUP,EAAUS,KAE5B,CAMA,OALID,EAAU,GAAKD,EAAS,IACxBD,EAAEH,KAAKL,KAAKU,GAGhBF,EAAEK,OACKL,CACX,CAEA,gBAAOM,CAAUf,GACb,MAAMD,EAAMC,EAAMgB,IAAIC,GAAKA,EAAEC,SAAS,IAAIC,SAAS,EAAG,MAAMjC,KAAK,IACjE,OAAOiB,EAAUK,QAAQT,EAC7B,CAEA,IAAAe,GACI,KAAOT,KAAKC,KAAK3C,OAAS,GAAyC,IAApC0C,KAAKC,KAAKD,KAAKC,KAAK3C,OAAS,IACxD0C,KAAKC,KAAKc,MAEW,IAArBf,KAAKC,KAAK3C,SAAc0C,KAAKE,KAAO,EAC5C,CAEA,MAAAc,GACI,OAA4B,IAArBhB,KAAKC,KAAK3C,MACrB,CAEA,SAAA2D,GACI,GAAyB,IAArBjB,KAAKC,KAAK3C,OAAc,OAAO,EACnC,MAAM4D,EAAUlB,KAAKC,KAAKD,KAAKC,KAAK3C,OAAS,GAC7C,IAAI6D,GAAQnB,KAAKC,KAAK3C,OAAS,GAAKwC,EAAUS,KAC1Ca,EAAIF,EACR,KAAOE,EAAI,GACPD,IACAC,KAAO,EAEX,OAAOD,CACX,CAEA,OAAAE,CAAQ/D,GAEJ,IAAIoC,EAAM,GACV,IAAK,IAAIrC,EAAI2C,KAAKC,KAAK3C,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC5C,MAAMiE,EAAItB,KAAKC,KAAK5C,GAAGwD,SAAS,IAChC,GAAIxD,IAAM2C,KAAKC,KAAK3C,OAAS,EACzBoC,GAAO4B,MACJ,CAEH,MAAMC,EAASC,KAAKC,KAAK3B,EAAUS,KAAO,GAC1Cb,GAAO4B,EAAER,SAASS,EAAQ,IAC9B,CACJ,CAEI7B,EAAIpC,OAAS,GAAM,IAAGoC,EAAM,IAAMA,GAEtC,MAAMC,EAAQF,EAAWC,GAEzB,GAAIpC,GAAUqC,EAAMrC,OAASA,EAAQ,CAGjC,OADe,IAAIoE,MAAMpE,EAASqC,EAAMrC,QAAQqE,KAAK,GACvCC,OAAOjC,EACzB,CACA,OAAOA,CACX,CAEA,KAAAkC,GACI,MAAMC,EAAI,IAAIhC,EAGd,OAFAgC,EAAE7B,KAAOD,KAAKC,KAAKnB,QACnBgD,EAAE5B,KAAOF,KAAKE,KACP4B,CACX,CAKA,UAAAC,CAAWC,GACP,GAAIhC,KAAKC,KAAK3C,SAAW0E,EAAM/B,KAAK3C,OAChC,OAAO0C,KAAKC,KAAK3C,OAAS0E,EAAM/B,KAAK3C,OAAS,GAAI,EAEtD,IAAK,IAAID,EAAI2C,KAAKC,KAAK3C,OAAS,EAAGD,GAAK,EAAGA,IACvC,GAAI2C,KAAKC,KAAK5C,KAAO2E,EAAM/B,KAAK5C,GAC5B,OAAO2C,KAAKC,KAAK5C,GAAK2E,EAAM/B,KAAK5C,GAAK,GAAI,EAGlD,OAAO,CACX,CAKA,QAAA4E,CAASD,GACL,GAAIhC,KAAKgB,UAAYgB,EAAMhB,SAAU,OAAO,IAAIlB,EAEhD,MAAMoC,EAAS,IAAIpC,EACnBoC,EAAOjC,KAAO,IAAIyB,MAAM1B,KAAKC,KAAK3C,OAAS0E,EAAM/B,KAAK3C,QAAQqE,KAAK,GACnEO,EAAOhC,KAAO,EAEd,IAAK,IAAI7C,EAAI,EAAGA,EAAI2C,KAAKC,KAAK3C,OAAQD,IAAK,CACvC,IAAI8E,EAAQ,EACZ,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAM/B,KAAK3C,OAAQ8E,IAAK,CACxC,MAAMC,EAAOrC,KAAKC,KAAK5C,GAAK2E,EAAM/B,KAAKmC,GAAKF,EAAOjC,KAAK5C,EAAI+E,GAAKD,EACjED,EAAOjC,KAAK5C,EAAI+E,GAAKC,EAAQvC,EAAUU,KAAO,EAC9C2B,EAAQX,KAAKc,MAAMD,EAAOvC,EAAUU,KACxC,CACI2B,EAAQ,IACRD,EAAOjC,KAAK5C,EAAI2E,EAAM/B,KAAK3C,SAAW6E,EAE9C,CAGA,OADAD,EAAOzB,OACAyB,CACX,CAMA,MAAAK,CAAOC,EAAgBC,GACnB,GAAIA,EAAIzB,SAAU,MAAM,IAAI0B,MAAM,oBAElC,IAAIR,EAASpC,EAAUK,QAAQ,KAC3BwC,EAAO3C,KAAKyC,IAAIA,GACpB,MAAMG,EAAUJ,EAAIvB,YAEpB,IAAK,IAAI5D,EAAI,EAAGA,EAAIuF,EAASvF,IAAK,CAC9B,MAAMwF,EAAUrB,KAAKc,MAAMjF,EAAIyC,EAAUS,MACnCuC,EAASzF,EAAIyC,EAAUS,KAEzBsC,EAAUL,EAAIvC,KAAK3C,QAAWkF,EAAIvC,KAAK4C,GAAY,GAAKC,IACxDZ,EAASA,EAAOD,SAASU,GAAMF,IAAIA,IAEvCE,EAAOA,EAAKV,SAASU,GAAMF,IAAIA,EACnC,CAEA,OAAOP,CACX,CAKA,GAAAO,CAAIM,GAEA,OADe/C,KAAKgD,OAAOD,GACbE,SAClB,CAKA,MAAAD,CAAOE,GACH,GAAIA,EAAQlC,SAAU,MAAM,IAAI0B,MAAM,oBACtC,GAAI1C,KAAKgB,SAAU,MAAO,CAAEmC,SAAU,IAAIrD,EAAamD,UAAW,IAAInD,GAEtE,MAAMsD,EAAMpD,KAAK+B,WAAWmB,GAC5B,GAAIE,EAAM,EAAG,MAAO,CAAED,SAAU,IAAIrD,EAAamD,UAAWjD,KAAK6B,SACjE,GAAY,IAARuB,EAAW,CAEX,MAAO,CAAED,SADGrD,EAAUK,QAAQ,KACN8C,UAAW,IAAInD,EAC3C,CAGA,MAAMqD,EAAW,IAAIrD,EACrBqD,EAASlD,KAAO,IAAIyB,MAAM1B,KAAKC,KAAK3C,QAAQqE,KAAK,GACjDwB,EAASjD,KAAO,EAEhB,IAAI+C,EAAY,IAAInD,EAIpB,IAAK,IAAIzC,EAFS2C,KAAKiB,YAEE,EAAG5D,GAAK,EAAGA,IAAK,CAErC4F,EAAYA,EAAUI,UAAU,GAGhC,MAAMR,EAAUrB,KAAKc,MAAMjF,EAAIyC,EAAUS,MACnCuC,EAASzF,EAAIyC,EAAUS,KAQ7B,GAPIsC,EAAU7C,KAAKC,KAAK3C,QAAW0C,KAAKC,KAAK4C,GAAY,GAAKC,IAC5B,IAA1BG,EAAUhD,KAAK3C,QAAc2F,EAAUhD,KAAKL,KAAK,GACrDqD,EAAUhD,KAAK,IAAM,EACrBgD,EAAU/C,KAAO,GAIjB+C,EAAUlB,WAAWmB,IAAY,EAAG,CACpCD,EAAYA,EAAUK,SAASJ,GAC/B,MAAMK,EAAW/B,KAAKc,MAAMjF,EAAIyC,EAAUS,MACpCiD,EAAUnG,EAAIyC,EAAUS,KAC9B,KAAO4C,EAASlD,KAAK3C,QAAUiG,GAAUJ,EAASlD,KAAKL,KAAK,GAC5DuD,EAASlD,KAAKsD,IAAc,GAAKC,CACrC,CACJ,CAIA,OAFAL,EAAS1C,OACTwC,EAAUxC,OACH,CAAE0C,WAAUF,YACvB,CAKA,SAAAI,CAAUjD,GACN,GAAIJ,KAAKgB,UAAkB,IAANZ,EAAS,OAAOJ,KAAK6B,QAE1C,MAAM4B,EAAYjC,KAAKc,MAAMlC,EAAIN,EAAUS,MACrCmD,EAAWtD,EAAIN,EAAUS,KAEzB2B,EAAS,IAAIpC,EACnBoC,EAAOhC,KAAOF,KAAKE,KACnBgC,EAAOjC,KAAO,IAAIyB,MAAM1B,KAAKC,KAAK3C,OAASmG,EAAY,GAAG9B,KAAK,GAE/D,IAAK,IAAItE,EAAI,EAAGA,EAAI2C,KAAKC,KAAK3C,OAAQD,IAClC6E,EAAOjC,KAAK5C,EAAIoG,IAAezD,KAAKC,KAAK5C,IAAMqG,EAAa5D,EAAUU,KAAO,EACzEkD,EAAW,IACXxB,EAAOjC,KAAK5C,EAAIoG,EAAY,IAAMzD,KAAKC,KAAK5C,KAAQyC,EAAUS,KAAOmD,GAK7E,OADAxB,EAAOzB,OACAyB,CACX,CAKA,QAAAoB,CAAStB,GACL,MAAME,EAAS,IAAIpC,EACnBoC,EAAOhC,KAAO,EACdgC,EAAOjC,KAAO,IAAIyB,MAAMF,KAAKmC,IAAI3D,KAAKC,KAAK3C,OAAQ0E,EAAM/B,KAAK3C,SAASqE,KAAK,GAE5E,IAAIiC,EAAS,EACb,IAAK,IAAIvG,EAAI,EAAGA,EAAI6E,EAAOjC,KAAK3C,OAAQD,IAAK,CACzC,IAAIwG,GAAQ7D,KAAKC,KAAK5C,IAAM,IAAM2E,EAAM/B,KAAK5C,IAAM,GAAKuG,EACpDC,EAAO,GACPA,GAAQ/D,EAAUU,KAClBoD,EAAS,GAETA,EAAS,EAEb1B,EAAOjC,KAAK5C,GAAKwG,CACrB,CAGA,OADA3B,EAAOzB,OACAyB,CACX,EA/QOpC,EAAAU,KAAO,SACPV,EAAAS,KAAO,GAsRlB,MAsCMuD,EAEE,qgBAFFA,EAGc,SAoBPC,EAAmBC,OAC5BC,UACAC,MACAC,MACAC,aACA3F,UAEA,IAEI,MACM4F,EAAe5E,EAnYf,CAAC6E,IACX,IAAI5E,EAAM,GACV,IAAK,IAAIrC,EAAI,EAAGA,EAAIiH,EAAIhH,OAAQD,IAC5BqC,GAAO4E,EAAIC,WAAWlH,GAAGwD,SAAS,IAAIC,SAAS,EAAG,KAEtD,OAAOpB,GA8X6B8E,CADT,GAAGP,KAAWC,KAAOC,KAAOC,KAAc3F,MAI3DgG,EAAU3E,EAAUK,QAAQ2D,GAC5BY,EAAW5E,EAAUK,QAAQ2D,GAG7Ba,EAAanD,KAAKC,KAAKgD,EAAQxD,YAAc,GAG7C2D,EAjFG,EAAC3E,EAAgB0E,KAC9B,GAAI1E,EAAK3C,OAASqH,EAAa,GAC3B,MAAM,IAAIjC,MAAM,uCAGpB,MAAMnB,EAASoD,EAAa1E,EAAK3C,OAAS,EACpCsH,EAAS,IAAIlD,MAAMiD,GACzBC,EAAO,GAAK,EACZA,EAAO,GAAK,EAGZ,IAAK,IAAIvH,EAAI,EAAGA,EAAIkE,EAAQlE,IAAK,CAE7B,IAAIyE,EAAI,EACR,GAAsB,oBAAX+C,QAA0BA,OAAOC,gBAAiB,CACzD,MAAMC,EAAM,IAAIC,WAAW,GAC3B,KAAa,IAANlD,GACH+C,OAAOC,gBAAgBC,GACvBjD,EAAIiD,EAAI,EAEhB,MACI,KAAa,IAANjD,GACHA,EAAIN,KAAKc,MAAsB,IAAhBd,KAAKyD,UAAkB,EAG9CL,EAAO,EAAIvH,GAAKyE,CACpB,CAEA8C,EAAO,EAAIrD,GAAU,EACrB,IAAK,IAAIlE,EAAI,EAAGA,EAAI4C,EAAK3C,OAAQD,IAC7BuH,EAAO,EAAIrD,EAASlE,GAAK4C,EAAK5C,GAGlC,OAAOuH,GAgDYM,CAASb,EAAcM,GAGhC5B,EAAIjD,EAAUY,UAAUkE,GAMxBO,EAHIpC,EAAER,OAAOmC,EAAUD,GAGJpD,QAAQsD,GAGjC,OAnYehF,EAmYMwF,EAlYL,oBAATC,KAEAA,KAAKC,OAAOC,gBAAgB3F,IAGhC4F,OAAOC,KAAK7F,GAAOkB,SAAS,SA8XnC,CAAE,MAAOlD,GAEL,MADA8H,QAAQ9H,MAAM,8BAA+BA,GACvC,IAAI+E,MAAM,8BACpB,CAvYkB,IAAC/C,GA6YV+F,EAAsB5H,IAC/B,MAAMhB,EAAUgB,EAAOf,QAAQ,SAAU,IACzC,GAAuB,IAAnBD,EAAQQ,OAAc,MAAO,GACjC,MAAMU,EAAQlB,EAAQ+C,UAAU,EAAG,GAEnC,MAAO,GADM/C,EAAQ+C,UAAU,EAAG,KACjB7B,KAMR2H,EAAYzB,GACdA,EAAInH,QAAQ,MAAO,UCnZjB6I,EAIT,WAAA7F,CAAY8F,EAAgBC,GACxB9F,KAAK6F,OAASA,EACd7F,KAAK8F,QAAUA,GA5FE,4BA6FrB,CAEQ,aAAMC,CAAWC,EAAkBC,GACvC,MAAMC,EAAM,GAAGlG,KAAK8F,UAAUE,IAExBG,QAAiBC,MAAMF,EAAK,CAC9BG,OAAQ,OACRC,QAAS,CACL,eAAgB,mBAChB,YAAatG,KAAK6F,OAClBU,OAAU,oBAEdN,KAAMO,KAAKC,UAAUR,KAGnBhG,QAAakG,EAASO,OAE5B,IAAKP,EAASQ,GAAI,CACd,MAAMC,GAAe3G,aAAI,EAAJA,EAAM4G,WAAW5G,aAAI,EAAJA,EAAMtC,QAAS,8BAA8BwI,EAASW,SACtFnJ,EAAa,IAAI+E,MAAMkE,GAI7B,MAHAjJ,EAAMnB,MAAOyD,aAAI,EAAJA,EAAM8G,aAAa9G,aAAI,EAAJA,EAAMzD,OAAQ,QAAQ2J,EAASW,SAC/DnJ,EAAMmJ,OAASX,EAASW,OACxBnJ,EAAMsC,KAAOA,EACPtC,CACV,CAEA,OAAOsC,CACX,CAEQ,SAAM+G,CAAOhB,GACjB,MAAME,EAAM,GAAGlG,KAAK8F,UAAUE,IAExBG,QAAiBC,MAAMF,EAAK,CAC9BG,OAAQ,MACRC,QAAS,CACL,YAAatG,KAAK6F,OAClBU,OAAU,sBAIZtG,QAAakG,EAASO,OAE5B,IAAKP,EAASQ,GAAI,CACd,MAAMC,GAAe3G,aAAI,EAAJA,EAAM4G,WAAW5G,aAAI,EAAJA,EAAMtC,QAAS,8BAA8BwI,EAASW,SACtFnJ,EAAa,IAAI+E,MAAMkE,GAI7B,MAHAjJ,EAAMnB,MAAOyD,aAAI,EAAJA,EAAM8G,aAAa9G,aAAI,EAAJA,EAAMzD,OAAQ,QAAQ2J,EAASW,SAC/DnJ,EAAMmJ,OAASX,EAASW,OACxBnJ,EAAMsC,KAAOA,EACPtC,CACV,CAEA,OAAOsC,CACX,CAKA,qBAAMgH,CAAgBhH,GAClB,MAAMkG,QAAiBnG,KAAK+F,QACxB,4BACA9F,GAGJ,OAAIkG,EAASlG,MAAiC,iBAAlBkG,EAASlG,MAAqB,mBAAoBkG,EAASlG,KAC5EkG,EAASlG,KAEbkG,CACX,CAKA,iBAAMe,CAAYjH,GACd,OAAOD,KAAK+F,QAA6B,gCAAiC9F,EAC9E,CAKA,eAAMkH,CAAUlH,SACND,KAAK+F,QAAiB,8BAA+B9F,EAC/D,CAKA,sBAAMmH,CAAiBC,GAInB,aAHuBrH,KAAKgH,IACxB,oBAAoBM,mBAAmBD,OAE3BpH,IACpB,ECrKJ,MAAMsH,EACG,kNADHA,EAIE,kSAJFA,EAOG,4MAPHA,EAUG,qZAVHA,EAaE,mTAbFA,EAgBE,kQAhBFA,EAmBE,oRAnBFA,EAsBG,yOAMHC,EAA6C,CACjDC,KAAM,OACNC,WAAY,KACZC,KAAM,OACNC,MAAO,QACPC,SAAU,cAiCCC,EAOX,WAAA/H,CAAYgI,GAJJ/H,KAAAgI,UAAmC,KACnChI,KAAAiI,QAAiC,KACjCjI,KAAAkI,UAAqC,KAmzBrClI,KAAAmI,sBAAuC,KAEvCnI,KAAAoI,qBAAsC,KAqTtCpI,KAAAqI,aAAgBC,IACR,WAAVA,EAAEC,MACJvI,KAAKwI,QACLC,SAASC,oBAAoB,UAAW1I,KAAKqI,gBA1mC/CrI,KAAK+H,QAAUA,EACf,MAAMY,EAAUZ,EAAQa,gBAAkB,CAAC,OAAQ,iBAG/Cb,EAAQc,aACV7I,KAAKkI,UAAY,IAAItC,EACnBmC,EAAQc,WAAWhD,OACnBkC,EAAQc,WAAW/C,UAIvB9F,KAAK8I,MAAQ,CACXjM,WAAY,GACZiB,OAAQ,GACRW,IAAK,GACL0F,IAAK,GACL4E,IAAK,GACLC,OAAQ,CAAA,EACRC,cAAc,EACdC,WAAW,EACXC,WAAW,EACXC,SAAU,GACVC,cAAc,EACdC,iBAAkB,KAClBC,cAAeZ,EAAQ,GACvBa,cAAe,EACfC,sBAAuB,KACvBC,oBAAqB3B,EAAQ2B,qBAAuB,KACpDC,UAAW,KACXC,cAAe,KACfvC,eAAgB,KAChBwC,QAAS,KAEb,CAKA,IAAAC,GACE9J,KAAK+J,eACL/J,KAAKgK,SACLhK,KAAKiK,uBAGLC,sBAAsB,WACR,QAAZC,EAAAnK,KAAKiI,mBAAOkC,GAAAA,EAAEC,UAAUC,IAAI,oBAEhC,CAKA,KAAA7B,SACExI,KAAKsK,oBACLtK,KAAKuK,oBACO,QAAZJ,EAAAnK,KAAKiI,mBAAOkC,GAAAA,EAAEC,UAAUI,OAAO,mBAE/BC,WAAW,eACK,QAAdN,EAAAnK,KAAKgI,qBAASmC,GAAAA,EAAEK,SAChBxK,KAAKgI,UAAY,KACjBhI,KAAKiI,QAAU,aACfyC,KAAA1K,KAAK+H,SAAQ4C,iCACZ,IACL,CAKQ,YAAAZ,GACN,GAAItB,SAASmC,eAAe,2BAA4B,OAExD,MAAMtL,EAAQmJ,SAASoC,cAAc,SACrCvL,EAAMwL,GAAK,0BACXxL,EAAMyL,YAAc/K,KAAKgL,YACzBvC,SAASwC,KAAKC,YAAY5L,EAC5B,CAKQ,MAAA0K,GACNhK,KAAKgI,UAAYS,SAASoC,cAAc,OACxC7K,KAAKgI,UAAUmD,UAAY,mBAC3BnL,KAAKgI,UAAUoD,UAAYpL,KAAKqL,eAChC5C,SAASxC,KAAKiF,YAAYlL,KAAKgI,WAE/BhI,KAAKiI,QAAUjI,KAAKgI,UAAUsD,cAAc,mBAC9C,CAKQ,iBAAAC,GACN,OAAOvL,KAAK+H,QAAQa,gBAAkB,CAAC,OAAQ,gBACjD,CAKQ,YAAAyC,GACN,MAAMG,EAAkBvM,EAAae,KAAK+H,QAAQ7I,OAAQc,KAAK+H,QAAQ5I,UACjEwJ,EAAU3I,KAAKuL,oBACfE,EAAW9C,EAAQrL,OAAS,EAC5BoO,EAAsC,SAA7B1L,KAAK8I,MAAMS,cAE1B,MAAO,+WAO0DiC,4BACnDxL,KAAK+H,QAAQ4D,YAAc,uEAAuE3L,KAAK+H,QAAQ4D,oBAAsB,kJAIvIpE,2DAIJkE,EAAW,8DAET9C,EAAQ/K,SAAS,QAAU,mDACO8N,EAAS,SAAW,0CACpDnE,6CACS,mBACXoB,EAAQ/K,SAAS,iBAAmB,mDACD8N,EAAoB,GAAX,yDAC1CnE,sDACS,uBACL,iGAGNmE,EAAS1L,KAAK4L,gBAAgBJ,GAAmBxL,KAAK6L,oBAAoBL,yIAKxEjE,6IAOd,CAKQ,eAAAqE,CAAgBJ,GACtB,MAAO,ypEAqCeA,kDAIxB,CAKQ,mBAAAK,CAAoBL,GAC1B,MAAMM,EAAU9L,KAAK8I,MAAMY,oBAE3B,OAAKoC,EAWE,kIAGqBN,iYAO0EM,EAAQC,yGAChCD,EAAQC,iDACxExE,4OAOiCuE,EAAQE,gNAKRF,EAAQG,qOAKgBT,2PAK6BM,EAAQI,6IAKpG3E,iFACiEvH,KAAKmM,gBAAgBL,EAAQM,2NAlD7F,0SA0DX,CAKQ,eAAAD,CAAgBE,GACtB,MAAMtJ,EAAIvB,KAAKc,MAAM+J,EAAU,IACzBC,EAAID,EAAU,GACpB,MAAO,GAAGhH,OAAOtC,GAAGjC,SAAS,EAAG,QAAQuE,OAAOiH,GAAGxL,SAAS,EAAG,MAChE,CAKQ,iBAAAyL,SACN,MAAMC,EAA8B,QAAdrC,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BACpD,IAAKkB,EAAe,OAEpB,MAAMhB,EAAkBvM,EAAae,KAAK+H,QAAQ7I,OAAQc,KAAK+H,QAAQ5I,UAEvEqN,EAAcpB,UAAY,qGAGlB7D,qJAGiDiE,+HAMzD,MAAMiB,EAAWD,EAAclB,cAAc,yBAC7CmB,SAAAA,EAAUC,iBAAiB,QAAS,IAAM1M,KAAKwI,QACjD,CAKQ,aAAAmE,SACN,MAAMH,EAA8B,QAAdrC,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BACpD,IAAKkB,EAAe,OAEpBxM,KAAK8I,MAAMK,WAAY,EACvBnJ,KAAK8I,MAAMM,SAAW,GACtBpJ,KAAK8I,MAAMO,cAAe,EAE1B,MAAMuD,EAAc5M,KAAK+H,QAAQ8E,cAC7B,OAAO7M,KAAK+H,QAAQ8E,cAAc/N,OAAM,KACxC,WAEJ0N,EAAcpB,UAAY,gRAK2CwB,uhDAiCrE5M,KAAK8M,0BACL9M,KAAK+M,eACP,CAKQ,uBAAAD,iBACN,MAAME,EAA0B,QAAd7C,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAE8C,iBAAiB,sBAEnDD,SAAAA,EAAWE,QAAQ,CAACC,EAAOC,KACzBD,EAAMT,iBAAiB,QAAUpE,GAAMtI,KAAKqN,eAAe/E,EAAG8E,IAC9DD,EAAMT,iBAAiB,UAAYpE,GAAMtI,KAAKsN,iBAAiBhF,EAAG8E,IAClED,EAAMT,iBAAiB,QAAUpE,GAAMtI,KAAKuN,eAAejF,MAG7D,MAAMkF,EAA0B,QAAdC,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAEnC,cAAc,uBAChDkC,SAAAA,EAAWd,iBAAiB,QAAS,IAAM1M,KAAK0N,mBAEhD,MAAMC,EAA0B,QAAdjD,EAAA1K,KAAKgI,iBAAS,IAAA0C,OAAA,EAAAA,EAAEY,cAAc,uBAChDqC,SAAAA,EAAWjB,iBAAiB,QAAS,IAAM1M,KAAK4N,mBAEhD,MAAMC,EAAwB,QAAdC,EAAA9N,KAAKgI,iBAAS,IAAA8F,OAAA,EAAAA,EAAExC,cAAc,yBAC9CuC,SAAAA,EAASnB,iBAAiB,QAAS,IAAM1M,KAAK+N,oBAEV,QAApCC,EAAChB,aAAS,EAATA,EAAY,UAAuB,IAAAgB,GAAAA,EAAEC,OACxC,CAEQ,cAAAZ,CAAe/E,EAAU8E,SAC/B,MAAMD,EAAQ7E,EAAE4F,OACVtP,EAAQuO,EAAMvO,MAAM7B,QAAQ,MAAO,IAGzC,GAFAoQ,EAAMvO,MAAQA,EAEVA,GAASwO,EAAQ,EAAG,CACtB,MAAMe,EAA0B,QAAdhE,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,gBAAgB8B,EAAQ,OACxEe,SAAAA,EAAWF,OACb,CAEAjO,KAAKoO,iBACLpO,KAAKqO,WAAW,MAClB,CAEQ,gBAAAf,CAAiBhF,EAAkB8E,SACzC,MAAMD,EAAQ7E,EAAE4F,OAEhB,GAAc,cAAV5F,EAAEC,MAAwB4E,EAAMvO,OAASwO,EAAQ,EAAG,CACtD,MAAMkB,EAA0B,QAAdnE,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,gBAAgB8B,EAAQ,OACxEkB,SAAAA,EAAWL,OACb,CACF,CAEQ,cAAAV,CAAejF,WACrBA,EAAEiG,iBACF,MAAMC,EAA4B,QAAfrE,EAAA7B,EAAEmG,qBAAa,IAAAtE,OAAA,EAAAA,EAAEuE,QAAQ,QAAQ3R,QAAQ,MAAO,IAAI+B,MAAM,EAAG,GAEhF,GAAI0P,EAAY,CACd,MAAMG,EAAuB,QAAdlB,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAER,iBAAiB,sBAChDuB,EAAWI,MAAM,IAAI1B,QAAQ,CAAC3P,EAAOF,KAC/BsR,EAAOtR,KACTsR,EAAOtR,GAAGuB,MAAQrB,KAGtByC,KAAKoO,gBACP,CACF,CAEQ,cAAAA,SACN,MAAMO,EAAuB,QAAdxE,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAE8C,iBAAiB,sBAChD,IAAIlE,EAAM,GACV4F,SAAAA,EAAQzB,QAAQC,GAASpE,GAAOoE,EAAMvO,OACtCoB,KAAK8I,MAAMC,IAAMA,CACnB,CAEQ,aAAAgE,aACN,MAAM8B,EAAwB,QAAd1E,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,wBACxCwD,EAA+B,QAAdrB,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAEnC,cAAc,sBAC/CqC,EAA0B,QAAdjD,EAAA1K,KAAKgI,iBAAS,IAAA0C,OAAA,EAAAA,EAAEY,cAAc,uBAEhDtL,KAAK8I,MAAMQ,iBAAmByF,OAAOC,YAAY,KAC/ChP,KAAK8I,MAAMM,WAEPyF,IACFA,EAAQ9D,YAAc1F,OAAOrF,KAAK8I,MAAMM,WAGtCpJ,KAAK8I,MAAMM,UAAY,IACrBpJ,KAAK8I,MAAMQ,kBACb2F,cAAcjP,KAAK8I,MAAMQ,kBAE3BtJ,KAAK8I,MAAMO,cAAe,EACtByF,IAAiBA,EAA+BxP,MAAM4P,QAAU,QAChEvB,IAAWA,EAAUwB,UAAW,KAErC,IACL,CAEQ,qBAAMzB,GACZ,GAA8B,IAA1B1N,KAAK8I,MAAMC,IAAIzL,OAAnB,CAKA0C,KAAKoP,kBAAiB,GAEtB,UACQpP,KAAKqP,YAEPrP,KAAK8I,MAAMQ,kBACb2F,cAAcjP,KAAK8I,MAAMQ,kBAG3B,MAAMpH,QAAelC,KAAKsP,iBAE1BtP,KAAK8I,MAAMI,WAAY,EACvBlJ,KAAKuM,oBACLvM,KAAK+H,QAAQwH,UAAUrN,EACzB,CAAE,MAAOvE,GACPqC,KAAKoP,kBAAiB,GACtB,MAAMI,EAAe7R,EACrBqC,KAAKyP,UAAU,MAAOD,EAAa3I,SAAW,iCAChD,CApBA,MAFE7G,KAAKyP,UAAU,MAAO,yCAuB1B,CAEQ,gBAAAL,CAAiBnG,SACvB,MAAMuE,EAA0B,QAAdrD,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,uBAE5CkC,IACFA,EAAU2B,SAAWlG,EACrBuE,EAAUpC,UAAYnC,EAClB,+DACA,+BAER,CAEQ,eAAMoG,GACZ,IAAKrP,KAAKkI,YAAclI,KAAK+H,QAAQc,WACnC,KAAM,CAAErM,KAAM,YAAaqK,QAAS,+BAAgC6I,aAAa,GAGnF,GAA8B,IAA1B1P,KAAK8I,MAAMC,IAAIzL,OACjB,KAAM,CAAEd,KAAM,cAAeqK,QAAS,yCAA0C6I,aAAa,GAG/F,IAAK1P,KAAK8I,MAAMa,YAAc3J,KAAK8I,MAAMc,cACvC,KAAM,CAAEpN,KAAM,uBAAwBqK,QAAS,6CAA8C6I,aAAa,SAGtG1P,KAAKkI,UAAUhB,YAAY,CAC/ByC,UAAW3J,KAAK8I,MAAMa,UACtBZ,IAAK/I,KAAK8I,MAAMC,IAChBa,cAAe5J,KAAK8I,MAAMc,cAC1BC,QAAS7J,KAAK8I,MAAMe,cAAW8F,EAC/BC,eAAgB5P,KAAK+H,QAAQc,WAAW+G,gBAE5C,CAEQ,qBAAMhC,eACZ,MAAMkB,EAA+B,QAAd3E,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,sBAC/CqC,EAA0B,QAAdF,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAEnC,cAAc,uBAGhD,GAAItL,KAAKkI,WAAalI,KAAK+H,QAAQc,YAAc7I,KAAK8I,MAAMzB,eAC1D,IACMsG,IAAWA,EAAUwB,UAAW,SAC9BnP,KAAKkI,UAAUf,UAAU,CAC7BE,eAAgBrH,KAAK8I,MAAMzB,eAC3BuI,eAAgB5P,KAAK+H,QAAQc,WAAW+G,gBAE5C,CAAE,MAAOjS,GACP8H,QAAQ9H,MAAM,kCAAmCA,EAEnD,CAGFqC,KAAK8I,MAAMM,SAAW,GACtBpJ,KAAK8I,MAAMO,cAAe,EAEtByF,IAAgBA,EAAexP,MAAM4P,QAAU,SAC/CvB,IAAWA,EAAUwB,UAAW,GAEpC,MAAMR,EAAuB,QAAdjE,EAAA1K,KAAKgI,iBAAS,IAAA0C,OAAA,EAAAA,EAAEuC,iBAAiB,sBAChD0B,SAAAA,EAAQzB,QAAQC,GAASA,EAAMvO,MAAQ,IACvCoB,KAAK8I,MAAMC,IAAM,GAEjB/I,KAAK+M,gBAC4B,QAAjCe,EAACa,aAAM,EAANA,EAAS,UAAuB,IAAAb,GAAAA,EAAEG,OACrC,CAEQ,gBAAAF,SAQN,GAPI/N,KAAK8I,MAAMQ,kBACb2F,cAAcjP,KAAK8I,MAAMQ,kBAG3BtJ,KAAK8I,MAAMK,WAAY,EACvBnJ,KAAK8I,MAAMC,IAAM,GAEb/I,KAAKgI,UAAW,CAClBhI,KAAKgI,UAAUoD,UAAYpL,KAAKqL,eAChCrL,KAAKiI,QAAUjI,KAAKgI,UAAUsD,cAAc,oBAChC,QAAZnB,EAAAnK,KAAKiI,mBAAOkC,GAAAA,EAAEC,UAAUC,IAAI,mBAC5BrK,KAAKiK,uBAEL,MAAM4F,EAAY7P,KAAKgI,UAAUsD,cAAc,wBACzCwE,EAAc9P,KAAKgI,UAAUsD,cAAc,mBAC3CyE,EAAW/P,KAAKgI,UAAUsD,cAAc,gBACxC0E,EAAWhQ,KAAKgI,UAAUsD,cAAc,gBAE1CuE,IAAWA,EAAUjR,MAAQD,EAAiBqB,KAAK8I,MAAMjM,aACzDiT,IAAaA,EAAYlR,MAAQoB,KAAK8I,MAAMhL,QAC5CiS,IAAUA,EAASnR,MAAQoB,KAAK8I,MAAMrK,KACtCuR,IAAUA,EAASpR,MAAQoB,KAAK8I,MAAM3E,IAC5C,CACF,CAKQ,oBAAA8F,uBACN,MAAMwC,EAAyB,QAAdtC,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,yBAC/CmB,SAAAA,EAAUC,iBAAiB,QAAS,IAAM1M,KAAKwI,SAEnC,QAAZiF,EAAAzN,KAAKiI,mBAAOwF,GAAAA,EAAEf,iBAAiB,QAAUpE,IACnCA,EAAE4F,SAAWlO,KAAKiI,SACpBjI,KAAKwI,UAITC,SAASiE,iBAAiB,UAAW1M,KAAKqI,cAG1C,MAAM4H,EAAqB,QAAdvF,EAAA1K,KAAKgI,iBAAS,IAAA0C,OAAA,EAAAA,EAAEuC,iBAAiB,uBAW9C,GAVAgD,SAAAA,EAAM/C,QAAQgD,IACZA,EAAIxD,iBAAiB,QAAS,KAC5B,MAAMrG,EAAU6J,EAAoBC,QAAQ9J,OACxCA,GAAUA,IAAWrG,KAAK8I,MAAMS,eAClCvJ,KAAKoQ,oBAAoB/J,OAME,SAA7BrG,KAAK8I,MAAMS,cAA0B,CACvC,MAAMsG,EAA0B,QAAd/B,EAAA9N,KAAKgI,iBAAS,IAAA8F,OAAA,EAAAA,EAAExC,cAAc,wBAChDuE,SAAAA,EAAWnD,iBAAiB,QAAUpE,GAAMtI,KAAKqQ,gBAAgB/H,IACjEuH,SAAAA,EAAWnD,iBAAiB,OAAQ,IAAM1M,KAAKsQ,cAAc,eAE7D,MAAMR,EAA4B,QAAd9B,EAAAhO,KAAKgI,iBAAS,IAAAgG,OAAA,EAAAA,EAAE1C,cAAc,mBAClDwE,SAAAA,EAAapD,iBAAiB,QAAUpE,GAAMtI,KAAKuQ,kBAAkBjI,IACrEwH,SAAAA,EAAapD,iBAAiB,OAAQ,IAAM1M,KAAKsQ,cAAc,WAE/D,MAAMP,EAAyB,QAAdS,EAAAxQ,KAAKgI,iBAAS,IAAAwI,OAAA,EAAAA,EAAElF,cAAc,gBAC/CyE,SAAAA,EAAUrD,iBAAiB,QAAUpE,GAAMtI,KAAKyQ,eAAenI,IAC/DyH,SAAAA,EAAUrD,iBAAiB,OAAQ,IAAM1M,KAAKsQ,cAAc,QAE5D,MAAMN,EAAyB,QAAdU,EAAA1Q,KAAKgI,iBAAS,IAAA0I,OAAA,EAAAA,EAAEpF,cAAc,gBAC/C0E,SAAAA,EAAUtD,iBAAiB,QAAUpE,GAAMtI,KAAK2Q,eAAerI,IAC/D0H,SAAAA,EAAUtD,iBAAiB,OAAQ,IAAM1M,KAAKsQ,cAAc,QAE5D,MAAMM,EAAqB,QAAdC,EAAA7Q,KAAKgI,iBAAS,IAAA6I,OAAA,EAAAA,EAAEvF,cAAc,yBAC3CsF,SAAAA,EAAMlE,iBAAiB,SAAWpE,GAAMtI,KAAK8Q,aAAaxI,GAC5D,CAGiC,kBAA7BtI,KAAK8I,MAAMS,gBACbvJ,KAAK+Q,8BAGA/Q,KAAK8I,MAAMY,oBAGd1J,KAAKgR,qBAFLhR,KAAKiR,0BAKX,CAKQ,2BAAAF,WACN,MAAMG,EAAwB,QAAd/G,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,qBAC9C4F,SAAAA,EAASxE,iBAAiB,QAAS,KACjC,MAAMyE,EAAcD,EAAwBf,QAAQiB,MAAQ,GAC5DpR,KAAKqR,gBAAgBF,KAGvB,MAAMG,EAA2B,QAAd7D,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAEnC,cAAc,6BACjDgG,SAAAA,EAAY5E,iBAAiB,QAAS,IAAM1M,KAAKuR,wBACnD,CAKQ,mBAAAnB,CAAoB/J,SAK1B,GAJArG,KAAKsK,oBACLtK,KAAK8I,MAAMS,cAAgBlD,EAGvBrG,KAAKgI,YACPhI,KAAKgI,UAAUoD,UAAYpL,KAAKqL,eAChCrL,KAAKiI,QAAUjI,KAAKgI,UAAUsD,cAAc,oBAChC,QAAZnB,EAAAnK,KAAKiI,mBAAOkC,GAAAA,EAAEC,UAAUC,IAAI,mBAC5BrK,KAAKiK,uBAGU,SAAX5D,GAAqBrG,KAAK8I,MAAMjM,YAAY,CAC9C,MAAMgT,EAAY7P,KAAKgI,UAAUsD,cAAc,wBACzCwE,EAAc9P,KAAKgI,UAAUsD,cAAc,mBAC3CyE,EAAW/P,KAAKgI,UAAUsD,cAAc,gBACxC0E,EAAWhQ,KAAKgI,UAAUsD,cAAc,gBAC1CuE,IAAWA,EAAUjR,MAAQD,EAAiBqB,KAAK8I,MAAMjM,aACzDiT,IAAaA,EAAYlR,MAAQoB,KAAK8I,MAAMhL,QAC5CiS,IAAUA,EAASnR,MAAQoB,KAAK8I,MAAMrK,KACtCuR,IAAUA,EAASpR,MAAQoB,KAAK8I,MAAM3E,IAC5C,CAEJ,CAKQ,6BAAM8M,WACZ,IACE,IAAInF,EAEJ,GAAI9L,KAAK+H,QAAQyJ,wBAEf1F,QAAgB9L,KAAK+H,QAAQyJ,8BACxB,KAAIxR,KAAKkI,YAAalI,KAAK+H,QAAQc,WA0CxC,KAAM,CAAErM,KAAM,YAAaqK,QAAS,qEA1CgB,CAEpD,MAAMQ,EAAiB,MAAMlJ,KAAKD,MAAM2C,SAAS,IAAI4Q,iBAAiBjQ,KAAKyD,SAASpE,SAAS,IAAIhB,UAAU,EAAG,GAAG4R,gBAE3GtL,QAAiBnG,KAAKkI,UAAUjB,gBAAgB,CACpD2I,eAAgB5P,KAAK+H,QAAQc,WAAW+G,eACxCvI,iBACAqK,WAAY1R,KAAK+H,QAAQ8E,eAAiB,GAC1CA,cAAe7M,KAAK+H,QAAQ8E,cAC5B8E,cAAe3R,KAAK+H,QAAQ4J,cAC5BzS,OAAQc,KAAK+H,QAAQ7I,OAAS,IAC9BC,SAAUa,KAAK+H,QAAQ5I,SACvBoK,cAAe,gBACfqI,SAAUxM,KAAKoB,KAAKC,UAAU,CAAEoL,OAAQ,MAAOxL,OAAQ,mBACvDyL,UAAW9R,KAAK+H,QAAQ4D,YACxBoG,gBAAiB,KAKnB/R,KAAK8I,MAAMzB,eAAiBlB,EAASkB,gBAAkBA,EACvDrH,KAAK8I,MAAMa,UAAYxD,EAASwD,WAAcxD,EAAiB2E,IAAM,KAErE,MAAMkH,EAAK7L,EAAS8L,eACpB,IAAKD,EACH,KAAM,CAAExV,KAAM,0BAA2BqK,QAAS,4CAIpD,MAAMqL,EAAgB,IAAI/T,KAAK6T,EAAGG,YAC5BC,EAAQjU,KAAKD,MACbmU,EAAmB7Q,KAAKmC,IAAI,EAAGnC,KAAKc,OAAO4P,EAAcI,UAAYF,GAAS,MAEpFtG,EAAU,CACRC,cAAeiG,EAAGO,eAClBvG,SAAUgG,EAAGQ,UACbvG,YAAa+F,EAAGS,aAChBvG,UAAWlM,KAAK8I,MAAMzB,eACtB+E,UAAWiG,EACXK,UAAWV,EAAGG,WAElB,CAEA,CAEAnS,KAAK8I,MAAMY,oBAAsBoC,EAGjC,MAAMU,EAA8B,QAAdrC,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BACpD,GAAIkB,EAAe,CACjB,MAAMhB,EAAkBvM,EAAae,KAAK+H,QAAQ7I,OAAQc,KAAK+H,QAAQ5I,UACvEqN,EAAcpB,UAAYpL,KAAK6L,oBAAoBL,GACnDxL,KAAK+Q,8BACL/Q,KAAKgR,oBACP,CACF,CAAE,MAAOrT,GACP,MAAMoJ,GAAYpJ,aAAK,EAALA,EAAOnB,OAAQ,4BAC3BoK,GAAejJ,aAAK,EAALA,EAAOkJ,UAAW,8DAGjC2F,EAA8B,QAAdiB,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAEnC,cAAc,2BACpD,GAAIkB,EAAe,CACjBA,EAAcpB,UAAY,qTAIiFpL,KAAK2S,iBAAiB5L,iHAClCH,sKAK/F,MAAMgM,EAAWpG,EAAclB,cAAc,2BAC7CsH,SAAAA,EAAUlG,iBAAiB,QAAS,KAClCF,EAAcpB,UAAY,uUAQ1BpL,KAAKiR,2BAET,CAEAjR,KAAK+H,QAAQ8K,QAAQ,CACnBrW,KAAMuK,EACNF,QAASD,EACT8I,aAAa,EACb5D,QAASnO,aAAK,EAALA,EAAOsC,MAEpB,CACF,CAKQ,gBAAA0S,CAAiBnW,GAUvB,MATuC,CACrCsW,wBAA2B,4BAC3BC,gBAAmB,kBACnBC,eAAkB,iBAClBC,aAAgB,wBAChBC,uBAA0B,sBAC1BC,wBAA2B,4BAC3BC,UAAa,uBAED5W,IAAS,sBACzB,CAKQ,qBAAM6U,CAAgBgC,SAC5B,UACQC,UAAUC,UAAUC,UAAUH,GACpC,MAAMnC,EAAwB,QAAd/G,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,qBAC1C4F,IACFA,EAAQ9F,UAAY,GAAG7D,IACvB2J,EAAQ9G,UAAUC,IAAI,kBACtBI,WAAW,KACTyG,EAAQ9F,UAAY,GAAG7D,IACvB2J,EAAQ9G,UAAUI,OAAO,mBACxB,KAEP,CAAE,MAAAiD,GAEA,MAAMgG,EAAWhL,SAASoC,cAAc,YACxC4I,EAAS7U,MAAQyU,EACjBI,EAASnU,MAAMoU,SAAW,QAC1BD,EAASnU,MAAMqU,QAAU,IACzBlL,SAASxC,KAAKiF,YAAYuI,GAC1BA,EAASG,SACTnL,SAASoL,YAAY,QACrBpL,SAASxC,KAAK6N,YAAYL,EAC5B,CACF,CAUQ,2BAAMlC,WACZ,MAAMD,EAA2B,QAAdnH,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,6BAOjD,GANIgG,IACFA,EAAWnC,UAAW,EACtBmC,EAAWlG,UAAY,2EAIpBpL,KAAKkI,YAAclI,KAAK8I,MAAMzB,eAAgB,CACjDrH,KAAKsK,oBACL,MAAMpI,EAAwB,CAC5B4I,GAAI9K,KAAK8I,MAAMa,WAAa,gBAAgBxL,KAAKD,QACjD4I,OAAQ,UACR5H,OAAQc,KAAK+H,QAAQ7I,OACrBC,SAAUa,KAAK+H,QAAQ5I,SACvB4U,WAAW,IAAI5V,MAAO6V,cACtB9H,oBAAWlM,KAAK8I,MAAMY,0CAAqBwC,UAC3C3C,cAAe,iBAKjB,OAHAvJ,KAAK8I,MAAMI,WAAY,EACvBlJ,KAAKuM,yBACLvM,KAAK+H,QAAQwH,UAAUrN,EAEzB,CAGAlC,KAAKiU,oBACLjU,KAAKkU,oBACP,CAKQ,iBAAAD,SACN,MAAMzH,EAA8B,QAAdrC,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BACpD,IAAKkB,EAAe,OAEpB,MAAMhB,EAAkBvM,EAAae,KAAK+H,QAAQ7I,OAAQc,KAAK+H,QAAQ5I,UAEvEqN,EAAcpB,UAAY,0gBAM4BI,4gBAYtD,MAAM2I,EAAY3H,EAAclB,cAAc,2BAC9C6I,SAAAA,EAAWzH,iBAAiB,QAAS,KAGnC,GAFA1M,KAAKuK,oBAEDvK,KAAK8I,MAAMY,oBAAqB,CAClC,MAAM0K,EAAMnV,EAAae,KAAK+H,QAAQ7I,OAAQc,KAAK+H,QAAQ5I,UAC3DqN,EAAcpB,UAAYpL,KAAK6L,oBAAoBuI,GACnDpU,KAAK+Q,8BACL/Q,KAAKgR,oBACP,GAEJ,CAKQ,kBAAAkD,GACNlU,KAAKuK,oBAEL,MAAM8J,EAAOrQ,gBACX,GAAKhE,KAAKkI,WAAclI,KAAK8I,MAAMzB,eAEnC,IACE,MAAMiN,QAAmBtU,KAAKkI,UAAUd,iBAAiBpH,KAAK8I,MAAMzB,gBACpErH,KAAKuU,0BAA0BD,EAAWxN,OAAQwN,EACpD,CAAE,MAAO3W,GACP8H,QAAQ9H,MAAM,kCAAmCA,GAEjD,MAAM6W,EAAyB,QAAdrK,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BAC3CkJ,IACFA,EAASzJ,YAAc,iCAE3B,GAIFsJ,IAGArU,KAAKmI,sBAAwB4G,OAAOC,YAAYqF,EAAM,KAGtDrU,KAAKoI,qBAAuB2G,OAAOtE,WAAW,KAC5CzK,KAAKuK,oBACLvK,KAAKuU,0BAA0B,UAAW,OACzC,KACL,CAKQ,iBAAAhK,GACFvK,KAAKmI,wBACP8G,cAAcjP,KAAKmI,uBACnBnI,KAAKmI,sBAAwB,MAE3BnI,KAAKoI,uBACPqM,aAAazU,KAAKoI,sBAClBpI,KAAKoI,qBAAuB,KAEhC,CAKQ,yBAAAmM,CAA0BzN,EAAgB7G,SAQhD,OAPyB,CAAC,YAAa,SAAU,UAAW,aAEvCrC,SAASkJ,KAC5B9G,KAAKuK,oBACLvK,KAAKsK,qBAGCxD,GACN,IAAK,YAAa,CAChB,MAAM5E,EAAwB,CAC5B4I,IAAI7K,aAAI,EAAJA,EAAM6K,KAAM9K,KAAK8I,MAAMa,WAAa,gBAAgBxL,KAAKD,QAC7D4I,OAAQ,UACR5H,OAAQc,KAAK+H,QAAQ7I,OACrBC,SAAUa,KAAK+H,QAAQ5I,SACvB4U,WAAW9T,eAAAA,EAAMyU,eAAe,IAAIvW,MAAO6V,cAC3C9H,UAAWlM,KAAK8I,MAAMzB,qBAAkBsI,EACxCpG,cAAe,gBACftJ,KAAMA,QAAQ0P,GAEhB3P,KAAK8I,MAAMI,WAAY,EACvBlJ,KAAKuM,oBACLvM,KAAK+H,QAAQwH,UAAUrN,GACvB,KACF,CAEA,IAAK,mBAAoB,CAEvB,MAAMsS,EAAyB,QAAdrK,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BAC3CkJ,IACFA,EAASzJ,YAAc,mCAEzB,KACF,CAEA,IAAK,kBACH/K,KAAKuK,oBACLvK,KAAK2U,wBACH,2BACA,sHAEF,MAGF,IAAK,WAAY,CAEf,MAAMzS,EAAwB,CAC5B4I,IAAI7K,aAAI,EAAJA,EAAM6K,KAAM9K,KAAK8I,MAAMa,WAAa,gBAAgBxL,KAAKD,QAC7D4I,OAAQ,UACR5H,OAAQc,KAAK+H,QAAQ7I,OACrBC,SAAUa,KAAK+H,QAAQ5I,SACvB4U,WAAW9T,eAAAA,EAAMyU,eAAe,IAAIvW,MAAO6V,cAC3C9H,UAAWlM,KAAK8I,MAAMzB,qBAAkBsI,EACxCpG,cAAe,gBACftJ,KAAM,IAAKA,EAAM2U,UAAU,IAE7B5U,KAAK8I,MAAMI,WAAY,EACvBlJ,KAAKuM,oBACLvM,KAAK+H,QAAQwH,UAAUrN,GACvB,KACF,CAEA,IAAK,UACHlC,KAAK2U,wBACH,kBACA,gFAEF3U,KAAK+H,QAAQ8K,QAAQ,CACnBrW,KAAM,kBACNqK,QAAS,uDACT6I,aAAa,IAEf,MAGF,IAAK,SACH1P,KAAK2U,wBACH,kBACA1U,aAAI,EAAJA,EAAM4G,UAAW,yDAEnB7G,KAAK+H,QAAQ8K,QAAQ,CACnBrW,KAAM,iBACNqK,SAAS5G,eAAAA,EAAM4G,UAAW,kBAC1B6I,aAAa,IAEf,MAGF,IAAK,YACH1P,KAAK2U,wBACH,oBACA,oCAEF3U,KAAK+H,QAAQ8K,QAAQ,CACnBrW,KAAM,oBACNqK,QAAS,yBACT6I,aAAa,IASrB,CAKQ,uBAAAiF,CAAwBE,EAAehO,SAC7C,MAAM2F,EAA8B,QAAdrC,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,2BACpD,IAAKkB,EAAe,OAEpBA,EAAcpB,UAAY,oSAIiFyJ,4GACZhO,sJAM/F,MAAM+L,EAAWpG,EAAclB,cAAc,2BAC7CsH,SAAAA,EAAUlG,iBAAiB,QAAS,KAElC1M,KAAK8I,MAAMY,oBAAsB,KACjC1J,KAAK8I,MAAMzB,eAAiB,KAC5BrH,KAAK8I,MAAMa,UAAY,KACvB6C,EAAcpB,UAAY,2SAQ1BpL,KAAKiR,2BAET,CAKQ,kBAAAD,GACDhR,KAAK8I,MAAMY,sBAEhB1J,KAAK8I,MAAMU,cAAgBxJ,KAAK8I,MAAMY,oBAAoB0C,UAE1DpM,KAAK8I,MAAMW,sBAAwBsF,OAAOC,YAAY,eACpDhP,KAAK8I,MAAMU,gBAEX,MAAMsL,EAA4B,QAAd3K,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,+BAKlD,GAJIwJ,IACFA,EAAY/J,YAAc/K,KAAKmM,gBAAgBnM,KAAK8I,MAAMU,gBAGxDxJ,KAAK8I,MAAMU,eAAiB,EAAG,CACjCxJ,KAAKsK,oBAEL,MAAMuE,EAAwB,QAAdpB,EAAAzN,KAAKgI,iBAAS,IAAAyF,OAAA,EAAAA,EAAEnC,cAAc,2BAC1CuD,IACFA,EAAQzD,UAAY,GAAG7D,0FAEzB,MAAM+J,EAA2B,QAAd5G,EAAA1K,KAAKgI,iBAAS,IAAA0C,OAAA,EAAAA,EAAEY,cAAc,6BAC7CgG,IAAYA,EAAWnC,UAAW,EACxC,GACC,KACL,CAKQ,iBAAA7E,GACFtK,KAAK8I,MAAMW,wBACbwF,cAAcjP,KAAK8I,MAAMW,uBACzBzJ,KAAK8I,MAAMW,sBAAwB,KAEvC,CASQ,eAAA4G,CAAgB/H,SACtB,MAAM6E,EAAQ7E,EAAE4F,OACV6G,EAAYpW,EAAiBwO,EAAMvO,OACzCuO,EAAMvO,MAAQmW,EACd/U,KAAK8I,MAAMjM,WAAakY,EAAUhY,QAAQ,MAAO,IAEjD,MAAMiY,EAAwB,QAAd7K,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,uBACxCtO,EAAQJ,EAAgBoD,KAAK8I,MAAMjM,YACrCmY,IACFA,EAAQjK,YAAc/N,GAAQwK,EAAmBxK,EAAMR,OAAc,GACrEwY,EAAQ1V,MAAMqU,QAAU3W,EAAQ,IAAM,KAGxCgD,KAAKqO,WAAW,aAClB,CAEQ,iBAAAkC,CAAkBjI,GACxB,MAAM6E,EAAQ7E,EAAE4F,OACV6G,EAAYhW,EAAaoO,EAAMvO,OACrCuO,EAAMvO,MAAQmW,EACd/U,KAAK8I,MAAMhL,OAASiX,EACpB/U,KAAKqO,WAAW,SAClB,CAEQ,cAAAoC,CAAenI,GACrB,MAAM6E,EAAQ7E,EAAE4F,OACV6G,EAAY/V,EAAUmO,EAAMvO,OAClCuO,EAAMvO,MAAQmW,EACd/U,KAAK8I,MAAMrK,IAAMsW,EACjB/U,KAAKqO,WAAW,MAClB,CAEQ,cAAAsC,CAAerI,GACrB,MAAM6E,EAAQ7E,EAAE4F,OACV6G,EAAsB5H,EAAMvO,MHtqCrB7B,QAAQ,MAAO,IAAI+B,MAAM,EAAG,GGuqCzCqO,EAAMvO,MAAQmW,EACd/U,KAAK8I,MAAM3E,IAAM4Q,EACjB/U,KAAKqO,WAAW,MAClB,CAEQ,aAAAiC,CAAc2E,GACpB,IAAI/S,EAEJ,OAAQ+S,GACN,IAAK,aACH/S,EAASzE,EAAmBuC,KAAK8I,MAAMjM,YACvC,MACF,IAAK,SACHqF,EAASrE,EAAemC,KAAK8I,MAAMhL,QACnC,MACF,IAAK,MACHoE,EAAS1D,EAAYwB,KAAK8I,MAAMrK,IAAKuB,KAAK8I,MAAMjM,YAChD,MACF,IAAK,MACHqF,EJ7kCF,SAAsBiC,GACxB,MAAMrH,EAAUqH,EAAIpH,QAAQ,MAAO,IAEnC,OAAKD,EAIA,UAAUG,KAAKH,GAIb,CAAEY,OAAO,GAHL,CAAEA,OAAO,EAAOC,MAAO,wBAJvB,CAAED,OAAO,EAAOC,MAAO,kBAQtC,CIikCiBuX,CAAYlV,KAAK8I,MAAM3E,KAChC,MACF,QACE,OAAO,EAGX,OAAKjC,EAAOxE,OAKZsC,KAAKqO,WAAW4G,IACT,IALLjV,KAAKyP,UAAUwF,EAAO/S,EAAOvE,OAAS,YAC/B,EAKX,CAEQ,SAAA8R,CAAUwF,EAAepO,WAC/B,MAAMsO,EAAwB,QAAdhL,EAAAnK,KAAKgI,qBAASmC,OAAA,EAAAA,EAAEmB,cAAc,YAAsB,eAAV2J,EAAyB,OAASA,WACtFG,EAAwB,QAAd3H,EAAAzN,KAAKgI,qBAASyF,OAAA,EAAAA,EAAEnC,cAAc,YAAsB,eAAV2J,EAAyB,cAAgBA,KAE/FE,IACFA,EAAQ/J,UAAY,GAAG7D,KAAeV,IACtCsO,EAAQ7V,MAAM4P,QAAU,QAE1BkG,SAAAA,EAAShL,UAAUC,IAAI,gBACzB,CAEQ,UAAAgE,CAAW4G,WACjB,MAAME,EAAwB,QAAdhL,EAAAnK,KAAKgI,qBAASmC,OAAA,EAAAA,EAAEmB,cAAc,YAAsB,eAAV2J,EAAyB,OAASA,WACtFG,EAAwB,QAAd3H,EAAAzN,KAAKgI,qBAASyF,OAAA,EAAAA,EAAEnC,cAAc,YAAsB,eAAV2J,EAAyB,cAAgBA,KAE/FE,IACFA,EAAQ7V,MAAM4P,QAAU,QAE1BkG,SAAAA,EAAShL,UAAUI,OAAO,gBAC5B,CAEQ,kBAAMsG,CAAaxI,GACzBA,EAAEiG,iBAEF,MAAM8G,EAAcrV,KAAKsQ,cAAc,cACjCgF,EAAgBtV,KAAKsQ,cAAc,UACnCiF,EAAavV,KAAKsQ,cAAc,OAChCkF,EAAaxV,KAAKsQ,cAAc,OAEtC,GAAK+E,GAAgBC,GAAkBC,GAAeC,EAItD,GAAKxV,KAAKkI,WAAclI,KAAK+H,QAAQc,WAArC,CAKA7I,KAAKyV,eAAc,GAEnB,IAEE,MAAMvR,EAAMyB,EAAS3F,KAAK8I,MAAMjM,YAC1BuH,EAAasB,EAAmB1F,KAAK8I,MAAMhL,QAC3C4X,EAAU,CACdzR,QAAS,IACTC,MACAC,IAAKnE,KAAK8I,MAAM3E,IAChBC,aACA3F,IAAKuB,KAAK8I,MAAMrK,KAElBgH,QAAQkQ,IAAI,qBAAsBD,GAElC,MAAM9D,QAAiB7N,EAAiB2R,GAGlCrO,EAAiB,MAAMlJ,KAAKD,MAAM2C,SAAS,IAAI4Q,iBAAiBjQ,KAAKyD,SAASpE,SAAS,IAAIhB,UAAU,EAAG,GAAG4R,gBAG3GtL,QAAiBnG,KAAKkI,UAAUjB,gBAAgB,CACpD2I,eAAgB5P,KAAK+H,QAAQc,WAAW+G,eACxCvI,iBACAqK,WAAY1R,KAAK+H,QAAQ8E,cACzBA,cAAe7M,KAAK+H,QAAQ8E,cAC5B8E,cAAe3R,KAAK+H,QAAQ4J,cAC5BzS,OAAQc,KAAK+H,QAAQ7I,OAAS,IAC9BC,SAAUa,KAAK+H,QAAQ5I,SACvBoK,cAAe,OACfqI,WACAE,UAAW9R,KAAK+H,QAAQ4D,cAI1B3L,KAAK8I,MAAMa,UAAYxD,EAASwD,UAChC3J,KAAK8I,MAAMc,cAAgBzD,EAASyD,cACpC5J,KAAK8I,MAAMzB,eAAiBlB,EAASkB,gBAAkBA,EACvDrH,KAAK8I,MAAMe,QAAU1D,EAAS0D,SAAW,KAEzC7J,KAAKyV,eAAc,GACnBzV,KAAK2M,eACP,CAAE,MAAOhP,GACPqC,KAAKyV,eAAc,GACnB,MAAM5O,GAAUlJ,aAAK,EAALA,EAAOkJ,UAAW,oCAClC7G,KAAK+H,QAAQ8K,QAAQ,CACnBrW,MAAMmB,eAAAA,EAAOnB,OAAQ,0BACrBqK,UACA6I,aAAa,EACb5D,QAASnO,aAAK,EAALA,EAAOsC,OAElBD,KAAKyP,UAAU,aAAc5I,EAC/B,CAtDA,MAFE7G,KAAKyP,UAAU,aAAc,oEAyDjC,CAEQ,aAAAgG,CAAcxM,SACpBjJ,KAAK8I,MAAMG,aAAeA,EAC1B,MAAM2M,EAA0B,QAAdzL,EAAAnK,KAAKgI,iBAAS,IAAAmC,OAAA,EAAAA,EAAEmB,cAAc,mBAE5CsK,IACFA,EAAUzG,SAAWlG,EACrB2M,EAAUxK,UAAYnC,EAClB,gEACA,iBAAiBhK,EAAae,KAAK+H,QAAQ7I,OAAQc,KAAK+H,QAAQ5I,mBAExE,CAEQ,oBAAMmQ,GACZ,MAAO,CACLxE,GAAI9K,KAAK8I,MAAMa,WAAa,OAAOxL,KAAKD,QACxC4I,OAAQ,UACR5H,OAAQc,KAAK+H,QAAQ7I,OACrBC,SAAUa,KAAK+H,QAAQ5I,SACvB4U,WAAW,IAAI5V,MAAO6V,cACtB9H,UAAWlM,KAAK8I,MAAMzB,qBAAkBsI,EACxCpG,cAAe,OAEnB,CAKQ,SAAAyB,GACN,MAAO,g5eA2KT,ECjiDF,MAAM6K,EAAN,WAAA9V,GACYC,KAAA8V,OAA+B,KAC/B9V,KAAA+V,aAAoC,KACpC/V,KAAAgW,aAAc,CAmK1B,CA7JI,IAAAC,CAAKH,GACIA,EAAOjQ,OAKPiQ,EAAOlG,gBAKZ5P,KAAK8V,OAAS,CACVI,MAAO,OACPC,OAAQ,WACLL,GAEP9V,KAAKgW,aAAc,EAGE,SAAjBF,EAAOI,MACPlW,KAAKoW,iBACmB,UAAjBN,EAAOI,OACdzN,SAAS4N,gBAAgBjM,UAAUC,IAAI,iBAIvCyL,EAAOQ,cACPtW,KAAKuW,kBAAkBT,EAAOQ,cAGlC7Q,QAAQkQ,IAAI,uCAvBRlQ,QAAQ9H,MAAM,6EALd8H,QAAQ9H,MAAM,kGA6BtB,CAMA,QAAA6Y,CAASzO,GACL,OAAK/H,KAAKgW,aAULjO,EAAQ7I,QAAU6I,EAAQ7I,QAAU,GACrCuG,QAAQ9H,MAAM,iCACdoK,EAAQ8K,QAAQ,CACZrW,KAAM,iBACNqK,QAAS,wCACT6I,aAAa,KAKhB3H,EAAQ5I,UAWba,KAAKyW,aAGLzW,KAAK+V,aAAe,IAAIjO,EAAa,IAC9BC,EACHc,WAAY,CACRhD,OAAQ7F,KAAK8V,OAAQjQ,OACrB+J,eAAgB5P,KAAK8V,OAAQlG,eAC7B9J,QAAS9F,KAAK8V,OAAQhQ,SAE1B6E,QAAS,WACL3K,KAAK+V,aAAe,KACL,QAAf5L,EAAApC,EAAQ4C,eAAO,IAAAR,GAAAA,EAAAuM,KAAA3O,WAIvB/H,KAAK+V,aAAajM,SA1BdrE,QAAQ9H,MAAM,uCACdoK,EAAQ8K,QAAQ,CACZrW,KAAM,mBACNqK,QAAS,4BACT6I,aAAa,MAxBjBjK,QAAQ9H,MAAM,8DACdoK,EAAQ8K,QAAQ,CACZrW,KAAM,kBACNqK,QAAS,0DACT6I,aAAa,IA2CzB,CAKA,UAAA+G,GACQzW,KAAK+V,eACL/V,KAAK+V,aAAavN,QAClBxI,KAAK+V,aAAe,KAE5B,CAMA,QAAAY,CAAST,GACLzN,SAAS4N,gBAAgBjM,UAAUI,OAAO,iBAE5B,UAAV0L,EACAzN,SAAS4N,gBAAgBjM,UAAUC,IAAI,iBACtB,SAAV6L,GACPlW,KAAKoW,iBAGLpW,KAAK8V,SACL9V,KAAK8V,OAAOI,MAAQA,EAE5B,CAKQ,cAAAE,GACgBrH,OAAO6H,WAAW,gCAAgCC,SAElEpO,SAAS4N,gBAAgBjM,UAAUC,IAAI,iBAG3C0E,OAAO6H,WAAW,gCAAgClK,iBAAiB,SAAWpE,UAC/C,kBAAvB6B,EAAAnK,KAAK8V,6BAAQI,QACbzN,SAAS4N,gBAAgBjM,UAAU0M,OAAO,iBAAkBxO,EAAEuO,UAG1E,CAKQ,iBAAAN,CAAkBQ,GACtB,MAAMC,EAAOvO,SAAS4N,gBACtB,IAAK,MAAO9N,EAAK3J,KAAUqY,OAAOC,QAAQH,GAClCnY,GACAoY,EAAK1X,MAAM6X,YAAY5O,EAAK3J,EAGxC,CAKA,WAAIqF,GACA,MAAO,OACX,CAKA,iBAAImT,GACA,OAAOpX,KAAKgW,WAChB,EAIJ,MAAMqB,EAAU,IAAIxB,QAME,oBAAX9G,SACNA,OAA8CsI,QAAUA,gNJ7IvD,SAA4BlY,GAU9B,MATwC,CACpCmY,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MACLC,IAAK,KAEMzY,EAASsS,gBAAkBtS,CAC9C"}
1
+ {"version":3,"file":"voxepay-checkout.min.js","sources":["../src/utils/card-validator.ts","../src/utils/formatter.ts","../src/utils/encryption.ts","../src/api/client.ts","../src/components/modal.ts","../src/voxepay.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["CARD_BRANDS","name","code","pattern","lengths","cvvLength","detectCardBrand","cardNumber","cleaned","replace","brand","test","luhnCheck","sum","isEven","i","length","digit","parseInt","validateCardNumber","valid","error","includes","validateExpiry","expiry","match","month","year","now","Date","currentYear","getFullYear","currentMonth","getMonth","validateCVV","cvv","expectedLength","formatCardNumber","value","join","slice","formatExpiry","formatCVV","formatAmount","amount","currency","Intl","NumberFormat","style","minimumFractionDigits","format","hexToBytes","hex","bytes","push","substring","RSABigInt","constructor","this","data","sign","fromHex","n","bitPos","current","BITS","BASE","trim","fromBytes","map","b","toString","padStart","pop","isZero","bitLength","topWord","bits","w","toBytes","h","padLen","Math","ceil","Array","fill","concat","clone","r","compareAbs","other","multiply","result","carry","j","prod","floor","modPow","exp","mod","Error","base","expBits","wordIdx","bitIdx","m","divmod","remainder","divisor","quotient","cmp","shiftLeft","subtract","qWordIdx","qBitIdx","wordShift","bitShift","max","borrow","diff","RSA_CONFIG","generateAuthData","async","version","pan","pin","expiryDate","messageBytes","str","charCodeAt","toHex","modulus","exponent","keyByteLen","padded","crypto","getRandomValues","arr","Uint8Array","random","pkcs1Pad","encryptedBytes","btoa","String","fromCharCode","Buffer","from","console","formatExpiryForApi","cleanPan","VoxePayApiClient","apiKey","baseUrl","bearerToken","setBearerToken","token","request","endpoint","body","url","response","fetch","method","headers","Accept","JSON","stringify","json","ok","errorMessage","message","status","errorCode","get","useBearerAuth","success","initiatePayment","validateOTP","resendOTP","getPaymentStatus","transactionRef","options","encodeURIComponent","queryParams","undefined","simulateWebhook","bypassKey","ICONS","CARD_BRAND_DISPLAY","visa","mastercard","amex","verve","discover","VoxePayModal","container","overlay","apiClient","statusPollingInterval","statusPollingTimeout","handleEscape","e","key","close","document","removeEventListener","methods","paymentMethods","_sdkConfig","state","otp","errors","isProcessing","isSuccess","isOtpStep","otpTimer","canResendOtp","otpTimerInterval","paymentMethod","transferTimer","transferTimerInterval","bankTransferDetails","paymentId","transactionId","eciFlag","open","injectStyles","render","attachEventListeners","requestAnimationFrame","_a","classList","add","stopTransferTimer","stopStatusPolling","remove","setTimeout","_c","onClose","getElementById","createElement","id","textContent","getStyles","head","appendChild","className","innerHTML","getModalHTML","querySelector","getPaymentMethods","formattedAmount","showTabs","isCard","description","getCardFormHTML","getBankTransferHTML","details","accountNumber","bankName","accountName","reference","formatCountdown","expiresIn","seconds","s","renderSuccessView","formContainer","closeBtn","addEventListener","renderOTPView","maskedPhone","customerEmail","attachOTPEventListeners","startOTPTimer","otpInputs","querySelectorAll","forEach","input","index","handleOTPInput","handleOTPKeydown","handleOTPPaste","verifyBtn","_b","handleOTPSubmit","resendBtn","handleResendOTP","backBtn","_d","handleBackToCard","_e","focus","target","nextInput","updateOTPState","clearError","prevInput","preventDefault","pastedData","clipboardData","getData","inputs","split","timerEl","timerContainer","window","setInterval","clearInterval","display","disabled","setOTPProcessing","verifyOTP","processPayment","onSuccess","paymentError","showError","recoverable","organizationId","cardInput","expiryInput","cvvInput","pinInput","tabs","tab","dataset","switchPaymentMethod","handleCardInput","validateField","handleExpiryInput","_f","handleCVVInput","_g","handlePinInput","form","_h","handleSubmit","attachBankTransferListeners","startTransferTimer","loadBankTransferDetails","copyBtn","accountNum","copy","copyToClipboard","confirmBtn","handleTransferConfirm","onBankTransferRequested","toUpperCase","customerId","customerPhone","authData","source","narration","durationMinutes","va","virtualAccount","expiresAtDate","expires_at","nowMs","expiresInSeconds","getTime","account_number","bank_name","account_name","expiresAt","getDVAErrorTitle","retryBtn","onError","ACCOUNT_CREATION_FAILED","ACCOUNT_EXPIRED","INVALID_AMOUNT","UNAUTHORIZED","ORGANIZATION_NOT_FOUND","MISSING_VIRTUAL_ACCOUNT","SDK_ERROR","text","navigator","clipboard","writeText","textarea","position","opacity","select","execCommand","removeChild","timestamp","toISOString","renderPollingView","startStatusPolling","cancelBtn","amt","poll","statusData","handlePollingStatusUpdate","statusEl","clearTimeout","completedAt","renderTransferErrorView","overpaid","title","countdownEl","formatted","brandEl","field","validatePIN","errorEl","inputEl","isCardValid","isExpiryValid","isCVVValid","isPinValid","setProcessing","payload","log","submitBtn","VoxePaySDK","config","currentModal","initialized","init","theme","locale","applyAutoTheme","documentElement","customStyles","applyCustomStyles","checkout","closeModal","call","setTheme","matchMedia","matches","toggle","styles","root","Object","entries","setProperty","isInitialized","VoxePay","NGN","USD","EUR","GBP","GHS","KES","ZAR"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voxepay/checkout",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Modern payment checkout modal for VoxePay - beautiful, fast, and secure",
5
5
  "author": "VoxePay",
6
6
  "license": "MIT",